@_mustachio/openauth 0.9.2 → 0.10.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 (712) 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 +82 -0
  41. package/dist/esm/adapters/memory/token-store.js +91 -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 +26 -10
  53. package/dist/esm/domain/audit.js +13 -0
  54. package/dist/esm/domain/authorize.js +212 -0
  55. package/dist/esm/domain/callback.js +173 -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 +41 -0
  60. package/dist/esm/domain/introspect.js +51 -0
  61. package/dist/esm/domain/jwt.js +43 -0
  62. package/dist/esm/domain/method-cache.js +136 -0
  63. package/dist/esm/domain/method-dispatch.js +36 -0
  64. package/dist/esm/domain/method-route.js +108 -0
  65. package/dist/esm/domain/pkce.js +16 -0
  66. package/dist/esm/domain/refresh.js +91 -0
  67. package/dist/esm/domain/revoke.js +81 -0
  68. package/dist/esm/domain/state-envelope.js +80 -0
  69. package/dist/esm/domain/token-exchange.js +101 -0
  70. package/dist/esm/domain/token.js +205 -0
  71. package/dist/esm/domain/userinfo.js +27 -0
  72. package/dist/esm/http/context.js +7 -0
  73. package/dist/esm/http/cookies.js +98 -0
  74. package/dist/esm/http/errors.js +71 -0
  75. package/dist/esm/http/handlers/authorize.js +163 -0
  76. package/dist/esm/http/handlers/callback.js +53 -0
  77. package/dist/esm/http/handlers/metadata.js +34 -0
  78. package/dist/esm/http/handlers/method-route.js +87 -0
  79. package/dist/esm/http/handlers/revocation.js +98 -0
  80. package/dist/esm/http/handlers/token.js +167 -0
  81. package/dist/esm/http/handlers/userinfo.js +54 -0
  82. package/dist/esm/http/middleware/error.js +15 -0
  83. package/dist/esm/http/middleware/tenant.js +102 -0
  84. package/dist/esm/http/resolver.js +15 -0
  85. package/dist/esm/http/router.js +35 -0
  86. package/dist/esm/http/schemas/authorize.js +24 -0
  87. package/dist/esm/http/schemas/revocation.js +18 -0
  88. package/dist/esm/http/schemas/token.js +57 -0
  89. package/dist/esm/index.js +121 -9
  90. package/dist/esm/methods/code.js +221 -0
  91. package/dist/esm/methods/m2m.js +41 -0
  92. package/dist/esm/methods/oauth2-factory.js +84 -0
  93. package/dist/esm/methods/oauth2-generic.js +196 -0
  94. package/dist/esm/methods/oidc-generic.js +53 -0
  95. package/dist/esm/methods/passkey.js +275 -0
  96. package/dist/esm/methods/password-hash.js +79 -0
  97. package/dist/esm/methods/password.js +166 -0
  98. package/dist/esm/methods/providers/apple.js +29 -0
  99. package/dist/esm/methods/providers/cognito.js +37 -0
  100. package/dist/esm/methods/providers/discord.js +28 -0
  101. package/dist/esm/methods/providers/facebook.js +42 -0
  102. package/dist/esm/methods/providers/github.js +29 -0
  103. package/dist/esm/methods/providers/google.js +29 -0
  104. package/dist/esm/methods/providers/index.js +17 -0
  105. package/dist/esm/methods/providers/jumpcloud.js +27 -0
  106. package/dist/esm/methods/providers/keycloak.js +32 -0
  107. package/dist/esm/methods/providers/linkedin.js +28 -0
  108. package/dist/esm/methods/providers/microsoft.js +28 -0
  109. package/dist/esm/methods/providers/slack.js +30 -0
  110. package/dist/esm/methods/providers/spotify.js +28 -0
  111. package/dist/esm/methods/providers/twitch.js +28 -0
  112. package/dist/esm/methods/providers/x.js +28 -0
  113. package/dist/esm/methods/providers/yahoo.js +27 -0
  114. package/dist/esm/pkce.js +4 -16
  115. package/dist/esm/ports/audit-log.js +0 -0
  116. package/dist/esm/ports/config-store.js +0 -0
  117. package/dist/esm/ports/key-store.js +0 -0
  118. package/dist/esm/ports/method-store.js +0 -0
  119. package/dist/esm/ports/session-store.js +0 -0
  120. package/dist/esm/ports/token-store.js +0 -0
  121. package/dist/esm/types/authorization.js +0 -0
  122. package/dist/esm/types/error.js +65 -0
  123. package/dist/esm/types/flow.js +0 -0
  124. package/dist/esm/types/idp.js +0 -0
  125. package/dist/esm/types/method.js +0 -0
  126. package/dist/esm/types/picker.js +0 -0
  127. package/dist/esm/types/result.js +11 -0
  128. package/dist/esm/types/subject.js +0 -0
  129. package/dist/esm/types/tenant.js +5 -0
  130. package/dist/esm/types/token.js +0 -0
  131. package/dist/esm/ui/forms.js +253 -0
  132. package/dist/esm/ui/index.js +8 -0
  133. package/dist/esm/ui/picker.js +49 -0
  134. package/dist/types/adapters/d1/audit-log.d.ts +19 -0
  135. package/dist/types/adapters/d1/audit-log.d.ts.map +1 -0
  136. package/dist/types/adapters/d1/config-store.d.ts +20 -0
  137. package/dist/types/adapters/d1/config-store.d.ts.map +1 -0
  138. package/dist/types/adapters/d1/index.d.ts +35 -0
  139. package/dist/types/adapters/d1/index.d.ts.map +1 -0
  140. package/dist/types/adapters/d1/key-store.d.ts +17 -0
  141. package/dist/types/adapters/d1/key-store.d.ts.map +1 -0
  142. package/dist/types/adapters/d1/method-store.d.ts +21 -0
  143. package/dist/types/adapters/d1/method-store.d.ts.map +1 -0
  144. package/dist/types/adapters/d1/migrations.d.ts +18 -0
  145. package/dist/types/adapters/d1/migrations.d.ts.map +1 -0
  146. package/dist/types/adapters/d1/session-store.d.ts +20 -0
  147. package/dist/types/adapters/d1/session-store.d.ts.map +1 -0
  148. package/dist/types/adapters/d1/session.d.ts +18 -0
  149. package/dist/types/adapters/d1/session.d.ts.map +1 -0
  150. package/dist/types/adapters/d1/token-store.d.ts +29 -0
  151. package/dist/types/adapters/d1/token-store.d.ts.map +1 -0
  152. package/dist/types/adapters/d1/types.d.ts +43 -0
  153. package/dist/types/adapters/d1/types.d.ts.map +1 -0
  154. package/dist/types/adapters/durable-object/index.d.ts +17 -0
  155. package/dist/types/adapters/durable-object/index.d.ts.map +1 -0
  156. package/dist/types/adapters/durable-object/session-store.d.ts +21 -0
  157. package/dist/types/adapters/durable-object/session-store.d.ts.map +1 -0
  158. package/dist/types/adapters/durable-object/types.d.ts +23 -0
  159. package/dist/types/adapters/durable-object/types.d.ts.map +1 -0
  160. package/dist/types/adapters/dynamo/audit-log.d.ts +19 -0
  161. package/dist/types/adapters/dynamo/audit-log.d.ts.map +1 -0
  162. package/dist/types/adapters/dynamo/client.d.ts +111 -0
  163. package/dist/types/adapters/dynamo/client.d.ts.map +1 -0
  164. package/dist/types/adapters/dynamo/config-store.d.ts +21 -0
  165. package/dist/types/adapters/dynamo/config-store.d.ts.map +1 -0
  166. package/dist/types/adapters/dynamo/index.d.ts +60 -0
  167. package/dist/types/adapters/dynamo/index.d.ts.map +1 -0
  168. package/dist/types/adapters/dynamo/key-store.d.ts +23 -0
  169. package/dist/types/adapters/dynamo/key-store.d.ts.map +1 -0
  170. package/dist/types/adapters/dynamo/method-store.d.ts +20 -0
  171. package/dist/types/adapters/dynamo/method-store.d.ts.map +1 -0
  172. package/dist/types/adapters/dynamo/passkey-credential-store.d.ts +47 -0
  173. package/dist/types/adapters/dynamo/passkey-credential-store.d.ts.map +1 -0
  174. package/dist/types/adapters/dynamo/sdk.d.ts +23 -0
  175. package/dist/types/adapters/dynamo/sdk.d.ts.map +1 -0
  176. package/dist/types/adapters/dynamo/session-store.d.ts +20 -0
  177. package/dist/types/adapters/dynamo/session-store.d.ts.map +1 -0
  178. package/dist/types/adapters/dynamo/token-store.d.ts +29 -0
  179. package/dist/types/adapters/dynamo/token-store.d.ts.map +1 -0
  180. package/dist/types/adapters/kms/in-memory-backing.d.ts +9 -0
  181. package/dist/types/adapters/kms/in-memory-backing.d.ts.map +1 -0
  182. package/dist/types/adapters/kms/index.d.ts +35 -0
  183. package/dist/types/adapters/kms/index.d.ts.map +1 -0
  184. package/dist/types/adapters/kms/key-store.d.ts +20 -0
  185. package/dist/types/adapters/kms/key-store.d.ts.map +1 -0
  186. package/dist/types/adapters/kms/sdk.d.ts +16 -0
  187. package/dist/types/adapters/kms/sdk.d.ts.map +1 -0
  188. package/dist/types/adapters/kms/types.d.ts +58 -0
  189. package/dist/types/adapters/kms/types.d.ts.map +1 -0
  190. package/dist/types/adapters/kv/audit-log.d.ts +22 -0
  191. package/dist/types/adapters/kv/audit-log.d.ts.map +1 -0
  192. package/dist/types/adapters/kv/config-store.d.ts +25 -0
  193. package/dist/types/adapters/kv/config-store.d.ts.map +1 -0
  194. package/dist/types/adapters/kv/index.d.ts +21 -0
  195. package/dist/types/adapters/kv/index.d.ts.map +1 -0
  196. package/dist/types/adapters/kv/method-store.d.ts +23 -0
  197. package/dist/types/adapters/kv/method-store.d.ts.map +1 -0
  198. package/dist/types/adapters/kv/types.d.ts +28 -0
  199. package/dist/types/adapters/kv/types.d.ts.map +1 -0
  200. package/dist/types/adapters/memory/audit-log.d.ts +18 -0
  201. package/dist/types/adapters/memory/audit-log.d.ts.map +1 -0
  202. package/dist/types/adapters/memory/clock.d.ts +7 -0
  203. package/dist/types/adapters/memory/clock.d.ts.map +1 -0
  204. package/dist/types/adapters/memory/config-store.d.ts +19 -0
  205. package/dist/types/adapters/memory/config-store.d.ts.map +1 -0
  206. package/dist/types/adapters/memory/index.d.ts +15 -0
  207. package/dist/types/adapters/memory/index.d.ts.map +1 -0
  208. package/dist/types/adapters/memory/key-store.d.ts +17 -0
  209. package/dist/types/adapters/memory/key-store.d.ts.map +1 -0
  210. package/dist/types/adapters/memory/method-store.d.ts +26 -0
  211. package/dist/types/adapters/memory/method-store.d.ts.map +1 -0
  212. package/dist/types/adapters/memory/passkey-credential-store.d.ts +43 -0
  213. package/dist/types/adapters/memory/passkey-credential-store.d.ts.map +1 -0
  214. package/dist/types/adapters/memory/session-store.d.ts +19 -0
  215. package/dist/types/adapters/memory/session-store.d.ts.map +1 -0
  216. package/dist/types/adapters/memory/token-store.d.ts +28 -0
  217. package/dist/types/adapters/memory/token-store.d.ts.map +1 -0
  218. package/dist/types/adapters/postgres/audit-log.d.ts +18 -0
  219. package/dist/types/adapters/postgres/audit-log.d.ts.map +1 -0
  220. package/dist/types/adapters/postgres/config-store.d.ts +21 -0
  221. package/dist/types/adapters/postgres/config-store.d.ts.map +1 -0
  222. package/dist/types/adapters/postgres/executor.d.ts +48 -0
  223. package/dist/types/adapters/postgres/executor.d.ts.map +1 -0
  224. package/dist/types/adapters/postgres/index.d.ts +39 -0
  225. package/dist/types/adapters/postgres/index.d.ts.map +1 -0
  226. package/dist/types/adapters/postgres/key-store.d.ts +23 -0
  227. package/dist/types/adapters/postgres/key-store.d.ts.map +1 -0
  228. package/dist/types/adapters/postgres/method-store.d.ts +21 -0
  229. package/dist/types/adapters/postgres/method-store.d.ts.map +1 -0
  230. package/dist/types/adapters/postgres/migrations.d.ts +22 -0
  231. package/dist/types/adapters/postgres/migrations.d.ts.map +1 -0
  232. package/dist/types/adapters/postgres/passkey-credential-store.d.ts +48 -0
  233. package/dist/types/adapters/postgres/passkey-credential-store.d.ts.map +1 -0
  234. package/dist/types/adapters/postgres/session-store.d.ts +20 -0
  235. package/dist/types/adapters/postgres/session-store.d.ts.map +1 -0
  236. package/dist/types/adapters/postgres/token-store.d.ts +30 -0
  237. package/dist/types/adapters/postgres/token-store.d.ts.map +1 -0
  238. package/dist/types/client.d.ts +1 -1
  239. package/dist/types/client.d.ts.map +1 -1
  240. package/dist/types/domain/audit.d.ts +17 -0
  241. package/dist/types/domain/audit.d.ts.map +1 -0
  242. package/dist/types/domain/authorize.d.ts +125 -0
  243. package/dist/types/domain/authorize.d.ts.map +1 -0
  244. package/dist/types/domain/callback.d.ts +70 -0
  245. package/dist/types/domain/callback.d.ts.map +1 -0
  246. package/dist/types/domain/client-auth.d.ts +57 -0
  247. package/dist/types/domain/client-auth.d.ts.map +1 -0
  248. package/dist/types/domain/client-credentials.d.ts +52 -0
  249. package/dist/types/domain/client-credentials.d.ts.map +1 -0
  250. package/dist/types/domain/crypto.d.ts +53 -0
  251. package/dist/types/domain/crypto.d.ts.map +1 -0
  252. package/dist/types/domain/discovery.d.ts +44 -0
  253. package/dist/types/domain/discovery.d.ts.map +1 -0
  254. package/dist/types/domain/introspect.d.ts +71 -0
  255. package/dist/types/domain/introspect.d.ts.map +1 -0
  256. package/dist/types/domain/jwt.d.ts +48 -0
  257. package/dist/types/domain/jwt.d.ts.map +1 -0
  258. package/dist/types/domain/method-cache.d.ts +42 -0
  259. package/dist/types/domain/method-cache.d.ts.map +1 -0
  260. package/dist/types/domain/method-dispatch.d.ts +37 -0
  261. package/dist/types/domain/method-dispatch.d.ts.map +1 -0
  262. package/dist/types/domain/method-route.d.ts +77 -0
  263. package/dist/types/domain/method-route.d.ts.map +1 -0
  264. package/dist/types/domain/pkce.d.ts +15 -0
  265. package/dist/types/domain/pkce.d.ts.map +1 -0
  266. package/dist/types/domain/refresh.d.ts +43 -0
  267. package/dist/types/domain/refresh.d.ts.map +1 -0
  268. package/dist/types/domain/revoke.d.ts +61 -0
  269. package/dist/types/domain/revoke.d.ts.map +1 -0
  270. package/dist/types/domain/state-envelope.d.ts +30 -0
  271. package/dist/types/domain/state-envelope.d.ts.map +1 -0
  272. package/dist/types/domain/token-exchange.d.ts +67 -0
  273. package/dist/types/domain/token-exchange.d.ts.map +1 -0
  274. package/dist/types/domain/token.d.ts +100 -0
  275. package/dist/types/domain/token.d.ts.map +1 -0
  276. package/dist/types/domain/userinfo.d.ts +22 -0
  277. package/dist/types/domain/userinfo.d.ts.map +1 -0
  278. package/dist/types/http/context.d.ts +63 -0
  279. package/dist/types/http/context.d.ts.map +1 -0
  280. package/dist/types/http/cookies.d.ts +45 -0
  281. package/dist/types/http/cookies.d.ts.map +1 -0
  282. package/dist/types/http/errors.d.ts +36 -0
  283. package/dist/types/http/errors.d.ts.map +1 -0
  284. package/dist/types/http/handlers/authorize.d.ts +3 -0
  285. package/dist/types/http/handlers/authorize.d.ts.map +1 -0
  286. package/dist/types/http/handlers/callback.d.ts +3 -0
  287. package/dist/types/http/handlers/callback.d.ts.map +1 -0
  288. package/dist/types/http/handlers/metadata.d.ts +4 -0
  289. package/dist/types/http/handlers/metadata.d.ts.map +1 -0
  290. package/dist/types/http/handlers/method-route.d.ts +3 -0
  291. package/dist/types/http/handlers/method-route.d.ts.map +1 -0
  292. package/dist/types/http/handlers/revocation.d.ts +4 -0
  293. package/dist/types/http/handlers/revocation.d.ts.map +1 -0
  294. package/dist/types/http/handlers/token.d.ts +3 -0
  295. package/dist/types/http/handlers/token.d.ts.map +1 -0
  296. package/dist/types/http/handlers/userinfo.d.ts +3 -0
  297. package/dist/types/http/handlers/userinfo.d.ts.map +1 -0
  298. package/dist/types/http/middleware/error.d.ts +9 -0
  299. package/dist/types/http/middleware/error.d.ts.map +1 -0
  300. package/dist/types/http/middleware/tenant.d.ts +30 -0
  301. package/dist/types/http/middleware/tenant.d.ts.map +1 -0
  302. package/dist/types/http/resolver.d.ts +22 -0
  303. package/dist/types/http/resolver.d.ts.map +1 -0
  304. package/dist/types/http/router.d.ts +21 -0
  305. package/dist/types/http/router.d.ts.map +1 -0
  306. package/dist/types/http/schemas/authorize.d.ts +52 -0
  307. package/dist/types/http/schemas/authorize.d.ts.map +1 -0
  308. package/dist/types/http/schemas/revocation.d.ts +41 -0
  309. package/dist/types/http/schemas/revocation.d.ts.map +1 -0
  310. package/dist/types/http/schemas/token.d.ts +227 -0
  311. package/dist/types/http/schemas/token.d.ts.map +1 -0
  312. package/dist/types/index.d.ts +63 -13
  313. package/dist/types/index.d.ts.map +1 -1
  314. package/dist/types/methods/code.d.ts +96 -0
  315. package/dist/types/methods/code.d.ts.map +1 -0
  316. package/dist/types/methods/m2m.d.ts +41 -0
  317. package/dist/types/methods/m2m.d.ts.map +1 -0
  318. package/dist/types/methods/oauth2-factory.d.ts +133 -0
  319. package/dist/types/methods/oauth2-factory.d.ts.map +1 -0
  320. package/dist/types/methods/oauth2-generic.d.ts +75 -0
  321. package/dist/types/methods/oauth2-generic.d.ts.map +1 -0
  322. package/dist/types/methods/oidc-generic.d.ts +26 -0
  323. package/dist/types/methods/oidc-generic.d.ts.map +1 -0
  324. package/dist/types/methods/passkey.d.ts +106 -0
  325. package/dist/types/methods/passkey.d.ts.map +1 -0
  326. package/dist/types/methods/password-hash.d.ts +25 -0
  327. package/dist/types/methods/password-hash.d.ts.map +1 -0
  328. package/dist/types/methods/password.d.ts +70 -0
  329. package/dist/types/methods/password.d.ts.map +1 -0
  330. package/dist/types/methods/providers/apple.d.ts +29 -0
  331. package/dist/types/methods/providers/apple.d.ts.map +1 -0
  332. package/dist/types/methods/providers/cognito.d.ts +36 -0
  333. package/dist/types/methods/providers/cognito.d.ts.map +1 -0
  334. package/dist/types/methods/providers/discord.d.ts +22 -0
  335. package/dist/types/methods/providers/discord.d.ts.map +1 -0
  336. package/dist/types/methods/providers/facebook.d.ts +29 -0
  337. package/dist/types/methods/providers/facebook.d.ts.map +1 -0
  338. package/dist/types/methods/providers/github.d.ts +25 -0
  339. package/dist/types/methods/providers/github.d.ts.map +1 -0
  340. package/dist/types/methods/providers/google.d.ts +28 -0
  341. package/dist/types/methods/providers/google.d.ts.map +1 -0
  342. package/dist/types/methods/providers/index.d.ts +24 -0
  343. package/dist/types/methods/providers/index.d.ts.map +1 -0
  344. package/dist/types/methods/providers/jumpcloud.d.ts +22 -0
  345. package/dist/types/methods/providers/jumpcloud.d.ts.map +1 -0
  346. package/dist/types/methods/providers/keycloak.d.ts +30 -0
  347. package/dist/types/methods/providers/keycloak.d.ts.map +1 -0
  348. package/dist/types/methods/providers/linkedin.d.ts +22 -0
  349. package/dist/types/methods/providers/linkedin.d.ts.map +1 -0
  350. package/dist/types/methods/providers/microsoft.d.ts +30 -0
  351. package/dist/types/methods/providers/microsoft.d.ts.map +1 -0
  352. package/dist/types/methods/providers/slack.d.ts +25 -0
  353. package/dist/types/methods/providers/slack.d.ts.map +1 -0
  354. package/dist/types/methods/providers/spotify.d.ts +22 -0
  355. package/dist/types/methods/providers/spotify.d.ts.map +1 -0
  356. package/dist/types/methods/providers/twitch.d.ts +23 -0
  357. package/dist/types/methods/providers/twitch.d.ts.map +1 -0
  358. package/dist/types/methods/providers/x.d.ts +25 -0
  359. package/dist/types/methods/providers/x.d.ts.map +1 -0
  360. package/dist/types/methods/providers/yahoo.d.ts +22 -0
  361. package/dist/types/methods/providers/yahoo.d.ts.map +1 -0
  362. package/dist/types/pkce.d.ts +1 -2
  363. package/dist/types/pkce.d.ts.map +1 -1
  364. package/dist/types/ports/audit-log.d.ts +139 -0
  365. package/dist/types/ports/audit-log.d.ts.map +1 -0
  366. package/dist/types/ports/config-store.d.ts +32 -0
  367. package/dist/types/ports/config-store.d.ts.map +1 -0
  368. package/dist/types/ports/key-store.d.ts +98 -0
  369. package/dist/types/ports/key-store.d.ts.map +1 -0
  370. package/dist/types/ports/method-store.d.ts +29 -0
  371. package/dist/types/ports/method-store.d.ts.map +1 -0
  372. package/dist/types/ports/session-store.d.ts +82 -0
  373. package/dist/types/ports/session-store.d.ts.map +1 -0
  374. package/dist/types/ports/token-store.d.ts +93 -0
  375. package/dist/types/ports/token-store.d.ts.map +1 -0
  376. package/dist/types/types/authorization.d.ts +52 -0
  377. package/dist/types/types/authorization.d.ts.map +1 -0
  378. package/dist/types/types/error.d.ts +92 -0
  379. package/dist/types/types/error.d.ts.map +1 -0
  380. package/dist/types/types/flow.d.ts +87 -0
  381. package/dist/types/types/flow.d.ts.map +1 -0
  382. package/dist/types/types/idp.d.ts +234 -0
  383. package/dist/types/types/idp.d.ts.map +1 -0
  384. package/dist/types/types/method.d.ts +256 -0
  385. package/dist/types/types/method.d.ts.map +1 -0
  386. package/dist/types/types/picker.d.ts +31 -0
  387. package/dist/types/types/picker.d.ts.map +1 -0
  388. package/dist/types/types/result.d.ts +29 -0
  389. package/dist/types/types/result.d.ts.map +1 -0
  390. package/dist/types/types/subject.d.ts +47 -0
  391. package/dist/types/types/subject.d.ts.map +1 -0
  392. package/dist/types/types/tenant.d.ts +239 -0
  393. package/dist/types/types/tenant.d.ts.map +1 -0
  394. package/dist/types/types/token.d.ts +103 -0
  395. package/dist/types/types/token.d.ts.map +1 -0
  396. package/dist/types/ui/forms.d.ts +35 -0
  397. package/dist/types/ui/forms.d.ts.map +1 -0
  398. package/dist/types/ui/index.d.ts +14 -0
  399. package/dist/types/ui/index.d.ts.map +1 -0
  400. package/dist/types/ui/picker.d.ts +18 -0
  401. package/dist/types/ui/picker.d.ts.map +1 -0
  402. package/package.json +41 -6
  403. package/src/adapters/d1/audit-log.ts +32 -0
  404. package/src/adapters/d1/config-store.ts +67 -0
  405. package/src/adapters/d1/index.ts +41 -0
  406. package/src/adapters/d1/key-store.ts +218 -0
  407. package/src/adapters/d1/method-store.ts +103 -0
  408. package/src/adapters/d1/migrations.ts +89 -0
  409. package/src/adapters/d1/session-store.ts +230 -0
  410. package/src/adapters/d1/session.ts +38 -0
  411. package/src/adapters/d1/token-store.ts +251 -0
  412. package/src/adapters/d1/types.ts +53 -0
  413. package/src/adapters/durable-object/index.ts +23 -0
  414. package/src/adapters/durable-object/session-store.ts +227 -0
  415. package/src/adapters/durable-object/types.ts +25 -0
  416. package/src/adapters/dynamo/audit-log.ts +35 -0
  417. package/src/adapters/dynamo/client.ts +118 -0
  418. package/src/adapters/dynamo/config-store.ts +72 -0
  419. package/src/adapters/dynamo/index.ts +81 -0
  420. package/src/adapters/dynamo/key-store.ts +267 -0
  421. package/src/adapters/dynamo/method-store.ts +105 -0
  422. package/src/adapters/dynamo/passkey-credential-store.ts +132 -0
  423. package/src/adapters/dynamo/sdk.ts +189 -0
  424. package/src/adapters/dynamo/session-store.ts +229 -0
  425. package/src/adapters/dynamo/token-store.ts +248 -0
  426. package/src/adapters/kms/in-memory-backing.ts +36 -0
  427. package/src/adapters/kms/index.ts +39 -0
  428. package/src/adapters/kms/key-store.ts +176 -0
  429. package/src/adapters/kms/sdk.ts +39 -0
  430. package/src/adapters/kms/types.ts +61 -0
  431. package/src/adapters/kv/audit-log.ts +40 -0
  432. package/src/adapters/kv/config-store.ts +63 -0
  433. package/src/adapters/kv/index.ts +20 -0
  434. package/src/adapters/kv/method-store.ts +98 -0
  435. package/src/adapters/kv/types.ts +26 -0
  436. package/src/adapters/memory/audit-log.ts +28 -0
  437. package/src/adapters/memory/clock.ts +7 -0
  438. package/src/adapters/memory/config-store.ts +41 -0
  439. package/src/adapters/memory/index.ts +26 -0
  440. package/src/adapters/memory/key-store.ts +102 -0
  441. package/src/adapters/memory/method-store.ts +75 -0
  442. package/src/adapters/memory/passkey-credential-store.ts +97 -0
  443. package/src/adapters/memory/session-store.ts +128 -0
  444. package/src/adapters/memory/token-store.ts +165 -0
  445. package/src/adapters/postgres/audit-log.ts +34 -0
  446. package/src/adapters/postgres/config-store.ts +72 -0
  447. package/src/adapters/postgres/executor.ts +76 -0
  448. package/src/adapters/postgres/index.ts +60 -0
  449. package/src/adapters/postgres/key-store.ts +334 -0
  450. package/src/adapters/postgres/method-store.ts +104 -0
  451. package/src/adapters/postgres/migrations.ts +131 -0
  452. package/src/adapters/postgres/passkey-credential-store.ts +150 -0
  453. package/src/adapters/postgres/session-store.ts +216 -0
  454. package/src/adapters/postgres/token-store.ts +263 -0
  455. package/src/client.ts +50 -16
  456. package/src/domain/audit.ts +28 -0
  457. package/src/domain/authorize.ts +405 -0
  458. package/src/domain/callback.ts +263 -0
  459. package/src/domain/client-auth.ts +116 -0
  460. package/src/domain/client-credentials.ts +178 -0
  461. package/src/domain/crypto.ts +168 -0
  462. package/src/domain/discovery.ts +83 -0
  463. package/src/domain/introspect.ts +145 -0
  464. package/src/domain/jwt.ts +106 -0
  465. package/src/domain/method-cache.ts +220 -0
  466. package/src/domain/method-dispatch.ts +95 -0
  467. package/src/domain/method-route.ts +208 -0
  468. package/src/domain/pkce.ts +37 -0
  469. package/src/domain/refresh.ts +169 -0
  470. package/src/domain/revoke.ts +161 -0
  471. package/src/domain/state-envelope.ts +142 -0
  472. package/src/domain/token-exchange.ts +232 -0
  473. package/src/domain/token.ts +357 -0
  474. package/src/domain/userinfo.ts +56 -0
  475. package/src/http/context.ts +86 -0
  476. package/src/http/cookies.ts +167 -0
  477. package/src/http/errors.ts +98 -0
  478. package/src/http/handlers/authorize.ts +221 -0
  479. package/src/http/handlers/callback.ts +77 -0
  480. package/src/http/handlers/metadata.ts +44 -0
  481. package/src/http/handlers/method-route.ts +115 -0
  482. package/src/http/handlers/revocation.ts +151 -0
  483. package/src/http/handlers/token.ts +244 -0
  484. package/src/http/handlers/userinfo.ts +66 -0
  485. package/src/http/middleware/error.ts +26 -0
  486. package/src/http/middleware/tenant.ts +165 -0
  487. package/src/http/resolver.ts +34 -0
  488. package/src/http/router.ts +66 -0
  489. package/src/http/schemas/authorize.ts +58 -0
  490. package/src/http/schemas/revocation.ts +23 -0
  491. package/src/http/schemas/token.ts +85 -0
  492. package/src/index.ts +266 -20
  493. package/src/methods/code.ts +359 -0
  494. package/src/methods/m2m.ts +82 -0
  495. package/src/methods/oauth2-factory.ts +151 -0
  496. package/src/methods/oauth2-generic.ts +360 -0
  497. package/src/methods/oidc-generic.ts +109 -0
  498. package/src/methods/passkey.ts +419 -0
  499. package/src/methods/password-hash.ts +134 -0
  500. package/src/methods/password.ts +298 -0
  501. package/src/methods/providers/apple.ts +42 -0
  502. package/src/methods/providers/cognito.ts +55 -0
  503. package/src/methods/providers/discord.ts +37 -0
  504. package/src/methods/providers/facebook.ts +54 -0
  505. package/src/methods/providers/github.ts +42 -0
  506. package/src/methods/providers/google.ts +43 -0
  507. package/src/methods/providers/index.ts +23 -0
  508. package/src/methods/providers/jumpcloud.ts +36 -0
  509. package/src/methods/providers/keycloak.ts +42 -0
  510. package/src/methods/providers/linkedin.ts +37 -0
  511. package/src/methods/providers/microsoft.ts +42 -0
  512. package/src/methods/providers/slack.ts +42 -0
  513. package/src/methods/providers/spotify.ts +37 -0
  514. package/src/methods/providers/twitch.ts +38 -0
  515. package/src/methods/providers/x.ts +40 -0
  516. package/src/methods/providers/yahoo.ts +36 -0
  517. package/src/pkce.ts +20 -21
  518. package/src/ports/CONSISTENCY.md +88 -0
  519. package/src/ports/audit-log.ts +148 -0
  520. package/src/ports/config-store.ts +34 -0
  521. package/src/ports/key-store.ts +106 -0
  522. package/src/ports/method-store.ts +41 -0
  523. package/src/ports/session-store.ts +98 -0
  524. package/src/ports/token-store.ts +103 -0
  525. package/src/types/authorization.ts +53 -0
  526. package/src/types/error.ts +123 -0
  527. package/src/types/flow.ts +89 -0
  528. package/src/types/idp.ts +269 -0
  529. package/src/types/method.ts +270 -0
  530. package/src/types/picker.ts +32 -0
  531. package/src/types/result.ts +23 -0
  532. package/src/types/subject.ts +50 -0
  533. package/src/types/tenant.ts +248 -0
  534. package/src/types/token.ts +101 -0
  535. package/src/ui/forms.ts +289 -0
  536. package/src/ui/index.ts +14 -0
  537. package/src/ui/picker.ts +63 -0
  538. package/dist/esm/issuer.js +0 -691
  539. package/dist/esm/jwt.js +0 -16
  540. package/dist/esm/keys.js +0 -113
  541. package/dist/esm/provider/apple.js +0 -28
  542. package/dist/esm/provider/arctic.js +0 -43
  543. package/dist/esm/provider/code.js +0 -58
  544. package/dist/esm/provider/cognito.js +0 -16
  545. package/dist/esm/provider/discord.js +0 -15
  546. package/dist/esm/provider/facebook.js +0 -24
  547. package/dist/esm/provider/github.js +0 -15
  548. package/dist/esm/provider/google.js +0 -25
  549. package/dist/esm/provider/index.js +0 -3
  550. package/dist/esm/provider/jumpcloud.js +0 -15
  551. package/dist/esm/provider/keycloak.js +0 -15
  552. package/dist/esm/provider/linkedin.js +0 -15
  553. package/dist/esm/provider/m2m.js +0 -16
  554. package/dist/esm/provider/microsoft.js +0 -24
  555. package/dist/esm/provider/oauth2.js +0 -119
  556. package/dist/esm/provider/oidc.js +0 -69
  557. package/dist/esm/provider/passkey.js +0 -315
  558. package/dist/esm/provider/password.js +0 -306
  559. package/dist/esm/provider/provider.js +0 -10
  560. package/dist/esm/provider/slack.js +0 -15
  561. package/dist/esm/provider/spotify.js +0 -15
  562. package/dist/esm/provider/twitch.js +0 -15
  563. package/dist/esm/provider/x.js +0 -16
  564. package/dist/esm/provider/yahoo.js +0 -15
  565. package/dist/esm/random.js +0 -27
  566. package/dist/esm/storage/aws.js +0 -39
  567. package/dist/esm/storage/cloudflare.js +0 -42
  568. package/dist/esm/storage/dynamo.js +0 -116
  569. package/dist/esm/storage/memory.js +0 -88
  570. package/dist/esm/storage/storage.js +0 -36
  571. package/dist/esm/subject.js +0 -7
  572. package/dist/esm/ui/base.js +0 -407
  573. package/dist/esm/ui/code.js +0 -151
  574. package/dist/esm/ui/form.js +0 -43
  575. package/dist/esm/ui/icon.js +0 -92
  576. package/dist/esm/ui/passkey.js +0 -329
  577. package/dist/esm/ui/password.js +0 -338
  578. package/dist/esm/ui/select.js +0 -187
  579. package/dist/esm/ui/theme.js +0 -115
  580. package/dist/esm/util.js +0 -54
  581. package/dist/types/issuer.d.ts +0 -607
  582. package/dist/types/issuer.d.ts.map +0 -1
  583. package/dist/types/jwt.d.ts +0 -6
  584. package/dist/types/jwt.d.ts.map +0 -1
  585. package/dist/types/keys.d.ts +0 -18
  586. package/dist/types/keys.d.ts.map +0 -1
  587. package/dist/types/provider/apple.d.ts +0 -108
  588. package/dist/types/provider/apple.d.ts.map +0 -1
  589. package/dist/types/provider/arctic.d.ts +0 -16
  590. package/dist/types/provider/arctic.d.ts.map +0 -1
  591. package/dist/types/provider/code.d.ts +0 -74
  592. package/dist/types/provider/code.d.ts.map +0 -1
  593. package/dist/types/provider/cognito.d.ts +0 -64
  594. package/dist/types/provider/cognito.d.ts.map +0 -1
  595. package/dist/types/provider/discord.d.ts +0 -38
  596. package/dist/types/provider/discord.d.ts.map +0 -1
  597. package/dist/types/provider/facebook.d.ts +0 -74
  598. package/dist/types/provider/facebook.d.ts.map +0 -1
  599. package/dist/types/provider/github.d.ts +0 -38
  600. package/dist/types/provider/github.d.ts.map +0 -1
  601. package/dist/types/provider/google.d.ts +0 -74
  602. package/dist/types/provider/google.d.ts.map +0 -1
  603. package/dist/types/provider/index.d.ts +0 -4
  604. package/dist/types/provider/index.d.ts.map +0 -1
  605. package/dist/types/provider/jumpcloud.d.ts +0 -38
  606. package/dist/types/provider/jumpcloud.d.ts.map +0 -1
  607. package/dist/types/provider/keycloak.d.ts +0 -67
  608. package/dist/types/provider/keycloak.d.ts.map +0 -1
  609. package/dist/types/provider/linkedin.d.ts +0 -6
  610. package/dist/types/provider/linkedin.d.ts.map +0 -1
  611. package/dist/types/provider/m2m.d.ts +0 -34
  612. package/dist/types/provider/m2m.d.ts.map +0 -1
  613. package/dist/types/provider/microsoft.d.ts +0 -89
  614. package/dist/types/provider/microsoft.d.ts.map +0 -1
  615. package/dist/types/provider/oauth2.d.ts +0 -133
  616. package/dist/types/provider/oauth2.d.ts.map +0 -1
  617. package/dist/types/provider/oidc.d.ts +0 -91
  618. package/dist/types/provider/oidc.d.ts.map +0 -1
  619. package/dist/types/provider/passkey.d.ts +0 -143
  620. package/dist/types/provider/passkey.d.ts.map +0 -1
  621. package/dist/types/provider/password.d.ts +0 -210
  622. package/dist/types/provider/password.d.ts.map +0 -1
  623. package/dist/types/provider/provider.d.ts +0 -29
  624. package/dist/types/provider/provider.d.ts.map +0 -1
  625. package/dist/types/provider/slack.d.ts +0 -59
  626. package/dist/types/provider/slack.d.ts.map +0 -1
  627. package/dist/types/provider/spotify.d.ts +0 -38
  628. package/dist/types/provider/spotify.d.ts.map +0 -1
  629. package/dist/types/provider/twitch.d.ts +0 -38
  630. package/dist/types/provider/twitch.d.ts.map +0 -1
  631. package/dist/types/provider/x.d.ts +0 -38
  632. package/dist/types/provider/x.d.ts.map +0 -1
  633. package/dist/types/provider/yahoo.d.ts +0 -38
  634. package/dist/types/provider/yahoo.d.ts.map +0 -1
  635. package/dist/types/random.d.ts +0 -3
  636. package/dist/types/random.d.ts.map +0 -1
  637. package/dist/types/storage/aws.d.ts +0 -4
  638. package/dist/types/storage/aws.d.ts.map +0 -1
  639. package/dist/types/storage/cloudflare.d.ts +0 -34
  640. package/dist/types/storage/cloudflare.d.ts.map +0 -1
  641. package/dist/types/storage/dynamo.d.ts +0 -65
  642. package/dist/types/storage/dynamo.d.ts.map +0 -1
  643. package/dist/types/storage/memory.d.ts +0 -49
  644. package/dist/types/storage/memory.d.ts.map +0 -1
  645. package/dist/types/storage/storage.d.ts +0 -15
  646. package/dist/types/storage/storage.d.ts.map +0 -1
  647. package/dist/types/subject.d.ts +0 -122
  648. package/dist/types/subject.d.ts.map +0 -1
  649. package/dist/types/ui/base.d.ts +0 -5
  650. package/dist/types/ui/base.d.ts.map +0 -1
  651. package/dist/types/ui/code.d.ts +0 -104
  652. package/dist/types/ui/code.d.ts.map +0 -1
  653. package/dist/types/ui/form.d.ts +0 -6
  654. package/dist/types/ui/form.d.ts.map +0 -1
  655. package/dist/types/ui/icon.d.ts +0 -6
  656. package/dist/types/ui/icon.d.ts.map +0 -1
  657. package/dist/types/ui/passkey.d.ts +0 -5
  658. package/dist/types/ui/passkey.d.ts.map +0 -1
  659. package/dist/types/ui/password.d.ts +0 -139
  660. package/dist/types/ui/password.d.ts.map +0 -1
  661. package/dist/types/ui/select.d.ts +0 -55
  662. package/dist/types/ui/select.d.ts.map +0 -1
  663. package/dist/types/ui/theme.d.ts +0 -207
  664. package/dist/types/ui/theme.d.ts.map +0 -1
  665. package/dist/types/util.d.ts +0 -8
  666. package/dist/types/util.d.ts.map +0 -1
  667. package/src/css.d.ts +0 -4
  668. package/src/issuer.ts +0 -1628
  669. package/src/jwt.ts +0 -17
  670. package/src/keys.ts +0 -139
  671. package/src/provider/apple.ts +0 -127
  672. package/src/provider/arctic.ts +0 -66
  673. package/src/provider/code.ts +0 -227
  674. package/src/provider/cognito.ts +0 -74
  675. package/src/provider/discord.ts +0 -45
  676. package/src/provider/facebook.ts +0 -84
  677. package/src/provider/github.ts +0 -45
  678. package/src/provider/google.ts +0 -85
  679. package/src/provider/index.ts +0 -3
  680. package/src/provider/jumpcloud.ts +0 -45
  681. package/src/provider/keycloak.ts +0 -75
  682. package/src/provider/linkedin.ts +0 -12
  683. package/src/provider/m2m.ts +0 -56
  684. package/src/provider/microsoft.ts +0 -100
  685. package/src/provider/oauth2.ts +0 -297
  686. package/src/provider/oidc.ts +0 -179
  687. package/src/provider/passkey.ts +0 -655
  688. package/src/provider/password.ts +0 -672
  689. package/src/provider/provider.ts +0 -33
  690. package/src/provider/slack.ts +0 -67
  691. package/src/provider/spotify.ts +0 -45
  692. package/src/provider/twitch.ts +0 -45
  693. package/src/provider/x.ts +0 -46
  694. package/src/provider/yahoo.ts +0 -45
  695. package/src/random.ts +0 -24
  696. package/src/storage/aws.ts +0 -59
  697. package/src/storage/cloudflare.ts +0 -77
  698. package/src/storage/dynamo.ts +0 -193
  699. package/src/storage/memory.ts +0 -135
  700. package/src/storage/storage.ts +0 -46
  701. package/src/subject.ts +0 -130
  702. package/src/ui/base.tsx +0 -118
  703. package/src/ui/code.tsx +0 -215
  704. package/src/ui/form.tsx +0 -40
  705. package/src/ui/icon.tsx +0 -95
  706. package/src/ui/passkey.tsx +0 -321
  707. package/src/ui/password.tsx +0 -405
  708. package/src/ui/select.tsx +0 -221
  709. package/src/ui/theme.ts +0 -319
  710. package/src/ui/ui.css +0 -252
  711. package/src/util.ts +0 -58
  712. /package/dist/esm/{css.d.js → adapters/d1/types.js} +0 -0
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Tenant model + tenant-resolution / callback-recovery types.
3
+ *
4
+ * Per AD1, tenancy is **not** a URL concept. A tenant is whatever the
5
+ * user-supplied `resolveTenant(req)` says it is for an incoming request, plus
6
+ * a deterministic callback-recovery chain (MAC-bound state, partitioned host,
7
+ * or `flowId`-in-URI) for the post-redirect leg where the original tenant
8
+ * signal may no longer be available.
9
+ *
10
+ * The minimal state envelope MACed and round-tripped through upstream
11
+ * providers carries only `{ tenantId, flowId, nonce, kid }`. Everything else
12
+ * lives in the server-side `FlowRecord` (see `./flow.ts`).
13
+ */
14
+
15
+ /**
16
+ * Branded tenant id — **opaque to the framework**.
17
+ *
18
+ * The framework treats `TenantId` as a comparable string and nothing more.
19
+ * It never parses it, never assumes a hierarchy or naming convention, never
20
+ * imposes uniqueness rules, never knows the lifecycle of a tenant. The
21
+ * embedding application decides what a tenant *is* (an organization, a
22
+ * workspace, an App-Tenant tuple, a customer, …) and supplies a
23
+ * `resolveTenant(req)` that maps incoming requests to the right key.
24
+ *
25
+ * Common embedding pattern when the host application has two levels of
26
+ * scoping (e.g. `App` ⇒ `App-Tenant`): encode the tuple into the key.
27
+ *
28
+ * ```ts
29
+ * // Inside the host application's resolveTenant:
30
+ * return ok(`${app.id}:${appTenant?.id ?? "__default__"}` as TenantId)
31
+ *
32
+ * // Inside the host application's ConfigStore.getTenantConfig:
33
+ * const [appId, subId] = (id as string).split(":")
34
+ * // merge App defaults + App-Tenant overrides from your own DB ...
35
+ * ```
36
+ *
37
+ * The brand exists to keep arbitrary `string` values from being passed
38
+ * where a `TenantId` is expected; the *meaning* of the string is the host
39
+ * application's concern.
40
+ */
41
+ export type TenantId = string & { readonly __brand: "TenantId" }
42
+
43
+ /**
44
+ * Cast helper for code that mints `TenantId` from a validated string. The
45
+ * framework imposes no validation on the value — callers ensure their key
46
+ * is non-empty and stable per partition.
47
+ */
48
+ export const asTenantId = (value: string): TenantId => value as TenantId
49
+
50
+ /** OAuth 2.1 grant types in scope for this IdP. Implicit is intentionally absent. */
51
+ export type GrantType =
52
+ | "authorization_code"
53
+ | "refresh_token"
54
+ | "client_credentials"
55
+
56
+ /**
57
+ * `MethodType` is the canonical discriminator for an `AuthMethod`. It mirrors
58
+ * the existing provider taxonomy. The UI uses it to decide which selection /
59
+ * form to render; the framework uses it as a routing / dispatch hint.
60
+ */
61
+ export type MethodType =
62
+ | "oauth2"
63
+ | "oidc"
64
+ | "password"
65
+ | "code"
66
+ | "m2m"
67
+ | "passkey"
68
+ | "custom"
69
+
70
+ /**
71
+ * Per-tenant configuration for a single auth method **instance**.
72
+ *
73
+ * `id` is the **tenant-local instance id** — the value that ends up in URLs
74
+ * (`/<id>/*`) and that the framework dispatches by.
75
+ *
76
+ * `kind` is the **factory id** — the value that selects which
77
+ * `AuthMethodFactory` builds this instance. A tenant may register multiple
78
+ * instances of the same factory (e.g. one Google Workspace SSO and one
79
+ * consumer Google Sign-In) by giving each instance a unique `id` while
80
+ * sharing a `kind`.
81
+ *
82
+ * `type` is the `MethodType` discriminator the UI uses. The framework
83
+ * verifies it agrees with the factory's declared type at load time.
84
+ *
85
+ * `config` is the tenant-supplied configuration blob. The framework validates
86
+ * it against the factory's Zod `configSchema` before any handler runs.
87
+ */
88
+ export type MethodConfig = {
89
+ id: string
90
+ kind: string
91
+ type: MethodType
92
+ enabled: boolean
93
+ config: Record<string, unknown>
94
+ }
95
+
96
+ /** Optional theme metadata. Schema expanded in later phases. */
97
+ export type ThemeConfig = {
98
+ primary?: string
99
+ logo?: string
100
+ favicon?: string
101
+ background?: string
102
+ font?: string
103
+ }
104
+
105
+ /**
106
+ * Registered OAuth client of this IdP (an app, SPA, mobile, M2M).
107
+ *
108
+ * Phase 8: split into a discriminated union so misconfiguration is a type
109
+ * error, not a runtime check. The runtime in `domain/authorize.ts` still
110
+ * enforces PKCE for public clients defensively, but hosts will see the
111
+ * problem at compile time.
112
+ *
113
+ * - **Public clients** (SPAs, mobile apps, native apps): no client secret;
114
+ * `pkceRequired` is the literal `true`. PKCE is non-negotiable per
115
+ * OAuth 2.1 BCP §2.1.1.
116
+ * - **Confidential clients** (server-side apps, M2M): `secretHash` is
117
+ * required (this used to be optional, in practice always set). PKCE
118
+ * recommended but may be disabled by the host.
119
+ */
120
+ export type ClientConfig = PublicClientConfig | ConfidentialClientConfig
121
+
122
+ export type PublicClientConfig = {
123
+ id: string
124
+ name: string
125
+ type: "public"
126
+ redirectUris: string[]
127
+ grantTypes: GrantType[]
128
+ scopes: string[]
129
+ /** Must be `true` for public clients per OAuth 2.1 §2.1.1. */
130
+ pkceRequired: true
131
+ /** Phase 8. */
132
+ dpopRequired?: boolean
133
+ }
134
+
135
+ export type ConfidentialClientConfig = {
136
+ id: string
137
+ name: string
138
+ type: "confidential"
139
+ /** Hash of the client secret. Required for confidential clients. */
140
+ secretHash: string
141
+ redirectUris: string[]
142
+ grantTypes: GrantType[]
143
+ scopes: string[]
144
+ /**
145
+ * Default true. Disabling it is permitted for confidential clients but
146
+ * strongly discouraged; OAuth 2.1 §2.1.1 recommends PKCE for every client.
147
+ */
148
+ pkceRequired: boolean
149
+ /** Phase 8. */
150
+ dpopRequired?: boolean
151
+ }
152
+
153
+ export type TenantConfig = {
154
+ id: TenantId
155
+ displayName: string
156
+ clients: ClientConfig[]
157
+ methods: MethodConfig[]
158
+ theme?: ThemeConfig
159
+ /** Set when the tenant needs cross-subdomain SSO. */
160
+ cookieDomain?: string
161
+ /** Override default refresh-token TTL (seconds). */
162
+ refreshTtl?: number
163
+ /** Override default access-token TTL (seconds). */
164
+ accessTtl?: number
165
+ }
166
+
167
+ /**
168
+ * Per-request tenant context handed to methods and the user-supplied
169
+ * `success` callback. `request.raw` is the Web Fetch `Request` the framework
170
+ * received; `request.custom` is whatever the host returned from the
171
+ * `IdPOptions.buildCustomContext` hook (request id, decoded JWT claims, mTLS
172
+ * cert info, geo hints — anything per-request that methods or `success`
173
+ * should see). Without the hook the blob is `{}`. The same blob is also
174
+ * persisted on the `FlowRecord` at `/authorize` time so it survives the
175
+ * upstream redirect and re-presents on the callback side.
176
+ */
177
+ export type TenantContext = {
178
+ id: TenantId
179
+ config: TenantConfig
180
+ request: {
181
+ raw: Request
182
+ custom: Record<string, unknown>
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Outcome of the framework's tenant-recovery chain, evaluated **before**
188
+ * `resolveTenant` runs on the incoming request. Each non-`fresh-request`
189
+ * variant carries a `flowId`; the framework consumes the matching
190
+ * `FlowRecord` and dispatches without consulting `resolveTenant`.
191
+ *
192
+ * Order of evaluation (see plan §"Tenant Recovery Across Redirects"):
193
+ * 1. If `callbackHostFor` configured AND host matches a known tenant:
194
+ * a. `state` MAC-verifies → host-plus-mac
195
+ * b. `flowId` in URI → host-plus-uri
196
+ * c. otherwise → invalid_request, audit unrecoverable_flow
197
+ * 2. Else if `state` MAC-verifies → mac-state
198
+ * 3. Else if `flowId` in registered URI path/query → flow-id-in-uri
199
+ * 4. Else → fresh-request → call user's `resolveTenant(req)`
200
+ */
201
+ export type TenantRecovery =
202
+ | { kind: "mac-state"; tenantId: TenantId; flowId: string }
203
+ | { kind: "host-plus-uri"; tenantId: TenantId; flowId: string }
204
+ | { kind: "host-plus-mac"; tenantId: TenantId; flowId: string }
205
+ | { kind: "flow-id-in-uri"; tenantId: TenantId; flowId: string }
206
+ | { kind: "fresh-request" }
207
+
208
+ /**
209
+ * Minimal envelope MACed into the `state` query parameter. Intentionally
210
+ * tiny — under 256 base64url bytes — so it stays clear of provider URL
211
+ * limits. **No sensitive data must ever be added here.** Everything else
212
+ * lives in the server-side `FlowRecord`.
213
+ */
214
+ export type StateEnvelope = {
215
+ tenantId: TenantId
216
+ flowId: string
217
+ /** Per-flow nonce. Distinct from the relying party's `state` param. */
218
+ nonce: string
219
+ /** Key id of the HMAC key used to mint this envelope (`StateKeyRing` lookup). */
220
+ kid: string
221
+ }
222
+
223
+ /**
224
+ * HMAC-SHA-256 key entry used to mint / verify the `state` envelope MAC.
225
+ * The 32-byte key is global (shared across IdP instances) — recovery has to
226
+ * work before tenant config is loaded, so per-tenant keys would create a
227
+ * bootstrap problem.
228
+ */
229
+ export type StateKey = {
230
+ kid: string
231
+ /** 32 raw bytes. */
232
+ key: Uint8Array
233
+ }
234
+
235
+ /**
236
+ * State-MAC key ring with overlap-based rotation. `active` mints new state;
237
+ * any key in `verify` accepts existing state during its overlap window.
238
+ *
239
+ * Rotation cadence: monthly. The overlap window must be at least as long as
240
+ * the flow-record TTL (default 10 minutes); a 1-hour overlap is the
241
+ * recommended default. New keys are added to `verify` first, promoted to
242
+ * `active` on the next rotation, then dropped from `verify` after overlap.
243
+ */
244
+ export type StateKeyRing = {
245
+ active: StateKey
246
+ /** Includes `active` plus any previous keys still inside their overlap window. */
247
+ verify: ReadonlyArray<StateKey>
248
+ }
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Token-domain shapes — auth code payload (snapshot of `FlowRecord` at
3
+ * handoff), access-token claims, refresh-token payload, and the small
4
+ * envelopes the `TokenStore` persists.
5
+ *
6
+ * Per AD9, access tokens are JWTs (ES256 by default, Ed25519 optional per
7
+ * AD11) and refresh tokens are opaque server-side records.
8
+ */
9
+ import type { SubjectClaim } from "./subject"
10
+ import type { TenantId } from "./tenant"
11
+
12
+ /**
13
+ * Payload stored under an auth code. Built at callback time from the consumed
14
+ * `FlowRecord` plus the method's `success` result. Encrypted at rest by
15
+ * `TokenStore.saveCode` (see `ports/CONSISTENCY.md`).
16
+ *
17
+ * `methodState` is intentionally **not** snapshotted: it served its
18
+ * upstream-callback purpose and is dropped with the flow record.
19
+ */
20
+ export type CodePayload = {
21
+ tenantId: TenantId
22
+ clientId: string
23
+ appRedirectUri: string
24
+ /** Relying party's `state` param, echoed back at success. */
25
+ appState: string | null
26
+ scopes: string[]
27
+ audience?: string
28
+ /** Relying-party → IdP PKCE; verified at `/token` against the RP's verifier. */
29
+ clientPkce?: { challenge: string; method: "S256" }
30
+ /** Tenant-local method instance id (`MethodConfig.id`). */
31
+ methodId: string
32
+ /** Factory kind (`MethodConfig.kind`). */
33
+ methodKind: string
34
+ /** User's `requestContext` snapshot, if any. */
35
+ context?: Record<string, unknown> | null
36
+ /** Upstream system's stable identifier (from `MethodResult.success`). */
37
+ providerSubject: string
38
+ /** Typed-per-method properties from `MethodResult.success`. */
39
+ properties: unknown
40
+ /** Auth-code TTL is 60 s — framework refuses anything longer. */
41
+ expiresAt: number
42
+ }
43
+
44
+ /** Access-token JWT claims this IdP issues. */
45
+ export type AccessTokenClaims = {
46
+ iss: string
47
+ sub: string
48
+ aud: string
49
+ exp: number
50
+ iat: number
51
+ /** Tenant id. */
52
+ tid: TenantId
53
+ /** Tenant-local method instance id that originated this token. */
54
+ mid?: string
55
+ /** Factory kind that originated this token. */
56
+ mkind?: string
57
+ scope?: string
58
+ /** DPoP confirmation claim (Phase 8). */
59
+ cnf?: { jkt: string }
60
+ /** The structured subject (matches `SubjectClaim`). Inlined for resource servers. */
61
+ claim: SubjectClaim
62
+ }
63
+
64
+ /**
65
+ * Opaque refresh-token payload — persisted in `TokenStore` with strong CAS
66
+ * semantics (see `ports/CONSISTENCY.md`). The token itself is a random
67
+ * string; the payload is what the store returns on consume.
68
+ */
69
+ export type RefreshTokenPayload = {
70
+ tenantId: TenantId
71
+ clientId: string
72
+ /** Stable subject id derived from the issued `SubjectClaim`. */
73
+ subjectId: string
74
+ claim: SubjectClaim
75
+ scopes: string[]
76
+ audience?: string
77
+ /** Reuse-detection chain id. Rotation issues a new token with the same family. */
78
+ family: string
79
+ /**
80
+ * Tenant-local method instance id (`MethodConfig.id`) that originated the
81
+ * chain. Preserved across `refresh_token` rotations so descendant access
82
+ * tokens carry the original `mid` / `mkind` claims instead of the
83
+ * grant-type literal "refresh".
84
+ */
85
+ methodId: string
86
+ /** Factory kind (`MethodConfig.kind`) that originated the chain. */
87
+ methodKind: string
88
+ /** Wall-clock issuance and absolute-expiry timestamps. */
89
+ issuedAt: number
90
+ expiresAt: number
91
+ }
92
+
93
+ /** Response body of `/token` (RFC 6749 §5.1). */
94
+ export type TokenResponse = {
95
+ access_token: string
96
+ token_type: "Bearer" | "DPoP"
97
+ expires_in: number
98
+ refresh_token?: string
99
+ scope?: string
100
+ id_token?: string
101
+ }
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Server-rendered HTML helpers for the bundled credential methods and the
3
+ * default authorization picker.
4
+ *
5
+ * Intentionally minimal — zero JS, no client framework. Hosts that want a
6
+ * richer UI override `IdPOptions.renderPicker` (for method selection) or
7
+ * supply their own `success-response` from method handlers (for credential
8
+ * forms). The helpers escape user-provided strings so callers can drop
9
+ * arbitrary labels or error messages without thinking about XSS.
10
+ */
11
+
12
+ export function escapeHtml(s: string): string {
13
+ return s.replace(/[&<>"']/g, (c) => {
14
+ switch (c) {
15
+ case "&":
16
+ return "&amp;"
17
+ case "<":
18
+ return "&lt;"
19
+ case ">":
20
+ return "&gt;"
21
+ case '"':
22
+ return "&quot;"
23
+ case "'":
24
+ return "&#39;"
25
+ default:
26
+ return c
27
+ }
28
+ })
29
+ }
30
+
31
+ export const BASE_STYLES = `
32
+ :root {
33
+ color-scheme: light dark;
34
+
35
+ --bg-page: #eef0f4;
36
+ --bg-card: #ffffff;
37
+ --bg-input: #ffffff;
38
+ --bg-row: #f5f6f8;
39
+ --bg-row-hover: #eaecf1;
40
+ --fg-high: #0e1116;
41
+ --fg-mid: #4a5160;
42
+ --fg-low: #8b93a3;
43
+ --border: #d8dce3;
44
+ --border-strong: #9aa3b2;
45
+ --primary: #2f3137;
46
+ --primary-fg: #ffffff;
47
+ --primary-hover: #1b1d22;
48
+ --focus-ring: rgba(47, 49, 55, 0.18);
49
+ --error-bg: #fdecec;
50
+ --error-fg: #8a1a1a;
51
+ --radius: 8px;
52
+ --shadow-card: 0 1px 2px rgba(15, 18, 25, 0.04), 0 12px 28px rgba(15, 18, 25, 0.08);
53
+ }
54
+
55
+ @media (prefers-color-scheme: dark) {
56
+ :root {
57
+ --bg-page: #0e0f12;
58
+ --bg-card: #16181d;
59
+ --bg-input: #1c1f25;
60
+ --bg-row: #20242c;
61
+ --bg-row-hover: #2a2f38;
62
+ --fg-high: #f3f4f6;
63
+ --fg-mid: #b6bcc7;
64
+ --fg-low: #7a8190;
65
+ --border: #2a2e36;
66
+ --border-strong: #3a4049;
67
+ --primary: #f3f4f6;
68
+ --primary-fg: #0e1116;
69
+ --primary-hover: #ffffff;
70
+ --focus-ring: rgba(243, 244, 246, 0.22);
71
+ --error-bg: #2a1414;
72
+ --error-fg: #f5b4b4;
73
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.5), 0 18px 40px rgba(0, 0, 0, 0.5);
74
+ }
75
+ }
76
+
77
+ * { box-sizing: border-box; }
78
+
79
+ html, body { margin: 0; padding: 0; }
80
+
81
+ body {
82
+ min-height: 100vh;
83
+ background: var(--bg-page);
84
+ color: var(--fg-high);
85
+ font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", "Inter", "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
86
+ font-size: 15px;
87
+ line-height: 1.45;
88
+ display: grid;
89
+ place-items: center;
90
+ padding: 1.5rem;
91
+ -webkit-font-smoothing: antialiased;
92
+ -moz-osx-font-smoothing: grayscale;
93
+ }
94
+
95
+ main {
96
+ max-width: 380px;
97
+ width: 100%;
98
+ padding: 2rem 1.75rem;
99
+ background: var(--bg-card);
100
+ border-radius: var(--radius);
101
+ box-shadow: var(--shadow-card);
102
+ }
103
+
104
+ h1 {
105
+ font-size: 1.125rem;
106
+ font-weight: 600;
107
+ letter-spacing: -0.01em;
108
+ margin: 0 0 1.25rem;
109
+ color: var(--fg-high);
110
+ }
111
+
112
+ form {
113
+ display: grid;
114
+ gap: 0.85rem;
115
+ margin: 0;
116
+ }
117
+
118
+ label {
119
+ display: grid;
120
+ gap: 0.4rem;
121
+ font-size: 0.78rem;
122
+ font-weight: 500;
123
+ color: var(--fg-mid);
124
+ text-transform: none;
125
+ }
126
+
127
+ input {
128
+ width: 100%;
129
+ height: 2.5rem;
130
+ padding: 0 0.85rem;
131
+ background: var(--bg-input);
132
+ color: var(--fg-high);
133
+ border: 1px solid var(--border);
134
+ border-radius: calc(var(--radius) - 2px);
135
+ font-size: 0.95rem;
136
+ font-family: inherit;
137
+ outline: none;
138
+ transition: border-color 120ms ease, box-shadow 120ms ease;
139
+ }
140
+ input::placeholder { color: var(--fg-low); }
141
+ input:hover { border-color: var(--border-strong); }
142
+ input:focus {
143
+ border-color: var(--primary);
144
+ box-shadow: 0 0 0 3px var(--focus-ring);
145
+ }
146
+ input:user-invalid:not(:focus) {
147
+ border-color: var(--error-fg);
148
+ }
149
+
150
+ button {
151
+ height: 2.5rem;
152
+ padding: 0 1rem;
153
+ border: 0;
154
+ border-radius: calc(var(--radius) - 2px);
155
+ background: var(--primary);
156
+ color: var(--primary-fg);
157
+ font-family: inherit;
158
+ font-size: 0.9rem;
159
+ font-weight: 600;
160
+ letter-spacing: 0.01em;
161
+ cursor: pointer;
162
+ display: inline-flex;
163
+ align-items: center;
164
+ justify-content: center;
165
+ gap: 0.5rem;
166
+ transition: background 120ms ease, transform 80ms ease;
167
+ }
168
+ button:hover { background: var(--primary-hover); }
169
+ button:active { transform: translateY(1px); }
170
+ button:focus-visible { box-shadow: 0 0 0 3px var(--focus-ring); outline: none; }
171
+
172
+ .error {
173
+ display: flex;
174
+ align-items: center;
175
+ min-height: 2.25rem;
176
+ padding: 0.5rem 0.85rem;
177
+ margin: 0 0 0.25rem;
178
+ background: var(--error-bg);
179
+ color: var(--error-fg);
180
+ font-size: 0.82rem;
181
+ border-radius: calc(var(--radius) - 2px);
182
+ }
183
+
184
+ .methods {
185
+ list-style: none;
186
+ padding: 0;
187
+ margin: 0;
188
+ display: grid;
189
+ gap: 0.5rem;
190
+ }
191
+ .methods a {
192
+ display: flex;
193
+ align-items: center;
194
+ justify-content: space-between;
195
+ min-height: 2.75rem;
196
+ padding: 0 1rem;
197
+ background: var(--bg-row);
198
+ border: 1px solid var(--border);
199
+ border-radius: calc(var(--radius) - 2px);
200
+ color: var(--fg-high);
201
+ font-size: 0.92rem;
202
+ font-weight: 500;
203
+ text-decoration: none;
204
+ transition: background 120ms ease, border-color 120ms ease, transform 80ms ease;
205
+ }
206
+ .methods a::after {
207
+ content: "›";
208
+ color: var(--fg-mid);
209
+ font-size: 1.15rem;
210
+ font-weight: 500;
211
+ line-height: 1;
212
+ }
213
+ .methods a:hover {
214
+ background: var(--bg-row-hover);
215
+ border-color: var(--border-strong);
216
+ color: var(--fg-high);
217
+ }
218
+ .methods a:hover::after {
219
+ color: var(--fg-high);
220
+ }
221
+ .methods a:active { transform: translateY(1px); }
222
+ .methods a:focus-visible {
223
+ outline: none;
224
+ border-color: var(--primary);
225
+ box-shadow: 0 0 0 3px var(--focus-ring);
226
+ }
227
+ `
228
+
229
+ export function htmlPage(opts: { title: string; body: string }): string {
230
+ return `<!doctype html>
231
+ <html lang="en">
232
+ <head>
233
+ <meta charset="utf-8">
234
+ <meta name="viewport" content="width=device-width, initial-scale=1">
235
+ <title>${escapeHtml(opts.title)}</title>
236
+ <style>${BASE_STYLES}</style>
237
+ </head>
238
+ <body>
239
+ <main>${opts.body}</main>
240
+ </body>
241
+ </html>`
242
+ }
243
+
244
+ export type FormField = {
245
+ name: string
246
+ label: string
247
+ type?: "text" | "password" | "email" | "tel"
248
+ value?: string
249
+ required?: boolean
250
+ autocomplete?: string
251
+ inputmode?: string
252
+ }
253
+
254
+ /** Build a `<form>` POSTing to `action`. */
255
+ export function renderForm(opts: {
256
+ title: string
257
+ action: string
258
+ fields: FormField[]
259
+ submit: string
260
+ error?: string
261
+ hidden?: Record<string, string>
262
+ }): string {
263
+ const errorHtml = opts.error
264
+ ? `<p class="error">${escapeHtml(opts.error)}</p>`
265
+ : ""
266
+ const hidden = Object.entries(opts.hidden ?? {})
267
+ .map(
268
+ ([k, v]) =>
269
+ `<input type="hidden" name="${escapeHtml(k)}" value="${escapeHtml(v)}">`,
270
+ )
271
+ .join("")
272
+ const fields = opts.fields
273
+ .map(
274
+ (f) => `<label>${escapeHtml(f.label)}
275
+ <input
276
+ name="${escapeHtml(f.name)}"
277
+ type="${f.type ?? "text"}"
278
+ value="${escapeHtml(f.value ?? "")}"
279
+ ${f.required ? "required" : ""}
280
+ ${f.autocomplete ? `autocomplete="${escapeHtml(f.autocomplete)}"` : ""}
281
+ ${f.inputmode ? `inputmode="${escapeHtml(f.inputmode)}"` : ""}
282
+ ></label>`,
283
+ )
284
+ .join("")
285
+ return htmlPage({
286
+ title: opts.title,
287
+ body: `<h1>${escapeHtml(opts.title)}</h1>${errorHtml}<form method="POST" action="${escapeHtml(opts.action)}">${hidden}${fields}<button type="submit">${escapeHtml(opts.submit)}</button></form>`,
288
+ })
289
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Public surface for the built-in server-rendered UI helpers.
3
+ *
4
+ * Hosts who want their own UI typically don't import from here at all —
5
+ * they intercept at the host application layer. Hosts that want to keep
6
+ * the defaults but tweak around the edges (e.g. supply a custom picker
7
+ * while keeping the default credential forms) can pull renderForm /
8
+ * renderPicker from here.
9
+ */
10
+ export { renderForm, escapeHtml, htmlPage, BASE_STYLES } from "./forms"
11
+ export type { FormField } from "./forms"
12
+
13
+ export { renderPicker, buildMethodLink } from "./picker"
14
+ export type { PickerMethod, PickerContext } from "./picker"