@yielded/auth-persistence 0.1.0-beta.24 → 0.1.0-beta.26

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 (481) hide show
  1. package/README.md +6 -8
  2. package/dist/Adapter.d.mts +47 -33
  3. package/dist/Adapter.mjs +36 -23
  4. package/dist/OAuthPersistence.d.mts +35 -51
  5. package/dist/OAuthPersistence.mjs +60 -68
  6. package/dist/OAuthPersistence.mjs.map +1 -1
  7. package/dist/index.d.mts +2 -2
  8. package/dist/index.mjs +2 -2
  9. package/dist/internal/browser-login.d.mts +1 -1
  10. package/dist/internal/browser-login.mjs +29 -9
  11. package/dist/internal/browser-login.mjs.map +1 -1
  12. package/dist/internal/configuration.d.mts +13 -8
  13. package/dist/internal/configuration.mjs.map +1 -1
  14. package/dist/internal/crypto.d.mts +1 -0
  15. package/dist/internal/crypto.mjs +1 -1
  16. package/dist/internal/d1-planning.mjs +8 -0
  17. package/dist/internal/d1-planning.mjs.map +1 -0
  18. package/dist/internal/email-native-state.mjs +135 -0
  19. package/dist/internal/email-native-state.mjs.map +1 -0
  20. package/dist/internal/email-native.d.mts +17 -0
  21. package/dist/internal/email-native.mjs +245 -0
  22. package/dist/internal/email-native.mjs.map +1 -0
  23. package/dist/internal/email-policy.mjs +92 -0
  24. package/dist/internal/email-policy.mjs.map +1 -0
  25. package/dist/internal/email-registration-native.d.mts +38 -0
  26. package/dist/internal/email-registration-native.mjs +171 -0
  27. package/dist/internal/email-registration-native.mjs.map +1 -0
  28. package/dist/internal/models/email-model.d.mts +40 -104
  29. package/dist/internal/models/email-model.mjs +3 -5
  30. package/dist/internal/models/email-model.mjs.map +1 -1
  31. package/dist/internal/models/oauth-connected-model.d.mts +44 -213
  32. package/dist/internal/models/oauth-connected-model.mjs +6 -14
  33. package/dist/internal/models/oauth-connected-model.mjs.map +1 -1
  34. package/dist/internal/models/oauth-model.d.mts +95 -244
  35. package/dist/internal/models/oauth-model.mjs +28 -22
  36. package/dist/internal/models/oauth-model.mjs.map +1 -1
  37. package/dist/internal/models/passkey-model.d.mts +11 -147
  38. package/dist/internal/models/passkey-model.mjs +5 -24
  39. package/dist/internal/models/passkey-model.mjs.map +1 -1
  40. package/dist/internal/models/passkey-registration-ceremony-model.d.mts +5 -39
  41. package/dist/internal/models/passkey-write-model.d.mts +17 -75
  42. package/dist/internal/models/passkey-write-model.mjs +1 -7
  43. package/dist/internal/models/passkey-write-model.mjs.map +1 -1
  44. package/dist/internal/models/password-model.d.mts +16 -82
  45. package/dist/internal/models/password-model.mjs +1 -4
  46. package/dist/internal/models/password-model.mjs.map +1 -1
  47. package/dist/internal/models/phone-model.d.mts +86 -0
  48. package/dist/internal/models/phone-model.mjs +10 -0
  49. package/dist/internal/models/phone-model.mjs.map +1 -0
  50. package/dist/internal/models/proof-model.d.mts +43 -272
  51. package/dist/internal/models/proof-model.mjs +2 -10
  52. package/dist/internal/models/proof-model.mjs.map +1 -1
  53. package/dist/internal/models/session-model.d.mts +74 -93
  54. package/dist/internal/models/session-model.mjs +3 -11
  55. package/dist/internal/models/session-model.mjs.map +1 -1
  56. package/dist/internal/models/step-up-model.d.mts +12 -50
  57. package/dist/internal/models/step-up-model.mjs +2 -4
  58. package/dist/internal/models/step-up-model.mjs.map +1 -1
  59. package/dist/internal/models/totp-model.d.mts +76 -0
  60. package/dist/internal/models/totp-model.mjs +10 -0
  61. package/dist/internal/models/totp-model.mjs.map +1 -0
  62. package/dist/internal/native-sql-table.d.mts +21 -4
  63. package/dist/internal/native-sql-table.mjs +9 -5
  64. package/dist/internal/native-sql-table.mjs.map +1 -1
  65. package/dist/internal/oauth/native-accounts.d.mts +17 -0
  66. package/dist/internal/oauth/native-accounts.mjs +290 -0
  67. package/dist/internal/oauth/native-accounts.mjs.map +1 -0
  68. package/dist/internal/oauth/native-connected-state.d.mts +11 -0
  69. package/dist/internal/oauth/native-connected-state.mjs +146 -0
  70. package/dist/internal/oauth/native-connected-state.mjs.map +1 -0
  71. package/dist/internal/oauth/native-connected.d.mts +15 -0
  72. package/dist/internal/oauth/native-connected.mjs +462 -0
  73. package/dist/internal/oauth/native-connected.mjs.map +1 -0
  74. package/dist/internal/oauth/native-flow.mjs +138 -0
  75. package/dist/internal/oauth/native-flow.mjs.map +1 -0
  76. package/dist/internal/oauth/native-layers.d.mts +24 -0
  77. package/dist/internal/oauth/native-layers.mjs +13 -0
  78. package/dist/internal/oauth/native-layers.mjs.map +1 -0
  79. package/dist/internal/oauth/native-mutation.mjs +122 -0
  80. package/dist/internal/oauth/native-mutation.mjs.map +1 -0
  81. package/dist/internal/oauth/native-registration.d.mts +24 -0
  82. package/dist/internal/oauth/native-registration.mjs +328 -0
  83. package/dist/internal/oauth/native-registration.mjs.map +1 -0
  84. package/dist/internal/oauth/native-revocations.d.mts +17 -0
  85. package/dist/internal/oauth/native-revocations.mjs +106 -0
  86. package/dist/internal/oauth/native-revocations.mjs.map +1 -0
  87. package/dist/internal/oauth/native-sign-in.d.mts +17 -0
  88. package/dist/internal/oauth/native-sign-in.mjs +50 -0
  89. package/dist/internal/oauth/native-sign-in.mjs.map +1 -0
  90. package/dist/internal/oauth/native-state.d.mts +10 -0
  91. package/dist/internal/oauth/native-state.mjs +214 -0
  92. package/dist/internal/oauth/native-state.mjs.map +1 -0
  93. package/dist/internal/oauth/state.d.mts +10 -0
  94. package/dist/internal/oauth/state.mjs +3 -27
  95. package/dist/internal/oauth/state.mjs.map +1 -1
  96. package/dist/internal/passkey-actions.mjs +55 -0
  97. package/dist/internal/passkey-actions.mjs.map +1 -0
  98. package/dist/internal/passkey-inputs.mjs +73 -0
  99. package/dist/internal/passkey-inputs.mjs.map +1 -0
  100. package/dist/internal/passkey-managed.mjs +224 -0
  101. package/dist/internal/passkey-managed.mjs.map +1 -0
  102. package/dist/internal/passkey-native-ceremony.d.mts +35 -0
  103. package/dist/internal/passkey-native-ceremony.mjs +38 -0
  104. package/dist/internal/passkey-native-ceremony.mjs.map +1 -0
  105. package/dist/internal/passkey-native-flow.mjs +91 -0
  106. package/dist/internal/passkey-native-flow.mjs.map +1 -0
  107. package/dist/internal/passkey-native-registration.d.mts +10 -0
  108. package/dist/internal/passkey-native-registration.mjs +114 -0
  109. package/dist/internal/passkey-native-registration.mjs.map +1 -0
  110. package/dist/internal/passkey-native-state.d.mts +15 -0
  111. package/dist/internal/passkey-native-state.mjs +186 -0
  112. package/dist/internal/passkey-native-state.mjs.map +1 -0
  113. package/dist/internal/passkey-native-write.d.mts +82 -0
  114. package/dist/internal/passkey-native-write.mjs +330 -0
  115. package/dist/internal/passkey-native-write.mjs.map +1 -0
  116. package/dist/internal/passkey-native.d.mts +835 -0
  117. package/dist/internal/passkey-native.mjs +175 -0
  118. package/dist/internal/passkey-native.mjs.map +1 -0
  119. package/dist/internal/passkey-policy.mjs +115 -0
  120. package/dist/internal/passkey-policy.mjs.map +1 -0
  121. package/dist/internal/password-credentials.mjs +38 -9
  122. package/dist/internal/password-credentials.mjs.map +1 -1
  123. package/dist/internal/password-native.d.mts +14 -0
  124. package/dist/internal/password-native.mjs +292 -0
  125. package/dist/internal/password-native.mjs.map +1 -0
  126. package/dist/internal/password-policy.mjs +93 -0
  127. package/dist/internal/password-policy.mjs.map +1 -0
  128. package/dist/internal/password-registration-native.d.mts +22 -0
  129. package/dist/internal/password-registration-native.mjs +142 -0
  130. package/dist/internal/password-registration-native.mjs.map +1 -0
  131. package/dist/internal/persistence.d.mts +6 -19
  132. package/dist/internal/persistence.mjs +199 -166
  133. package/dist/internal/persistence.mjs.map +1 -1
  134. package/dist/internal/phone-composed.mjs +79 -0
  135. package/dist/internal/phone-composed.mjs.map +1 -0
  136. package/dist/internal/phone-native.d.mts +15 -0
  137. package/dist/internal/phone-native.mjs +354 -0
  138. package/dist/internal/phone-native.mjs.map +1 -0
  139. package/dist/internal/proof-native.d.mts +15 -0
  140. package/dist/internal/proof-native.mjs +289 -0
  141. package/dist/internal/proof-native.mjs.map +1 -0
  142. package/dist/internal/registration.mjs +50 -60
  143. package/dist/internal/registration.mjs.map +1 -1
  144. package/dist/internal/session-native-authority.d.mts +15 -0
  145. package/dist/internal/session-native-authority.mjs +91 -0
  146. package/dist/internal/session-native-authority.mjs.map +1 -0
  147. package/dist/internal/session-native-cleanup.d.mts +14 -0
  148. package/dist/internal/session-native-cleanup.mjs +48 -0
  149. package/dist/internal/session-native-cleanup.mjs.map +1 -0
  150. package/dist/internal/session-native-login.d.mts +15 -0
  151. package/dist/internal/session-native-login.mjs +87 -0
  152. package/dist/internal/session-native-login.mjs.map +1 -0
  153. package/dist/internal/session-native-pending-read.mjs +42 -0
  154. package/dist/internal/session-native-pending-read.mjs.map +1 -0
  155. package/dist/internal/session-native-pending.mjs +134 -0
  156. package/dist/internal/session-native-pending.mjs.map +1 -0
  157. package/dist/internal/session-native-record.mjs +79 -0
  158. package/dist/internal/session-native-record.mjs.map +1 -0
  159. package/dist/internal/session-native-state.mjs +130 -0
  160. package/dist/internal/session-native-state.mjs.map +1 -0
  161. package/dist/internal/session-native-stateful.d.mts +16 -0
  162. package/dist/internal/session-native-stateful.mjs +225 -0
  163. package/dist/internal/session-native-stateful.mjs.map +1 -0
  164. package/dist/internal/session-native-step-up.d.mts +15 -0
  165. package/dist/internal/session-native-step-up.mjs +212 -0
  166. package/dist/internal/session-native-step-up.mjs.map +1 -0
  167. package/dist/internal/session-native-validity.d.mts +15 -0
  168. package/dist/internal/session-native-validity.mjs +97 -0
  169. package/dist/internal/session-native-validity.mjs.map +1 -0
  170. package/dist/internal/session-policy.mjs +29 -0
  171. package/dist/internal/session-policy.mjs.map +1 -0
  172. package/dist/internal/sql-authority.d.mts +16 -0
  173. package/dist/internal/sql-authority.mjs +32 -0
  174. package/dist/internal/sql-authority.mjs.map +1 -0
  175. package/dist/internal/sql-change.mjs +21 -0
  176. package/dist/internal/sql-change.mjs.map +1 -0
  177. package/dist/internal/sql-cleanup.mjs +35 -0
  178. package/dist/internal/sql-cleanup.mjs.map +1 -0
  179. package/dist/internal/sql-commit.d.mts +72 -0
  180. package/dist/internal/sql-commit.mjs +176 -0
  181. package/dist/internal/sql-commit.mjs.map +1 -0
  182. package/dist/internal/sql-expression.d.mts +17 -0
  183. package/dist/internal/sql-expression.mjs +49 -0
  184. package/dist/internal/sql-expression.mjs.map +1 -0
  185. package/dist/internal/sql-oauth-connected-model.d.mts +7 -23
  186. package/dist/internal/sql-oauth-model.d.mts +27 -52
  187. package/dist/internal/sql-oauth-model.mjs +3 -4
  188. package/dist/internal/sql-oauth-model.mjs.map +1 -1
  189. package/dist/internal/sql-persistence.mjs +5 -9
  190. package/dist/internal/sql-persistence.mjs.map +1 -1
  191. package/dist/internal/sql-storage-validation.mjs +1 -2
  192. package/dist/internal/sql-storage-validation.mjs.map +1 -1
  193. package/dist/internal/sql-table.d.mts +3 -16
  194. package/dist/internal/sql-table.mjs +21 -42
  195. package/dist/internal/sql-table.mjs.map +1 -1
  196. package/dist/internal/standalone.mjs +2 -3
  197. package/dist/internal/standalone.mjs.map +1 -1
  198. package/dist/internal/step-up-state.mjs +5 -8
  199. package/dist/internal/step-up-state.mjs.map +1 -1
  200. package/dist/internal/storage-clock.mjs +44 -0
  201. package/dist/internal/storage-clock.mjs.map +1 -0
  202. package/dist/internal/storage-mapping.d.mts +11 -8
  203. package/dist/internal/storage-mapping.mjs +88 -302
  204. package/dist/internal/storage-mapping.mjs.map +1 -1
  205. package/dist/internal/storage-plans.mjs +15 -73
  206. package/dist/internal/storage-plans.mjs.map +1 -1
  207. package/dist/internal/storage-tables.d.mts +37 -520
  208. package/dist/internal/storage-tables.mjs +31 -211
  209. package/dist/internal/storage-tables.mjs.map +1 -1
  210. package/dist/internal/storage-validation.d.mts +1 -6
  211. package/dist/internal/storage-validation.mjs +1 -42
  212. package/dist/internal/storage-validation.mjs.map +1 -1
  213. package/dist/internal/table-model.d.mts +21 -0
  214. package/dist/internal/totp-native.d.mts +15 -0
  215. package/dist/internal/totp-native.mjs +401 -0
  216. package/dist/internal/totp-native.mjs.map +1 -0
  217. package/package.json +1 -1
  218. package/src/Adapter.ts +143 -199
  219. package/src/OAuthPersistence.ts +128 -271
  220. package/src/index.ts +1 -1
  221. package/src/internal/browser-login.ts +54 -24
  222. package/src/internal/configuration.ts +16 -31
  223. package/src/internal/d1-planning.ts +7 -0
  224. package/src/internal/email-native-state.ts +247 -0
  225. package/src/internal/email-native.ts +514 -0
  226. package/src/internal/email-policy.ts +235 -0
  227. package/src/internal/email-registration-native.ts +386 -0
  228. package/src/internal/models/email-model.ts +76 -214
  229. package/src/internal/models/oauth-connected-model.ts +50 -288
  230. package/src/internal/models/oauth-model.ts +147 -368
  231. package/src/internal/models/passkey-model.ts +11 -208
  232. package/src/internal/models/passkey-registration-ceremony-model.ts +6 -60
  233. package/src/internal/models/passkey-write-model.ts +14 -95
  234. package/src/internal/models/password-model.ts +28 -148
  235. package/src/internal/models/phone-model.ts +110 -0
  236. package/src/internal/models/proof-model.ts +48 -404
  237. package/src/internal/models/session-model.ts +102 -200
  238. package/src/internal/models/step-up-model.ts +17 -96
  239. package/src/internal/models/totp-model.ts +82 -0
  240. package/src/internal/native-sql-table.ts +32 -11
  241. package/src/internal/oauth/native-accounts.ts +576 -0
  242. package/src/internal/oauth/native-connected-state.ts +288 -0
  243. package/src/internal/oauth/native-connected.ts +888 -0
  244. package/src/internal/oauth/native-flow.ts +253 -0
  245. package/src/internal/oauth/native-layers.ts +83 -0
  246. package/src/internal/oauth/native-mutation.ts +222 -0
  247. package/src/internal/oauth/native-registration.ts +545 -0
  248. package/src/internal/oauth/native-revocations.ts +190 -0
  249. package/src/internal/oauth/native-sign-in.ts +111 -0
  250. package/src/internal/oauth/native-state.ts +346 -0
  251. package/src/internal/oauth/state.ts +2 -70
  252. package/src/internal/passkey-actions.ts +70 -0
  253. package/src/internal/passkey-inputs.ts +56 -0
  254. package/src/internal/passkey-managed.ts +360 -0
  255. package/src/internal/passkey-native-ceremony.ts +66 -0
  256. package/src/internal/passkey-native-flow.ts +140 -0
  257. package/src/internal/passkey-native-registration.ts +221 -0
  258. package/src/internal/passkey-native-state.ts +335 -0
  259. package/src/internal/passkey-native-write.ts +611 -0
  260. package/src/internal/passkey-native.ts +372 -0
  261. package/src/internal/passkey-policy.ts +246 -0
  262. package/src/internal/password-credentials.ts +52 -10
  263. package/src/internal/password-native.ts +571 -0
  264. package/src/internal/password-policy.ts +307 -0
  265. package/src/internal/password-registration-native.ts +322 -0
  266. package/src/internal/persistence.ts +336 -290
  267. package/src/internal/phone-composed.ts +86 -0
  268. package/src/internal/phone-native.ts +659 -0
  269. package/src/internal/proof-native.ts +448 -0
  270. package/src/internal/registration.ts +96 -143
  271. package/src/internal/session-native-authority.ts +247 -0
  272. package/src/internal/session-native-cleanup.ts +65 -0
  273. package/src/internal/session-native-login.ts +205 -0
  274. package/src/internal/session-native-pending-read.ts +68 -0
  275. package/src/internal/session-native-pending.ts +223 -0
  276. package/src/internal/session-native-record.ts +141 -0
  277. package/src/internal/session-native-state.ts +259 -0
  278. package/src/internal/session-native-stateful.ts +512 -0
  279. package/src/internal/session-native-step-up.ts +450 -0
  280. package/src/internal/session-native-validity.ts +208 -0
  281. package/src/internal/session-policy.ts +59 -0
  282. package/src/internal/sql-authority.ts +56 -0
  283. package/src/internal/sql-change.ts +38 -0
  284. package/src/internal/sql-cleanup.ts +56 -0
  285. package/src/internal/sql-commit.ts +435 -0
  286. package/src/internal/sql-expression.ts +94 -0
  287. package/src/internal/sql-metadata.ts +100 -0
  288. package/src/internal/sql-oauth-connected-model.ts +6 -95
  289. package/src/internal/sql-oauth-model.ts +31 -134
  290. package/src/internal/sql-persistence.ts +2 -6
  291. package/src/internal/sql-storage-validation.ts +1 -2
  292. package/src/internal/sql-table.ts +19 -52
  293. package/src/internal/standalone.ts +2 -11
  294. package/src/internal/step-up-state.ts +4 -17
  295. package/src/internal/storage-clock.ts +58 -0
  296. package/src/internal/storage-mapping.ts +125 -340
  297. package/src/internal/storage-plans.ts +14 -80
  298. package/src/internal/storage-tables.ts +28 -212
  299. package/src/internal/storage-validation.ts +0 -58
  300. package/src/internal/table-model.ts +24 -0
  301. package/src/internal/totp-native.ts +701 -0
  302. package/dist/internal/PasswordPreparedPostconditions.d.mts +0 -22
  303. package/dist/internal/PasswordPreparedPostconditions.mjs +0 -12
  304. package/dist/internal/PasswordPreparedPostconditions.mjs.map +0 -1
  305. package/dist/internal/authority-snapshot.mjs +0 -53
  306. package/dist/internal/authority-snapshot.mjs.map +0 -1
  307. package/dist/internal/email-kernel.d.mts +0 -276
  308. package/dist/internal/email-kernel.mjs +0 -497
  309. package/dist/internal/email-kernel.mjs.map +0 -1
  310. package/dist/internal/models/passkey-registration-ceremony-model.mjs +0 -18
  311. package/dist/internal/models/passkey-registration-ceremony-model.mjs.map +0 -1
  312. package/dist/internal/oauth/accounts.d.mts +0 -8
  313. package/dist/internal/oauth/accounts.mjs +0 -379
  314. package/dist/internal/oauth/accounts.mjs.map +0 -1
  315. package/dist/internal/oauth/connected-access.d.mts +0 -9
  316. package/dist/internal/oauth/connected-access.mjs +0 -229
  317. package/dist/internal/oauth/connected-access.mjs.map +0 -1
  318. package/dist/internal/oauth/connected-collection.d.mts +0 -7
  319. package/dist/internal/oauth/connected-collection.mjs +0 -214
  320. package/dist/internal/oauth/connected-collection.mjs.map +0 -1
  321. package/dist/internal/oauth/connected-custody.d.mts +0 -6
  322. package/dist/internal/oauth/connected-custody.mjs +0 -165
  323. package/dist/internal/oauth/connected-custody.mjs.map +0 -1
  324. package/dist/internal/oauth/connected-flow.d.mts +0 -7
  325. package/dist/internal/oauth/connected-flow.mjs +0 -324
  326. package/dist/internal/oauth/connected-flow.mjs.map +0 -1
  327. package/dist/internal/oauth/connected-input.mjs +0 -122
  328. package/dist/internal/oauth/connected-input.mjs.map +0 -1
  329. package/dist/internal/oauth/connected-keys.d.mts +0 -2
  330. package/dist/internal/oauth/connected-keys.mjs +0 -22
  331. package/dist/internal/oauth/connected-keys.mjs.map +0 -1
  332. package/dist/internal/oauth/connected-maintenance.d.mts +0 -9
  333. package/dist/internal/oauth/connected-maintenance.mjs +0 -226
  334. package/dist/internal/oauth/connected-maintenance.mjs.map +0 -1
  335. package/dist/internal/oauth/connected-management.d.mts +0 -9
  336. package/dist/internal/oauth/connected-management.mjs +0 -243
  337. package/dist/internal/oauth/connected-management.mjs.map +0 -1
  338. package/dist/internal/oauth/connected-reference.mjs +0 -63
  339. package/dist/internal/oauth/connected-reference.mjs.map +0 -1
  340. package/dist/internal/oauth/connected-settlement.d.mts +0 -8
  341. package/dist/internal/oauth/connected-settlement.mjs +0 -141
  342. package/dist/internal/oauth/connected-settlement.mjs.map +0 -1
  343. package/dist/internal/oauth/connected-sign-in.d.mts +0 -10
  344. package/dist/internal/oauth/connected-sign-in.mjs +0 -281
  345. package/dist/internal/oauth/connected-sign-in.mjs.map +0 -1
  346. package/dist/internal/oauth/connected-state.d.mts +0 -14
  347. package/dist/internal/oauth/connected-state.mjs +0 -469
  348. package/dist/internal/oauth/connected-state.mjs.map +0 -1
  349. package/dist/internal/oauth/connected-target.d.mts +0 -21
  350. package/dist/internal/oauth/connected-target.mjs +0 -117
  351. package/dist/internal/oauth/connected-target.mjs.map +0 -1
  352. package/dist/internal/oauth/flow.d.mts +0 -5
  353. package/dist/internal/oauth/flow.mjs +0 -279
  354. package/dist/internal/oauth/flow.mjs.map +0 -1
  355. package/dist/internal/oauth/input.mjs +0 -127
  356. package/dist/internal/oauth/input.mjs.map +0 -1
  357. package/dist/internal/oauth/owner.d.mts +0 -10
  358. package/dist/internal/oauth/owner.mjs +0 -10
  359. package/dist/internal/oauth/owner.mjs.map +0 -1
  360. package/dist/internal/oauth/query-compiler.d.mts +0 -7
  361. package/dist/internal/oauth/query-compiler.mjs +0 -9
  362. package/dist/internal/oauth/query-compiler.mjs.map +0 -1
  363. package/dist/internal/oauth/registration.d.mts +0 -7
  364. package/dist/internal/oauth/registration.mjs +0 -393
  365. package/dist/internal/oauth/registration.mjs.map +0 -1
  366. package/dist/internal/oauth/target.d.mts +0 -31
  367. package/dist/internal/oauth/target.mjs +0 -273
  368. package/dist/internal/oauth/target.mjs.map +0 -1
  369. package/dist/internal/oauth-kernel.d.mts +0 -1423
  370. package/dist/internal/oauth-kernel.mjs +0 -187
  371. package/dist/internal/oauth-kernel.mjs.map +0 -1
  372. package/dist/internal/passkey/admission.d.mts +0 -6
  373. package/dist/internal/passkey/admission.mjs +0 -220
  374. package/dist/internal/passkey/admission.mjs.map +0 -1
  375. package/dist/internal/passkey/credentials.d.mts +0 -14
  376. package/dist/internal/passkey/credentials.mjs +0 -249
  377. package/dist/internal/passkey/credentials.mjs.map +0 -1
  378. package/dist/internal/passkey/enrollment.mjs +0 -138
  379. package/dist/internal/passkey/enrollment.mjs.map +0 -1
  380. package/dist/internal/passkey/flow.d.mts +0 -21
  381. package/dist/internal/passkey/flow.mjs +0 -452
  382. package/dist/internal/passkey/flow.mjs.map +0 -1
  383. package/dist/internal/passkey/management.mjs +0 -231
  384. package/dist/internal/passkey/management.mjs.map +0 -1
  385. package/dist/internal/passkey/registration-ceremony.d.mts +0 -9
  386. package/dist/internal/passkey/registration-ceremony.mjs +0 -129
  387. package/dist/internal/passkey/registration-ceremony.mjs.map +0 -1
  388. package/dist/internal/passkey/registration-custody.d.mts +0 -2
  389. package/dist/internal/passkey/registration-custody.mjs +0 -52
  390. package/dist/internal/passkey/registration-custody.mjs.map +0 -1
  391. package/dist/internal/passkey/registration-write.mjs +0 -211
  392. package/dist/internal/passkey/registration-write.mjs.map +0 -1
  393. package/dist/internal/passkey/state.d.mts +0 -10
  394. package/dist/internal/passkey/state.mjs +0 -234
  395. package/dist/internal/passkey/state.mjs.map +0 -1
  396. package/dist/internal/passkey/target.d.mts +0 -20
  397. package/dist/internal/passkey/target.mjs +0 -200
  398. package/dist/internal/passkey/target.mjs.map +0 -1
  399. package/dist/internal/passkey/write-state.d.mts +0 -17
  400. package/dist/internal/passkey/write-state.mjs +0 -346
  401. package/dist/internal/passkey/write-state.mjs.map +0 -1
  402. package/dist/internal/passkey/write-target.mjs +0 -192
  403. package/dist/internal/passkey/write-target.mjs.map +0 -1
  404. package/dist/internal/passkey-kernel.d.mts +0 -6045
  405. package/dist/internal/passkey-kernel.mjs +0 -49
  406. package/dist/internal/passkey-kernel.mjs.map +0 -1
  407. package/dist/internal/passkeys.d.mts +0 -7
  408. package/dist/internal/passkeys.mjs +0 -387
  409. package/dist/internal/passkeys.mjs.map +0 -1
  410. package/dist/internal/password-credentials.d.mts +0 -11
  411. package/dist/internal/password-kernel.d.mts +0 -278
  412. package/dist/internal/password-kernel.mjs +0 -508
  413. package/dist/internal/password-kernel.mjs.map +0 -1
  414. package/dist/internal/phone-kernel.d.mts +0 -162
  415. package/dist/internal/phone-kernel.mjs +0 -437
  416. package/dist/internal/phone-kernel.mjs.map +0 -1
  417. package/dist/internal/proof-kernel.d.mts +0 -94
  418. package/dist/internal/proof-kernel.mjs +0 -624
  419. package/dist/internal/proof-kernel.mjs.map +0 -1
  420. package/dist/internal/query-operations.d.mts +0 -68
  421. package/dist/internal/session-kernel.d.mts +0 -62
  422. package/dist/internal/session-kernel.mjs +0 -820
  423. package/dist/internal/session-kernel.mjs.map +0 -1
  424. package/dist/internal/sql-oauth-connected-model.mjs +0 -7
  425. package/dist/internal/sql-oauth-connected-model.mjs.map +0 -1
  426. package/dist/internal/sql-query.d.mts +0 -12
  427. package/dist/internal/sql-query.mjs +0 -206
  428. package/dist/internal/sql-query.mjs.map +0 -1
  429. package/dist/internal/step-up-state.d.mts +0 -49
  430. package/dist/internal/transaction-execution-kernel.d.mts +0 -37
  431. package/dist/internal/transaction-execution-kernel.mjs +0 -120
  432. package/dist/internal/transaction-execution-kernel.mjs.map +0 -1
  433. package/dist/internal/transaction-kernel.d.mts +0 -81
  434. package/dist/internal/transaction-kernel.mjs +0 -264
  435. package/dist/internal/transaction-kernel.mjs.map +0 -1
  436. package/src/internal/PasswordPreparedPostconditions.ts +0 -30
  437. package/src/internal/authority-snapshot.ts +0 -91
  438. package/src/internal/email-kernel.ts +0 -1555
  439. package/src/internal/oauth/accounts.ts +0 -838
  440. package/src/internal/oauth/connected-access.ts +0 -388
  441. package/src/internal/oauth/connected-collection.ts +0 -345
  442. package/src/internal/oauth/connected-custody.ts +0 -308
  443. package/src/internal/oauth/connected-flow.ts +0 -562
  444. package/src/internal/oauth/connected-input.ts +0 -147
  445. package/src/internal/oauth/connected-keys.ts +0 -31
  446. package/src/internal/oauth/connected-maintenance.ts +0 -379
  447. package/src/internal/oauth/connected-management.ts +0 -391
  448. package/src/internal/oauth/connected-reference.ts +0 -135
  449. package/src/internal/oauth/connected-settlement.ts +0 -278
  450. package/src/internal/oauth/connected-sign-in.ts +0 -472
  451. package/src/internal/oauth/connected-state.ts +0 -924
  452. package/src/internal/oauth/connected-target.ts +0 -307
  453. package/src/internal/oauth/flow.ts +0 -505
  454. package/src/internal/oauth/input.ts +0 -201
  455. package/src/internal/oauth/owner.ts +0 -22
  456. package/src/internal/oauth/query-compiler.ts +0 -15
  457. package/src/internal/oauth/registration.ts +0 -676
  458. package/src/internal/oauth/target.ts +0 -803
  459. package/src/internal/oauth-kernel.ts +0 -294
  460. package/src/internal/passkey/admission.ts +0 -368
  461. package/src/internal/passkey/credentials.ts +0 -511
  462. package/src/internal/passkey/enrollment.ts +0 -326
  463. package/src/internal/passkey/flow.ts +0 -1062
  464. package/src/internal/passkey/management.ts +0 -426
  465. package/src/internal/passkey/registration-ceremony.ts +0 -283
  466. package/src/internal/passkey/registration-custody.ts +0 -91
  467. package/src/internal/passkey/registration-write.ts +0 -426
  468. package/src/internal/passkey/state.ts +0 -351
  469. package/src/internal/passkey/target.ts +0 -598
  470. package/src/internal/passkey/write-state.ts +0 -678
  471. package/src/internal/passkey/write-target.ts +0 -450
  472. package/src/internal/passkey-kernel.ts +0 -112
  473. package/src/internal/passkeys.ts +0 -652
  474. package/src/internal/password-kernel.ts +0 -1522
  475. package/src/internal/phone-kernel.ts +0 -872
  476. package/src/internal/proof-kernel.ts +0 -1992
  477. package/src/internal/query-operations.ts +0 -91
  478. package/src/internal/session-kernel.ts +0 -2406
  479. package/src/internal/sql-query.ts +0 -304
  480. package/src/internal/transaction-execution-kernel.ts +0 -335
  481. package/src/internal/transaction-kernel.ts +0 -603
@@ -1,304 +0,0 @@
1
- import { Effect, Predicate } from "effect";
2
- import { SqlClient } from "effect/sql/SqlClient";
3
- import type { SqlError } from "effect/sql/SqlError";
4
-
5
- import { PersistenceMappingError } from "./mapping-error";
6
- import type { QueryOperations } from "./query-operations";
7
- import {
8
- type Column,
9
- Fragment,
10
- Table,
11
- identifier,
12
- type Compiler,
13
- type Dialect,
14
- type Row,
15
- } from "./sql-table";
16
-
17
- const render = (value: unknown, compiler: Compiler): string => {
18
- if (value instanceof Fragment) return value.render(compiler);
19
- if (Predicate.hasProperty(value, "getSQL") && typeof value.getSQL === "function") {
20
- return render(value.getSQL(), compiler);
21
- }
22
-
23
- compiler.parameters.push(
24
- compiler.dialect === "sqlite" && typeof value === "boolean" ? Number(value) : value,
25
- );
26
-
27
- return compiler.dialect === "pg" ? `$${compiler.parameters.length}` : "?";
28
- };
29
-
30
- const template = (parts: TemplateStringsArray, ...values: unknown[]): Fragment =>
31
- new Fragment((compiler) =>
32
- parts.reduce(
33
- (sql, part, i) => sql + (i === 0 ? "" : render(values[i - 1], compiler)) + part,
34
- "",
35
- ),
36
- );
37
-
38
- const combine = (separator: string, values: ReadonlyArray<Fragment | undefined>) => {
39
- const fragments = values.filter((value) => value !== undefined);
40
-
41
- return fragments.length === 0
42
- ? undefined
43
- : new Fragment(
44
- (compiler) =>
45
- "(" + fragments.map((fragment) => fragment.render(compiler)).join(separator) + ")",
46
- );
47
- };
48
-
49
- export const and = (...values: ReadonlyArray<Fragment | undefined>) => combine(" AND ", values);
50
- const or = (...values: ReadonlyArray<Fragment | undefined>) => combine(" OR ", values);
51
-
52
- const operations = {
53
- and,
54
- or,
55
- asc: (value: unknown) => template`${value} ASC`,
56
- eq: (left: unknown, right: unknown) => template`${left} = ${right}`,
57
- ne: (left: unknown, right: unknown) => template`${left} <> ${right}`,
58
- gt: (left: unknown, right: unknown) => template`${left} > ${right}`,
59
- gte: (left: unknown, right: unknown) => template`${left} >= ${right}`,
60
- lte: (left: unknown, right: unknown) => template`${left} <= ${right}`,
61
- isNotNull: (value: unknown) => template`${value} IS NOT NULL`,
62
- isNull: (value: unknown) => template`${value} IS NULL`,
63
- notExists: (value: unknown) => template`NOT EXISTS (${value})`,
64
- inArray: (column: unknown, values: ReadonlyArray<unknown>) =>
65
- values.length === 0
66
- ? template`false`
67
- : new Fragment(
68
- (compiler) =>
69
- `${render(column, compiler)} IN (${values.map((value) => render(value, compiler)).join(", ")})`,
70
- ),
71
- sql: Object.assign(template, {
72
- param: (value: unknown, column: Column) => column.mapToDriverValue(value),
73
- join: (values: ReadonlyArray<unknown>, separator: Fragment = template``) =>
74
- new Fragment((compiler) =>
75
- values
76
- .map(
77
- (value, index) =>
78
- (index === 0 ? "" : separator.render(compiler)) + render(value, compiler),
79
- )
80
- .join(""),
81
- ),
82
- }),
83
- getTableColumns: (table: Table) => table.columns,
84
- column: (table: Table, key: string) => {
85
- const column = table.columns[key];
86
-
87
- if (column === undefined)
88
- throw PersistenceMappingError.make({ operation: "column", cause: key });
89
-
90
- return column;
91
- },
92
- updateValues: (entries: ReadonlyArray<readonly [string, unknown]>) => Object.fromEntries(entries),
93
- balancedD1And: and,
94
- // Raw clients use interactive transactions, so no D1 batch compaction is needed.
95
- compactD1GeneratedStatement: <S>(_client: unknown, statement: S) => statement,
96
- };
97
-
98
- // The existing kernels erase query-builder shapes at this boundary. The raw compiler
99
- // implements precisely those operations; no row decoding or Effect requirements are cast.
100
- export const sqlQueryOperations = operations as unknown as QueryOperations;
101
-
102
- type Selection = Readonly<Record<string, Fragment>>;
103
-
104
- interface QueryState {
105
- readonly operation: "select" | "insert" | "update" | "delete";
106
- readonly table?: Table | Fragment;
107
- readonly joins?: ReadonlyArray<{
108
- readonly table: Table | Fragment;
109
- readonly on: Fragment;
110
- }>;
111
- readonly selection?: Selection;
112
- readonly where?: Fragment | undefined;
113
- readonly values?: Row;
114
- readonly returning?: Selection | true;
115
- readonly order?: ReadonlyArray<Fragment>;
116
- readonly limit?: number;
117
- readonly lock?: boolean;
118
- readonly conflict?: boolean;
119
- }
120
-
121
- const selectionFor = (state: QueryState): Selection =>
122
- state.selection ?? (state.table instanceof Table ? state.table.columns : {});
123
-
124
- // Logical keys may exceed SQL identifier limits; only short internal aliases reach the driver.
125
- const selectionFields = (selection: Selection) => {
126
- let index = 0;
127
-
128
- return Object.entries(selection).flatMap<{
129
- readonly key: string;
130
- readonly name: string | undefined;
131
- readonly column: Fragment;
132
- readonly alias: string;
133
- }>(([key, value]) =>
134
- value instanceof Table
135
- ? Object.entries(value.columns).map(([name, column]) => ({
136
- key,
137
- name,
138
- column,
139
- alias: `auth_column_${index++}`,
140
- }))
141
- : [{ key, name: undefined, column: value, alias: `auth_column_${index++}` }],
142
- );
143
- };
144
-
145
- const projection = (selection: Selection, compiler: Compiler) =>
146
- selectionFields(selection)
147
- .map(({ column, alias }) => `${column.render(compiler)} AS ${identifier(alias)}`)
148
- .join(", ");
149
-
150
- // Joined table selections retain their own column codecs and nested row names.
151
- const decodeRow = (selection: Selection, row: Row): Row => {
152
- const entries: Array<readonly [string, unknown]> = [];
153
- const groups = new Map<string, Array<readonly [string, unknown]>>();
154
-
155
- for (const field of selectionFields(selection)) {
156
- const value = field.column.decode(row[field.alias]);
157
-
158
- if (field.name === undefined) entries.push([field.key, value]);
159
- else {
160
- const group = groups.get(field.key) ?? [];
161
-
162
- group.push([field.name, value]);
163
- groups.set(field.key, group);
164
- }
165
- }
166
-
167
- return Object.fromEntries([
168
- ...entries,
169
- ...Array.from(groups, ([key, values]) => [key, Object.fromEntries(values)]),
170
- ]);
171
- };
172
-
173
- const compile = (state: QueryState, compiler: Compiler): string => {
174
- const table = state.table;
175
-
176
- if (table === undefined)
177
- throw PersistenceMappingError.make({ operation: "query", cause: "Missing table" });
178
- let query: string;
179
-
180
- if (state.operation === "select") {
181
- query = `SELECT ${projection(selectionFor(state), compiler)} FROM ${table.render(compiler)}`;
182
- for (const join of state.joins ?? [])
183
- query += ` INNER JOIN ${join.table.render(compiler)} ON ${join.on.render(compiler)}`;
184
- } else {
185
- if (!(table instanceof Table))
186
- throw PersistenceMappingError.make({
187
- operation: "query",
188
- cause: "Mutation requires a table",
189
- });
190
- const target = table.render(compiler);
191
-
192
- const fields = Object.entries(state.values ?? {}).filter(
193
- ([key, value]) => table.columns[key] !== undefined && value !== undefined,
194
- );
195
-
196
- if (state.operation === "insert") {
197
- query = `INSERT INTO ${target} (${fields.map(([key]) => identifier(table.columns[key].options.name)).join(", ")}) VALUES (${fields.map(([, value]) => render(value, compiler)).join(", ")})`;
198
- } else if (state.operation === "update") {
199
- query = `UPDATE ${target} SET ${fields.map(([key, value]) => `${identifier(table.columns[key].options.name)} = ${render(value, compiler)}`).join(", ")}`;
200
- } else query = `DELETE FROM ${target}`;
201
- }
202
- if (state.where !== undefined) query += ` WHERE ${state.where.render(compiler)}`;
203
- if (state.order?.length)
204
- query += ` ORDER BY ${state.order.map((field) => field.render(compiler)).join(", ")}`;
205
- if (state.limit !== undefined) query += ` LIMIT ${render(state.limit, compiler)}`;
206
- if (state.conflict) query += " ON CONFLICT DO NOTHING";
207
- if (state.returning)
208
- query += ` RETURNING ${projection(state.returning === true && table instanceof Table ? table.columns : state.returning === true ? {} : state.returning, compiler)}`;
209
- if (state.lock && compiler.dialect === "pg") query += " FOR UPDATE";
210
-
211
- return query;
212
- };
213
-
214
- /** Captures one Effect SQL client. Its transaction service remains the physical owner. */
215
- export const makeSqlDatabase = Effect.fnUntraced(function* (dialect: Dialect) {
216
- // Mappings and projection aliases own their names. Retain the client's
217
- // connection and transaction identity while bypassing naming transforms.
218
- const client = (yield* SqlClient).withoutTransforms();
219
-
220
- const query = (state: QueryState): Query => {
221
- const execute = Effect.suspend(() => {
222
- const compiler: Compiler = { dialect, parameters: [] };
223
- const text = compile(state, compiler);
224
-
225
- const selected: Selection =
226
- state.operation === "select"
227
- ? selectionFor(state)
228
- : state.returning === true
229
- ? state.table instanceof Table
230
- ? state.table.columns
231
- : {}
232
- : state.returning || {};
233
-
234
- return client
235
- .unsafe<Row>(text, compiler.parameters)
236
- .pipe(Effect.map((rows) => rows.map((row) => decodeRow(selected, row))));
237
- });
238
-
239
- return Object.assign(execute, {
240
- toSQL: () => {
241
- const compiler: Compiler = { dialect, parameters: [] };
242
-
243
- return { sql: compile(state, compiler), params: compiler.parameters };
244
- },
245
- getSQL: () => new Fragment((compiler) => compile(state, compiler)),
246
- from: (table: Table | Fragment) => query({ ...state, table }),
247
- innerJoin: (table: Table | Fragment, on: Fragment) =>
248
- query({ ...state, joins: [...(state.joins ?? []), { table, on }] }),
249
- where: (where: Fragment | undefined) => query({ ...state, where }),
250
- limit: (limit: number) => query({ ...state, limit }),
251
- orderBy: (...order: Fragment[]) => query({ ...state, order }),
252
- for: (_lock: "update") => query({ ...state, lock: true }),
253
- values: (values: Row) => query({ ...state, values }),
254
- set: (values: Row) => query({ ...state, values }),
255
- returning: (returning: Selection | true = true) => query({ ...state, returning }),
256
- onConflictDoNothing: () => query({ ...state, conflict: true }),
257
- });
258
- };
259
-
260
- const database: SqlDatabase = {
261
- $client: client,
262
- select: (selection?: Selection) =>
263
- query({ operation: "select", ...(selection === undefined ? {} : { selection }) }),
264
- insert: (table: Table) => query({ operation: "insert", table }),
265
- update: (table: Table) => query({ operation: "update", table }),
266
- delete: (table: Table) => query({ operation: "delete", table }),
267
- transaction: <A, E, R>(
268
- body: (database: SqlDatabase) => Effect.Effect<A, E, R>,
269
- ): Effect.Effect<A, E | SqlError, R> =>
270
- client.withTransaction(Effect.suspend(() => body(database))),
271
- };
272
-
273
- return database;
274
- });
275
-
276
- interface Query extends Effect.Effect<Row[], SqlError> {
277
- toSQL(): { readonly sql: string; readonly params: ReadonlyArray<unknown> };
278
- getSQL(): Fragment;
279
- from(table: Table | Fragment): Query;
280
- innerJoin(table: Table | Fragment, on: Fragment): Query;
281
- where(where: Fragment | undefined): Query;
282
- limit(limit: number): Query;
283
- orderBy(...order: Fragment[]): Query;
284
- for(lock: "update"): Query;
285
- values(values: Row): Query;
286
- set(values: Row): Query;
287
- returning(returning?: Selection | true): Query;
288
- onConflictDoNothing(): Query;
289
- }
290
-
291
- export interface SqlDatabase {
292
- readonly $client: SqlClient;
293
- select(selection?: Selection): Query;
294
- insert(table: Table): Query;
295
- update(table: Table): Query;
296
- delete(table: Table): Query;
297
- transaction<A, E, R>(
298
- body: (database: SqlDatabase) => Effect.Effect<A, E, R>,
299
- ): Effect.Effect<A, E | SqlError, R>;
300
- }
301
-
302
- export const sql = template;
303
-
304
- export const { eq } = operations;
@@ -1,335 +0,0 @@
1
- import {
2
- coordinateCommit,
3
- hasCommitScope,
4
- CurrentCommitJournal,
5
- type LifecycleHooks,
6
- type HookConfigurationError,
7
- } from "@yielded/auth/Hooks";
8
- /* oxlint-disable no-explicit-any -- existing storage kernels erase foreign table shapes; domain errors remain typed. */
9
- /* oxlint-disable no-explicit-any -- private execution bridge retains exact public driver wrappers. */
10
- import { Context, Crypto, Effect, type PlatformError } from "effect";
11
- import type * as SqlClient from "effect/sql/SqlClient";
12
- import type * as SqlError from "effect/sql/SqlError";
13
- import type { Statement } from "effect/sql/Statement";
14
-
15
- import { requireStandalone } from "./standalone";
16
- import {
17
- NativeDatabase,
18
- type TransactionNativeDatabase,
19
- type TransactionOwner,
20
- type makeTransactionKernel,
21
- } from "./transaction-kernel";
22
-
23
- export interface TransactionTargetConfiguration<Failure> {
24
- readonly mode: "interactive" | "synchronous" | "batch";
25
- readonly dialect: "pg" | "mysql" | "sqlite";
26
- readonly locking: boolean;
27
- /** The captured database's transaction marker; batch drivers may omit it. */
28
- readonly standaloneGuard: (
29
- transactionService: SqlClient.SqlClient["transactionService"] | undefined,
30
- ) => Effect.Effect<void, Failure>;
31
- readonly transaction?: <A, E, R>(
32
- database: any,
33
- body: (transaction: any) => Effect.Effect<A, E, R>,
34
- ) => Effect.Effect<A, E | SqlError.SqlError | Failure, R>;
35
- }
36
-
37
- export type TransactionCoordinatorError<E, Failure> =
38
- | E
39
- | Failure
40
- | HookConfigurationError
41
- | SqlError.SqlError;
42
-
43
- export interface TransactionBound<Failure> {
44
- readonly owner: TransactionOwner<Failure>;
45
- used: boolean;
46
- poisoned: boolean;
47
- active: boolean;
48
- inFlight: number;
49
- }
50
-
51
- export interface TransactionExecution<Failure, OwnerId, Requirements = LifecycleHooks> {
52
- readonly bound: boolean;
53
- readonly active: () => boolean;
54
- readonly admit: Effect.Effect<void, Failure>;
55
- readonly poison: () => void;
56
- readonly run: <A, E, R>(
57
- body: Effect.Effect<A, E, R>,
58
- mutation?: boolean,
59
- ) => Effect.Effect<
60
- A,
61
- Failure,
62
- Exclude<Exclude<R, OwnerId | CurrentCommitJournal>, Crypto.Crypto> | Requirements
63
- >;
64
- }
65
-
66
- export const makeTransactionExecutionKernel = (
67
- transactions: Pick<
68
- ReturnType<typeof makeTransactionKernel>,
69
- "makeTransactionOwner" | "reportTransactionFailure"
70
- >,
71
- ) => {
72
- const { makeTransactionOwner, reportTransactionFailure } = transactions;
73
-
74
- const sqlClientTransactionStandaloneGuard = <Failure>(
75
- unavailable: () => Failure,
76
- transactionService: SqlClient.SqlClient["transactionService"] | undefined,
77
- ) => requireStandalone(unavailable, transactionService);
78
-
79
- const makeTransactionExecution = Effect.fnUntraced(function* <Failure, OwnerId>(
80
- ownerTag: Context.Key<OwnerId, TransactionOwner<Failure>>,
81
- configuration: TransactionTargetConfiguration<Failure>,
82
- unavailable: () => Failure,
83
- nonce: Effect.Effect<string, PlatformError.PlatformError, Crypto.Crypto>,
84
- bound?: TransactionBound<Failure>,
85
- ): Effect.fn.Return<
86
- TransactionExecution<Failure, OwnerId>,
87
- never,
88
- NativeDatabase | Crypto.Crypto
89
- > {
90
- const database = yield* NativeDatabase;
91
- const crypto = yield* Crypto.Crypto;
92
-
93
- const invariant: (value: unknown) => asserts value = (value) => {
94
- if (!value) throw unavailable();
95
- };
96
-
97
- return {
98
- bound: bound !== undefined,
99
- active: () => bound === undefined || bound.active,
100
- admit:
101
- bound !== undefined
102
- ? Effect.suspend(() => (bound.active ? Effect.void : Effect.fail(unavailable())))
103
- : Effect.gen(function* () {
104
- if (yield* hasCommitScope) return yield* Effect.fail(unavailable());
105
- yield* configuration.standaloneGuard(database.$client.transactionService);
106
- }),
107
- poison: () => {
108
- if (bound !== undefined) bound.poisoned = true;
109
- },
110
- run: <A, E, R>(
111
- body: Effect.Effect<A, E, R>,
112
- mutation = true,
113
- ): Effect.Effect<
114
- A,
115
- Failure,
116
- Exclude<Exclude<R, OwnerId | CurrentCommitJournal>, Crypto.Crypto> | LifecycleHooks
117
- > => {
118
- return Effect.suspend(() => {
119
- let entered = false;
120
-
121
- const work: Effect.Effect<
122
- A,
123
- E | Failure | HookConfigurationError | SqlError.SqlError | PlatformError.PlatformError,
124
- Exclude<R, OwnerId | CurrentCommitJournal> | LifecycleHooks | Crypto.Crypto
125
- > =
126
- bound !== undefined
127
- ? Effect.gen(function* () {
128
- if (!bound.active) return yield* Effect.fail(unavailable());
129
- entered = true;
130
- bound.inFlight++;
131
- if (!mutation)
132
- return yield* Effect.provideContext(
133
- body,
134
- Context.make(ownerTag, bound.owner).pipe(
135
- Context.add(CurrentCommitJournal, bound.owner.journal),
136
- ),
137
- );
138
- invariant(!bound.used && !bound.poisoned);
139
- bound.used = true;
140
-
141
- const result = yield* coordinateCommit(
142
- (journal) =>
143
- Effect.gen(function* () {
144
- bound.owner.guards.push(journal.prepare(undefined));
145
-
146
- return yield* Effect.provideContext(
147
- body,
148
- Context.make(ownerTag, { ...bound.owner, journal }).pipe(
149
- Context.add(CurrentCommitJournal, journal),
150
- ),
151
- );
152
- }),
153
- { mode: configuration.mode },
154
- );
155
-
156
- return result.value;
157
- }).pipe(
158
- Effect.onExit((exit) =>
159
- Effect.sync(() => {
160
- if (entered) bound.inFlight--;
161
- if (exit._tag === "Failure") bound.poisoned = true;
162
- }),
163
- ),
164
- )
165
- : Effect.gen(function* () {
166
- if (yield* hasCommitScope) return yield* Effect.fail(unavailable());
167
- yield* configuration.standaloneGuard(database.$client.transactionService);
168
- const marker = yield* nonce;
169
-
170
- const result = yield* coordinateCommit(
171
- (journal) => {
172
- const run = (tx: TransactionNativeDatabase) =>
173
- Effect.gen(function* () {
174
- const owner = makeTransactionOwner(tx, journal, marker, unavailable, {
175
- client: database.$client,
176
- batch: configuration.mode === "batch",
177
- locking: configuration.locking,
178
- mysql: configuration.dialect === "mysql",
179
- dialect: configuration.dialect,
180
- });
181
-
182
- const value = yield* Effect.provideContext(
183
- body,
184
- Context.make(ownerTag, owner).pipe(
185
- Context.add(CurrentCommitJournal, journal),
186
- ),
187
- );
188
-
189
- yield* owner.finish();
190
- if (configuration.mode === "batch")
191
- yield* tx.$client.batch(owner.statements);
192
-
193
- return value;
194
- });
195
-
196
- return configuration.mode === "batch"
197
- ? run(database)
198
- : configuration.transaction !== undefined
199
- ? configuration.transaction(database, run)
200
- : database.transaction(run);
201
- },
202
- { mode: configuration.mode },
203
- );
204
-
205
- return result.value;
206
- });
207
-
208
- return work.pipe(
209
- Effect.provideService(Crypto.Crypto, crypto),
210
- (operation) => reportTransactionFailure(operation, unavailable),
211
- Effect.mapError(unavailable),
212
- Effect.catchDefect(() => Effect.fail(unavailable())),
213
- );
214
- });
215
- },
216
- };
217
- });
218
-
219
- const coordinateTransactionOwner = <
220
- Failure,
221
- OwnerId,
222
- Resources,
223
- AllocationError,
224
- AllocationRequirements,
225
- Services,
226
- Transaction,
227
- A,
228
- E,
229
- R,
230
- >(
231
- database: TransactionNativeDatabase,
232
- ownerTag: Context.Key<OwnerId, TransactionOwner<Failure>>,
233
- configuration: TransactionTargetConfiguration<Failure>,
234
- allocate: Effect.Effect<Resources, AllocationError, AllocationRequirements>,
235
- unavailable: () => Failure,
236
- nonce: Effect.Effect<string, PlatformError.PlatformError, Crypto.Crypto>,
237
- services: (execution: TransactionExecution<Failure, OwnerId>, resources: Resources) => Services,
238
- owner: (
239
- transaction: Transaction,
240
- services: Services,
241
- append: (statement: Statement<any>) => void,
242
- ) => Effect.Effect<A, E, R>,
243
- ): Effect.Effect<
244
- A,
245
- TransactionCoordinatorError<E, Failure>,
246
- Exclude<R, CurrentCommitJournal> | LifecycleHooks | AllocationRequirements | Crypto.Crypto
247
- > => {
248
- return Effect.gen(function* () {
249
- if (yield* hasCommitScope) return yield* Effect.fail(unavailable());
250
- yield* configuration.standaloneGuard(database.$client.transactionService);
251
- const crypto = yield* Crypto.Crypto;
252
-
253
- // Allocation is independent of registration data and always precedes the physical owner.
254
- const resources = yield* allocate.pipe(
255
- (operation) => reportTransactionFailure(operation, unavailable),
256
- Effect.mapError(unavailable),
257
- Effect.catchDefect(() => Effect.fail(unavailable())),
258
- );
259
-
260
- const marker = yield* nonce.pipe(Effect.mapError(unavailable));
261
-
262
- const result = yield* coordinateCommit(
263
- (journal) => {
264
- const run = (tx: TransactionNativeDatabase) =>
265
- Effect.gen(function* () {
266
- const state = makeTransactionOwner(tx, journal, marker, unavailable, {
267
- client: database.$client,
268
- batch: configuration.mode === "batch",
269
- dialect: configuration.dialect,
270
- mysql: configuration.dialect === "mysql",
271
- locking: configuration.locking,
272
- });
273
-
274
- const bound: TransactionBound<Failure> = {
275
- owner: state,
276
- used: false,
277
- poisoned: false,
278
- active: true,
279
- inFlight: 0,
280
- };
281
-
282
- return yield* Effect.gen(function* () {
283
- const value = yield* owner(
284
- tx as Transaction,
285
- services(
286
- yield* makeTransactionExecution(
287
- ownerTag,
288
- configuration,
289
- unavailable,
290
- nonce,
291
- bound,
292
- ).pipe(Effect.provideService(NativeDatabase, tx)),
293
- resources,
294
- ),
295
- (statement) => {
296
- if (!bound.active) throw unavailable();
297
- state.statements.push(statement);
298
- },
299
- );
300
-
301
- bound.active = false;
302
- if (bound.poisoned || bound.inFlight !== 0)
303
- return yield* Effect.fail(unavailable());
304
- yield* state.finish();
305
- if (configuration.mode === "batch") yield* tx.$client.batch(state.statements);
306
-
307
- return value;
308
- }).pipe(
309
- Effect.ensuring(
310
- Effect.sync(() => {
311
- bound.active = false;
312
- }),
313
- ),
314
- );
315
- }).pipe(Effect.provideService(Crypto.Crypto, crypto));
316
-
317
- return configuration.mode === "batch"
318
- ? run(database)
319
- : configuration.transaction !== undefined
320
- ? configuration.transaction(database, run)
321
- : database.transaction(run);
322
- },
323
- { mode: configuration.mode },
324
- );
325
-
326
- return result.value as A;
327
- });
328
- };
329
-
330
- return {
331
- sqlClientTransactionStandaloneGuard,
332
- makeTransactionExecution,
333
- coordinateTransactionOwner,
334
- };
335
- };