@yielded/auth-persistence 0.1.0-beta.25 → 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 +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
@@ -3,7 +3,6 @@ import type {
3
3
  OAuthActionAuthorization,
4
4
  OAuthAccountRevision,
5
5
  OAuthRegistrationIntent,
6
- OAuthCredentialSnapshot,
7
6
  OAuthExternalIdentity,
8
7
  OAuthRegistrationAccess,
9
8
  OAuthRegistrationInspection,
@@ -13,33 +12,18 @@ import type {
13
12
  OAuthRegistrationDecision,
14
13
  OAuthCleanupInput,
15
14
  } from "@yielded/auth/OAuth";
16
- import type { AuthenticationFactor } from "@yielded/auth/Operations";
15
+ import { AuthenticationFactor } from "@yielded/auth/Operations";
16
+ import type { CleanupResult } from "@yielded/auth/Persistence";
17
17
  import type { TokenDigest } from "@yielded/auth/Schema";
18
- import type { AuthenticationRequirement, SecurityRevision } from "@yielded/auth/Sessions";
19
- import type { Crypto, Effect, PlatformError } from "effect";
18
+ import { type AuthenticationRequirement, SecurityRevision } from "@yielded/auth/Sessions";
19
+ import { type Effect, Schema } from "effect";
20
20
 
21
- import type { TableModel as Table, SqlExpression } from "../query-operations";
21
+ import type { TableModel as Table, SqlExpression } from "../table-model";
22
22
  import type { PersistenceMappingError, SubjectIdCodec } from "./common";
23
23
 
24
24
  type Column<T extends Table> = T["column"];
25
-
26
- export type OAuthFlowState =
27
- | "Pending"
28
- | "Claimed"
29
- | "Verified"
30
- | "RegistrationIssued"
31
- | "Linked"
32
- | "Cancelled"
33
- | "Rejected"
34
- | "Ambiguous"
35
- | "Conflict";
36
-
37
- export type OAuthTupleState = "Unowned" | "Reserved" | "Owned";
38
- export type OAuthRegistrationState = "Unbound" | "Registered" | "ProvisioningPending" | "Rejected";
39
25
  export type OAuthAction = OAuthActionAuthorization["challenge"]["action"];
40
26
 
41
- /** The engine writes every critical column explicitly after applying the pure
42
- * consumer encoder. Native instant values must roundtrip without precision loss. */
43
27
  export interface OAuthClock<Expression extends SqlExpression = SqlExpression> {
44
28
  readonly encodeInstant: (millis: number) => unknown;
45
29
  readonly decodeInstant: (value: unknown) => number;
@@ -47,6 +31,9 @@ export interface OAuthClock<Expression extends SqlExpression = SqlExpression> {
47
31
  * PostgreSQL uses clock_timestamp(), never now()/CURRENT_TIMESTAMP. D1 repeats
48
32
  * its primary-engine sample bounds in final guards. Return integer milliseconds. */
49
33
  readonly engineNowMillis: Expression;
34
+ /** Convert a stored timestamp expression to integer milliseconds. */
35
+ readonly toMillis: (expression: Expression) => Expression;
36
+ readonly fromMillis: (expression: Expression) => Expression;
50
37
  }
51
38
 
52
39
  export interface OAuthSubjectReadTable<
@@ -59,41 +46,27 @@ export interface OAuthSubjectReadTable<
59
46
  readonly securityRevision: Column<S>;
60
47
  readonly isActiveStatus: (value: unknown) => boolean;
61
48
  readonly activeCondition: Expression;
49
+ readonly decodeAuthenticationRequirement: (row: S["select"]) => AuthenticationRequirement;
62
50
  }
63
51
 
64
52
  export interface OAuthSubjectTable<
65
53
  S extends Table,
66
54
  Expression extends SqlExpression = SqlExpression,
67
55
  > extends OAuthSubjectReadTable<S, Expression> {
68
- readonly decodeActionRequirement: (
69
- row: S["select"],
70
- action: OAuthAction,
71
- ) => AuthenticationRequirement;
72
- readonly decodeAuthenticationRequirement: (row: S["select"]) => AuthenticationRequirement;
73
56
  readonly nextSecurityRevision: (current: SecurityRevision) => SecurityRevision;
74
57
  }
75
58
 
76
- export interface OAuthOwnershipReadTable<
77
- O extends Table,
78
- N,
79
- Expression extends SqlExpression = SqlExpression,
80
- > {
59
+ export interface OAuthOwnershipReadTable<O extends Table, N> {
81
60
  readonly table: O["table"];
82
61
  readonly identityKey: Column<O>;
83
62
  readonly provider: Column<O>;
84
63
  readonly issuer: Column<O>;
85
64
  readonly externalSubject: Column<O>;
86
65
  readonly subjectId: Column<O>;
87
- /** Includes Owned state when authority and ownership share a physical table. */
88
- readonly ownedCondition: Expression;
89
66
  readonly decodeSubjectId: (row: O["select"]) => N;
90
67
  }
91
68
 
92
- export interface OAuthOwnershipTable<
93
- O extends Table,
94
- N,
95
- Expression extends SqlExpression = SqlExpression,
96
- > extends OAuthOwnershipReadTable<O, N, Expression> {
69
+ export interface OAuthOwnershipTable<O extends Table, N> extends OAuthOwnershipReadTable<O, N> {
97
70
  readonly encodeInsert: (input: {
98
71
  readonly identity: typeof OAuthExternalIdentity.Type;
99
72
  readonly identityKey: string;
@@ -157,117 +130,42 @@ export interface OAuthAuthorityTable<
157
130
  }) => C["insert"];
158
131
  }
159
132
 
160
- /** Both purposes may use the same physical table. Shared tables share module/flow
161
- * and module/command uniqueness. The snapshot has the exact purpose-specific core
162
- * codec; terminal writes erase it, while identity, claim and retention columns remain. */
133
+ /** Live ceremonies only. Predicate columns enforce access before deletion; the
134
+ * snapshot retains the exact authenticated context and encrypted protocol data. */
163
135
  export interface OAuthFlowTable<F extends Table> {
164
136
  readonly table: F["table"];
165
137
  readonly moduleId: Column<F>;
166
138
  readonly flowId: Column<F>;
167
- readonly commandId: Column<F>;
168
139
  readonly purpose: Column<F>;
169
140
  readonly generation: Column<F>;
170
- readonly state: Column<F>;
171
- readonly version: Column<F>;
141
+ readonly provider: Column<F>;
142
+ readonly callbackId: Column<F>;
143
+ readonly issuer: Column<F>;
144
+ readonly responseIssuerMode: Column<F>;
145
+ readonly subjectId: Column<F>;
172
146
  readonly stateDigest: Column<F>;
173
147
  readonly binderVerifier: Column<F>;
174
148
  readonly binderExpiresAt: Column<F>;
175
149
  readonly snapshot: Column<F>;
176
150
  readonly issuedAt: Column<F>;
177
151
  readonly expiresAt: Column<F>;
178
- readonly claimId: Column<F>;
179
- readonly claimedAt: Column<F>;
180
- readonly claimExpiresAt: Column<F>;
181
- readonly retentionUntil: Column<F>;
182
152
  readonly encodeInsert: (input: {
183
153
  readonly moduleId: string;
184
154
  readonly flowId: string;
185
- readonly purpose: "sign-in" | "link";
155
+ readonly purpose: "sign-in" | "link" | "connect";
186
156
  }) => F["insert"];
187
157
  }
188
158
 
189
- export interface OAuthTupleAuthorityTable<T extends Table, N> {
190
- readonly table: T["table"];
191
- readonly identityKey: Column<T>;
192
- readonly provider: Column<T>;
193
- readonly issuer: Column<T>;
194
- readonly externalSubject: Column<T>;
195
- readonly state: Column<T>;
196
- readonly version: Column<T>;
197
- readonly subjectId: Column<T>;
198
- /** Exact reservation identity; no application payload or bearer. */
199
- readonly reservation: Column<T>;
200
- readonly encodeInsert: (input: {
201
- readonly identityKey: string;
202
- readonly identity: typeof OAuthExternalIdentity.Type;
203
- readonly subjectId?: N;
204
- }) => T["insert"];
205
- }
159
+ export const OAuthEligibilityFact = Schema.Struct({
160
+ credentialId: Schema.NonEmptyString.check(Schema.isMaxLength(256)),
161
+ revision: SecurityRevision,
162
+ usablePrimary: Schema.Boolean,
163
+ factors: Schema.Array(AuthenticationFactor).check(Schema.isMaxLength(8)),
164
+ userVerified: Schema.Boolean,
165
+ phishingResistant: Schema.Boolean,
166
+ });
206
167
 
207
- export interface OAuthRegistrationIntentTable<I extends Table> {
208
- readonly table: I["table"];
209
- readonly moduleId: Column<I>;
210
- readonly reference: Column<I>;
211
- readonly flowId: Column<I>;
212
- readonly claimId: Column<I>;
213
- readonly identityKey: Column<I>;
214
- readonly version: Column<I>;
215
- readonly state: Column<I>;
216
- readonly snapshot: Column<I>;
217
- readonly commandId: Column<I>;
218
- readonly fingerprint: Column<I>;
219
- readonly pendingReference: Column<I>;
220
- readonly expiresAt: Column<I>;
221
- readonly retentionUntil: Column<I>;
222
- readonly encodeInsert: (intent: OAuthRegistrationIntent) => I["insert"];
223
- }
224
-
225
- export interface OAuthRegistrationCommandTable<R extends Table, Registration> {
226
- readonly table: R["table"];
227
- readonly moduleId: Column<R>;
228
- readonly commandId: Column<R>;
229
- readonly reference: Column<R>;
230
- readonly identityKey: Column<R>;
231
- readonly fingerprint: Column<R>;
232
- readonly intentSnapshot: Column<R>;
233
- readonly applicationSnapshot: Column<R>;
234
- readonly provisioningIdentity: Column<R>;
235
- readonly decision: Column<R>;
236
- readonly retentionUntil: Column<R>;
237
- /** Persists exact detached Type before protected pending work can start. */
238
- readonly encodeInsert: (input: {
239
- readonly intent: OAuthRegistrationIntent;
240
- readonly commandId: string;
241
- readonly fingerprint: string;
242
- readonly registration: Registration;
243
- readonly provisioningIdentity: string;
244
- }) => R["insert"];
245
- }
246
-
247
- export interface OAuthUnlinkCommandTable<U extends Table> {
248
- readonly table: U["table"];
249
- readonly moduleId: Column<U>;
250
- readonly commandId: Column<U>;
251
- readonly subjectId: Column<U>;
252
- readonly credentialId: Column<U>;
253
- readonly intentSnapshot: Column<U>;
254
- readonly decision: Column<U>;
255
- readonly retentionUntil: Column<U>;
256
- readonly encodeInsert: (input: {
257
- readonly moduleId: string;
258
- readonly commandId: string;
259
- readonly credential: OAuthCredentialSnapshot;
260
- }) => U["insert"];
261
- }
262
-
263
- export interface OAuthEligibilityFact {
264
- readonly credentialId: string;
265
- readonly revision: SecurityRevision;
266
- readonly usablePrimary: boolean;
267
- readonly factors: ReadonlyArray<AuthenticationFactor>;
268
- readonly userVerified: boolean;
269
- readonly phishingResistant: boolean;
270
- }
168
+ export type OAuthEligibilityFact = typeof OAuthEligibilityFact.Type;
271
169
 
272
170
  /** Each descriptor reads only its own subject-scoped method rows. The native row
273
171
  * projector and SQL condition must express the same installed method eligibility.
@@ -288,12 +186,6 @@ export interface OAuthEligibilityTable<
288
186
  readonly decode: (row: T["select"]) => OAuthEligibilityFact | undefined;
289
187
  }
290
188
 
291
- /** Authenticated command replay uses current subject status and this additional
292
- * nonconsuming SQL policy. It never consumes a fresh action factor. */
293
- export interface OAuthMetadataPolicy<N, Expression extends SqlExpression = SqlExpression> {
294
- readonly condition: (subjectId: N) => Expression;
295
- }
296
-
297
189
  export interface OAuthCleanupTable<
298
190
  T extends Table,
299
191
  N,
@@ -310,160 +202,6 @@ export interface OAuthCleanupTable<
310
202
  readonly disposition: "delete";
311
203
  }
312
204
 
313
- export interface OAuthRegistrationEligibility<N, Expression extends SqlExpression = SqlExpression> {
314
- /** Pure SQL guards for mutable app policy; evaluated again after app writes. */
315
- readonly condition: (input: {
316
- readonly intent: OAuthRegistrationIntent;
317
- readonly nativeSubjectId?: N;
318
- }) => Expression;
319
- }
320
-
321
- export interface OAuthD1Mapping {
322
- readonly d1: { readonly primary: true };
323
- }
324
-
325
- export const requiredOAuthSignInConstraints = {
326
- flow: "unique(flow.moduleId,flow.flowId)",
327
- command: "unique(flow.moduleId,flow.commandId)",
328
- stateDigest: "unique(flow.stateDigest)",
329
- ownership: "unique(ownership.identityKey)",
330
- credentialId: "unique(credential.credentialId)",
331
- credentialIdentity: "unique(credential.identityKey)",
332
- authorityCredential: "unique(authority.subjectId,authority.credentialId)",
333
- } as const;
334
-
335
- export const requiredOAuthTupleConstraints = { identityKey: "unique(tuple.identityKey)" } as const;
336
-
337
- export const requiredOAuthRegistrationConstraints = {
338
- intentReference: "unique(intent.moduleId,intent.reference)",
339
- intentFlow: "unique(intent.moduleId,intent.flowId)",
340
- command: "unique(registrationCommand.moduleId,registrationCommand.commandId)",
341
- } as const;
342
-
343
- export const requiredOAuthAccountsConstraints = {
344
- unlinkCommand: "unique(unlinkCommand.moduleId,unlinkCommand.commandId)",
345
- } as const;
346
-
347
- export interface OAuthSignInMapping<
348
- S extends Table,
349
- O extends Table,
350
- C extends Table,
351
- AC extends Table,
352
- F extends Table,
353
- N,
354
- Expression extends SqlExpression = SqlExpression,
355
- > {
356
- readonly subject: OAuthSubjectReadTable<S, Expression>;
357
- readonly ownership: OAuthOwnershipReadTable<O, N, Expression>;
358
- readonly credential: OAuthCredentialReadTable<C, Expression>;
359
- readonly authority: OAuthAuthorityReadTable<AC, Expression>;
360
- readonly flow: OAuthFlowTable<F>;
361
- readonly subjectId: SubjectIdCodec<N>;
362
- readonly clock: OAuthClock<Expression>;
363
- readonly constraints: typeof requiredOAuthSignInConstraints;
364
- }
365
-
366
- export type OAuthOwnershipMutation<
367
- T extends Table,
368
- O extends Table,
369
- N,
370
- Expression extends SqlExpression = SqlExpression,
371
- > =
372
- | { readonly mode: "integrated"; readonly tuple: OAuthTupleAuthorityTable<T, N> }
373
- | {
374
- readonly mode: "separate";
375
- readonly tuple: OAuthTupleAuthorityTable<T, N>;
376
- readonly external: OAuthOwnershipTable<O, N, Expression>;
377
- };
378
-
379
- export interface OAuthRegistrationIntentMapping<
380
- S extends Table,
381
- O extends Table,
382
- C extends Table,
383
- AC extends Table,
384
- F extends Table,
385
- T extends Table,
386
- I extends Table,
387
- N,
388
- Expression extends SqlExpression = SqlExpression,
389
- > {
390
- readonly signIn: OAuthSignInMapping<S, O, C, AC, F, N, Expression>;
391
- readonly ownership: OAuthOwnershipMutation<T, O, N, Expression>;
392
- readonly intent: OAuthRegistrationIntentTable<I>;
393
- readonly tupleConstraints: typeof requiredOAuthTupleConstraints;
394
- readonly registrationConstraints: Pick<
395
- typeof requiredOAuthRegistrationConstraints,
396
- "intentReference" | "intentFlow"
397
- >;
398
- readonly eligibility: OAuthRegistrationEligibility<N, Expression>;
399
- }
400
-
401
- export interface OAuthRegistrationBase<
402
- Registration,
403
- T extends Table,
404
- O extends Table,
405
- I extends Table,
406
- R extends Table,
407
- N,
408
- Expression extends SqlExpression = SqlExpression,
409
- Descriptor extends object = object,
410
- > {
411
- readonly ownership: OAuthOwnershipMutation<T, O, N, Expression>;
412
- readonly intent: OAuthRegistrationIntentTable<I>;
413
- readonly command: OAuthRegistrationCommandTable<R, Registration>;
414
- readonly clock: OAuthClock<Expression>;
415
- readonly tupleConstraints: typeof requiredOAuthTupleConstraints;
416
- readonly constraints: typeof requiredOAuthRegistrationConstraints;
417
- readonly inspect: (input: {
418
- readonly intent: OAuthRegistrationIntent;
419
- readonly registration: Registration;
420
- }) => Effect.Effect<
421
- { readonly fingerprint: string; readonly eligible: boolean },
422
- PersistenceMappingError
423
- >;
424
- /** Required for an explicitly bound native/DO command: no asynchronous callback
425
- * is evaluated inside the physical owner. Standalone inspection is pre-owner. */
426
- readonly inspectSync?: (input: {
427
- readonly intent: OAuthRegistrationIntent;
428
- readonly registration: Registration;
429
- }) => { readonly fingerprint: string; readonly eligible: boolean };
430
- /** Type projection, never the original wire transformation. */
431
- readonly snapshot: (
432
- registration: Registration,
433
- ) => Effect.Effect<Registration, PersistenceMappingError>;
434
- readonly snapshotSync?: (registration: Registration) => Registration;
435
- /** Canonical bounded storage of Registration.Type. These are Type codecs, not
436
- * the original wire decoder/encoder; decode(encode(value)) must encode identically.
437
- * The engine writes and roundtrip-checks this exact string (maximum 1 MiB). */
438
- readonly application: {
439
- readonly encode: (registration: Registration) => string;
440
- readonly decode: (stored: string) => Registration;
441
- };
442
- readonly eligibility: {
443
- /** Stable application authority anchors, in one configured global order.
444
- * Omit only for immutable/tuple-local policy or an equivalent explicit outer
445
- * owner lock. Each scope must match 1..64 rows, never an absent quota row.
446
- * Locks precede tuple/intent/command locks; postcondition owns changed state. */
447
- readonly guards?: ReadonlyArray<
448
- OAuthRegistrationGuardDescriptor<Registration, N, Expression, Descriptor>
449
- >;
450
- readonly admission: (input: {
451
- readonly intent: OAuthRegistrationIntent;
452
- readonly registration: Registration;
453
- readonly nativeSubjectId?: N;
454
- }) => Expression;
455
- /** Evaluated after subject/application writes, including appended coordinator
456
- * writes. May assert consumption of the admission invitation/quota. */
457
- readonly postcondition: (input: {
458
- readonly intent: OAuthRegistrationIntent;
459
- readonly registration: Registration;
460
- readonly nativeSubjectId?: N;
461
- }) => Expression;
462
- };
463
- readonly allocateProvisioningIdentity: Effect.Effect<string, PersistenceMappingError>;
464
- readonly retentionMillis: number;
465
- }
466
-
467
205
  export interface OAuthRegistrationGuardTable<
468
206
  T extends Table,
469
207
  Registration,
@@ -504,40 +242,6 @@ export const oauthRegistrationGuardTable = <
504
242
  condition: input.condition,
505
243
  });
506
244
 
507
- export type OAuthRegistrationMapping<
508
- Registration,
509
- S extends Table,
510
- O extends Table,
511
- C extends Table,
512
- AC extends Table,
513
- T extends Table,
514
- I extends Table,
515
- R extends Table,
516
- N,
517
- Expression extends SqlExpression = SqlExpression,
518
- Descriptor extends object = object,
519
- > = OAuthRegistrationBase<Registration, T, O, I, R, N, Expression, Descriptor> &
520
- (
521
- | {
522
- readonly mode: "pending";
523
- readonly allocatePendingReference: Effect.Effect<string, PersistenceMappingError>;
524
- }
525
- | {
526
- readonly mode: "atomic";
527
- readonly subjectId: SubjectIdCodec<N>;
528
- readonly subject: OAuthSubjectReadTable<S, Expression>;
529
- readonly credential: OAuthCredentialTable<C, N, Expression>;
530
- readonly authority: OAuthAuthorityTable<AC, N, Expression>;
531
- readonly allocateSubjectId: Effect.Effect<N, PersistenceMappingError>;
532
- readonly allocateCredentialId: Effect.Effect<string, PersistenceMappingError>;
533
- readonly allocateRevision: Effect.Effect<SecurityRevision, PersistenceMappingError>;
534
- readonly encodeSubjectInsert: (
535
- input: { readonly intent: OAuthRegistrationIntent; readonly registration: Registration },
536
- ids: { readonly subjectId: N; readonly securityRevision: SecurityRevision },
537
- ) => S["insert"];
538
- }
539
- );
540
-
541
245
  /** Heterogeneous descriptors are made by typed factories and projected privately. */
542
246
  export interface OAuthEligibilityDescriptor<
543
247
  N,
@@ -595,45 +299,130 @@ export const oauthCleanupTable = <
595
299
  ): OAuthCleanupDescriptor<N, Expression, T["table"]> =>
596
300
  Object.freeze({ table: input.table, subjectId: input.subjectId, condition: input.condition });
597
301
 
598
- /** A stable application/reference lock acquired before an ownership target.
599
- * Missing rows retain ownership. Conditions use detached native IDs; every
600
- * writer of the guarded reference follows the same order. */
601
- export interface OAuthReferenceGuardTable<
602
- T extends Table,
302
+ /** Original application binding and retained decision are encoded in snapshot. */
303
+ export interface OAuthRegistrationIntentTable<I extends Table> {
304
+ readonly table: I["table"];
305
+ readonly moduleId: Column<I>;
306
+ readonly reference: Column<I>;
307
+ readonly flowId: Column<I>;
308
+ readonly identityKey: Column<I>;
309
+ readonly snapshot: Column<I>;
310
+ readonly expiresAt: Column<I>;
311
+ readonly retentionUntil: Column<I>;
312
+ readonly encodeInsert: (intent: OAuthRegistrationIntent) => I["insert"];
313
+ }
314
+
315
+ export interface OAuthD1Mapping {
316
+ readonly d1: { readonly primary: true };
317
+ }
318
+
319
+ export const requiredOAuthSignInConstraints = {
320
+ flow: "unique(flow.moduleId,flow.flowId)",
321
+ stateDigest: "unique(flow.stateDigest)",
322
+ ownership: "unique(ownership.identityKey)",
323
+ credentialId: "unique(credential.credentialId)",
324
+ credentialIdentity: "unique(credential.identityKey)",
325
+ authorityCredential: "unique(authority.subjectId,authority.credentialId)",
326
+ } as const;
327
+
328
+ export const requiredOAuthRegistrationConstraints = {
329
+ intentReference: "unique(intent.moduleId,intent.reference)",
330
+ intentFlow: "unique(intent.moduleId,intent.flowId)",
331
+ ownership: "unique(ownership.identityKey)",
332
+ credentialId: "unique(credential.credentialId)",
333
+ credentialIdentity: "unique(credential.identityKey)",
334
+ authorityCredential: "unique(authority.subjectId,authority.credentialId)",
335
+ } as const;
336
+
337
+ export interface OAuthSignInMapping<
338
+ S extends Table,
339
+ O extends Table,
340
+ C extends Table,
341
+ AC extends Table,
342
+ F extends Table,
603
343
  N,
604
344
  Expression extends SqlExpression = SqlExpression,
605
345
  > {
606
- readonly table: T["table"];
607
- readonly orderBy: Column<T>;
608
- readonly condition: (input: {
609
- readonly identity: typeof OAuthExternalIdentity.Type;
610
- readonly identityKey: string;
611
- readonly subjectId: N;
612
- }) => Expression | Effect.Effect<Expression, PlatformError.PlatformError, Crypto.Crypto>;
346
+ readonly subject: OAuthSubjectReadTable<S, Expression>;
347
+ readonly ownership: OAuthOwnershipReadTable<O, N>;
348
+ readonly credential: OAuthCredentialReadTable<C, Expression>;
349
+ readonly authority: OAuthAuthorityReadTable<AC, Expression>;
350
+ readonly flow: OAuthFlowTable<F>;
351
+ readonly subjectId: SubjectIdCodec<N>;
352
+ readonly clock: OAuthClock<Expression>;
353
+ readonly constraints: typeof requiredOAuthSignInConstraints;
613
354
  }
614
355
 
615
- export interface OAuthReferenceGuardDescriptor<
356
+ export interface OAuthRegistrationIntentMapping<
357
+ O extends Table,
358
+ I extends Table,
616
359
  N,
617
360
  Expression extends SqlExpression = SqlExpression,
618
- Descriptor extends object = object,
619
361
  > {
620
- readonly table: Descriptor;
621
- readonly orderBy: string;
622
- readonly condition: OAuthReferenceGuardTable<Table, N, Expression>["condition"];
362
+ readonly ownership: OAuthOwnershipReadTable<O, N>;
363
+ readonly intent: OAuthRegistrationIntentTable<I>;
364
+ readonly clock: OAuthClock<Expression>;
365
+ readonly constraints: Pick<
366
+ typeof requiredOAuthRegistrationConstraints,
367
+ "intentReference" | "intentFlow" | "ownership"
368
+ >;
369
+ readonly eligible: (intent: OAuthRegistrationIntent) => Expression;
623
370
  }
624
371
 
625
- export const oauthReferenceGuardTable = <
626
- T extends Table,
372
+ export interface OAuthRegistrationMapping<
373
+ Registration,
374
+ S extends Table,
375
+ O extends Table,
376
+ C extends Table,
377
+ AC extends Table,
378
+ I extends Table,
627
379
  N,
628
380
  Expression extends SqlExpression = SqlExpression,
629
- >(
630
- input: OAuthReferenceGuardTable<T, N, Expression>,
631
- ): OAuthReferenceGuardDescriptor<N, Expression, T["table"]> =>
632
- Object.freeze({
633
- table: input.table,
634
- orderBy: input.orderBy,
635
- condition: input.condition,
636
- });
381
+ Descriptor extends object = object,
382
+ > {
383
+ readonly registration: Schema.Codec<Registration, unknown, never, never>;
384
+ readonly ownership: OAuthOwnershipTable<O, N>;
385
+ readonly intent: OAuthRegistrationIntentTable<I>;
386
+ readonly subject: OAuthSubjectReadTable<S, Expression>;
387
+ readonly credential: OAuthCredentialTable<C, N, Expression>;
388
+ readonly authority: OAuthAuthorityTable<AC, N, Expression>;
389
+ readonly subjectId: SubjectIdCodec<N>;
390
+ readonly clock: OAuthClock<Expression>;
391
+ readonly constraints: typeof requiredOAuthRegistrationConstraints;
392
+ readonly inspect: (input: {
393
+ readonly intent: OAuthRegistrationIntent;
394
+ readonly registration: Registration;
395
+ }) => Effect.Effect<
396
+ { readonly fingerprint: string; readonly eligible: boolean },
397
+ PersistenceMappingError
398
+ >;
399
+ readonly eligibility: {
400
+ readonly guards?: ReadonlyArray<
401
+ OAuthRegistrationGuardDescriptor<Registration, N, Expression, Descriptor>
402
+ >;
403
+ readonly admission: (input: {
404
+ readonly intent: OAuthRegistrationIntent;
405
+ readonly registration: Registration;
406
+ readonly nativeSubjectId?: N;
407
+ }) => Expression;
408
+ readonly postcondition: (input: {
409
+ readonly intent: OAuthRegistrationIntent;
410
+ readonly registration: Registration;
411
+ readonly nativeSubjectId?: N;
412
+ }) => Expression;
413
+ };
414
+ readonly allocateSubjectId: Effect.Effect<N, PersistenceMappingError>;
415
+ readonly allocateCredentialId: Effect.Effect<string, PersistenceMappingError>;
416
+ readonly allocateRevision: Effect.Effect<SecurityRevision, PersistenceMappingError>;
417
+ readonly encodeSubjectInsert: (
418
+ input: {
419
+ readonly intent: OAuthRegistrationIntent;
420
+ readonly registration: Registration;
421
+ readonly requestId: string;
422
+ },
423
+ ids: { readonly subjectId: N; readonly securityRevision: SecurityRevision },
424
+ ) => S["insert"];
425
+ }
637
426
 
638
427
  export interface OAuthAccountsMapping<
639
428
  S extends Table,
@@ -641,38 +430,26 @@ export interface OAuthAccountsMapping<
641
430
  C extends Table,
642
431
  AC extends Table,
643
432
  F extends Table,
644
- T extends Table,
645
- U extends Table,
646
433
  N,
647
434
  Expression extends SqlExpression = SqlExpression,
648
435
  Descriptor extends object = object,
649
436
  > {
650
437
  readonly subject: OAuthSubjectTable<S, Expression>;
651
- readonly ownership: OAuthOwnershipMutation<T, O, N, Expression>;
438
+ readonly ownership: OAuthOwnershipTable<O, N>;
652
439
  readonly credential: OAuthCredentialTable<C, N, Expression>;
653
440
  readonly authority: OAuthAuthorityTable<AC, N, Expression>;
654
441
  readonly flow: OAuthFlowTable<F>;
655
- readonly command: OAuthUnlinkCommandTable<U>;
656
442
  readonly subjectId: SubjectIdCodec<N>;
657
443
  readonly clock: OAuthClock<Expression>;
658
- readonly constraints: typeof requiredOAuthSignInConstraints &
659
- typeof requiredOAuthAccountsConstraints;
660
- readonly tupleConstraints: typeof requiredOAuthTupleConstraints;
444
+ readonly constraints: typeof requiredOAuthSignInConstraints;
661
445
  readonly eligibility: ReadonlyArray<OAuthEligibilityDescriptor<N, Expression, Descriptor>>;
662
446
  readonly cleanup: ReadonlyArray<OAuthCleanupDescriptor<N, Expression, Descriptor>>;
663
- readonly metadata: OAuthMetadataPolicy<N, Expression>;
664
447
  readonly sessionInvalidation: "same-authority-immediate" | "original-absolute-expiry";
665
- /** Omit only when connected access is absent. A predicate alone conservatively
666
- * retains ownership; release also needs all configured guard rows below. */
667
- readonly connectedReference?: (input: {
448
+ /** Indexed same-owner reference predicate for any installed grant/application references. */
449
+ readonly otherReferences: (input: {
668
450
  readonly identityKey: string;
669
451
  readonly subjectId: N;
670
452
  }) => Expression;
671
- /** At most 32 descriptors, each locking 1..64 stable rows in supplied order.
672
- * Missing/empty guards retain Owned, even when the reference predicate is false. */
673
- readonly connectedReferenceGuards?: ReadonlyArray<
674
- OAuthReferenceGuardDescriptor<N, Expression, Descriptor>
675
- >;
676
453
  readonly allocateCredentialId: Effect.Effect<string, PersistenceMappingError>;
677
454
  readonly allocateRevision: Effect.Effect<SecurityRevision, PersistenceMappingError>;
678
455
  }
@@ -698,11 +475,13 @@ export interface OAuthRegistrationAuthority<Registration> {
698
475
  readonly commandId: typeof OAuthCommandId.Type;
699
476
  readonly registration: Registration;
700
477
  readonly fingerprint: TokenDigest;
478
+ readonly payload: string;
479
+ readonly requestId: string;
701
480
  },
702
481
  prepare: PrepareOAuthCommit<OAuthRegistrationDecision, A>,
703
482
  ) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;
704
483
  readonly cleanup: <A>(
705
484
  input: OAuthCleanupInput,
706
- prepare: PrepareOAuthCommit<{ readonly removed: number; readonly hasMore: boolean }, A>,
485
+ prepare: PrepareOAuthCommit<CleanupResult, A>,
707
486
  ) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;
708
487
  }