@yielded/auth-persistence 0.1.0-beta.25 → 0.1.0-beta.27

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 +14 -81
  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 +26 -147
  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 -354
  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 -1556
  439. package/src/internal/oauth/accounts.ts +0 -839
  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 -692
  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 -1523
  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
@@ -0,0 +1,15 @@
1
+ import { TableModel } from "./table-model.mjs";
2
+ import "./mapping-error.mjs";
3
+ import { PasskeyCredentialMapping, PasskeyPersistenceMapping } from "./models/passkey-model.mjs";
4
+ import "./native-sql-table.mjs";
5
+ import "./sql-commit.mjs";
6
+ import { Effect, Schema } from "effect";
7
+ import { SqlClient } from "effect/sql";
8
+ import { Fragment } from "effect/sql/Statement";
9
+ import "@yielded/auth/Passkey";
10
+ //#region src/internal/passkey-native-state.d.ts
11
+ export type PasskeyNativeRead = PasskeyCredentialMapping<TableModel, TableModel, TableModel, unknown, any>;
12
+ export type PasskeyNativeMapping = PasskeyPersistenceMapping<PasskeyNativeRead, TableModel, unknown, any>;
13
+ export type PasskeyNativeRow = Readonly<Record<string, unknown>>;
14
+ //#endregion
15
+ //# sourceMappingURL=passkey-native-state.d.mts.map
@@ -0,0 +1,186 @@
1
+ import { sqlMapping } from "./native-sql-table.mjs";
2
+ import { exactSqlText } from "./sql-change.mjs";
3
+ import { passkeyCredentialKey } from "./passkey-policy.mjs";
4
+ import { makePasskeyNativeFlow } from "./passkey-native-flow.mjs";
5
+ import { Effect, Schema } from "effect";
6
+ import { SqlClient } from "effect/sql";
7
+ import * as M from "@yielded/auth/Passkey";
8
+ //#region src/internal/passkey-native-state.ts
9
+ const passkeyNativeInvariant = (value) => {
10
+ if (!value) throw M.PasskeyUnavailable.make({});
11
+ };
12
+ const makePasskeyNativeReadState = Effect.fnUntraced(function* (tables, read, clock) {
13
+ const sql = (yield* SqlClient.SqlClient).withoutTransforms();
14
+ const subject = tables(read.subject.table);
15
+ const credential = tables(read.credential.table);
16
+ const factor = tables(read.authority.table);
17
+ const now = clock === void 0 ? sql`0` : tables.expression(clock.engineNowMillis);
18
+ const millis = (expression) => clock === void 0 ? expression : tables.expression(clock.toMillis(expression));
19
+ const storedNow = clock === void 0 ? sql`0` : tables.expression(clock.fromMillis(clock.engineNowMillis));
20
+ const active = (table) => tables.expression(read[table].activeCondition);
21
+ const invariant = passkeyNativeInvariant;
22
+ const sameId = (nativeId, value) => read.subjectIds.equals(nativeId, value);
23
+ const native = (id) => {
24
+ const value = read.subjectIds.toNative(id);
25
+ invariant(read.subjectIds.toSubject(value) === id);
26
+ return value;
27
+ };
28
+ const revisions = (nativeId, rows) => {
29
+ const entries = /* @__PURE__ */ new Map();
30
+ for (const row of rows) {
31
+ if (row[read.authority.credentialId] === null) continue;
32
+ invariant(sameId(nativeId, row[read.authority.subjectId]));
33
+ if (!read.authority.isActiveStatus(row[read.authority.status])) continue;
34
+ const entry = Schema.decodeUnknownSync(M.PasskeyRevision.fields.credentials)([{
35
+ credentialId: row[read.authority.credentialId],
36
+ revision: row[read.authority.revision]
37
+ }])[0];
38
+ invariant(entry !== void 0);
39
+ const previous = entries.get(entry.credentialId);
40
+ invariant(previous === void 0 || previous === entry.revision);
41
+ entries.set(entry.credentialId, entry.revision);
42
+ }
43
+ invariant(entries.size <= 64);
44
+ return [...entries].sort(([a], [b]) => a.localeCompare(b)).map(([credentialId, revision]) => ({
45
+ credentialId,
46
+ revision
47
+ }));
48
+ };
49
+ const revision = (row, factors) => {
50
+ const id = read.subject.decodeId(row);
51
+ const subjectId = read.subjectIds.toSubject(id);
52
+ invariant(sameId(native(subjectId), id));
53
+ return Schema.decodeUnknownSync(M.PasskeyRevision)({
54
+ subjectId,
55
+ securityRevision: row[read.subject.securityRevision],
56
+ credentials: revisions(id, factors)
57
+ });
58
+ };
59
+ const decodeCredential = Effect.fnUntraced(function* (row, current, subjectRow) {
60
+ const value = read.credential.decode(row);
61
+ const owned = current.credentials.find((entry) => entry.credentialId === value.credentialId);
62
+ if (!read.credential.isActiveStatus(row[read.credential.status]) || owned?.revision !== row[read.credential.credentialRevision]) return void 0;
63
+ invariant(read.subjectIds.toSubject(read.credential.decodeSubjectId(row)) === current.subjectId);
64
+ return M.snapshotPasskeySync(M.PasskeyCredential, {
65
+ ...value,
66
+ revision: current,
67
+ requirement: yield* read.subject.decodeRequirement(subjectRow),
68
+ active: true
69
+ });
70
+ });
71
+ const readAuthority = Effect.fnUntraced(function* (nativeId, lock, credentialId) {
72
+ if (lock) {
73
+ const locked = yield* sql`select ${subject.fields("s_")}, ${now} as "engineNow" from ${subject.name} where ${subject.column(read.subject.id)} = ${subject.value(read.subject.id, nativeId)} and ${active("subject")} ${sql.onDialectOrElse({
74
+ pg: () => sql`for update`,
75
+ mysql: () => sql`for update`,
76
+ orElse: () => sql``
77
+ })}`;
78
+ if (locked.length !== 1) return void 0;
79
+ const row = subject.decode(locked[0], "s_");
80
+ if (!sameId(read.subject.decodeId(row), nativeId) || !read.subject.isActiveStatus(row[read.subject.status])) return void 0;
81
+ const lockedFactors = sql`select ${factor.fields("f_")} from ${factor.name} where ${factor.column(read.authority.subjectId)} = ${factor.value(read.authority.subjectId, nativeId)} and ${active("authority")} order by ${factor.column(read.authority.credentialId)} limit 65 ${sql.onDialectOrElse({
82
+ pg: () => sql`for update`,
83
+ mysql: () => sql`for update`,
84
+ orElse: () => sql``
85
+ })}`;
86
+ const rows = credentialId === void 0 ? yield* sql`${lockedFactors}` : yield* sql`with locked_factors as ${sql.onDialectOrElse({
87
+ pg: () => sql`materialized`,
88
+ orElse: () => sql``
89
+ })} (${lockedFactors})
90
+ select locked_factors.*, ${credential.fields("c_")} from ${credential.name} left join locked_factors on 1 = 1
91
+ where ${credential.column(read.credential.subjectId)} = ${credential.value(read.credential.subjectId, nativeId)} and ${exactSqlText(sql, credential.column(read.credential.credentialId), credential.value(read.credential.credentialId, credentialId))} and ${active("credential")}`;
92
+ invariant(rows.length <= 64);
93
+ return {
94
+ row,
95
+ credential: credentialId === void 0 || rows[0] === void 0 ? void 0 : credential.decode(rows[0], "c_"),
96
+ revision: revision(row, rows.map((row) => factor.decode(row, "f_"))),
97
+ nowMillis: yield* Schema.decodeEffect(Schema.Int)(Number(locked[0].engineNow))
98
+ };
99
+ }
100
+ const observedSubject = joinedSubject, observedFactor = joinedFactor;
101
+ const rows = yield* sql`select ${observedSubject.fields("s_")}, ${observedFactor.fields("f_")}, ${now} as "engineNow" ${credentialId === void 0 ? sql`` : sql`, ${joinedCredential.fields("c_")}`} from ${selected("subject", "passkey_subject")} left join ${selected("authority", "passkey_factor")} on ${observedFactor.column(read.authority.subjectId)} = ${observedFactor.value(read.authority.subjectId, nativeId)} ${credentialId === void 0 ? sql`` : sql`join ${selected("credential", "passkey_credential")} on ${joinedCredential.column(read.credential.subjectId)} = ${joinedCredential.value(read.credential.subjectId, nativeId)} and ${exactSqlText(sql, joinedCredential.column(read.credential.credentialId), joinedCredential.value(read.credential.credentialId, credentialId))}`} where ${observedSubject.column(read.subject.id)} = ${observedSubject.value(read.subject.id, nativeId)} limit 65`;
102
+ if (rows.length === 0 || rows.length > 64) return void 0;
103
+ const row = observedSubject.decode(rows[0], "s_");
104
+ if (!sameId(read.subject.decodeId(row), nativeId) || !read.subject.isActiveStatus(row[read.subject.status])) return void 0;
105
+ invariant(rows.every((selected) => {
106
+ const other = observedSubject.decode(selected, "s_");
107
+ return sameId(read.subject.decodeId(other), nativeId) && other[read.subject.securityRevision] === row[read.subject.securityRevision] && read.subject.isActiveStatus(other[read.subject.status]);
108
+ }));
109
+ return {
110
+ row,
111
+ credential: credentialId === void 0 ? void 0 : joinedCredential.decode(rows[0], "c_"),
112
+ revision: revision(row, rows.map((selected) => observedFactor.decode(selected, "f_"))),
113
+ nowMillis: yield* Schema.decodeEffect(Schema.Int)(Number(rows[0].engineNow))
114
+ };
115
+ });
116
+ const joinedSubject = subject.as("passkey_subject");
117
+ const joinedFactor = factor.as("passkey_factor");
118
+ const joinedCredential = credential.as("passkey_credential");
119
+ const selected = (kind, alias) => {
120
+ return sql`(select * from ${(kind === "subject" ? subject : kind === "authority" ? factor : credential).name} where ${active(kind)}) as ${sql(alias)}`;
121
+ };
122
+ return {
123
+ sql,
124
+ tables,
125
+ subject,
126
+ credential,
127
+ factor,
128
+ now,
129
+ storedNow,
130
+ millis,
131
+ active,
132
+ native,
133
+ sameId,
134
+ revision,
135
+ decodeCredential,
136
+ readAuthority,
137
+ lookup: Effect.fnUntraced(function* (rpId, protocolCredentialId) {
138
+ const key = yield* passkeyCredentialKey(rpId, protocolCredentialId);
139
+ if (subject.unencodedTextColumn?.(read.subject.id) !== void 0 && credential.unencodedTextColumn?.(read.credential.subjectId) !== void 0 && factor.unencodedTextColumn?.(read.authority.subjectId) !== void 0) {
140
+ const s = joinedSubject, c = joinedCredential, f = joinedFactor;
141
+ const rows = yield* sql`select ${s.fields("s_")}, ${c.fields("c_")}, ${f.fields("f_")}
142
+ from ${selected("credential", "passkey_credential")}
143
+ join ${selected("subject", "passkey_subject")} on ${exactSqlText(sql, s.column(read.subject.id), c.column(read.credential.subjectId))}
144
+ left join ${selected("authority", "passkey_factor")} on ${exactSqlText(sql, f.column(read.authority.subjectId), c.column(read.credential.subjectId))}
145
+ where ${exactSqlText(sql, c.column(read.credential.credentialKey), c.value(read.credential.credentialKey, key))} limit 65`;
146
+ if (rows.length === 0 || rows.length > 64) return void 0;
147
+ const row = c.decode(rows[0], "c_");
148
+ const subjectRow = s.decode(rows[0], "s_");
149
+ const owner = read.credential.decodeSubjectId(row);
150
+ invariant(row[read.credential.rpId] === rpId && row[read.credential.protocolCredentialId] === protocolCredentialId);
151
+ invariant(rows.every((selected) => {
152
+ const other = c.decode(selected, "c_");
153
+ const subjectValue = s.decode(selected, "s_");
154
+ return sameId(owner, read.credential.decodeSubjectId(other)) && sameId(owner, read.subject.decodeId(subjectValue)) && other[read.credential.credentialId] === row[read.credential.credentialId] && other[read.credential.credentialRevision] === row[read.credential.credentialRevision] && subjectValue[read.subject.securityRevision] === subjectRow[read.subject.securityRevision];
155
+ }));
156
+ return yield* decodeCredential(row, revision(subjectRow, rows.map((row) => f.decode(row, "f_"))), subjectRow);
157
+ }
158
+ const rows = yield* sql`select ${credential.fields("c_")} from ${credential.name} where ${credential.column(read.credential.credentialKey)} = ${credential.value(read.credential.credentialKey, key)} and ${active("credential")}`;
159
+ if (rows.length !== 1) return void 0;
160
+ const row = credential.decode(rows[0], "c_");
161
+ invariant(row[read.credential.rpId] === rpId && row[read.credential.protocolCredentialId] === protocolCredentialId);
162
+ const current = yield* readAuthority(read.credential.decodeSubjectId(row), false);
163
+ return current === void 0 ? void 0 : yield* decodeCredential(row, current.revision, current.row);
164
+ }),
165
+ joinedSubject,
166
+ joinedFactor,
167
+ joinedCredential,
168
+ selected,
169
+ mapped: sqlMapping
170
+ };
171
+ });
172
+ const makePasskeyNativeState = Effect.fnUntraced(function* (tables, mapping) {
173
+ const state = yield* makePasskeyNativeReadState(tables, mapping.read, mapping.clock);
174
+ const ceremony = yield* makePasskeyNativeFlow(tables, mapping);
175
+ return {
176
+ ...state,
177
+ mapping,
178
+ ceremony,
179
+ flow: ceremony.flow,
180
+ access: ceremony.access
181
+ };
182
+ });
183
+ //#endregion
184
+ export { makePasskeyNativeReadState, makePasskeyNativeState, passkeyNativeInvariant };
185
+
186
+ //# sourceMappingURL=passkey-native-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey-native-state.mjs","names":[],"sources":["../../src/internal/passkey-native-state.ts"],"sourcesContent":["/* oxlint-disable no-explicit-any -- physical mapping generics are erased only at this shared adapter boundary. */\nimport * as M from \"@yielded/auth/Passkey\";\nimport { Effect, Schema } from \"effect\";\nimport { SqlClient } from \"effect/sql\";\nimport type { Fragment } from \"effect/sql/Statement\";\n\nimport type { PasskeyCredentialMapping, PasskeyPersistenceMapping } from \"./models/passkey-model\";\nimport { sqlMapping, type NativeSqlTables } from \"./native-sql-table\";\nimport { makePasskeyNativeFlow } from \"./passkey-native-flow\";\nimport { passkeyCredentialKey } from \"./passkey-policy\";\nimport { exactSqlText } from \"./sql-change\";\nimport type { TableModel } from \"./table-model\";\n\n// Physical expression types are validated by NativeSqlTables at this boundary.\nexport type PasskeyNativeRead = PasskeyCredentialMapping<\n TableModel,\n TableModel,\n TableModel,\n unknown,\n any\n>;\n\nexport type PasskeyNativeMapping = PasskeyPersistenceMapping<\n PasskeyNativeRead,\n TableModel,\n unknown,\n any\n>;\n\nexport type PasskeyNativeRow = Readonly<Record<string, unknown>>;\n\nexport const passkeyNativeInvariant: (value: unknown) => asserts value = (value) => {\n if (!value) throw M.PasskeyUnavailable.make({});\n};\n\nexport const makePasskeyNativeReadState = Effect.fnUntraced(function* (\n tables: NativeSqlTables,\n read: PasskeyNativeRead,\n clock?: PasskeyNativeMapping[\"clock\"],\n) {\n const sql = (yield* SqlClient.SqlClient).withoutTransforms();\n const subject = tables(read.subject.table);\n const credential = tables(read.credential.table);\n const factor = tables(read.authority.table);\n const now = clock === undefined ? sql`0` : tables.expression(clock.engineNowMillis);\n\n const millis = (expression: Fragment) =>\n clock === undefined ? expression : tables.expression(clock.toMillis(expression));\n\n const storedNow =\n clock === undefined ? sql`0` : tables.expression(clock.fromMillis(clock.engineNowMillis));\n\n const active = (table: \"subject\" | \"credential\" | \"authority\") =>\n tables.expression(read[table].activeCondition);\n\n const invariant: typeof passkeyNativeInvariant = passkeyNativeInvariant;\n const sameId = (nativeId: unknown, value: unknown) => read.subjectIds.equals(nativeId, value);\n\n const native = (id: M.PasskeyCredential[\"revision\"][\"subjectId\"]) => {\n const value = read.subjectIds.toNative(id);\n\n invariant(read.subjectIds.toSubject(value) === id);\n\n return value;\n };\n\n const revisions = (nativeId: unknown, rows: ReadonlyArray<PasskeyNativeRow>) => {\n const entries = new Map<string, M.PasskeyCredential[\"revision\"][\"securityRevision\"]>();\n\n for (const row of rows) {\n if (row[read.authority.credentialId] === null) continue;\n invariant(sameId(nativeId, row[read.authority.subjectId]));\n if (!read.authority.isActiveStatus(row[read.authority.status])) continue;\n\n const decoded = Schema.decodeUnknownSync(M.PasskeyRevision.fields.credentials)([\n {\n credentialId: row[read.authority.credentialId],\n revision: row[read.authority.revision],\n },\n ]);\n\n const entry = decoded[0];\n\n invariant(entry !== undefined);\n const previous = entries.get(entry.credentialId);\n\n invariant(previous === undefined || previous === entry.revision);\n entries.set(entry.credentialId, entry.revision);\n }\n invariant(entries.size <= 64);\n\n return [...entries]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([credentialId, revision]) => ({ credentialId, revision }));\n };\n\n const revision = (row: PasskeyNativeRow, factors: ReadonlyArray<PasskeyNativeRow>) => {\n const id = read.subject.decodeId(row);\n const subjectId = read.subjectIds.toSubject(id);\n\n invariant(sameId(native(subjectId), id));\n\n return Schema.decodeUnknownSync(M.PasskeyRevision)({\n subjectId,\n securityRevision: row[read.subject.securityRevision],\n credentials: revisions(id, factors),\n });\n };\n\n const decodeCredential = Effect.fnUntraced(function* (\n row: PasskeyNativeRow,\n current: M.PasskeyCredential[\"revision\"],\n subjectRow: PasskeyNativeRow,\n ) {\n const value = read.credential.decode(row);\n const owned = current.credentials.find((entry) => entry.credentialId === value.credentialId);\n\n if (\n !read.credential.isActiveStatus(row[read.credential.status]) ||\n owned?.revision !== row[read.credential.credentialRevision]\n )\n return undefined;\n invariant(\n read.subjectIds.toSubject(read.credential.decodeSubjectId(row)) === current.subjectId,\n );\n\n return M.snapshotPasskeySync(M.PasskeyCredential, {\n ...value,\n revision: current,\n requirement: yield* read.subject.decodeRequirement(subjectRow),\n active: true,\n });\n });\n\n const readAuthority = Effect.fnUntraced(function* (\n nativeId: unknown,\n lock: boolean,\n credentialId?: string,\n ) {\n // The subject lock is a distinct first statement; joined FOR UPDATE cannot\n // establish the lock order required by coordinated application transactions.\n if (lock) {\n const locked =\n yield* sql<PasskeyNativeRow>`select ${subject.fields(\"s_\")}, ${now} as \"engineNow\" from ${subject.name} where ${subject.column(read.subject.id)} = ${subject.value(read.subject.id, nativeId)} and ${active(\"subject\")} ${sql.onDialectOrElse({ pg: () => sql`for update`, mysql: () => sql`for update`, orElse: () => sql`` })}`;\n\n if (locked.length !== 1) return undefined;\n const row = subject.decode(locked[0]!, \"s_\");\n\n if (\n !sameId(read.subject.decodeId(row), nativeId) ||\n !read.subject.isActiveStatus(row[read.subject.status])\n )\n return undefined;\n\n const lockedFactors = sql`select ${factor.fields(\"f_\")} from ${factor.name} where ${factor.column(read.authority.subjectId)} = ${factor.value(read.authority.subjectId, nativeId)} and ${active(\"authority\")} order by ${factor.column(read.authority.credentialId)} limit 65 ${sql.onDialectOrElse({ pg: () => sql`for update`, mysql: () => sql`for update`, orElse: () => sql`` })}`;\n\n const rows =\n credentialId === undefined\n ? yield* sql<PasskeyNativeRow>`${lockedFactors}`\n : yield* sql<PasskeyNativeRow>`with locked_factors as ${sql.onDialectOrElse({ pg: () => sql`materialized`, orElse: () => sql`` })} (${lockedFactors})\n select locked_factors.*, ${credential.fields(\"c_\")} from ${credential.name} left join locked_factors on 1 = 1\n where ${credential.column(read.credential.subjectId)} = ${credential.value(read.credential.subjectId, nativeId)} and ${exactSqlText(sql, credential.column(read.credential.credentialId), credential.value(read.credential.credentialId, credentialId))} and ${active(\"credential\")}`;\n\n invariant(rows.length <= 64);\n\n return {\n row,\n credential:\n credentialId === undefined || rows[0] === undefined\n ? undefined\n : credential.decode(rows[0], \"c_\"),\n revision: revision(\n row,\n rows.map((row) => factor.decode(row, \"f_\")),\n ),\n nowMillis: yield* Schema.decodeEffect(Schema.Int)(Number(locked[0]!.engineNow)),\n };\n }\n\n const observedSubject = joinedSubject,\n observedFactor = joinedFactor;\n\n const rows =\n yield* sql<PasskeyNativeRow>`select ${observedSubject.fields(\"s_\")}, ${observedFactor.fields(\"f_\")}, ${now} as \"engineNow\" ${credentialId === undefined ? sql`` : sql`, ${joinedCredential.fields(\"c_\")}`} from ${selected(\"subject\", \"passkey_subject\")} left join ${selected(\"authority\", \"passkey_factor\")} on ${observedFactor.column(read.authority.subjectId)} = ${observedFactor.value(read.authority.subjectId, nativeId)} ${credentialId === undefined ? sql`` : sql`join ${selected(\"credential\", \"passkey_credential\")} on ${joinedCredential.column(read.credential.subjectId)} = ${joinedCredential.value(read.credential.subjectId, nativeId)} and ${exactSqlText(sql, joinedCredential.column(read.credential.credentialId), joinedCredential.value(read.credential.credentialId, credentialId))}`} where ${observedSubject.column(read.subject.id)} = ${observedSubject.value(read.subject.id, nativeId)} limit 65`;\n\n if (rows.length === 0 || rows.length > 64) return undefined;\n const row = observedSubject.decode(rows[0]!, \"s_\");\n\n if (\n !sameId(read.subject.decodeId(row), nativeId) ||\n !read.subject.isActiveStatus(row[read.subject.status])\n )\n return undefined;\n invariant(\n rows.every((selected) => {\n const other = observedSubject.decode(selected, \"s_\");\n\n return (\n sameId(read.subject.decodeId(other), nativeId) &&\n other[read.subject.securityRevision] === row[read.subject.securityRevision] &&\n read.subject.isActiveStatus(other[read.subject.status])\n );\n }),\n );\n\n return {\n row,\n credential: credentialId === undefined ? undefined : joinedCredential.decode(rows[0]!, \"c_\"),\n revision: revision(\n row,\n rows.map((selected) => observedFactor.decode(selected, \"f_\")),\n ),\n nowMillis: yield* Schema.decodeEffect(Schema.Int)(Number(rows[0]!.engineNow)),\n };\n });\n\n // Active predicates retain their original table qualification inside each\n // subquery; aliases allow applications to map several roles to one table.\n const joinedSubject = subject.as(\"passkey_subject\");\n const joinedFactor = factor.as(\"passkey_factor\");\n const joinedCredential = credential.as(\"passkey_credential\");\n\n const selected = (kind: \"subject\" | \"authority\" | \"credential\", alias: string) => {\n const table = kind === \"subject\" ? subject : kind === \"authority\" ? factor : credential;\n\n return sql`(select * from ${table.name} where ${active(kind)}) as ${sql(alias)}`;\n };\n\n const lookup = Effect.fnUntraced(function* (rpId: string, protocolCredentialId: string) {\n const key = yield* passkeyCredentialKey(rpId, protocolCredentialId);\n\n if (\n subject.unencodedTextColumn?.(read.subject.id) !== undefined &&\n credential.unencodedTextColumn?.(read.credential.subjectId) !== undefined &&\n factor.unencodedTextColumn?.(read.authority.subjectId) !== undefined\n ) {\n const s = joinedSubject,\n c = joinedCredential,\n f = joinedFactor;\n\n const rows =\n yield* sql<PasskeyNativeRow>`select ${s.fields(\"s_\")}, ${c.fields(\"c_\")}, ${f.fields(\"f_\")}\n from ${selected(\"credential\", \"passkey_credential\")}\n join ${selected(\"subject\", \"passkey_subject\")} on ${exactSqlText(sql, s.column(read.subject.id), c.column(read.credential.subjectId))}\n left join ${selected(\"authority\", \"passkey_factor\")} on ${exactSqlText(sql, f.column(read.authority.subjectId), c.column(read.credential.subjectId))}\n where ${exactSqlText(sql, c.column(read.credential.credentialKey), c.value(read.credential.credentialKey, key))} limit 65`;\n\n if (rows.length === 0 || rows.length > 64) return undefined;\n const row = c.decode(rows[0]!, \"c_\");\n const subjectRow = s.decode(rows[0]!, \"s_\");\n const owner = read.credential.decodeSubjectId(row);\n\n invariant(\n row[read.credential.rpId] === rpId &&\n row[read.credential.protocolCredentialId] === protocolCredentialId,\n );\n invariant(\n rows.every((selected) => {\n const other = c.decode(selected, \"c_\");\n const subjectValue = s.decode(selected, \"s_\");\n\n return (\n sameId(owner, read.credential.decodeSubjectId(other)) &&\n sameId(owner, read.subject.decodeId(subjectValue)) &&\n other[read.credential.credentialId] === row[read.credential.credentialId] &&\n other[read.credential.credentialRevision] === row[read.credential.credentialRevision] &&\n subjectValue[read.subject.securityRevision] ===\n subjectRow[read.subject.securityRevision]\n );\n }),\n );\n\n return yield* decodeCredential(\n row,\n revision(\n subjectRow,\n rows.map((row) => f.decode(row, \"f_\")),\n ),\n subjectRow,\n );\n }\n\n const rows =\n yield* sql<PasskeyNativeRow>`select ${credential.fields(\"c_\")} from ${credential.name} where ${credential.column(read.credential.credentialKey)} = ${credential.value(read.credential.credentialKey, key)} and ${active(\"credential\")}`;\n\n if (rows.length !== 1) return undefined;\n const row = credential.decode(rows[0]!, \"c_\");\n\n invariant(\n row[read.credential.rpId] === rpId &&\n row[read.credential.protocolCredentialId] === protocolCredentialId,\n );\n const current = yield* readAuthority(read.credential.decodeSubjectId(row), false);\n\n return current === undefined\n ? undefined\n : yield* decodeCredential(row, current.revision, current.row);\n });\n\n return {\n sql,\n tables,\n subject,\n credential,\n factor,\n now,\n storedNow,\n millis,\n active,\n native,\n sameId,\n revision,\n decodeCredential,\n readAuthority,\n lookup,\n joinedSubject,\n joinedFactor,\n joinedCredential,\n selected,\n mapped: sqlMapping,\n };\n});\n\nexport const makePasskeyNativeState = Effect.fnUntraced(function* (\n tables: NativeSqlTables,\n mapping: PasskeyNativeMapping,\n) {\n const state = yield* makePasskeyNativeReadState(tables, mapping.read, mapping.clock);\n const ceremony = yield* makePasskeyNativeFlow(tables, mapping);\n\n return { ...state, mapping, ceremony, flow: ceremony.flow, access: ceremony.access };\n});\n\nexport type PasskeyNativeReadState = Effect.Success<ReturnType<typeof makePasskeyNativeReadState>>;\nexport type PasskeyNativeState = Effect.Success<ReturnType<typeof makePasskeyNativeState>>;\n"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { TableModel } from "./table-model.mjs";
2
+ import "./mapping-error.mjs";
3
+ import { PasskeyManagementMapping } from "./models/passkey-write-model.mjs";
4
+ import "./native-sql-table.mjs";
5
+ import "./sql-commit.mjs";
6
+ import "./passkey-native-state.mjs";
7
+ import { NativePasskeyServices } from "./passkey-native.mjs";
8
+ import { Effect, Schema } from "effect";
9
+ import { SqlClient } from "effect/sql";
10
+ import { Fragment } from "effect/sql/Statement";
11
+ import * as M from "@yielded/auth/Passkey";
12
+ //#region src/internal/passkey-native-write.d.ts
13
+ export type NativePasskeyManagementMapping = PasskeyManagementMapping<TableModel, TableModel, TableModel, TableModel, unknown, any>;
14
+ export declare const makePasskeyNativeManagement: (base: NativePasskeyServices, mapping: NativePasskeyManagementMapping) => {
15
+ passkeyManagementPersistence: {
16
+ readonly list: (input: {
17
+ readonly moduleId: string;
18
+ readonly subjectId: import("@yielded/auth/Schema").SubjectId;
19
+ readonly cursor?: string;
20
+ readonly limit: number;
21
+ }) => Effect.Effect<{
22
+ readonly credentials: ReadonlyArray<M.PasskeyCredentialSummary>;
23
+ readonly cursor?: string;
24
+ }, M.PasskeyUnavailable>;
25
+ readonly completeEnrollment: <A>(input: {
26
+ readonly access: M.PasskeyAccess;
27
+ readonly ceremony: M.PasskeyCeremony;
28
+ readonly verified: M.PasskeyRegistrationVerified;
29
+ readonly management: M.PasskeyManagementPolicy;
30
+ }, prepare: M.PreparePasskeyCommit<{
31
+ readonly _tag: "Enrolled";
32
+ readonly credential: M.PasskeyCredentialSummary;
33
+ } | {
34
+ readonly _tag: "Rejected";
35
+ }, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, M.PasskeyUnavailable>;
36
+ readonly inspectRemove: (input: {
37
+ readonly moduleId: string;
38
+ readonly subjectId: import("@yielded/auth/Schema").SubjectId;
39
+ readonly credentialId: string;
40
+ }) => Effect.Effect<{
41
+ readonly _tag: "Target";
42
+ readonly credential: M.PasskeyCredential;
43
+ } | {
44
+ readonly _tag: "Rejected";
45
+ }, M.PasskeyUnavailable>;
46
+ readonly remove: <A>(input: {
47
+ readonly moduleId: string;
48
+ readonly commandId: string;
49
+ readonly credential: M.PasskeyCredential;
50
+ readonly authorization: M.PasskeyActionAuthorization;
51
+ readonly management: M.PasskeyManagementPolicy;
52
+ readonly invalidation: import("@yielded/auth/Sessions").SessionInvalidationWindow;
53
+ }, prepare: M.PreparePasskeyCommit<{
54
+ readonly _tag: "Removed";
55
+ readonly result: {
56
+ readonly credentialId: string;
57
+ readonly invalidation: {
58
+ readonly trigger: "all-session-revocation" | "credential-change" | "factor-reset" | "identifier-change" | "password-reset" | "subject-delete" | "subject-disable";
59
+ readonly existingSessions: "cache-expiry" | "immediate" | "original-absolute-expiry";
60
+ readonly maximumExposureMillis: number;
61
+ readonly oldAuthenticationEvidence: "rejected";
62
+ };
63
+ };
64
+ } | {
65
+ readonly _tag: "Rejected" | "LastSignInMethod";
66
+ }, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, M.PasskeyUnavailable>;
67
+ readonly rename: <A>(input: {
68
+ readonly moduleId: string;
69
+ readonly subjectId: import("@yielded/auth/Schema").SubjectId;
70
+ readonly commandId: string;
71
+ readonly credentialId: string;
72
+ readonly name: string;
73
+ }, prepare: M.PreparePasskeyCommit<{
74
+ readonly _tag: "Renamed";
75
+ readonly credential: M.PasskeyCredentialSummary;
76
+ } | {
77
+ readonly _tag: "Rejected";
78
+ }, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, M.PasskeyUnavailable>;
79
+ };
80
+ };
81
+ //#endregion
82
+ //# sourceMappingURL=passkey-native-write.d.mts.map