@_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,85 @@
1
+ /**
2
+ * Top-level Hono router for the IdP HTTP surface.
3
+ *
4
+ * Routes (Phase 3):
5
+ * GET /authorize — start OAuth flow
6
+ * POST /token — exchange code / refresh
7
+ * GET /userinfo, POST /userinfo — OIDC claims
8
+ * GET /cb/:methodId{.*} — upstream callback
9
+ * GET /.well-known/openid-configuration — discovery
10
+ * GET /.well-known/oauth-authorization-server — discovery (alias)
11
+ * GET /.well-known/jwks.json — JWKS
12
+ * POST /revoke — RFC 7009
13
+ * POST /introspect — RFC 7662
14
+ *
15
+ * Hono is imported **only** from this directory. `domain/`, `methods/`,
16
+ * `types/`, `ports/`, and `adapters/` remain framework-agnostic.
17
+ */
18
+ import { Hono } from "hono"
19
+
20
+ import { makeAuthorizeHandler } from "./handlers/authorize"
21
+ import { makeCallbackHandler } from "./handlers/callback"
22
+ import { makeEndSessionHandler } from "./handlers/end-session"
23
+ import { makeDiscoveryHandler, makeJwksHandler } from "./handlers/metadata"
24
+ import { makeMethodRouteHandler } from "./handlers/method-route"
25
+ import { makeParHandler } from "./handlers/par"
26
+ import { makeRegisterHandler } from "./handlers/register"
27
+ import { makeIntrospectHandler, makeRevokeHandler } from "./handlers/revocation"
28
+ import { makeTokenHandler } from "./handlers/token"
29
+ import { makeUserinfoHandler } from "./handlers/userinfo"
30
+ import { errorMiddleware } from "./middleware/error"
31
+ import { bootstrapMiddleware, tenantMiddleware } from "./middleware/tenant"
32
+ import type { HttpDeps, HttpEnv } from "./context"
33
+
34
+ export function buildRouter(deps: HttpDeps): Hono<HttpEnv> {
35
+ const app = new Hono<HttpEnv>()
36
+
37
+ app.use("*", errorMiddleware(deps))
38
+ app.use("*", bootstrapMiddleware(deps))
39
+
40
+ // Public metadata — no tenant middleware required.
41
+ app.get("/.well-known/openid-configuration", makeDiscoveryHandler(deps))
42
+ app.get("/.well-known/oauth-authorization-server", makeDiscoveryHandler(deps))
43
+ app.get("/.well-known/jwks.json", makeJwksHandler(deps))
44
+
45
+ // Tenant-scoped endpoints.
46
+ app.use("/authorize", tenantMiddleware(deps))
47
+ app.get("/authorize", makeAuthorizeHandler(deps))
48
+
49
+ app.use("/cb/*", tenantMiddleware(deps))
50
+ app.get("/cb/*", makeCallbackHandler(deps))
51
+ // Apple `response_mode=form_post` and similar POST-binding callbacks.
52
+ app.post("/cb/*", makeCallbackHandler(deps))
53
+
54
+ // Credential-flow method routes — POST and GET allowed.
55
+ app.use("/m/*", tenantMiddleware(deps))
56
+ app.all("/m/*", makeMethodRouteHandler(deps))
57
+
58
+ // Token endpoint — tenant resolved from auth-code payload, not middleware.
59
+ app.post("/token", makeTokenHandler(deps))
60
+
61
+ // Userinfo — bearer token carries tenant claim (`tid`).
62
+ app.get("/userinfo", makeUserinfoHandler(deps))
63
+ app.post("/userinfo", makeUserinfoHandler(deps))
64
+
65
+ app.post("/revoke", makeRevokeHandler(deps))
66
+ app.post("/introspect", makeIntrospectHandler(deps))
67
+
68
+ // OIDC RP-Initiated Logout 1.0. Tenant resolved via the standard
69
+ // middleware — same partitioning rules as `/authorize`.
70
+ app.use("/end_session", tenantMiddleware(deps))
71
+ app.get("/end_session", makeEndSessionHandler(deps))
72
+ app.post("/end_session", makeEndSessionHandler(deps))
73
+
74
+ // RFC 9126 Pushed Authorization Requests.
75
+ app.use("/par", tenantMiddleware(deps))
76
+ app.post("/par", makeParHandler(deps))
77
+
78
+ // RFC 7591 Dynamic Client Registration. Tenant resolution uses the
79
+ // standard middleware — partitioned hosts may carve out per-tenant
80
+ // registration endpoints transparently.
81
+ app.use("/register", tenantMiddleware(deps))
82
+ app.post("/register", makeRegisterHandler(deps))
83
+
84
+ return app
85
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Zod schemas for the `/authorize` endpoint.
3
+ *
4
+ * Parse the raw query into an `AuthorizationRequest` shape. We surface OAuth
5
+ * `invalid_request` (or the more specific `unsupported_response_type` /
6
+ * `invalid_scope`) for any structural failure here; downstream domain code
7
+ * then handles semantic validation (client lookup, redirect-uri match, PKCE
8
+ * requirement, etc.).
9
+ */
10
+ import { z } from "zod"
11
+
12
+ /** RFC 6749 scope-token regex (visible ASCII minus delimiters). */
13
+ const SCOPE_TOKEN = /^[\x21\x23-\x5B\x5D-\x7E]+$/
14
+
15
+ const csv = z
16
+ .string()
17
+ .min(1)
18
+ .transform((s) =>
19
+ s
20
+ .split(/\s+/)
21
+ .map((part) => part.trim())
22
+ .filter((part) => part.length > 0),
23
+ )
24
+
25
+ const scopeParam = z
26
+ .string()
27
+ .transform((s) =>
28
+ s
29
+ .split(/\s+/)
30
+ .map((part) => part.trim())
31
+ .filter((part) => part.length > 0),
32
+ )
33
+ .pipe(z.array(z.string().regex(SCOPE_TOKEN, "invalid scope token")))
34
+
35
+ /**
36
+ * Standard `/authorize` query schema. Used both for direct calls and as
37
+ * the validation target after a PAR record is rehydrated — the PAR'd
38
+ * params are passed through this same parser so semantic checks stay in
39
+ * a single place.
40
+ */
41
+ export const authorizeQuerySchema = z
42
+ .object({
43
+ response_type: z.string({
44
+ required_error: "missing response_type",
45
+ }),
46
+ client_id: z
47
+ .string({ required_error: "missing client_id" })
48
+ .min(1, "empty client_id"),
49
+ redirect_uri: z
50
+ .string({ required_error: "missing redirect_uri" })
51
+ .url("redirect_uri must be a valid URL"),
52
+ scope: scopeParam.optional(),
53
+ state: z.string().optional(),
54
+ audience: z.string().optional(),
55
+ method_id: z.string().optional(),
56
+ code_challenge: z.string().optional(),
57
+ code_challenge_method: z.literal("S256").optional(),
58
+ prompt: csv.optional(),
59
+ ui_locales: csv.optional(),
60
+ nonce: z.string().optional(),
61
+ /**
62
+ * OIDC Core §5.5 — JSON-encoded claims request. Parsing + structural
63
+ * validation happens in the domain layer; here we just accept any
64
+ * non-empty string and let the handler parse + reject malformed.
65
+ */
66
+ claims: z.string().min(1).optional(),
67
+ })
68
+ .passthrough()
69
+
70
+ /**
71
+ * RFC 9126 §4: when `request_uri` is presented, the user-agent's
72
+ * `/authorize` URL is allowed to carry only `client_id` and
73
+ * `request_uri`; the rest of the parameter set must come from the
74
+ * stored PAR record.
75
+ */
76
+ export const authorizeRequestUriQuerySchema = z
77
+ .object({
78
+ client_id: z
79
+ .string({ required_error: "missing client_id" })
80
+ .min(1, "empty client_id"),
81
+ request_uri: z.string({ required_error: "missing request_uri" }).min(1),
82
+ })
83
+ .passthrough()
84
+
85
+ export type AuthorizeQuery = z.infer<typeof authorizeQuerySchema>
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Zod schema for `/end_session` (OIDC RP-Initiated Logout 1.0 §2).
3
+ *
4
+ * Every parameter is optional per spec. The domain layer enforces the
5
+ * "needs identifying client to honor post_logout_redirect_uri" rule.
6
+ */
7
+ import { z } from "zod"
8
+
9
+ export const endSessionParamsSchema = z
10
+ .object({
11
+ id_token_hint: z.string().optional(),
12
+ client_id: z.string().min(1).optional(),
13
+ post_logout_redirect_uri: z
14
+ .string()
15
+ .url("post_logout_redirect_uri must be a valid URL")
16
+ .optional(),
17
+ state: z.string().optional(),
18
+ logout_hint: z.string().optional(),
19
+ ui_locales: z.string().optional(),
20
+ })
21
+ .passthrough()
22
+
23
+ export type EndSessionParams = z.infer<typeof endSessionParamsSchema>
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Zod schema for the `POST /par` body (RFC 9126 §2).
3
+ *
4
+ * The shape is identical to `/authorize` query parameters; we just need
5
+ * `client_id` to identify the authenticating client. `client_secret` is
6
+ * accepted in-body for `client_secret_post` auth.
7
+ */
8
+ import { z } from "zod"
9
+
10
+ export const parBodySchema = z
11
+ .object({
12
+ client_id: z
13
+ .string({ required_error: "missing client_id" })
14
+ .min(1, "empty client_id"),
15
+ client_secret: z.string().optional(),
16
+ })
17
+ // `.catchall(z.string())` validates AND types passthrough keys as
18
+ // strings — `application/x-www-form-urlencoded` values are always
19
+ // strings at the wire level, so this also rejects malformed bodies
20
+ // where a key somehow carries a non-string value.
21
+ .catchall(z.string())
22
+
23
+ export type ParBody = z.infer<typeof parBodySchema>
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Zod schema for `POST /register` (RFC 7591 §2).
3
+ *
4
+ * The body is `application/json`. We surface invalid structure as
5
+ * `invalid_request` rather than the spec's `invalid_client_metadata` /
6
+ * `invalid_redirect_uri` codes — the library collapses all wire-format
7
+ * problems to the OAuth-2.0 `invalid_request` family for consistency.
8
+ */
9
+ import { z } from "zod"
10
+
11
+ export const registerBodySchema = z
12
+ .object({
13
+ client_name: z.string().min(1).optional(),
14
+ redirect_uris: z
15
+ .array(z.string().url("redirect_uri must be a valid URL"))
16
+ .min(1, "redirect_uris must be a non-empty array"),
17
+ grant_types: z.array(z.string()).optional(),
18
+ response_types: z.array(z.string()).optional(),
19
+ token_endpoint_auth_method: z
20
+ .enum(["none", "client_secret_basic", "client_secret_post"])
21
+ .optional(),
22
+ scope: z.string().optional(),
23
+ post_logout_redirect_uris: z.array(z.string().url()).optional(),
24
+ sector_identifier_uri: z.string().url().optional(),
25
+ contacts: z.array(z.string()).optional(),
26
+ })
27
+ .passthrough()
28
+
29
+ export type RegisterBody = z.infer<typeof registerBodySchema>
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Zod schemas for RFC 7009 `/revoke` and RFC 7662 `/introspect`. Both are
3
+ * advertised in discovery from Phase 3 onward; their HTTP shims live here so
4
+ * the domain functions are reachable without waiting for Phase 8.
5
+ */
6
+ import { z } from "zod"
7
+
8
+ export const revokeBodySchema = z.object({
9
+ token: z.string().min(1, "missing token"),
10
+ token_type_hint: z.enum(["access_token", "refresh_token"]).optional(),
11
+ client_id: z.string().optional(),
12
+ client_secret: z.string().optional(),
13
+ })
14
+
15
+ export const introspectBodySchema = z.object({
16
+ token: z.string().min(1, "missing token"),
17
+ token_type_hint: z.enum(["access_token", "refresh_token"]).optional(),
18
+ client_id: z.string().optional(),
19
+ client_secret: z.string().optional(),
20
+ })
21
+
22
+ export type RevokeBody = z.infer<typeof revokeBodySchema>
23
+ export type IntrospectBody = z.infer<typeof introspectBodySchema>
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Zod schemas for the `/token` endpoint.
3
+ *
4
+ * The endpoint accepts `application/x-www-form-urlencoded` per RFC 6749.
5
+ * `grant_type` discriminates between the supported grants:
6
+ * - `authorization_code`
7
+ * - `refresh_token`
8
+ * - `client_credentials`
9
+ * - `urn:ietf:params:oauth:grant-type:token-exchange` (RFC 8693)
10
+ */
11
+ import { z } from "zod"
12
+
13
+ /** RFC 8693 §3 token-type identifiers used at this endpoint. */
14
+ export const TOKEN_EXCHANGE_GRANT_TYPE =
15
+ "urn:ietf:params:oauth:grant-type:token-exchange" as const
16
+ export const ACCESS_TOKEN_TYPE =
17
+ "urn:ietf:params:oauth:token-type:access_token" as const
18
+ export const REFRESH_TOKEN_TYPE =
19
+ "urn:ietf:params:oauth:token-type:refresh_token" as const
20
+
21
+ export const authorizationCodeGrantSchema = z.object({
22
+ grant_type: z.literal("authorization_code"),
23
+ code: z.string().min(1, "missing code"),
24
+ redirect_uri: z.string().url("invalid redirect_uri"),
25
+ client_id: z.string().min(1, "missing client_id"),
26
+ client_secret: z.string().optional(),
27
+ code_verifier: z.string().optional(),
28
+ })
29
+
30
+ export const refreshTokenGrantSchema = z.object({
31
+ grant_type: z.literal("refresh_token"),
32
+ refresh_token: z.string().min(1, "missing refresh_token"),
33
+ scope: z.string().optional(),
34
+ client_id: z.string().optional(),
35
+ client_secret: z.string().optional(),
36
+ })
37
+
38
+ export const clientCredentialsGrantSchema = z
39
+ .object({
40
+ grant_type: z.literal("client_credentials"),
41
+ client_id: z.string().min(1, "missing client_id"),
42
+ client_secret: z.string().min(1, "missing client_secret"),
43
+ scope: z.string().optional(),
44
+ audience: z.string().optional(),
45
+ resource: z.string().optional(),
46
+ })
47
+ .passthrough()
48
+
49
+ /**
50
+ * RFC 8693 §2.1 token-exchange request.
51
+ *
52
+ * `subject_token_type` MUST identify the type of `subject_token`. We only
53
+ * accept access tokens here — refresh-token-as-subject is out of scope.
54
+ *
55
+ * `audience` is opaque to the library; the host's `exchangeAudience`
56
+ * hook decides what counts as a legal target. In our two-level
57
+ * `App × App-Tenant` encoding pattern this is the new `TenantId`.
58
+ *
59
+ * `actor_token` (delegation) is intentionally rejected at the handler;
60
+ * only impersonation / audience-switching is supported in this phase.
61
+ */
62
+ export const tokenExchangeGrantSchema = z
63
+ .object({
64
+ grant_type: z.literal(TOKEN_EXCHANGE_GRANT_TYPE),
65
+ subject_token: z.string().min(1, "missing subject_token"),
66
+ subject_token_type: z.literal(ACCESS_TOKEN_TYPE),
67
+ audience: z.string().min(1, "missing audience"),
68
+ requested_token_type: z.literal(ACCESS_TOKEN_TYPE).optional(),
69
+ scope: z.string().optional(),
70
+ client_id: z.string().optional(),
71
+ client_secret: z.string().optional(),
72
+ actor_token: z.string().optional(),
73
+ actor_token_type: z.string().optional(),
74
+ resource: z.string().optional(),
75
+ })
76
+ .passthrough()
77
+
78
+ export const tokenRequestSchema = z.discriminatedUnion("grant_type", [
79
+ authorizationCodeGrantSchema,
80
+ refreshTokenGrantSchema,
81
+ clientCredentialsGrantSchema,
82
+ tokenExchangeGrantSchema,
83
+ ])
84
+
85
+ export type TokenRequest = z.infer<typeof tokenRequestSchema>
package/src/index.ts CHANGED
@@ -1,26 +1,289 @@
1
- export {
2
- /**
3
- * @deprecated
4
- * Use `import { createClient } from "@openauthjs/openauth/client"` instead - it will tree shake better
5
- */
6
- createClient,
7
- } from "./client.js"
1
+ /**
2
+ * `@_mustachio/openauth` — public entry point.
3
+ *
4
+ * Library-only IdP surface: domain logic + ports + adapters. Consumers
5
+ * embed this in a host application that owns UI, RBAC, admin, and tenant
6
+ * management. See `docs/integration-guide.md` for the embedding pattern.
7
+ *
8
+ * `createClient` continues to ship at the dedicated path
9
+ * `@_mustachio/openauth/client` (better tree-shaking than re-exporting
10
+ * it from the root).
11
+ */
12
+
13
+ // ─── New IdP public API ───
14
+
15
+ export type { Result } from "./types/result"
16
+ export { err, isErr, isOk, ok } from "./types/result"
17
+
18
+ export type { AuthError, AuthErrorCode } from "./types/error"
19
+ export { authError } from "./types/error"
20
+
21
+ export type {
22
+ ClientConfig,
23
+ ConfidentialClientConfig,
24
+ GrantType,
25
+ MethodConfig,
26
+ MethodType,
27
+ PublicClientConfig,
28
+ StateEnvelope,
29
+ StateKey,
30
+ StateKeyRing,
31
+ TenantConfig,
32
+ TenantContext,
33
+ TenantId,
34
+ TenantRecovery,
35
+ ThemeConfig,
36
+ } from "./types/tenant"
37
+ export { asTenantId } from "./types/tenant"
38
+
39
+ export type { FlowRecord } from "./types/flow"
40
+
41
+ export type {
42
+ AuthMethod,
43
+ AuthMethodFactory,
44
+ CachePolicy,
45
+ ClientFn,
46
+ MethodContext,
47
+ MethodDispatchData,
48
+ MethodHandler,
49
+ MethodResult,
50
+ SetCookie,
51
+ } from "./types/method"
52
+
53
+ export type {
54
+ AuthorizationRequest,
55
+ AuthorizationState,
56
+ } from "./types/authorization"
57
+
58
+ export type {
59
+ AccessTokenClaims,
60
+ AddressClaim,
61
+ CodePayload,
62
+ IdTokenClaims,
63
+ RefreshTokenPayload,
64
+ ScopedProfileClaims,
65
+ TokenResponse,
66
+ } from "./types/token"
67
+
68
+ export type {
69
+ SubjectClaim,
70
+ SubjectPayload,
71
+ SubjectSchema,
72
+ } from "./types/subject"
73
+
74
+ export type {
75
+ ExchangeAudience,
76
+ FailureEvent,
77
+ IdP,
78
+ IdPOptions,
79
+ PersistUpstreamTokens,
80
+ RegisterClient,
81
+ RegisterClientRequest,
82
+ RegisterClientResponse,
83
+ RenderPicker,
84
+ SuccessEvent,
85
+ SuccessMapInput,
86
+ } from "./types/idp"
87
+
88
+ export type { PickerContext, PickerMethod } from "./types/picker"
89
+
90
+ export type { AuditEvent, AuditLog } from "./ports/audit-log"
91
+ export type { ConfigStore } from "./ports/config-store"
92
+ export type {
93
+ EncryptionKey,
94
+ KeyStore,
95
+ KeyWrapper,
96
+ SigningKey,
97
+ } from "./ports/key-store"
98
+ export type { MethodStore } from "./ports/method-store"
99
+ export type {
100
+ ParRecord,
101
+ SessionRecord,
102
+ SessionStore,
103
+ } from "./ports/session-store"
104
+ export type { TokenStore } from "./ports/token-store"
105
+
106
+ /**
107
+ * Host-callable primitive for "log me out of all devices" UX. Wraps
108
+ * `TokenStore.revokeBySubject` with the framework's audit emission so
109
+ * hosts don't need to reimplement it. Reuse-detection escalation itself
110
+ * stays at family-scope per OAuth 2.0 Security BCP §4.13.2 (see
111
+ * ARCHITECTURE.md "Reuse detection scope").
112
+ */
113
+ export { revokeAllForSubject } from "./domain/revoke"
114
+
115
+ // Phase 4 — credential + WebAuthn method factories.
116
+ export { passwordMethod } from "./methods/password"
117
+ export type {
118
+ PasswordMethodOptions,
119
+ PasswordProperties,
120
+ PasswordUser,
121
+ PasswordUserStore,
122
+ PasswordState,
123
+ } from "./methods/password"
124
+ export { codeMethod } from "./methods/code"
125
+ export type {
126
+ CodeMethodOptions,
127
+ CodeProperties,
128
+ CodeState,
129
+ } from "./methods/code"
130
+ export { m2mMethod } from "./methods/m2m"
131
+ export type { M2MMethodOptions, M2MProperties } from "./methods/m2m"
132
+ export { passkeyMethod } from "./methods/passkey"
133
+ export type {
134
+ PasskeyMethodOptions,
135
+ PasskeyProperties,
136
+ PasskeyState,
137
+ PasskeyCredentialStore,
138
+ StoredCredential,
139
+ } from "./methods/passkey"
8
140
 
9
141
  export {
10
- /**
11
- * @deprecated
12
- * Use `import { createSubjects } from "@openauthjs/openauth/subject"` instead - it will tree shake better
13
- */
14
- createSubjects,
15
- } from "./subject.js"
142
+ argon2idHasher,
143
+ DEFAULT_ARGON2ID_PARAMS,
144
+ } from "./methods/password-hash"
145
+ export type { PasswordHasher, Argon2idParams } from "./methods/password-hash"
146
+
147
+ // Phase 5 — OAuth / OIDC provider factories.
148
+ export { buildOauth2Method } from "./methods/oauth2-generic"
149
+ export type {
150
+ Oauth2MethodInput,
151
+ Oauth2Properties,
152
+ Oauth2State,
153
+ } from "./methods/oauth2-generic"
154
+ export { buildOidcMethod } from "./methods/oidc-generic"
155
+ export type { OidcMethodInput } from "./methods/oidc-generic"
16
156
 
17
- import { issuer } from "./issuer.js"
157
+ // Generic multi-tenant factories. Reach for these first when each
158
+ // tenant brings its own issuer / client credentials. The vendor
159
+ // factories above (googleFactory etc.) are convenience wrappers when
160
+ // the issuer is fixed.
161
+ export {
162
+ oauth2Factory,
163
+ oidcFactory,
164
+ type Oauth2FactoryConfig,
165
+ type OidcFactoryConfig,
166
+ } from "./methods/oauth2-factory"
18
167
 
19
168
  export {
20
- /**
21
- * @deprecated
22
- * Use `import { issuer } from "@openauthjs/openauth"` instead, it was renamed
23
- */
24
- issuer as authorizer,
25
- issuer,
169
+ appleFactory,
170
+ cognitoFactory,
171
+ discordFactory,
172
+ facebookFactory,
173
+ githubFactory,
174
+ googleFactory,
175
+ jumpcloudFactory,
176
+ keycloakFactory,
177
+ linkedinFactory,
178
+ microsoftFactory,
179
+ slackFactory,
180
+ spotifyFactory,
181
+ twitchFactory,
182
+ xFactory,
183
+ yahooFactory,
184
+ } from "./methods/providers"
185
+
186
+ import type { IdP, IdPOptions } from "./types/idp"
187
+ import { MethodCache } from "./domain/method-cache"
188
+ import { buildRouter } from "./http/router"
189
+ import type { HttpDeps } from "./http/context"
190
+
191
+ /**
192
+ * Construct a new IdP from the supplied options.
193
+ *
194
+ * Phase 3 ships the full HTTP surface backed by the Phase 2 domain
195
+ * functions. Wire up:
196
+ *
197
+ * - A `MethodCache` over the configured factories. The factory map's
198
+ * keys MUST equal each factory's `kind`; we throw on construction if
199
+ * any disagree.
200
+ * - A `HttpDeps` record passed into the Hono router.
201
+ * - The returned `IdP.handle` is `app.fetch.bind(app)`; the per-endpoint
202
+ * primitives (`authorize`, `token`, etc.) re-enter the same app.
203
+ */
204
+ export function createIdP(opts: IdPOptions): IdP {
205
+ // Validate factory-key invariant before any request can hit a bad map.
206
+ const mismatched = Object.entries(opts.methods)
207
+ .filter(([key, factory]) => key !== factory.kind)
208
+ .map(([key, factory]) => `${key}!=${factory.kind}`)
209
+ if (mismatched.length > 0) {
210
+ throw new Error(
211
+ `createIdP: methods map keys must equal factory.kind. Offenders: ${mismatched.join(", ")}`,
212
+ )
213
+ }
214
+
215
+ const clock = () => Date.now()
216
+ const auditLog = opts.auditLog
217
+ const methodCache = new MethodCache({
218
+ factories: opts.methods,
219
+ ...(auditLog ? { auditLog } : {}),
220
+ now: clock,
221
+ })
222
+
223
+ // Tenant-config rotation must bust the cached `AuthMethod` instances,
224
+ // otherwise upstream client-secret changes (Google / Okta / etc.) are
225
+ // ignored because `buildOauth2Method` / `buildOidcMethod` capture the
226
+ // old secret in a closure. `ConfigStore.onInvalidate` is the canonical
227
+ // signal — adapters fire it from `putTenantConfig` and from any
228
+ // host-driven cross-process invalidation hook.
229
+ opts.configStore.onInvalidate?.((tenantId) => {
230
+ methodCache.invalidate(tenantId)
231
+ })
232
+
233
+ const resolveIssuer = (req: Request): string =>
234
+ typeof opts.issuerUrl === "string" ? opts.issuerUrl : opts.issuerUrl(req)
235
+
236
+ const deps: HttpDeps = {
237
+ configStore: opts.configStore,
238
+ tokenStore: opts.tokenStore,
239
+ sessionStore: opts.sessionStore,
240
+ keyStore: opts.keyStore,
241
+ ...(opts.methodStore ? { methodStore: opts.methodStore } : {}),
242
+ ...(auditLog ? { auditLog } : {}),
243
+ methodCache,
244
+ stateKeys: opts.stateKeys,
245
+ resolveIssuer,
246
+ ...(opts.callbackHostFor ? { callbackHostFor: opts.callbackHostFor } : {}),
247
+ resolveTenant: opts.resolveTenant,
248
+ success: opts.success,
249
+ ...(opts.persistUpstreamTokens
250
+ ? { persistUpstreamTokens: opts.persistUpstreamTokens }
251
+ : {}),
252
+ ...(opts.exchangeAudience
253
+ ? { exchangeAudience: opts.exchangeAudience }
254
+ : {}),
255
+ ...(opts.renderPicker ? { renderPicker: opts.renderPicker } : {}),
256
+ ...(opts.registerClient ? { registerClient: opts.registerClient } : {}),
257
+ ...(opts.buildCustomContext
258
+ ? { buildCustomContext: opts.buildCustomContext }
259
+ : {}),
260
+ clock,
261
+ cookieDefaults: {
262
+ secure: opts.cookies?.secure ?? true,
263
+ ...(opts.cookies?.domain !== undefined
264
+ ? { domain: opts.cookies.domain }
265
+ : {}),
266
+ ...(opts.cookies?.path !== undefined ? { path: opts.cookies.path } : {}),
267
+ },
268
+ ...(opts.customScopeClaims !== undefined
269
+ ? { customScopeClaims: opts.customScopeClaims }
270
+ : {}),
271
+ }
272
+
273
+ const app = buildRouter(deps)
274
+ const fetch = async (req: Request): Promise<Response> => await app.fetch(req)
275
+
276
+ return {
277
+ handle: fetch,
278
+ authorize: fetch,
279
+ token: fetch,
280
+ userinfo: fetch,
281
+ jwks: fetch,
282
+ discovery: fetch,
283
+ revoke: fetch,
284
+ introspect: fetch,
285
+ endSession: fetch,
286
+ par: fetch,
287
+ register: fetch,
288
+ }
26
289
  }