@_mustachio/openauth 0.9.2 → 0.11.0

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 (756) hide show
  1. package/dist/esm/adapters/d1/audit-log.js +15 -0
  2. package/dist/esm/adapters/d1/config-store.js +45 -0
  3. package/dist/esm/adapters/d1/index.js +12 -0
  4. package/dist/esm/adapters/d1/key-store.js +116 -0
  5. package/dist/esm/adapters/d1/method-store.js +52 -0
  6. package/dist/esm/adapters/d1/migrations.js +77 -0
  7. package/dist/esm/adapters/d1/session-store.js +134 -0
  8. package/dist/esm/adapters/d1/session.js +18 -0
  9. package/dist/esm/adapters/d1/token-store.js +140 -0
  10. package/dist/esm/adapters/durable-object/index.js +3 -0
  11. package/dist/esm/adapters/durable-object/session-store.js +139 -0
  12. package/dist/esm/adapters/durable-object/types.js +0 -0
  13. package/dist/esm/adapters/dynamo/audit-log.js +23 -0
  14. package/dist/esm/adapters/dynamo/client.js +0 -0
  15. package/dist/esm/adapters/dynamo/config-store.js +57 -0
  16. package/dist/esm/adapters/dynamo/index.js +10 -0
  17. package/dist/esm/adapters/dynamo/key-store.js +188 -0
  18. package/dist/esm/adapters/dynamo/method-store.js +72 -0
  19. package/dist/esm/adapters/dynamo/passkey-credential-store.js +83 -0
  20. package/dist/esm/adapters/dynamo/sdk.js +128 -0
  21. package/dist/esm/adapters/dynamo/session-store.js +173 -0
  22. package/dist/esm/adapters/dynamo/token-store.js +178 -0
  23. package/dist/esm/adapters/kms/in-memory-backing.js +28 -0
  24. package/dist/esm/adapters/kms/index.js +5 -0
  25. package/dist/esm/adapters/kms/key-store.js +129 -0
  26. package/dist/esm/adapters/kms/sdk.js +23 -0
  27. package/dist/esm/adapters/kms/types.js +0 -0
  28. package/dist/esm/adapters/kv/audit-log.js +21 -0
  29. package/dist/esm/adapters/kv/config-store.js +43 -0
  30. package/dist/esm/adapters/kv/index.js +5 -0
  31. package/dist/esm/adapters/kv/method-store.js +63 -0
  32. package/dist/esm/adapters/kv/types.js +0 -0
  33. package/dist/esm/adapters/memory/audit-log.js +16 -0
  34. package/dist/esm/adapters/memory/clock.js +5 -0
  35. package/dist/esm/adapters/memory/config-store.js +31 -0
  36. package/dist/esm/adapters/memory/index.js +10 -0
  37. package/dist/esm/adapters/memory/key-store.js +78 -0
  38. package/dist/esm/adapters/memory/method-store.js +43 -0
  39. package/dist/esm/adapters/memory/passkey-credential-store.js +53 -0
  40. package/dist/esm/adapters/memory/session-store.js +104 -0
  41. package/dist/esm/adapters/memory/token-store.js +104 -0
  42. package/dist/esm/adapters/postgres/audit-log.js +16 -0
  43. package/dist/esm/adapters/postgres/config-store.js +48 -0
  44. package/dist/esm/adapters/postgres/executor.js +21 -0
  45. package/dist/esm/adapters/postgres/index.js +13 -0
  46. package/dist/esm/adapters/postgres/key-store.js +191 -0
  47. package/dist/esm/adapters/postgres/method-store.js +61 -0
  48. package/dist/esm/adapters/postgres/migrations.js +111 -0
  49. package/dist/esm/adapters/postgres/passkey-credential-store.js +80 -0
  50. package/dist/esm/adapters/postgres/session-store.js +135 -0
  51. package/dist/esm/adapters/postgres/token-store.js +151 -0
  52. package/dist/esm/client.js +35 -12
  53. package/dist/esm/domain/audit.js +13 -0
  54. package/dist/esm/domain/authorize.js +217 -0
  55. package/dist/esm/domain/callback.js +176 -0
  56. package/dist/esm/domain/client-auth.js +61 -0
  57. package/dist/esm/domain/client-credentials.js +91 -0
  58. package/dist/esm/domain/crypto.js +97 -0
  59. package/dist/esm/domain/discovery.js +83 -0
  60. package/dist/esm/domain/dpop.js +122 -0
  61. package/dist/esm/domain/id-token.js +94 -0
  62. package/dist/esm/domain/introspect.js +55 -0
  63. package/dist/esm/domain/jwt.js +71 -0
  64. package/dist/esm/domain/logout.js +75 -0
  65. package/dist/esm/domain/method-cache.js +136 -0
  66. package/dist/esm/domain/method-dispatch.js +36 -0
  67. package/dist/esm/domain/method-route.js +111 -0
  68. package/dist/esm/domain/par.js +51 -0
  69. package/dist/esm/domain/pkce.js +16 -0
  70. package/dist/esm/domain/refresh.js +102 -0
  71. package/dist/esm/domain/register.js +74 -0
  72. package/dist/esm/domain/revoke.js +81 -0
  73. package/dist/esm/domain/state-envelope.js +80 -0
  74. package/dist/esm/domain/token-exchange.js +102 -0
  75. package/dist/esm/domain/token.js +246 -0
  76. package/dist/esm/domain/userinfo.js +62 -0
  77. package/dist/esm/http/context.js +7 -0
  78. package/dist/esm/http/cookies.js +98 -0
  79. package/dist/esm/http/errors.js +71 -0
  80. package/dist/esm/http/handlers/authorize.js +250 -0
  81. package/dist/esm/http/handlers/callback.js +53 -0
  82. package/dist/esm/http/handlers/end-session.js +64 -0
  83. package/dist/esm/http/handlers/metadata.js +37 -0
  84. package/dist/esm/http/handlers/method-route.js +87 -0
  85. package/dist/esm/http/handlers/par.js +53 -0
  86. package/dist/esm/http/handlers/register.js +46 -0
  87. package/dist/esm/http/handlers/revocation.js +98 -0
  88. package/dist/esm/http/handlers/token.js +197 -0
  89. package/dist/esm/http/handlers/userinfo.js +60 -0
  90. package/dist/esm/http/middleware/error.js +15 -0
  91. package/dist/esm/http/middleware/tenant.js +102 -0
  92. package/dist/esm/http/resolver.js +15 -0
  93. package/dist/esm/http/router.js +45 -0
  94. package/dist/esm/http/schemas/authorize.js +30 -0
  95. package/dist/esm/http/schemas/end-session.js +13 -0
  96. package/dist/esm/http/schemas/par.js +9 -0
  97. package/dist/esm/http/schemas/register.js +16 -0
  98. package/dist/esm/http/schemas/revocation.js +18 -0
  99. package/dist/esm/http/schemas/token.js +57 -0
  100. package/dist/esm/index.js +126 -9
  101. package/dist/esm/methods/code.js +221 -0
  102. package/dist/esm/methods/m2m.js +41 -0
  103. package/dist/esm/methods/oauth2-factory.js +84 -0
  104. package/dist/esm/methods/oauth2-generic.js +196 -0
  105. package/dist/esm/methods/oidc-generic.js +53 -0
  106. package/dist/esm/methods/passkey.js +275 -0
  107. package/dist/esm/methods/password-hash.js +79 -0
  108. package/dist/esm/methods/password.js +166 -0
  109. package/dist/esm/methods/providers/apple.js +29 -0
  110. package/dist/esm/methods/providers/cognito.js +37 -0
  111. package/dist/esm/methods/providers/discord.js +28 -0
  112. package/dist/esm/methods/providers/facebook.js +42 -0
  113. package/dist/esm/methods/providers/github.js +29 -0
  114. package/dist/esm/methods/providers/google.js +29 -0
  115. package/dist/esm/methods/providers/index.js +17 -0
  116. package/dist/esm/methods/providers/jumpcloud.js +27 -0
  117. package/dist/esm/methods/providers/keycloak.js +32 -0
  118. package/dist/esm/methods/providers/linkedin.js +28 -0
  119. package/dist/esm/methods/providers/microsoft.js +28 -0
  120. package/dist/esm/methods/providers/slack.js +30 -0
  121. package/dist/esm/methods/providers/spotify.js +28 -0
  122. package/dist/esm/methods/providers/twitch.js +28 -0
  123. package/dist/esm/methods/providers/x.js +28 -0
  124. package/dist/esm/methods/providers/yahoo.js +27 -0
  125. package/dist/esm/pkce.js +4 -16
  126. package/dist/esm/ports/audit-log.js +0 -0
  127. package/dist/esm/ports/config-store.js +0 -0
  128. package/dist/esm/ports/key-store.js +0 -0
  129. package/dist/esm/ports/method-store.js +0 -0
  130. package/dist/esm/ports/session-store.js +0 -0
  131. package/dist/esm/ports/token-store.js +0 -0
  132. package/dist/esm/types/authorization.js +0 -0
  133. package/dist/esm/types/error.js +70 -0
  134. package/dist/esm/types/flow.js +0 -0
  135. package/dist/esm/types/idp.js +0 -0
  136. package/dist/esm/types/method.js +0 -0
  137. package/dist/esm/types/picker.js +0 -0
  138. package/dist/esm/types/result.js +11 -0
  139. package/dist/esm/types/subject.js +0 -0
  140. package/dist/esm/types/tenant.js +5 -0
  141. package/dist/esm/types/token.js +0 -0
  142. package/dist/esm/ui/forms.js +253 -0
  143. package/dist/esm/ui/index.js +8 -0
  144. package/dist/esm/ui/picker.js +49 -0
  145. package/dist/types/adapters/d1/audit-log.d.ts +19 -0
  146. package/dist/types/adapters/d1/audit-log.d.ts.map +1 -0
  147. package/dist/types/adapters/d1/config-store.d.ts +20 -0
  148. package/dist/types/adapters/d1/config-store.d.ts.map +1 -0
  149. package/dist/types/adapters/d1/index.d.ts +35 -0
  150. package/dist/types/adapters/d1/index.d.ts.map +1 -0
  151. package/dist/types/adapters/d1/key-store.d.ts +17 -0
  152. package/dist/types/adapters/d1/key-store.d.ts.map +1 -0
  153. package/dist/types/adapters/d1/method-store.d.ts +21 -0
  154. package/dist/types/adapters/d1/method-store.d.ts.map +1 -0
  155. package/dist/types/adapters/d1/migrations.d.ts +18 -0
  156. package/dist/types/adapters/d1/migrations.d.ts.map +1 -0
  157. package/dist/types/adapters/d1/session-store.d.ts +20 -0
  158. package/dist/types/adapters/d1/session-store.d.ts.map +1 -0
  159. package/dist/types/adapters/d1/session.d.ts +18 -0
  160. package/dist/types/adapters/d1/session.d.ts.map +1 -0
  161. package/dist/types/adapters/d1/token-store.d.ts +29 -0
  162. package/dist/types/adapters/d1/token-store.d.ts.map +1 -0
  163. package/dist/types/adapters/d1/types.d.ts +43 -0
  164. package/dist/types/adapters/d1/types.d.ts.map +1 -0
  165. package/dist/types/adapters/durable-object/index.d.ts +17 -0
  166. package/dist/types/adapters/durable-object/index.d.ts.map +1 -0
  167. package/dist/types/adapters/durable-object/session-store.d.ts +21 -0
  168. package/dist/types/adapters/durable-object/session-store.d.ts.map +1 -0
  169. package/dist/types/adapters/durable-object/types.d.ts +23 -0
  170. package/dist/types/adapters/durable-object/types.d.ts.map +1 -0
  171. package/dist/types/adapters/dynamo/audit-log.d.ts +19 -0
  172. package/dist/types/adapters/dynamo/audit-log.d.ts.map +1 -0
  173. package/dist/types/adapters/dynamo/client.d.ts +111 -0
  174. package/dist/types/adapters/dynamo/client.d.ts.map +1 -0
  175. package/dist/types/adapters/dynamo/config-store.d.ts +21 -0
  176. package/dist/types/adapters/dynamo/config-store.d.ts.map +1 -0
  177. package/dist/types/adapters/dynamo/index.d.ts +60 -0
  178. package/dist/types/adapters/dynamo/index.d.ts.map +1 -0
  179. package/dist/types/adapters/dynamo/key-store.d.ts +23 -0
  180. package/dist/types/adapters/dynamo/key-store.d.ts.map +1 -0
  181. package/dist/types/adapters/dynamo/method-store.d.ts +20 -0
  182. package/dist/types/adapters/dynamo/method-store.d.ts.map +1 -0
  183. package/dist/types/adapters/dynamo/passkey-credential-store.d.ts +47 -0
  184. package/dist/types/adapters/dynamo/passkey-credential-store.d.ts.map +1 -0
  185. package/dist/types/adapters/dynamo/sdk.d.ts +23 -0
  186. package/dist/types/adapters/dynamo/sdk.d.ts.map +1 -0
  187. package/dist/types/adapters/dynamo/session-store.d.ts +20 -0
  188. package/dist/types/adapters/dynamo/session-store.d.ts.map +1 -0
  189. package/dist/types/adapters/dynamo/token-store.d.ts +29 -0
  190. package/dist/types/adapters/dynamo/token-store.d.ts.map +1 -0
  191. package/dist/types/adapters/kms/in-memory-backing.d.ts +9 -0
  192. package/dist/types/adapters/kms/in-memory-backing.d.ts.map +1 -0
  193. package/dist/types/adapters/kms/index.d.ts +35 -0
  194. package/dist/types/adapters/kms/index.d.ts.map +1 -0
  195. package/dist/types/adapters/kms/key-store.d.ts +20 -0
  196. package/dist/types/adapters/kms/key-store.d.ts.map +1 -0
  197. package/dist/types/adapters/kms/sdk.d.ts +16 -0
  198. package/dist/types/adapters/kms/sdk.d.ts.map +1 -0
  199. package/dist/types/adapters/kms/types.d.ts +58 -0
  200. package/dist/types/adapters/kms/types.d.ts.map +1 -0
  201. package/dist/types/adapters/kv/audit-log.d.ts +22 -0
  202. package/dist/types/adapters/kv/audit-log.d.ts.map +1 -0
  203. package/dist/types/adapters/kv/config-store.d.ts +25 -0
  204. package/dist/types/adapters/kv/config-store.d.ts.map +1 -0
  205. package/dist/types/adapters/kv/index.d.ts +21 -0
  206. package/dist/types/adapters/kv/index.d.ts.map +1 -0
  207. package/dist/types/adapters/kv/method-store.d.ts +23 -0
  208. package/dist/types/adapters/kv/method-store.d.ts.map +1 -0
  209. package/dist/types/adapters/kv/types.d.ts +28 -0
  210. package/dist/types/adapters/kv/types.d.ts.map +1 -0
  211. package/dist/types/adapters/memory/audit-log.d.ts +18 -0
  212. package/dist/types/adapters/memory/audit-log.d.ts.map +1 -0
  213. package/dist/types/adapters/memory/clock.d.ts +7 -0
  214. package/dist/types/adapters/memory/clock.d.ts.map +1 -0
  215. package/dist/types/adapters/memory/config-store.d.ts +19 -0
  216. package/dist/types/adapters/memory/config-store.d.ts.map +1 -0
  217. package/dist/types/adapters/memory/index.d.ts +15 -0
  218. package/dist/types/adapters/memory/index.d.ts.map +1 -0
  219. package/dist/types/adapters/memory/key-store.d.ts +17 -0
  220. package/dist/types/adapters/memory/key-store.d.ts.map +1 -0
  221. package/dist/types/adapters/memory/method-store.d.ts +26 -0
  222. package/dist/types/adapters/memory/method-store.d.ts.map +1 -0
  223. package/dist/types/adapters/memory/passkey-credential-store.d.ts +43 -0
  224. package/dist/types/adapters/memory/passkey-credential-store.d.ts.map +1 -0
  225. package/dist/types/adapters/memory/session-store.d.ts +21 -0
  226. package/dist/types/adapters/memory/session-store.d.ts.map +1 -0
  227. package/dist/types/adapters/memory/token-store.d.ts +29 -0
  228. package/dist/types/adapters/memory/token-store.d.ts.map +1 -0
  229. package/dist/types/adapters/postgres/audit-log.d.ts +18 -0
  230. package/dist/types/adapters/postgres/audit-log.d.ts.map +1 -0
  231. package/dist/types/adapters/postgres/config-store.d.ts +21 -0
  232. package/dist/types/adapters/postgres/config-store.d.ts.map +1 -0
  233. package/dist/types/adapters/postgres/executor.d.ts +48 -0
  234. package/dist/types/adapters/postgres/executor.d.ts.map +1 -0
  235. package/dist/types/adapters/postgres/index.d.ts +39 -0
  236. package/dist/types/adapters/postgres/index.d.ts.map +1 -0
  237. package/dist/types/adapters/postgres/key-store.d.ts +23 -0
  238. package/dist/types/adapters/postgres/key-store.d.ts.map +1 -0
  239. package/dist/types/adapters/postgres/method-store.d.ts +21 -0
  240. package/dist/types/adapters/postgres/method-store.d.ts.map +1 -0
  241. package/dist/types/adapters/postgres/migrations.d.ts +22 -0
  242. package/dist/types/adapters/postgres/migrations.d.ts.map +1 -0
  243. package/dist/types/adapters/postgres/passkey-credential-store.d.ts +48 -0
  244. package/dist/types/adapters/postgres/passkey-credential-store.d.ts.map +1 -0
  245. package/dist/types/adapters/postgres/session-store.d.ts +20 -0
  246. package/dist/types/adapters/postgres/session-store.d.ts.map +1 -0
  247. package/dist/types/adapters/postgres/token-store.d.ts +30 -0
  248. package/dist/types/adapters/postgres/token-store.d.ts.map +1 -0
  249. package/dist/types/client.d.ts +20 -1
  250. package/dist/types/client.d.ts.map +1 -1
  251. package/dist/types/domain/audit.d.ts +17 -0
  252. package/dist/types/domain/audit.d.ts.map +1 -0
  253. package/dist/types/domain/authorize.d.ts +125 -0
  254. package/dist/types/domain/authorize.d.ts.map +1 -0
  255. package/dist/types/domain/callback.d.ts +70 -0
  256. package/dist/types/domain/callback.d.ts.map +1 -0
  257. package/dist/types/domain/client-auth.d.ts +57 -0
  258. package/dist/types/domain/client-auth.d.ts.map +1 -0
  259. package/dist/types/domain/client-credentials.d.ts +54 -0
  260. package/dist/types/domain/client-credentials.d.ts.map +1 -0
  261. package/dist/types/domain/crypto.d.ts +53 -0
  262. package/dist/types/domain/crypto.d.ts.map +1 -0
  263. package/dist/types/domain/discovery.d.ts +81 -0
  264. package/dist/types/domain/discovery.d.ts.map +1 -0
  265. package/dist/types/domain/dpop.d.ts +61 -0
  266. package/dist/types/domain/dpop.d.ts.map +1 -0
  267. package/dist/types/domain/id-token.d.ts +83 -0
  268. package/dist/types/domain/id-token.d.ts.map +1 -0
  269. package/dist/types/domain/introspect.d.ts +79 -0
  270. package/dist/types/domain/introspect.d.ts.map +1 -0
  271. package/dist/types/domain/jwt.d.ts +74 -0
  272. package/dist/types/domain/jwt.d.ts.map +1 -0
  273. package/dist/types/domain/logout.d.ts +69 -0
  274. package/dist/types/domain/logout.d.ts.map +1 -0
  275. package/dist/types/domain/method-cache.d.ts +42 -0
  276. package/dist/types/domain/method-cache.d.ts.map +1 -0
  277. package/dist/types/domain/method-dispatch.d.ts +37 -0
  278. package/dist/types/domain/method-dispatch.d.ts.map +1 -0
  279. package/dist/types/domain/method-route.d.ts +77 -0
  280. package/dist/types/domain/method-route.d.ts.map +1 -0
  281. package/dist/types/domain/par.d.ts +62 -0
  282. package/dist/types/domain/par.d.ts.map +1 -0
  283. package/dist/types/domain/pkce.d.ts +15 -0
  284. package/dist/types/domain/pkce.d.ts.map +1 -0
  285. package/dist/types/domain/refresh.d.ts +52 -0
  286. package/dist/types/domain/refresh.d.ts.map +1 -0
  287. package/dist/types/domain/register.d.ts +33 -0
  288. package/dist/types/domain/register.d.ts.map +1 -0
  289. package/dist/types/domain/revoke.d.ts +61 -0
  290. package/dist/types/domain/revoke.d.ts.map +1 -0
  291. package/dist/types/domain/state-envelope.d.ts +30 -0
  292. package/dist/types/domain/state-envelope.d.ts.map +1 -0
  293. package/dist/types/domain/token-exchange.d.ts +69 -0
  294. package/dist/types/domain/token-exchange.d.ts.map +1 -0
  295. package/dist/types/domain/token.d.ts +140 -0
  296. package/dist/types/domain/token.d.ts.map +1 -0
  297. package/dist/types/domain/userinfo.d.ts +61 -0
  298. package/dist/types/domain/userinfo.d.ts.map +1 -0
  299. package/dist/types/http/context.d.ts +66 -0
  300. package/dist/types/http/context.d.ts.map +1 -0
  301. package/dist/types/http/cookies.d.ts +45 -0
  302. package/dist/types/http/cookies.d.ts.map +1 -0
  303. package/dist/types/http/errors.d.ts +36 -0
  304. package/dist/types/http/errors.d.ts.map +1 -0
  305. package/dist/types/http/handlers/authorize.d.ts +3 -0
  306. package/dist/types/http/handlers/authorize.d.ts.map +1 -0
  307. package/dist/types/http/handlers/callback.d.ts +3 -0
  308. package/dist/types/http/handlers/callback.d.ts.map +1 -0
  309. package/dist/types/http/handlers/end-session.d.ts +3 -0
  310. package/dist/types/http/handlers/end-session.d.ts.map +1 -0
  311. package/dist/types/http/handlers/metadata.d.ts +4 -0
  312. package/dist/types/http/handlers/metadata.d.ts.map +1 -0
  313. package/dist/types/http/handlers/method-route.d.ts +3 -0
  314. package/dist/types/http/handlers/method-route.d.ts.map +1 -0
  315. package/dist/types/http/handlers/par.d.ts +3 -0
  316. package/dist/types/http/handlers/par.d.ts.map +1 -0
  317. package/dist/types/http/handlers/register.d.ts +3 -0
  318. package/dist/types/http/handlers/register.d.ts.map +1 -0
  319. package/dist/types/http/handlers/revocation.d.ts +4 -0
  320. package/dist/types/http/handlers/revocation.d.ts.map +1 -0
  321. package/dist/types/http/handlers/token.d.ts +3 -0
  322. package/dist/types/http/handlers/token.d.ts.map +1 -0
  323. package/dist/types/http/handlers/userinfo.d.ts +3 -0
  324. package/dist/types/http/handlers/userinfo.d.ts.map +1 -0
  325. package/dist/types/http/middleware/error.d.ts +9 -0
  326. package/dist/types/http/middleware/error.d.ts.map +1 -0
  327. package/dist/types/http/middleware/tenant.d.ts +30 -0
  328. package/dist/types/http/middleware/tenant.d.ts.map +1 -0
  329. package/dist/types/http/resolver.d.ts +22 -0
  330. package/dist/types/http/resolver.d.ts.map +1 -0
  331. package/dist/types/http/router.d.ts +21 -0
  332. package/dist/types/http/router.d.ts.map +1 -0
  333. package/dist/types/http/schemas/authorize.d.ts +92 -0
  334. package/dist/types/http/schemas/authorize.d.ts.map +1 -0
  335. package/dist/types/http/schemas/end-session.d.ts +31 -0
  336. package/dist/types/http/schemas/end-session.d.ts.map +1 -0
  337. package/dist/types/http/schemas/par.d.ts +20 -0
  338. package/dist/types/http/schemas/par.d.ts.map +1 -0
  339. package/dist/types/http/schemas/register.d.ts +42 -0
  340. package/dist/types/http/schemas/register.d.ts.map +1 -0
  341. package/dist/types/http/schemas/revocation.d.ts +41 -0
  342. package/dist/types/http/schemas/revocation.d.ts.map +1 -0
  343. package/dist/types/http/schemas/token.d.ts +227 -0
  344. package/dist/types/http/schemas/token.d.ts.map +1 -0
  345. package/dist/types/index.d.ts +63 -13
  346. package/dist/types/index.d.ts.map +1 -1
  347. package/dist/types/methods/code.d.ts +96 -0
  348. package/dist/types/methods/code.d.ts.map +1 -0
  349. package/dist/types/methods/m2m.d.ts +41 -0
  350. package/dist/types/methods/m2m.d.ts.map +1 -0
  351. package/dist/types/methods/oauth2-factory.d.ts +133 -0
  352. package/dist/types/methods/oauth2-factory.d.ts.map +1 -0
  353. package/dist/types/methods/oauth2-generic.d.ts +75 -0
  354. package/dist/types/methods/oauth2-generic.d.ts.map +1 -0
  355. package/dist/types/methods/oidc-generic.d.ts +26 -0
  356. package/dist/types/methods/oidc-generic.d.ts.map +1 -0
  357. package/dist/types/methods/passkey.d.ts +106 -0
  358. package/dist/types/methods/passkey.d.ts.map +1 -0
  359. package/dist/types/methods/password-hash.d.ts +25 -0
  360. package/dist/types/methods/password-hash.d.ts.map +1 -0
  361. package/dist/types/methods/password.d.ts +70 -0
  362. package/dist/types/methods/password.d.ts.map +1 -0
  363. package/dist/types/methods/providers/apple.d.ts +29 -0
  364. package/dist/types/methods/providers/apple.d.ts.map +1 -0
  365. package/dist/types/methods/providers/cognito.d.ts +36 -0
  366. package/dist/types/methods/providers/cognito.d.ts.map +1 -0
  367. package/dist/types/methods/providers/discord.d.ts +22 -0
  368. package/dist/types/methods/providers/discord.d.ts.map +1 -0
  369. package/dist/types/methods/providers/facebook.d.ts +29 -0
  370. package/dist/types/methods/providers/facebook.d.ts.map +1 -0
  371. package/dist/types/methods/providers/github.d.ts +25 -0
  372. package/dist/types/methods/providers/github.d.ts.map +1 -0
  373. package/dist/types/methods/providers/google.d.ts +28 -0
  374. package/dist/types/methods/providers/google.d.ts.map +1 -0
  375. package/dist/types/methods/providers/index.d.ts +24 -0
  376. package/dist/types/methods/providers/index.d.ts.map +1 -0
  377. package/dist/types/methods/providers/jumpcloud.d.ts +22 -0
  378. package/dist/types/methods/providers/jumpcloud.d.ts.map +1 -0
  379. package/dist/types/methods/providers/keycloak.d.ts +30 -0
  380. package/dist/types/methods/providers/keycloak.d.ts.map +1 -0
  381. package/dist/types/methods/providers/linkedin.d.ts +22 -0
  382. package/dist/types/methods/providers/linkedin.d.ts.map +1 -0
  383. package/dist/types/methods/providers/microsoft.d.ts +30 -0
  384. package/dist/types/methods/providers/microsoft.d.ts.map +1 -0
  385. package/dist/types/methods/providers/slack.d.ts +25 -0
  386. package/dist/types/methods/providers/slack.d.ts.map +1 -0
  387. package/dist/types/methods/providers/spotify.d.ts +22 -0
  388. package/dist/types/methods/providers/spotify.d.ts.map +1 -0
  389. package/dist/types/methods/providers/twitch.d.ts +23 -0
  390. package/dist/types/methods/providers/twitch.d.ts.map +1 -0
  391. package/dist/types/methods/providers/x.d.ts +25 -0
  392. package/dist/types/methods/providers/x.d.ts.map +1 -0
  393. package/dist/types/methods/providers/yahoo.d.ts +22 -0
  394. package/dist/types/methods/providers/yahoo.d.ts.map +1 -0
  395. package/dist/types/pkce.d.ts +1 -2
  396. package/dist/types/pkce.d.ts.map +1 -1
  397. package/dist/types/ports/audit-log.d.ts +166 -0
  398. package/dist/types/ports/audit-log.d.ts.map +1 -0
  399. package/dist/types/ports/config-store.d.ts +32 -0
  400. package/dist/types/ports/config-store.d.ts.map +1 -0
  401. package/dist/types/ports/key-store.d.ts +98 -0
  402. package/dist/types/ports/key-store.d.ts.map +1 -0
  403. package/dist/types/ports/method-store.d.ts +29 -0
  404. package/dist/types/ports/method-store.d.ts.map +1 -0
  405. package/dist/types/ports/session-store.d.ts +109 -0
  406. package/dist/types/ports/session-store.d.ts.map +1 -0
  407. package/dist/types/ports/token-store.d.ts +105 -0
  408. package/dist/types/ports/token-store.d.ts.map +1 -0
  409. package/dist/types/types/authorization.d.ts +75 -0
  410. package/dist/types/types/authorization.d.ts.map +1 -0
  411. package/dist/types/types/error.d.ts +101 -0
  412. package/dist/types/types/error.d.ts.map +1 -0
  413. package/dist/types/types/flow.d.ts +97 -0
  414. package/dist/types/types/flow.d.ts.map +1 -0
  415. package/dist/types/types/idp.d.ts +324 -0
  416. package/dist/types/types/idp.d.ts.map +1 -0
  417. package/dist/types/types/method.d.ts +256 -0
  418. package/dist/types/types/method.d.ts.map +1 -0
  419. package/dist/types/types/picker.d.ts +31 -0
  420. package/dist/types/types/picker.d.ts.map +1 -0
  421. package/dist/types/types/result.d.ts +29 -0
  422. package/dist/types/types/result.d.ts.map +1 -0
  423. package/dist/types/types/subject.d.ts +47 -0
  424. package/dist/types/types/subject.d.ts.map +1 -0
  425. package/dist/types/types/tenant.d.ts +276 -0
  426. package/dist/types/types/tenant.d.ts.map +1 -0
  427. package/dist/types/types/token.d.ts +231 -0
  428. package/dist/types/types/token.d.ts.map +1 -0
  429. package/dist/types/ui/forms.d.ts +35 -0
  430. package/dist/types/ui/forms.d.ts.map +1 -0
  431. package/dist/types/ui/index.d.ts +14 -0
  432. package/dist/types/ui/index.d.ts.map +1 -0
  433. package/dist/types/ui/picker.d.ts +18 -0
  434. package/dist/types/ui/picker.d.ts.map +1 -0
  435. package/package.json +41 -6
  436. package/src/adapters/d1/audit-log.ts +32 -0
  437. package/src/adapters/d1/config-store.ts +67 -0
  438. package/src/adapters/d1/index.ts +41 -0
  439. package/src/adapters/d1/key-store.ts +218 -0
  440. package/src/adapters/d1/method-store.ts +103 -0
  441. package/src/adapters/d1/migrations.ts +89 -0
  442. package/src/adapters/d1/session-store.ts +230 -0
  443. package/src/adapters/d1/session.ts +38 -0
  444. package/src/adapters/d1/token-store.ts +251 -0
  445. package/src/adapters/d1/types.ts +53 -0
  446. package/src/adapters/durable-object/index.ts +23 -0
  447. package/src/adapters/durable-object/session-store.ts +227 -0
  448. package/src/adapters/durable-object/types.ts +25 -0
  449. package/src/adapters/dynamo/audit-log.ts +35 -0
  450. package/src/adapters/dynamo/client.ts +118 -0
  451. package/src/adapters/dynamo/config-store.ts +72 -0
  452. package/src/adapters/dynamo/index.ts +81 -0
  453. package/src/adapters/dynamo/key-store.ts +267 -0
  454. package/src/adapters/dynamo/method-store.ts +105 -0
  455. package/src/adapters/dynamo/passkey-credential-store.ts +132 -0
  456. package/src/adapters/dynamo/sdk.ts +189 -0
  457. package/src/adapters/dynamo/session-store.ts +229 -0
  458. package/src/adapters/dynamo/token-store.ts +248 -0
  459. package/src/adapters/kms/in-memory-backing.ts +36 -0
  460. package/src/adapters/kms/index.ts +39 -0
  461. package/src/adapters/kms/key-store.ts +176 -0
  462. package/src/adapters/kms/sdk.ts +39 -0
  463. package/src/adapters/kms/types.ts +61 -0
  464. package/src/adapters/kv/audit-log.ts +40 -0
  465. package/src/adapters/kv/config-store.ts +63 -0
  466. package/src/adapters/kv/index.ts +20 -0
  467. package/src/adapters/kv/method-store.ts +98 -0
  468. package/src/adapters/kv/types.ts +26 -0
  469. package/src/adapters/memory/audit-log.ts +28 -0
  470. package/src/adapters/memory/clock.ts +7 -0
  471. package/src/adapters/memory/config-store.ts +41 -0
  472. package/src/adapters/memory/index.ts +26 -0
  473. package/src/adapters/memory/key-store.ts +102 -0
  474. package/src/adapters/memory/method-store.ts +75 -0
  475. package/src/adapters/memory/passkey-credential-store.ts +97 -0
  476. package/src/adapters/memory/session-store.ts +171 -0
  477. package/src/adapters/memory/token-store.ts +181 -0
  478. package/src/adapters/postgres/audit-log.ts +34 -0
  479. package/src/adapters/postgres/config-store.ts +72 -0
  480. package/src/adapters/postgres/executor.ts +76 -0
  481. package/src/adapters/postgres/index.ts +60 -0
  482. package/src/adapters/postgres/key-store.ts +334 -0
  483. package/src/adapters/postgres/method-store.ts +104 -0
  484. package/src/adapters/postgres/migrations.ts +131 -0
  485. package/src/adapters/postgres/passkey-credential-store.ts +150 -0
  486. package/src/adapters/postgres/session-store.ts +216 -0
  487. package/src/adapters/postgres/token-store.ts +263 -0
  488. package/src/client.ts +82 -16
  489. package/src/domain/audit.ts +28 -0
  490. package/src/domain/authorize.ts +414 -0
  491. package/src/domain/callback.ts +268 -0
  492. package/src/domain/client-auth.ts +116 -0
  493. package/src/domain/client-credentials.ts +180 -0
  494. package/src/domain/crypto.ts +168 -0
  495. package/src/domain/discovery.ts +161 -0
  496. package/src/domain/dpop.ts +293 -0
  497. package/src/domain/id-token.ts +213 -0
  498. package/src/domain/introspect.ts +155 -0
  499. package/src/domain/jwt.ts +185 -0
  500. package/src/domain/logout.ts +180 -0
  501. package/src/domain/method-cache.ts +220 -0
  502. package/src/domain/method-dispatch.ts +95 -0
  503. package/src/domain/method-route.ts +213 -0
  504. package/src/domain/par.ts +141 -0
  505. package/src/domain/pkce.ts +37 -0
  506. package/src/domain/refresh.ts +210 -0
  507. package/src/domain/register.ts +168 -0
  508. package/src/domain/revoke.ts +161 -0
  509. package/src/domain/state-envelope.ts +142 -0
  510. package/src/domain/token-exchange.ts +243 -0
  511. package/src/domain/token.ts +483 -0
  512. package/src/domain/userinfo.ts +171 -0
  513. package/src/http/context.ts +90 -0
  514. package/src/http/cookies.ts +167 -0
  515. package/src/http/errors.ts +98 -0
  516. package/src/http/handlers/authorize.ts +362 -0
  517. package/src/http/handlers/callback.ts +77 -0
  518. package/src/http/handlers/end-session.ts +106 -0
  519. package/src/http/handlers/metadata.ts +49 -0
  520. package/src/http/handlers/method-route.ts +115 -0
  521. package/src/http/handlers/par.ts +84 -0
  522. package/src/http/handlers/register.ts +70 -0
  523. package/src/http/handlers/revocation.ts +151 -0
  524. package/src/http/handlers/token.ts +300 -0
  525. package/src/http/handlers/userinfo.ts +90 -0
  526. package/src/http/middleware/error.ts +26 -0
  527. package/src/http/middleware/tenant.ts +165 -0
  528. package/src/http/resolver.ts +34 -0
  529. package/src/http/router.ts +85 -0
  530. package/src/http/schemas/authorize.ts +85 -0
  531. package/src/http/schemas/end-session.ts +23 -0
  532. package/src/http/schemas/par.ts +23 -0
  533. package/src/http/schemas/register.ts +29 -0
  534. package/src/http/schemas/revocation.ts +23 -0
  535. package/src/http/schemas/token.ts +85 -0
  536. package/src/index.ts +283 -20
  537. package/src/methods/code.ts +359 -0
  538. package/src/methods/m2m.ts +82 -0
  539. package/src/methods/oauth2-factory.ts +151 -0
  540. package/src/methods/oauth2-generic.ts +360 -0
  541. package/src/methods/oidc-generic.ts +109 -0
  542. package/src/methods/passkey.ts +419 -0
  543. package/src/methods/password-hash.ts +134 -0
  544. package/src/methods/password.ts +298 -0
  545. package/src/methods/providers/apple.ts +42 -0
  546. package/src/methods/providers/cognito.ts +55 -0
  547. package/src/methods/providers/discord.ts +37 -0
  548. package/src/methods/providers/facebook.ts +54 -0
  549. package/src/methods/providers/github.ts +42 -0
  550. package/src/methods/providers/google.ts +43 -0
  551. package/src/methods/providers/index.ts +23 -0
  552. package/src/methods/providers/jumpcloud.ts +36 -0
  553. package/src/methods/providers/keycloak.ts +42 -0
  554. package/src/methods/providers/linkedin.ts +37 -0
  555. package/src/methods/providers/microsoft.ts +42 -0
  556. package/src/methods/providers/slack.ts +42 -0
  557. package/src/methods/providers/spotify.ts +37 -0
  558. package/src/methods/providers/twitch.ts +38 -0
  559. package/src/methods/providers/x.ts +40 -0
  560. package/src/methods/providers/yahoo.ts +36 -0
  561. package/src/pkce.ts +20 -21
  562. package/src/ports/CONSISTENCY.md +119 -0
  563. package/src/ports/audit-log.ts +177 -0
  564. package/src/ports/config-store.ts +34 -0
  565. package/src/ports/key-store.ts +106 -0
  566. package/src/ports/method-store.ts +41 -0
  567. package/src/ports/session-store.ts +131 -0
  568. package/src/ports/token-store.ts +116 -0
  569. package/src/types/authorization.ts +78 -0
  570. package/src/types/error.ts +146 -0
  571. package/src/types/flow.ts +99 -0
  572. package/src/types/idp.ts +365 -0
  573. package/src/types/method.ts +270 -0
  574. package/src/types/picker.ts +32 -0
  575. package/src/types/result.ts +23 -0
  576. package/src/types/subject.ts +50 -0
  577. package/src/types/tenant.ts +285 -0
  578. package/src/types/token.ts +236 -0
  579. package/src/ui/forms.ts +289 -0
  580. package/src/ui/index.ts +14 -0
  581. package/src/ui/picker.ts +63 -0
  582. package/dist/esm/issuer.js +0 -691
  583. package/dist/esm/jwt.js +0 -16
  584. package/dist/esm/keys.js +0 -113
  585. package/dist/esm/provider/apple.js +0 -28
  586. package/dist/esm/provider/arctic.js +0 -43
  587. package/dist/esm/provider/code.js +0 -58
  588. package/dist/esm/provider/cognito.js +0 -16
  589. package/dist/esm/provider/discord.js +0 -15
  590. package/dist/esm/provider/facebook.js +0 -24
  591. package/dist/esm/provider/github.js +0 -15
  592. package/dist/esm/provider/google.js +0 -25
  593. package/dist/esm/provider/index.js +0 -3
  594. package/dist/esm/provider/jumpcloud.js +0 -15
  595. package/dist/esm/provider/keycloak.js +0 -15
  596. package/dist/esm/provider/linkedin.js +0 -15
  597. package/dist/esm/provider/m2m.js +0 -16
  598. package/dist/esm/provider/microsoft.js +0 -24
  599. package/dist/esm/provider/oauth2.js +0 -119
  600. package/dist/esm/provider/oidc.js +0 -69
  601. package/dist/esm/provider/passkey.js +0 -315
  602. package/dist/esm/provider/password.js +0 -306
  603. package/dist/esm/provider/provider.js +0 -10
  604. package/dist/esm/provider/slack.js +0 -15
  605. package/dist/esm/provider/spotify.js +0 -15
  606. package/dist/esm/provider/twitch.js +0 -15
  607. package/dist/esm/provider/x.js +0 -16
  608. package/dist/esm/provider/yahoo.js +0 -15
  609. package/dist/esm/random.js +0 -27
  610. package/dist/esm/storage/aws.js +0 -39
  611. package/dist/esm/storage/cloudflare.js +0 -42
  612. package/dist/esm/storage/dynamo.js +0 -116
  613. package/dist/esm/storage/memory.js +0 -88
  614. package/dist/esm/storage/storage.js +0 -36
  615. package/dist/esm/subject.js +0 -7
  616. package/dist/esm/ui/base.js +0 -407
  617. package/dist/esm/ui/code.js +0 -151
  618. package/dist/esm/ui/form.js +0 -43
  619. package/dist/esm/ui/icon.js +0 -92
  620. package/dist/esm/ui/passkey.js +0 -329
  621. package/dist/esm/ui/password.js +0 -338
  622. package/dist/esm/ui/select.js +0 -187
  623. package/dist/esm/ui/theme.js +0 -115
  624. package/dist/esm/util.js +0 -54
  625. package/dist/types/issuer.d.ts +0 -607
  626. package/dist/types/issuer.d.ts.map +0 -1
  627. package/dist/types/jwt.d.ts +0 -6
  628. package/dist/types/jwt.d.ts.map +0 -1
  629. package/dist/types/keys.d.ts +0 -18
  630. package/dist/types/keys.d.ts.map +0 -1
  631. package/dist/types/provider/apple.d.ts +0 -108
  632. package/dist/types/provider/apple.d.ts.map +0 -1
  633. package/dist/types/provider/arctic.d.ts +0 -16
  634. package/dist/types/provider/arctic.d.ts.map +0 -1
  635. package/dist/types/provider/code.d.ts +0 -74
  636. package/dist/types/provider/code.d.ts.map +0 -1
  637. package/dist/types/provider/cognito.d.ts +0 -64
  638. package/dist/types/provider/cognito.d.ts.map +0 -1
  639. package/dist/types/provider/discord.d.ts +0 -38
  640. package/dist/types/provider/discord.d.ts.map +0 -1
  641. package/dist/types/provider/facebook.d.ts +0 -74
  642. package/dist/types/provider/facebook.d.ts.map +0 -1
  643. package/dist/types/provider/github.d.ts +0 -38
  644. package/dist/types/provider/github.d.ts.map +0 -1
  645. package/dist/types/provider/google.d.ts +0 -74
  646. package/dist/types/provider/google.d.ts.map +0 -1
  647. package/dist/types/provider/index.d.ts +0 -4
  648. package/dist/types/provider/index.d.ts.map +0 -1
  649. package/dist/types/provider/jumpcloud.d.ts +0 -38
  650. package/dist/types/provider/jumpcloud.d.ts.map +0 -1
  651. package/dist/types/provider/keycloak.d.ts +0 -67
  652. package/dist/types/provider/keycloak.d.ts.map +0 -1
  653. package/dist/types/provider/linkedin.d.ts +0 -6
  654. package/dist/types/provider/linkedin.d.ts.map +0 -1
  655. package/dist/types/provider/m2m.d.ts +0 -34
  656. package/dist/types/provider/m2m.d.ts.map +0 -1
  657. package/dist/types/provider/microsoft.d.ts +0 -89
  658. package/dist/types/provider/microsoft.d.ts.map +0 -1
  659. package/dist/types/provider/oauth2.d.ts +0 -133
  660. package/dist/types/provider/oauth2.d.ts.map +0 -1
  661. package/dist/types/provider/oidc.d.ts +0 -91
  662. package/dist/types/provider/oidc.d.ts.map +0 -1
  663. package/dist/types/provider/passkey.d.ts +0 -143
  664. package/dist/types/provider/passkey.d.ts.map +0 -1
  665. package/dist/types/provider/password.d.ts +0 -210
  666. package/dist/types/provider/password.d.ts.map +0 -1
  667. package/dist/types/provider/provider.d.ts +0 -29
  668. package/dist/types/provider/provider.d.ts.map +0 -1
  669. package/dist/types/provider/slack.d.ts +0 -59
  670. package/dist/types/provider/slack.d.ts.map +0 -1
  671. package/dist/types/provider/spotify.d.ts +0 -38
  672. package/dist/types/provider/spotify.d.ts.map +0 -1
  673. package/dist/types/provider/twitch.d.ts +0 -38
  674. package/dist/types/provider/twitch.d.ts.map +0 -1
  675. package/dist/types/provider/x.d.ts +0 -38
  676. package/dist/types/provider/x.d.ts.map +0 -1
  677. package/dist/types/provider/yahoo.d.ts +0 -38
  678. package/dist/types/provider/yahoo.d.ts.map +0 -1
  679. package/dist/types/random.d.ts +0 -3
  680. package/dist/types/random.d.ts.map +0 -1
  681. package/dist/types/storage/aws.d.ts +0 -4
  682. package/dist/types/storage/aws.d.ts.map +0 -1
  683. package/dist/types/storage/cloudflare.d.ts +0 -34
  684. package/dist/types/storage/cloudflare.d.ts.map +0 -1
  685. package/dist/types/storage/dynamo.d.ts +0 -65
  686. package/dist/types/storage/dynamo.d.ts.map +0 -1
  687. package/dist/types/storage/memory.d.ts +0 -49
  688. package/dist/types/storage/memory.d.ts.map +0 -1
  689. package/dist/types/storage/storage.d.ts +0 -15
  690. package/dist/types/storage/storage.d.ts.map +0 -1
  691. package/dist/types/subject.d.ts +0 -122
  692. package/dist/types/subject.d.ts.map +0 -1
  693. package/dist/types/ui/base.d.ts +0 -5
  694. package/dist/types/ui/base.d.ts.map +0 -1
  695. package/dist/types/ui/code.d.ts +0 -104
  696. package/dist/types/ui/code.d.ts.map +0 -1
  697. package/dist/types/ui/form.d.ts +0 -6
  698. package/dist/types/ui/form.d.ts.map +0 -1
  699. package/dist/types/ui/icon.d.ts +0 -6
  700. package/dist/types/ui/icon.d.ts.map +0 -1
  701. package/dist/types/ui/passkey.d.ts +0 -5
  702. package/dist/types/ui/passkey.d.ts.map +0 -1
  703. package/dist/types/ui/password.d.ts +0 -139
  704. package/dist/types/ui/password.d.ts.map +0 -1
  705. package/dist/types/ui/select.d.ts +0 -55
  706. package/dist/types/ui/select.d.ts.map +0 -1
  707. package/dist/types/ui/theme.d.ts +0 -207
  708. package/dist/types/ui/theme.d.ts.map +0 -1
  709. package/dist/types/util.d.ts +0 -8
  710. package/dist/types/util.d.ts.map +0 -1
  711. package/src/css.d.ts +0 -4
  712. package/src/issuer.ts +0 -1628
  713. package/src/jwt.ts +0 -17
  714. package/src/keys.ts +0 -139
  715. package/src/provider/apple.ts +0 -127
  716. package/src/provider/arctic.ts +0 -66
  717. package/src/provider/code.ts +0 -227
  718. package/src/provider/cognito.ts +0 -74
  719. package/src/provider/discord.ts +0 -45
  720. package/src/provider/facebook.ts +0 -84
  721. package/src/provider/github.ts +0 -45
  722. package/src/provider/google.ts +0 -85
  723. package/src/provider/index.ts +0 -3
  724. package/src/provider/jumpcloud.ts +0 -45
  725. package/src/provider/keycloak.ts +0 -75
  726. package/src/provider/linkedin.ts +0 -12
  727. package/src/provider/m2m.ts +0 -56
  728. package/src/provider/microsoft.ts +0 -100
  729. package/src/provider/oauth2.ts +0 -297
  730. package/src/provider/oidc.ts +0 -179
  731. package/src/provider/passkey.ts +0 -655
  732. package/src/provider/password.ts +0 -672
  733. package/src/provider/provider.ts +0 -33
  734. package/src/provider/slack.ts +0 -67
  735. package/src/provider/spotify.ts +0 -45
  736. package/src/provider/twitch.ts +0 -45
  737. package/src/provider/x.ts +0 -46
  738. package/src/provider/yahoo.ts +0 -45
  739. package/src/random.ts +0 -24
  740. package/src/storage/aws.ts +0 -59
  741. package/src/storage/cloudflare.ts +0 -77
  742. package/src/storage/dynamo.ts +0 -193
  743. package/src/storage/memory.ts +0 -135
  744. package/src/storage/storage.ts +0 -46
  745. package/src/subject.ts +0 -130
  746. package/src/ui/base.tsx +0 -118
  747. package/src/ui/code.tsx +0 -215
  748. package/src/ui/form.tsx +0 -40
  749. package/src/ui/icon.tsx +0 -95
  750. package/src/ui/passkey.tsx +0 -321
  751. package/src/ui/password.tsx +0 -405
  752. package/src/ui/select.tsx +0 -221
  753. package/src/ui/theme.ts +0 -319
  754. package/src/ui/ui.css +0 -252
  755. package/src/util.ts +0 -58
  756. /package/dist/esm/{css.d.js → adapters/d1/types.js} +0 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * In-memory `KeyStore`. Auto-generates ES256 signing keys and A256GCM
3
+ * encryption keys on first read. Suitable for tests and single-instance
4
+ * dev.
5
+ */
6
+ import { exportJWK, generateKeyPair } from "jose"
7
+
8
+ import type { EncryptionKey, KeyStore, SigningKey } from "../../ports/key-store"
9
+ import { authError } from "../../types/error"
10
+ import type { Result } from "../../types/result"
11
+ import { err, ok } from "../../types/result"
12
+ import { generateSymmetricKey, randomId } from "../../domain/crypto"
13
+ import type { Clock } from "./clock"
14
+ import { realClock } from "./clock"
15
+
16
+ export type MemoryKeyStoreOptions = {
17
+ clock?: Clock
18
+ /** Override default `"ES256"` (other supported: `"EdDSA"` per AD11). */
19
+ signingAlg?: "ES256" | "EdDSA"
20
+ }
21
+
22
+ export class MemoryKeyStore implements KeyStore {
23
+ #clock: Clock
24
+ #signingAlg: "ES256" | "EdDSA"
25
+ #signing: SigningKey[] = []
26
+ #encryption: EncryptionKey[] = []
27
+
28
+ constructor(opts: MemoryKeyStoreOptions = {}) {
29
+ this.#clock = opts.clock ?? realClock
30
+ this.#signingAlg = opts.signingAlg ?? "ES256"
31
+ }
32
+
33
+ async currentSigningKey(): Promise<Result<SigningKey>> {
34
+ await this.#ensureSigningKey()
35
+ const active = this.#signing.find((k) => k.status === "active")
36
+ if (!active) {
37
+ return err(
38
+ authError.internalError(
39
+ "no active signing key (should be unreachable)",
40
+ ),
41
+ )
42
+ }
43
+ return ok(active)
44
+ }
45
+
46
+ async signingKeys(): Promise<Result<SigningKey[]>> {
47
+ await this.#ensureSigningKey()
48
+ return ok([...this.#signing])
49
+ }
50
+
51
+ async currentEncryptionKey(): Promise<Result<EncryptionKey>> {
52
+ this.#ensureEncryptionKey()
53
+ const active = this.#encryption.find((k) => k.status === "active")
54
+ if (!active) {
55
+ return err(
56
+ authError.internalError(
57
+ "no active encryption key (should be unreachable)",
58
+ ),
59
+ )
60
+ }
61
+ return ok(active)
62
+ }
63
+
64
+ async getEncryptionKey(kid: string): Promise<Result<EncryptionKey>> {
65
+ this.#ensureEncryptionKey()
66
+ const match = this.#encryption.find((k) => k.kid === kid)
67
+ if (!match) {
68
+ return err(authError.internalError(`encryption key "${kid}" not found`))
69
+ }
70
+ return ok(match)
71
+ }
72
+
73
+ async #ensureSigningKey(): Promise<void> {
74
+ if (this.#signing.some((k) => k.status === "active")) return
75
+ const { publicKey, privateKey } = await generateKeyPair(this.#signingAlg, {
76
+ extractable: true,
77
+ })
78
+ const jwk = await exportJWK(publicKey)
79
+ const key: SigningKey = {
80
+ kid: randomId(),
81
+ alg: this.#signingAlg,
82
+ crv: jwk.crv ?? undefined,
83
+ publicJwk: jwk as unknown as Record<string, unknown>,
84
+ privateKeyRef: privateKey,
85
+ status: "active",
86
+ createdAt: this.#clock(),
87
+ }
88
+ this.#signing.push(key)
89
+ }
90
+
91
+ #ensureEncryptionKey(): void {
92
+ if (this.#encryption.some((k) => k.status === "active")) return
93
+ const key: EncryptionKey = {
94
+ kid: randomId(),
95
+ alg: "A256GCM",
96
+ keyRef: generateSymmetricKey(),
97
+ status: "active",
98
+ createdAt: this.#clock(),
99
+ }
100
+ this.#encryption.push(key)
101
+ }
102
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * In-memory `MethodStore`. Per-tenant `Map<methodId, MethodConfig>`. Single
3
+ * process so the eventual + bounded-staleness contract is trivially satisfied.
4
+ *
5
+ * `MethodStore` is optional in the IdP — when omitted, the framework falls
6
+ * back to slicing `MethodConfig[]` out of `ConfigStore.getTenantConfig`. The
7
+ * memory adapter still ships so the conformance suite has a baseline.
8
+ */
9
+ import type { MethodStore } from "../../ports/method-store"
10
+ import { authError } from "../../types/error"
11
+ import type { Result } from "../../types/result"
12
+ import { err, ok } from "../../types/result"
13
+ import type { MethodConfig, TenantId } from "../../types/tenant"
14
+
15
+ export type MemoryMethodStoreOptions = {
16
+ seed?: ReadonlyArray<{
17
+ tenantId: TenantId
18
+ methods: ReadonlyArray<MethodConfig>
19
+ }>
20
+ }
21
+
22
+ export class MemoryMethodStore implements MethodStore {
23
+ #byTenant = new Map<TenantId, Map<string, MethodConfig>>()
24
+
25
+ constructor(opts: MemoryMethodStoreOptions = {}) {
26
+ for (const seed of opts.seed ?? []) {
27
+ const inner = new Map<string, MethodConfig>()
28
+ for (const m of seed.methods) inner.set(m.id, m)
29
+ this.#byTenant.set(seed.tenantId, inner)
30
+ }
31
+ }
32
+
33
+ async listMethods(tenantId: TenantId): Promise<Result<MethodConfig[]>> {
34
+ const inner = this.#byTenant.get(tenantId)
35
+ return ok(inner ? Array.from(inner.values()) : [])
36
+ }
37
+
38
+ async getMethodConfig(
39
+ tenantId: TenantId,
40
+ methodId: string,
41
+ ): Promise<Result<MethodConfig>> {
42
+ const inner = this.#byTenant.get(tenantId)
43
+ const m = inner?.get(methodId)
44
+ if (!m) {
45
+ return err(
46
+ authError.methodNotFound(
47
+ `method "${methodId}" not found for tenant "${tenantId}"`,
48
+ { methodId },
49
+ ),
50
+ )
51
+ }
52
+ return ok(m)
53
+ }
54
+
55
+ async putMethodConfig(
56
+ tenantId: TenantId,
57
+ method: MethodConfig,
58
+ ): Promise<Result<void>> {
59
+ let inner = this.#byTenant.get(tenantId)
60
+ if (!inner) {
61
+ inner = new Map<string, MethodConfig>()
62
+ this.#byTenant.set(tenantId, inner)
63
+ }
64
+ inner.set(method.id, method)
65
+ return ok(undefined)
66
+ }
67
+
68
+ async deleteMethodConfig(
69
+ tenantId: TenantId,
70
+ methodId: string,
71
+ ): Promise<Result<void>> {
72
+ this.#byTenant.get(tenantId)?.delete(methodId)
73
+ return ok(undefined)
74
+ }
75
+ }
@@ -0,0 +1,97 @@
1
+ /**
2
+ * In-memory `PasskeyCredentialStore`. Map-backed, single-process —
3
+ * suitable for tests and single-instance dev.
4
+ *
5
+ * Schema simplification (shared by all three reference adapters): the
6
+ * `userId` field is also the username lookup key. This matches the
7
+ * bundled `passkeyMethod`, which sets `userId = parsed.data.username`
8
+ * at registration time. Hosts that need a richer mapping
9
+ * (username ≠ userId, multi-username-per-user, etc.) implement
10
+ * `PasskeyCredentialStore` directly against their own data model.
11
+ */
12
+ import type {
13
+ PasskeyCredentialStore,
14
+ StoredCredential,
15
+ } from "../../methods/passkey"
16
+
17
+ export type MemoryPasskeyCredentialStoreOptions = {
18
+ /**
19
+ * Optional seed list for tests / dev. Each entry is the full
20
+ * `StoredCredential` plus its tenant scope. The store treats the
21
+ * credential's `userId` as the username lookup key.
22
+ */
23
+ seed?: Array<{ tenantId: string; credential: StoredCredential }>
24
+ }
25
+
26
+ export class MemoryPasskeyCredentialStore implements PasskeyCredentialStore {
27
+ #items = new Map<string, StoredCredential & { tenantId: string }>()
28
+
29
+ constructor(opts: MemoryPasskeyCredentialStoreOptions = {}) {
30
+ for (const entry of opts.seed ?? []) {
31
+ this.#items.set(
32
+ this.#key(entry.tenantId, entry.credential.credentialId),
33
+ {
34
+ ...entry.credential,
35
+ tenantId: entry.tenantId,
36
+ },
37
+ )
38
+ }
39
+ }
40
+
41
+ #key(tenantId: string, credentialId: string): string {
42
+ return `${tenantId}|${credentialId}`
43
+ }
44
+
45
+ async findByUsername(
46
+ username: string,
47
+ tenantId: string,
48
+ ): Promise<{ userId: string; credentials: StoredCredential[] } | null> {
49
+ const credentials: StoredCredential[] = []
50
+ for (const item of this.#items.values()) {
51
+ if (item.tenantId !== tenantId) continue
52
+ if (item.userId !== username) continue
53
+ credentials.push(stripTenant(item))
54
+ }
55
+ if (credentials.length === 0) return null
56
+ return { userId: username, credentials }
57
+ }
58
+
59
+ async findById(
60
+ credentialId: string,
61
+ tenantId: string,
62
+ ): Promise<StoredCredential | null> {
63
+ const item = this.#items.get(this.#key(tenantId, credentialId))
64
+ return item ? stripTenant(item) : null
65
+ }
66
+
67
+ async updateCounter(input: {
68
+ credentialId: string
69
+ counter: number
70
+ tenantId: string
71
+ }): Promise<void> {
72
+ const k = this.#key(input.tenantId, input.credentialId)
73
+ const item = this.#items.get(k)
74
+ if (!item) return
75
+ this.#items.set(k, { ...item, counter: input.counter })
76
+ }
77
+
78
+ async create(input: {
79
+ userId: string
80
+ credential: StoredCredential
81
+ tenantId: string
82
+ }): Promise<void> {
83
+ this.#items.set(this.#key(input.tenantId, input.credential.credentialId), {
84
+ ...input.credential,
85
+ userId: input.userId,
86
+ tenantId: input.tenantId,
87
+ })
88
+ }
89
+ }
90
+
91
+ function stripTenant(
92
+ item: StoredCredential & { tenantId: string },
93
+ ): StoredCredential {
94
+ const { tenantId: _unused, ...rest } = item
95
+ void _unused
96
+ return rest
97
+ }
@@ -0,0 +1,171 @@
1
+ /**
2
+ * In-memory `SessionStore` — flow records (required) + optional long-lived
3
+ * sessions. Map-backed; atomic w.r.t. the JS event loop.
4
+ *
5
+ * `consumeFlow` is a strict atomic delete-on-read that returns the full
6
+ * `FlowRecord` — the framework needs every field to snapshot into the
7
+ * auth-code payload before the record is gone.
8
+ */
9
+ import { authError } from "../../types/error"
10
+ import type { FlowRecord } from "../../types/flow"
11
+ import type {
12
+ ParRecord,
13
+ SessionRecord,
14
+ SessionStore,
15
+ } from "../../ports/session-store"
16
+ import type { Result } from "../../types/result"
17
+ import { err, ok } from "../../types/result"
18
+ import type { Clock } from "./clock"
19
+ import { realClock } from "./clock"
20
+
21
+ type StoredFlow = {
22
+ record: FlowRecord
23
+ expiresAt: number
24
+ }
25
+
26
+ type StoredPar = {
27
+ record: ParRecord
28
+ expiresAt: number
29
+ }
30
+
31
+ export type MemorySessionStoreOptions = {
32
+ clock?: Clock
33
+ }
34
+
35
+ export class MemorySessionStore implements SessionStore {
36
+ #clock: Clock
37
+ #flows = new Map<string, StoredFlow>()
38
+ #sessions = new Map<string, SessionRecord>()
39
+ #par = new Map<string, StoredPar>()
40
+
41
+ constructor(opts: MemorySessionStoreOptions = {}) {
42
+ this.#clock = opts.clock ?? realClock
43
+ }
44
+
45
+ async saveFlow(
46
+ flowId: string,
47
+ payload: FlowRecord,
48
+ ttl: number,
49
+ ): Promise<Result<void>> {
50
+ if (ttl <= 0) {
51
+ return err(
52
+ authError.internalError(`saveFlow: ttl must be positive, got ${ttl}`),
53
+ )
54
+ }
55
+ this.#flows.set(flowId, {
56
+ record: payload,
57
+ expiresAt: this.#clock() + ttl,
58
+ })
59
+ return ok(undefined)
60
+ }
61
+
62
+ async updateFlowMethodState(
63
+ flowId: string,
64
+ methodState: unknown,
65
+ ): Promise<Result<void>> {
66
+ const stored = this.#flows.get(flowId)
67
+ if (!stored) {
68
+ return err(authError.unknownState(`flow "${flowId}" unknown`))
69
+ }
70
+ if (this.#clock() >= stored.expiresAt) {
71
+ this.#flows.delete(flowId)
72
+ return err(authError.unknownState(`flow "${flowId}" expired`))
73
+ }
74
+ stored.record = { ...stored.record, methodState }
75
+ return ok(undefined)
76
+ }
77
+
78
+ async readFlow(flowId: string): Promise<Result<FlowRecord>> {
79
+ const stored = this.#flows.get(flowId)
80
+ if (!stored) {
81
+ return err(authError.unknownState(`flow "${flowId}" unknown`))
82
+ }
83
+ if (this.#clock() >= stored.expiresAt) {
84
+ this.#flows.delete(flowId)
85
+ return err(authError.unknownState(`flow "${flowId}" expired`))
86
+ }
87
+ return ok(stored.record)
88
+ }
89
+
90
+ async consumeFlow(flowId: string): Promise<Result<FlowRecord>> {
91
+ const stored = this.#flows.get(flowId)
92
+ if (!stored) {
93
+ return err(
94
+ authError.unknownState(`flow "${flowId}" unknown or already consumed`),
95
+ )
96
+ }
97
+ // Atomic delete-on-read — remove before observable side effects so a
98
+ // concurrent caller can't see the same record.
99
+ this.#flows.delete(flowId)
100
+ if (this.#clock() >= stored.expiresAt) {
101
+ return err(authError.unknownState(`flow "${flowId}" expired`))
102
+ }
103
+ return ok(stored.record)
104
+ }
105
+
106
+ async createSession(
107
+ sessionId: string,
108
+ payload: SessionRecord,
109
+ ttl: number,
110
+ ): Promise<Result<void>> {
111
+ if (ttl <= 0) {
112
+ return err(
113
+ authError.internalError(
114
+ `createSession: ttl must be positive, got ${ttl}`,
115
+ ),
116
+ )
117
+ }
118
+ this.#sessions.set(sessionId, payload)
119
+ return ok(undefined)
120
+ }
121
+
122
+ async readSession(sessionId: string): Promise<Result<SessionRecord>> {
123
+ const s = this.#sessions.get(sessionId)
124
+ if (!s) {
125
+ return err(authError.invalidRequest(`session "${sessionId}" unknown`))
126
+ }
127
+ if (this.#clock() >= s.expiresAt) {
128
+ this.#sessions.delete(sessionId)
129
+ return err(authError.invalidRequest(`session "${sessionId}" expired`))
130
+ }
131
+ return ok(s)
132
+ }
133
+
134
+ async revokeSession(sessionId: string): Promise<Result<void>> {
135
+ this.#sessions.delete(sessionId)
136
+ return ok(undefined)
137
+ }
138
+
139
+ async savePar(
140
+ requestUri: string,
141
+ payload: ParRecord,
142
+ ttl: number,
143
+ ): Promise<Result<void>> {
144
+ if (ttl <= 0) {
145
+ return err(
146
+ authError.internalError(`savePar: ttl must be positive, got ${ttl}`),
147
+ )
148
+ }
149
+ this.#par.set(requestUri, {
150
+ record: payload,
151
+ expiresAt: this.#clock() + ttl,
152
+ })
153
+ return ok(undefined)
154
+ }
155
+
156
+ async consumePar(requestUri: string): Promise<Result<ParRecord>> {
157
+ const stored = this.#par.get(requestUri)
158
+ if (!stored) {
159
+ return err(
160
+ authError.unknownState(
161
+ `par "${requestUri}" unknown or already consumed`,
162
+ ),
163
+ )
164
+ }
165
+ this.#par.delete(requestUri)
166
+ if (this.#clock() >= stored.expiresAt) {
167
+ return err(authError.unknownState(`par "${requestUri}" expired`))
168
+ }
169
+ return ok(stored.record)
170
+ }
171
+ }
@@ -0,0 +1,181 @@
1
+ /**
2
+ * In-memory `TokenStore`. Single-process; the `Map` operations are
3
+ * atomic with respect to JS event-loop turns, which is enough for the
4
+ * strong-CAS contract here.
5
+ *
6
+ * Auth-code ciphertext is stored verbatim — encryption is the domain's
7
+ * job (see `domain/authorize.ts` → `encryptPayload`), so the adapter
8
+ * never sees plaintext. Inspecting the internal map shows whatever
9
+ * blob the domain saved.
10
+ */
11
+ import { AUTH_CODE_TTL_MS } from "../../domain/authorize"
12
+ import type { KeyStore } from "../../ports/key-store"
13
+ import type { TokenStore } from "../../ports/token-store"
14
+ import { authError } from "../../types/error"
15
+ import type { Result } from "../../types/result"
16
+ import { err, ok } from "../../types/result"
17
+ import type { TenantId } from "../../types/tenant"
18
+ import type { RefreshTokenPayload } from "../../types/token"
19
+
20
+ import type { Clock } from "./clock"
21
+ import { realClock } from "./clock"
22
+
23
+ type StoredCode = {
24
+ ciphertext: string
25
+ expiresAt: number
26
+ }
27
+
28
+ type StoredRefresh = {
29
+ payload: RefreshTokenPayload
30
+ consumedAt?: number
31
+ }
32
+
33
+ export type MemoryTokenStoreOptions = {
34
+ /**
35
+ * Optional — retained for API stability after M1 moved code-payload
36
+ * encryption to the domain layer. The adapter no longer touches it.
37
+ */
38
+ keyStore?: KeyStore
39
+ clock?: Clock
40
+ }
41
+
42
+ export class MemoryTokenStore implements TokenStore {
43
+ #clock: Clock
44
+ #codes = new Map<string, StoredCode>()
45
+ #refresh = new Map<string, StoredRefresh>()
46
+ /** DPoP proof `jti` replay-protection map. Value is expiry timestamp. */
47
+ #dpopJtis = new Map<string, number>()
48
+
49
+ constructor(opts: MemoryTokenStoreOptions = {}) {
50
+ this.#clock = opts.clock ?? realClock
51
+ }
52
+
53
+ async saveCode(
54
+ code: string,
55
+ ciphertext: string,
56
+ ttl: number,
57
+ ): Promise<Result<void>> {
58
+ if (ttl <= 0 || ttl > AUTH_CODE_TTL_MS) {
59
+ return err(
60
+ authError.internalError(
61
+ `saveCode: ttl ${ttl} outside (0, ${AUTH_CODE_TTL_MS}] (auth-code TTL is fixed at 60s by OAuth 2.1 BCP)`,
62
+ ),
63
+ )
64
+ }
65
+ this.#codes.set(code, { ciphertext, expiresAt: this.#clock() + ttl })
66
+ return ok(undefined)
67
+ }
68
+
69
+ async consumeCode(code: string): Promise<Result<string>> {
70
+ const stored = this.#codes.get(code)
71
+ if (!stored) {
72
+ return err(
73
+ authError.invalidGrant("auth code unknown or already consumed"),
74
+ )
75
+ }
76
+ // Atomic delete-on-read: remove **before** returning so a concurrent
77
+ // caller cannot observe the same row.
78
+ this.#codes.delete(code)
79
+ if (this.#clock() >= stored.expiresAt) {
80
+ return err(authError.invalidGrant("auth code expired"))
81
+ }
82
+ return ok(stored.ciphertext)
83
+ }
84
+
85
+ async saveRefresh(
86
+ refresh: string,
87
+ payload: RefreshTokenPayload,
88
+ ): Promise<Result<void>> {
89
+ this.#refresh.set(refresh, { payload })
90
+ return ok(undefined)
91
+ }
92
+
93
+ async consumeRefresh(
94
+ refresh: string,
95
+ options: { reuseWindowMs?: number } = {},
96
+ ): Promise<Result<RefreshTokenPayload>> {
97
+ const reuseWindow = options.reuseWindowMs ?? 60_000
98
+ const now = this.#clock()
99
+ const stored = this.#refresh.get(refresh)
100
+ if (!stored) {
101
+ return err(authError.invalidGrant("refresh token unknown"))
102
+ }
103
+ if (stored.consumedAt !== undefined) {
104
+ const withinWindow = now - stored.consumedAt <= reuseWindow
105
+ if (withinWindow) {
106
+ // Reuse detection — auto-revoke the family so every descendant of
107
+ // the compromised chain is invalidated. The caller still gets
108
+ // `invalid_grant`; the structured `reuseSignal` carries the
109
+ // family / tenant / subject for audit-log enrichment (port
110
+ // contract per `ports/token-store.ts`).
111
+ const family = stored.payload.family
112
+ await this.revokeFamily(family)
113
+ return err(
114
+ authError.invalidGrant(
115
+ `refresh token reuse detected (family=${family})`,
116
+ {
117
+ family,
118
+ tenantId: stored.payload.tenantId,
119
+ subjectId: stored.payload.subjectId,
120
+ },
121
+ ),
122
+ )
123
+ }
124
+ return err(authError.invalidGrant("refresh token already consumed"))
125
+ }
126
+ if (now >= stored.payload.expiresAt) {
127
+ return err(authError.invalidGrant("refresh token expired"))
128
+ }
129
+ stored.consumedAt = now
130
+ return ok(stored.payload)
131
+ }
132
+
133
+ async peekRefresh(refresh: string): Promise<Result<RefreshTokenPayload>> {
134
+ const stored = this.#refresh.get(refresh)
135
+ if (!stored) {
136
+ return err(authError.invalidGrant("refresh token unknown"))
137
+ }
138
+ if (this.#clock() >= stored.payload.expiresAt) {
139
+ return err(authError.invalidGrant("refresh token expired"))
140
+ }
141
+ return ok(stored.payload)
142
+ }
143
+
144
+ async revokeFamily(family: string): Promise<Result<void>> {
145
+ for (const [token, stored] of this.#refresh) {
146
+ if (stored.payload.family === family) {
147
+ this.#refresh.delete(token)
148
+ }
149
+ }
150
+ return ok(undefined)
151
+ }
152
+
153
+ async revokeBySubject(
154
+ tenantId: TenantId,
155
+ subjectId: string,
156
+ ): Promise<Result<void>> {
157
+ for (const [token, stored] of this.#refresh) {
158
+ if (
159
+ stored.payload.tenantId === tenantId &&
160
+ stored.payload.subjectId === subjectId
161
+ ) {
162
+ this.#refresh.delete(token)
163
+ }
164
+ }
165
+ return ok(undefined)
166
+ }
167
+
168
+ async recordDpopJti(jti: string, ttlMs: number): Promise<Result<void>> {
169
+ const now = this.#clock()
170
+ // Sweep expired entries opportunistically — keeps the map bounded
171
+ // under sustained load without a separate GC pass.
172
+ for (const [k, exp] of this.#dpopJtis) {
173
+ if (exp <= now) this.#dpopJtis.delete(k)
174
+ }
175
+ if (this.#dpopJtis.has(jti)) {
176
+ return err(authError.invalidGrant(`dpop jti "${jti}" replayed`))
177
+ }
178
+ this.#dpopJtis.set(jti, now + ttlMs)
179
+ return ok(undefined)
180
+ }
181
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Postgres `AuditLog`. Append-only `openauth_audit_events` table; indexed on
3
+ * `kind` and `ts` for SIEM-style queries. Writes are synchronous — adapters
4
+ * looking for batching can wrap this with their own buffering layer.
5
+ */
6
+ import type { AuditEvent, AuditLog } from "../../ports/audit-log"
7
+
8
+ import type { PostgresExecutor } from "./executor"
9
+
10
+ export type PostgresAuditLogOptions = {
11
+ exec: PostgresExecutor
12
+ }
13
+
14
+ export class PostgresAuditLog implements AuditLog {
15
+ #exec: PostgresExecutor
16
+
17
+ constructor(opts: PostgresAuditLogOptions) {
18
+ this.#exec = opts.exec
19
+ }
20
+
21
+ async log(event: AuditEvent & { timestamp: number }): Promise<void> {
22
+ try {
23
+ await this.#exec.query(
24
+ `INSERT INTO openauth_audit_events (ts, kind, payload)
25
+ VALUES ($1, $2, $3::jsonb)`,
26
+ [event.timestamp, event.kind, JSON.stringify(event)],
27
+ )
28
+ } catch {
29
+ // Per `ports/audit-log.ts` JSDoc: `log` should not throw on durability
30
+ // failure. The IdP's hot paths must not be gated on the audit log.
31
+ // Future: add a buffering layer with backoff.
32
+ }
33
+ }
34
+ }