@authup/server-core 1.0.0-beta.51 → 1.0.0-beta.52

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 (482) hide show
  1. package/dist/adapters/database/data-source/options/module.d.ts.map +1 -1
  2. package/dist/adapters/database/data-source/options/module.mjs +2 -0
  3. package/dist/adapters/database/data-source/options/module.mjs.map +1 -1
  4. package/dist/adapters/database/domains/client/entity.d.ts +1 -0
  5. package/dist/adapters/database/domains/client/entity.d.ts.map +1 -1
  6. package/dist/adapters/database/domains/client/entity.mjs +5 -0
  7. package/dist/adapters/database/domains/client/entity.mjs.map +1 -1
  8. package/dist/adapters/database/domains/index.d.ts +1 -0
  9. package/dist/adapters/database/domains/index.d.ts.map +1 -1
  10. package/dist/adapters/database/domains/index.mjs +3 -1
  11. package/dist/adapters/database/domains/session/entity.mjs +1 -1
  12. package/dist/adapters/database/domains/session/entity.mjs.map +1 -1
  13. package/dist/adapters/database/domains/session-token/entity.d.ts +17 -0
  14. package/dist/adapters/database/domains/session-token/entity.d.ts.map +1 -0
  15. package/dist/adapters/database/domains/session-token/entity.mjs +95 -0
  16. package/dist/adapters/database/domains/session-token/entity.mjs.map +1 -0
  17. package/dist/adapters/database/domains/session-token/index.d.ts +2 -0
  18. package/dist/adapters/database/domains/session-token/index.d.ts.map +1 -0
  19. package/dist/adapters/database/domains/session-token/index.mjs +5 -0
  20. package/dist/adapters/database/index.mjs +2 -1
  21. package/dist/adapters/database/migrations/mysql/1783325495597-Default.d.ts +28 -0
  22. package/dist/adapters/database/migrations/mysql/1783325495597-Default.d.ts.map +1 -0
  23. package/dist/adapters/database/migrations/mysql/1783325495597-Default.mjs +85 -0
  24. package/dist/adapters/database/migrations/mysql/1783325495597-Default.mjs.map +1 -0
  25. package/dist/adapters/database/migrations/postgres/1783325495597-Default.d.ts +28 -0
  26. package/dist/adapters/database/migrations/postgres/1783325495597-Default.d.ts.map +1 -0
  27. package/dist/adapters/database/migrations/postgres/1783325495597-Default.mjs +79 -0
  28. package/dist/adapters/database/migrations/postgres/1783325495597-Default.mjs.map +1 -0
  29. package/dist/adapters/database/subscriber/module.d.ts.map +1 -1
  30. package/dist/adapters/database/subscriber/module.mjs +4 -3
  31. package/dist/adapters/database/subscriber/module.mjs.map +1 -1
  32. package/dist/adapters/http/adapters/index.mjs +2 -1
  33. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs +2 -1
  34. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs.map +1 -1
  35. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts +2 -1
  36. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts.map +1 -1
  37. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +10 -4
  38. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  39. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts.map +1 -1
  40. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +3 -0
  41. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  42. package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -1
  43. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
  44. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +5 -3
  45. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  46. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts +2 -1
  47. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts.map +1 -1
  48. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +12 -5
  49. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  50. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +2 -0
  51. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
  52. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +1 -1
  53. package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs +1 -1
  54. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts +1 -0
  55. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts.map +1 -1
  56. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -1
  57. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.d.ts +9 -0
  58. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.d.ts.map +1 -0
  59. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.mjs +21 -0
  60. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.mjs.map +1 -0
  61. package/dist/adapters/http/adapters/oauth2/index.mjs +2 -1
  62. package/dist/adapters/http/controllers/entities/client/module.mjs +2 -2
  63. package/dist/adapters/http/controllers/entities/client-permission/module.mjs +1 -1
  64. package/dist/adapters/http/controllers/entities/client-role/module.mjs +1 -1
  65. package/dist/adapters/http/controllers/entities/client-scope/module.mjs +1 -1
  66. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs +1 -1
  67. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  68. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +4 -3
  69. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  70. package/dist/adapters/http/controllers/entities/index.d.ts +1 -0
  71. package/dist/adapters/http/controllers/entities/index.d.ts.map +1 -1
  72. package/dist/adapters/http/controllers/entities/index.mjs +3 -1
  73. package/dist/adapters/http/controllers/entities/permission/module.mjs +1 -1
  74. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs +1 -1
  75. package/dist/adapters/http/controllers/entities/policy/module.mjs +1 -1
  76. package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
  77. package/dist/adapters/http/controllers/entities/realm/module.mjs +11 -8
  78. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  79. package/dist/adapters/http/controllers/entities/robot/module.mjs +2 -2
  80. package/dist/adapters/http/controllers/entities/robot-permission/module.mjs +1 -1
  81. package/dist/adapters/http/controllers/entities/robot-role/module.mjs +1 -1
  82. package/dist/adapters/http/controllers/entities/role/module.mjs +1 -1
  83. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs +1 -1
  84. package/dist/adapters/http/controllers/entities/role-permission/module.mjs +1 -1
  85. package/dist/adapters/http/controllers/entities/scope/module.mjs +1 -1
  86. package/dist/adapters/http/controllers/entities/session/index.d.ts +2 -0
  87. package/dist/adapters/http/controllers/entities/session/index.d.ts.map +1 -0
  88. package/dist/adapters/http/controllers/entities/session/index.mjs +5 -0
  89. package/dist/adapters/http/controllers/entities/session/module.d.ts +16 -0
  90. package/dist/adapters/http/controllers/entities/session/module.d.ts.map +1 -0
  91. package/dist/adapters/http/controllers/entities/session/module.mjs +102 -0
  92. package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -0
  93. package/dist/adapters/http/controllers/entities/user/module.mjs +2 -2
  94. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs +1 -1
  95. package/dist/adapters/http/controllers/entities/user-permission/module.mjs +1 -1
  96. package/dist/adapters/http/controllers/entities/user-role/module.mjs +1 -1
  97. package/dist/adapters/http/controllers/index.mjs +3 -1
  98. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
  99. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +22 -9
  100. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  101. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts +7 -4
  102. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts.map +1 -1
  103. package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
  104. package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
  105. package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
  106. package/dist/adapters/http/controllers/workflows/logout/index.d.ts +3 -0
  107. package/dist/adapters/http/controllers/workflows/logout/index.d.ts.map +1 -0
  108. package/dist/adapters/http/controllers/workflows/logout/index.mjs +5 -0
  109. package/dist/adapters/http/controllers/workflows/logout/module.d.ts +14 -0
  110. package/dist/adapters/http/controllers/workflows/logout/module.d.ts.map +1 -0
  111. package/dist/adapters/http/controllers/workflows/logout/module.mjs +101 -0
  112. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -0
  113. package/dist/adapters/http/controllers/workflows/logout/types.d.ts +9 -0
  114. package/dist/adapters/http/controllers/workflows/logout/types.d.ts.map +1 -0
  115. package/dist/adapters/http/controllers/workflows/logout/types.mjs +4 -0
  116. package/dist/adapters/http/controllers/workflows/status/module.mjs +1 -1
  117. package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
  118. package/dist/adapters/http/controllers/workflows/token/module.mjs +10 -3
  119. package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
  120. package/dist/adapters/http/controllers/workflows/token/types.d.ts +8 -1
  121. package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
  122. package/dist/adapters/http/index.mjs +16 -12
  123. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
  124. package/dist/adapters/http/middleware/built-in/authorization/module.mjs +2 -0
  125. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  126. package/dist/adapters/http/middleware/built-in/index.mjs +2 -2
  127. package/dist/adapters/http/middleware/built-in/logger.d.ts +1 -0
  128. package/dist/adapters/http/middleware/built-in/logger.d.ts.map +1 -1
  129. package/dist/adapters/http/middleware/built-in/logger.mjs +23 -2
  130. package/dist/adapters/http/middleware/built-in/logger.mjs.map +1 -1
  131. package/dist/adapters/http/middleware/built-in/prometheus.d.ts.map +1 -1
  132. package/dist/adapters/http/middleware/built-in/prometheus.mjs +1 -1
  133. package/dist/adapters/http/middleware/built-in/prometheus.mjs.map +1 -1
  134. package/dist/adapters/http/middleware/built-in/realm-resolver/module.d.ts.map +1 -1
  135. package/dist/adapters/http/middleware/built-in/realm-resolver/module.mjs +3 -8
  136. package/dist/adapters/http/middleware/built-in/realm-resolver/module.mjs.map +1 -1
  137. package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts +2 -2
  138. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs +2 -2
  139. package/dist/adapters/http/middleware/built-in/ui-http-client.mjs.map +1 -1
  140. package/dist/adapters/http/middleware/index.mjs +2 -2
  141. package/dist/adapters/http/request/helpers/index.d.ts +1 -0
  142. package/dist/adapters/http/request/helpers/index.d.ts.map +1 -1
  143. package/dist/adapters/http/request/helpers/index.mjs +2 -1
  144. package/dist/adapters/http/request/helpers/session-id.d.ts +9 -0
  145. package/dist/adapters/http/request/helpers/session-id.d.ts.map +1 -0
  146. package/dist/adapters/http/request/helpers/session-id.mjs +19 -0
  147. package/dist/adapters/http/request/helpers/session-id.mjs.map +1 -0
  148. package/dist/adapters/http/request/index.mjs +2 -1
  149. package/dist/adapters/http/request/permission/module.d.ts.map +1 -1
  150. package/dist/adapters/http/request/permission/module.mjs +4 -2
  151. package/dist/adapters/http/request/permission/module.mjs.map +1 -1
  152. package/dist/adapters/http/ui/index.d.ts +1 -0
  153. package/dist/adapters/http/ui/index.d.ts.map +1 -1
  154. package/dist/adapters/http/ui/index.mjs +2 -1
  155. package/dist/adapters/http/ui/internal-http-client.d.ts +22 -0
  156. package/dist/adapters/http/ui/internal-http-client.d.ts.map +1 -0
  157. package/dist/adapters/http/ui/internal-http-client.mjs +52 -0
  158. package/dist/adapters/http/ui/internal-http-client.mjs.map +1 -0
  159. package/dist/adapters/http/ui/render.d.ts.map +1 -1
  160. package/dist/adapters/http/ui/render.mjs +5 -2
  161. package/dist/adapters/http/ui/render.mjs.map +1 -1
  162. package/dist/adapters/http/ui/types.d.ts +12 -0
  163. package/dist/adapters/http/ui/types.d.ts.map +1 -1
  164. package/dist/app/modules/authentication/repositories/session.d.ts +5 -2
  165. package/dist/app/modules/authentication/repositories/session.d.ts.map +1 -1
  166. package/dist/app/modules/authentication/repositories/session.mjs +63 -0
  167. package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
  168. package/dist/app/modules/config/constants.d.ts +4 -0
  169. package/dist/app/modules/config/constants.d.ts.map +1 -1
  170. package/dist/app/modules/config/constants.mjs +4 -0
  171. package/dist/app/modules/config/constants.mjs.map +1 -1
  172. package/dist/app/modules/config/normalize.d.ts.map +1 -1
  173. package/dist/app/modules/config/normalize.mjs +6 -1
  174. package/dist/app/modules/config/normalize.mjs.map +1 -1
  175. package/dist/app/modules/config/read/env.d.ts.map +1 -1
  176. package/dist/app/modules/config/read/env.mjs +8 -0
  177. package/dist/app/modules/config/read/env.mjs.map +1 -1
  178. package/dist/app/modules/config/types.d.ts +31 -2
  179. package/dist/app/modules/config/types.d.ts.map +1 -1
  180. package/dist/app/modules/config/validator.d.ts.map +1 -1
  181. package/dist/app/modules/config/validator.mjs +5 -0
  182. package/dist/app/modules/config/validator.mjs.map +1 -1
  183. package/dist/app/modules/database/module.d.ts +1 -0
  184. package/dist/app/modules/database/module.d.ts.map +1 -1
  185. package/dist/app/modules/database/module.mjs +19 -6
  186. package/dist/app/modules/database/module.mjs.map +1 -1
  187. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  188. package/dist/app/modules/database/repositories/client/repository.mjs +10 -6
  189. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  190. package/dist/app/modules/database/repositories/helpers.d.ts +11 -0
  191. package/dist/app/modules/database/repositories/helpers.d.ts.map +1 -1
  192. package/dist/app/modules/database/repositories/helpers.mjs +12 -1
  193. package/dist/app/modules/database/repositories/helpers.mjs.map +1 -1
  194. package/dist/app/modules/database/repositories/identity-provider/repository.d.ts.map +1 -1
  195. package/dist/app/modules/database/repositories/identity-provider/repository.mjs +8 -8
  196. package/dist/app/modules/database/repositories/identity-provider/repository.mjs.map +1 -1
  197. package/dist/app/modules/database/repositories/permission/repository.d.ts.map +1 -1
  198. package/dist/app/modules/database/repositories/permission/repository.mjs +4 -3
  199. package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
  200. package/dist/app/modules/database/repositories/policy/repository.d.ts.map +1 -1
  201. package/dist/app/modules/database/repositories/policy/repository.mjs +4 -3
  202. package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
  203. package/dist/app/modules/database/repositories/realm/repository.d.ts +1 -0
  204. package/dist/app/modules/database/repositories/realm/repository.d.ts.map +1 -1
  205. package/dist/app/modules/database/repositories/realm/repository.mjs +14 -1
  206. package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
  207. package/dist/app/modules/database/repositories/robot/repository.d.ts.map +1 -1
  208. package/dist/app/modules/database/repositories/robot/repository.mjs +8 -6
  209. package/dist/app/modules/database/repositories/robot/repository.mjs.map +1 -1
  210. package/dist/app/modules/database/repositories/role/repository.d.ts.map +1 -1
  211. package/dist/app/modules/database/repositories/role/repository.mjs +4 -3
  212. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  213. package/dist/app/modules/database/repositories/role-attribute/repository.d.ts.map +1 -1
  214. package/dist/app/modules/database/repositories/role-attribute/repository.mjs +2 -1
  215. package/dist/app/modules/database/repositories/role-attribute/repository.mjs.map +1 -1
  216. package/dist/app/modules/database/repositories/scope/repository.d.ts.map +1 -1
  217. package/dist/app/modules/database/repositories/scope/repository.mjs +4 -3
  218. package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
  219. package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
  220. package/dist/app/modules/database/repositories/user/repository.mjs +8 -5
  221. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  222. package/dist/app/modules/database/repositories/user-attribute/repository.d.ts.map +1 -1
  223. package/dist/app/modules/database/repositories/user-attribute/repository.mjs +2 -1
  224. package/dist/app/modules/database/repositories/user-attribute/repository.mjs.map +1 -1
  225. package/dist/app/modules/http/constants.d.ts +4 -2
  226. package/dist/app/modules/http/constants.d.ts.map +1 -1
  227. package/dist/app/modules/http/constants.mjs +4 -2
  228. package/dist/app/modules/http/constants.mjs.map +1 -1
  229. package/dist/app/modules/http/module.d.ts +10 -0
  230. package/dist/app/modules/http/module.d.ts.map +1 -1
  231. package/dist/app/modules/http/module.mjs +30 -0
  232. package/dist/app/modules/http/module.mjs.map +1 -1
  233. package/dist/app/modules/http/modules/controller.d.ts +4 -2
  234. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  235. package/dist/app/modules/http/modules/controller.mjs +57 -15
  236. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  237. package/dist/app/modules/http/modules/middleware.mjs +1 -1
  238. package/dist/app/modules/oauth2/constants.d.ts +2 -1
  239. package/dist/app/modules/oauth2/constants.d.ts.map +1 -1
  240. package/dist/app/modules/oauth2/constants.mjs +1 -0
  241. package/dist/app/modules/oauth2/constants.mjs.map +1 -1
  242. package/dist/app/modules/oauth2/module.d.ts.map +1 -1
  243. package/dist/app/modules/oauth2/module.mjs +10 -4
  244. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  245. package/dist/app/modules/oauth2/repositories/index.d.ts +1 -0
  246. package/dist/app/modules/oauth2/repositories/index.d.ts.map +1 -1
  247. package/dist/app/modules/oauth2/repositories/index.mjs +3 -1
  248. package/dist/app/modules/oauth2/repositories/session-token/index.d.ts +2 -0
  249. package/dist/app/modules/oauth2/repositories/session-token/index.d.ts.map +1 -0
  250. package/dist/app/modules/oauth2/repositories/session-token/index.mjs +5 -0
  251. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts +17 -0
  252. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts.map +1 -0
  253. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs +63 -0
  254. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs.map +1 -0
  255. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  256. package/dist/app/modules/provisioning/sources/default/module.mjs +1 -0
  257. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  258. package/dist/app/modules/provisioning/sources/file/module.d.ts.map +1 -1
  259. package/dist/app/modules/provisioning/sources/file/module.mjs +2 -1
  260. package/dist/app/modules/provisioning/sources/file/module.mjs.map +1 -1
  261. package/dist/cli/commands/migration.d.ts.map +1 -1
  262. package/dist/cli/commands/migration.mjs +12 -4
  263. package/dist/cli/commands/migration.mjs.map +1 -1
  264. package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
  265. package/dist/components/oauth2-cleaner/module.mjs +3 -0
  266. package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
  267. package/dist/core/authentication/index.mjs +2 -1
  268. package/dist/core/authentication/session/index.mjs +2 -1
  269. package/dist/core/authentication/session/module.d.ts +1 -0
  270. package/dist/core/authentication/session/module.d.ts.map +1 -1
  271. package/dist/core/authentication/session/module.mjs +3 -0
  272. package/dist/core/authentication/session/module.mjs.map +1 -1
  273. package/dist/core/authentication/session/types.d.ts +34 -0
  274. package/dist/core/authentication/session/types.d.ts.map +1 -1
  275. package/dist/core/authentication/session/types.mjs +18 -1
  276. package/dist/core/authentication/session/types.mjs.map +1 -0
  277. package/dist/core/entities/client/web-client.d.ts +5 -3
  278. package/dist/core/entities/client/web-client.d.ts.map +1 -1
  279. package/dist/core/entities/client/web-client.mjs +8 -4
  280. package/dist/core/entities/client/web-client.mjs.map +1 -1
  281. package/dist/core/entities/index.d.ts +1 -0
  282. package/dist/core/entities/index.d.ts.map +1 -1
  283. package/dist/core/entities/index.mjs +3 -1
  284. package/dist/core/entities/realm/types.d.ts +9 -0
  285. package/dist/core/entities/realm/types.d.ts.map +1 -1
  286. package/dist/core/entities/session/index.d.ts +3 -0
  287. package/dist/core/entities/session/index.d.ts.map +1 -0
  288. package/dist/core/entities/session/index.mjs +5 -0
  289. package/dist/core/entities/session/service.d.ts +27 -0
  290. package/dist/core/entities/session/service.d.ts.map +1 -0
  291. package/dist/core/entities/session/service.mjs +151 -0
  292. package/dist/core/entities/session/service.mjs.map +1 -0
  293. package/dist/core/entities/session/types.d.ts +48 -0
  294. package/dist/core/entities/session/types.d.ts.map +1 -0
  295. package/dist/core/entities/session/types.mjs +4 -0
  296. package/dist/core/entities/user/service.d.ts +1 -0
  297. package/dist/core/entities/user/service.d.ts.map +1 -1
  298. package/dist/core/entities/user/service.mjs +1 -1
  299. package/dist/core/entities/user/service.mjs.map +1 -1
  300. package/dist/core/identity/password-recovery/service.d.ts.map +1 -1
  301. package/dist/core/identity/password-recovery/service.mjs +2 -1
  302. package/dist/core/identity/password-recovery/service.mjs.map +1 -1
  303. package/dist/core/identity/password-recovery/types.d.ts +1 -0
  304. package/dist/core/identity/password-recovery/types.d.ts.map +1 -1
  305. package/dist/core/identity/permission/checker/service.d.ts.map +1 -1
  306. package/dist/core/identity/permission/checker/service.mjs +6 -5
  307. package/dist/core/identity/permission/checker/service.mjs.map +1 -1
  308. package/dist/core/identity/policy/checker/service.d.ts.map +1 -1
  309. package/dist/core/identity/policy/checker/service.mjs +6 -5
  310. package/dist/core/identity/policy/checker/service.mjs.map +1 -1
  311. package/dist/core/identity/provider/authentication/presets/facebook.d.ts.map +1 -1
  312. package/dist/core/identity/provider/authentication/presets/facebook.mjs +2 -1
  313. package/dist/core/identity/provider/authentication/presets/facebook.mjs.map +1 -1
  314. package/dist/core/identity/provider/authentication/presets/github.d.ts.map +1 -1
  315. package/dist/core/identity/provider/authentication/presets/github.mjs +2 -1
  316. package/dist/core/identity/provider/authentication/presets/github.mjs.map +1 -1
  317. package/dist/core/identity/provider/authentication/presets/google.d.ts.map +1 -1
  318. package/dist/core/identity/provider/authentication/presets/google.mjs +2 -1
  319. package/dist/core/identity/provider/authentication/presets/google.mjs.map +1 -1
  320. package/dist/core/identity/provider/authentication/presets/instagram.d.ts.map +1 -1
  321. package/dist/core/identity/provider/authentication/presets/instagram.mjs +2 -1
  322. package/dist/core/identity/provider/authentication/presets/instagram.mjs.map +1 -1
  323. package/dist/core/identity/provider/authentication/presets/paypal.d.ts.map +1 -1
  324. package/dist/core/identity/provider/authentication/presets/paypal.mjs +2 -1
  325. package/dist/core/identity/provider/authentication/presets/paypal.mjs.map +1 -1
  326. package/dist/core/identity/provider/authentication/protocols/oauth2/module.d.ts.map +1 -1
  327. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs +7 -2
  328. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs.map +1 -1
  329. package/dist/core/identity/provider/authentication/protocols/open-id/module.d.ts +2 -0
  330. package/dist/core/identity/provider/authentication/protocols/open-id/module.d.ts.map +1 -1
  331. package/dist/core/identity/provider/authentication/protocols/open-id/module.mjs +5 -0
  332. package/dist/core/identity/provider/authentication/protocols/open-id/module.mjs.map +1 -1
  333. package/dist/core/identity/registration/service.d.ts.map +1 -1
  334. package/dist/core/identity/registration/service.mjs +9 -6
  335. package/dist/core/identity/registration/service.mjs.map +1 -1
  336. package/dist/core/identity/registration/types.d.ts +1 -0
  337. package/dist/core/identity/registration/types.d.ts.map +1 -1
  338. package/dist/core/identity/resolver/module.d.ts +7 -0
  339. package/dist/core/identity/resolver/module.d.ts.map +1 -1
  340. package/dist/core/identity/resolver/module.mjs +7 -1
  341. package/dist/core/identity/resolver/module.mjs.map +1 -1
  342. package/dist/core/index.mjs +10 -2
  343. package/dist/core/oauth2/authorization/code/index.mjs +1 -0
  344. package/dist/core/oauth2/authorization/code/issuer/module.d.ts +0 -1
  345. package/dist/core/oauth2/authorization/code/issuer/module.d.ts.map +1 -1
  346. package/dist/core/oauth2/authorization/code/issuer/module.mjs +7 -7
  347. package/dist/core/oauth2/authorization/code/issuer/module.mjs.map +1 -1
  348. package/dist/core/oauth2/authorization/code/issuer/types.d.ts +11 -2
  349. package/dist/core/oauth2/authorization/code/issuer/types.d.ts.map +1 -1
  350. package/dist/core/oauth2/authorization/code/verifier/module.d.ts.map +1 -1
  351. package/dist/core/oauth2/authorization/code/verifier/module.mjs +1 -0
  352. package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
  353. package/dist/core/oauth2/authorization/code/verifier/types.d.ts +1 -0
  354. package/dist/core/oauth2/authorization/code/verifier/types.d.ts.map +1 -1
  355. package/dist/core/oauth2/authorization/code-request/validator.d.ts.map +1 -1
  356. package/dist/core/oauth2/authorization/code-request/validator.mjs +19 -5
  357. package/dist/core/oauth2/authorization/code-request/validator.mjs.map +1 -1
  358. package/dist/core/oauth2/authorization/code-request/verifier/module.d.ts.map +1 -1
  359. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +13 -10
  360. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
  361. package/dist/core/oauth2/authorization/code-request/verifier/types.d.ts +7 -0
  362. package/dist/core/oauth2/authorization/code-request/verifier/types.d.ts.map +1 -1
  363. package/dist/core/oauth2/authorization/helpers.d.ts +2 -1
  364. package/dist/core/oauth2/authorization/helpers.d.ts.map +1 -1
  365. package/dist/core/oauth2/authorization/helpers.mjs +19 -2
  366. package/dist/core/oauth2/authorization/helpers.mjs.map +1 -1
  367. package/dist/core/oauth2/authorization/module.d.ts +6 -7
  368. package/dist/core/oauth2/authorization/module.d.ts.map +1 -1
  369. package/dist/core/oauth2/authorization/module.mjs +24 -38
  370. package/dist/core/oauth2/authorization/module.mjs.map +1 -1
  371. package/dist/core/oauth2/authorization/types.d.ts +15 -7
  372. package/dist/core/oauth2/authorization/types.d.ts.map +1 -1
  373. package/dist/core/oauth2/client/grant-type.d.ts +9 -0
  374. package/dist/core/oauth2/client/grant-type.d.ts.map +1 -0
  375. package/dist/core/oauth2/client/grant-type.mjs +18 -0
  376. package/dist/core/oauth2/client/grant-type.mjs.map +1 -0
  377. package/dist/core/oauth2/client/index.d.ts +1 -0
  378. package/dist/core/oauth2/client/index.d.ts.map +1 -1
  379. package/dist/core/oauth2/client/index.mjs +2 -1
  380. package/dist/core/oauth2/end-session/index.d.ts +4 -0
  381. package/dist/core/oauth2/end-session/index.d.ts.map +1 -0
  382. package/dist/core/oauth2/end-session/index.mjs +6 -0
  383. package/dist/core/oauth2/end-session/service.d.ts +30 -0
  384. package/dist/core/oauth2/end-session/service.d.ts.map +1 -0
  385. package/dist/core/oauth2/end-session/service.mjs +117 -0
  386. package/dist/core/oauth2/end-session/service.mjs.map +1 -0
  387. package/dist/core/oauth2/end-session/types.d.ts +55 -0
  388. package/dist/core/oauth2/end-session/types.d.ts.map +1 -0
  389. package/dist/core/oauth2/end-session/types.mjs +4 -0
  390. package/dist/core/oauth2/end-session/validator.d.ts +6 -0
  391. package/dist/core/oauth2/end-session/validator.d.ts.map +1 -0
  392. package/dist/core/oauth2/end-session/validator.mjs +23 -0
  393. package/dist/core/oauth2/end-session/validator.mjs.map +1 -0
  394. package/dist/core/oauth2/grant-types/authorize.d.ts +19 -2
  395. package/dist/core/oauth2/grant-types/authorize.d.ts.map +1 -1
  396. package/dist/core/oauth2/grant-types/authorize.mjs +53 -10
  397. package/dist/core/oauth2/grant-types/authorize.mjs.map +1 -1
  398. package/dist/core/oauth2/grant-types/refresh-token.d.ts +21 -2
  399. package/dist/core/oauth2/grant-types/refresh-token.d.ts.map +1 -1
  400. package/dist/core/oauth2/grant-types/refresh-token.mjs +55 -9
  401. package/dist/core/oauth2/grant-types/refresh-token.mjs.map +1 -1
  402. package/dist/core/oauth2/grant-types/types.d.ts +22 -2
  403. package/dist/core/oauth2/grant-types/types.d.ts.map +1 -1
  404. package/dist/core/oauth2/index.d.ts +2 -0
  405. package/dist/core/oauth2/index.d.ts.map +1 -1
  406. package/dist/core/oauth2/index.mjs +7 -3
  407. package/dist/core/oauth2/session-token/index.d.ts +2 -0
  408. package/dist/core/oauth2/session-token/index.d.ts.map +1 -0
  409. package/dist/core/oauth2/session-token/index.mjs +4 -0
  410. package/dist/core/oauth2/session-token/types.d.ts +70 -0
  411. package/dist/core/oauth2/session-token/types.d.ts.map +1 -0
  412. package/dist/core/oauth2/session-token/types.mjs +4 -0
  413. package/dist/core/oauth2/token/issuer/access/module.d.ts +3 -1
  414. package/dist/core/oauth2/token/issuer/access/module.d.ts.map +1 -1
  415. package/dist/core/oauth2/token/issuer/access/module.mjs +12 -1
  416. package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
  417. package/dist/core/oauth2/token/issuer/open-id/module.d.ts.map +1 -1
  418. package/dist/core/oauth2/token/issuer/open-id/module.mjs +1 -1
  419. package/dist/core/oauth2/token/issuer/open-id/module.mjs.map +1 -1
  420. package/dist/core/oauth2/token/issuer/refresh/module.d.ts +3 -1
  421. package/dist/core/oauth2/token/issuer/refresh/module.d.ts.map +1 -1
  422. package/dist/core/oauth2/token/issuer/refresh/module.mjs +12 -1
  423. package/dist/core/oauth2/token/issuer/refresh/module.mjs.map +1 -1
  424. package/dist/core/oauth2/token/revoker/module.d.ts +3 -1
  425. package/dist/core/oauth2/token/revoker/module.d.ts.map +1 -1
  426. package/dist/core/oauth2/token/revoker/module.mjs +4 -1
  427. package/dist/core/oauth2/token/revoker/module.mjs.map +1 -1
  428. package/dist/core/oauth2/token/verifier/module.d.ts.map +1 -1
  429. package/dist/core/oauth2/token/verifier/module.mjs +4 -4
  430. package/dist/core/oauth2/token/verifier/module.mjs.map +1 -1
  431. package/dist/core/oauth2/token/verifier/types.d.ts +6 -0
  432. package/dist/core/oauth2/token/verifier/types.d.ts.map +1 -1
  433. package/dist/core/provisioning/entities/client/relations-validator.d.ts.map +1 -1
  434. package/dist/core/provisioning/entities/client/relations-validator.mjs +3 -2
  435. package/dist/core/provisioning/entities/client/relations-validator.mjs.map +1 -1
  436. package/dist/core/provisioning/entities/index.d.ts +1 -0
  437. package/dist/core/provisioning/entities/index.d.ts.map +1 -1
  438. package/dist/core/provisioning/entities/index.mjs +5 -1
  439. package/dist/core/provisioning/entities/permission/index.d.ts +1 -0
  440. package/dist/core/provisioning/entities/permission/index.d.ts.map +1 -1
  441. package/dist/core/provisioning/entities/permission/index.mjs +2 -1
  442. package/dist/core/provisioning/entities/permission/relations-validator.d.ts +6 -0
  443. package/dist/core/provisioning/entities/permission/relations-validator.d.ts.map +1 -0
  444. package/dist/core/provisioning/entities/permission/relations-validator.mjs +17 -0
  445. package/dist/core/provisioning/entities/permission/relations-validator.mjs.map +1 -0
  446. package/dist/core/provisioning/entities/permission/validator.d.ts.map +1 -1
  447. package/dist/core/provisioning/entities/permission/validator.mjs +3 -0
  448. package/dist/core/provisioning/entities/permission/validator.mjs.map +1 -1
  449. package/dist/core/provisioning/entities/policy/index.d.ts +1 -0
  450. package/dist/core/provisioning/entities/policy/index.d.ts.map +1 -1
  451. package/dist/core/provisioning/entities/policy/index.mjs +2 -1
  452. package/dist/core/provisioning/entities/policy/validator.d.ts +6 -0
  453. package/dist/core/provisioning/entities/policy/validator.d.ts.map +1 -0
  454. package/dist/core/provisioning/entities/policy/validator.mjs +26 -0
  455. package/dist/core/provisioning/entities/policy/validator.mjs.map +1 -0
  456. package/dist/core/provisioning/entities/realm/relations-validator.d.ts.map +1 -1
  457. package/dist/core/provisioning/entities/realm/relations-validator.mjs +9 -52
  458. package/dist/core/provisioning/entities/realm/relations-validator.mjs.map +1 -1
  459. package/dist/core/provisioning/entities/role/relations-validator.d.ts.map +1 -1
  460. package/dist/core/provisioning/entities/role/relations-validator.mjs +4 -0
  461. package/dist/core/provisioning/entities/role/relations-validator.mjs.map +1 -1
  462. package/dist/core/provisioning/entities/root/validator.d.ts.map +1 -1
  463. package/dist/core/provisioning/entities/root/validator.mjs +11 -26
  464. package/dist/core/provisioning/entities/root/validator.mjs.map +1 -1
  465. package/dist/core/provisioning/entities/utils.d.ts +10 -0
  466. package/dist/core/provisioning/entities/utils.d.ts.map +1 -0
  467. package/dist/core/provisioning/entities/utils.mjs +29 -0
  468. package/dist/core/provisioning/entities/utils.mjs.map +1 -0
  469. package/dist/core/provisioning/index.mjs +4 -1
  470. package/dist/core/provisioning/synchronizer/base.d.ts.map +1 -1
  471. package/dist/core/provisioning/synchronizer/base.mjs.map +1 -1
  472. package/dist/index.mjs +16 -11
  473. package/dist/swagger.json +531 -23
  474. package/dist/ui/client/.vite/ssr-manifest.json +1140 -114
  475. package/dist/ui/client/assets/{index-Cd3uWit-.js → index-CP9HCHoS.js} +15 -15
  476. package/dist/ui/client/assets/index-VM4JXBXw.css +2 -0
  477. package/dist/ui/client/index.html +2 -2
  478. package/dist/ui/server/assets/{multipart-parser-Dn2Ly9xU.js → multipart-parser-BCMy8Xwv.js} +11 -1
  479. package/dist/ui/server/assets/{multipart-parser-DyM9gi59.js → multipart-parser-BVY8pIV2.js} +11 -1
  480. package/dist/ui/server/server.js +8643 -6992
  481. package/package.json +15 -15
  482. package/dist/ui/client/assets/index-DoCTwJ8M.css +0 -2
@@ -1,13 +1,22 @@
1
1
  import type { ObjectLiteral } from '@authup/kit';
2
2
  import type { OAuth2TokenGrantResponse } from '@authup/specs';
3
+ import type { Logger } from '@authup/server-kit';
3
4
  import type { ISessionManager } from '../../authentication/index.ts';
4
- import type { IOAuth2TokenIssuer, IOAuth2TokenRevoker, IOAuth2TokenVerifier } from '../token/index.ts';
5
+ import type { IOAuth2KeyRepository } from '../key/index.ts';
6
+ import type { ISessionTokenRepository } from '../session-token/index.ts';
7
+ import type { IOAuth2OpenIDTokenIssuer, IOAuth2TokenIssuer, IOAuth2TokenRepository, IOAuth2TokenVerifier } from '../token/index.ts';
5
8
  export type BaseGrantContext = {
6
9
  accessTokenIssuer: IOAuth2TokenIssuer;
7
10
  sessionManager: ISessionManager;
8
11
  };
9
12
  export type OAuth2AuthorizeGrantContext = BaseGrantContext & {
10
13
  refreshTokenIssuer: IOAuth2TokenIssuer;
14
+ openIdTokenIssuer: IOAuth2OpenIDTokenIssuer;
15
+ /**
16
+ * The realm's signing key determines the id_token's JWS alg — and with it
17
+ * the at_hash digest (OIDC Core §3.1.3.6).
18
+ */
19
+ keyRepository: IOAuth2KeyRepository;
11
20
  };
12
21
  export type OAuth2IdentityGrantContext = BaseGrantContext & {
13
22
  refreshTokenIssuer: IOAuth2TokenIssuer;
@@ -15,10 +24,21 @@ export type OAuth2IdentityGrantContext = BaseGrantContext & {
15
24
  export type OAuth2PasswordGrantContext = BaseGrantContext & {
16
25
  refreshTokenIssuer: IOAuth2TokenIssuer;
17
26
  };
27
+ export type OAuth2RefreshTokenGrantOptions = {
28
+ /**
29
+ * Grace period (seconds) during which a just-consumed refresh token still
30
+ * mints new chain-linked tokens instead of triggering replay detection.
31
+ * default: 0 (strict).
32
+ */
33
+ gracePeriod?: number;
34
+ };
18
35
  export type OAuth2RefreshTokenGrantContext = BaseGrantContext & {
19
36
  refreshTokenIssuer: IOAuth2TokenIssuer;
20
37
  tokenVerifier: IOAuth2TokenVerifier;
21
- tokenRevoker: IOAuth2TokenRevoker;
38
+ tokenRepository: IOAuth2TokenRepository;
39
+ sessionTokenRepository: ISessionTokenRepository;
40
+ logger?: Logger;
41
+ options?: OAuth2RefreshTokenGrantOptions;
22
42
  };
23
43
  export type OAuth2GrantRunWIthOptions = {
24
44
  userAgent?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/oauth2/grant-types/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEvG,MAAM,MAAM,gBAAgB,GAAG;IAC3B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,cAAc,EAAE,eAAe,CAAA;CAClC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,gBAAgB,GAAG;IACzD,kBAAkB,EAAE,kBAAkB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,GAAG;IACxD,kBAAkB,EAAE,kBAAkB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,GAAG;IACxD,kBAAkB,EAAE,kBAAkB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,gBAAgB,GAAG;IAC5D,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,oBAAoB,CAAC;IACpC,YAAY,EAAE,mBAAmB,CAAA;CACpC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,aAAa;IAC3C,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,yBAAyB,GAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC1F"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/oauth2/grant-types/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EACR,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,cAAc,EAAE,eAAe,CAAA;CAClC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,gBAAgB,GAAG;IACzD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,wBAAwB,CAAC;IAC5C;;;OAGG;IACH,aAAa,EAAE,oBAAoB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,GAAG;IACxD,kBAAkB,EAAE,kBAAkB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,GAAG;IACxD,kBAAkB,EAAE,kBAAkB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IACzC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,gBAAgB,GAAG;IAC5D,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,oBAAoB,CAAC;IACpC,eAAe,EAAE,sBAAsB,CAAC;IACxC,sBAAsB,EAAE,uBAAuB,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,8BAA8B,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,aAAa;IAC3C,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,yBAAyB,GAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC1F"}
@@ -1,9 +1,11 @@
1
1
  export * from './authorization/index.ts';
2
2
  export * from './client/index.ts';
3
+ export * from './end-session/index.ts';
3
4
  export * from './grant-types/index.ts';
4
5
  export * from './key/index.ts';
5
6
  export * from './openid/index.ts';
6
7
  export * from './response/index.ts';
7
8
  export * from './scope/index.ts';
9
+ export * from './session-token/index.ts';
8
10
  export * from './token/index.ts';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/oauth2/index.ts"],"names":[],"mappings":"AAOA,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/oauth2/index.ts"],"names":[],"mappings":"AAOA,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
@@ -4,13 +4,17 @@ import.meta.url;
4
4
  import { OAuth2AuthorizationCodeIssuer } from "./authorization/code/issuer/module.mjs";
5
5
  import { base64URLEncode, buildOAuth2CodeChallenge, buildOAuth2TokenHash, generateOAuth2CodeVerifier } from "./authorization/helpers.mjs";
6
6
  import { OAuth2AuthorizationCodeVerifier } from "./authorization/code/verifier/module.mjs";
7
+ import { OAuth2ClientAuthenticator } from "./client/authenticator.mjs";
8
+ import { assertClientGrantAllowed } from "./client/grant-type.mjs";
9
+ import "./client/index.mjs";
7
10
  import { OAuth2AuthorizationCodeRequestVerifier } from "./authorization/code-request/verifier/module.mjs";
8
11
  import { OAuth2AuthorizationCodeRequestValidator } from "./authorization/code-request/validator.mjs";
9
12
  import { OAuth2AuthorizationStateManager } from "./authorization/state/module.mjs";
10
13
  import { OAuth2Authorization } from "./authorization/module.mjs";
11
14
  import "./authorization/index.mjs";
12
- import { OAuth2ClientAuthenticator } from "./client/authenticator.mjs";
13
- import "./client/index.mjs";
15
+ import { OAuth2EndSessionService } from "./end-session/service.mjs";
16
+ import { OAuth2EndSessionRequestValidator } from "./end-session/validator.mjs";
17
+ import "./end-session/index.mjs";
14
18
  import { buildOAuth2BearerTokenResponse } from "./response/bearer.mjs";
15
19
  import { OAuth2AuthorizeGrant } from "./grant-types/authorize.mjs";
16
20
  import { ClientCredentialsGrant } from "./grant-types/client-credentials.mjs";
@@ -30,4 +34,4 @@ import { OAuth2TokenRevoker } from "./token/revoker/module.mjs";
30
34
  import { OAuth2TokenSigner } from "./token/signer/module.mjs";
31
35
  import { OAuth2TokenVerifier } from "./token/verifier/module.mjs";
32
36
  import "./token/index.mjs";
33
- export { ClientCredentialsGrant, IdentityGrantType, OAuth2AccessTokenIssuer, OAuth2Authorization, OAuth2AuthorizationCodeIssuer, OAuth2AuthorizationCodeRequestValidator, OAuth2AuthorizationCodeRequestVerifier, OAuth2AuthorizationCodeVerifier, OAuth2AuthorizationStateManager, OAuth2AuthorizeGrant, OAuth2ClientAuthenticator, OAuth2OpenIDClaimsBuilder, OAuth2OpenIDTokenIssuer, OAuth2RefreshTokenGrant, OAuth2RefreshTokenIssuer, OAuth2ScopeAttributesResolver, OAuth2TokenRevoker, OAuth2TokenSigner, OAuth2TokenVerifier, PasswordGrantType, RobotCredentialsGrant, base64URLEncode, buildOAuth2BearerTokenResponse, buildOAuth2CodeChallenge, buildOAuth2TokenHash, generateOAuth2CodeVerifier };
37
+ export { ClientCredentialsGrant, IdentityGrantType, OAuth2AccessTokenIssuer, OAuth2Authorization, OAuth2AuthorizationCodeIssuer, OAuth2AuthorizationCodeRequestValidator, OAuth2AuthorizationCodeRequestVerifier, OAuth2AuthorizationCodeVerifier, OAuth2AuthorizationStateManager, OAuth2AuthorizeGrant, OAuth2ClientAuthenticator, OAuth2EndSessionRequestValidator, OAuth2EndSessionService, OAuth2OpenIDClaimsBuilder, OAuth2OpenIDTokenIssuer, OAuth2RefreshTokenGrant, OAuth2RefreshTokenIssuer, OAuth2ScopeAttributesResolver, OAuth2TokenRevoker, OAuth2TokenSigner, OAuth2TokenVerifier, PasswordGrantType, RobotCredentialsGrant, assertClientGrantAllowed, base64URLEncode, buildOAuth2BearerTokenResponse, buildOAuth2CodeChallenge, buildOAuth2TokenHash, generateOAuth2CodeVerifier };
@@ -0,0 +1,2 @@
1
+ export * from './types.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/oauth2/session-token/index.ts"],"names":[],"mappings":"AAOA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ export {};
@@ -0,0 +1,70 @@
1
+ import type { SessionToken, SessionTokenKind } from '@authup/core-kit';
2
+ export type SessionTokenCreateInput = {
3
+ id: string;
4
+ session_id: string;
5
+ kind: SessionTokenKind;
6
+ parent_id?: string | null;
7
+ refresh_token_id?: string | null;
8
+ ip_address: string;
9
+ user_agent: string;
10
+ expires_at: string;
11
+ };
12
+ export type SessionTokenRef = {
13
+ id: string;
14
+ expires_at: string;
15
+ };
16
+ export interface ISessionTokenRepository {
17
+ /**
18
+ * Persist a newly issued session-token row.
19
+ */
20
+ create(input: SessionTokenCreateInput): Promise<SessionToken>;
21
+ /**
22
+ * Find a session-token row by its id (= jti).
23
+ */
24
+ findOneById(id: string): Promise<SessionToken | null>;
25
+ /**
26
+ * Inventory query — every token bound to a session.
27
+ */
28
+ findBySessionId(sessionId: string): Promise<SessionToken[]>;
29
+ /**
30
+ * Atomically consume a refresh-token row. Resolves `true` only when this
31
+ * call flipped a fresh (not consumed, not revoked) refresh row to consumed;
32
+ * `false` on a replay / concurrent-refresh loser.
33
+ *
34
+ * @param id jti
35
+ * @param at consumption timestamp (iso)
36
+ */
37
+ markRefreshConsumed(id: string, at: string): Promise<boolean>;
38
+ /**
39
+ * Whether any refresh-token row descended from `parentId` has itself been
40
+ * consumed — i.e. the rotation chain has advanced past `parentId`. Used to
41
+ * scope the grace window to the chain tip (a consumed descendant proves the
42
+ * presented token is a stale ancestor, not a benign concurrent re-use).
43
+ *
44
+ * @param parentId jti of the presented refresh token
45
+ */
46
+ hasConsumedChild(parentId: string): Promise<boolean>;
47
+ /**
48
+ * Soft-revoke a single token row (e.g. explicit `/token/revoke`).
49
+ *
50
+ * @param id jti
51
+ * @param at revocation timestamp (iso)
52
+ */
53
+ revokeById(id: string, at: string): Promise<void>;
54
+ /**
55
+ * Soft-revoke every token row of a session (family revoke). Returns the
56
+ * affected rows' jti + expiry so the caller can blocklist each in cache
57
+ * with a TTL pinned to the token's real lifetime.
58
+ *
59
+ * @param sessionId
60
+ * @param at revocation timestamp (iso)
61
+ */
62
+ revokeBySessionId(sessionId: string, at: string): Promise<SessionTokenRef[]>;
63
+ /**
64
+ * Delete every token row whose `expires_at` is before the given timestamp.
65
+ *
66
+ * @param before iso timestamp
67
+ */
68
+ deleteExpired(before: string): Promise<number>;
69
+ }
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/oauth2/session-token/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,MAAM,MAAM,uBAAuB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACpC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE9D;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAEtD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE5D;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9D;;;;;;;OAOG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAErD;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD;;;;;;;OAOG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAE7E;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClD"}
@@ -0,0 +1,4 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ export {};
@@ -1,6 +1,7 @@
1
1
  import type { OAuth2TokenPayload } from '@authup/specs';
2
2
  import type { IOAuth2TokenSigner } from '../../signer/index.ts';
3
3
  import type { IOAuth2TokenRepository } from '../../repository/index.ts';
4
+ import type { ISessionTokenRepository } from '../../../session-token/index.ts';
4
5
  import { OAuth2BaseTokenIssuer } from '../base.ts';
5
6
  import type { IOAuth2TokenIssuer, OAuth2TokenIssuerOptions, OAuth2TokenIssuerResponse } from '../types.ts';
6
7
  import type { IIdentityRoleProvider } from '../../../../identity/index.ts';
@@ -8,7 +9,8 @@ export declare class OAuth2AccessTokenIssuer extends OAuth2BaseTokenIssuer imple
8
9
  protected repository: IOAuth2TokenRepository;
9
10
  protected signer: IOAuth2TokenSigner;
10
11
  protected identityRoleProvider?: IIdentityRoleProvider;
11
- constructor(repository: IOAuth2TokenRepository, signer: IOAuth2TokenSigner, options?: OAuth2TokenIssuerOptions, identityRoleProvider?: IIdentityRoleProvider);
12
+ protected sessionTokenRepository?: ISessionTokenRepository;
13
+ constructor(repository: IOAuth2TokenRepository, signer: IOAuth2TokenSigner, options?: OAuth2TokenIssuerOptions, identityRoleProvider?: IIdentityRoleProvider, sessionTokenRepository?: ISessionTokenRepository);
12
14
  issue(input?: OAuth2TokenPayload): Promise<OAuth2TokenIssuerResponse>;
13
15
  protected buildAccessClaims(input: OAuth2TokenPayload): Promise<Pick<OAuth2TokenPayload, 'realm_access' | 'global_access'>>;
14
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/core/oauth2/token/issuer/access/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,qBAAa,uBAAwB,SAAQ,qBAAsB,YAAW,kBAAkB;IAC5F,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAG,kBAAkB,CAAC;IAEtC,SAAS,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;gBAGnD,UAAU,EAAE,sBAAsB,EAClC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,wBAA6B,EACtC,oBAAoB,CAAC,EAAE,qBAAqB;IAS1C,KAAK,CAAC,KAAK,GAAE,kBAAuB,GAAI,OAAO,CAAC,yBAAyB,CAAC;cAoBhE,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAI,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,GAAG,eAAe,CAAC,CAAC;CA6BrI"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/core/oauth2/token/issuer/access/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,qBAAa,uBAAwB,SAAQ,qBAAsB,YAAW,kBAAkB;IAC5F,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAG,kBAAkB,CAAC;IAEtC,SAAS,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAEvD,SAAS,CAAC,sBAAsB,CAAC,EAAE,uBAAuB,CAAC;gBAGvD,UAAU,EAAE,sBAAsB,EAClC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,wBAA6B,EACtC,oBAAoB,CAAC,EAAE,qBAAqB,EAC5C,sBAAsB,CAAC,EAAE,uBAAuB;IAU9C,KAAK,CAAC,KAAK,GAAE,kBAAuB,GAAI,OAAO,CAAC,yBAAyB,CAAC;cAgChE,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAI,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,GAAG,eAAe,CAAC,CAAC;CA6BrI"}
@@ -8,11 +8,13 @@ var OAuth2AccessTokenIssuer = class extends OAuth2BaseTokenIssuer {
8
8
  repository;
9
9
  signer;
10
10
  identityRoleProvider;
11
- constructor(repository, signer, options = {}, identityRoleProvider) {
11
+ sessionTokenRepository;
12
+ constructor(repository, signer, options = {}, identityRoleProvider, sessionTokenRepository) {
12
13
  super(options);
13
14
  this.repository = repository;
14
15
  this.signer = signer;
15
16
  this.identityRoleProvider = identityRoleProvider;
17
+ this.sessionTokenRepository = sessionTokenRepository;
16
18
  }
17
19
  async issue(input = {}) {
18
20
  const iss = this.buildIss(input);
@@ -26,6 +28,15 @@ var OAuth2AccessTokenIssuer = class extends OAuth2BaseTokenIssuer {
26
28
  });
27
29
  const token = await this.signer.sign(data);
28
30
  await this.repository.saveWithSignature(data, token);
31
+ if (this.sessionTokenRepository && data.session_id && data.jti && typeof data.exp === "number") await this.sessionTokenRepository.create({
32
+ id: data.jti,
33
+ session_id: data.session_id,
34
+ kind: "access",
35
+ refresh_token_id: input.refresh_token_id ?? null,
36
+ ip_address: data.remote_address ?? "",
37
+ user_agent: data.user_agent ?? "",
38
+ expires_at: (/* @__PURE__ */ new Date(data.exp * 1e3)).toISOString()
39
+ });
29
40
  return [token, data];
30
41
  }
31
42
  async buildAccessClaims(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["OAuth2TokenKind","OAuth2BaseTokenIssuer","OAuth2AccessTokenIssuer","repository","signer","identityRoleProvider","options","issue","input","iss","buildIss","accessClaims","buildAccessClaims","data","insert","kind","ACCESS","exp","buildExp","token","sign","saveWithSignature","sub","sub_kind","roles","getRolesFor","type","id","clientId","client_id","realmId","realm_id","realmName","realm_name","realmRoles","globalRoles","role","push","name","realm_access","global_access"],"sources":["../../../../../../src/core/oauth2/token/issuer/access/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { OAuth2TokenKind } from '@authup/specs';\nimport type { IOAuth2TokenSigner } from '../../signer/index.ts';\nimport type { IOAuth2TokenRepository } from '../../repository/index.ts';\nimport { OAuth2BaseTokenIssuer } from '../base.ts';\nimport type { IOAuth2TokenIssuer, OAuth2TokenIssuerOptions, OAuth2TokenIssuerResponse } from '../types.ts';\nimport type { IIdentityRoleProvider } from '../../../../identity/index.ts';\n\nexport class OAuth2AccessTokenIssuer extends OAuth2BaseTokenIssuer implements IOAuth2TokenIssuer {\n protected repository: IOAuth2TokenRepository;\n\n protected signer : IOAuth2TokenSigner;\n\n protected identityRoleProvider?: IIdentityRoleProvider;\n\n constructor(\n repository: IOAuth2TokenRepository,\n signer: IOAuth2TokenSigner,\n options: OAuth2TokenIssuerOptions = {},\n identityRoleProvider?: IIdentityRoleProvider,\n ) {\n super(options);\n\n this.repository = repository;\n this.signer = signer;\n this.identityRoleProvider = identityRoleProvider;\n }\n\n async issue(input: OAuth2TokenPayload = {}) : Promise<OAuth2TokenIssuerResponse> {\n const iss = this.buildIss(input);\n\n const accessClaims = await this.buildAccessClaims(input);\n\n const data = await this.repository.insert({\n ...input,\n kind: OAuth2TokenKind.ACCESS,\n exp: this.buildExp(input),\n ...(iss ? { iss } : {}),\n ...accessClaims,\n });\n\n const token = await this.signer.sign(data);\n\n await this.repository.saveWithSignature(data, token);\n\n return [token, data];\n }\n\n protected async buildAccessClaims(input: OAuth2TokenPayload) : Promise<Pick<OAuth2TokenPayload, 'realm_access' | 'global_access'>> {\n if (!this.identityRoleProvider || !input.sub || !input.sub_kind) {\n return {};\n }\n\n const roles = await this.identityRoleProvider.getRolesFor({\n type: input.sub_kind,\n id: input.sub,\n clientId: input.client_id,\n realmId: input.realm_id,\n realmName: input.realm_name,\n });\n\n const realmRoles: string[] = [];\n const globalRoles: string[] = [];\n\n for (const role of roles) {\n if (!role.realm_id) {\n globalRoles.push(role.name);\n } else if (input.realm_id && role.realm_id === input.realm_id) {\n realmRoles.push(role.name);\n }\n }\n\n return {\n realm_access: { roles: realmRoles },\n global_access: { roles: globalRoles },\n };\n }\n}\n"],"mappings":";;;;;;AAeA,IAAaE,0BAAb,cAA6CD,sBAAAA;CAC/BE;CAEAC;CAEAC;CAEV,YACIF,YACAC,QACAE,UAAoC,CAAC,GACrCD,sBACF;EACE,MAAMC,OAAAA;EAEN,KAAKH,aAAaA;EAClB,KAAKC,SAASA;EACd,KAAKC,uBAAuBA;CAChC;CAEA,MAAME,MAAMC,QAA4B,CAAC,GAAwC;EAC7E,MAAMC,MAAM,KAAKC,SAASF,KAAAA;EAE1B,MAAMG,eAAe,MAAM,KAAKC,kBAAkBJ,KAAAA;EAElD,MAAMK,OAAO,MAAM,KAAKV,WAAWW,OAAO;GACtC,GAAGN;GACHO,MAAMf,gBAAgBgB;GACtBC,KAAK,KAAKC,SAASV,KAAAA;GACnB,GAAIC,MAAM,EAAEA,IAAI,IAAI,CAAC;GACrB,GAAGE;EACP,CAAA;EAEA,MAAMQ,QAAQ,MAAM,KAAKf,OAAOgB,KAAKP,IAAAA;EAErC,MAAM,KAAKV,WAAWkB,kBAAkBR,MAAMM,KAAAA;EAE9C,OAAO,CAACA,OAAON,IAAAA;CACnB;CAEA,MAAgBD,kBAAkBJ,OAAiG;EAC/H,IAAI,CAAC,KAAKH,wBAAwB,CAACG,MAAMc,OAAO,CAACd,MAAMe,UACnD,OAAO,CAAC;EAGZ,MAAMC,QAAQ,MAAM,KAAKnB,qBAAqBoB,YAAY;GACtDC,MAAMlB,MAAMe;GACZI,IAAInB,MAAMc;GACVM,UAAUpB,MAAMqB;GAChBC,SAAStB,MAAMuB;GACfC,WAAWxB,MAAMyB;EACrB,CAAA;EAEA,MAAMC,aAAuB,CAAA;EAC7B,MAAMC,cAAwB,CAAA;EAE9B,KAAK,MAAMC,QAAQZ,OACf,IAAI,CAACY,KAAKL,UACNI,YAAYE,KAAKD,KAAKE,IAAI;OACvB,IAAI9B,MAAMuB,YAAYK,KAAKL,aAAavB,MAAMuB,UACjDG,WAAWG,KAAKD,KAAKE,IAAI;EAIjC,OAAO;GACHC,cAAc,EAAEf,OAAOU,WAAW;GAClCM,eAAe,EAAEhB,OAAOW,YAAY;EACxC;CACJ;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["OAuth2TokenKind","OAuth2BaseTokenIssuer","OAuth2AccessTokenIssuer","repository","signer","identityRoleProvider","sessionTokenRepository","options","issue","input","iss","buildIss","accessClaims","buildAccessClaims","data","insert","kind","ACCESS","exp","buildExp","token","sign","saveWithSignature","session_id","jti","create","id","refresh_token_id","ip_address","remote_address","user_agent","expires_at","Date","toISOString","sub","sub_kind","roles","getRolesFor","type","clientId","client_id","realmId","realm_id","realmName","realm_name","realmRoles","globalRoles","role","push","name","realm_access","global_access"],"sources":["../../../../../../src/core/oauth2/token/issuer/access/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { OAuth2TokenKind } from '@authup/specs';\nimport type { IOAuth2TokenSigner } from '../../signer/index.ts';\nimport type { IOAuth2TokenRepository } from '../../repository/index.ts';\nimport type { ISessionTokenRepository } from '../../../session-token/index.ts';\nimport { OAuth2BaseTokenIssuer } from '../base.ts';\nimport type { IOAuth2TokenIssuer, OAuth2TokenIssuerOptions, OAuth2TokenIssuerResponse } from '../types.ts';\nimport type { IIdentityRoleProvider } from '../../../../identity/index.ts';\n\nexport class OAuth2AccessTokenIssuer extends OAuth2BaseTokenIssuer implements IOAuth2TokenIssuer {\n protected repository: IOAuth2TokenRepository;\n\n protected signer : IOAuth2TokenSigner;\n\n protected identityRoleProvider?: IIdentityRoleProvider;\n\n protected sessionTokenRepository?: ISessionTokenRepository;\n\n constructor(\n repository: IOAuth2TokenRepository,\n signer: IOAuth2TokenSigner,\n options: OAuth2TokenIssuerOptions = {},\n identityRoleProvider?: IIdentityRoleProvider,\n sessionTokenRepository?: ISessionTokenRepository,\n ) {\n super(options);\n\n this.repository = repository;\n this.signer = signer;\n this.identityRoleProvider = identityRoleProvider;\n this.sessionTokenRepository = sessionTokenRepository;\n }\n\n async issue(input: OAuth2TokenPayload = {}) : Promise<OAuth2TokenIssuerResponse> {\n const iss = this.buildIss(input);\n\n const accessClaims = await this.buildAccessClaims(input);\n\n const data = await this.repository.insert({\n ...input,\n kind: OAuth2TokenKind.ACCESS,\n exp: this.buildExp(input),\n ...(iss ? { iss } : {}),\n ...accessClaims,\n });\n\n const token = await this.signer.sign(data);\n\n await this.repository.saveWithSignature(data, token);\n\n if (this.sessionTokenRepository && data.session_id && data.jti && typeof data.exp === 'number') {\n await this.sessionTokenRepository.create({\n id: data.jti,\n session_id: data.session_id,\n kind: 'access',\n refresh_token_id: input.refresh_token_id ?? null,\n ip_address: data.remote_address ?? '',\n user_agent: data.user_agent ?? '',\n expires_at: new Date(data.exp * 1000).toISOString(),\n });\n }\n\n return [token, data];\n }\n\n protected async buildAccessClaims(input: OAuth2TokenPayload) : Promise<Pick<OAuth2TokenPayload, 'realm_access' | 'global_access'>> {\n if (!this.identityRoleProvider || !input.sub || !input.sub_kind) {\n return {};\n }\n\n const roles = await this.identityRoleProvider.getRolesFor({\n type: input.sub_kind,\n id: input.sub,\n clientId: input.client_id,\n realmId: input.realm_id,\n realmName: input.realm_name,\n });\n\n const realmRoles: string[] = [];\n const globalRoles: string[] = [];\n\n for (const role of roles) {\n if (!role.realm_id) {\n globalRoles.push(role.name);\n } else if (input.realm_id && role.realm_id === input.realm_id) {\n realmRoles.push(role.name);\n }\n }\n\n return {\n realm_access: { roles: realmRoles },\n global_access: { roles: globalRoles },\n };\n }\n}\n"],"mappings":";;;;;;AAgBA,IAAaE,0BAAb,cAA6CD,sBAAAA;CAC/BE;CAEAC;CAEAC;CAEAC;CAEV,YACIH,YACAC,QACAG,UAAoC,CAAC,GACrCF,sBACAC,wBACF;EACE,MAAMC,OAAAA;EAEN,KAAKJ,aAAaA;EAClB,KAAKC,SAASA;EACd,KAAKC,uBAAuBA;EAC5B,KAAKC,yBAAyBA;CAClC;CAEA,MAAME,MAAMC,QAA4B,CAAC,GAAwC;EAC7E,MAAMC,MAAM,KAAKC,SAASF,KAAAA;EAE1B,MAAMG,eAAe,MAAM,KAAKC,kBAAkBJ,KAAAA;EAElD,MAAMK,OAAO,MAAM,KAAKX,WAAWY,OAAO;GACtC,GAAGN;GACHO,MAAMhB,gBAAgBiB;GACtBC,KAAK,KAAKC,SAASV,KAAAA;GACnB,GAAIC,MAAM,EAAEA,IAAI,IAAI,CAAC;GACrB,GAAGE;EACP,CAAA;EAEA,MAAMQ,QAAQ,MAAM,KAAKhB,OAAOiB,KAAKP,IAAAA;EAErC,MAAM,KAAKX,WAAWmB,kBAAkBR,MAAMM,KAAAA;EAE9C,IAAI,KAAKd,0BAA0BQ,KAAKS,cAAcT,KAAKU,OAAO,OAAOV,KAAKI,QAAQ,UAClF,MAAM,KAAKZ,uBAAuBmB,OAAO;GACrCC,IAAIZ,KAAKU;GACTD,YAAYT,KAAKS;GACjBP,MAAM;GACNW,kBAAkBlB,MAAMkB,oBAAoB;GAC5CC,YAAYd,KAAKe,kBAAkB;GACnCC,YAAYhB,KAAKgB,cAAc;GAC/BC,6BAAY,IAAIC,KAAKlB,KAAKI,MAAM,GAAA,EAAA,CAAMe,YAAW;EACrD,CAAA;EAGJ,OAAO,CAACb,OAAON,IAAAA;CACnB;CAEA,MAAgBD,kBAAkBJ,OAAiG;EAC/H,IAAI,CAAC,KAAKJ,wBAAwB,CAACI,MAAMyB,OAAO,CAACzB,MAAM0B,UACnD,OAAO,CAAC;EAGZ,MAAMC,QAAQ,MAAM,KAAK/B,qBAAqBgC,YAAY;GACtDC,MAAM7B,MAAM0B;GACZT,IAAIjB,MAAMyB;GACVK,UAAU9B,MAAM+B;GAChBC,SAAShC,MAAMiC;GACfC,WAAWlC,MAAMmC;EACrB,CAAA;EAEA,MAAMC,aAAuB,CAAA;EAC7B,MAAMC,cAAwB,CAAA;EAE9B,KAAK,MAAMC,QAAQX,OACf,IAAI,CAACW,KAAKL,UACNI,YAAYE,KAAKD,KAAKE,IAAI;OACvB,IAAIxC,MAAMiC,YAAYK,KAAKL,aAAajC,MAAMiC,UACjDG,WAAWG,KAAKD,KAAKE,IAAI;EAIjC,OAAO;GACHC,cAAc,EAAEd,OAAOS,WAAW;GAClCM,eAAe,EAAEf,OAAOU,YAAY;EACxC;CACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/core/oauth2/token/issuer/open-id/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,qBAAa,uBAAwB,SAAQ,qBAAsB,YAAW,wBAAwB;IAClG,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAG,kBAAkB,CAAC;IAEtC,SAAS,CAAC,gBAAgB,EAAG,iBAAiB,CAAC;IAE/C,SAAS,CAAC,aAAa,EAAE,yBAAyB,CAAC;gBAEvC,GAAG,EAAE,8BAA8B;IAUzC,KAAK,CAAC,KAAK,GAAE,kBAAuB,GAAI,OAAO,CAAC,yBAAyB,CAAC;IAqB1E,iBAAiB,CACnB,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,QAAQ,GACnB,OAAO,CAAC,yBAAyB,CAAC;CAwBxC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/core/oauth2/token/issuer/open-id/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,qBAAa,uBAAwB,SAAQ,qBAAsB,YAAW,wBAAwB;IAClG,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAG,kBAAkB,CAAC;IAEtC,SAAS,CAAC,gBAAgB,EAAG,iBAAiB,CAAC;IAE/C,SAAS,CAAC,aAAa,EAAE,yBAAyB,CAAC;gBAEvC,GAAG,EAAE,8BAA8B;IAUzC,KAAK,CAAC,KAAK,GAAE,kBAAuB,GAAI,OAAO,CAAC,yBAAyB,CAAC;IAqB1E,iBAAiB,CACnB,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,QAAQ,GACnB,OAAO,CAAC,yBAAyB,CAAC;CA2BxC"}
@@ -33,7 +33,7 @@ var OAuth2OpenIDTokenIssuer = class extends OAuth2BaseTokenIssuer {
33
33
  ...input,
34
34
  ...claims,
35
35
  kind: OAuth2TokenKind.ID_TOKEN,
36
- auth_time: utc,
36
+ auth_time: typeof input.auth_time === "number" ? input.auth_time : utc,
37
37
  exp: this.buildExp(input),
38
38
  updated_at: utc,
39
39
  ...iss ? { iss } : {},
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["JWTError","OAuth2TokenKind","OAuth2OpenIDClaimsBuilder","OAuth2BaseTokenIssuer","OAuth2OpenIDTokenIssuer","repository","signer","identityResolver","claimsBuilder","ctx","options","issue","input","sub_kind","payloadPropertyInvalid","sub","identity","resolve","payloadInvalid","issueWithIdentity","claims","fromIdentity","utc","Math","floor","Date","getTime","iss","buildIss","data","insert","kind","ID_TOKEN","auth_time","exp","buildExp","updated_at","client_id","aud","token","sign","saveWithSignature"],"sources":["../../../../../../src/core/oauth2/token/issuer/open-id/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { JWTError, OAuth2TokenKind } from '@authup/specs';\nimport type { Identity } from '@authup/core-kit';\nimport { OAuth2OpenIDClaimsBuilder } from '../../../openid/index.ts';\nimport type { IOAuth2TokenSigner } from '../../signer/index.ts';\nimport type { IOAuth2TokenRepository } from '../../repository/index.ts';\nimport { OAuth2BaseTokenIssuer } from '../base.ts';\nimport type { OAuth2TokenIssuerResponse } from '../types.ts';\nimport type { IOAuth2OpenIDTokenIssuer, OAuth2OpenIDTokenIssuerContext } from './types.ts';\nimport type { IIdentityResolver } from '../../../../identity/index.ts';\n\nexport class OAuth2OpenIDTokenIssuer extends OAuth2BaseTokenIssuer implements IOAuth2OpenIDTokenIssuer {\n protected repository: IOAuth2TokenRepository;\n\n protected signer : IOAuth2TokenSigner;\n\n protected identityResolver : IIdentityResolver;\n\n protected claimsBuilder: OAuth2OpenIDClaimsBuilder;\n\n constructor(ctx: OAuth2OpenIDTokenIssuerContext) {\n super(ctx.options);\n\n this.repository = ctx.repository;\n this.signer = ctx.signer;\n\n this.identityResolver = ctx.identityResolver;\n this.claimsBuilder = new OAuth2OpenIDClaimsBuilder();\n }\n\n async issue(input: OAuth2TokenPayload = {}) : Promise<OAuth2TokenIssuerResponse> {\n if (!input.sub_kind) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!input.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n const identity = await this.identityResolver.resolve(\n input.sub_kind,\n input.sub,\n );\n\n if (!identity) {\n throw JWTError.payloadInvalid();\n }\n\n return this.issueWithIdentity(input, identity);\n }\n\n async issueWithIdentity(\n input: OAuth2TokenPayload,\n identity: Identity,\n ): Promise<OAuth2TokenIssuerResponse> {\n const claims = this.claimsBuilder.fromIdentity(identity);\n\n const utc = Math.floor(new Date().getTime() / 1000);\n\n const iss = this.buildIss(input);\n\n const data = await this.repository.insert({\n ...input,\n ...claims,\n kind: OAuth2TokenKind.ID_TOKEN,\n auth_time: utc,\n exp: this.buildExp(input),\n updated_at: utc,\n ...(iss ? { iss } : {}),\n ...(input.client_id ? { aud: input.client_id } : {}),\n });\n\n const token = await this.signer.sign(data);\n\n await this.repository.saveWithSignature(data, token);\n\n return [token, data];\n }\n}\n"],"mappings":";;;;;;;;AAkBA,IAAaI,0BAAb,cAA6CD,sBAAAA;CAC/BE;CAEAC;CAEAC;CAEAC;CAEV,YAAYC,KAAqC;EAC7C,MAAMA,IAAIC,OAAO;EAEjB,KAAKL,aAAaI,IAAIJ;EACtB,KAAKC,SAASG,IAAIH;EAElB,KAAKC,mBAAmBE,IAAIF;EAC5B,KAAKC,gBAAgB,IAAIN,0BAAAA;CAC7B;CAEA,MAAMS,MAAMC,QAA4B,CAAC,GAAwC;EAC7E,IAAI,CAACA,MAAMC,UACP,MAAMb,SAASc,uBAAuB,UAAA;EAG1C,IAAI,CAACF,MAAMG,KACP,MAAMf,SAASc,uBAAuB,KAAA;EAG1C,MAAME,WAAW,MAAM,KAAKT,iBAAiBU,QACzCL,MAAMC,UACND,MAAMG,GAAG;EAGb,IAAI,CAACC,UACD,MAAMhB,SAASkB,eAAc;EAGjC,OAAO,KAAKC,kBAAkBP,OAAOI,QAAAA;CACzC;CAEA,MAAMG,kBACFP,OACAI,UACkC;EAClC,MAAMI,SAAS,KAAKZ,cAAca,aAAaL,QAAAA;EAE/C,MAAMM,MAAMC,KAAKC,uBAAM,IAAIC,KAAAA,EAAAA,CAAOC,QAAO,IAAK,GAAA;EAE9C,MAAMC,MAAM,KAAKC,SAAShB,KAAAA;EAE1B,MAAMiB,OAAO,MAAM,KAAKxB,WAAWyB,OAAO;GACtC,GAAGlB;GACH,GAAGQ;GACHW,MAAM9B,gBAAgB+B;GACtBC,WAAWX;GACXY,KAAK,KAAKC,SAASvB,KAAAA;GACnBwB,YAAYd;GACZ,GAAIK,MAAM,EAAEA,IAAI,IAAI,CAAC;GACrB,GAAIf,MAAMyB,YAAY,EAAEC,KAAK1B,MAAMyB,UAAU,IAAI,CAAC;EACtD,CAAA;EAEA,MAAME,QAAQ,MAAM,KAAKjC,OAAOkC,KAAKX,IAAAA;EAErC,MAAM,KAAKxB,WAAWoC,kBAAkBZ,MAAMU,KAAAA;EAE9C,OAAO,CAACA,OAAOV,IAAAA;CACnB;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["JWTError","OAuth2TokenKind","OAuth2OpenIDClaimsBuilder","OAuth2BaseTokenIssuer","OAuth2OpenIDTokenIssuer","repository","signer","identityResolver","claimsBuilder","ctx","options","issue","input","sub_kind","payloadPropertyInvalid","sub","identity","resolve","payloadInvalid","issueWithIdentity","claims","fromIdentity","utc","Math","floor","Date","getTime","iss","buildIss","data","insert","kind","ID_TOKEN","auth_time","exp","buildExp","updated_at","client_id","aud","token","sign","saveWithSignature"],"sources":["../../../../../../src/core/oauth2/token/issuer/open-id/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { JWTError, OAuth2TokenKind } from '@authup/specs';\nimport type { Identity } from '@authup/core-kit';\nimport { OAuth2OpenIDClaimsBuilder } from '../../../openid/index.ts';\nimport type { IOAuth2TokenSigner } from '../../signer/index.ts';\nimport type { IOAuth2TokenRepository } from '../../repository/index.ts';\nimport { OAuth2BaseTokenIssuer } from '../base.ts';\nimport type { OAuth2TokenIssuerResponse } from '../types.ts';\nimport type { IOAuth2OpenIDTokenIssuer, OAuth2OpenIDTokenIssuerContext } from './types.ts';\nimport type { IIdentityResolver } from '../../../../identity/index.ts';\n\nexport class OAuth2OpenIDTokenIssuer extends OAuth2BaseTokenIssuer implements IOAuth2OpenIDTokenIssuer {\n protected repository: IOAuth2TokenRepository;\n\n protected signer : IOAuth2TokenSigner;\n\n protected identityResolver : IIdentityResolver;\n\n protected claimsBuilder: OAuth2OpenIDClaimsBuilder;\n\n constructor(ctx: OAuth2OpenIDTokenIssuerContext) {\n super(ctx.options);\n\n this.repository = ctx.repository;\n this.signer = ctx.signer;\n\n this.identityResolver = ctx.identityResolver;\n this.claimsBuilder = new OAuth2OpenIDClaimsBuilder();\n }\n\n async issue(input: OAuth2TokenPayload = {}) : Promise<OAuth2TokenIssuerResponse> {\n if (!input.sub_kind) {\n throw JWTError.payloadPropertyInvalid('sub_kind');\n }\n\n if (!input.sub) {\n throw JWTError.payloadPropertyInvalid('sub');\n }\n\n const identity = await this.identityResolver.resolve(\n input.sub_kind,\n input.sub,\n );\n\n if (!identity) {\n throw JWTError.payloadInvalid();\n }\n\n return this.issueWithIdentity(input, identity);\n }\n\n async issueWithIdentity(\n input: OAuth2TokenPayload,\n identity: Identity,\n ): Promise<OAuth2TokenIssuerResponse> {\n const claims = this.claimsBuilder.fromIdentity(identity);\n\n const utc = Math.floor(new Date().getTime() / 1000);\n\n const iss = this.buildIss(input);\n\n const data = await this.repository.insert({\n ...input,\n ...claims,\n kind: OAuth2TokenKind.ID_TOKEN,\n // Real authentication time when threaded from the authorize flow\n // (the session's creation instant); fall back to issuance time only\n // for session-less id_token issuance. `sid` rides via ...input.\n auth_time: typeof input.auth_time === 'number' ? input.auth_time : utc,\n exp: this.buildExp(input),\n updated_at: utc,\n ...(iss ? { iss } : {}),\n ...(input.client_id ? { aud: input.client_id } : {}),\n });\n\n const token = await this.signer.sign(data);\n\n await this.repository.saveWithSignature(data, token);\n\n return [token, data];\n }\n}\n"],"mappings":";;;;;;;;AAkBA,IAAaI,0BAAb,cAA6CD,sBAAAA;CAC/BE;CAEAC;CAEAC;CAEAC;CAEV,YAAYC,KAAqC;EAC7C,MAAMA,IAAIC,OAAO;EAEjB,KAAKL,aAAaI,IAAIJ;EACtB,KAAKC,SAASG,IAAIH;EAElB,KAAKC,mBAAmBE,IAAIF;EAC5B,KAAKC,gBAAgB,IAAIN,0BAAAA;CAC7B;CAEA,MAAMS,MAAMC,QAA4B,CAAC,GAAwC;EAC7E,IAAI,CAACA,MAAMC,UACP,MAAMb,SAASc,uBAAuB,UAAA;EAG1C,IAAI,CAACF,MAAMG,KACP,MAAMf,SAASc,uBAAuB,KAAA;EAG1C,MAAME,WAAW,MAAM,KAAKT,iBAAiBU,QACzCL,MAAMC,UACND,MAAMG,GAAG;EAGb,IAAI,CAACC,UACD,MAAMhB,SAASkB,eAAc;EAGjC,OAAO,KAAKC,kBAAkBP,OAAOI,QAAAA;CACzC;CAEA,MAAMG,kBACFP,OACAI,UACkC;EAClC,MAAMI,SAAS,KAAKZ,cAAca,aAAaL,QAAAA;EAE/C,MAAMM,MAAMC,KAAKC,uBAAM,IAAIC,KAAAA,EAAAA,CAAOC,QAAO,IAAK,GAAA;EAE9C,MAAMC,MAAM,KAAKC,SAAShB,KAAAA;EAE1B,MAAMiB,OAAO,MAAM,KAAKxB,WAAWyB,OAAO;GACtC,GAAGlB;GACH,GAAGQ;GACHW,MAAM9B,gBAAgB+B;GAItBC,WAAW,OAAOrB,MAAMqB,cAAc,WAAWrB,MAAMqB,YAAYX;GACnEY,KAAK,KAAKC,SAASvB,KAAAA;GACnBwB,YAAYd;GACZ,GAAIK,MAAM,EAAEA,IAAI,IAAI,CAAC;GACrB,GAAIf,MAAMyB,YAAY,EAAEC,KAAK1B,MAAMyB,UAAU,IAAI,CAAC;EACtD,CAAA;EAEA,MAAME,QAAQ,MAAM,KAAKjC,OAAOkC,KAAKX,IAAAA;EAErC,MAAM,KAAKxB,WAAWoC,kBAAkBZ,MAAMU,KAAAA;EAE9C,OAAO,CAACA,OAAOV,IAAAA;CACnB;AACJ"}
@@ -1,12 +1,14 @@
1
1
  import type { OAuth2TokenPayload } from '@authup/specs';
2
2
  import type { IOAuth2TokenSigner } from '../../signer/index.ts';
3
3
  import type { IOAuth2TokenRepository } from '../../repository/index.ts';
4
+ import type { ISessionTokenRepository } from '../../../session-token/index.ts';
4
5
  import { OAuth2BaseTokenIssuer } from '../base.ts';
5
6
  import type { IOAuth2TokenIssuer, OAuth2TokenIssuerOptions, OAuth2TokenIssuerResponse } from '../types.ts';
6
7
  export declare class OAuth2RefreshTokenIssuer extends OAuth2BaseTokenIssuer implements IOAuth2TokenIssuer {
7
8
  protected repository: IOAuth2TokenRepository;
8
9
  protected signer: IOAuth2TokenSigner;
9
- constructor(repository: IOAuth2TokenRepository, signer: IOAuth2TokenSigner, options?: OAuth2TokenIssuerOptions);
10
+ protected sessionTokenRepository?: ISessionTokenRepository;
11
+ constructor(repository: IOAuth2TokenRepository, signer: IOAuth2TokenSigner, options?: OAuth2TokenIssuerOptions, sessionTokenRepository?: ISessionTokenRepository);
10
12
  issue(input?: OAuth2TokenPayload): Promise<OAuth2TokenIssuerResponse>;
11
13
  }
12
14
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/core/oauth2/token/issuer/refresh/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE3G,qBAAa,wBAAyB,SAAQ,qBAAsB,YAAW,kBAAkB;IAC7F,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAG,kBAAkB,CAAC;gBAGlC,UAAU,EAAE,sBAAsB,EAClC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,wBAA6B;IAQpC,KAAK,CAAC,KAAK,GAAE,kBAAuB,GAAI,OAAO,CAAC,yBAAyB,CAAC;CAgBnF"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../../src/core/oauth2/token/issuer/refresh/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE3G,qBAAa,wBAAyB,SAAQ,qBAAsB,YAAW,kBAAkB;IAC7F,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAG,kBAAkB,CAAC;IAEtC,SAAS,CAAC,sBAAsB,CAAC,EAAE,uBAAuB,CAAC;gBAGvD,UAAU,EAAE,sBAAsB,EAClC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,wBAA6B,EACtC,sBAAsB,CAAC,EAAE,uBAAuB;IAS9C,KAAK,CAAC,KAAK,GAAE,kBAAuB,GAAI,OAAO,CAAC,yBAAyB,CAAC;CA4BnF"}
@@ -7,10 +7,12 @@ import { OAuth2TokenKind } from "@authup/specs";
7
7
  var OAuth2RefreshTokenIssuer = class extends OAuth2BaseTokenIssuer {
8
8
  repository;
9
9
  signer;
10
- constructor(repository, signer, options = {}) {
10
+ sessionTokenRepository;
11
+ constructor(repository, signer, options = {}, sessionTokenRepository) {
11
12
  super(options);
12
13
  this.repository = repository;
13
14
  this.signer = signer;
15
+ this.sessionTokenRepository = sessionTokenRepository;
14
16
  }
15
17
  async issue(input = {}) {
16
18
  const iss = this.buildIss(input);
@@ -22,6 +24,15 @@ var OAuth2RefreshTokenIssuer = class extends OAuth2BaseTokenIssuer {
22
24
  });
23
25
  const token = await this.signer.sign(data);
24
26
  await this.repository.saveWithSignature(data, token);
27
+ if (this.sessionTokenRepository && data.session_id && data.jti && typeof data.exp === "number") await this.sessionTokenRepository.create({
28
+ id: data.jti,
29
+ session_id: data.session_id,
30
+ kind: "refresh",
31
+ parent_id: input.parent_id ?? null,
32
+ ip_address: data.remote_address ?? "",
33
+ user_agent: data.user_agent ?? "",
34
+ expires_at: (/* @__PURE__ */ new Date(data.exp * 1e3)).toISOString()
35
+ });
25
36
  return [token, data];
26
37
  }
27
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["OAuth2TokenKind","OAuth2BaseTokenIssuer","OAuth2RefreshTokenIssuer","repository","signer","options","issue","input","iss","buildIss","data","insert","kind","REFRESH","exp","buildExp","token","sign","saveWithSignature"],"sources":["../../../../../../src/core/oauth2/token/issuer/refresh/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { OAuth2TokenKind } from '@authup/specs';\nimport type { IOAuth2TokenSigner } from '../../signer/index.ts';\nimport type { IOAuth2TokenRepository } from '../../repository/index.ts';\nimport { OAuth2BaseTokenIssuer } from '../base.ts';\nimport type { IOAuth2TokenIssuer, OAuth2TokenIssuerOptions, OAuth2TokenIssuerResponse } from '../types.ts';\n\nexport class OAuth2RefreshTokenIssuer extends OAuth2BaseTokenIssuer implements IOAuth2TokenIssuer {\n protected repository: IOAuth2TokenRepository;\n\n protected signer : IOAuth2TokenSigner;\n\n constructor(\n repository: IOAuth2TokenRepository,\n signer: IOAuth2TokenSigner,\n options: OAuth2TokenIssuerOptions = {},\n ) {\n super(options);\n\n this.repository = repository;\n this.signer = signer;\n }\n\n async issue(input: OAuth2TokenPayload = {}) : Promise<OAuth2TokenIssuerResponse> {\n const iss = this.buildIss(input);\n\n const data = await this.repository.insert({\n ...input,\n kind: OAuth2TokenKind.REFRESH,\n exp: this.buildExp(input),\n ...(iss ? { iss } : {}),\n });\n\n const token = await this.signer.sign(data);\n\n await this.repository.saveWithSignature(data, token);\n\n return [token, data];\n }\n}\n"],"mappings":";;;;;;AAcA,IAAaE,2BAAb,cAA8CD,sBAAAA;CAChCE;CAEAC;CAEV,YACID,YACAC,QACAC,UAAoC,CAAC,GACvC;EACE,MAAMA,OAAAA;EAEN,KAAKF,aAAaA;EAClB,KAAKC,SAASA;CAClB;CAEA,MAAME,MAAMC,QAA4B,CAAC,GAAwC;EAC7E,MAAMC,MAAM,KAAKC,SAASF,KAAAA;EAE1B,MAAMG,OAAO,MAAM,KAAKP,WAAWQ,OAAO;GACtC,GAAGJ;GACHK,MAAMZ,gBAAgBa;GACtBC,KAAK,KAAKC,SAASR,KAAAA;GACnB,GAAIC,MAAM,EAAEA,IAAI,IAAI,CAAC;EACzB,CAAA;EAEA,MAAMQ,QAAQ,MAAM,KAAKZ,OAAOa,KAAKP,IAAAA;EAErC,MAAM,KAAKP,WAAWe,kBAAkBR,MAAMM,KAAAA;EAE9C,OAAO,CAACA,OAAON,IAAAA;CACnB;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["OAuth2TokenKind","OAuth2BaseTokenIssuer","OAuth2RefreshTokenIssuer","repository","signer","sessionTokenRepository","options","issue","input","iss","buildIss","data","insert","kind","REFRESH","exp","buildExp","token","sign","saveWithSignature","session_id","jti","create","id","parent_id","ip_address","remote_address","user_agent","expires_at","Date","toISOString"],"sources":["../../../../../../src/core/oauth2/token/issuer/refresh/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { OAuth2TokenKind } from '@authup/specs';\nimport type { IOAuth2TokenSigner } from '../../signer/index.ts';\nimport type { IOAuth2TokenRepository } from '../../repository/index.ts';\nimport type { ISessionTokenRepository } from '../../../session-token/index.ts';\nimport { OAuth2BaseTokenIssuer } from '../base.ts';\nimport type { IOAuth2TokenIssuer, OAuth2TokenIssuerOptions, OAuth2TokenIssuerResponse } from '../types.ts';\n\nexport class OAuth2RefreshTokenIssuer extends OAuth2BaseTokenIssuer implements IOAuth2TokenIssuer {\n protected repository: IOAuth2TokenRepository;\n\n protected signer : IOAuth2TokenSigner;\n\n protected sessionTokenRepository?: ISessionTokenRepository;\n\n constructor(\n repository: IOAuth2TokenRepository,\n signer: IOAuth2TokenSigner,\n options: OAuth2TokenIssuerOptions = {},\n sessionTokenRepository?: ISessionTokenRepository,\n ) {\n super(options);\n\n this.repository = repository;\n this.signer = signer;\n this.sessionTokenRepository = sessionTokenRepository;\n }\n\n async issue(input: OAuth2TokenPayload = {}) : Promise<OAuth2TokenIssuerResponse> {\n const iss = this.buildIss(input);\n\n const data = await this.repository.insert({\n ...input,\n kind: OAuth2TokenKind.REFRESH,\n exp: this.buildExp(input),\n ...(iss ? { iss } : {}),\n });\n\n const token = await this.signer.sign(data);\n\n await this.repository.saveWithSignature(data, token);\n\n if (this.sessionTokenRepository && data.session_id && data.jti && typeof data.exp === 'number') {\n await this.sessionTokenRepository.create({\n id: data.jti,\n session_id: data.session_id,\n kind: 'refresh',\n parent_id: input.parent_id ?? null,\n ip_address: data.remote_address ?? '',\n user_agent: data.user_agent ?? '',\n expires_at: new Date(data.exp * 1000).toISOString(),\n });\n }\n\n return [token, data];\n }\n}\n"],"mappings":";;;;;;AAeA,IAAaE,2BAAb,cAA8CD,sBAAAA;CAChCE;CAEAC;CAEAC;CAEV,YACIF,YACAC,QACAE,UAAoC,CAAC,GACrCD,wBACF;EACE,MAAMC,OAAAA;EAEN,KAAKH,aAAaA;EAClB,KAAKC,SAASA;EACd,KAAKC,yBAAyBA;CAClC;CAEA,MAAME,MAAMC,QAA4B,CAAC,GAAwC;EAC7E,MAAMC,MAAM,KAAKC,SAASF,KAAAA;EAE1B,MAAMG,OAAO,MAAM,KAAKR,WAAWS,OAAO;GACtC,GAAGJ;GACHK,MAAMb,gBAAgBc;GACtBC,KAAK,KAAKC,SAASR,KAAAA;GACnB,GAAIC,MAAM,EAAEA,IAAI,IAAI,CAAC;EACzB,CAAA;EAEA,MAAMQ,QAAQ,MAAM,KAAKb,OAAOc,KAAKP,IAAAA;EAErC,MAAM,KAAKR,WAAWgB,kBAAkBR,MAAMM,KAAAA;EAE9C,IAAI,KAAKZ,0BAA0BM,KAAKS,cAAcT,KAAKU,OAAO,OAAOV,KAAKI,QAAQ,UAClF,MAAM,KAAKV,uBAAuBiB,OAAO;GACrCC,IAAIZ,KAAKU;GACTD,YAAYT,KAAKS;GACjBP,MAAM;GACNW,WAAWhB,MAAMgB,aAAa;GAC9BC,YAAYd,KAAKe,kBAAkB;GACnCC,YAAYhB,KAAKgB,cAAc;GAC/BC,6BAAY,IAAIC,KAAKlB,KAAKI,MAAM,GAAA,EAAA,CAAMe,YAAW;EACrD,CAAA;EAGJ,OAAO,CAACb,OAAON,IAAAA;CACnB;AACJ"}
@@ -1,9 +1,11 @@
1
1
  import type { OAuth2TokenPayload } from '@authup/specs';
2
2
  import type { IOAuth2TokenRepository } from '../repository/index.ts';
3
+ import type { ISessionTokenRepository } from '../../session-token/index.ts';
3
4
  import type { IOAuth2TokenRevoker } from './types.ts';
4
5
  export declare class OAuth2TokenRevoker implements IOAuth2TokenRevoker {
5
6
  protected repository: IOAuth2TokenRepository;
6
- constructor(repository: IOAuth2TokenRepository);
7
+ protected sessionTokenRepository?: ISessionTokenRepository;
8
+ constructor(repository: IOAuth2TokenRepository, sessionTokenRepository?: ISessionTokenRepository);
7
9
  revoke(input: OAuth2TokenPayload): Promise<void>;
8
10
  }
9
11
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/oauth2/token/revoker/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,qBAAa,kBAAmB,YAAW,mBAAmB;IAC1D,SAAS,CAAC,UAAU,EAAG,sBAAsB,CAAC;gBAElC,UAAU,EAAG,sBAAsB;IAIzC,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAI,OAAO,CAAC,IAAI,CAAC;CAO1D"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/oauth2/token/revoker/module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,qBAAa,kBAAmB,YAAW,mBAAmB;IAC1D,SAAS,CAAC,UAAU,EAAG,sBAAsB,CAAC;IAE9C,SAAS,CAAC,sBAAsB,CAAC,EAAG,uBAAuB,CAAC;gBAGxD,UAAU,EAAG,sBAAsB,EACnC,sBAAsB,CAAC,EAAG,uBAAuB;IAM/C,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAI,OAAO,CAAC,IAAI,CAAC;CAa1D"}
@@ -5,12 +5,15 @@ import { JWTError } from "@authup/specs";
5
5
  //#region src/core/oauth2/token/revoker/module.ts
6
6
  var OAuth2TokenRevoker = class {
7
7
  repository;
8
- constructor(repository) {
8
+ sessionTokenRepository;
9
+ constructor(repository, sessionTokenRepository) {
9
10
  this.repository = repository;
11
+ this.sessionTokenRepository = sessionTokenRepository;
10
12
  }
11
13
  async revoke(input) {
12
14
  if (!input.jti) throw JWTError.payloadPropertyInvalid("jti");
13
15
  await this.repository.removeById(input.jti);
16
+ if (this.sessionTokenRepository) await this.sessionTokenRepository.revokeById(input.jti, (/* @__PURE__ */ new Date()).toISOString());
14
17
  }
15
18
  };
16
19
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["JWTError","OAuth2TokenRevoker","repository","revoke","input","jti","payloadPropertyInvalid","removeById"],"sources":["../../../../../src/core/oauth2/token/revoker/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { JWTError } from '@authup/specs';\nimport type { IOAuth2TokenRepository } from '../repository/index.ts';\nimport type { IOAuth2TokenRevoker } from './types.ts';\n\nexport class OAuth2TokenRevoker implements IOAuth2TokenRevoker {\n protected repository : IOAuth2TokenRepository;\n\n constructor(repository : IOAuth2TokenRepository) {\n this.repository = repository;\n }\n\n async revoke(input: OAuth2TokenPayload) : Promise<void> {\n if (!input.jti) {\n throw JWTError.payloadPropertyInvalid('jti');\n }\n\n await this.repository.removeById(input.jti);\n }\n}\n"],"mappings":";;;;;AAYA,IAAaC,qBAAb,MAAaA;CACCC;CAEV,YAAYA,YAAqC;EAC7C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,OAAOC,OAA2C;EACpD,IAAI,CAACA,MAAMC,KACP,MAAML,SAASM,uBAAuB,KAAA;EAG1C,MAAM,KAAKJ,WAAWK,WAAWH,MAAMC,GAAG;CAC9C;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["JWTError","OAuth2TokenRevoker","repository","sessionTokenRepository","revoke","input","jti","payloadPropertyInvalid","removeById","revokeById","Date","toISOString"],"sources":["../../../../../src/core/oauth2/token/revoker/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { JWTError } from '@authup/specs';\nimport type { IOAuth2TokenRepository } from '../repository/index.ts';\nimport type { ISessionTokenRepository } from '../../session-token/index.ts';\nimport type { IOAuth2TokenRevoker } from './types.ts';\n\nexport class OAuth2TokenRevoker implements IOAuth2TokenRevoker {\n protected repository : IOAuth2TokenRepository;\n\n protected sessionTokenRepository? : ISessionTokenRepository;\n\n constructor(\n repository : IOAuth2TokenRepository,\n sessionTokenRepository? : ISessionTokenRepository,\n ) {\n this.repository = repository;\n this.sessionTokenRepository = sessionTokenRepository;\n }\n\n async revoke(input: OAuth2TokenPayload) : Promise<void> {\n if (!input.jti) {\n throw JWTError.payloadPropertyInvalid('jti');\n }\n\n await this.repository.removeById(input.jti);\n\n // Soft-revoke the durable row so a refresh grant (which trusts the row,\n // not the cache blocklist) rejects an explicitly revoked refresh token.\n if (this.sessionTokenRepository) {\n await this.sessionTokenRepository.revokeById(input.jti, new Date().toISOString());\n }\n }\n}\n"],"mappings":";;;;;AAaA,IAAaC,qBAAb,MAAaA;CACCC;CAEAC;CAEV,YACID,YACAC,wBACF;EACE,KAAKD,aAAaA;EAClB,KAAKC,yBAAyBA;CAClC;CAEA,MAAMC,OAAOC,OAA2C;EACpD,IAAI,CAACA,MAAMC,KACP,MAAMN,SAASO,uBAAuB,KAAA;EAG1C,MAAM,KAAKL,WAAWM,WAAWH,MAAMC,GAAG;EAI1C,IAAI,KAAKH,wBACL,MAAM,KAAKA,uBAAuBM,WAAWJ,MAAMC,sBAAK,IAAII,KAAAA,EAAAA,CAAOC,YAAW,CAAA;CAEtF;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/oauth2/token/verifier/module.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEjF,qBAAa,mBAAoB,YAAW,oBAAoB;IAC5D,SAAS,CAAC,aAAa,EAAG,oBAAoB,CAAC;IAE/C,SAAS,CAAC,eAAe,EAAG,sBAAsB,CAAC;gBAG/C,aAAa,EAAG,oBAAoB,EACpC,eAAe,EAAG,sBAAsB;IAMtC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAI,OAAO,CAAC,kBAAkB,CAAC;CAgGpG"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/core/oauth2/token/verifier/module.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEjF,qBAAa,mBAAoB,YAAW,oBAAoB;IAC5D,SAAS,CAAC,aAAa,EAAG,oBAAoB,CAAC;IAE/C,SAAS,CAAC,eAAe,EAAG,sBAAsB,CAAC;gBAG/C,aAAa,EAAG,oBAAoB,EACpC,eAAe,EAAG,sBAAsB;IAMtC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAI,OAAO,CAAC,kBAAkB,CAAC;CA6GpG"}
@@ -33,7 +33,7 @@ var OAuth2TokenVerifier = class {
33
33
  payload = await verifyToken(token, {
34
34
  type: JWKType.OCT,
35
35
  key: key.decryption_key
36
- });
36
+ }, { ignoreExpiry: options.ignoreExpiry });
37
37
  break;
38
38
  case JWKType.EC:
39
39
  if (!key.encryption_key) throw JWKError.decryptionKeyMissing();
@@ -41,7 +41,7 @@ var OAuth2TokenVerifier = class {
41
41
  type: key.type,
42
42
  key: key.encryption_key,
43
43
  ...key.signature_algorithm ? { algorithms: [key.signature_algorithm] } : []
44
- });
44
+ }, { ignoreExpiry: options.ignoreExpiry });
45
45
  break;
46
46
  default:
47
47
  if (!key.encryption_key) throw JWKError.decryptionKeyMissing();
@@ -49,10 +49,10 @@ var OAuth2TokenVerifier = class {
49
49
  type: key.type,
50
50
  key: key.encryption_key,
51
51
  ...key.signature_algorithm ? { algorithms: [key.signature_algorithm] } : []
52
- });
52
+ }, { ignoreExpiry: options.ignoreExpiry });
53
53
  }
54
54
  if (!payload.jti) throw JWTError.payloadPropertyInvalid("jti");
55
- await this.tokenRepository.saveWithSignature(payload, token);
55
+ if (!options.ignoreExpiry) await this.tokenRepository.saveWithSignature(payload, token);
56
56
  if (!options.skipActiveCheck) {
57
57
  if (await this.isInactive(payload.jti)) throw JWTError.notActive();
58
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["extractTokenHeader","verifyToken","JWKError","JWKType","JWTError","OAuth2TokenVerifier","keyRepository","tokenRepository","isInactive","id","verify","token","options","payload","findOneBySignature","jti","payloadPropertyInvalid","skipActiveCheck","notActive","header","kid","headerPropertyInvalid","key","findById","notFound","type","OCT","decryption_key","decryptionKeyMissing","EC","encryption_key","signature_algorithm","algorithms","saveWithSignature"],"sources":["../../../../../src/core/oauth2/token/verifier/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n type TokenECAlgorithm, \n type TokenRSAAlgorithm, \n extractTokenHeader, \n verifyToken,\n} from '@authup/server-kit';\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { JWKError, JWKType, JWTError } from '@authup/specs';\nimport type { IOAuth2KeyRepository } from '../../key/index.ts';\nimport type { IOAuth2TokenRepository } from '../repository/types.ts';\nimport type { IOAuth2TokenVerifier, OAuth2TokenVerifyOptions } from './types.ts';\n\nexport class OAuth2TokenVerifier implements IOAuth2TokenVerifier {\n protected keyRepository : IOAuth2KeyRepository;\n\n protected tokenRepository : IOAuth2TokenRepository;\n\n constructor(\n keyRepository : IOAuth2KeyRepository,\n tokenRepository : IOAuth2TokenRepository,\n ) {\n this.keyRepository = keyRepository;\n this.tokenRepository = tokenRepository;\n }\n\n async isInactive(id: string): Promise<boolean> {\n return this.tokenRepository.isInactive(id);\n }\n\n async verify(token: string, options: OAuth2TokenVerifyOptions = {}) : Promise<OAuth2TokenPayload> {\n let payload = await this.tokenRepository.findOneBySignature(token);\n if (payload) {\n if (!payload.jti) {\n throw JWTError.payloadPropertyInvalid('jti');\n }\n\n if (!options.skipActiveCheck) {\n const isInactive = await this.isInactive(payload.jti);\n if (isInactive) {\n throw JWTError.notActive();\n }\n }\n\n return payload;\n }\n\n const header = extractTokenHeader(token);\n if (!header.kid) {\n throw JWTError.headerPropertyInvalid('kid');\n }\n\n const key = await this.keyRepository.findById(header.kid);\n if (!key) {\n throw JWKError.notFound(header.kid);\n }\n\n switch (key.type) {\n case JWKType.OCT: {\n if (!key.decryption_key) {\n throw JWKError.decryptionKeyMissing();\n }\n\n payload = await verifyToken(\n token,\n {\n type: JWKType.OCT,\n key: key.decryption_key,\n },\n );\n break;\n }\n case JWKType.EC: {\n if (!key.encryption_key) {\n throw JWKError.decryptionKeyMissing();\n }\n\n payload = await verifyToken(\n token,\n {\n type: key.type,\n key: key.encryption_key,\n ...(\n key.signature_algorithm ?\n { algorithms: [key.signature_algorithm] } :\n []\n ) as TokenECAlgorithm[],\n },\n );\n break;\n }\n default: {\n if (!key.encryption_key) {\n throw JWKError.decryptionKeyMissing();\n }\n\n payload = await verifyToken(\n token,\n {\n type: key.type,\n key: key.encryption_key,\n ...(\n key.signature_algorithm ?\n { algorithms: [key.signature_algorithm] } :\n []\n ) as TokenRSAAlgorithm[],\n },\n );\n }\n }\n\n if (!payload.jti) {\n throw JWTError.payloadPropertyInvalid('jti');\n }\n\n await this.tokenRepository.saveWithSignature(payload, token);\n\n if (!options.skipActiveCheck) {\n const isInactive = await this.isInactive(payload.jti);\n if (isInactive) {\n throw JWTError.notActive();\n }\n }\n\n return payload;\n }\n}\n"],"mappings":";;;;;;AAmBA,IAAaK,sBAAb,MAAaA;CACCC;CAEAC;CAEV,YACID,eACAC,iBACF;EACE,KAAKD,gBAAgBA;EACrB,KAAKC,kBAAkBA;CAC3B;CAEA,MAAMC,WAAWC,IAA8B;EAC3C,OAAO,KAAKF,gBAAgBC,WAAWC,EAAAA;CAC3C;CAEA,MAAMC,OAAOC,OAAeC,UAAoC,CAAC,GAAiC;EAC9F,IAAIC,UAAU,MAAM,KAAKN,gBAAgBO,mBAAmBH,KAAAA;EAC5D,IAAIE,SAAS;GACT,IAAI,CAACA,QAAQE,KACT,MAAMX,SAASY,uBAAuB,KAAA;GAG1C,IAAI,CAACJ,QAAQK;QAELT,MADqB,KAAKA,WAAWK,QAAQE,GAAG,GAEhD,MAAMX,SAASc,UAAS;GAAA;GAIhC,OAAOL;EACX;EAEA,MAAMM,SAASnB,mBAAmBW,KAAAA;EAClC,IAAI,CAACQ,OAAOC,KACR,MAAMhB,SAASiB,sBAAsB,KAAA;EAGzC,MAAMC,MAAM,MAAM,KAAKhB,cAAciB,SAASJ,OAAOC,GAAG;EACxD,IAAI,CAACE,KACD,MAAMpB,SAASsB,SAASL,OAAOC,GAAG;EAGtC,QAAQE,IAAIG,MAAZ;GACI,KAAKtB,QAAQuB;IACT,IAAI,CAACJ,IAAIK,gBACL,MAAMzB,SAAS0B,qBAAoB;IAGvCf,UAAU,MAAMZ,YACZU,OACA;KACIc,MAAMtB,QAAQuB;KACdJ,KAAKA,IAAIK;IACb,CAAA;IAEJ;GAEJ,KAAKxB,QAAQ0B;IACT,IAAI,CAACP,IAAIQ,gBACL,MAAM5B,SAAS0B,qBAAoB;IAGvCf,UAAU,MAAMZ,YACZU,OACA;KACIc,MAAMH,IAAIG;KACVH,KAAKA,IAAIQ;KACT,GACIR,IAAIS,sBACA,EAAEC,YAAY,CAACV,IAAIS,mBAAAA,EAAqB,IACxC,CAAA;IAEZ,CAAA;IAEJ;GAEJ;IACI,IAAI,CAACT,IAAIQ,gBACL,MAAM5B,SAAS0B,qBAAoB;IAGvCf,UAAU,MAAMZ,YACZU,OACA;KACIc,MAAMH,IAAIG;KACVH,KAAKA,IAAIQ;KACT,GACIR,IAAIS,sBACA,EAAEC,YAAY,CAACV,IAAIS,mBAAAA,EAAqB,IACxC,CAAA;IAEZ,CAAA;EAGZ;EAEA,IAAI,CAAClB,QAAQE,KACT,MAAMX,SAASY,uBAAuB,KAAA;EAG1C,MAAM,KAAKT,gBAAgB0B,kBAAkBpB,SAASF,KAAAA;EAEtD,IAAI,CAACC,QAAQK;OAELT,MADqB,KAAKA,WAAWK,QAAQE,GAAG,GAEhD,MAAMX,SAASc,UAAS;EAAA;EAIhC,OAAOL;CACX;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["extractTokenHeader","verifyToken","JWKError","JWKType","JWTError","OAuth2TokenVerifier","keyRepository","tokenRepository","isInactive","id","verify","token","options","payload","findOneBySignature","jti","payloadPropertyInvalid","skipActiveCheck","notActive","header","kid","headerPropertyInvalid","key","findById","notFound","type","OCT","decryption_key","decryptionKeyMissing","ignoreExpiry","EC","encryption_key","signature_algorithm","algorithms","saveWithSignature"],"sources":["../../../../../src/core/oauth2/token/verifier/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n type TokenECAlgorithm,\n type TokenRSAAlgorithm,\n extractTokenHeader,\n verifyToken,\n} from '@authup/server-kit';\nimport type { OAuth2TokenPayload } from '@authup/specs';\nimport { JWKError, JWKType, JWTError } from '@authup/specs';\nimport type { IOAuth2KeyRepository } from '../../key/index.ts';\nimport type { IOAuth2TokenRepository } from '../repository/types.ts';\nimport type { IOAuth2TokenVerifier, OAuth2TokenVerifyOptions } from './types.ts';\n\nexport class OAuth2TokenVerifier implements IOAuth2TokenVerifier {\n protected keyRepository : IOAuth2KeyRepository;\n\n protected tokenRepository : IOAuth2TokenRepository;\n\n constructor(\n keyRepository : IOAuth2KeyRepository,\n tokenRepository : IOAuth2TokenRepository,\n ) {\n this.keyRepository = keyRepository;\n this.tokenRepository = tokenRepository;\n }\n\n async isInactive(id: string): Promise<boolean> {\n return this.tokenRepository.isInactive(id);\n }\n\n async verify(token: string, options: OAuth2TokenVerifyOptions = {}) : Promise<OAuth2TokenPayload> {\n let payload = await this.tokenRepository.findOneBySignature(token);\n if (payload) {\n if (!payload.jti) {\n throw JWTError.payloadPropertyInvalid('jti');\n }\n\n if (!options.skipActiveCheck) {\n const isInactive = await this.isInactive(payload.jti);\n if (isInactive) {\n throw JWTError.notActive();\n }\n }\n\n return payload;\n }\n\n const header = extractTokenHeader(token);\n if (!header.kid) {\n throw JWTError.headerPropertyInvalid('kid');\n }\n\n const key = await this.keyRepository.findById(header.kid);\n if (!key) {\n throw JWKError.notFound(header.kid);\n }\n\n switch (key.type) {\n case JWKType.OCT: {\n if (!key.decryption_key) {\n throw JWKError.decryptionKeyMissing();\n }\n\n payload = await verifyToken(\n token,\n {\n type: JWKType.OCT,\n key: key.decryption_key,\n },\n { ignoreExpiry: options.ignoreExpiry },\n );\n break;\n }\n case JWKType.EC: {\n if (!key.encryption_key) {\n throw JWKError.decryptionKeyMissing();\n }\n\n payload = await verifyToken(\n token,\n {\n type: key.type,\n key: key.encryption_key,\n ...(\n key.signature_algorithm ?\n { algorithms: [key.signature_algorithm] } :\n []\n ) as TokenECAlgorithm[],\n },\n { ignoreExpiry: options.ignoreExpiry },\n );\n break;\n }\n default: {\n if (!key.encryption_key) {\n throw JWKError.decryptionKeyMissing();\n }\n\n payload = await verifyToken(\n token,\n {\n type: key.type,\n key: key.encryption_key,\n ...(\n key.signature_algorithm ?\n { algorithms: [key.signature_algorithm] } :\n []\n ) as TokenRSAAlgorithm[],\n },\n { ignoreExpiry: options.ignoreExpiry },\n );\n }\n }\n\n if (!payload.jti) {\n throw JWTError.payloadPropertyInvalid('jti');\n }\n\n // Never populate the shared signature-keyed claims cache on the\n // exp-ignoring path. An expired token verified with `ignoreExpiry`\n // (the RP-initiated-logout id_token_hint) would otherwise be re-cached\n // with buildTTL's 1h fallback (a past exp yields a non-positive ttl),\n // and the cache-first branch above returns it with no exp re-check on\n // every subsequent verify — so `/token/introspect` would report an\n // expired token as active for up to an hour (RFC 7662). Keep the\n // exp-bypass scoped to this single call.\n if (!options.ignoreExpiry) {\n await this.tokenRepository.saveWithSignature(payload, token);\n }\n\n if (!options.skipActiveCheck) {\n const isInactive = await this.isInactive(payload.jti);\n if (isInactive) {\n throw JWTError.notActive();\n }\n }\n\n return payload;\n }\n}\n"],"mappings":";;;;;;AAmBA,IAAaK,sBAAb,MAAaA;CACCC;CAEAC;CAEV,YACID,eACAC,iBACF;EACE,KAAKD,gBAAgBA;EACrB,KAAKC,kBAAkBA;CAC3B;CAEA,MAAMC,WAAWC,IAA8B;EAC3C,OAAO,KAAKF,gBAAgBC,WAAWC,EAAAA;CAC3C;CAEA,MAAMC,OAAOC,OAAeC,UAAoC,CAAC,GAAiC;EAC9F,IAAIC,UAAU,MAAM,KAAKN,gBAAgBO,mBAAmBH,KAAAA;EAC5D,IAAIE,SAAS;GACT,IAAI,CAACA,QAAQE,KACT,MAAMX,SAASY,uBAAuB,KAAA;GAG1C,IAAI,CAACJ,QAAQK;QAELT,MADqB,KAAKA,WAAWK,QAAQE,GAAG,GAEhD,MAAMX,SAASc,UAAS;GAAA;GAIhC,OAAOL;EACX;EAEA,MAAMM,SAASnB,mBAAmBW,KAAAA;EAClC,IAAI,CAACQ,OAAOC,KACR,MAAMhB,SAASiB,sBAAsB,KAAA;EAGzC,MAAMC,MAAM,MAAM,KAAKhB,cAAciB,SAASJ,OAAOC,GAAG;EACxD,IAAI,CAACE,KACD,MAAMpB,SAASsB,SAASL,OAAOC,GAAG;EAGtC,QAAQE,IAAIG,MAAZ;GACI,KAAKtB,QAAQuB;IACT,IAAI,CAACJ,IAAIK,gBACL,MAAMzB,SAAS0B,qBAAoB;IAGvCf,UAAU,MAAMZ,YACZU,OACA;KACIc,MAAMtB,QAAQuB;KACdJ,KAAKA,IAAIK;IACb,GACA,EAAEE,cAAcjB,QAAQiB,aAAa,CAAA;IAEzC;GAEJ,KAAK1B,QAAQ2B;IACT,IAAI,CAACR,IAAIS,gBACL,MAAM7B,SAAS0B,qBAAoB;IAGvCf,UAAU,MAAMZ,YACZU,OACA;KACIc,MAAMH,IAAIG;KACVH,KAAKA,IAAIS;KACT,GACIT,IAAIU,sBACA,EAAEC,YAAY,CAACX,IAAIU,mBAAAA,EAAqB,IACxC,CAAA;IAEZ,GACA,EAAEH,cAAcjB,QAAQiB,aAAa,CAAA;IAEzC;GAEJ;IACI,IAAI,CAACP,IAAIS,gBACL,MAAM7B,SAAS0B,qBAAoB;IAGvCf,UAAU,MAAMZ,YACZU,OACA;KACIc,MAAMH,IAAIG;KACVH,KAAKA,IAAIS;KACT,GACIT,IAAIU,sBACA,EAAEC,YAAY,CAACX,IAAIU,mBAAAA,EAAqB,IACxC,CAAA;IAEZ,GACA,EAAEH,cAAcjB,QAAQiB,aAAa,CAAA;EAGjD;EAEA,IAAI,CAAChB,QAAQE,KACT,MAAMX,SAASY,uBAAuB,KAAA;EAW1C,IAAI,CAACJ,QAAQiB,cACT,MAAM,KAAKtB,gBAAgB2B,kBAAkBrB,SAASF,KAAAA;EAG1D,IAAI,CAACC,QAAQK;OAELT,MADqB,KAAKA,WAAWK,QAAQE,GAAG,GAEhD,MAAMX,SAASc,UAAS;EAAA;EAIhC,OAAOL;CACX;AACJ"}
@@ -1,6 +1,12 @@
1
1
  import type { OAuth2TokenPayload } from '@authup/specs';
2
2
  export type OAuth2TokenVerifyOptions = {
3
3
  skipActiveCheck?: boolean;
4
+ /**
5
+ * Skip ONLY the `exp` check (signature, issuer, nbf still enforced). For
6
+ * verifying an `id_token_hint` on RP-initiated logout, which is routinely
7
+ * expired by the time the user logs out.
8
+ */
9
+ ignoreExpiry?: boolean;
4
10
  };
5
11
  export interface IOAuth2TokenVerifier {
6
12
  isInactive(token: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/oauth2/token/verifier/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,MAAM,wBAAwB,GAAG;IACnC,eAAe,CAAC,EAAE,OAAO,CAAA;CAC5B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACjC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAI,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC1F"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/oauth2/token/verifier/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,MAAM,wBAAwB,GAAG;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACjC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAI,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC1F"}
@@ -1 +1 @@
1
- {"version":3,"file":"relations-validator.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/entities/client/relations-validator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIpC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,oCAAqC,SAAQ,SAAS,CAAC,2BAA2B,CAAC;IAC5F,SAAS,CAAC,UAAU;CA0BvB"}
1
+ {"version":3,"file":"relations-validator.d.ts","sourceRoot":"","sources":["../../../../../src/core/provisioning/entities/client/relations-validator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKpC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE9D,qBAAa,oCAAqC,SAAQ,SAAS,CAAC,2BAA2B,CAAC;IAC5F,SAAS,CAAC,UAAU;CAkCvB"}
@@ -5,6 +5,7 @@ import { PermissionProvisioningValidator } from "../permission/validator.mjs";
5
5
  import "../permission/index.mjs";
6
6
  import { RoleProvisioningValidator } from "../role/validator.mjs";
7
7
  import "../role/index.mjs";
8
+ import { createProvisioningEntitiesValidator } from "../utils.mjs";
8
9
  import { Container } from "validup";
9
10
  import { createValidator } from "@validup/zod";
10
11
  import { z } from "zod";
@@ -14,10 +15,10 @@ var ClientProvisioningRelationsValidator = class extends Container {
14
15
  super.initialize();
15
16
  const permissionValidator = new PermissionProvisioningValidator();
16
17
  const roleValidator = new RoleProvisioningValidator();
17
- this.mount("permissions.*", { optional: true }, permissionValidator);
18
+ this.mount("permissions", { optional: true }, createValidator(z.array(z.any()).check(createProvisioningEntitiesValidator(permissionValidator))));
18
19
  this.mount("realmPermissions", { optional: true }, createValidator(z.array(z.string())));
19
20
  this.mount("globalPermissions", { optional: true }, createValidator(z.array(z.string())));
20
- this.mount("roles.*", { optional: true }, roleValidator);
21
+ this.mount("roles", { optional: true }, createValidator(z.array(z.any()).check(createProvisioningEntitiesValidator(roleValidator))));
21
22
  this.mount("realmRoles", { optional: true }, createValidator(z.array(z.string())));
22
23
  this.mount("globalRoles", { optional: true }, createValidator(z.array(z.string())));
23
24
  }