@_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,22 @@
1
+ /**
2
+ * Postgres schema for the IdP adapters. One migration; future schema changes
3
+ * append new migrations and a small migrate-from-version routine.
4
+ *
5
+ * Tables are prefixed `openauth_` so the IdP can share a database with the
6
+ * application that consumes it. The schema is intentionally narrow — JSONB
7
+ * blobs carry the bulk of the data (auth-code ciphertext, refresh payload,
8
+ * tenant config) so that adding fields in later phases is non-breaking.
9
+ *
10
+ * Timestamps are `bigint` (epoch ms) rather than `timestamptz` so that the
11
+ * adapter's injectable clock works seamlessly in tests and so that
12
+ * comparisons are simple integer math.
13
+ */
14
+ import type { PostgresExecutor } from "./executor";
15
+ export declare const INITIAL_SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS openauth_tenants (\n id text PRIMARY KEY,\n config jsonb NOT NULL,\n updated_at bigint NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS openauth_methods (\n tenant_id text NOT NULL,\n method_id text NOT NULL,\n config jsonb NOT NULL,\n updated_at bigint NOT NULL,\n PRIMARY KEY (tenant_id, method_id)\n);\n\nCREATE TABLE IF NOT EXISTS openauth_signing_keys (\n kid text PRIMARY KEY,\n alg text NOT NULL,\n crv text,\n public_jwk jsonb NOT NULL,\n private_jwk jsonb NOT NULL,\n private_jwk_wrapped boolean NOT NULL DEFAULT false,\n status text NOT NULL,\n created_at bigint NOT NULL,\n rotated_at bigint\n);\n\nALTER TABLE openauth_signing_keys\n ADD COLUMN IF NOT EXISTS private_jwk_wrapped boolean NOT NULL DEFAULT false;\n\nCREATE TABLE IF NOT EXISTS openauth_encryption_keys (\n kid text PRIMARY KEY,\n alg text NOT NULL,\n key_material bytea NOT NULL,\n key_material_wrapped boolean NOT NULL DEFAULT false,\n status text NOT NULL,\n created_at bigint NOT NULL,\n rotated_at bigint\n);\n\nALTER TABLE openauth_encryption_keys\n ADD COLUMN IF NOT EXISTS key_material_wrapped boolean NOT NULL DEFAULT false;\n\nCREATE TABLE IF NOT EXISTS openauth_codes (\n code text PRIMARY KEY,\n ciphertext text NOT NULL,\n expires_at bigint NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS openauth_refresh_tokens (\n token text PRIMARY KEY,\n tenant_id text NOT NULL,\n client_id text NOT NULL,\n subject_id text NOT NULL,\n family text NOT NULL,\n expires_at bigint NOT NULL,\n consumed_at bigint,\n payload jsonb NOT NULL\n);\nCREATE INDEX IF NOT EXISTS openauth_refresh_family_idx\n ON openauth_refresh_tokens (family);\nCREATE INDEX IF NOT EXISTS openauth_refresh_subject_idx\n ON openauth_refresh_tokens (tenant_id, subject_id);\n\nCREATE TABLE IF NOT EXISTS openauth_flows (\n flow_id text PRIMARY KEY,\n payload jsonb NOT NULL,\n expires_at bigint NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS openauth_sessions (\n session_id text PRIMARY KEY,\n payload jsonb NOT NULL,\n expires_at bigint NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS openauth_audit_events (\n id bigserial PRIMARY KEY,\n ts bigint NOT NULL,\n kind text NOT NULL,\n payload jsonb NOT NULL\n);\nCREATE INDEX IF NOT EXISTS openauth_audit_kind_idx\n ON openauth_audit_events (kind);\nCREATE INDEX IF NOT EXISTS openauth_audit_ts_idx\n ON openauth_audit_events (ts);\n\nCREATE TABLE IF NOT EXISTS openauth_passkey_credentials (\n tenant_id text NOT NULL,\n credential_id text NOT NULL,\n user_id text NOT NULL,\n public_key text NOT NULL,\n counter bigint NOT NULL DEFAULT 0,\n transports jsonb,\n created_at bigint NOT NULL,\n PRIMARY KEY (tenant_id, credential_id)\n);\nCREATE INDEX IF NOT EXISTS openauth_passkey_user_idx\n ON openauth_passkey_credentials (tenant_id, user_id);\n";
16
+ /**
17
+ * Apply the initial schema. Idempotent — uses `CREATE TABLE IF NOT EXISTS`.
18
+ * Deployments using a real migration tool can apply the SQL above directly
19
+ * and skip this helper.
20
+ */
21
+ export declare function migrate(exec: PostgresExecutor): Promise<void>;
22
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgres/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,eAAO,MAAM,kBAAkB,mwFAmG9B,CAAA;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CASnE"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Postgres `PasskeyCredentialStore`.
3
+ *
4
+ * Schema (created by `migrate()` in `./migrations.ts`):
5
+ *
6
+ * openauth_passkey_credentials
7
+ * tenant_id text NOT NULL
8
+ * credential_id text NOT NULL
9
+ * user_id text NOT NULL
10
+ * public_key text NOT NULL
11
+ * counter bigint NOT NULL DEFAULT 0
12
+ * transports jsonb
13
+ * created_at bigint NOT NULL
14
+ * PRIMARY KEY (tenant_id, credential_id)
15
+ * INDEX (tenant_id, user_id) -- findByUsername path
16
+ *
17
+ * The reference adapter treats `userId` as the username lookup key —
18
+ * matching the bundled `passkeyMethod` which sets `userId =
19
+ * parsed.data.username` at registration. Hosts that want a separate
20
+ * username dimension implement `PasskeyCredentialStore` directly
21
+ * against their own user table.
22
+ */
23
+ import type { PasskeyCredentialStore, StoredCredential } from "../../methods/passkey";
24
+ import type { PostgresExecutor } from "./executor";
25
+ export type PostgresPasskeyCredentialStoreOptions = {
26
+ exec: PostgresExecutor;
27
+ clock?: () => number;
28
+ };
29
+ export declare class PostgresPasskeyCredentialStore implements PasskeyCredentialStore {
30
+ #private;
31
+ constructor(opts: PostgresPasskeyCredentialStoreOptions);
32
+ findByUsername(username: string, tenantId: string): Promise<{
33
+ userId: string;
34
+ credentials: StoredCredential[];
35
+ } | null>;
36
+ findById(credentialId: string, tenantId: string): Promise<StoredCredential | null>;
37
+ updateCounter(input: {
38
+ credentialId: string;
39
+ counter: number;
40
+ tenantId: string;
41
+ }): Promise<void>;
42
+ create(input: {
43
+ userId: string;
44
+ credential: StoredCredential;
45
+ tenantId: string;
46
+ }): Promise<void>;
47
+ }
48
+ //# sourceMappingURL=passkey-credential-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey-credential-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgres/passkey-credential-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,MAAM,qCAAqC,GAAG;IAClD,IAAI,EAAE,gBAAgB,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CACrB,CAAA;AAUD,qBAAa,8BAA+B,YAAW,sBAAsB;;gBAI/D,IAAI,EAAE,qCAAqC;IAKjD,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAchE,QAAQ,CACZ,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAY7B,aAAa,CAAC,KAAK,EAAE;QACzB,YAAY,EAAE,MAAM,CAAA;QACpB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC;IASX,MAAM,CAAC,KAAK,EAAE;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,gBAAgB,CAAA;QAC5B,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBlB"}
@@ -0,0 +1,20 @@
1
+ import type { FlowRecord } from "../../types/flow";
2
+ import type { SessionRecord, SessionStore } from "../../ports/session-store";
3
+ import type { Result } from "../../types/result";
4
+ import type { PostgresExecutor } from "./executor";
5
+ export type PostgresSessionStoreOptions = {
6
+ exec: PostgresExecutor;
7
+ clock?: () => number;
8
+ };
9
+ export declare class PostgresSessionStore implements SessionStore {
10
+ #private;
11
+ constructor(opts: PostgresSessionStoreOptions);
12
+ saveFlow(flowId: string, payload: FlowRecord, ttl: number): Promise<Result<void>>;
13
+ updateFlowMethodState(flowId: string, methodState: unknown): Promise<Result<void>>;
14
+ readFlow(flowId: string): Promise<Result<FlowRecord>>;
15
+ consumeFlow(flowId: string): Promise<Result<FlowRecord>>;
16
+ createSession(sessionId: string, payload: SessionRecord, ttl: number): Promise<Result<void>>;
17
+ readSession(sessionId: string): Promise<Result<SessionRecord>>;
18
+ revokeSession(sessionId: string): Promise<Result<void>>;
19
+ }
20
+ //# sourceMappingURL=session-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgres/session-store.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,gBAAgB,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CACrB,CAAA;AAED,qBAAa,oBAAqB,YAAW,YAAY;;gBAI3C,IAAI,EAAE,2BAA2B;IAKvC,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAmBlB,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAwBlB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IA6BrD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IA4BxD,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAsBlB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IA6B9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAW9D"}
@@ -0,0 +1,30 @@
1
+ import type { KeyStore } from "../../ports/key-store";
2
+ import type { TokenStore } from "../../ports/token-store";
3
+ import type { Result } from "../../types/result";
4
+ import type { TenantId } from "../../types/tenant";
5
+ import type { RefreshTokenPayload } from "../../types/token";
6
+ import type { PostgresExecutor } from "./executor";
7
+ export type PostgresTokenStoreOptions = {
8
+ exec: PostgresExecutor;
9
+ /**
10
+ * Optional — retained for API stability after M1 moved code-payload
11
+ * encryption to the domain layer. The adapter no longer touches it.
12
+ */
13
+ keyStore?: KeyStore;
14
+ /** Injectable clock — defaults to `Date.now`. Tests advance it. */
15
+ clock?: () => number;
16
+ };
17
+ export declare class PostgresTokenStore implements TokenStore {
18
+ #private;
19
+ constructor(opts: PostgresTokenStoreOptions);
20
+ saveCode(code: string, ciphertext: string, ttl: number): Promise<Result<void>>;
21
+ consumeCode(code: string): Promise<Result<string>>;
22
+ saveRefresh(refresh: string, payload: RefreshTokenPayload): Promise<Result<void>>;
23
+ consumeRefresh(refresh: string, options?: {
24
+ reuseWindowMs?: number;
25
+ }): Promise<Result<RefreshTokenPayload>>;
26
+ peekRefresh(refresh: string): Promise<Result<RefreshTokenPayload>>;
27
+ revokeFamily(family: string): Promise<Result<void>>;
28
+ revokeBySubject(tenantId: TenantId, subjectId: string): Promise<Result<void>>;
29
+ }
30
+ //# sourceMappingURL=token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgres/token-store.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,gBAAgB,CAAA;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CACrB,CAAA;AAED,qBAAa,kBAAmB,YAAW,UAAU;;gBAIvC,IAAI,EAAE,yBAAyB;IAKrC,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAoBlB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAyBlD,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAsBlB,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GACvC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IA6EjC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAyBlE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYnD,eAAe,CACnB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAYzB"}
@@ -1,4 +1,4 @@
1
- import { SubjectSchema } from "./subject.js";
1
+ import type { SubjectSchema } from "./types/subject";
2
2
  import type { v1 } from "@standard-schema/spec";
3
3
  import { InvalidAccessTokenError, InvalidAuthorizationCodeError, InvalidRefreshTokenError } from "./error.js";
4
4
  /**
@@ -35,6 +35,13 @@ export interface Tokens {
35
35
  * The number of seconds until the access token expires.
36
36
  */
37
37
  expiresIn: number;
38
+ /**
39
+ * The OIDC `id_token` (signed JWT), present when `scope=openid` was granted.
40
+ *
41
+ * Refresh-grant rotation reissues this with a stable `auth_time` per
42
+ * OIDC Core §12 and deliberately omits the original `nonce`.
43
+ */
44
+ idToken?: string;
38
45
  }
39
46
  interface ResponseLike {
40
47
  json(): Promise<unknown>;
@@ -118,6 +125,18 @@ export interface AuthorizeOptions {
118
125
  * If there's only one provider configured, the user will be redirected to that.
119
126
  */
120
127
  provider?: string;
128
+ /**
129
+ * OAuth scopes to request, e.g. `["openid", "email", "profile"]`.
130
+ *
131
+ * Pass `openid` to request an `id_token` at `/token` (OIDC Core §2). Pass
132
+ * `email` / `profile` / `phone` / `address` to opt into the standard §5.4
133
+ * profile claim sets on the id_token and `/userinfo` response.
134
+ *
135
+ * Accepts an array or a pre-joined space-separated string. When omitted,
136
+ * no `scope` is sent — the IdP's default grant applies, which typically
137
+ * does NOT include `openid` and therefore does NOT issue an id_token.
138
+ */
139
+ scope?: string | string[];
121
140
  }
122
141
  export interface AuthorizeResult {
123
142
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Shared `safeAudit` helper — every domain module that emits audit
3
+ * events used to keep its own private `audit(...)` wrapper around
4
+ * `auditLog.log(event)` that silently swallowed any thrown error. The
5
+ * intent (per `ports/audit-log.ts`) is that audit emission must not
6
+ * derail the OAuth hot path, but operators have no signal when the
7
+ * pipeline goes down.
8
+ *
9
+ * Until the Logger port lands in Phase 8, durability failures here
10
+ * surface via `console.error` with a discriminating prefix. The Logger
11
+ * port will replace this single helper — the call sites stay put.
12
+ */
13
+ import type { AuditLog } from "../ports/audit-log";
14
+ export declare function safeAudit(deps: {
15
+ auditLog?: AuditLog;
16
+ }, event: Parameters<AuditLog["log"]>[0]): Promise<void>;
17
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/domain/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElD,wBAAsB,SAAS,CAC7B,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,EAC7B,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * `startAuthorize` — orchestrate the `/authorize` flow.
3
+ *
4
+ * Pure domain function over typed ports. The HTTP layer (Phase 3) parses
5
+ * the incoming `Request` into an `AuthorizationRequest`, runs
6
+ * `resolveTenant`, then calls into this function. No framework imports.
7
+ *
8
+ * Responsibilities (in order):
9
+ * 1. Validate the request against the registered `ClientConfig` —
10
+ * client lookup, redirect-URI exact match, scope subset, PKCE
11
+ * required-when-required.
12
+ * 2. Pick the method to dispatch to: explicit `methodId` if present,
13
+ * else the only enabled method, else surface a method-selection
14
+ * output for the UI.
15
+ * 3. Atomically `saveFlow` the `FlowRecord` (creates the
16
+ * pre-callback state) under a freshly minted `flowId`.
17
+ * 4. Mint the MAC-signed `state` envelope under the active key.
18
+ * 5. Dispatch to the method's `GET /authorize` handler — the method
19
+ * builds the upstream redirect (or renders the credential form,
20
+ * etc.) using the `dispatch.state` / `dispatch.callbackUrl` data
21
+ * we supply.
22
+ * 6. Translate the `MethodResult` into an `AuthorizeOutput`:
23
+ * `challenge` (HTTP layer renders), `success` (HTTP layer issues a
24
+ * code immediately — e.g. single-step credential flows), `denied`
25
+ * (OAuth `access_denied`), `error` (propagated).
26
+ *
27
+ * The framework writes / consumes `FlowRecord`. Methods read via
28
+ * `MethodContext.flow` / `methodState` and request state changes via
29
+ * `MethodResult.challenge.saveMethodState`.
30
+ */
31
+ import type { AuditLog } from "../ports/audit-log";
32
+ import type { KeyStore } from "../ports/key-store";
33
+ import type { SessionStore } from "../ports/session-store";
34
+ import type { TokenStore } from "../ports/token-store";
35
+ import type { AuthError } from "../types/error";
36
+ import type { AuthorizationRequest } from "../types/authorization";
37
+ import type { AnyAuthMethodFactory, SetCookie, CachePolicy } from "../types/method";
38
+ import type { Result } from "../types/result";
39
+ import type { StateKeyRing, TenantContext } from "../types/tenant";
40
+ import { MethodCache } from "./method-cache";
41
+ /** Default 10-minute pre-callback flow lifetime per plan §"TTLs". */
42
+ export declare const DEFAULT_FLOW_TTL_MS: number;
43
+ /**
44
+ * Auth-code lifetime per OAuth 2.1 BCP (`draft-ietf-oauth-v2-1-13` §4.1.3):
45
+ * the framework issues codes with this exact TTL, and every `TokenStore`
46
+ * adapter rejects `saveCode` calls whose `ttl` exceeds it. Treated as
47
+ * both the canonical default and the hard ceiling — there is no
48
+ * separate "max" knob.
49
+ */
50
+ export declare const AUTH_CODE_TTL_MS: number;
51
+ export type AuthorizeOutput =
52
+ /**
53
+ * Render the method's challenge (UI / redirect). HTTP layer applies
54
+ * cookies. `flowId` is exposed so the HTTP layer can stamp the
55
+ * framework's `idp.flow` cookie — used by credential POSTs (`/m/...`)
56
+ * to identify the in-flight flow without trusting form input, and as
57
+ * defense-in-depth for the OAuth callback path.
58
+ */
59
+ {
60
+ kind: "challenge";
61
+ response: Response;
62
+ setCookies: SetCookie[];
63
+ flowId: string;
64
+ cache?: CachePolicy;
65
+ }
66
+ /**
67
+ * Method returned synchronous success (e.g. single-step credential flow).
68
+ * The framework has minted an auth code; HTTP layer 302s back to the RP
69
+ * with `code` + `state` in the query.
70
+ */
71
+ | {
72
+ kind: "issue-code";
73
+ code: string;
74
+ appRedirectUri: string;
75
+ appState: string | null;
76
+ }
77
+ /** Method denied — surface `access_denied` per OAuth 2.1. */
78
+ | {
79
+ kind: "denied";
80
+ reason: string;
81
+ setCookies: SetCookie[];
82
+ }
83
+ /**
84
+ * No `methodId` given and >1 enabled methods configured. HTTP layer
85
+ * renders a selection page that re-requests `/authorize?methodId=…`.
86
+ */
87
+ | {
88
+ kind: "select-method";
89
+ methods: Array<{
90
+ id: string;
91
+ kind: string;
92
+ type: string;
93
+ }>;
94
+ };
95
+ export type StartAuthorizeInput = {
96
+ request: AuthorizationRequest;
97
+ /** The raw `Request` — handed to the method via `MethodContext.request`. */
98
+ rawRequest: Request;
99
+ tenant: TenantContext;
100
+ cookies: ReadonlyMap<string, string>;
101
+ };
102
+ export type StartAuthorizeDeps = {
103
+ sessionStore: SessionStore;
104
+ tokenStore: TokenStore;
105
+ /** Needed for at-rest encryption of the code payload — see `domain/token.ts`. */
106
+ keyStore: KeyStore;
107
+ auditLog?: AuditLog;
108
+ methodCache: MethodCache;
109
+ stateKeys: StateKeyRing;
110
+ /** Issuer URL — used to build the callback URL and threaded to methods. */
111
+ issuerUrl: string;
112
+ /** Tenant-partitioned callback host helper. Optional (recovery mechanism #2). */
113
+ callbackHostFor?: (tenantId: string) => string;
114
+ clock: () => number;
115
+ /** Override for testability. Defaults to `randomId` / `randomToken`. */
116
+ newFlowId?: () => string;
117
+ newCodeId?: () => string;
118
+ newNonce?: () => string;
119
+ /** Override TTLs. */
120
+ flowTtlMs?: number;
121
+ };
122
+ export declare function startAuthorize(input: StartAuthorizeInput, deps: StartAuthorizeDeps): Promise<Result<AuthorizeOutput, AuthError>>;
123
+ /** Factory map type — exported for HTTP-layer consumers. */
124
+ export type FactoryMap = Record<string, AnyAuthMethodFactory>;
125
+ //# sourceMappingURL=authorize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorize.d.ts","sourceRoot":"","sources":["../../../src/domain/authorize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,KAAK,EACV,oBAAoB,EAGpB,SAAS,EACT,WAAW,EACZ,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAgB,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIhF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAK5C,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,QAAiB,CAAA;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,QAAY,CAAA;AAEzC,MAAM,MAAM,eAAe;AACzB;;;;;;GAMG;AACD;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AACH;;;;GAIG;GACD;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AACH,6DAA6D;GAC3D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,EAAE,CAAA;CAAE;AAC7D;;;GAGG;GACD;IACE,IAAI,EAAE,eAAe,CAAA;IACrB,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC3D,CAAA;AAEL,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,oBAAoB,CAAA;IAC7B,4EAA4E;IAC5E,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,EAAE,UAAU,CAAA;IACtB,iFAAiF;IACjF,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,YAAY,CAAA;IACvB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAA;IACjB,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9C,KAAK,EAAE,MAAM,MAAM,CAAA;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAA;IACvB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAuI7C;AA4ID,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `handleCallback` — process the upstream provider's redirect back to the
3
+ * IdP. The framework:
4
+ *
5
+ * 1. Recovers `(tenantId, flowId)` from the MAC-bound `state` envelope.
6
+ * 2. Atomically `consumeFlow(flowId)` — single delete-on-read, returns
7
+ * the full `FlowRecord`.
8
+ * 3. Runs the **state-flow consistency check** (tenant, nonce, host,
9
+ * path). Any mismatch → `invalid_request` + corresponding audit.
10
+ * 4. Loads tenant config + resolves the method via `MethodCache`.
11
+ * 5. Dispatches the method's `GET /callback` handler.
12
+ * 6. On `success`, snapshots the in-memory `FlowRecord` into the
13
+ * auth-code payload via `TokenStore.saveCode` and returns
14
+ * `issue-code`. `methodState` is NOT snapshotted.
15
+ *
16
+ * Phase 2 implements the `mac-state` recovery only. Recovery mechanisms
17
+ * #2 (partitioned-host) and #3 (`flowId`-in-URI) are wired in Phase 3
18
+ * alongside the HTTP layer that knows the request's host / path /
19
+ * registered redirect URIs.
20
+ */
21
+ import type { ConfigStore } from "../ports/config-store";
22
+ import type { KeyStore } from "../ports/key-store";
23
+ import type { SessionStore } from "../ports/session-store";
24
+ import type { TokenStore } from "../ports/token-store";
25
+ import type { AuditLog } from "../ports/audit-log";
26
+ import type { AuthError } from "../types/error";
27
+ import type { SetCookie, CachePolicy } from "../types/method";
28
+ import type { Result } from "../types/result";
29
+ import type { StateKeyRing } from "../types/tenant";
30
+ import { MethodCache } from "./method-cache";
31
+ export type CallbackOutput = {
32
+ kind: "issue-code";
33
+ code: string;
34
+ appRedirectUri: string;
35
+ appState: string | null;
36
+ } | {
37
+ kind: "challenge";
38
+ response: Response;
39
+ setCookies: SetCookie[];
40
+ cache?: CachePolicy;
41
+ } | {
42
+ kind: "denied";
43
+ reason: string;
44
+ setCookies: SetCookie[];
45
+ };
46
+ export type HandleCallbackInput = {
47
+ /** The raw `Request` for the upstream provider's redirect. */
48
+ rawRequest: Request;
49
+ cookies: ReadonlyMap<string, string>;
50
+ };
51
+ export type HandleCallbackDeps = {
52
+ configStore: ConfigStore;
53
+ sessionStore: SessionStore;
54
+ tokenStore: TokenStore;
55
+ /** Needed for at-rest encryption of the code payload — see `domain/token.ts`. */
56
+ keyStore: KeyStore;
57
+ auditLog?: AuditLog;
58
+ methodCache: MethodCache;
59
+ stateKeys: StateKeyRing;
60
+ clock: () => number;
61
+ newCodeId?: () => string;
62
+ /**
63
+ * Build the `TenantContext.request.custom` blob. Wired through from
64
+ * `IdPOptions.buildCustomContext` by the HTTP layer; if absent the
65
+ * blob is `{}`.
66
+ */
67
+ buildCustomContext?: (req: Request) => Record<string, unknown> | Promise<Record<string, unknown>>;
68
+ };
69
+ export declare function handleCallback(input: HandleCallbackInput, deps: HandleCallbackDeps): Promise<Result<CallbackOutput, AuthError>>;
70
+ //# sourceMappingURL=callback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../../src/domain/callback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG/C,OAAO,KAAK,EAAgB,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,iBAAiB,CAAA;AAIlE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAM5C,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,GACD;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,EAAE,CAAA;CAAE,CAAA;AAE/D,MAAM,MAAM,mBAAmB,GAAG;IAChC,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,EAAE,UAAU,CAAA;IACtB,iFAAiF;IACjF,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,YAAY,CAAA;IACvB,KAAK,EAAE,MAAM,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAA;IACxB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,CACnB,GAAG,EAAE,OAAO,KACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAChE,CAAA;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAiG5C"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Shared client-authentication helpers.
3
+ *
4
+ * `/token`, `/revoke`, `/introspect`, and refresh-token rotation all need
5
+ * to validate presented credentials against a `ClientConfig`. The logic is
6
+ * the same in every case:
7
+ *
8
+ * - **Public clients** MUST NOT present a `client_secret` (RFC 6749 §2.3).
9
+ * - **Confidential clients** MUST present a `client_secret`, hashed and
10
+ * compared in constant time against `ClientConfig.secretHash`.
11
+ *
12
+ * Credentials may ride either in the form body (`client_id`,
13
+ * `client_secret`) or in an `Authorization: Basic` header
14
+ * (RFC 6749 §2.3.1). Both encodings are accepted; the header takes
15
+ * precedence when both are present.
16
+ *
17
+ * The hashing function lives in `./token.ts` (`hashClientSecret`) to keep
18
+ * the legacy phase-2 SHA-256 / base64url format in one place; production
19
+ * deployments migrate to argon2id later in the rebuild.
20
+ */
21
+ import { type AuthError } from "../types/error";
22
+ import type { ClientConfig } from "../types/tenant";
23
+ export type ClientCredentials = {
24
+ /** Client identifier (always present when credentials are presented). */
25
+ clientId: string;
26
+ /** Confidential clients only. */
27
+ clientSecret?: string;
28
+ };
29
+ /**
30
+ * Validate presented credentials against `client`. Returns `null` on
31
+ * success, `AuthError` on rejection.
32
+ *
33
+ * Public clients pass when no secret is presented. Confidential clients
34
+ * require both a secret and a matching `secretHash`.
35
+ */
36
+ export declare function verifyClientCredentials(client: ClientConfig, presentedSecret: string | undefined): Promise<AuthError | null>;
37
+ /**
38
+ * Parse an `Authorization: Basic <base64>` header.
39
+ *
40
+ * Returns `null` for missing / non-Basic headers and for any decoding
41
+ * failure; callers fall back to form-body credentials.
42
+ */
43
+ export declare function parseBasicAuth(header: string | null): ClientCredentials | null;
44
+ /**
45
+ * Merge form-body credentials with an optional `Authorization: Basic`
46
+ * header. The header wins per RFC 6749 §2.3 when both are present.
47
+ *
48
+ * Returns `null` when neither source supplies a `client_id` — callers
49
+ * then decide whether that's permissible (anonymous revoke is OK; the
50
+ * token endpoint isn't).
51
+ */
52
+ export declare function resolveClientCredentials(input: {
53
+ authorizationHeader: string | null;
54
+ bodyClientId: string | undefined;
55
+ bodyClientSecret: string | undefined;
56
+ }): ClientCredentials | null;
57
+ //# sourceMappingURL=client-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-auth.d.ts","sourceRoot":"","sources":["../../../src/domain/client-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAKnD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAA;IAChB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAiB3B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,iBAAiB,GAAG,IAAI,CAqB1B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC,GAAG,iBAAiB,GAAG,IAAI,CAU3B"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * `/token` endpoint logic for `grant_type=client_credentials` (RFC 6749 §4.4).
3
+ *
4
+ * Steps:
5
+ * 1. Authenticate the client. Must be confidential and must declare
6
+ * `client_credentials` in `grantTypes`.
7
+ * 2. Resolve the tenant's m2m method. The plan models m2m as a method
8
+ * with a `client` fn and no routes; we look for the unique
9
+ * `type === "m2m"` instance on the tenant. Zero or multiple → error.
10
+ * 3. Call `method.client({ clientID, clientSecret, params })`. On
11
+ * success the method returns the `P` properties it would have
12
+ * emitted on a `success` MethodResult.
13
+ * 4. Invoke the user's `success` callback to mint the subject claim
14
+ * with `methodKind = method.kind`, `methodId = method.id`.
15
+ * 5. `mintTokens` — access token only (no refresh per §4.4.3).
16
+ *
17
+ * The framework rejects requests presenting `scope` beyond what
18
+ * `ClientConfig.scopes` allows.
19
+ */
20
+ import type { AuditLog } from "../ports/audit-log";
21
+ import type { ConfigStore } from "../ports/config-store";
22
+ import type { KeyStore } from "../ports/key-store";
23
+ import type { TokenStore } from "../ports/token-store";
24
+ import { type AuthError } from "../types/error";
25
+ import type { PersistUpstreamTokens, SuccessMapInput } from "../types/idp";
26
+ import type { Result } from "../types/result";
27
+ import type { SubjectClaim } from "../types/subject";
28
+ import type { TenantId } from "../types/tenant";
29
+ import type { TokenResponse } from "../types/token";
30
+ import { MethodCache } from "./method-cache";
31
+ export type ClientCredentialsRequest = {
32
+ grantType: "client_credentials";
33
+ clientId: string;
34
+ clientSecret: string;
35
+ scope?: string;
36
+ /** Extra params (audience, resource, etc.). Forwarded to `method.client`. */
37
+ params?: Record<string, string>;
38
+ };
39
+ export type ClientCredentialsDeps = {
40
+ configStore: ConfigStore;
41
+ tokenStore: TokenStore;
42
+ keyStore: KeyStore;
43
+ auditLog?: AuditLog;
44
+ methodCache: MethodCache;
45
+ success: (input: SuccessMapInput) => Promise<SubjectClaim>;
46
+ persistUpstreamTokens?: PersistUpstreamTokens;
47
+ issuerUrl: string;
48
+ clock: () => number;
49
+ newRefreshFamily?: () => string;
50
+ /** See `IdPOptions.customScopeClaims`. Forwarded to `mintTokens`. */
51
+ customScopeClaims?: Record<string, ReadonlyArray<string>>;
52
+ };
53
+ export declare function clientCredentialsGrant(req: ClientCredentialsRequest, deps: ClientCredentialsDeps, tenantId: TenantId): Promise<Result<TokenResponse, AuthError>>;
54
+ //# sourceMappingURL=client-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-credentials.d.ts","sourceRoot":"","sources":["../../../src/domain/client-credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAKnD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,oBAAoB,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAC1D,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAA;IAC/B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;CAC1D,CAAA;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,qBAAqB,EAC3B,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAmH3C"}
@@ -0,0 +1,53 @@
1
+ /** 256-bit random token, base64url-encoded. ~43 chars. */
2
+ export declare function randomToken(): string;
3
+ /** 128-bit random id, base64url-encoded. ~22 chars. */
4
+ export declare function randomId(): string;
5
+ /** Cryptographic random hex string of `bytes` length. */
6
+ export declare function randomHex(bytes: number): string;
7
+ /** Cryptographic random `Uint8Array` of `bytes` length. */
8
+ export declare function randomBytes(bytes: number): Uint8Array;
9
+ /** Base64url encode raw bytes (jose alias for downstream consistency). */
10
+ export declare const base64url: {
11
+ encode: (data: Uint8Array | string) => string;
12
+ decode: (s: string) => Uint8Array;
13
+ };
14
+ /** UTF-8 helpers. */
15
+ export declare const utf8: {
16
+ encode: (s: string) => Uint8Array;
17
+ decode: (b: Uint8Array) => string;
18
+ };
19
+ /**
20
+ * Constant-time byte-array compare. Returns false fast on length mismatch
21
+ * (length itself is not secret), then XORs every byte to avoid early exit.
22
+ */
23
+ export declare function timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean;
24
+ /** Constant-time string compare (UTF-8 bytes). */
25
+ export declare function timingSafeEqualStr(a: string, b: string): boolean;
26
+ /** SHA-256 digest. */
27
+ export declare function sha256(data: Uint8Array | string): Promise<Uint8Array>;
28
+ /** Import a 32-byte HMAC-SHA-256 key for sign/verify use. */
29
+ export declare function importHmacKey(raw: Uint8Array, usage?: ReadonlyArray<"sign" | "verify">): Promise<CryptoKey>;
30
+ /** HMAC-SHA-256 sign. */
31
+ export declare function hmacSign(key: CryptoKey, message: Uint8Array): Promise<Uint8Array>;
32
+ /**
33
+ * HMAC-SHA-256 verify. `crypto.subtle.verify` is timing-safe by spec, which
34
+ * is why we use it instead of recomputing + comparing manually.
35
+ */
36
+ export declare function hmacVerify(key: CryptoKey, signature: Uint8Array, message: Uint8Array): Promise<boolean>;
37
+ /**
38
+ * Encrypt a JSON-serializable payload with AES-256-GCM under the supplied
39
+ * 256-bit key. Output is a compact JWE string (`{header}.{enc-key}.{iv}.{ct}.{tag}`).
40
+ *
41
+ * Used for `TokenStore.saveCode` — the auth-code payload is encrypted at
42
+ * rest. The compact-JWE format embeds the `kid` so `consumeCode` can pick
43
+ * the right key during overlap rotation.
44
+ *
45
+ * For symmetric direct encryption we use `dir` with `A256GCM`, so the
46
+ * supplied `keyBytes` is the content-encryption key itself.
47
+ */
48
+ export declare function encryptPayload(payload: unknown, kid: string, keyBytes: Uint8Array): Promise<string>;
49
+ /** Inverse of {@link encryptPayload}. Returns the parsed JSON payload. */
50
+ export declare function decryptPayload<T = unknown>(jwe: string, resolveKey: (kid: string) => Promise<Uint8Array>): Promise<T>;
51
+ /** Generate a fresh 32-byte AES-256 / HMAC-SHA-256 key. */
52
+ export declare function generateSymmetricKey(): Uint8Array;
53
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/domain/crypto.ts"],"names":[],"mappings":"AAQA,0DAA0D;AAC1D,wBAAgB,WAAW,IAAI,MAAM,CAIpC;AAED,uDAAuD;AACvD,wBAAgB,QAAQ,IAAI,MAAM,CAIjC;AAED,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAIrD;AAED,0EAA0E;AAC1E,eAAO,MAAM,SAAS;mBACL,UAAU,GAAG,MAAM,KAAG,MAAM;gBAC/B,MAAM,KAAG,UAAU;CAChC,CAAA;AAED,qBAAqB;AACrB,eAAO,MAAM,IAAI;gBACH,MAAM,KAAG,UAAU;gBACnB,UAAU,KAAG,MAAM;CAChC,CAAA;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAKrE;AAED,kDAAkD;AAClD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,sBAAsB;AACtB,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAI3E;AAED,6DAA6D;AAC7D,wBAAsB,aAAa,CACjC,GAAG,EAAE,UAAU,EACf,KAAK,GAAE,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAsB,GAC3D,OAAO,CAAC,SAAS,CAAC,CAQpB;AAED,yBAAyB;AACzB,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,0EAA0E;AAC1E,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,GAC/C,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED,2DAA2D;AAC3D,wBAAgB,oBAAoB,IAAI,UAAU,CAIjD"}