@authup/server-core 1.0.0-beta.59 → 1.0.0-beta.60

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 (409) hide show
  1. package/dist/adapters/database/domains/client/entity.d.ts.map +1 -1
  2. package/dist/adapters/database/domains/client/entity.mjs +58 -30
  3. package/dist/adapters/database/domains/client/entity.mjs.map +1 -1
  4. package/dist/adapters/database/domains/client-permission/entity.d.ts.map +1 -1
  5. package/dist/adapters/database/domains/client-permission/entity.mjs +48 -24
  6. package/dist/adapters/database/domains/client-permission/entity.mjs.map +1 -1
  7. package/dist/adapters/database/domains/client-role/entity.d.ts.map +1 -1
  8. package/dist/adapters/database/domains/client-role/entity.mjs +37 -17
  9. package/dist/adapters/database/domains/client-role/entity.mjs.map +1 -1
  10. package/dist/adapters/database/domains/client-scope/entity.d.ts.map +1 -1
  11. package/dist/adapters/database/domains/client-scope/entity.mjs +30 -14
  12. package/dist/adapters/database/domains/client-scope/entity.mjs.map +1 -1
  13. package/dist/adapters/database/domains/consent/entity.d.ts.map +1 -1
  14. package/dist/adapters/database/domains/consent/entity.mjs +34 -18
  15. package/dist/adapters/database/domains/consent/entity.mjs.map +1 -1
  16. package/dist/adapters/database/domains/event/entity.d.ts +1 -0
  17. package/dist/adapters/database/domains/event/entity.d.ts.map +1 -1
  18. package/dist/adapters/database/domains/event/entity.mjs +48 -23
  19. package/dist/adapters/database/domains/event/entity.mjs.map +1 -1
  20. package/dist/adapters/database/domains/identity-provider/entity.d.ts.map +1 -1
  21. package/dist/adapters/database/domains/identity-provider/entity.mjs +43 -23
  22. package/dist/adapters/database/domains/identity-provider/entity.mjs.map +1 -1
  23. package/dist/adapters/database/domains/identity-provider-account/entity.d.ts.map +1 -1
  24. package/dist/adapters/database/domains/identity-provider-account/entity.mjs +50 -22
  25. package/dist/adapters/database/domains/identity-provider-account/entity.mjs.map +1 -1
  26. package/dist/adapters/database/domains/identity-provider-attribute/entity.d.ts.map +1 -1
  27. package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs +14 -6
  28. package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs.map +1 -1
  29. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.d.ts.map +1 -1
  30. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs +5 -1
  31. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs.map +1 -1
  32. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.d.ts.map +1 -1
  33. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs +18 -6
  34. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs.map +1 -1
  35. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.d.ts.map +1 -1
  36. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs +34 -14
  37. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs.map +1 -1
  38. package/dist/adapters/database/domains/key/entity.d.ts.map +1 -1
  39. package/dist/adapters/database/domains/key/entity.mjs +35 -19
  40. package/dist/adapters/database/domains/key/entity.mjs.map +1 -1
  41. package/dist/adapters/database/domains/permission/entity.d.ts.map +1 -1
  42. package/dist/adapters/database/domains/permission/entity.mjs +35 -19
  43. package/dist/adapters/database/domains/permission/entity.mjs.map +1 -1
  44. package/dist/adapters/database/domains/permission-policy/entity.d.ts.map +1 -1
  45. package/dist/adapters/database/domains/permission-policy/entity.mjs +37 -17
  46. package/dist/adapters/database/domains/permission-policy/entity.mjs.map +1 -1
  47. package/dist/adapters/database/domains/policy/entity.d.ts.map +1 -1
  48. package/dist/adapters/database/domains/policy/entity.mjs +51 -27
  49. package/dist/adapters/database/domains/policy/entity.mjs.map +1 -1
  50. package/dist/adapters/database/domains/policy-attribute/entity.d.ts.map +1 -1
  51. package/dist/adapters/database/domains/policy-attribute/entity.mjs +14 -6
  52. package/dist/adapters/database/domains/policy-attribute/entity.mjs.map +1 -1
  53. package/dist/adapters/database/domains/realm/entity.d.ts.map +1 -1
  54. package/dist/adapters/database/domains/realm/entity.mjs +36 -20
  55. package/dist/adapters/database/domains/realm/entity.mjs.map +1 -1
  56. package/dist/adapters/database/domains/role/entity.d.ts.map +1 -1
  57. package/dist/adapters/database/domains/role/entity.mjs +44 -24
  58. package/dist/adapters/database/domains/role/entity.mjs.map +1 -1
  59. package/dist/adapters/database/domains/role-attribute/entity.d.ts.map +1 -1
  60. package/dist/adapters/database/domains/role-attribute/entity.mjs +30 -14
  61. package/dist/adapters/database/domains/role-attribute/entity.mjs.map +1 -1
  62. package/dist/adapters/database/domains/role-permission/entity.d.ts.map +1 -1
  63. package/dist/adapters/database/domains/role-permission/entity.mjs +45 -21
  64. package/dist/adapters/database/domains/role-permission/entity.mjs.map +1 -1
  65. package/dist/adapters/database/domains/scope/entity.d.ts.map +1 -1
  66. package/dist/adapters/database/domains/scope/entity.mjs +35 -19
  67. package/dist/adapters/database/domains/scope/entity.mjs.map +1 -1
  68. package/dist/adapters/database/domains/session/entity.d.ts.map +1 -1
  69. package/dist/adapters/database/domains/session/entity.mjs +63 -31
  70. package/dist/adapters/database/domains/session/entity.mjs.map +1 -1
  71. package/dist/adapters/database/domains/session-token/entity.d.ts +4 -1
  72. package/dist/adapters/database/domains/session-token/entity.d.ts.map +1 -1
  73. package/dist/adapters/database/domains/session-token/entity.mjs +40 -11
  74. package/dist/adapters/database/domains/session-token/entity.mjs.map +1 -1
  75. package/dist/adapters/database/domains/trust-anchor/entity.d.ts.map +1 -1
  76. package/dist/adapters/database/domains/trust-anchor/entity.mjs +25 -13
  77. package/dist/adapters/database/domains/trust-anchor/entity.mjs.map +1 -1
  78. package/dist/adapters/database/domains/user/entity.d.ts.map +1 -1
  79. package/dist/adapters/database/domains/user/entity.mjs +58 -34
  80. package/dist/adapters/database/domains/user/entity.mjs.map +1 -1
  81. package/dist/adapters/database/domains/user-attribute/entity.d.ts.map +1 -1
  82. package/dist/adapters/database/domains/user-attribute/entity.mjs +27 -11
  83. package/dist/adapters/database/domains/user-attribute/entity.mjs.map +1 -1
  84. package/dist/adapters/database/domains/user-authenticator/entity.d.ts.map +1 -1
  85. package/dist/adapters/database/domains/user-authenticator/entity.mjs +43 -23
  86. package/dist/adapters/database/domains/user-authenticator/entity.mjs.map +1 -1
  87. package/dist/adapters/database/domains/user-permission/entity.d.ts.map +1 -1
  88. package/dist/adapters/database/domains/user-permission/entity.mjs +45 -21
  89. package/dist/adapters/database/domains/user-permission/entity.mjs.map +1 -1
  90. package/dist/adapters/database/domains/user-role/entity.d.ts.map +1 -1
  91. package/dist/adapters/database/domains/user-role/entity.mjs +37 -17
  92. package/dist/adapters/database/domains/user-role/entity.mjs.map +1 -1
  93. package/dist/adapters/database/errors/driver.d.ts +9 -0
  94. package/dist/adapters/database/errors/driver.d.ts.map +1 -1
  95. package/dist/adapters/database/errors/driver.mjs +20 -1
  96. package/dist/adapters/database/errors/driver.mjs.map +1 -1
  97. package/dist/adapters/database/errors/index.mjs +2 -2
  98. package/dist/adapters/database/helpers/index.mjs +2 -2
  99. package/dist/adapters/database/helpers/is-supported.d.ts +7 -0
  100. package/dist/adapters/database/helpers/is-supported.d.ts.map +1 -1
  101. package/dist/adapters/database/helpers/is-supported.mjs +9 -1
  102. package/dist/adapters/database/helpers/is-supported.mjs.map +1 -1
  103. package/dist/adapters/database/index.mjs +3 -3
  104. package/dist/adapters/database/migrations/mysql/1785871780234-AlignSchemaWithEntityMetadata.d.ts +66 -0
  105. package/dist/adapters/database/migrations/mysql/1785871780234-AlignSchemaWithEntityMetadata.d.ts.map +1 -0
  106. package/dist/adapters/database/migrations/mysql/1785871780234-AlignSchemaWithEntityMetadata.mjs +181 -0
  107. package/dist/adapters/database/migrations/mysql/1785871780234-AlignSchemaWithEntityMetadata.mjs.map +1 -0
  108. package/dist/adapters/database/migrations/mysql/1786436332251-QueryIndexes.d.ts +44 -0
  109. package/dist/adapters/database/migrations/mysql/1786436332251-QueryIndexes.d.ts.map +1 -0
  110. package/dist/adapters/database/migrations/mysql/1786436332251-QueryIndexes.mjs +1294 -0
  111. package/dist/adapters/database/migrations/mysql/1786436332251-QueryIndexes.mjs.map +1 -0
  112. package/dist/adapters/database/migrations/postgres/1785871780234-AlignSchemaWithEntityMetadata.d.ts +43 -0
  113. package/dist/adapters/database/migrations/postgres/1785871780234-AlignSchemaWithEntityMetadata.d.ts.map +1 -0
  114. package/dist/adapters/database/migrations/postgres/1785871780234-AlignSchemaWithEntityMetadata.mjs +120 -0
  115. package/dist/adapters/database/migrations/postgres/1785871780234-AlignSchemaWithEntityMetadata.mjs.map +1 -0
  116. package/dist/adapters/database/migrations/postgres/1786436332251-QueryIndexes.d.ts +44 -0
  117. package/dist/adapters/database/migrations/postgres/1786436332251-QueryIndexes.d.ts.map +1 -0
  118. package/dist/adapters/database/migrations/postgres/1786436332251-QueryIndexes.mjs +987 -0
  119. package/dist/adapters/database/migrations/postgres/1786436332251-QueryIndexes.mjs.map +1 -0
  120. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts +14 -2
  121. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  122. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +85 -19
  123. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  124. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts +4 -1
  125. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts.map +1 -1
  126. package/dist/adapters/http/controllers/entities/identity-provider-account/index.d.ts.map +1 -0
  127. package/dist/adapters/http/controllers/entities/identity-provider-account/index.mjs +5 -0
  128. package/dist/adapters/http/controllers/entities/identity-provider-account/module.d.ts +15 -0
  129. package/dist/adapters/http/controllers/entities/identity-provider-account/module.d.ts.map +1 -0
  130. package/dist/adapters/http/controllers/entities/identity-provider-account/module.mjs +94 -0
  131. package/dist/adapters/http/controllers/entities/identity-provider-account/module.mjs.map +1 -0
  132. package/dist/adapters/http/controllers/entities/index.d.ts +2 -0
  133. package/dist/adapters/http/controllers/entities/index.d.ts.map +1 -1
  134. package/dist/adapters/http/controllers/entities/index.mjs +5 -1
  135. package/dist/adapters/http/controllers/entities/session-token/index.d.ts +2 -0
  136. package/dist/adapters/http/controllers/entities/session-token/index.d.ts.map +1 -0
  137. package/dist/adapters/http/controllers/entities/session-token/index.mjs +5 -0
  138. package/dist/adapters/http/controllers/entities/session-token/module.d.ts +23 -0
  139. package/dist/adapters/http/controllers/entities/session-token/module.d.ts.map +1 -0
  140. package/dist/adapters/http/controllers/entities/session-token/module.mjs +112 -0
  141. package/dist/adapters/http/controllers/entities/session-token/module.mjs.map +1 -0
  142. package/dist/adapters/http/controllers/index.mjs +3 -1
  143. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.d.ts.map +1 -1
  144. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +1 -0
  145. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs.map +1 -1
  146. package/dist/adapters/http/index.mjs +3 -1
  147. package/dist/adapters/http/middleware/built-in/error.d.ts.map +1 -1
  148. package/dist/adapters/http/middleware/built-in/error.mjs +4 -3
  149. package/dist/adapters/http/middleware/built-in/error.mjs.map +1 -1
  150. package/dist/adapters/http/request/event-context.d.ts.map +1 -1
  151. package/dist/adapters/http/request/event-context.mjs +2 -0
  152. package/dist/adapters/http/request/event-context.mjs.map +1 -1
  153. package/dist/app/index.mjs +2 -2
  154. package/dist/app/modules/database/index.mjs +2 -1
  155. package/dist/app/modules/database/repositories/identity-provider-account/index.d.ts +2 -0
  156. package/dist/app/modules/database/repositories/identity-provider-account/index.d.ts.map +1 -0
  157. package/dist/app/modules/database/repositories/identity-provider-account/index.mjs +5 -0
  158. package/dist/app/modules/database/repositories/identity-provider-account/repository.d.ts +18 -0
  159. package/dist/app/modules/database/repositories/identity-provider-account/repository.d.ts.map +1 -0
  160. package/dist/app/modules/database/repositories/identity-provider-account/repository.mjs +69 -0
  161. package/dist/app/modules/database/repositories/identity-provider-account/repository.mjs.map +1 -0
  162. package/dist/app/modules/database/repositories/index.d.ts +1 -0
  163. package/dist/app/modules/database/repositories/index.d.ts.map +1 -1
  164. package/dist/app/modules/database/repositories/index.mjs +3 -1
  165. package/dist/app/modules/database/repositories/key/repository.d.ts +23 -0
  166. package/dist/app/modules/database/repositories/key/repository.d.ts.map +1 -1
  167. package/dist/app/modules/database/repositories/key/repository.mjs +39 -3
  168. package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -1
  169. package/dist/app/modules/database/repositories/schema-validation.d.ts +14 -6
  170. package/dist/app/modules/database/repositories/schema-validation.d.ts.map +1 -1
  171. package/dist/app/modules/database/repositories/schema-validation.mjs +18 -6
  172. package/dist/app/modules/database/repositories/schema-validation.mjs.map +1 -1
  173. package/dist/app/modules/http/modules/controller.d.ts +3 -1
  174. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  175. package/dist/app/modules/http/modules/controller.mjs +37 -1
  176. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  177. package/dist/app/modules/identity/index.mjs +1 -2
  178. package/dist/app/modules/identity/module.d.ts.map +1 -1
  179. package/dist/app/modules/identity/module.mjs +2 -2
  180. package/dist/app/modules/identity/module.mjs.map +1 -1
  181. package/dist/app/modules/identity/repositories/index.mjs +1 -2
  182. package/dist/app/modules/identity/repositories/provider/index.d.ts +0 -1
  183. package/dist/app/modules/identity/repositories/provider/index.d.ts.map +1 -1
  184. package/dist/app/modules/identity/repositories/provider/index.mjs +1 -3
  185. package/dist/app/modules/index.mjs +2 -2
  186. package/dist/app/modules/logger/module.d.ts.map +1 -1
  187. package/dist/app/modules/logger/module.mjs +1 -0
  188. package/dist/app/modules/logger/module.mjs.map +1 -1
  189. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts +25 -1
  190. package/dist/app/modules/oauth2/repositories/session-token/repository.d.ts.map +1 -1
  191. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs +70 -1
  192. package/dist/app/modules/oauth2/repositories/session-token/repository.mjs.map +1 -1
  193. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  194. package/dist/app/modules/provisioning/module.mjs +3 -1
  195. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  196. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  197. package/dist/app/modules/provisioning/sources/default/module.mjs +1 -0
  198. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  199. package/dist/core/entities/client/schema.d.ts.map +1 -1
  200. package/dist/core/entities/client/schema.mjs +29 -10
  201. package/dist/core/entities/client/schema.mjs.map +1 -1
  202. package/dist/core/entities/client-permission/schema.d.ts.map +1 -1
  203. package/dist/core/entities/client-permission/schema.mjs +29 -6
  204. package/dist/core/entities/client-permission/schema.mjs.map +1 -1
  205. package/dist/core/entities/client-role/schema.d.ts.map +1 -1
  206. package/dist/core/entities/client-role/schema.mjs +27 -6
  207. package/dist/core/entities/client-role/schema.mjs.map +1 -1
  208. package/dist/core/entities/client-scope/schema.d.ts.map +1 -1
  209. package/dist/core/entities/client-scope/schema.mjs +19 -5
  210. package/dist/core/entities/client-scope/schema.mjs.map +1 -1
  211. package/dist/core/entities/consent/schema.d.ts.map +1 -1
  212. package/dist/core/entities/consent/schema.mjs +28 -6
  213. package/dist/core/entities/consent/schema.mjs.map +1 -1
  214. package/dist/core/entities/event/entity-event-handler.d.ts.map +1 -1
  215. package/dist/core/entities/event/entity-event-handler.mjs +2 -0
  216. package/dist/core/entities/event/entity-event-handler.mjs.map +1 -1
  217. package/dist/core/entities/event/sanitize.d.ts.map +1 -1
  218. package/dist/core/entities/event/sanitize.mjs +7 -4
  219. package/dist/core/entities/event/sanitize.mjs.map +1 -1
  220. package/dist/core/entities/event/schema.d.ts.map +1 -1
  221. package/dist/core/entities/event/schema.mjs +45 -16
  222. package/dist/core/entities/event/schema.mjs.map +1 -1
  223. package/dist/core/entities/event/service.d.ts.map +1 -1
  224. package/dist/core/entities/event/service.mjs +2 -0
  225. package/dist/core/entities/event/service.mjs.map +1 -1
  226. package/dist/core/entities/event/types.d.ts +2 -0
  227. package/dist/core/entities/event/types.d.ts.map +1 -1
  228. package/dist/core/entities/identity-provider/schema.d.ts.map +1 -1
  229. package/dist/core/entities/identity-provider/schema.mjs +29 -11
  230. package/dist/core/entities/identity-provider/schema.mjs.map +1 -1
  231. package/dist/core/entities/identity-provider-account/error.d.ts +7 -0
  232. package/dist/core/entities/identity-provider-account/error.d.ts.map +1 -0
  233. package/dist/core/entities/identity-provider-account/error.mjs +24 -0
  234. package/dist/core/entities/identity-provider-account/error.mjs.map +1 -0
  235. package/dist/core/entities/identity-provider-account/index.d.ts +5 -0
  236. package/dist/core/entities/identity-provider-account/index.d.ts.map +1 -0
  237. package/dist/core/entities/identity-provider-account/index.mjs +8 -0
  238. package/dist/core/entities/identity-provider-account/schema.d.ts +3 -0
  239. package/dist/core/entities/identity-provider-account/schema.d.ts.map +1 -0
  240. package/dist/core/entities/identity-provider-account/schema.mjs +52 -0
  241. package/dist/core/entities/identity-provider-account/schema.mjs.map +1 -0
  242. package/dist/core/entities/identity-provider-account/service.d.ts +24 -0
  243. package/dist/core/entities/identity-provider-account/service.d.ts.map +1 -0
  244. package/dist/core/entities/identity-provider-account/service.mjs +129 -0
  245. package/dist/core/entities/identity-provider-account/service.mjs.map +1 -0
  246. package/dist/core/entities/identity-provider-account/types.d.ts +69 -0
  247. package/dist/core/entities/identity-provider-account/types.d.ts.map +1 -0
  248. package/dist/core/entities/identity-provider-account/types.mjs +17 -0
  249. package/dist/core/entities/identity-provider-account/types.mjs.map +1 -0
  250. package/dist/core/entities/identity-provider-role-mapping/schema.d.ts.map +1 -1
  251. package/dist/core/entities/identity-provider-role-mapping/schema.mjs +27 -6
  252. package/dist/core/entities/identity-provider-role-mapping/schema.mjs.map +1 -1
  253. package/dist/core/entities/index.d.ts +2 -0
  254. package/dist/core/entities/index.d.ts.map +1 -1
  255. package/dist/core/entities/index.mjs +9 -1
  256. package/dist/core/entities/key/schema.d.ts.map +1 -1
  257. package/dist/core/entities/key/schema.mjs +39 -17
  258. package/dist/core/entities/key/schema.mjs.map +1 -1
  259. package/dist/core/entities/key/service.d.ts.map +1 -1
  260. package/dist/core/entities/key/service.mjs +1 -0
  261. package/dist/core/entities/key/service.mjs.map +1 -1
  262. package/dist/core/entities/permission/schema.d.ts.map +1 -1
  263. package/dist/core/entities/permission/schema.mjs +34 -13
  264. package/dist/core/entities/permission/schema.mjs.map +1 -1
  265. package/dist/core/entities/permission-policy/schema.d.ts.map +1 -1
  266. package/dist/core/entities/permission-policy/schema.mjs +27 -6
  267. package/dist/core/entities/permission-policy/schema.mjs.map +1 -1
  268. package/dist/core/entities/policy/schema.d.ts.map +1 -1
  269. package/dist/core/entities/policy/schema.mjs +31 -12
  270. package/dist/core/entities/policy/schema.mjs.map +1 -1
  271. package/dist/core/entities/realm/schema.d.ts.map +1 -1
  272. package/dist/core/entities/realm/schema.mjs +26 -12
  273. package/dist/core/entities/realm/schema.mjs.map +1 -1
  274. package/dist/core/entities/role/schema.d.ts.map +1 -1
  275. package/dist/core/entities/role/schema.mjs +36 -14
  276. package/dist/core/entities/role/schema.mjs.map +1 -1
  277. package/dist/core/entities/role-attribute/schema.d.ts.map +1 -1
  278. package/dist/core/entities/role-attribute/schema.mjs +28 -14
  279. package/dist/core/entities/role-attribute/schema.mjs.map +1 -1
  280. package/dist/core/entities/role-permission/schema.d.ts.map +1 -1
  281. package/dist/core/entities/role-permission/schema.mjs +29 -6
  282. package/dist/core/entities/role-permission/schema.mjs.map +1 -1
  283. package/dist/core/entities/scope/schema.d.ts.map +1 -1
  284. package/dist/core/entities/scope/schema.mjs +28 -12
  285. package/dist/core/entities/scope/schema.mjs.map +1 -1
  286. package/dist/core/entities/session/schema.d.ts.map +1 -1
  287. package/dist/core/entities/session/schema.mjs +41 -9
  288. package/dist/core/entities/session/schema.mjs.map +1 -1
  289. package/dist/core/entities/session-token/index.d.ts +4 -0
  290. package/dist/core/entities/session-token/index.d.ts.map +1 -0
  291. package/dist/core/entities/session-token/index.mjs +6 -0
  292. package/dist/core/entities/session-token/schema.d.ts +12 -0
  293. package/dist/core/entities/session-token/schema.d.ts.map +1 -0
  294. package/dist/core/entities/session-token/schema.mjs +66 -0
  295. package/dist/core/entities/session-token/schema.mjs.map +1 -0
  296. package/dist/core/entities/session-token/service.d.ts +70 -0
  297. package/dist/core/entities/session-token/service.d.ts.map +1 -0
  298. package/dist/core/entities/session-token/service.mjs +216 -0
  299. package/dist/core/entities/session-token/service.mjs.map +1 -0
  300. package/dist/core/entities/session-token/types.d.ts +37 -0
  301. package/dist/core/entities/session-token/types.d.ts.map +1 -0
  302. package/dist/core/entities/session-token/types.mjs +4 -0
  303. package/dist/core/entities/trust-anchor/schema.d.ts.map +1 -1
  304. package/dist/core/entities/trust-anchor/schema.mjs +27 -13
  305. package/dist/core/entities/trust-anchor/schema.mjs.map +1 -1
  306. package/dist/core/entities/trust-anchor/service.d.ts.map +1 -1
  307. package/dist/core/entities/trust-anchor/service.mjs +1 -0
  308. package/dist/core/entities/trust-anchor/service.mjs.map +1 -1
  309. package/dist/core/entities/user/schema.d.ts.map +1 -1
  310. package/dist/core/entities/user/schema.mjs +29 -12
  311. package/dist/core/entities/user/schema.mjs.map +1 -1
  312. package/dist/core/entities/user-attribute/schema.d.ts.map +1 -1
  313. package/dist/core/entities/user-attribute/schema.mjs +28 -14
  314. package/dist/core/entities/user-attribute/schema.mjs.map +1 -1
  315. package/dist/core/entities/user-authenticator/schema.d.ts.map +1 -1
  316. package/dist/core/entities/user-authenticator/schema.mjs +29 -12
  317. package/dist/core/entities/user-authenticator/schema.mjs.map +1 -1
  318. package/dist/core/entities/user-authenticator/service.d.ts +2 -1
  319. package/dist/core/entities/user-authenticator/service.d.ts.map +1 -1
  320. package/dist/core/entities/user-authenticator/service.mjs +5 -0
  321. package/dist/core/entities/user-authenticator/service.mjs.map +1 -1
  322. package/dist/core/entities/user-authenticator/types.d.ts +7 -1
  323. package/dist/core/entities/user-authenticator/types.d.ts.map +1 -1
  324. package/dist/core/entities/user-authenticator/types.mjs.map +1 -1
  325. package/dist/core/entities/user-permission/schema.d.ts.map +1 -1
  326. package/dist/core/entities/user-permission/schema.mjs +29 -6
  327. package/dist/core/entities/user-permission/schema.mjs.map +1 -1
  328. package/dist/core/entities/user-role/schema.d.ts.map +1 -1
  329. package/dist/core/entities/user-role/schema.mjs +27 -6
  330. package/dist/core/entities/user-role/schema.mjs.map +1 -1
  331. package/dist/core/identity/index.mjs +2 -1
  332. package/dist/core/identity/provider/account/error.d.ts +7 -0
  333. package/dist/core/identity/provider/account/error.d.ts.map +1 -0
  334. package/dist/core/identity/provider/account/error.mjs +24 -0
  335. package/dist/core/identity/provider/account/error.mjs.map +1 -0
  336. package/dist/core/identity/provider/account/index.d.ts +1 -0
  337. package/dist/core/identity/provider/account/index.d.ts.map +1 -1
  338. package/dist/core/identity/provider/account/index.mjs +2 -1
  339. package/dist/core/identity/provider/account/module.d.ts +2 -0
  340. package/dist/core/identity/provider/account/module.d.ts.map +1 -1
  341. package/dist/core/identity/provider/account/module.mjs +30 -0
  342. package/dist/core/identity/provider/account/module.mjs.map +1 -1
  343. package/dist/core/identity/provider/account/types.d.ts +12 -10
  344. package/dist/core/identity/provider/account/types.d.ts.map +1 -1
  345. package/dist/core/identity/provider/authentication/protocols/oauth2/module.d.ts +1 -0
  346. package/dist/core/identity/provider/authentication/protocols/oauth2/module.d.ts.map +1 -1
  347. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs +5 -1
  348. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs.map +1 -1
  349. package/dist/core/identity/provider/authentication/protocols/oauth2/types.d.ts +7 -0
  350. package/dist/core/identity/provider/authentication/protocols/oauth2/types.d.ts.map +1 -1
  351. package/dist/core/identity/provider/index.mjs +2 -1
  352. package/dist/core/index.mjs +10 -2
  353. package/dist/core/oauth2/authorization/module.d.ts.map +1 -1
  354. package/dist/core/oauth2/authorization/module.mjs +2 -0
  355. package/dist/core/oauth2/authorization/module.mjs.map +1 -1
  356. package/dist/core/oauth2/authorization/state/types.d.ts +11 -0
  357. package/dist/core/oauth2/authorization/state/types.d.ts.map +1 -1
  358. package/dist/core/oauth2/end-session/service.mjs +2 -2
  359. package/dist/core/oauth2/end-session/service.mjs.map +1 -1
  360. package/dist/core/oauth2/grant-types/authorize.d.ts.map +1 -1
  361. package/dist/core/oauth2/grant-types/authorize.mjs +1 -5
  362. package/dist/core/oauth2/grant-types/authorize.mjs.map +1 -1
  363. package/dist/core/oauth2/grant-types/password.mjs +2 -5
  364. package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
  365. package/dist/core/oauth2/grant-types/refresh-token.d.ts.map +1 -1
  366. package/dist/core/oauth2/grant-types/refresh-token.mjs +37 -24
  367. package/dist/core/oauth2/grant-types/refresh-token.mjs.map +1 -1
  368. package/dist/core/oauth2/index.mjs +3 -1
  369. package/dist/core/oauth2/mfa-login/module.d.ts.map +1 -1
  370. package/dist/core/oauth2/mfa-login/module.mjs +4 -7
  371. package/dist/core/oauth2/mfa-login/module.mjs.map +1 -1
  372. package/dist/core/oauth2/session-token/error.d.ts +36 -0
  373. package/dist/core/oauth2/session-token/error.d.ts.map +1 -0
  374. package/dist/core/oauth2/session-token/error.mjs +49 -0
  375. package/dist/core/oauth2/session-token/error.mjs.map +1 -0
  376. package/dist/core/oauth2/session-token/index.d.ts +1 -0
  377. package/dist/core/oauth2/session-token/index.d.ts.map +1 -1
  378. package/dist/core/oauth2/session-token/index.mjs +2 -1
  379. package/dist/core/oauth2/session-token/types.d.ts +40 -0
  380. package/dist/core/oauth2/session-token/types.d.ts.map +1 -1
  381. package/dist/core/oauth2/token/issuer/access/module.d.ts.map +1 -1
  382. package/dist/core/oauth2/token/issuer/access/module.mjs +1 -0
  383. package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
  384. package/dist/core/oauth2/token/issuer/base.d.ts +1 -1
  385. package/dist/core/oauth2/token/issuer/base.d.ts.map +1 -1
  386. package/dist/core/oauth2/token/issuer/base.mjs.map +1 -1
  387. package/dist/core/oauth2/token/issuer/refresh/module.d.ts.map +1 -1
  388. package/dist/core/oauth2/token/issuer/refresh/module.mjs +1 -0
  389. package/dist/core/oauth2/token/issuer/refresh/module.mjs.map +1 -1
  390. package/dist/core/query/index.mjs +2 -2
  391. package/dist/core/query/module.d.ts +19 -9
  392. package/dist/core/query/module.d.ts.map +1 -1
  393. package/dist/core/query/module.mjs +22 -10
  394. package/dist/core/query/module.mjs.map +1 -1
  395. package/dist/index.mjs +6 -4
  396. package/dist/swagger.json +869 -140
  397. package/dist/utils/error.d.ts +20 -3
  398. package/dist/utils/error.d.ts.map +1 -1
  399. package/dist/utils/error.mjs +102 -5
  400. package/dist/utils/error.mjs.map +1 -1
  401. package/dist/utils/index.mjs +2 -2
  402. package/package.json +23 -21
  403. package/dist/app/modules/identity/repositories/provider/account/index.d.ts.map +0 -1
  404. package/dist/app/modules/identity/repositories/provider/account/index.mjs +0 -5
  405. package/dist/app/modules/identity/repositories/provider/account/module.d.ts +0 -10
  406. package/dist/app/modules/identity/repositories/provider/account/module.d.ts.map +0 -1
  407. package/dist/app/modules/identity/repositories/provider/account/module.mjs +0 -28
  408. package/dist/app/modules/identity/repositories/provider/account/module.mjs.map +0 -1
  409. /package/dist/{app/modules/identity/repositories/provider/account → adapters/http/controllers/entities/identity-provider-account}/index.d.ts +0 -0
@@ -0,0 +1,66 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { createRelationsReadGate } from "../../query/relations.mjs";
5
+ import { EntityType } from "@authup/core-kit";
6
+ import { defineSchema } from "@rapiq/core";
7
+ //#region src/core/entities/session-token/schema.ts
8
+ const schemaMapping = { session: EntityType.SESSION };
9
+ /**
10
+ * The token inventory as a query surface.
11
+ *
12
+ * The rows carry no realm or subject of their own, so both the ownership
13
+ * check and the realm gate resolve through `session`. The repository joins it
14
+ * unconditionally for that reason: a projection must never be able to strip
15
+ * the columns the gate reads (the plan-039 discipline, applied through a
16
+ * relation instead of a column).
17
+ */ const sessionTokenSchema = defineSchema({
18
+ name: EntityType.SESSION_TOKEN,
19
+ indexes: [
20
+ ["id"],
21
+ ["sessionId"],
22
+ ["clientId"],
23
+ ["kind"],
24
+ ["expiresAt"],
25
+ ["sessionId", "createdAt"],
26
+ ["createdAt"]
27
+ ],
28
+ fields: { allowed: [
29
+ "id",
30
+ "sessionId",
31
+ "clientId",
32
+ "kind",
33
+ "parentId",
34
+ "refreshTokenId",
35
+ "ipAddress",
36
+ "userAgent",
37
+ "consumedAt",
38
+ "revokedAt",
39
+ "expiresAt",
40
+ "createdAt"
41
+ ] },
42
+ filters: {
43
+ allowed: [
44
+ "id",
45
+ "sessionId",
46
+ "clientId",
47
+ "kind",
48
+ "expiresAt"
49
+ ],
50
+ indexed: true
51
+ },
52
+ relations: {
53
+ allowed: ["session"],
54
+ validate: createRelationsReadGate(schemaMapping)
55
+ },
56
+ sorts: {
57
+ allowed: ["createdAt", "expiresAt"],
58
+ indexed: true
59
+ },
60
+ pagination: { maxLimit: 50 },
61
+ schemaMapping
62
+ });
63
+ //#endregion
64
+ export { sessionTokenSchema };
65
+
66
+ //# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.mjs","names":["defineSchema","EntityType","createRelationsReadGate","schemaMapping","session","SESSION","sessionTokenSchema","name","SESSION_TOKEN","indexes","fields","allowed","filters","indexed","relations","validate","sorts","pagination","maxLimit"],"sources":["../../../../src/core/entities/session-token/schema.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\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 { defineSchema } from '@rapiq/core';\nimport type { SessionToken } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport { createRelationsReadGate } from '../../query/relations.ts';\n\nconst schemaMapping = { session: EntityType.SESSION };\n\n/**\n * The token inventory as a query surface.\n *\n * The rows carry no realm or subject of their own, so both the ownership\n * check and the realm gate resolve through `session`. The repository joins it\n * unconditionally for that reason: a projection must never be able to strip\n * the columns the gate reads (the plan-039 discipline, applied through a\n * relation instead of a column).\n */\nexport const sessionTokenSchema = defineSchema<SessionToken>({\n name: EntityType.SESSION_TOKEN,\n indexes: [\n ['id'],\n ['sessionId'],\n ['clientId'],\n ['kind'],\n ['expiresAt'],\n ['sessionId', 'createdAt'],\n ['createdAt'],\n ],\n fields: {\n allowed: [\n 'id',\n 'sessionId',\n 'clientId',\n 'kind',\n 'parentId',\n 'refreshTokenId',\n 'ipAddress',\n 'userAgent',\n 'consumedAt',\n 'revokedAt',\n 'expiresAt',\n 'createdAt',\n ],\n },\n // Plain columns only. Ownership and realm are NOT client-supplied filters:\n // the service resolves them from the joined session per row, so a caller\n // cannot widen its own reach by filtering. These four cover the use cases:\n // `clientId` answers \"which sessions did this application serve\",\n // `sessionId` answers \"which applications rode this session\" (the\n // back-channel logout audience), and the pair scopes a per-application\n // revoke to one session.\n filters: {\n allowed: [\n 'id',\n 'sessionId',\n 'clientId',\n 'kind',\n 'expiresAt',\n ],\n indexed: true,\n },\n // `client` is deliberately absent: the repository always joins a client\n // SUMMARY (id / name / displayName — the consent-list shape), so a raw\n // `?include=client` cannot force the full-column join and a self-service\n // reader still gets application names without CLIENT_READ.\n relations: { allowed: ['session'], validate: createRelationsReadGate(schemaMapping) },\n sorts: { allowed: ['createdAt', 'expiresAt'], indexed: true },\n pagination: { maxLimit: 50 },\n schemaMapping,\n});\n"],"mappings":";;;;;;;AAYA,MAAMG,gBAAgB,EAAEC,SAASH,WAAWI,QAAQ;;;;;;;;;GAWpD,MAAaC,qBAAqBN,aAA2B;CACzDO,MAAMN,WAAWO;CACjBC,SAAS;EACL,CAAC,IAAK;EACN,CAAC,WAAY;EACb,CAAC,UAAW;EACZ,CAAC,MAAO;EACR,CAAC,WAAY;EACb,CAAC,aAAa,WAAY;EAC1B,CAAC,WAAY;CAChB;CACDC,QAAQ,EACJC,SAAS;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACH,EACL;CAQAC,SAAS;EACLD,SAAS;GACL;GACA;GACA;GACA;GACA;EACH;EACDE,SAAS;CACb;CAKAC,WAAW;EAAEH,SAAS,CAAC,SAAU;EAAEI,UAAUb,wBAAwBC,aAAAA;CAAe;CACpFa,OAAO;EAAEL,SAAS,CAAC,aAAa,WAAY;EAAEE,SAAS;CAAK;CAC5DI,YAAY,EAAEC,UAAU,GAAG;CAC3Bf;AACJ,CAAA"}
@@ -0,0 +1,70 @@
1
+ import type { ICondition } from '@rapiq/core';
2
+ import { PermissionName } from '@authup/core-kit';
3
+ import type { SessionToken } from '@authup/core-kit';
4
+ import { AbstractEntityService } from '@authup/server-kit';
5
+ import type { ActorContext, EntityRepositoryFindManyResult } from '@authup/server-kit';
6
+ import type { IOAuth2TokenRepository, ISessionTokenRepository } from '../../oauth2/index.ts';
7
+ import type { ISessionTokenService, SessionTokenDeleteManyResult } from './types.ts';
8
+ /**
9
+ * Filter keys that make a bulk revoke a TARGETED one. A query carrying none of
10
+ * them is rejected rather than treated as "everything": unlike the session
11
+ * bulk revoke, there is no meaningful self-service fallback here, so an
12
+ * unrecognized filter must fail loudly instead of silently widening.
13
+ */
14
+ export declare const SESSION_TOKEN_FILTER_KEYS: readonly ["id", "sessionId", "clientId"];
15
+ export type SessionTokenServiceContext = {
16
+ repository: ISessionTokenRepository;
17
+ tokenRepository?: IOAuth2TokenRepository;
18
+ };
19
+ export declare class SessionTokenService extends AbstractEntityService implements ISessionTokenService {
20
+ protected repository: ISessionTokenRepository;
21
+ protected tokenRepository?: IOAuth2TokenRepository;
22
+ constructor(ctx: SessionTokenServiceContext);
23
+ /**
24
+ * A token row carries no subject of its own, so ownership resolves through
25
+ * the joined session. A row whose session did not load fails closed.
26
+ */
27
+ protected isOwnedBy(entity: SessionToken, actor: ActorContext): boolean;
28
+ /**
29
+ * The realm the row belongs to, taken from its session. Absent when the
30
+ * session did not load, which leaves the realm factor neutral, so the
31
+ * per-row permission check below is what denies.
32
+ */
33
+ protected tokenRealmMatch(entity: SessionToken): Record<string, any>;
34
+ getMany(query: Record<string, any>, actor: ActorContext): Promise<EntityRepositoryFindManyResult<SessionToken>>;
35
+ getOne(id: string, actor: ActorContext): Promise<SessionToken>;
36
+ delete(id: string, actor: ActorContext): Promise<SessionToken>;
37
+ deleteMany(query: Record<string, any>, actor: ActorContext): Promise<SessionTokenDeleteManyResult>;
38
+ protected loadOneForActor(id: string, actor: ActorContext, permission: `${PermissionName}`): Promise<SessionToken>;
39
+ /**
40
+ * Revoke, not delete. The row is stamped and the jti is blocklisted with a
41
+ * TTL pinned to the token's real expiry, so an in-flight access token stops
42
+ * introspecting as active instead of surviving to its own `exp`.
43
+ */
44
+ protected revoke(entity: SessionToken): Promise<void>;
45
+ protected hasTargetFilter(query?: Record<string, any>): boolean;
46
+ /**
47
+ * Whether the condition BOUNDS the query to a target scope.
48
+ *
49
+ * The question is not "does a target key appear somewhere" but "is the
50
+ * result set constrained by one". Those differ, and the difference is a
51
+ * mass revoke:
52
+ *
53
+ * - `and` is bounded when ANY conjunct is: the others can only narrow it.
54
+ * - `or` is bounded only when EVERY branch is. `or(eq(id,x), eq(kind,access))`
55
+ * names a target key and still selects every access token.
56
+ * - `not` is never a scope. A negation of a scoped predicate is its
57
+ * complement, which is nearly everything.
58
+ *
59
+ * The expression dialect is what makes the last two reachable: rapiq
60
+ * collapses `not(eq(...))` into an `ne` leaf, but `not(and(...))` stays a
61
+ * compound node, and `or(...)` has no bracket-dialect spelling at all.
62
+ */
63
+ protected hasTargetCondition(condition: ICondition): boolean;
64
+ /**
65
+ * Schemaless decode — dialect detection only. The allow-list is enforced
66
+ * downstream by the schema-bound decode.
67
+ */
68
+ protected static queryCodec: import("@rapiq/codec-url").URLCodec;
69
+ }
70
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/session-token/service.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAG,MAAM,uBAAuB,CAAC;AAG9F,OAAO,KAAK,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAErF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,0CAI5B,CAAC;AAEX,MAAM,MAAM,0BAA0B,GAAG;IACrC,UAAU,EAAE,uBAAuB,CAAC;IACpC,eAAe,CAAC,EAAE,sBAAsB,CAAC;CAC5C,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,qBAAsB,YAAW,oBAAoB;IAC1F,SAAS,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAE9C,SAAS,CAAC,eAAe,CAAC,EAAE,sBAAsB,CAAC;gBAEvC,GAAG,EAAE,0BAA0B;IAM3C;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IASvE;;;;OAIG;IACH,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY;IASxC,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;IA6DlD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAM9D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ9D,UAAU,CACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,4BAA4B,CAAC;cA4DxB,eAAe,CAC3B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,GAAG,cAAc,EAAE,GAChC,OAAO,CAAC,YAAY,CAAC;IAqBxB;;;;OAIG;cACa,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3D,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAmB/D;;;;;;;;;;;;;;;;OAgBG;IACH,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO;IA6C5D;;;OAGG;IACH,SAAS,CAAC,MAAM,CAAC,UAAU,sCAAoB;CAClD"}
@@ -0,0 +1,216 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { sessionTokenSchema } from "./schema.mjs";
5
+ import { appendQueryConditions, decodeQuery } from "../../query/module.mjs";
6
+ import "../../query/index.mjs";
7
+ import { isObject } from "@authup/kit";
8
+ import { PermissionName } from "@authup/core-kit";
9
+ import { AbstractEntityService } from "@authup/server-kit";
10
+ import { BuiltInPolicyType, definePolicyData } from "@authup/access";
11
+ import { AuthupError, EntityNotFoundError, ErrorCode } from "@authup/errors";
12
+ import { FilterCompoundOperator, FilterFieldOperator, and, eq, isFilter, isFilters } from "@rapiq/core";
13
+ import { createURLCodec } from "@rapiq/codec-url";
14
+ //#region src/core/entities/session-token/service.ts
15
+ /**
16
+ * Filter keys that make a bulk revoke a TARGETED one. A query carrying none of
17
+ * them is rejected rather than treated as "everything": unlike the session
18
+ * bulk revoke, there is no meaningful self-service fallback here, so an
19
+ * unrecognized filter must fail loudly instead of silently widening.
20
+ */ const SESSION_TOKEN_FILTER_KEYS = [
21
+ "id",
22
+ "sessionId",
23
+ "clientId"
24
+ ];
25
+ var SessionTokenService = class SessionTokenService extends AbstractEntityService {
26
+ repository;
27
+ tokenRepository;
28
+ constructor(ctx) {
29
+ super();
30
+ this.repository = ctx.repository;
31
+ this.tokenRepository = ctx.tokenRepository;
32
+ }
33
+ /**
34
+ * A token row carries no subject of its own, so ownership resolves through
35
+ * the joined session. A row whose session did not load fails closed.
36
+ */ isOwnedBy(entity, actor) {
37
+ const session = entity.session;
38
+ return !!actor.identity && !!session && session.sub === actor.identity.data.id && session.subKind === actor.identity.type;
39
+ }
40
+ /**
41
+ * The realm the row belongs to, taken from its session. Absent when the
42
+ * session did not load, which leaves the realm factor neutral, so the
43
+ * per-row permission check below is what denies.
44
+ */ tokenRealmMatch(entity) {
45
+ const session = entity.session;
46
+ if (!session) return {};
47
+ return this.resourceRealmMatch({ realmId: session.realmId });
48
+ }
49
+ async getMany(query, actor) {
50
+ const parsed = await decodeQuery(query, {
51
+ schema: sessionTokenSchema,
52
+ actor
53
+ });
54
+ let canReadAll = true;
55
+ try {
56
+ await actor.permissionEvaluator.preEvaluate({ name: PermissionName.SESSION_READ });
57
+ } catch (e) {
58
+ if (!actor.identity) throw e;
59
+ canReadAll = false;
60
+ }
61
+ if (!canReadAll) {
62
+ const scoped = appendQueryConditions(parsed, and(eq("session.sub", actor.identity.data.id), eq("session.subKind", actor.identity.type)));
63
+ return this.repository.findMany(scoped);
64
+ }
65
+ const { data: entities, meta } = await this.repository.findMany(parsed);
66
+ const data = [];
67
+ let { total } = meta;
68
+ for (const entity of entities) {
69
+ if (this.isOwnedBy(entity, actor)) {
70
+ data.push(entity);
71
+ continue;
72
+ }
73
+ try {
74
+ await actor.permissionEvaluator.evaluate({
75
+ name: PermissionName.SESSION_READ,
76
+ data: definePolicyData({
77
+ [BuiltInPolicyType.ATTRIBUTES]: entity,
78
+ ...this.tokenRealmMatch(entity)
79
+ })
80
+ });
81
+ data.push(entity);
82
+ } catch {
83
+ total -= 1;
84
+ }
85
+ }
86
+ return {
87
+ data,
88
+ meta: {
89
+ ...meta,
90
+ total
91
+ }
92
+ };
93
+ }
94
+ async getOne(id, actor) {
95
+ return await this.loadOneForActor(id, actor, PermissionName.SESSION_READ);
96
+ }
97
+ async delete(id, actor) {
98
+ const entity = await this.loadOneForActor(id, actor, PermissionName.SESSION_DELETE);
99
+ await this.revoke(entity);
100
+ return entity;
101
+ }
102
+ async deleteMany(query, actor) {
103
+ if (!actor.identity) throw new AuthupError({
104
+ code: ErrorCode.IDENTITY_UNAUTHORIZED,
105
+ message: "Authentication required."
106
+ });
107
+ if (!this.hasTargetFilter(query)) throw new AuthupError({
108
+ code: ErrorCode.BAD_REQUEST,
109
+ message: "A bulk revoke must be scoped by id, sessionId or clientId."
110
+ });
111
+ const parsed = await decodeQuery(query, {
112
+ schema: sessionTokenSchema,
113
+ parameters: ["filters"],
114
+ actor
115
+ });
116
+ let canDeleteAll = true;
117
+ try {
118
+ await actor.permissionEvaluator.preEvaluate({ name: PermissionName.SESSION_DELETE });
119
+ } catch {
120
+ canDeleteAll = false;
121
+ }
122
+ const scoped = canDeleteAll ? parsed : appendQueryConditions(parsed, and(eq("session.sub", actor.identity.data.id), eq("session.subKind", actor.identity.type)));
123
+ const entities = await this.repository.findAllByQuery(scoped);
124
+ let count = 0;
125
+ for (const entity of entities) {
126
+ if (!this.isOwnedBy(entity, actor)) try {
127
+ await actor.permissionEvaluator.evaluate({
128
+ name: PermissionName.SESSION_DELETE,
129
+ data: definePolicyData({
130
+ [BuiltInPolicyType.ATTRIBUTES]: entity,
131
+ ...this.tokenRealmMatch(entity)
132
+ })
133
+ });
134
+ } catch {
135
+ continue;
136
+ }
137
+ await this.revoke(entity);
138
+ count += 1;
139
+ }
140
+ return { count };
141
+ }
142
+ async loadOneForActor(id, actor, permission) {
143
+ const entity = await this.repository.findOneWithSessionById(id);
144
+ if (!entity) throw new EntityNotFoundError();
145
+ if (!this.isOwnedBy(entity, actor)) {
146
+ await actor.permissionEvaluator.preEvaluate({ name: permission });
147
+ await actor.permissionEvaluator.evaluate({
148
+ name: permission,
149
+ data: definePolicyData({
150
+ [BuiltInPolicyType.ATTRIBUTES]: entity,
151
+ ...this.tokenRealmMatch(entity)
152
+ })
153
+ });
154
+ }
155
+ return entity;
156
+ }
157
+ /**
158
+ * Revoke, not delete. The row is stamped and the jti is blocklisted with a
159
+ * TTL pinned to the token's real expiry, so an in-flight access token stops
160
+ * introspecting as active instead of surviving to its own `exp`.
161
+ */ async revoke(entity) {
162
+ const at = (/* @__PURE__ */ new Date()).toISOString();
163
+ await this.repository.revokeById(entity.id, at);
164
+ entity.revokedAt = at;
165
+ if (this.tokenRepository) await this.tokenRepository.setInactive(entity.id, Math.floor(new Date(entity.expiresAt).getTime() / 1e3));
166
+ }
167
+ hasTargetFilter(query) {
168
+ if (!isObject(query)) return false;
169
+ let parsed;
170
+ try {
171
+ parsed = SessionTokenService.queryCodec.decode(query);
172
+ } catch {
173
+ return false;
174
+ }
175
+ if (!parsed) return false;
176
+ return this.hasTargetCondition(parsed.filters);
177
+ }
178
+ /**
179
+ * Whether the condition BOUNDS the query to a target scope.
180
+ *
181
+ * The question is not "does a target key appear somewhere" but "is the
182
+ * result set constrained by one". Those differ, and the difference is a
183
+ * mass revoke:
184
+ *
185
+ * - `and` is bounded when ANY conjunct is: the others can only narrow it.
186
+ * - `or` is bounded only when EVERY branch is. `or(eq(id,x), eq(kind,access))`
187
+ * names a target key and still selects every access token.
188
+ * - `not` is never a scope. A negation of a scoped predicate is its
189
+ * complement, which is nearly everything.
190
+ *
191
+ * The expression dialect is what makes the last two reachable: rapiq
192
+ * collapses `not(eq(...))` into an `ne` leaf, but `not(and(...))` stays a
193
+ * compound node, and `or(...)` has no bracket-dialect spelling at all.
194
+ */ hasTargetCondition(condition) {
195
+ if (isFilters(condition)) {
196
+ if (condition.operator === FilterCompoundOperator.NOT) return false;
197
+ if (condition.operator === FilterCompoundOperator.OR) return condition.value.length > 0 && condition.value.every((child) => this.hasTargetCondition(child));
198
+ return condition.value.some((child) => this.hasTargetCondition(child));
199
+ }
200
+ if (isFilter(condition)) {
201
+ if (!SESSION_TOKEN_FILTER_KEYS.includes(condition.field)) return false;
202
+ if (condition.operator === FilterFieldOperator.EQUAL) return condition.value !== "" && condition.value !== null && typeof condition.value !== "undefined";
203
+ if (condition.operator === FilterFieldOperator.IN) return Array.isArray(condition.value) && condition.value.length > 0;
204
+ return false;
205
+ }
206
+ return false;
207
+ }
208
+ /**
209
+ * Schemaless decode — dialect detection only. The allow-list is enforced
210
+ * downstream by the schema-bound decode.
211
+ */ static queryCodec = createURLCodec();
212
+ };
213
+ //#endregion
214
+ export { SESSION_TOKEN_FILTER_KEYS, SessionTokenService };
215
+
216
+ //# sourceMappingURL=service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","definePolicyData","AuthupError","EntityNotFoundError","ErrorCode","isObject","createURLCodec","FilterCompoundOperator","FilterFieldOperator","and","eq","isFilter","isFilters","PermissionName","AbstractEntityService","appendQueryConditions","decodeQuery","sessionTokenSchema","SESSION_TOKEN_FILTER_KEYS","SessionTokenService","repository","tokenRepository","ctx","isOwnedBy","entity","actor","session","identity","sub","data","id","subKind","type","tokenRealmMatch","resourceRealmMatch","realmId","getMany","query","parsed","schema","canReadAll","permissionEvaluator","preEvaluate","name","SESSION_READ","e","scoped","findMany","entities","meta","total","push","evaluate","ATTRIBUTES","getOne","loadOneForActor","delete","SESSION_DELETE","revoke","deleteMany","code","IDENTITY_UNAUTHORIZED","message","hasTargetFilter","BAD_REQUEST","parameters","canDeleteAll","findAllByQuery","count","permission","findOneWithSessionById","at","Date","toISOString","revokeById","revokedAt","setInactive","Math","floor","expiresAt","getTime","queryCodec","decode","hasTargetCondition","filters","condition","operator","NOT","OR","value","length","every","child","some","includes","field","EQUAL","IN","Array","isArray"],"sources":["../../../../src/core/entities/session-token/service.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\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 { BuiltInPolicyType, definePolicyData } from '@authup/access';\nimport { AuthupError, EntityNotFoundError, ErrorCode } from '@authup/errors';\nimport { isObject } from '@authup/kit';\nimport { createURLCodec } from '@rapiq/codec-url';\nimport type { ICondition } from '@rapiq/core';\nimport {\n FilterCompoundOperator,\n FilterFieldOperator,\n and,\n eq,\n isFilter,\n isFilters,\n} from '@rapiq/core';\nimport { PermissionName } from '@authup/core-kit';\nimport type { Session, SessionToken } from '@authup/core-kit';\nimport { AbstractEntityService } from '@authup/server-kit';\nimport type { ActorContext, EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IOAuth2TokenRepository, ISessionTokenRepository } from '../../oauth2/index.ts';\nimport { appendQueryConditions, decodeQuery } from '../../query/index.ts';\nimport { sessionTokenSchema } from './schema.ts';\nimport type { ISessionTokenService, SessionTokenDeleteManyResult } from './types.ts';\n\n/**\n * Filter keys that make a bulk revoke a TARGETED one. A query carrying none of\n * them is rejected rather than treated as \"everything\": unlike the session\n * bulk revoke, there is no meaningful self-service fallback here, so an\n * unrecognized filter must fail loudly instead of silently widening.\n */\nexport const SESSION_TOKEN_FILTER_KEYS = [\n 'id',\n 'sessionId',\n 'clientId',\n] as const;\n\nexport type SessionTokenServiceContext = {\n repository: ISessionTokenRepository,\n tokenRepository?: IOAuth2TokenRepository,\n};\n\nexport class SessionTokenService extends AbstractEntityService implements ISessionTokenService {\n protected repository: ISessionTokenRepository;\n\n protected tokenRepository?: IOAuth2TokenRepository;\n\n constructor(ctx: SessionTokenServiceContext) {\n super();\n this.repository = ctx.repository;\n this.tokenRepository = ctx.tokenRepository;\n }\n\n /**\n * A token row carries no subject of its own, so ownership resolves through\n * the joined session. A row whose session did not load fails closed.\n */\n protected isOwnedBy(entity: SessionToken, actor: ActorContext): boolean {\n const session = entity.session as Session | undefined;\n\n return !!actor.identity &&\n !!session &&\n session.sub === actor.identity.data.id &&\n session.subKind === actor.identity.type;\n }\n\n /**\n * The realm the row belongs to, taken from its session. Absent when the\n * session did not load, which leaves the realm factor neutral, so the\n * per-row permission check below is what denies.\n */\n protected tokenRealmMatch(entity: SessionToken) {\n const session = entity.session as Session | undefined;\n if (!session) {\n return {};\n }\n\n return this.resourceRealmMatch({ realmId: session.realmId });\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<SessionToken>> {\n const parsed = await decodeQuery(query, { schema: sessionTokenSchema, actor });\n\n let canReadAll = true;\n try {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.SESSION_READ });\n } catch (e) {\n if (!actor.identity) {\n throw e;\n }\n canReadAll = false;\n }\n\n if (!canReadAll) {\n // Self-service: mandatory ownership scope through the session,\n // AND-injected so a client filter cannot displace it.\n const scoped = appendQueryConditions(\n parsed,\n and(\n eq('session.sub', actor.identity!.data.id),\n eq('session.subKind', actor.identity!.type),\n ),\n );\n\n return this.repository.findMany(scoped);\n }\n\n const { data: entities, meta } = await this.repository.findMany(parsed);\n\n const data: SessionToken[] = [];\n let { total } = meta;\n\n for (const entity of entities) {\n if (this.isOwnedBy(entity, actor)) {\n data.push(entity);\n continue;\n }\n\n try {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.SESSION_READ,\n data: definePolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: entity,\n ...this.tokenRealmMatch(entity),\n }),\n });\n data.push(entity);\n } catch {\n total -= 1;\n }\n }\n\n return {\n data,\n meta: {\n ...meta,\n total,\n },\n };\n }\n\n async getOne(id: string, actor: ActorContext): Promise<SessionToken> {\n const entity = await this.loadOneForActor(id, actor, PermissionName.SESSION_READ);\n\n return entity;\n }\n\n async delete(id: string, actor: ActorContext): Promise<SessionToken> {\n const entity = await this.loadOneForActor(id, actor, PermissionName.SESSION_DELETE);\n\n await this.revoke(entity);\n\n return entity;\n }\n\n async deleteMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<SessionTokenDeleteManyResult> {\n if (!actor.identity) {\n throw new AuthupError({ code: ErrorCode.IDENTITY_UNAUTHORIZED, message: 'Authentication required.' });\n }\n\n if (!this.hasTargetFilter(query)) {\n throw new AuthupError({\n code: ErrorCode.BAD_REQUEST,\n message: 'A bulk revoke must be scoped by id, sessionId or clientId.',\n });\n }\n\n const parsed = await decodeQuery(query, {\n schema: sessionTokenSchema,\n parameters: ['filters'],\n actor,\n });\n\n let canDeleteAll = true;\n try {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.SESSION_DELETE });\n } catch {\n canDeleteAll = false;\n }\n\n const scoped = canDeleteAll ? parsed : appendQueryConditions(\n parsed,\n and(\n eq('session.sub', actor.identity.data.id),\n eq('session.subKind', actor.identity.type),\n ),\n );\n\n const entities = await this.repository.findAllByQuery(scoped);\n\n let count = 0;\n for (const entity of entities) {\n if (!this.isOwnedBy(entity, actor)) {\n try {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.SESSION_DELETE,\n data: definePolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: entity,\n ...this.tokenRealmMatch(entity),\n }),\n });\n } catch {\n continue;\n }\n }\n\n await this.revoke(entity);\n count += 1;\n }\n\n return { count };\n }\n\n // -----------------------------------------------------\n\n protected async loadOneForActor(\n id: string,\n actor: ActorContext,\n permission: `${PermissionName}`,\n ): Promise<SessionToken> {\n const entity = await this.repository.findOneWithSessionById(id);\n\n if (!entity) {\n throw new EntityNotFoundError();\n }\n\n if (!this.isOwnedBy(entity, actor)) {\n await actor.permissionEvaluator.preEvaluate({ name: permission });\n await actor.permissionEvaluator.evaluate({\n name: permission,\n data: definePolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: entity,\n ...this.tokenRealmMatch(entity),\n }),\n });\n }\n\n return entity;\n }\n\n /**\n * Revoke, not delete. The row is stamped and the jti is blocklisted with a\n * TTL pinned to the token's real expiry, so an in-flight access token stops\n * introspecting as active instead of surviving to its own `exp`.\n */\n protected async revoke(entity: SessionToken): Promise<void> {\n const at = new Date().toISOString();\n\n await this.repository.revokeById(entity.id, at);\n\n // Stamp the in-memory row too: `delete()` returns this object as the\n // response body, and without it a just-revoked token reports\n // `revokedAt: null` until the client reads it again.\n entity.revokedAt = at;\n\n if (this.tokenRepository) {\n await this.tokenRepository.setInactive(\n entity.id,\n Math.floor(new Date(entity.expiresAt).getTime() / 1000),\n );\n }\n }\n\n protected hasTargetFilter(query?: Record<string, any>): boolean {\n if (!isObject(query)) {\n return false;\n }\n\n let parsed;\n try {\n parsed = SessionTokenService.queryCodec.decode(query);\n } catch {\n return false;\n }\n\n if (!parsed) {\n return false;\n }\n\n return this.hasTargetCondition(parsed.filters);\n }\n\n /**\n * Whether the condition BOUNDS the query to a target scope.\n *\n * The question is not \"does a target key appear somewhere\" but \"is the\n * result set constrained by one\". Those differ, and the difference is a\n * mass revoke:\n *\n * - `and` is bounded when ANY conjunct is: the others can only narrow it.\n * - `or` is bounded only when EVERY branch is. `or(eq(id,x), eq(kind,access))`\n * names a target key and still selects every access token.\n * - `not` is never a scope. A negation of a scoped predicate is its\n * complement, which is nearly everything.\n *\n * The expression dialect is what makes the last two reachable: rapiq\n * collapses `not(eq(...))` into an `ne` leaf, but `not(and(...))` stays a\n * compound node, and `or(...)` has no bracket-dialect spelling at all.\n */\n protected hasTargetCondition(condition: ICondition): boolean {\n if (isFilters(condition)) {\n if (condition.operator === FilterCompoundOperator.NOT) {\n return false;\n }\n\n if (condition.operator === FilterCompoundOperator.OR) {\n return condition.value.length > 0 &&\n condition.value.every((child) => this.hasTargetCondition(child));\n }\n\n return condition.value.some((child) => this.hasTargetCondition(child));\n }\n\n if (isFilter(condition)) {\n if (!(SESSION_TOKEN_FILTER_KEYS as readonly string[]).includes(condition.field)) {\n return false;\n }\n\n // The OPERATOR decides, not just the field. A negation or a range\n // names a target key while selecting nearly every row.\n //\n // Note this guard is inverted relative to the session bulk revoke,\n // which was the model for it: there, failing the check falls back\n // to the SELF-service path, so a permissive check is the safe\n // direction. Here, passing it IS the destructive path.\n if (condition.operator === FilterFieldOperator.EQUAL) {\n return condition.value !== '' &&\n condition.value !== null &&\n typeof condition.value !== 'undefined';\n }\n\n if (condition.operator === FilterFieldOperator.IN) {\n // An empty membership set is not a scope: it decodes to a\n // predicate nothing satisfies, but it would still authorize the\n // admin path alongside whatever else the query carries.\n return Array.isArray(condition.value) && condition.value.length > 0;\n }\n\n return false;\n }\n\n return false;\n }\n\n /**\n * Schemaless decode — dialect detection only. The allow-list is enforced\n * downstream by the schema-bound decode.\n */\n protected static queryCodec = createURLCodec();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;GAmCA,MAAakB,4BAA4B;CACrC;CACA;CACA;AACH;AAOD,IAAaC,sBAAb,MAAaA,4BAA4BL,sBAAAA;CAC3BM;CAEAC;CAEV,YAAYC,KAAiC;EACzC,MAAK;EACL,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkBC,IAAID;CAC/B;;;;IAMA,UAAoBG,QAAsBC,OAA8B;EACpE,MAAMC,UAAUF,OAAOE;EAEvB,OAAO,CAAC,CAACD,MAAME,YACX,CAAC,CAACD,WACFA,QAAQE,QAAQH,MAAME,SAASE,KAAKC,MACpCJ,QAAQK,YAAYN,MAAME,SAASK;CAC3C;;;;;IAOA,gBAA0BR,QAAsB;EAC5C,MAAME,UAAUF,OAAOE;EACvB,IAAI,CAACA,SACD,OAAO,CAAC;EAGZ,OAAO,KAAKQ,mBAAmB,EAAEC,SAAST,QAAQS,QAAQ,CAAA;CAC9D;CAEA,MAAMC,QACFC,OACAZ,OACqD;EACrD,MAAMa,SAAS,MAAMtB,YAAYqB,OAAO;GAAEE,QAAQtB;GAAoBQ;EAAM,CAAA;EAE5E,IAAIe,aAAa;EACjB,IAAI;GACA,MAAMf,MAAMgB,oBAAoBC,YAAY,EAAEC,MAAM9B,eAAe+B,aAAa,CAAA;EACpF,SAASC,GAAG;GACR,IAAI,CAACpB,MAAME,UACP,MAAMkB;GAEVL,aAAa;EACjB;EAEA,IAAI,CAACA,YAAY;GAGb,MAAMM,SAAS/B,sBACXuB,QACA7B,IACIC,GAAG,eAAee,MAAME,SAAUE,KAAKC,EAAE,GACzCpB,GAAG,mBAAmBe,MAAME,SAAUK,IAAI,CAAA,CAAA;GAIlD,OAAO,KAAKZ,WAAW2B,SAASD,MAAAA;EACpC;EAEA,MAAM,EAAEjB,MAAMmB,UAAUC,SAAS,MAAM,KAAK7B,WAAW2B,SAAST,MAAAA;EAEhE,MAAMT,OAAuB,CAAA;EAC7B,IAAI,EAAEqB,UAAUD;EAEhB,KAAK,MAAMzB,UAAUwB,UAAU;GAC3B,IAAI,KAAKzB,UAAUC,QAAQC,KAAAA,GAAQ;IAC/BI,KAAKsB,KAAK3B,MAAAA;IACV;GACJ;GAEA,IAAI;IACA,MAAMC,MAAMgB,oBAAoBW,SAAS;KACrCT,MAAM9B,eAAe+B;KACrBf,MAAM5B,iBAAiB;OAClBD,kBAAkBqD,aAAa7B;MAChC,GAAG,KAAKS,gBAAgBT,MAAAA;KAC5B,CAAA;IACJ,CAAA;IACAK,KAAKsB,KAAK3B,MAAAA;GACd,QAAQ;IACJ0B,SAAS;GACb;EACJ;EAEA,OAAO;GACHrB;GACAoB,MAAM;IACF,GAAGA;IACHC;GACJ;EACJ;CACJ;CAEA,MAAMI,OAAOxB,IAAYL,OAA4C;EAGjE,OAAOD,MAFc,KAAK+B,gBAAgBzB,IAAIL,OAAOZ,eAAe+B,YAAY;CAGpF;CAEA,MAAMY,OAAO1B,IAAYL,OAA4C;EACjE,MAAMD,SAAS,MAAM,KAAK+B,gBAAgBzB,IAAIL,OAAOZ,eAAe4C,cAAc;EAElF,MAAM,KAAKC,OAAOlC,MAAAA;EAElB,OAAOA;CACX;CAEA,MAAMmC,WACFtB,OACAZ,OACqC;EACrC,IAAI,CAACA,MAAME,UACP,MAAM,IAAIzB,YAAY;GAAE0D,MAAMxD,UAAUyD;GAAuBC,SAAS;EAA2B,CAAA;EAGvG,IAAI,CAAC,KAAKC,gBAAgB1B,KAAAA,GACtB,MAAM,IAAInC,YAAY;GAClB0D,MAAMxD,UAAU4D;GAChBF,SAAS;EACb,CAAA;EAGJ,MAAMxB,SAAS,MAAMtB,YAAYqB,OAAO;GACpCE,QAAQtB;GACRgD,YAAY,CAAC,SAAU;GACvBxC;EACJ,CAAA;EAEA,IAAIyC,eAAe;EACnB,IAAI;GACA,MAAMzC,MAAMgB,oBAAoBC,YAAY,EAAEC,MAAM9B,eAAe4C,eAAe,CAAA;EACtF,QAAQ;GACJS,eAAe;EACnB;EAEA,MAAMpB,SAASoB,eAAe5B,SAASvB,sBACnCuB,QACA7B,IACIC,GAAG,eAAee,MAAME,SAASE,KAAKC,EAAE,GACxCpB,GAAG,mBAAmBe,MAAME,SAASK,IAAI,CAAA,CAAA;EAIjD,MAAMgB,WAAW,MAAM,KAAK5B,WAAW+C,eAAerB,MAAAA;EAEtD,IAAIsB,QAAQ;EACZ,KAAK,MAAM5C,UAAUwB,UAAU;GAC3B,IAAI,CAAC,KAAKzB,UAAUC,QAAQC,KAAAA,GACxB,IAAI;IACA,MAAMA,MAAMgB,oBAAoBW,SAAS;KACrCT,MAAM9B,eAAe4C;KACrB5B,MAAM5B,iBAAiB;OAClBD,kBAAkBqD,aAAa7B;MAChC,GAAG,KAAKS,gBAAgBT,MAAAA;KAC5B,CAAA;IACJ,CAAA;GACJ,QAAQ;IACJ;GACJ;GAGJ,MAAM,KAAKkC,OAAOlC,MAAAA;GAClB4C,SAAS;EACb;EAEA,OAAO,EAAEA,MAAM;CACnB;CAIA,MAAgBb,gBACZzB,IACAL,OACA4C,YACqB;EACrB,MAAM7C,SAAS,MAAM,KAAKJ,WAAWkD,uBAAuBxC,EAAAA;EAE5D,IAAI,CAACN,QACD,MAAM,IAAIrB,oBAAAA;EAGd,IAAI,CAAC,KAAKoB,UAAUC,QAAQC,KAAAA,GAAQ;GAChC,MAAMA,MAAMgB,oBAAoBC,YAAY,EAAEC,MAAM0B,WAAW,CAAA;GAC/D,MAAM5C,MAAMgB,oBAAoBW,SAAS;IACrCT,MAAM0B;IACNxC,MAAM5B,iBAAiB;MAClBD,kBAAkBqD,aAAa7B;KAChC,GAAG,KAAKS,gBAAgBT,MAAAA;IAC5B,CAAA;GACJ,CAAA;EACJ;EAEA,OAAOA;CACX;;;;;IAOA,MAAgBkC,OAAOlC,QAAqC;EACxD,MAAM+C,sBAAK,IAAIC,KAAAA,EAAAA,CAAOC,YAAW;EAEjC,MAAM,KAAKrD,WAAWsD,WAAWlD,OAAOM,IAAIyC,EAAAA;EAK5C/C,OAAOmD,YAAYJ;EAEnB,IAAI,KAAKlD,iBACL,MAAM,KAAKA,gBAAgBuD,YACvBpD,OAAOM,IACP+C,KAAKC,MAAM,IAAIN,KAAKhD,OAAOuD,SAAS,CAAA,CAAEC,QAAO,IAAK,GAAA,CAAA;CAG9D;CAEUjB,gBAAgB1B,OAAsC;EAC5D,IAAI,CAAChC,SAASgC,KAAAA,GACV,OAAO;EAGX,IAAIC;EACJ,IAAI;GACAA,SAASnB,oBAAoB8D,WAAWC,OAAO7C,KAAAA;EACnD,QAAQ;GACJ,OAAO;EACX;EAEA,IAAI,CAACC,QACD,OAAO;EAGX,OAAO,KAAK6C,mBAAmB7C,OAAO8C,OAAO;CACjD;;;;;;;;;;;;;;;;;IAmBA,mBAA6BC,WAAgC;EACzD,IAAIzE,UAAUyE,SAAAA,GAAY;GACtB,IAAIA,UAAUC,aAAa/E,uBAAuBgF,KAC9C,OAAO;GAGX,IAAIF,UAAUC,aAAa/E,uBAAuBiF,IAC9C,OAAOH,UAAUI,MAAMC,SAAS,KAC5BL,UAAUI,MAAME,OAAOC,UAAU,KAAKT,mBAAmBS,KAAAA,CAAAA;GAGjE,OAAOP,UAAUI,MAAMI,MAAMD,UAAU,KAAKT,mBAAmBS,KAAAA,CAAAA;EACnE;EAEA,IAAIjF,SAAS0E,SAAAA,GAAY;GACrB,IAAI,CAAC,0BAAiDS,SAAST,UAAUU,KAAK,GAC1E,OAAO;GAUX,IAAIV,UAAUC,aAAa9E,oBAAoBwF,OAC3C,OAAOX,UAAUI,UAAU,MACvBJ,UAAUI,UAAU,QACpB,OAAOJ,UAAUI,UAAU;GAGnC,IAAIJ,UAAUC,aAAa9E,oBAAoByF,IAI3C,OAAOC,MAAMC,QAAQd,UAAUI,KAAK,KAAKJ,UAAUI,MAAMC,SAAS;GAGtE,OAAO;EACX;EAEA,OAAO;CACX;;;;IAMA,OAAiBT,aAAa3E,eAAAA;AAClC"}
@@ -0,0 +1,37 @@
1
+ import type { SessionToken } from '@authup/core-kit';
2
+ import type { ActorContext, EntityRepositoryFindManyResult } from '@authup/server-kit';
3
+ export type SessionTokenDeleteManyResult = {
4
+ count: number;
5
+ };
6
+ export interface ISessionTokenService {
7
+ /**
8
+ * List issued tokens. An actor without `SESSION_READ` is scoped to the
9
+ * tokens of its own sessions; an actor with it sees what its realm reach
10
+ * permits.
11
+ */
12
+ getMany(query: Record<string, any>, actor: ActorContext): Promise<EntityRepositoryFindManyResult<SessionToken>>;
13
+ /**
14
+ * Read one token row by its jti. Own tokens need no permission.
15
+ */
16
+ getOne(id: string, actor: ActorContext): Promise<SessionToken>;
17
+ /**
18
+ * REVOKE one token. Own tokens need no permission.
19
+ *
20
+ * Revoke, not delete: the row is stamped `revokedAt` and the jti is
21
+ * blocklisted in cache. Dropping the row would block refresh (the row is
22
+ * the authority for refresh validity since plan 016) while leaving an
23
+ * already-issued access token verifying against a stateless JWKS adapter
24
+ * until its own expiry.
25
+ */
26
+ delete(id: string, actor: ActorContext): Promise<SessionToken>;
27
+ /**
28
+ * Revoke every token matching a query. This is what "sign out of this
29
+ * application" needs: scoped to one client it leaves the session alive, so
30
+ * the other applications riding it stay signed in.
31
+ *
32
+ * Requires a recognized target filter, so it can never degenerate into an
33
+ * unscoped mass revoke.
34
+ */
35
+ deleteMany(query: Record<string, any>, actor: ActorContext): Promise<SessionTokenDeleteManyResult>;
36
+ }
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/session-token/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEvF,MAAM,MAAM,4BAA4B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAA;CAChB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACjC;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC,CAAC;IAEhH;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/D;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/D;;;;;;;OAOG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;CACtG"}
@@ -0,0 +1,4 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/trust-anchor/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMpD,eAAO,MAAM,iBAAiB,gDAkB5B,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/trust-anchor/schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMpD,eAAO,MAAM,iBAAiB,gDA0B5B,CAAC"}
@@ -8,6 +8,14 @@ import { defineSchema } from "@rapiq/core";
8
8
  const schemaMapping = { realm: EntityType.REALM };
9
9
  const trustAnchorSchema = defineSchema({
10
10
  name: EntityType.TRUST_ANCHOR,
11
+ indexes: [
12
+ ["id"],
13
+ ["name", "realmId"],
14
+ ["enabled"],
15
+ ["realmId"],
16
+ ["createdAt"],
17
+ ["updatedAt"]
18
+ ],
11
19
  fields: { allowed: [
12
20
  "id",
13
21
  "name",
@@ -17,23 +25,29 @@ const trustAnchorSchema = defineSchema({
17
25
  "createdAt",
18
26
  "updatedAt"
19
27
  ] },
20
- filters: { allowed: [
21
- "id",
22
- "name",
23
- "enabled",
24
- "realmId"
25
- ] },
28
+ filters: {
29
+ allowed: [
30
+ "id",
31
+ "name",
32
+ "enabled",
33
+ "realmId"
34
+ ],
35
+ indexed: true
36
+ },
26
37
  relations: {
27
38
  allowed: ["realm"],
28
39
  validate: createRelationsReadGate(schemaMapping)
29
40
  },
30
- sort: { allowed: [
31
- "id",
32
- "name",
33
- "enabled",
34
- "createdAt",
35
- "updatedAt"
36
- ] },
41
+ sorts: {
42
+ allowed: [
43
+ "id",
44
+ "name",
45
+ "enabled",
46
+ "createdAt",
47
+ "updatedAt"
48
+ ],
49
+ indexed: true
50
+ },
37
51
  pagination: { maxLimit: 50 },
38
52
  schemaMapping
39
53
  });
@@ -1 +1 @@
1
- {"version":3,"file":"schema.mjs","names":["defineSchema","EntityType","createRelationsReadGate","schemaMapping","realm","REALM","trustAnchorSchema","name","TRUST_ANCHOR","fields","allowed","filters","relations","validate","sort","pagination","maxLimit"],"sources":["../../../../src/core/entities/trust-anchor/schema.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\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 { defineSchema } from '@rapiq/core';\nimport type { TrustAnchor } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport { createRelationsReadGate } from '../../query/relations.ts';\n\nconst schemaMapping = { realm: EntityType.REALM };\n\nexport const trustAnchorSchema = defineSchema<TrustAnchor>({\n name: EntityType.TRUST_ANCHOR,\n fields: {\n allowed: [\n 'id',\n 'name',\n 'certificate',\n 'enabled',\n 'realmId',\n 'createdAt',\n 'updatedAt',\n ],\n },\n filters: { allowed: ['id', 'name', 'enabled', 'realmId'] },\n relations: { allowed: ['realm'], validate: createRelationsReadGate(schemaMapping) },\n sort: { allowed: ['id', 'name', 'enabled', 'createdAt', 'updatedAt'] },\n pagination: { maxLimit: 50 },\n schemaMapping,\n});\n"],"mappings":";;;;;;;AAYA,MAAMG,gBAAgB,EAAEC,OAAOH,WAAWI,MAAM;AAEhD,MAAaC,oBAAoBN,aAA0B;CACvDO,MAAMN,WAAWO;CACjBC,QAAQ,EACJC,SAAS;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACH,EACL;CACAC,SAAS,EAAED,SAAS;EAAC;EAAM;EAAQ;EAAW;CAAU,EAAC;CACzDE,WAAW;EAAEF,SAAS,CAAC,OAAQ;EAAEG,UAAUX,wBAAwBC,aAAAA;CAAe;CAClFW,MAAM,EAAEJ,SAAS;EAAC;EAAM;EAAQ;EAAW;EAAa;CAAY,EAAC;CACrEK,YAAY,EAAEC,UAAU,GAAG;CAC3Bb;AACJ,CAAA"}
1
+ {"version":3,"file":"schema.mjs","names":["defineSchema","EntityType","createRelationsReadGate","schemaMapping","realm","REALM","trustAnchorSchema","name","TRUST_ANCHOR","indexes","fields","allowed","filters","indexed","relations","validate","sorts","pagination","maxLimit"],"sources":["../../../../src/core/entities/trust-anchor/schema.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\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 { defineSchema } from '@rapiq/core';\nimport type { TrustAnchor } from '@authup/core-kit';\nimport { EntityType } from '@authup/core-kit';\nimport { createRelationsReadGate } from '../../query/relations.ts';\n\nconst schemaMapping = { realm: EntityType.REALM };\n\nexport const trustAnchorSchema = defineSchema<TrustAnchor>({\n name: EntityType.TRUST_ANCHOR,\n indexes: [\n ['id'],\n ['name', 'realmId'],\n ['enabled'],\n ['realmId'],\n ['createdAt'],\n ['updatedAt'],\n ],\n fields: {\n allowed: [\n 'id',\n 'name',\n 'certificate',\n 'enabled',\n 'realmId',\n 'createdAt',\n 'updatedAt',\n ],\n },\n filters: { allowed: ['id', 'name', 'enabled', 'realmId'], indexed: true },\n relations: { allowed: ['realm'], validate: createRelationsReadGate(schemaMapping) },\n sorts: { allowed: ['id', 'name', 'enabled', 'createdAt', 'updatedAt'], indexed: true },\n pagination: { maxLimit: 50 },\n schemaMapping,\n});\n"],"mappings":";;;;;;;AAYA,MAAMG,gBAAgB,EAAEC,OAAOH,WAAWI,MAAM;AAEhD,MAAaC,oBAAoBN,aAA0B;CACvDO,MAAMN,WAAWO;CACjBC,SAAS;EACL,CAAC,IAAK;EACN,CAAC,QAAQ,SAAU;EACnB,CAAC,SAAU;EACX,CAAC,SAAU;EACX,CAAC,WAAY;EACb,CAAC,WAAY;CAChB;CACDC,QAAQ,EACJC,SAAS;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACH,EACL;CACAC,SAAS;EAAED,SAAS;GAAC;GAAM;GAAQ;GAAW;EAAU;EAAEE,SAAS;CAAK;CACxEC,WAAW;EAAEH,SAAS,CAAC,OAAQ;EAAEI,UAAUb,wBAAwBC,aAAAA;CAAe;CAClFa,OAAO;EAAEL,SAAS;GAAC;GAAM;GAAQ;GAAW;GAAa;EAAY;EAAEE,SAAS;CAAK;CACrFI,YAAY,EAAEC,UAAU,GAAG;CAC3Bf;AACJ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/trust-anchor/service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAEH,SAAS,EAGT,oBAAoB,EACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,KAAK,EACR,sBAAsB,EACtB,mBAAmB,EACnB,6BAA6B,EAChC,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,yBAAyB,GAAG;IACpC,UAAU,EAAE,sBAAsB,CAAC;IACnC,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,mBAAmB,GAAG,SAAS,CAAC;CAC1D,CAAC;AAQF,qBAAa,kBAAmB,SAAQ,qBAAsB,YAAW,mBAAmB;IACxF,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,SAAS,EAAE,oBAAoB,CAAC;IAE1C,SAAS,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;IAEvC,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,mBAAmB,GAAG,SAAS,CAAC;gBAErD,GAAG,EAAE,yBAAyB;IAQpC,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,6BAAkC,GAC5C,OAAO,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC;IAqDjD,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IAmBjB,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IA6CjB,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IAuCjB,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IA2BvB;;;;;;OAMG;cACa,WAAW,CACvB,IAAI,EAAE,GAAG,SAAS,EAAE,EACpB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,YAAY,EACnB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAC/B,OAAO,CAAC,IAAI,CAAC;IA0BhB,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAMtE"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/trust-anchor/service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAEH,SAAS,EAGT,oBAAoB,EACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,KAAK,EACR,sBAAsB,EACtB,mBAAmB,EACnB,6BAA6B,EAChC,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,yBAAyB,GAAG;IACpC,UAAU,EAAE,sBAAsB,CAAC;IACnC,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,mBAAmB,GAAG,SAAS,CAAC;CAC1D,CAAC;AAQF,qBAAa,kBAAmB,SAAQ,qBAAsB,YAAW,mBAAmB;IACxF,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,SAAS,EAAE,oBAAoB,CAAC;IAE1C,SAAS,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;IAEvC,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,mBAAmB,GAAG,SAAS,CAAC;gBAErD,GAAG,EAAE,yBAAyB;IAQpC,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,6BAAkC,GAC5C,OAAO,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC;IAqDjD,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IAmBjB,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IA6CjB,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IAuCjB,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IA2BvB;;;;;;OAMG;cACa,WAAW,CACvB,IAAI,EAAE,GAAG,SAAS,EAAE,EACpB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,YAAY,EACnB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAC/B,OAAO,CAAC,IAAI,CAAC;IA2BhB,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAMtE"}
@@ -167,6 +167,7 @@ var TrustAnchorService = class extends AbstractEntityService {
167
167
  actorType: actor.identity?.type ?? null,
168
168
  actorId: actor.identity?.data.id ?? null,
169
169
  actorName: actor.identity?.data.name ?? null,
170
+ sessionId: requestContext?.sessionId ?? null,
170
171
  requestPath: requestContext?.requestPath ?? null,
171
172
  requestMethod: requestContext?.requestMethod ?? null,
172
173
  requestIpAddress: requestContext?.requestIpAddress ?? null,