@effect-auth/core 0.1.0-alpha.1 → 0.1.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/README.md +790 -73
  2. package/dist/ApiKey.d.ts +207 -0
  3. package/dist/ApiKey.d.ts.map +1 -0
  4. package/dist/ApiKey.js +275 -0
  5. package/dist/ApiKey.js.map +1 -0
  6. package/dist/AuditLog.d.ts +335 -1
  7. package/dist/AuditLog.d.ts.map +1 -1
  8. package/dist/AuditLog.js +318 -1
  9. package/dist/AuditLog.js.map +1 -1
  10. package/dist/AuthConfig.d.ts +42 -0
  11. package/dist/AuthConfig.d.ts.map +1 -0
  12. package/dist/AuthConfig.js +43 -0
  13. package/dist/AuthConfig.js.map +1 -0
  14. package/dist/AuthFlow.d.ts +462 -36
  15. package/dist/AuthFlow.d.ts.map +1 -1
  16. package/dist/AuthFlow.js +657 -5
  17. package/dist/AuthFlow.js.map +1 -1
  18. package/dist/AuthKernel.d.ts +3 -0
  19. package/dist/AuthKernel.d.ts.map +1 -0
  20. package/dist/AuthKernel.js +9 -0
  21. package/dist/AuthKernel.js.map +1 -0
  22. package/dist/Challenge.d.ts +24 -4
  23. package/dist/Challenge.d.ts.map +1 -1
  24. package/dist/Challenge.js +167 -1
  25. package/dist/Challenge.js.map +1 -1
  26. package/dist/Client.d.ts +449 -0
  27. package/dist/Client.d.ts.map +1 -0
  28. package/dist/Client.js +985 -0
  29. package/dist/Client.js.map +1 -0
  30. package/dist/Crypto.d.ts +6 -1
  31. package/dist/Crypto.d.ts.map +1 -1
  32. package/dist/Crypto.js +62 -1
  33. package/dist/Crypto.js.map +1 -1
  34. package/dist/DomainVerification.d.ts +200 -0
  35. package/dist/DomainVerification.d.ts.map +1 -0
  36. package/dist/DomainVerification.js +304 -0
  37. package/dist/DomainVerification.js.map +1 -0
  38. package/dist/EffectQbSqliteStorage.d.ts +985 -0
  39. package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
  40. package/dist/EffectQbSqliteStorage.js +2824 -0
  41. package/dist/EffectQbSqliteStorage.js.map +1 -0
  42. package/dist/EmailOtp.d.ts +120 -0
  43. package/dist/EmailOtp.d.ts.map +1 -0
  44. package/dist/EmailOtp.js +286 -0
  45. package/dist/EmailOtp.js.map +1 -0
  46. package/dist/EmailVerification.d.ts +121 -0
  47. package/dist/EmailVerification.d.ts.map +1 -0
  48. package/dist/EmailVerification.js +200 -0
  49. package/dist/EmailVerification.js.map +1 -0
  50. package/dist/HttpApi/Api.d.ts +2410 -0
  51. package/dist/HttpApi/Api.d.ts.map +1 -0
  52. package/dist/HttpApi/Api.js +3026 -0
  53. package/dist/HttpApi/Api.js.map +1 -0
  54. package/dist/HttpApi/Endpoints.d.ts +1073 -0
  55. package/dist/HttpApi/Endpoints.d.ts.map +1 -0
  56. package/dist/HttpApi/Endpoints.js +428 -0
  57. package/dist/HttpApi/Endpoints.js.map +1 -0
  58. package/dist/HttpApi/Errors.d.ts +114 -0
  59. package/dist/HttpApi/Errors.d.ts.map +1 -0
  60. package/dist/HttpApi/Errors.js +230 -0
  61. package/dist/HttpApi/Errors.js.map +1 -0
  62. package/dist/HttpApi/Schemas.d.ts +1254 -0
  63. package/dist/HttpApi/Schemas.d.ts.map +1 -0
  64. package/dist/HttpApi/Schemas.js +862 -0
  65. package/dist/HttpApi/Schemas.js.map +1 -0
  66. package/dist/HttpApi/Security.d.ts +159 -0
  67. package/dist/HttpApi/Security.d.ts.map +1 -0
  68. package/dist/HttpApi/Security.js +530 -0
  69. package/dist/HttpApi/Security.js.map +1 -0
  70. package/dist/HttpApi/Transport.d.ts +65 -0
  71. package/dist/HttpApi/Transport.d.ts.map +1 -0
  72. package/dist/HttpApi/Transport.js +311 -0
  73. package/dist/HttpApi/Transport.js.map +1 -0
  74. package/dist/HttpApi/index.d.ts +8 -0
  75. package/dist/HttpApi/index.d.ts.map +1 -0
  76. package/dist/HttpApi/index.js +7 -0
  77. package/dist/HttpApi/index.js.map +1 -0
  78. package/dist/HttpApi.d.ts +2 -0
  79. package/dist/HttpApi.d.ts.map +1 -0
  80. package/dist/HttpApi.js +2 -0
  81. package/dist/HttpApi.js.map +1 -0
  82. package/dist/Identifiers.d.ts +3 -0
  83. package/dist/Identifiers.d.ts.map +1 -1
  84. package/dist/Identifiers.js +2 -0
  85. package/dist/Identifiers.js.map +1 -1
  86. package/dist/IncidentAction.d.ts +80 -0
  87. package/dist/IncidentAction.d.ts.map +1 -0
  88. package/dist/IncidentAction.js +158 -0
  89. package/dist/IncidentAction.js.map +1 -0
  90. package/dist/Internal.d.ts +7 -0
  91. package/dist/Internal.d.ts.map +1 -0
  92. package/dist/Internal.js +12 -0
  93. package/dist/Internal.js.map +1 -0
  94. package/dist/Jwt.d.ts +281 -0
  95. package/dist/Jwt.d.ts.map +1 -0
  96. package/dist/Jwt.js +721 -0
  97. package/dist/Jwt.js.map +1 -0
  98. package/dist/LoginApproval.d.ts +314 -0
  99. package/dist/LoginApproval.d.ts.map +1 -0
  100. package/dist/LoginApproval.js +551 -0
  101. package/dist/LoginApproval.js.map +1 -0
  102. package/dist/LoginNotification.d.ts +183 -0
  103. package/dist/LoginNotification.d.ts.map +1 -0
  104. package/dist/LoginNotification.js +329 -0
  105. package/dist/LoginNotification.js.map +1 -0
  106. package/dist/LoginRisk.d.ts +344 -0
  107. package/dist/LoginRisk.d.ts.map +1 -0
  108. package/dist/LoginRisk.js +484 -0
  109. package/dist/LoginRisk.js.map +1 -0
  110. package/dist/MachineAuth.d.ts +73 -0
  111. package/dist/MachineAuth.d.ts.map +1 -0
  112. package/dist/MachineAuth.js +147 -0
  113. package/dist/MachineAuth.js.map +1 -0
  114. package/dist/MagicLink.d.ts +85 -0
  115. package/dist/MagicLink.d.ts.map +1 -0
  116. package/dist/MagicLink.js +206 -0
  117. package/dist/MagicLink.js.map +1 -0
  118. package/dist/Mailer.d.ts +147 -0
  119. package/dist/Mailer.d.ts.map +1 -0
  120. package/dist/Mailer.js +208 -0
  121. package/dist/Mailer.js.map +1 -0
  122. package/dist/OAuth.d.ts +1890 -0
  123. package/dist/OAuth.d.ts.map +1 -0
  124. package/dist/OAuth.js +3063 -0
  125. package/dist/OAuth.js.map +1 -0
  126. package/dist/Passkey.d.ts +334 -0
  127. package/dist/Passkey.d.ts.map +1 -0
  128. package/dist/Passkey.js +422 -0
  129. package/dist/Passkey.js.map +1 -0
  130. package/dist/PasskeySimpleWebAuthn.d.ts +11 -0
  131. package/dist/PasskeySimpleWebAuthn.d.ts.map +1 -0
  132. package/dist/PasskeySimpleWebAuthn.js +181 -0
  133. package/dist/PasskeySimpleWebAuthn.js.map +1 -0
  134. package/dist/Password.d.ts +237 -0
  135. package/dist/Password.d.ts.map +1 -0
  136. package/dist/Password.js +641 -0
  137. package/dist/Password.js.map +1 -0
  138. package/dist/Policy.d.ts +7 -4
  139. package/dist/Policy.d.ts.map +1 -1
  140. package/dist/Policy.js +28 -5
  141. package/dist/Policy.js.map +1 -1
  142. package/dist/Privacy.d.ts +15 -0
  143. package/dist/Privacy.d.ts.map +1 -1
  144. package/dist/Privacy.js +58 -1
  145. package/dist/Privacy.js.map +1 -1
  146. package/dist/RateLimiter.d.ts +104 -0
  147. package/dist/RateLimiter.d.ts.map +1 -0
  148. package/dist/RateLimiter.js +118 -0
  149. package/dist/RateLimiter.js.map +1 -0
  150. package/dist/RecoveryCode.d.ts +169 -0
  151. package/dist/RecoveryCode.d.ts.map +1 -0
  152. package/dist/RecoveryCode.js +299 -0
  153. package/dist/RecoveryCode.js.map +1 -0
  154. package/dist/RefreshToken.d.ts +222 -0
  155. package/dist/RefreshToken.d.ts.map +1 -0
  156. package/dist/RefreshToken.js +342 -0
  157. package/dist/RefreshToken.js.map +1 -0
  158. package/dist/Retention.d.ts +98 -0
  159. package/dist/Retention.d.ts.map +1 -0
  160. package/dist/Retention.js +204 -0
  161. package/dist/Retention.js.map +1 -0
  162. package/dist/SecurityTimeline.d.ts +78 -0
  163. package/dist/SecurityTimeline.d.ts.map +1 -0
  164. package/dist/SecurityTimeline.js +461 -0
  165. package/dist/SecurityTimeline.js.map +1 -0
  166. package/dist/Sessions.d.ts +123 -11
  167. package/dist/Sessions.d.ts.map +1 -1
  168. package/dist/Sessions.js +534 -1
  169. package/dist/Sessions.js.map +1 -1
  170. package/dist/StepUp.d.ts +44 -0
  171. package/dist/StepUp.d.ts.map +1 -0
  172. package/dist/StepUp.js +82 -0
  173. package/dist/StepUp.js.map +1 -0
  174. package/dist/Storage.d.ts +73 -5
  175. package/dist/Storage.d.ts.map +1 -1
  176. package/dist/Storage.js +11 -1
  177. package/dist/Storage.js.map +1 -1
  178. package/dist/StorageMigrations.d.ts +23 -1
  179. package/dist/StorageMigrations.d.ts.map +1 -1
  180. package/dist/StorageMigrations.js +462 -2
  181. package/dist/StorageMigrations.js.map +1 -1
  182. package/dist/Testing.d.ts +9 -1
  183. package/dist/Testing.d.ts.map +1 -1
  184. package/dist/Testing.js +30 -2
  185. package/dist/Testing.js.map +1 -1
  186. package/dist/Totp.d.ts +220 -0
  187. package/dist/Totp.d.ts.map +1 -0
  188. package/dist/Totp.js +477 -0
  189. package/dist/Totp.js.map +1 -0
  190. package/dist/TrustedDevice.d.ts +127 -0
  191. package/dist/TrustedDevice.d.ts.map +1 -0
  192. package/dist/TrustedDevice.js +252 -0
  193. package/dist/TrustedDevice.js.map +1 -0
  194. package/dist/WaitUntil.d.ts.map +1 -1
  195. package/dist/WaitUntil.js +1 -1
  196. package/dist/WaitUntil.js.map +1 -1
  197. package/dist/Webhook.d.ts +380 -0
  198. package/dist/Webhook.d.ts.map +1 -0
  199. package/dist/Webhook.js +592 -0
  200. package/dist/Webhook.js.map +1 -0
  201. package/dist/alchemy/cloudflare/Email.d.ts +25 -0
  202. package/dist/alchemy/cloudflare/Email.d.ts.map +1 -0
  203. package/dist/alchemy/cloudflare/Email.js +117 -0
  204. package/dist/alchemy/cloudflare/Email.js.map +1 -0
  205. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +34 -0
  206. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  207. package/dist/alchemy/cloudflare/RateLimitDurableObject.js +30 -0
  208. package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -0
  209. package/dist/cloudflare/Email.d.ts +25 -0
  210. package/dist/cloudflare/Email.d.ts.map +1 -0
  211. package/dist/cloudflare/Email.js +153 -0
  212. package/dist/cloudflare/Email.js.map +1 -0
  213. package/dist/cloudflare/RateLimitDurableObject.d.ts +50 -0
  214. package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  215. package/dist/cloudflare/RateLimitDurableObject.js +51 -0
  216. package/dist/cloudflare/RateLimitDurableObject.js.map +1 -0
  217. package/dist/index.d.ts +25 -0
  218. package/dist/index.d.ts.map +1 -1
  219. package/dist/index.js +25 -0
  220. package/dist/index.js.map +1 -1
  221. package/dist/internal/RateLimitDurableObject.d.ts +32 -0
  222. package/dist/internal/RateLimitDurableObject.d.ts.map +1 -0
  223. package/dist/internal/RateLimitDurableObject.js +80 -0
  224. package/dist/internal/RateLimitDurableObject.js.map +1 -0
  225. package/migrations/0002_auth_password.sql +25 -0
  226. package/migrations/0003_auth_login_approval_review.sql +22 -0
  227. package/migrations/0004_auth_trusted_device.sql +12 -0
  228. package/migrations/0005_auth_passkey.sql +17 -0
  229. package/migrations/0006_auth_totp_factor.sql +17 -0
  230. package/migrations/0007_auth_recovery_code.sql +13 -0
  231. package/migrations/0008_auth_api_key.sql +17 -0
  232. package/migrations/0009_auth_refresh_token.sql +21 -0
  233. package/migrations/0010_auth_jwt_revocation.sql +8 -0
  234. package/migrations/0011_auth_oauth_account.sql +16 -0
  235. package/migrations/0012_auth_oauth_provider_token_vault.sql +20 -0
  236. package/migrations/0013_auth_security_timeline.sql +16 -0
  237. package/migrations/0014_auth_webhook_outbox.sql +16 -0
  238. package/migrations/0015_auth_webhook_replay.sql +7 -0
  239. package/migrations/0016_auth_login_risk_history.sql +23 -0
  240. package/migrations/0017_auth_audit_log.sql +17 -0
  241. package/migrations/0018_auth_domain_verification.sql +18 -0
  242. package/migrations/0019_auth_oauth_authorization_code.sql +17 -0
  243. package/migrations/0020_auth_oauth_provider_mode_token.sql +24 -0
  244. package/migrations/0021_auth_oauth_client_secret.sql +14 -0
  245. package/migrations/0022_auth_oauth_client.sql +15 -0
  246. package/migrations/0023_auth_oauth_consent.sql +15 -0
  247. package/package.json +162 -26
  248. package/dist/D1Kysely.d.ts +0 -40
  249. package/dist/D1Kysely.d.ts.map +0 -1
  250. package/dist/D1Kysely.js +0 -75
  251. package/dist/D1Kysely.js.map +0 -1
  252. package/dist/KyselyStorage.d.ts +0 -41
  253. package/dist/KyselyStorage.d.ts.map +0 -1
  254. package/dist/KyselyStorage.js +0 -176
  255. package/dist/KyselyStorage.js.map +0 -1
package/package.json CHANGED
@@ -1,18 +1,26 @@
1
1
  {
2
2
  "name": "@effect-auth/core",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.13",
4
4
  "description": "Composable Effect-first authentication primitives.",
5
- "type": "module",
6
5
  "license": "MIT",
6
+ "files": [
7
+ "dist/**/*.d.ts",
8
+ "dist/**/*.d.ts.map",
9
+ "dist/**/*.js",
10
+ "dist/**/*.js.map",
11
+ "migrations/**/*.sql"
12
+ ],
13
+ "type": "module",
7
14
  "sideEffects": false,
8
- "publishConfig": {
9
- "access": "public"
10
- },
11
15
  "exports": {
12
16
  ".": {
13
17
  "types": "./dist/index.d.ts",
14
18
  "default": "./dist/index.js"
15
19
  },
20
+ "./ApiKey": {
21
+ "types": "./dist/ApiKey.d.ts",
22
+ "default": "./dist/ApiKey.js"
23
+ },
16
24
  "./AuditLog": {
17
25
  "types": "./dist/AuditLog.d.ts",
18
26
  "default": "./dist/AuditLog.js"
@@ -21,26 +29,110 @@
21
29
  "types": "./dist/AuthFlow.d.ts",
22
30
  "default": "./dist/AuthFlow.js"
23
31
  },
32
+ "./AuthConfig": {
33
+ "types": "./dist/AuthConfig.d.ts",
34
+ "default": "./dist/AuthConfig.js"
35
+ },
36
+ "./AuthKernel": {
37
+ "types": "./dist/AuthKernel.d.ts",
38
+ "default": "./dist/AuthKernel.js"
39
+ },
24
40
  "./Challenge": {
25
41
  "types": "./dist/Challenge.d.ts",
26
42
  "default": "./dist/Challenge.js"
27
43
  },
44
+ "./AlchemyCloudflareRateLimitDurableObject": {
45
+ "types": "./dist/alchemy/cloudflare/RateLimitDurableObject.d.ts",
46
+ "default": "./dist/alchemy/cloudflare/RateLimitDurableObject.js"
47
+ },
48
+ "./AlchemyCloudflareEmail": {
49
+ "types": "./dist/alchemy/cloudflare/Email.d.ts",
50
+ "default": "./dist/alchemy/cloudflare/Email.js"
51
+ },
52
+ "./CloudflareRateLimitDurableObject": {
53
+ "types": "./dist/cloudflare/RateLimitDurableObject.d.ts",
54
+ "default": "./dist/cloudflare/RateLimitDurableObject.js"
55
+ },
56
+ "./CloudflareEmail": {
57
+ "types": "./dist/cloudflare/Email.d.ts",
58
+ "default": "./dist/cloudflare/Email.js"
59
+ },
60
+ "./Client": {
61
+ "types": "./dist/Client.d.ts",
62
+ "default": "./dist/Client.js"
63
+ },
28
64
  "./Crypto": {
29
65
  "types": "./dist/Crypto.d.ts",
30
66
  "default": "./dist/Crypto.js"
31
67
  },
32
- "./D1Kysely": {
33
- "types": "./dist/D1Kysely.d.ts",
34
- "default": "./dist/D1Kysely.js"
68
+ "./DomainVerification": {
69
+ "types": "./dist/DomainVerification.d.ts",
70
+ "default": "./dist/DomainVerification.js"
71
+ },
72
+ "./EffectQbSqliteStorage": {
73
+ "types": "./dist/EffectQbSqliteStorage.d.ts",
74
+ "default": "./dist/EffectQbSqliteStorage.js"
75
+ },
76
+ "./EmailOtp": {
77
+ "types": "./dist/EmailOtp.d.ts",
78
+ "default": "./dist/EmailOtp.js"
79
+ },
80
+ "./EmailVerification": {
81
+ "types": "./dist/EmailVerification.d.ts",
82
+ "default": "./dist/EmailVerification.js"
35
83
  },
36
84
  "./WaitUntil": {
37
85
  "types": "./dist/WaitUntil.d.ts",
38
86
  "default": "./dist/WaitUntil.js"
39
87
  },
88
+ "./Webhook": {
89
+ "types": "./dist/Webhook.d.ts",
90
+ "default": "./dist/Webhook.js"
91
+ },
40
92
  "./Identifiers": {
41
93
  "types": "./dist/Identifiers.d.ts",
42
94
  "default": "./dist/Identifiers.js"
43
95
  },
96
+ "./IncidentAction": {
97
+ "types": "./dist/IncidentAction.d.ts",
98
+ "default": "./dist/IncidentAction.js"
99
+ },
100
+ "./LoginApproval": {
101
+ "types": "./dist/LoginApproval.d.ts",
102
+ "default": "./dist/LoginApproval.js"
103
+ },
104
+ "./LoginNotification": {
105
+ "types": "./dist/LoginNotification.d.ts",
106
+ "default": "./dist/LoginNotification.js"
107
+ },
108
+ "./LoginRisk": {
109
+ "types": "./dist/LoginRisk.d.ts",
110
+ "default": "./dist/LoginRisk.js"
111
+ },
112
+ "./MachineAuth": {
113
+ "types": "./dist/MachineAuth.d.ts",
114
+ "default": "./dist/MachineAuth.js"
115
+ },
116
+ "./Jwt": {
117
+ "types": "./dist/Jwt.d.ts",
118
+ "default": "./dist/Jwt.js"
119
+ },
120
+ "./HttpApi": {
121
+ "types": "./dist/HttpApi.d.ts",
122
+ "default": "./dist/HttpApi.js"
123
+ },
124
+ "./Mailer": {
125
+ "types": "./dist/Mailer.d.ts",
126
+ "default": "./dist/Mailer.js"
127
+ },
128
+ "./MagicLink": {
129
+ "types": "./dist/MagicLink.d.ts",
130
+ "default": "./dist/MagicLink.js"
131
+ },
132
+ "./OAuth": {
133
+ "types": "./dist/OAuth.d.ts",
134
+ "default": "./dist/OAuth.js"
135
+ },
44
136
  "./Policy": {
45
137
  "types": "./dist/Policy.d.ts",
46
138
  "default": "./dist/Policy.js"
@@ -49,18 +141,50 @@
49
141
  "types": "./dist/Privacy.d.ts",
50
142
  "default": "./dist/Privacy.js"
51
143
  },
52
- "./KyselyStorage": {
53
- "types": "./dist/KyselyStorage.d.ts",
54
- "default": "./dist/KyselyStorage.js"
144
+ "./RateLimiter": {
145
+ "types": "./dist/RateLimiter.d.ts",
146
+ "default": "./dist/RateLimiter.js"
147
+ },
148
+ "./RecoveryCode": {
149
+ "types": "./dist/RecoveryCode.d.ts",
150
+ "default": "./dist/RecoveryCode.js"
151
+ },
152
+ "./RefreshToken": {
153
+ "types": "./dist/RefreshToken.d.ts",
154
+ "default": "./dist/RefreshToken.js"
155
+ },
156
+ "./Retention": {
157
+ "types": "./dist/Retention.d.ts",
158
+ "default": "./dist/Retention.js"
159
+ },
160
+ "./Password": {
161
+ "types": "./dist/Password.d.ts",
162
+ "default": "./dist/Password.js"
163
+ },
164
+ "./Passkey": {
165
+ "types": "./dist/Passkey.d.ts",
166
+ "default": "./dist/Passkey.js"
167
+ },
168
+ "./PasskeySimpleWebAuthn": {
169
+ "types": "./dist/PasskeySimpleWebAuthn.d.ts",
170
+ "default": "./dist/PasskeySimpleWebAuthn.js"
55
171
  },
56
172
  "./Sessions": {
57
173
  "types": "./dist/Sessions.d.ts",
58
174
  "default": "./dist/Sessions.js"
59
175
  },
176
+ "./SecurityTimeline": {
177
+ "types": "./dist/SecurityTimeline.d.ts",
178
+ "default": "./dist/SecurityTimeline.js"
179
+ },
60
180
  "./Storage": {
61
181
  "types": "./dist/Storage.d.ts",
62
182
  "default": "./dist/Storage.js"
63
183
  },
184
+ "./StepUp": {
185
+ "types": "./dist/StepUp.d.ts",
186
+ "default": "./dist/StepUp.js"
187
+ },
64
188
  "./StorageMigrations": {
65
189
  "types": "./dist/StorageMigrations.d.ts",
66
190
  "default": "./dist/StorageMigrations.js"
@@ -69,25 +193,20 @@
69
193
  "types": "./dist/Testing.d.ts",
70
194
  "default": "./dist/Testing.js"
71
195
  },
196
+ "./Totp": {
197
+ "types": "./dist/Totp.d.ts",
198
+ "default": "./dist/Totp.js"
199
+ },
200
+ "./TrustedDevice": {
201
+ "types": "./dist/TrustedDevice.d.ts",
202
+ "default": "./dist/TrustedDevice.js"
203
+ },
72
204
  "./package.json": {
73
205
  "default": "./package.json"
74
206
  }
75
207
  },
76
- "files": [
77
- "dist/**/*.d.ts",
78
- "dist/**/*.d.ts.map",
79
- "dist/**/*.js",
80
- "dist/**/*.js.map",
81
- "migrations/**/*.sql"
82
- ],
83
- "peerDependencies": {
84
- "effect": "^4.0.0-beta.67",
85
- "kysely": "^0.29.2"
86
- },
87
- "peerDependenciesMeta": {
88
- "kysely": {
89
- "optional": true
90
- }
208
+ "publishConfig": {
209
+ "access": "public"
91
210
  },
92
211
  "scripts": {
93
212
  "build": "tsc -b",
@@ -96,5 +215,22 @@
96
215
  "test": "bun run build && bun --bun vitest run --config ../../vitest.config.ts",
97
216
  "test-type": "tsc -p tsconfig.test.json --pretty false",
98
217
  "type-test": "tsc -p tsconfig.type-tests.json --pretty false"
218
+ },
219
+ "peerDependencies": {
220
+ "@simplewebauthn/server": "^13.3.1",
221
+ "alchemy": ">=2.0.0-beta.44 <3",
222
+ "effect": "^4.0.0-beta.67",
223
+ "effect-qb": "4.0.0-beta.66"
224
+ },
225
+ "peerDependenciesMeta": {
226
+ "@simplewebauthn/server": {
227
+ "optional": true
228
+ },
229
+ "alchemy": {
230
+ "optional": true
231
+ },
232
+ "effect-qb": {
233
+ "optional": true
234
+ }
99
235
  }
100
236
  }
@@ -1,40 +0,0 @@
1
- import { Kysely, SqliteAdapter, type DatabaseIntrospector, type Dialect, type Driver, type QueryCompiler } from "kysely";
2
- export interface D1Result<Row extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>> {
3
- readonly success?: boolean;
4
- readonly error?: string;
5
- readonly results?: ReadonlyArray<Row>;
6
- readonly meta?: {
7
- readonly changes?: number;
8
- readonly rows_written?: number;
9
- readonly last_row_id?: number | null;
10
- };
11
- }
12
- export interface D1PreparedStatementLike {
13
- readonly bind: (...values: ReadonlyArray<unknown>) => D1PreparedStatementLike;
14
- readonly all: <Row extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>>() => Promise<D1Result<Row>>;
15
- }
16
- export interface D1DatabaseLike {
17
- readonly prepare: (sql: string) => D1PreparedStatementLike;
18
- }
19
- declare const D1KyselyError_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 & {
20
- readonly _tag: "D1KyselyError";
21
- } & Readonly<A>;
22
- export declare class D1KyselyError extends D1KyselyError_base<{
23
- readonly message: string;
24
- readonly cause?: unknown;
25
- }> {
26
- }
27
- export interface D1KyselyDialectOptions {
28
- readonly database: D1DatabaseLike;
29
- }
30
- export declare class D1KyselyDialect implements Dialect {
31
- #private;
32
- constructor(options: D1KyselyDialectOptions);
33
- createAdapter(): SqliteAdapter;
34
- createDriver(): Driver;
35
- createQueryCompiler(): QueryCompiler;
36
- createIntrospector(db: Kysely<unknown>): DatabaseIntrospector;
37
- }
38
- export declare const makeD1Kysely: <DB>(database: D1DatabaseLike) => Kysely<DB>;
39
- export {};
40
- //# sourceMappingURL=D1Kysely.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"D1Kysely.d.ts","sourceRoot":"","sources":["../src/D1Kysely.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACN,aAAa,EAKb,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,aAAa,EAGnB,MAAM,QAAQ,CAAA;AAEf,MAAM,WAAW,QAAQ,CAAC,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzG,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;QAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KACrC,CAAA;CACF;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,uBAAuB,CAAA;IAC7E,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;CAC9H;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,uBAAuB,CAAA;CAC3D;;;;AAED,qBAAa,aAAc,SAAQ,mBAAkC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC;CAAG;AAEL,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;CAClC;AAED,qBAAa,eAAgB,YAAW,OAAO;;gBAGjC,OAAO,EAAE,sBAAsB;IAI3C,aAAa;IAIb,YAAY,IAAI,MAAM;IAItB,mBAAmB,IAAI,aAAa;IAIpC,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,oBAAoB;CAG9D;AAmED,eAAO,MAAM,YAAY,GAAI,EAAE,EAAE,UAAU,cAAc,KAAG,MAAM,CAAC,EAAE,CAGjE,CAAA"}
package/dist/D1Kysely.js DELETED
@@ -1,75 +0,0 @@
1
- import { Data } from "effect";
2
- import { Kysely, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler } from "kysely";
3
- export class D1KyselyError extends Data.TaggedError("D1KyselyError") {
4
- }
5
- export class D1KyselyDialect {
6
- #database;
7
- constructor(options) {
8
- this.#database = options.database;
9
- }
10
- createAdapter() {
11
- return new SqliteAdapter();
12
- }
13
- createDriver() {
14
- return new D1KyselyDriver(this.#database);
15
- }
16
- createQueryCompiler() {
17
- return new SqliteQueryCompiler();
18
- }
19
- createIntrospector(db) {
20
- return new SqliteIntrospector(db);
21
- }
22
- }
23
- class D1KyselyDriver {
24
- #database;
25
- constructor(database) {
26
- this.#database = database;
27
- }
28
- async init() { }
29
- async acquireConnection() {
30
- return new D1KyselyConnection(this.#database);
31
- }
32
- async beginTransaction(_connection, _settings) {
33
- throw new D1KyselyError({ message: "D1 transactions are not supported" });
34
- }
35
- async commitTransaction(_connection) {
36
- throw new D1KyselyError({ message: "D1 transactions are not supported" });
37
- }
38
- async rollbackTransaction(_connection) {
39
- throw new D1KyselyError({ message: "D1 transactions are not supported" });
40
- }
41
- async releaseConnection(_connection) { }
42
- async destroy() { }
43
- }
44
- class D1KyselyConnection {
45
- #database;
46
- constructor(database) {
47
- this.#database = database;
48
- }
49
- async executeQuery(compiledQuery) {
50
- const result = await this.#database
51
- .prepare(compiledQuery.sql)
52
- .bind(...compiledQuery.parameters)
53
- .all();
54
- if (result.success === false || result.error !== undefined) {
55
- throw new D1KyselyError({
56
- message: result.error ?? "D1 query failed"
57
- });
58
- }
59
- const rowsAffected = result.meta?.changes ?? result.meta?.rows_written ?? 0;
60
- return {
61
- insertId: result.meta?.last_row_id === undefined || result.meta.last_row_id === null
62
- ? undefined
63
- : BigInt(result.meta.last_row_id),
64
- numAffectedRows: BigInt(rowsAffected),
65
- rows: [...(result.results ?? [])]
66
- };
67
- }
68
- async *streamQuery(_compiledQuery, _chunkSize) {
69
- throw new D1KyselyError({ message: "D1 streaming is not supported" });
70
- }
71
- }
72
- export const makeD1Kysely = (database) => new Kysely({
73
- dialect: new D1KyselyDialect({ database })
74
- });
75
- //# sourceMappingURL=D1Kysely.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"D1Kysely.js","sourceRoot":"","sources":["../src/D1Kysely.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EACL,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EASpB,MAAM,QAAQ,CAAA;AAsBf,MAAM,OAAO,aAAc,SAAQ,IAAI,CAAC,WAAW,CAAC,eAAe,CAGjE;CAAG;AAML,MAAM,OAAO,eAAe;IACjB,SAAS,CAAgB;IAElC,YAAY,OAA+B;QACzC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAA;IACnC,CAAC;IAED,aAAa;QACX,OAAO,IAAI,aAAa,EAAE,CAAA;IAC5B,CAAC;IAED,YAAY;QACV,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3C,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,mBAAmB,EAAE,CAAA;IAClC,CAAC;IAED,kBAAkB,CAAC,EAAmB;QACpC,OAAO,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC;CACF;AAED,MAAM,cAAc;IACT,SAAS,CAAgB;IAElC,YAAY,QAAwB;QAClC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,IAAI,KAAmB,CAAC;IAE9B,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,WAA+B,EAAE,SAA8B;QACpF,MAAM,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAA+B;QACrD,MAAM,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,WAA+B;QACvD,MAAM,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAA+B,IAAkB,CAAC;IAE1E,KAAK,CAAC,OAAO,KAAmB,CAAC;CAClC;AAED,MAAM,kBAAkB;IACb,SAAS,CAAgB;IAElC,YAAY,QAAwB;QAClC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,YAAY,CAAM,aAA4B;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS;aAChC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;aAC1B,IAAI,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC;aACjC,GAAG,EAA2C,CAAA;QAEjD,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC3D,MAAM,IAAI,aAAa,CAAC;gBACtB,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,iBAAiB;aAC3C,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,CAAA;QAE3E,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI;gBAClF,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YACnC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC;YACrC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAe;SAChD,CAAA;IACH,CAAC;IAED,KAAK,CAAC,CAAC,WAAW,CAAM,cAA6B,EAAE,UAAkB;QACvE,MAAM,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAA;IACvE,CAAC;CACF;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAK,QAAwB,EAAc,EAAE,CACvE,IAAI,MAAM,CAAK;IACb,OAAO,EAAE,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC3C,CAAC,CAAA"}
@@ -1,41 +0,0 @@
1
- import { Layer } from "effect";
2
- import type { Kysely } from "kysely";
3
- import { SessionStore, VerificationStore, type SessionStoreService, type VerificationStoreService } from "./Storage.js";
4
- export interface KyselyAuthSessionTable {
5
- id: string;
6
- user_id: string;
7
- secret_hash: string;
8
- created_at: number;
9
- expires_at: number;
10
- auth_time: number;
11
- aal: string;
12
- amr: string;
13
- mfa_verified_at: number | null;
14
- metadata: string | null;
15
- revoked_at: number | null;
16
- last_seen_at: number | null;
17
- rotated_at: number | null;
18
- }
19
- export interface KyselyAuthVerificationTable {
20
- id: string;
21
- type: string;
22
- subject: string;
23
- secret_hash: string | null;
24
- created_at: number;
25
- expires_at: number;
26
- metadata: string | null;
27
- consumed_at: number | null;
28
- }
29
- export interface KyselyAuthDatabase {
30
- readonly auth_session: KyselyAuthSessionTable;
31
- readonly auth_verification: KyselyAuthVerificationTable;
32
- }
33
- export interface KyselyStorageStores {
34
- readonly sessionStore: SessionStoreService;
35
- readonly verificationStore: VerificationStoreService;
36
- }
37
- export declare const makeKyselySessionStore: <DB extends KyselyAuthDatabase>(db: Kysely<DB>) => SessionStoreService;
38
- export declare const makeKyselyVerificationStore: <DB extends KyselyAuthDatabase>(db: Kysely<DB>) => VerificationStoreService;
39
- export declare const makeKyselyStorage: <DB extends KyselyAuthDatabase>(db: Kysely<DB>) => KyselyStorageStores;
40
- export declare const KyselyAuthStorageLive: <DB extends KyselyAuthDatabase>(db: Kysely<DB>) => Layer.Layer<SessionStore | VerificationStore, never, never>;
41
- //# sourceMappingURL=KyselyStorage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KyselyStorage.d.ts","sourceRoot":"","sources":["../src/KyselyStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAA;AAC9C,OAAO,KAAK,EAAc,MAAM,EAAc,MAAM,QAAQ,CAAA;AAG5D,OAAO,EACL,YAAY,EAEZ,iBAAiB,EAQjB,KAAK,mBAAmB,EAIxB,KAAK,wBAAwB,EAC9B,MAAM,cAAc,CAAA;AAIrB,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAA;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,2BAA2B,CAAA;CACxD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAA;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,wBAAwB,CAAA;CACrD;AA8GD,eAAO,MAAM,sBAAsB,GAAI,EAAE,SAAS,kBAAkB,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,KAAG,mBAiEtF,CAAA;AAED,eAAO,MAAM,2BAA2B,GAAI,EAAE,SAAS,kBAAkB,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,KAAG,wBA2D3F,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,EAAE,SAAS,kBAAkB,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,KAAG,mBAGhF,CAAA;AAEF,eAAO,MAAM,qBAAqB,GAAI,EAAE,SAAS,kBAAkB,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,gEAIhF,CAAA"}
@@ -1,176 +0,0 @@
1
- import { Effect, Layer, Option } from "effect";
2
- import { ChallengeId, SessionId, UnixMillis, UserId } from "./Identifiers.js";
3
- import { SessionStore, StorageError, VerificationStore } from "./Storage.js";
4
- const jsonEncode = (value) => (value === undefined ? null : JSON.stringify(value));
5
- const jsonDecode = (value) => value === null ? undefined : JSON.parse(value);
6
- const optionalUnixMillis = (value) => value === null ? undefined : UnixMillis(Number(value));
7
- const decodeAmr = (value) => JSON.parse(value);
8
- const omitUndefined = (record) => Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
9
- const decodeSessionRow = (row) => omitUndefined({
10
- id: SessionId(row.id),
11
- userId: UserId(row.user_id),
12
- secretHash: row.secret_hash,
13
- createdAt: UnixMillis(Number(row.created_at)),
14
- expiresAt: UnixMillis(Number(row.expires_at)),
15
- authTime: UnixMillis(Number(row.auth_time)),
16
- aal: row.aal,
17
- amr: decodeAmr(row.amr),
18
- mfaVerifiedAt: optionalUnixMillis(row.mfa_verified_at),
19
- metadata: jsonDecode(row.metadata),
20
- revokedAt: optionalUnixMillis(row.revoked_at),
21
- lastSeenAt: optionalUnixMillis(row.last_seen_at),
22
- rotatedAt: optionalUnixMillis(row.rotated_at)
23
- });
24
- const decodeVerificationRow = (row) => omitUndefined({
25
- id: ChallengeId(row.id),
26
- type: row.type,
27
- subject: row.subject,
28
- secretHash: row.secret_hash === null ? undefined : row.secret_hash,
29
- createdAt: UnixMillis(Number(row.created_at)),
30
- expiresAt: UnixMillis(Number(row.expires_at)),
31
- metadata: jsonDecode(row.metadata),
32
- consumedAt: optionalUnixMillis(row.consumed_at)
33
- });
34
- const sessionInsert = (row) => ({
35
- id: row.id,
36
- user_id: row.userId,
37
- secret_hash: row.secretHash,
38
- created_at: Number(row.createdAt),
39
- expires_at: Number(row.expiresAt),
40
- auth_time: Number(row.authTime),
41
- aal: row.aal,
42
- amr: JSON.stringify(row.amr),
43
- mfa_verified_at: row.mfaVerifiedAt === undefined ? null : Number(row.mfaVerifiedAt),
44
- metadata: jsonEncode(row.metadata),
45
- revoked_at: null,
46
- last_seen_at: null,
47
- rotated_at: null
48
- });
49
- const verificationInsert = (row) => ({
50
- id: row.id,
51
- type: row.type,
52
- subject: row.subject,
53
- secret_hash: row.secretHash ?? null,
54
- created_at: Number(row.createdAt),
55
- expires_at: Number(row.expiresAt),
56
- metadata: jsonEncode(row.metadata),
57
- consumed_at: null
58
- });
59
- const kyselyError = (entity, operation, cause) => StorageError.fromUnknown(entity, operation, cause);
60
- const runKysely = (entity, operation, evaluate) => Effect.tryPromise({
61
- try: evaluate,
62
- catch: (cause) => kyselyError(entity, operation, cause)
63
- });
64
- const asAuthDb = (db) => db;
65
- const findSessionById = (db, id, operation = "find") => {
66
- const authDb = asAuthDb(db);
67
- return runKysely("session", operation, async () => {
68
- const row = await authDb.selectFrom("auth_session").selectAll().where("id", "=", id).executeTakeFirst();
69
- return row === undefined ? Option.none() : Option.some(decodeSessionRow(row));
70
- });
71
- };
72
- const findVerificationById = (db, id, operation = "find") => {
73
- const authDb = asAuthDb(db);
74
- return runKysely("verification", operation, async () => {
75
- const row = await authDb.selectFrom("auth_verification").selectAll().where("id", "=", id).executeTakeFirst();
76
- return row === undefined ? Option.none() : Option.some(decodeVerificationRow(row));
77
- });
78
- };
79
- export const makeKyselySessionStore = (db) => {
80
- const authDb = asAuthDb(db);
81
- return SessionStore.make({
82
- findById: (id) => findSessionById(db, id),
83
- insert: (row) => runKysely("session", "insert", async () => {
84
- await authDb.insertInto("auth_session").values(sessionInsert(row)).executeTakeFirst();
85
- }),
86
- refresh: (input) => {
87
- const update = {
88
- expires_at: Number(input.expiresAt)
89
- };
90
- if (input.lastSeenAt !== undefined) {
91
- update.last_seen_at = Number(input.lastSeenAt);
92
- }
93
- return runKysely("session", "refresh", () => authDb.updateTable("auth_session").set(update).where("id", "=", input.sessionId).executeTakeFirst()).pipe(Effect.flatMap((result) => Number(result.numUpdatedRows) > 0
94
- ? findSessionById(db, input.sessionId, "refresh")
95
- : Effect.succeed(Option.none())));
96
- },
97
- rotate: (input) => {
98
- const update = {
99
- secret_hash: input.secretHash,
100
- rotated_at: Number(input.rotatedAt)
101
- };
102
- if (input.expiresAt !== undefined) {
103
- update.expires_at = Number(input.expiresAt);
104
- }
105
- return runKysely("session", "rotate", () => authDb.updateTable("auth_session").set(update).where("id", "=", input.sessionId).executeTakeFirst()).pipe(Effect.flatMap((result) => Number(result.numUpdatedRows) > 0
106
- ? findSessionById(db, input.sessionId, "rotate")
107
- : Effect.succeed(Option.none())));
108
- },
109
- revoke: (input) => runKysely("session", "revoke", async () => {
110
- await authDb
111
- .updateTable("auth_session")
112
- .set({ revoked_at: Number(input.revokedAt) })
113
- .where("id", "=", input.sessionId)
114
- .executeTakeFirst();
115
- }),
116
- revokeAllForUser: (input) => runKysely("session", "revokeAllForUser", async () => {
117
- await authDb
118
- .updateTable("auth_session")
119
- .set({ revoked_at: Number(input.revokedAt) })
120
- .where("user_id", "=", input.userId)
121
- .executeTakeFirst();
122
- })
123
- });
124
- };
125
- export const makeKyselyVerificationStore = (db) => {
126
- const authDb = asAuthDb(db);
127
- return VerificationStore.make({
128
- findById: (id) => findVerificationById(db, id),
129
- insert: (row) => runKysely("verification", "insert", async () => {
130
- await authDb.insertInto("auth_verification").values(verificationInsert(row)).executeTakeFirst();
131
- }),
132
- consume: (input) => {
133
- let query = authDb
134
- .updateTable("auth_verification")
135
- .set({ consumed_at: Number(input.consumedAt) })
136
- .where("id", "=", input.id)
137
- .where("consumed_at", "is", null)
138
- .where("expires_at", ">", Number(input.consumedAt));
139
- if (input.type !== undefined) {
140
- query = query.where("type", "=", input.type);
141
- }
142
- return runKysely("verification", "consume", () => query.executeTakeFirst()).pipe(Effect.flatMap((result) => Number(result.numUpdatedRows) > 0
143
- ? findVerificationById(db, input.id, "consume")
144
- : Effect.succeed(Option.none())));
145
- },
146
- deleteExpired: (input) => runKysely("verification", "deleteExpired", async () => {
147
- if (input.limit === undefined) {
148
- const result = await authDb
149
- .deleteFrom("auth_verification")
150
- .where("expires_at", "<=", Number(input.now))
151
- .executeTakeFirst();
152
- return Number(result.numDeletedRows);
153
- }
154
- const rows = await authDb
155
- .selectFrom("auth_verification")
156
- .select("id")
157
- .where("expires_at", "<=", Number(input.now))
158
- .limit(input.limit)
159
- .execute();
160
- if (rows.length === 0) {
161
- return 0;
162
- }
163
- const result = await authDb
164
- .deleteFrom("auth_verification")
165
- .where("id", "in", rows.map((row) => row.id))
166
- .executeTakeFirst();
167
- return Number(result.numDeletedRows);
168
- })
169
- });
170
- };
171
- export const makeKyselyStorage = (db) => ({
172
- sessionStore: makeKyselySessionStore(db),
173
- verificationStore: makeKyselyVerificationStore(db)
174
- });
175
- export const KyselyAuthStorageLive = (db) => Layer.mergeAll(Layer.succeed(SessionStore)(makeKyselySessionStore(db)), Layer.succeed(VerificationStore)(makeKyselyVerificationStore(db)));
176
- //# sourceMappingURL=KyselyStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KyselyStorage.js","sourceRoot":"","sources":["../src/KyselyStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAalB,MAAM,cAAc,CAAA;AA6CrB,MAAM,UAAU,GAAG,CAAC,KAAc,EAAiB,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;AAE1G,MAAM,UAAU,GAAG,CAAC,KAAoB,EAAW,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AAEpG,MAAM,kBAAkB,GAAG,CAAC,KAAoB,EAA0B,EAAE,CAC1E,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAExD,MAAM,SAAS,GAAG,CAAC,KAAa,EAAsC,EAAE,CACtE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAuC,CAAA;AAEzD,MAAM,aAAa,GAAG,CAA8C,MAAS,EAAK,EAAE,CAClF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAM,CAAA;AAE5F,MAAM,gBAAgB,GAAG,CAAC,GAAsB,EAAc,EAAE,CAC9D,aAAa,CAAC;IACZ,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3B,UAAU,EAAE,GAAG,CAAC,WAAW;IAC3B,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,GAAG,EAAE,GAAG,CAAC,GAAyB;IAClC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IACvB,aAAa,EAAE,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC;IACtD,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAkD;IACnF,SAAS,EAAE,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;IAC7C,UAAU,EAAE,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC;IAChD,SAAS,EAAE,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;CAC9C,CAAC,CAAA;AAEJ,MAAM,qBAAqB,GAAG,CAAC,GAA2B,EAAmB,EAAE,CAC7E,aAAa,CAAC;IACZ,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IACvB,IAAI,EAAE,GAAG,CAAC,IAAqB;IAC/B,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,UAAU,EAAE,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW;IAClE,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAkD;IACnF,UAAU,EAAE,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC;CAChD,CAAC,CAAA;AAEJ,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAsC,EAAE,CAAC,CAAC;IACjF,EAAE,EAAE,GAAG,CAAC,EAAE;IACV,OAAO,EAAE,GAAG,CAAC,MAAM;IACnB,WAAW,EAAE,GAAG,CAAC,UAAU;IAC3B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/B,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5B,eAAe,EAAE,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;IACnF,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,IAAI;CACjB,CAAC,CAAA;AAEF,MAAM,kBAAkB,GAAG,CAAC,GAAuB,EAA2C,EAAE,CAAC,CAAC;IAChG,EAAE,EAAE,GAAG,CAAC,EAAE;IACV,IAAI,EAAE,GAAG,CAAC,IAAI;IACd,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,WAAW,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;IACnC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,WAAW,EAAE,IAAI;CAClB,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,CAAC,MAAkC,EAAE,SAAiB,EAAE,KAAc,EAAgB,EAAE,CAC1G,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;AAEpD,MAAM,SAAS,GAAG,CAChB,MAAkC,EAClC,SAAiB,EACjB,QAA0B,EACM,EAAE,CAClC,MAAM,CAAC,UAAU,CAAC;IAChB,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC;CACxD,CAAC,CAAA;AAEJ,MAAM,QAAQ,GAAG,CAAgC,EAAc,EAAU,EAAE,CAAC,EAAuB,CAAA;AAEnG,MAAM,eAAe,GAAG,CAAgC,EAAc,EAAE,EAAa,EAAE,SAAS,GAAG,MAAM,EAAE,EAAE;IAC3G,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE3B,OAAO,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAEvG,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,oBAAoB,GAAG,CAAgC,EAAc,EAAE,EAAe,EAAE,SAAS,GAAG,MAAM,EAAE,EAAE;IAClH,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE3B,OAAO,SAAS,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAE5G,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAA;IACrG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAgC,EAAc,EAAuB,EAAE;IAC3G,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE3B,OAAO,YAAY,CAAC,IAAI,CAAC;QACvB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAA;QACvF,CAAC,CAAC;QACJ,OAAO,EAAE,CAAC,KAA+B,EAAE,EAAE;YAC3C,MAAM,MAAM,GAAoC;gBAC9C,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;aACpC,CAAA;YAED,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YAChD,CAAC;YAED,OAAO,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAC1C,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CACpG,CAAC,IAAI,CACJ,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;gBAC/B,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;gBACjD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAClC,CACF,CAAA;QACH,CAAC;QACD,MAAM,EAAE,CAAC,KAA8B,EAAE,EAAE;YACzC,MAAM,MAAM,GAAoC;gBAC9C,WAAW,EAAE,KAAK,CAAC,UAAU;gBAC7B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;aACpC,CAAA;YAED,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAClC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC7C,CAAC;YAED,OAAO,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CACzC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CACpG,CAAC,IAAI,CACJ,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;gBAC/B,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAChD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAClC,CACF,CAAA;QACH,CAAC;QACD,MAAM,EAAE,CAAC,KAA8B,EAAE,EAAE,CACzC,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,MAAM;iBACT,WAAW,CAAC,cAAc,CAAC;iBAC3B,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;iBAC5C,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC;iBACjC,gBAAgB,EAAE,CAAA;QACvB,CAAC,CAAC;QACJ,gBAAgB,EAAE,CAAC,KAAwC,EAAE,EAAE,CAC7D,SAAS,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,MAAM;iBACT,WAAW,CAAC,cAAc,CAAC;iBAC3B,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;iBAC5C,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;iBACnC,gBAAgB,EAAE,CAAA;QACvB,CAAC,CAAC;KACL,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAgC,EAAc,EAA4B,EAAE;IACrH,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE3B,OAAO,iBAAiB,CAAC,IAAI,CAAC;QAC5B,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,CAAC;QAC9C,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,SAAS,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAA;QACjG,CAAC,CAAC;QACJ,OAAO,EAAE,CAAC,KAA+B,EAAE,EAAE;YAC3C,IAAI,KAAK,GAAG,MAAM;iBACf,WAAW,CAAC,mBAAmB,CAAC;iBAChC,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;iBAC9C,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;iBAC1B,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC;iBAChC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;YAErD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC9C,CAAC;YAED,OAAO,SAAS,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAC9E,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;gBAC/B,CAAC,CAAC,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC;gBAC/C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAClC,CACF,CAAA;QACH,CAAC;QACD,aAAa,EAAE,CAAC,KAAqC,EAAE,EAAE,CACvD,SAAS,CAAC,cAAc,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE;YACpD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,MAAM;qBACxB,UAAU,CAAC,mBAAmB,CAAC;qBAC/B,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;qBAC5C,gBAAgB,EAAE,CAAA;gBAErB,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;YACtC,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,MAAM;iBACtB,UAAU,CAAC,mBAAmB,CAAC;iBAC/B,MAAM,CAAC,IAAI,CAAC;iBACZ,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC5C,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;iBAClB,OAAO,EAAE,CAAA;YAEZ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,CAAA;YACV,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM;iBACxB,UAAU,CAAC,mBAAmB,CAAC;iBAC/B,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAC5C,gBAAgB,EAAE,CAAA;YAErB,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QACtC,CAAC,CAAC;KACL,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAgC,EAAc,EAAuB,EAAE,CAAC,CAAC;IACxG,YAAY,EAAE,sBAAsB,CAAC,EAAE,CAAC;IACxC,iBAAiB,EAAE,2BAA2B,CAAC,EAAE,CAAC;CACnD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAgC,EAAc,EAAE,EAAE,CACrF,KAAK,CAAC,QAAQ,CACZ,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,EACvD,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAClE,CAAA"}