@portaidentity/server 1.7.3 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/applications/index.d.ts +2 -2
  3. package/dist/applications/index.d.ts.map +1 -1
  4. package/dist/applications/index.js +2 -2
  5. package/dist/applications/index.js.map +1 -1
  6. package/dist/applications/repository.d.ts +49 -4
  7. package/dist/applications/repository.d.ts.map +1 -1
  8. package/dist/applications/repository.js +148 -10
  9. package/dist/applications/repository.js.map +1 -1
  10. package/dist/applications/service.d.ts +35 -17
  11. package/dist/applications/service.d.ts.map +1 -1
  12. package/dist/applications/service.js +144 -35
  13. package/dist/applications/service.js.map +1 -1
  14. package/dist/applications/types.d.ts +1 -1
  15. package/dist/applications/types.d.ts.map +1 -1
  16. package/dist/applications/validators.d.ts +14 -0
  17. package/dist/applications/validators.d.ts.map +1 -0
  18. package/dist/applications/validators.js +14 -0
  19. package/dist/applications/validators.js.map +1 -0
  20. package/dist/auth/effective-branding.d.ts +35 -0
  21. package/dist/auth/effective-branding.d.ts.map +1 -0
  22. package/dist/auth/effective-branding.js +81 -0
  23. package/dist/auth/effective-branding.js.map +1 -0
  24. package/dist/auth/email-service.d.ts +3 -8
  25. package/dist/auth/email-service.d.ts.map +1 -1
  26. package/dist/auth/email-service.js +22 -30
  27. package/dist/auth/email-service.js.map +1 -1
  28. package/dist/auth/i18n.d.ts +5 -0
  29. package/dist/auth/i18n.d.ts.map +1 -1
  30. package/dist/auth/i18n.js +6 -5
  31. package/dist/auth/i18n.js.map +1 -1
  32. package/dist/auth/rate-limiter.d.ts +6 -10
  33. package/dist/auth/rate-limiter.d.ts.map +1 -1
  34. package/dist/auth/rate-limiter.js +12 -16
  35. package/dist/auth/rate-limiter.js.map +1 -1
  36. package/dist/auth/recovery-job-processor.d.ts.map +1 -1
  37. package/dist/auth/recovery-job-processor.js +1 -1
  38. package/dist/auth/recovery-job-processor.js.map +1 -1
  39. package/dist/auth/template-engine.d.ts +3 -1
  40. package/dist/auth/template-engine.d.ts.map +1 -1
  41. package/dist/auth/template-engine.js +1 -1
  42. package/dist/auth/template-engine.js.map +1 -1
  43. package/dist/auth/token-repository.d.ts +9 -3
  44. package/dist/auth/token-repository.d.ts.map +1 -1
  45. package/dist/auth/token-repository.js +17 -8
  46. package/dist/auth/token-repository.js.map +1 -1
  47. package/dist/cli/commands/init.d.ts +1 -1
  48. package/dist/cli/commands/init.d.ts.map +1 -1
  49. package/dist/cli/commands/init.js +12 -12
  50. package/dist/cli/commands/init.js.map +1 -1
  51. package/dist/cli/error-handler.d.ts +3 -2
  52. package/dist/cli/error-handler.d.ts.map +1 -1
  53. package/dist/cli/error-handler.js +9 -2
  54. package/dist/cli/error-handler.js.map +1 -1
  55. package/dist/cli/index.d.ts +1 -1
  56. package/dist/cli/index.d.ts.map +1 -1
  57. package/dist/cli/index.js +1 -1
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/clients/index.d.ts +1 -1
  60. package/dist/clients/index.js +1 -1
  61. package/dist/clients/repository.d.ts +24 -0
  62. package/dist/clients/repository.d.ts.map +1 -1
  63. package/dist/clients/repository.js +39 -0
  64. package/dist/clients/repository.js.map +1 -1
  65. package/dist/clients/secret-repository.d.ts +35 -8
  66. package/dist/clients/secret-repository.d.ts.map +1 -1
  67. package/dist/clients/secret-repository.js +69 -16
  68. package/dist/clients/secret-repository.js.map +1 -1
  69. package/dist/clients/secret-service.d.ts +5 -9
  70. package/dist/clients/secret-service.d.ts.map +1 -1
  71. package/dist/clients/secret-service.js +13 -22
  72. package/dist/clients/secret-service.js.map +1 -1
  73. package/dist/clients/service.d.ts +10 -13
  74. package/dist/clients/service.d.ts.map +1 -1
  75. package/dist/clients/service.js +121 -42
  76. package/dist/clients/service.js.map +1 -1
  77. package/dist/clients/types.d.ts +14 -1
  78. package/dist/clients/types.d.ts.map +1 -1
  79. package/dist/clients/types.js +1 -0
  80. package/dist/clients/types.js.map +1 -1
  81. package/dist/clients/validators.d.ts +83 -1
  82. package/dist/clients/validators.d.ts.map +1 -1
  83. package/dist/clients/validators.js +110 -0
  84. package/dist/clients/validators.js.map +1 -1
  85. package/dist/config/index.d.ts +1 -0
  86. package/dist/config/index.d.ts.map +1 -1
  87. package/dist/config/index.js +1 -0
  88. package/dist/config/index.js.map +1 -1
  89. package/dist/config/schema.d.ts +1 -0
  90. package/dist/config/schema.d.ts.map +1 -1
  91. package/dist/config/schema.js +23 -1
  92. package/dist/config/schema.js.map +1 -1
  93. package/dist/custom-claims/repository.d.ts +14 -9
  94. package/dist/custom-claims/repository.d.ts.map +1 -1
  95. package/dist/custom-claims/repository.js +38 -11
  96. package/dist/custom-claims/repository.js.map +1 -1
  97. package/dist/custom-claims/service.d.ts +11 -6
  98. package/dist/custom-claims/service.d.ts.map +1 -1
  99. package/dist/custom-claims/service.js +43 -20
  100. package/dist/custom-claims/service.js.map +1 -1
  101. package/dist/index.js +8 -2
  102. package/dist/index.js.map +1 -1
  103. package/dist/lib/admin-permissions.d.ts +12 -7
  104. package/dist/lib/admin-permissions.d.ts.map +1 -1
  105. package/dist/lib/admin-permissions.js +26 -16
  106. package/dist/lib/admin-permissions.js.map +1 -1
  107. package/dist/lib/audit-log.d.ts +2 -2
  108. package/dist/lib/audit-log.d.ts.map +1 -1
  109. package/dist/lib/audit-log.js +1 -1
  110. package/dist/lib/audit-log.js.map +1 -1
  111. package/dist/lib/authority-revocation.d.ts +18 -0
  112. package/dist/lib/authority-revocation.d.ts.map +1 -0
  113. package/dist/lib/authority-revocation.js +37 -0
  114. package/dist/lib/authority-revocation.js.map +1 -0
  115. package/dist/lib/branding-assets.d.ts +35 -5
  116. package/dist/lib/branding-assets.d.ts.map +1 -1
  117. package/dist/lib/branding-assets.js +33 -26
  118. package/dist/lib/branding-assets.js.map +1 -1
  119. package/dist/lib/bulk-operations.d.ts +1 -1
  120. package/dist/lib/bulk-operations.d.ts.map +1 -1
  121. package/dist/lib/bulk-operations.js +1 -13
  122. package/dist/lib/bulk-operations.js.map +1 -1
  123. package/dist/lib/cursor.d.ts +2 -0
  124. package/dist/lib/cursor.d.ts.map +1 -1
  125. package/dist/lib/cursor.js +2 -7
  126. package/dist/lib/cursor.js.map +1 -1
  127. package/dist/lib/database.d.ts.map +1 -1
  128. package/dist/lib/database.js +5 -0
  129. package/dist/lib/database.js.map +1 -1
  130. package/dist/lib/deletion-cleanup.d.ts +43 -0
  131. package/dist/lib/deletion-cleanup.d.ts.map +1 -0
  132. package/dist/lib/deletion-cleanup.js +207 -0
  133. package/dist/lib/deletion-cleanup.js.map +1 -0
  134. package/dist/lib/image-validator.d.ts +3 -1
  135. package/dist/lib/image-validator.d.ts.map +1 -1
  136. package/dist/lib/image-validator.js +32 -19
  137. package/dist/lib/image-validator.js.map +1 -1
  138. package/dist/lib/log-format.d.ts +20 -0
  139. package/dist/lib/log-format.d.ts.map +1 -0
  140. package/dist/lib/log-format.js +22 -0
  141. package/dist/lib/log-format.js.map +1 -0
  142. package/dist/lib/logger.d.ts +3 -1
  143. package/dist/lib/logger.d.ts.map +1 -1
  144. package/dist/lib/logger.js +21 -4
  145. package/dist/lib/logger.js.map +1 -1
  146. package/dist/lib/redis.d.ts.map +1 -1
  147. package/dist/lib/redis.js +3 -0
  148. package/dist/lib/redis.js.map +1 -1
  149. package/dist/lib/session-tracking.d.ts +73 -11
  150. package/dist/lib/session-tracking.d.ts.map +1 -1
  151. package/dist/lib/session-tracking.js +76 -32
  152. package/dist/lib/session-tracking.js.map +1 -1
  153. package/dist/lib/signing-key-crypto.d.ts.map +1 -1
  154. package/dist/lib/signing-key-crypto.js +4 -5
  155. package/dist/lib/signing-key-crypto.js.map +1 -1
  156. package/dist/lib/signing-keys.d.ts +3 -4
  157. package/dist/lib/signing-keys.d.ts.map +1 -1
  158. package/dist/lib/signing-keys.js +66 -41
  159. package/dist/lib/signing-keys.js.map +1 -1
  160. package/dist/lib/super-admin-protection.d.ts +5 -5
  161. package/dist/lib/super-admin-protection.d.ts.map +1 -1
  162. package/dist/lib/super-admin-protection.js +6 -9
  163. package/dist/lib/super-admin-protection.js.map +1 -1
  164. package/dist/lib/system-config-catalog.d.ts +268 -0
  165. package/dist/lib/system-config-catalog.d.ts.map +1 -0
  166. package/dist/lib/system-config-catalog.js +90 -0
  167. package/dist/lib/system-config-catalog.js.map +1 -0
  168. package/dist/lib/system-config.d.ts +30 -33
  169. package/dist/lib/system-config.d.ts.map +1 -1
  170. package/dist/lib/system-config.js +78 -93
  171. package/dist/lib/system-config.js.map +1 -1
  172. package/dist/lib/with-timeout.d.ts +32 -0
  173. package/dist/lib/with-timeout.d.ts.map +1 -0
  174. package/dist/lib/with-timeout.js +45 -0
  175. package/dist/lib/with-timeout.js.map +1 -0
  176. package/dist/middleware/admin-auth.d.ts +6 -5
  177. package/dist/middleware/admin-auth.d.ts.map +1 -1
  178. package/dist/middleware/admin-auth.js +30 -20
  179. package/dist/middleware/admin-auth.js.map +1 -1
  180. package/dist/middleware/admin-cors.d.ts +3 -3
  181. package/dist/middleware/admin-cors.js +3 -3
  182. package/dist/middleware/admin-mutation-audit.d.ts +3 -2
  183. package/dist/middleware/admin-mutation-audit.d.ts.map +1 -1
  184. package/dist/middleware/admin-mutation-audit.js +12 -5
  185. package/dist/middleware/admin-mutation-audit.js.map +1 -1
  186. package/dist/middleware/admin-rate-limiter.d.ts +7 -8
  187. package/dist/middleware/admin-rate-limiter.d.ts.map +1 -1
  188. package/dist/middleware/admin-rate-limiter.js +7 -8
  189. package/dist/middleware/admin-rate-limiter.js.map +1 -1
  190. package/dist/middleware/client-secret-hash.d.ts +10 -29
  191. package/dist/middleware/client-secret-hash.d.ts.map +1 -1
  192. package/dist/middleware/client-secret-hash.js +161 -59
  193. package/dist/middleware/client-secret-hash.js.map +1 -1
  194. package/dist/middleware/health.d.ts +17 -0
  195. package/dist/middleware/health.d.ts.map +1 -1
  196. package/dist/middleware/health.js +25 -21
  197. package/dist/middleware/health.js.map +1 -1
  198. package/dist/middleware/ready.d.ts.map +1 -1
  199. package/dist/middleware/ready.js +1 -12
  200. package/dist/middleware/ready.js.map +1 -1
  201. package/dist/middleware/require-existing-organization.d.ts +18 -0
  202. package/dist/middleware/require-existing-organization.d.ts.map +1 -0
  203. package/dist/middleware/require-existing-organization.js +38 -0
  204. package/dist/middleware/require-existing-organization.js.map +1 -0
  205. package/dist/middleware/require-permission.d.ts.map +1 -1
  206. package/dist/middleware/require-permission.js +35 -1
  207. package/dist/middleware/require-permission.js.map +1 -1
  208. package/dist/middleware/require-user-organization.d.ts.map +1 -1
  209. package/dist/middleware/require-user-organization.js +4 -2
  210. package/dist/middleware/require-user-organization.js.map +1 -1
  211. package/dist/middleware/security-headers.d.ts +18 -0
  212. package/dist/middleware/security-headers.d.ts.map +1 -1
  213. package/dist/middleware/security-headers.js +32 -1
  214. package/dist/middleware/security-headers.js.map +1 -1
  215. package/dist/middleware/tenant-resolver.d.ts +1 -2
  216. package/dist/middleware/tenant-resolver.d.ts.map +1 -1
  217. package/dist/middleware/tenant-resolver.js +1 -5
  218. package/dist/middleware/tenant-resolver.js.map +1 -1
  219. package/dist/middleware/token-rate-limiter.d.ts +37 -16
  220. package/dist/middleware/token-rate-limiter.d.ts.map +1 -1
  221. package/dist/middleware/token-rate-limiter.js +126 -54
  222. package/dist/middleware/token-rate-limiter.js.map +1 -1
  223. package/dist/oidc/account-finder.d.ts +5 -5
  224. package/dist/oidc/account-finder.d.ts.map +1 -1
  225. package/dist/oidc/account-finder.js +31 -23
  226. package/dist/oidc/account-finder.js.map +1 -1
  227. package/dist/oidc/adapter-factory.d.ts.map +1 -1
  228. package/dist/oidc/adapter-factory.js +83 -3
  229. package/dist/oidc/adapter-factory.js.map +1 -1
  230. package/dist/oidc/configuration.d.ts +3 -8
  231. package/dist/oidc/configuration.d.ts.map +1 -1
  232. package/dist/oidc/configuration.js +67 -50
  233. package/dist/oidc/configuration.js.map +1 -1
  234. package/dist/oidc/provider.d.ts.map +1 -1
  235. package/dist/oidc/provider.js +7 -0
  236. package/dist/oidc/provider.js.map +1 -1
  237. package/dist/oidc/redis-adapter.d.ts +2 -3
  238. package/dist/oidc/redis-adapter.d.ts.map +1 -1
  239. package/dist/oidc/redis-adapter.js +54 -46
  240. package/dist/oidc/redis-adapter.js.map +1 -1
  241. package/dist/organizations/branding-url.d.ts +17 -0
  242. package/dist/organizations/branding-url.d.ts.map +1 -0
  243. package/dist/organizations/branding-url.js +38 -0
  244. package/dist/organizations/branding-url.js.map +1 -0
  245. package/dist/organizations/index.d.ts +2 -2
  246. package/dist/organizations/index.d.ts.map +1 -1
  247. package/dist/organizations/index.js +1 -1
  248. package/dist/organizations/index.js.map +1 -1
  249. package/dist/organizations/repository.d.ts +22 -32
  250. package/dist/organizations/repository.d.ts.map +1 -1
  251. package/dist/organizations/repository.js +64 -45
  252. package/dist/organizations/repository.js.map +1 -1
  253. package/dist/organizations/service.d.ts +14 -46
  254. package/dist/organizations/service.d.ts.map +1 -1
  255. package/dist/organizations/service.js +60 -112
  256. package/dist/organizations/service.js.map +1 -1
  257. package/dist/organizations/types.d.ts +1 -15
  258. package/dist/organizations/types.d.ts.map +1 -1
  259. package/dist/organizations/validators.d.ts +41 -0
  260. package/dist/organizations/validators.d.ts.map +1 -0
  261. package/dist/organizations/validators.js +48 -0
  262. package/dist/organizations/validators.js.map +1 -0
  263. package/dist/portability/apply.d.ts +15 -0
  264. package/dist/portability/apply.d.ts.map +1 -0
  265. package/dist/portability/apply.js +274 -0
  266. package/dist/portability/apply.js.map +1 -0
  267. package/dist/portability/authorization.d.ts +30 -0
  268. package/dist/portability/authorization.d.ts.map +1 -0
  269. package/dist/portability/authorization.js +130 -0
  270. package/dist/portability/authorization.js.map +1 -0
  271. package/dist/portability/cleanup.d.ts +29 -0
  272. package/dist/portability/cleanup.d.ts.map +1 -0
  273. package/dist/portability/cleanup.js +167 -0
  274. package/dist/portability/cleanup.js.map +1 -0
  275. package/dist/portability/export.d.ts +18 -0
  276. package/dist/portability/export.d.ts.map +1 -0
  277. package/dist/portability/export.js +125 -0
  278. package/dist/portability/export.js.map +1 -0
  279. package/dist/portability/import-repository.d.ts +204 -0
  280. package/dist/portability/import-repository.d.ts.map +1 -0
  281. package/dist/portability/import-repository.js +348 -0
  282. package/dist/portability/import-repository.js.map +1 -0
  283. package/dist/portability/import-user-client-writers.d.ts +40 -0
  284. package/dist/portability/import-user-client-writers.d.ts.map +1 -0
  285. package/dist/portability/import-user-client-writers.js +171 -0
  286. package/dist/portability/import-user-client-writers.js.map +1 -0
  287. package/dist/portability/index.d.ts +8 -0
  288. package/dist/portability/index.d.ts.map +1 -0
  289. package/dist/portability/index.js +8 -0
  290. package/dist/portability/index.js.map +1 -0
  291. package/dist/portability/plan-support.d.ts +137 -0
  292. package/dist/portability/plan-support.d.ts.map +1 -0
  293. package/dist/portability/plan-support.js +337 -0
  294. package/dist/portability/plan-support.js.map +1 -0
  295. package/dist/portability/plan.d.ts +34 -0
  296. package/dist/portability/plan.d.ts.map +1 -0
  297. package/dist/portability/plan.js +450 -0
  298. package/dist/portability/plan.js.map +1 -0
  299. package/dist/portability/repository.d.ts +95 -0
  300. package/dist/portability/repository.d.ts.map +1 -0
  301. package/dist/portability/repository.js +390 -0
  302. package/dist/portability/repository.js.map +1 -0
  303. package/dist/portability/schema.d.ts +591 -0
  304. package/dist/portability/schema.d.ts.map +1 -0
  305. package/dist/portability/schema.js +459 -0
  306. package/dist/portability/schema.js.map +1 -0
  307. package/dist/portability/types.d.ts +382 -0
  308. package/dist/portability/types.d.ts.map +1 -0
  309. package/dist/portability/types.js +19 -0
  310. package/dist/portability/types.js.map +1 -0
  311. package/dist/rbac/errors.d.ts +4 -0
  312. package/dist/rbac/errors.d.ts.map +1 -1
  313. package/dist/rbac/errors.js +7 -0
  314. package/dist/rbac/errors.js.map +1 -1
  315. package/dist/rbac/index.d.ts +3 -3
  316. package/dist/rbac/index.d.ts.map +1 -1
  317. package/dist/rbac/index.js +3 -3
  318. package/dist/rbac/index.js.map +1 -1
  319. package/dist/rbac/mapping-repository.d.ts +84 -9
  320. package/dist/rbac/mapping-repository.d.ts.map +1 -1
  321. package/dist/rbac/mapping-repository.js +222 -55
  322. package/dist/rbac/mapping-repository.js.map +1 -1
  323. package/dist/rbac/permission-repository.d.ts +36 -19
  324. package/dist/rbac/permission-repository.d.ts.map +1 -1
  325. package/dist/rbac/permission-repository.js +93 -35
  326. package/dist/rbac/permission-repository.js.map +1 -1
  327. package/dist/rbac/permission-service.d.ts +18 -19
  328. package/dist/rbac/permission-service.d.ts.map +1 -1
  329. package/dist/rbac/permission-service.js +100 -57
  330. package/dist/rbac/permission-service.js.map +1 -1
  331. package/dist/rbac/role-repository.d.ts +29 -24
  332. package/dist/rbac/role-repository.d.ts.map +1 -1
  333. package/dist/rbac/role-repository.js +66 -43
  334. package/dist/rbac/role-repository.js.map +1 -1
  335. package/dist/rbac/role-service.d.ts +35 -32
  336. package/dist/rbac/role-service.d.ts.map +1 -1
  337. package/dist/rbac/role-service.js +210 -96
  338. package/dist/rbac/role-service.js.map +1 -1
  339. package/dist/rbac/slugs.d.ts +16 -27
  340. package/dist/rbac/slugs.d.ts.map +1 -1
  341. package/dist/rbac/slugs.js +36 -59
  342. package/dist/rbac/slugs.js.map +1 -1
  343. package/dist/rbac/types.d.ts +2 -4
  344. package/dist/rbac/types.d.ts.map +1 -1
  345. package/dist/rbac/types.js.map +1 -1
  346. package/dist/rbac/user-role-service.d.ts +23 -24
  347. package/dist/rbac/user-role-service.d.ts.map +1 -1
  348. package/dist/rbac/user-role-service.js +117 -61
  349. package/dist/rbac/user-role-service.js.map +1 -1
  350. package/dist/routes/applications.d.ts +4 -2
  351. package/dist/routes/applications.d.ts.map +1 -1
  352. package/dist/routes/applications.js +57 -19
  353. package/dist/routes/applications.js.map +1 -1
  354. package/dist/routes/audit.js +1 -1
  355. package/dist/routes/audit.js.map +1 -1
  356. package/dist/routes/branding.d.ts +3 -3
  357. package/dist/routes/branding.d.ts.map +1 -1
  358. package/dist/routes/branding.js +44 -16
  359. package/dist/routes/branding.js.map +1 -1
  360. package/dist/routes/bulk.d.ts +0 -5
  361. package/dist/routes/bulk.d.ts.map +1 -1
  362. package/dist/routes/bulk.js +3 -5
  363. package/dist/routes/bulk.js.map +1 -1
  364. package/dist/routes/clients.d.ts +4 -4
  365. package/dist/routes/clients.d.ts.map +1 -1
  366. package/dist/routes/clients.js +113 -52
  367. package/dist/routes/clients.js.map +1 -1
  368. package/dist/routes/config.d.ts +17 -12
  369. package/dist/routes/config.d.ts.map +1 -1
  370. package/dist/routes/config.js +165 -64
  371. package/dist/routes/config.js.map +1 -1
  372. package/dist/routes/custom-claims.d.ts.map +1 -1
  373. package/dist/routes/custom-claims.js +8 -2
  374. package/dist/routes/custom-claims.js.map +1 -1
  375. package/dist/routes/exports.d.ts +2 -1
  376. package/dist/routes/exports.d.ts.map +1 -1
  377. package/dist/routes/exports.js +57 -1
  378. package/dist/routes/exports.js.map +1 -1
  379. package/dist/routes/imports.d.ts +2 -2
  380. package/dist/routes/imports.d.ts.map +1 -1
  381. package/dist/routes/imports.js +95 -40
  382. package/dist/routes/imports.js.map +1 -1
  383. package/dist/routes/interactions.d.ts.map +1 -1
  384. package/dist/routes/interactions.js +113 -87
  385. package/dist/routes/interactions.js.map +1 -1
  386. package/dist/routes/invitation.d.ts.map +1 -1
  387. package/dist/routes/invitation.js +28 -27
  388. package/dist/routes/invitation.js.map +1 -1
  389. package/dist/routes/keys.d.ts.map +1 -1
  390. package/dist/routes/keys.js +26 -13
  391. package/dist/routes/keys.js.map +1 -1
  392. package/dist/routes/magic-link.d.ts.map +1 -1
  393. package/dist/routes/magic-link.js +5 -17
  394. package/dist/routes/magic-link.js.map +1 -1
  395. package/dist/routes/organizations.d.ts +1 -2
  396. package/dist/routes/organizations.d.ts.map +1 -1
  397. package/dist/routes/organizations.js +43 -104
  398. package/dist/routes/organizations.js.map +1 -1
  399. package/dist/routes/password-reset.d.ts.map +1 -1
  400. package/dist/routes/password-reset.js +13 -35
  401. package/dist/routes/password-reset.js.map +1 -1
  402. package/dist/routes/permissions.d.ts +1 -1
  403. package/dist/routes/permissions.d.ts.map +1 -1
  404. package/dist/routes/permissions.js +58 -17
  405. package/dist/routes/permissions.js.map +1 -1
  406. package/dist/routes/public-branding.d.ts +16 -0
  407. package/dist/routes/public-branding.d.ts.map +1 -0
  408. package/dist/routes/public-branding.js +52 -0
  409. package/dist/routes/public-branding.js.map +1 -0
  410. package/dist/routes/roles.d.ts +1 -1
  411. package/dist/routes/roles.d.ts.map +1 -1
  412. package/dist/routes/roles.js +63 -21
  413. package/dist/routes/roles.js.map +1 -1
  414. package/dist/routes/sessions.d.ts.map +1 -1
  415. package/dist/routes/sessions.js +23 -12
  416. package/dist/routes/sessions.js.map +1 -1
  417. package/dist/routes/two-factor.d.ts.map +1 -1
  418. package/dist/routes/two-factor.js +91 -38
  419. package/dist/routes/two-factor.js.map +1 -1
  420. package/dist/routes/user-roles.d.ts.map +1 -1
  421. package/dist/routes/user-roles.js +56 -9
  422. package/dist/routes/user-roles.js.map +1 -1
  423. package/dist/routes/users.d.ts +4 -8
  424. package/dist/routes/users.d.ts.map +1 -1
  425. package/dist/routes/users.js +108 -265
  426. package/dist/routes/users.js.map +1 -1
  427. package/dist/server.d.ts.map +1 -1
  428. package/dist/server.js +53 -37
  429. package/dist/server.js.map +1 -1
  430. package/dist/two-factor/errors.d.ts +9 -0
  431. package/dist/two-factor/errors.d.ts.map +1 -1
  432. package/dist/two-factor/errors.js +12 -0
  433. package/dist/two-factor/errors.js.map +1 -1
  434. package/dist/two-factor/index.d.ts +5 -4
  435. package/dist/two-factor/index.d.ts.map +1 -1
  436. package/dist/two-factor/index.js +4 -4
  437. package/dist/two-factor/index.js.map +1 -1
  438. package/dist/two-factor/repository.d.ts +17 -6
  439. package/dist/two-factor/repository.d.ts.map +1 -1
  440. package/dist/two-factor/repository.js +37 -9
  441. package/dist/two-factor/repository.js.map +1 -1
  442. package/dist/two-factor/service.d.ts.map +1 -1
  443. package/dist/two-factor/service.js +26 -19
  444. package/dist/two-factor/service.js.map +1 -1
  445. package/dist/two-factor/totp.d.ts +13 -2
  446. package/dist/two-factor/totp.d.ts.map +1 -1
  447. package/dist/two-factor/totp.js +20 -7
  448. package/dist/two-factor/totp.js.map +1 -1
  449. package/dist/two-factor/types.d.ts +3 -0
  450. package/dist/two-factor/types.d.ts.map +1 -1
  451. package/dist/two-factor/types.js +5 -0
  452. package/dist/two-factor/types.js.map +1 -1
  453. package/dist/users/gdpr.d.ts +2 -40
  454. package/dist/users/gdpr.d.ts.map +1 -1
  455. package/dist/users/gdpr.js +3 -110
  456. package/dist/users/gdpr.js.map +1 -1
  457. package/dist/users/index.d.ts +5 -4
  458. package/dist/users/index.d.ts.map +1 -1
  459. package/dist/users/index.js +5 -4
  460. package/dist/users/index.js.map +1 -1
  461. package/dist/users/repository.d.ts +49 -3
  462. package/dist/users/repository.d.ts.map +1 -1
  463. package/dist/users/repository.js +169 -18
  464. package/dist/users/repository.js.map +1 -1
  465. package/dist/users/service.d.ts +19 -51
  466. package/dist/users/service.d.ts.map +1 -1
  467. package/dist/users/service.js +72 -122
  468. package/dist/users/service.js.map +1 -1
  469. package/dist/users/types.d.ts +4 -5
  470. package/dist/users/types.d.ts.map +1 -1
  471. package/dist/users/types.js.map +1 -1
  472. package/dist/users/validators.d.ts +28 -0
  473. package/dist/users/validators.d.ts.map +1 -0
  474. package/dist/users/validators.js +25 -0
  475. package/dist/users/validators.js.map +1 -0
  476. package/locales/default/en/errors.json +2 -1
  477. package/migrations/024_application_client_correction.sql +39 -0
  478. package/migrations/025_record_deletion_lifecycle.sql +26 -0
  479. package/migrations/026_simplify_user_lifecycle.sql +33 -0
  480. package/migrations/027_branding_asset_size_limits.sql +19 -0
  481. package/migrations/028_totp_replay_protection.sql +17 -0
  482. package/migrations/029_public_session_identifiers.sql +16 -0
  483. package/migrations/030_global_configuration_catalog.sql +39 -0
  484. package/migrations/031_monotonic_updated_at.sql +28 -0
  485. package/migrations/032_client_require_consent.sql +15 -0
  486. package/package.json +2 -2
  487. package/dist/lib/data-import-plan.d.ts +0 -50
  488. package/dist/lib/data-import-plan.d.ts.map +0 -1
  489. package/dist/lib/data-import-plan.js +0 -235
  490. package/dist/lib/data-import-plan.js.map +0 -1
  491. package/dist/lib/data-import.d.ts +0 -276
  492. package/dist/lib/data-import.d.ts.map +0 -1
  493. package/dist/lib/data-import.js +0 -1694
  494. package/dist/lib/data-import.js.map +0 -1
@@ -24,40 +24,79 @@ import type { Role, Permission, UserRole } from './types.js';
24
24
  * already-assigned permissions are silently skipped. This allows
25
25
  * callers to assign without checking for existing assignments first.
26
26
  *
27
+ * @param applicationId - Authoritative parent application UUID
27
28
  * @param roleId - Role UUID
28
29
  * @param permissionIds - Array of permission UUIDs to assign
30
+ * @returns Permission IDs inserted by this request
29
31
  */
30
- export declare function assignPermissionsToRole(roleId: string, permissionIds: string[]): Promise<void>;
32
+ export declare function assignPermissionsToRole(applicationId: string, roleId: string, permissionIds: string[]): Promise<string[]>;
31
33
  /**
32
34
  * Remove multiple permissions from a role.
33
35
  *
34
36
  * Silently succeeds if any of the permission IDs are not currently
35
37
  * assigned to the role.
36
38
  *
39
+ * @param applicationId - Authoritative parent application UUID
37
40
  * @param roleId - Role UUID
38
41
  * @param permissionIds - Array of permission UUIDs to remove
42
+ * @returns Permission IDs removed by this request
39
43
  */
40
- export declare function removePermissionsFromRole(roleId: string, permissionIds: string[]): Promise<void>;
44
+ export declare function removePermissionsFromRole(applicationId: string, roleId: string, permissionIds: string[]): Promise<string[]>;
45
+ /** Records locked for one application-scoped role-permission mutation. */
46
+ export interface LockedRolePermissionTargets {
47
+ /** Role selected through the route application, or null when it is not a child. */
48
+ readonly role: Role | null;
49
+ /** Requested permissions that belong to the same application, ordered by UUID. */
50
+ readonly permissions: readonly Permission[];
51
+ /** Requested permission IDs currently assigned to the role, ordered by UUID. */
52
+ readonly assignedPermissionIds: readonly string[];
53
+ }
54
+ /**
55
+ * Lock a role and requested permissions before validating and changing mappings.
56
+ *
57
+ * Permissions are de-duplicated and sorted before PostgreSQL acquires row locks.
58
+ * This gives concurrent mapping requests one deterministic lock order. Callers
59
+ * compare the returned permission IDs with their requested IDs before mutating.
60
+ *
61
+ * @param applicationId - Authoritative parent application UUID
62
+ * @param roleId - Role UUID selected beneath the application
63
+ * @param permissionIds - Permission UUIDs in the mapping request
64
+ * @returns The owned role and owned requested permissions
65
+ */
66
+ export declare function lockRolePermissionTargets(applicationId: string, roleId: string, permissionIds: readonly string[]): Promise<LockedRolePermissionTargets>;
67
+ /**
68
+ * List users assigned to an application-owned role.
69
+ *
70
+ * Mapping mutations call this while holding the role row lock, so concurrent
71
+ * assignments cannot escape affected-user capture through the role foreign key.
72
+ *
73
+ * @param applicationId - Authoritative parent application UUID
74
+ * @param roleId - Role UUID selected beneath the application
75
+ * @returns Distinct user UUIDs in stable order
76
+ */
77
+ export declare function getUserIdsForRole(applicationId: string, roleId: string): Promise<string[]>;
41
78
  /**
42
79
  * Get all permissions assigned to a role.
43
80
  *
44
81
  * JOINs role_permissions with permissions table to return full
45
82
  * Permission objects, ordered by slug for consistent output.
46
83
  *
84
+ * @param applicationId - Authoritative parent application UUID
47
85
  * @param roleId - Role UUID
48
86
  * @returns Array of permissions assigned to the role
49
87
  */
50
- export declare function getPermissionsForRole(roleId: string): Promise<Permission[]>;
88
+ export declare function getPermissionsForRole(applicationId: string, roleId: string): Promise<Permission[]>;
51
89
  /**
52
90
  * Get all roles that have a specific permission assigned.
53
91
  *
54
92
  * JOINs role_permissions with roles table to return full Role objects,
55
93
  * ordered by name for consistent output.
56
94
  *
95
+ * @param applicationId - Authoritative parent application UUID
57
96
  * @param permissionId - Permission UUID
58
97
  * @returns Array of roles that have this permission
59
98
  */
60
- export declare function getRolesWithPermission(permissionId: string): Promise<Role[]>;
99
+ export declare function getRolesWithPermission(applicationId: string, permissionId: string): Promise<Role[]>;
61
100
  /**
62
101
  * Assign multiple roles to a user (bulk insert).
63
102
  *
@@ -65,21 +104,54 @@ export declare function getRolesWithPermission(permissionId: string): Promise<Ro
65
104
  * already-assigned roles are silently skipped. Tracks who performed
66
105
  * the assignment via the optional assignedBy parameter.
67
106
  *
107
+ * @param organizationId - Authoritative organization UUID
68
108
  * @param userId - User UUID
69
109
  * @param roleIds - Array of role UUIDs to assign
70
110
  * @param assignedBy - Optional UUID of the admin who performed the assignment
111
+ * @returns Role IDs inserted by this call
71
112
  */
72
- export declare function assignRolesToUser(userId: string, roleIds: string[], assignedBy?: string): Promise<void>;
113
+ export declare function assignRolesToUser(organizationId: string, userId: string, roleIds: string[], assignedBy?: string): Promise<string[]>;
73
114
  /**
74
115
  * Remove multiple roles from a user.
75
116
  *
76
117
  * Silently succeeds if any of the role IDs are not currently
77
118
  * assigned to the user.
78
119
  *
120
+ * @param organizationId - Authoritative organization UUID
79
121
  * @param userId - User UUID
80
122
  * @param roleIds - Array of role UUIDs to remove
123
+ * @returns Role IDs removed by this call
124
+ */
125
+ export declare function removeRolesFromUser(organizationId: string, userId: string, roleIds: string[]): Promise<string[]>;
126
+ /** Locked user and role records for one organization-scoped assignment request. */
127
+ export interface LockedUserRoleTargets {
128
+ /** Target user when it belongs to the route organization. */
129
+ readonly user: {
130
+ readonly id: string;
131
+ readonly status: string;
132
+ } | null;
133
+ /** Requested roles found in PostgreSQL, ordered by UUID. */
134
+ readonly roles: readonly Role[];
135
+ /** Requested role IDs currently assigned to the user, ordered by UUID. */
136
+ readonly assignedRoleIds: readonly string[];
137
+ }
138
+ /**
139
+ * Lock one organization-owned user and requested roles before an assignment change.
140
+ *
141
+ * Role IDs are de-duplicated and sorted before locking. The returned collections
142
+ * let the service reject unknown targets atomically and distinguish removals from
143
+ * idempotent no-ops.
144
+ *
145
+ * @param organizationId - Authoritative organization UUID
146
+ * @param userId - User UUID beneath the organization
147
+ * @param roleIds - Role UUIDs in the assignment request
148
+ * @returns Locked target records and current direct assignments
81
149
  */
82
- export declare function removeRolesFromUser(userId: string, roleIds: string[]): Promise<void>;
150
+ export declare function lockUserRoleTargets(organizationId: string, userId: string, roleIds: readonly string[]): Promise<LockedUserRoleTargets>;
151
+ /** List roles for a user only when the user belongs to the route organization. */
152
+ export declare function getRolesForOrganizationUser(organizationId: string, userId: string): Promise<Role[]>;
153
+ /** List same-application permissions for an organization-owned user. */
154
+ export declare function getPermissionsForOrganizationUser(organizationId: string, userId: string): Promise<Permission[]>;
83
155
  /**
84
156
  * Get all roles assigned to a user.
85
157
  *
@@ -87,9 +159,10 @@ export declare function removeRolesFromUser(userId: string, roleIds: string[]):
87
159
  * ordered by name for consistent output.
88
160
  *
89
161
  * @param userId - User UUID
162
+ * @param applicationId - Optional application UUID used to scope token authority
90
163
  * @returns Array of roles assigned to the user
91
164
  */
92
- export declare function getRolesForUser(userId: string): Promise<Role[]>;
165
+ export declare function getRolesForUser(userId: string, applicationId?: string): Promise<Role[]>;
93
166
  /**
94
167
  * Get all permissions for a user, resolved through their assigned roles.
95
168
  *
@@ -99,22 +172,24 @@ export declare function getRolesForUser(userId: string): Promise<Role[]>;
99
172
  * may have the same permission through multiple roles.
100
173
  *
101
174
  * @param userId - User UUID
175
+ * @param applicationId - Optional application UUID used to scope token authority
102
176
  * @returns Deduplicated array of permissions the user has through their roles
103
177
  */
104
- export declare function getPermissionsForUser(userId: string): Promise<Permission[]>;
178
+ export declare function getPermissionsForUser(userId: string, applicationId?: string): Promise<Permission[]>;
105
179
  /**
106
180
  * List user-role assignments for a specific role within an organization.
107
181
  *
108
182
  * Supports pagination for admin UI views showing which users have a
109
183
  * particular role. JOINs with users table to filter by organization.
110
184
  *
185
+ * @param applicationId - Authoritative parent application UUID
111
186
  * @param roleId - Role UUID
112
187
  * @param orgId - Organization UUID (to scope users)
113
188
  * @param page - Page number (1-based)
114
189
  * @param pageSize - Number of results per page
115
190
  * @returns Paginated user-role assignments and total count
116
191
  */
117
- export declare function getUsersWithRole(roleId: string, orgId: string, page: number, pageSize: number): Promise<{
192
+ export declare function getUsersWithRole(applicationId: string, roleId: string, orgId: string, page: number, pageSize: number): Promise<{
118
193
  rows: UserRole[];
119
194
  total: number;
120
195
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"mapping-repository.d.ts","sourceRoot":"","sources":["../../src/rbac/mapping-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAW,UAAU,EAAiB,QAAQ,EAAe,MAAM,YAAY,CAAC;AAOlG;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAajF;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAalF;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAarE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAcjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B9C"}
1
+ {"version":3,"file":"mapping-repository.d.ts","sourceRoot":"","sources":["../../src/rbac/mapping-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAW,UAAU,EAAiB,QAAQ,EAAe,MAAM,YAAY,CAAC;AAOlG;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAED,0EAA0E;AAC1E,MAAM,WAAW,2BAA2B;IAC1C,mFAAmF;IACnF,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,gFAAgF;IAChF,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;CACnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,2BAA2B,CAAC,CA8CtC;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUhG;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,EAAE,CAAC,CAgBvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,EAAE,CAAC,CAgBjB;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB;AAED,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAoChC;AAED,kFAAkF;AAClF,wBAAsB,2BAA2B,CAC/C,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,EAAE,CAAC,CAWjB;AAED,wEAAwE;AACxE,wBAAsB,iCAAiC,CACrD,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,EAAE,CAAC,CAcvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAe7F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,EAAE,CAAC,CAmBvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA+B9C"}
@@ -28,24 +28,25 @@ import { mapRowToRole, mapRowToPermission, mapRowToUserRole } from './types.js';
28
28
  * already-assigned permissions are silently skipped. This allows
29
29
  * callers to assign without checking for existing assignments first.
30
30
  *
31
+ * @param applicationId - Authoritative parent application UUID
31
32
  * @param roleId - Role UUID
32
33
  * @param permissionIds - Array of permission UUIDs to assign
34
+ * @returns Permission IDs inserted by this request
33
35
  */
34
- export async function assignPermissionsToRole(roleId, permissionIds) {
36
+ export async function assignPermissionsToRole(applicationId, roleId, permissionIds) {
35
37
  if (permissionIds.length === 0)
36
- return;
38
+ return [];
37
39
  const pool = getPool();
38
- // Build parameterized VALUES list: ($1, $2), ($1, $3), ($1, $4), ...
39
- // $1 is always the roleId, subsequent params are permission IDs
40
- const valuesList = [];
41
- const params = [roleId];
42
- for (let i = 0; i < permissionIds.length; i++) {
43
- params.push(permissionIds[i]);
44
- valuesList.push(`($1, $${i + 2})`);
45
- }
46
- await pool.query(`INSERT INTO role_permissions (role_id, permission_id)
47
- VALUES ${valuesList.join(', ')}
48
- ON CONFLICT DO NOTHING`, params);
40
+ const result = await pool.query(`INSERT INTO role_permissions (role_id, permission_id)
41
+ SELECT role.id, permission.id
42
+ FROM roles role
43
+ JOIN permissions permission ON permission.application_id = role.application_id
44
+ WHERE role.application_id = $1
45
+ AND role.id = $2
46
+ AND permission.id = ANY($3::uuid[])
47
+ ON CONFLICT DO NOTHING
48
+ RETURNING permission_id`, [applicationId, roleId, permissionIds]);
49
+ return result.rows.map((row) => row.permission_id);
49
50
  }
50
51
  /**
51
52
  * Remove multiple permissions from a role.
@@ -53,17 +54,92 @@ export async function assignPermissionsToRole(roleId, permissionIds) {
53
54
  * Silently succeeds if any of the permission IDs are not currently
54
55
  * assigned to the role.
55
56
  *
57
+ * @param applicationId - Authoritative parent application UUID
56
58
  * @param roleId - Role UUID
57
59
  * @param permissionIds - Array of permission UUIDs to remove
60
+ * @returns Permission IDs removed by this request
58
61
  */
59
- export async function removePermissionsFromRole(roleId, permissionIds) {
62
+ export async function removePermissionsFromRole(applicationId, roleId, permissionIds) {
60
63
  if (permissionIds.length === 0)
61
- return;
64
+ return [];
62
65
  const pool = getPool();
63
- // Build parameterized IN list: $2, $3, $4, ...
64
- const placeholders = permissionIds.map((_, i) => `$${i + 2}`).join(', ');
65
- const params = [roleId, ...permissionIds];
66
- await pool.query(`DELETE FROM role_permissions WHERE role_id = $1 AND permission_id IN (${placeholders})`, params);
66
+ const result = await pool.query(`DELETE FROM role_permissions mapping
67
+ USING roles role, permissions permission
68
+ WHERE mapping.role_id = role.id
69
+ AND mapping.permission_id = permission.id
70
+ AND role.application_id = $1
71
+ AND permission.application_id = $1
72
+ AND role.id = $2
73
+ AND permission.id = ANY($3::uuid[])
74
+ RETURNING mapping.permission_id`, [applicationId, roleId, permissionIds]);
75
+ return result.rows.map((row) => row.permission_id);
76
+ }
77
+ /**
78
+ * Lock a role and requested permissions before validating and changing mappings.
79
+ *
80
+ * Permissions are de-duplicated and sorted before PostgreSQL acquires row locks.
81
+ * This gives concurrent mapping requests one deterministic lock order. Callers
82
+ * compare the returned permission IDs with their requested IDs before mutating.
83
+ *
84
+ * @param applicationId - Authoritative parent application UUID
85
+ * @param roleId - Role UUID selected beneath the application
86
+ * @param permissionIds - Permission UUIDs in the mapping request
87
+ * @returns The owned role and owned requested permissions
88
+ */
89
+ export async function lockRolePermissionTargets(applicationId, roleId, permissionIds) {
90
+ const pool = getPool();
91
+ const orderedPermissionIds = [...new Set(permissionIds)].sort();
92
+ const permissionResult = orderedPermissionIds.length === 0
93
+ ? { rows: [] }
94
+ : await pool.query(`SELECT * FROM permissions
95
+ WHERE application_id = $1 AND id = ANY($2::uuid[])
96
+ ORDER BY id
97
+ FOR UPDATE`, [applicationId, orderedPermissionIds]);
98
+ const roleResult = await pool.query(`SELECT * FROM roles
99
+ WHERE application_id = $1 AND id = $2
100
+ FOR UPDATE`, [applicationId, roleId]);
101
+ if (!roleResult.rows[0]) {
102
+ return { role: null, permissions: [], assignedPermissionIds: [] };
103
+ }
104
+ if (orderedPermissionIds.length === 0) {
105
+ return {
106
+ role: mapRowToRole(roleResult.rows[0]),
107
+ permissions: [],
108
+ assignedPermissionIds: [],
109
+ };
110
+ }
111
+ const mappingResult = await pool.query(`SELECT mapping.permission_id
112
+ FROM role_permissions mapping
113
+ JOIN roles role ON role.id = mapping.role_id
114
+ JOIN permissions permission ON permission.id = mapping.permission_id
115
+ WHERE role.application_id = $1
116
+ AND permission.application_id = $1
117
+ AND role.id = $2
118
+ AND mapping.permission_id = ANY($3::uuid[])
119
+ ORDER BY mapping.permission_id`, [applicationId, roleId, orderedPermissionIds]);
120
+ return {
121
+ role: mapRowToRole(roleResult.rows[0]),
122
+ permissions: permissionResult.rows.map(mapRowToPermission),
123
+ assignedPermissionIds: mappingResult.rows.map((row) => row.permission_id),
124
+ };
125
+ }
126
+ /**
127
+ * List users assigned to an application-owned role.
128
+ *
129
+ * Mapping mutations call this while holding the role row lock, so concurrent
130
+ * assignments cannot escape affected-user capture through the role foreign key.
131
+ *
132
+ * @param applicationId - Authoritative parent application UUID
133
+ * @param roleId - Role UUID selected beneath the application
134
+ * @returns Distinct user UUIDs in stable order
135
+ */
136
+ export async function getUserIdsForRole(applicationId, roleId) {
137
+ const result = await getPool().query(`SELECT DISTINCT assignment.user_id
138
+ FROM user_roles assignment
139
+ JOIN roles role ON role.id = assignment.role_id
140
+ WHERE role.application_id = $1 AND role.id = $2
141
+ ORDER BY assignment.user_id`, [applicationId, roleId]);
142
+ return result.rows.map((row) => row.user_id);
67
143
  }
68
144
  /**
69
145
  * Get all permissions assigned to a role.
@@ -71,16 +147,20 @@ export async function removePermissionsFromRole(roleId, permissionIds) {
71
147
  * JOINs role_permissions with permissions table to return full
72
148
  * Permission objects, ordered by slug for consistent output.
73
149
  *
150
+ * @param applicationId - Authoritative parent application UUID
74
151
  * @param roleId - Role UUID
75
152
  * @returns Array of permissions assigned to the role
76
153
  */
77
- export async function getPermissionsForRole(roleId) {
154
+ export async function getPermissionsForRole(applicationId, roleId) {
78
155
  const pool = getPool();
79
156
  const result = await pool.query(`SELECT p.*
80
157
  FROM role_permissions rp
158
+ JOIN roles r ON r.id = rp.role_id
81
159
  JOIN permissions p ON p.id = rp.permission_id
82
- WHERE rp.role_id = $1
83
- ORDER BY p.slug ASC`, [roleId]);
160
+ WHERE r.application_id = $1
161
+ AND p.application_id = $1
162
+ AND rp.role_id = $2
163
+ ORDER BY p.slug ASC`, [applicationId, roleId]);
84
164
  return result.rows.map(mapRowToPermission);
85
165
  }
86
166
  /**
@@ -89,16 +169,20 @@ export async function getPermissionsForRole(roleId) {
89
169
  * JOINs role_permissions with roles table to return full Role objects,
90
170
  * ordered by name for consistent output.
91
171
  *
172
+ * @param applicationId - Authoritative parent application UUID
92
173
  * @param permissionId - Permission UUID
93
174
  * @returns Array of roles that have this permission
94
175
  */
95
- export async function getRolesWithPermission(permissionId) {
176
+ export async function getRolesWithPermission(applicationId, permissionId) {
96
177
  const pool = getPool();
97
178
  const result = await pool.query(`SELECT r.*
98
179
  FROM role_permissions rp
180
+ JOIN permissions p ON p.id = rp.permission_id
99
181
  JOIN roles r ON r.id = rp.role_id
100
- WHERE rp.permission_id = $1
101
- ORDER BY r.name ASC`, [permissionId]);
182
+ WHERE p.application_id = $1
183
+ AND r.application_id = $1
184
+ AND rp.permission_id = $2
185
+ ORDER BY r.name ASC`, [applicationId, permissionId]);
102
186
  return result.rows.map(mapRowToRole);
103
187
  }
104
188
  // ===========================================================================
@@ -111,25 +195,26 @@ export async function getRolesWithPermission(permissionId) {
111
195
  * already-assigned roles are silently skipped. Tracks who performed
112
196
  * the assignment via the optional assignedBy parameter.
113
197
  *
198
+ * @param organizationId - Authoritative organization UUID
114
199
  * @param userId - User UUID
115
200
  * @param roleIds - Array of role UUIDs to assign
116
201
  * @param assignedBy - Optional UUID of the admin who performed the assignment
202
+ * @returns Role IDs inserted by this call
117
203
  */
118
- export async function assignRolesToUser(userId, roleIds, assignedBy) {
204
+ export async function assignRolesToUser(organizationId, userId, roleIds, assignedBy) {
119
205
  if (roleIds.length === 0)
120
- return;
206
+ return [];
121
207
  const pool = getPool();
122
- // Build parameterized VALUES list
123
- // $1 = userId, $2 = assignedBy (or null), subsequent params = roleIds
124
- const valuesList = [];
125
- const params = [userId, assignedBy ?? null];
126
- for (let i = 0; i < roleIds.length; i++) {
127
- params.push(roleIds[i]);
128
- valuesList.push(`($1, $${i + 3}, $2)`);
129
- }
130
- await pool.query(`INSERT INTO user_roles (user_id, role_id, assigned_by)
131
- VALUES ${valuesList.join(', ')}
132
- ON CONFLICT DO NOTHING`, params);
208
+ const result = await pool.query(`INSERT INTO user_roles (user_id, role_id, assigned_by)
209
+ SELECT target.id, role.id, $4
210
+ FROM users target
211
+ CROSS JOIN roles role
212
+ WHERE target.organization_id = $1
213
+ AND target.id = $2
214
+ AND role.id = ANY($3::uuid[])
215
+ ON CONFLICT DO NOTHING
216
+ RETURNING role_id`, [organizationId, userId, roleIds, assignedBy ?? null]);
217
+ return result.rows.map((row) => row.role_id);
133
218
  }
134
219
  /**
135
220
  * Remove multiple roles from a user.
@@ -137,17 +222,87 @@ export async function assignRolesToUser(userId, roleIds, assignedBy) {
137
222
  * Silently succeeds if any of the role IDs are not currently
138
223
  * assigned to the user.
139
224
  *
225
+ * @param organizationId - Authoritative organization UUID
140
226
  * @param userId - User UUID
141
227
  * @param roleIds - Array of role UUIDs to remove
228
+ * @returns Role IDs removed by this call
142
229
  */
143
- export async function removeRolesFromUser(userId, roleIds) {
230
+ export async function removeRolesFromUser(organizationId, userId, roleIds) {
144
231
  if (roleIds.length === 0)
145
- return;
232
+ return [];
146
233
  const pool = getPool();
147
- // Build parameterized IN list: $2, $3, $4, ...
148
- const placeholders = roleIds.map((_, i) => `$${i + 2}`).join(', ');
149
- const params = [userId, ...roleIds];
150
- await pool.query(`DELETE FROM user_roles WHERE user_id = $1 AND role_id IN (${placeholders})`, params);
234
+ const result = await pool.query(`DELETE FROM user_roles assignment
235
+ USING users target, roles role
236
+ WHERE assignment.user_id = target.id
237
+ AND assignment.role_id = role.id
238
+ AND target.organization_id = $1
239
+ AND target.id = $2
240
+ AND role.id = ANY($3::uuid[])
241
+ RETURNING assignment.role_id`, [organizationId, userId, roleIds]);
242
+ return result.rows.map((row) => row.role_id);
243
+ }
244
+ /**
245
+ * Lock one organization-owned user and requested roles before an assignment change.
246
+ *
247
+ * Role IDs are de-duplicated and sorted before locking. The returned collections
248
+ * let the service reject unknown targets atomically and distinguish removals from
249
+ * idempotent no-ops.
250
+ *
251
+ * @param organizationId - Authoritative organization UUID
252
+ * @param userId - User UUID beneath the organization
253
+ * @param roleIds - Role UUIDs in the assignment request
254
+ * @returns Locked target records and current direct assignments
255
+ */
256
+ export async function lockUserRoleTargets(organizationId, userId, roleIds) {
257
+ const pool = getPool();
258
+ const userResult = await pool.query(`SELECT id, status FROM users
259
+ WHERE organization_id = $1 AND id = $2
260
+ FOR UPDATE`, [organizationId, userId]);
261
+ if (!userResult.rows[0])
262
+ return { user: null, roles: [], assignedRoleIds: [] };
263
+ const orderedRoleIds = [...new Set(roleIds)].sort();
264
+ if (orderedRoleIds.length === 0) {
265
+ return { user: userResult.rows[0], roles: [], assignedRoleIds: [] };
266
+ }
267
+ const roleResult = await pool.query(`SELECT * FROM roles
268
+ WHERE id = ANY($1::uuid[])
269
+ ORDER BY id
270
+ FOR UPDATE`, [orderedRoleIds]);
271
+ const assignmentResult = await pool.query(`SELECT assignment.role_id
272
+ FROM user_roles assignment
273
+ JOIN users target ON target.id = assignment.user_id
274
+ WHERE target.organization_id = $1
275
+ AND target.id = $2
276
+ AND assignment.role_id = ANY($3::uuid[])
277
+ ORDER BY assignment.role_id`, [organizationId, userId, orderedRoleIds]);
278
+ return {
279
+ user: userResult.rows[0],
280
+ roles: roleResult.rows.map(mapRowToRole),
281
+ assignedRoleIds: assignmentResult.rows.map((row) => row.role_id),
282
+ };
283
+ }
284
+ /** List roles for a user only when the user belongs to the route organization. */
285
+ export async function getRolesForOrganizationUser(organizationId, userId) {
286
+ const result = await getPool().query(`SELECT role.*
287
+ FROM users target
288
+ JOIN user_roles assignment ON assignment.user_id = target.id
289
+ JOIN roles role ON role.id = assignment.role_id
290
+ WHERE target.organization_id = $1 AND target.id = $2
291
+ ORDER BY role.name ASC`, [organizationId, userId]);
292
+ return result.rows.map(mapRowToRole);
293
+ }
294
+ /** List same-application permissions for an organization-owned user. */
295
+ export async function getPermissionsForOrganizationUser(organizationId, userId) {
296
+ const result = await getPool().query(`SELECT DISTINCT permission.*
297
+ FROM users target
298
+ JOIN user_roles assignment ON assignment.user_id = target.id
299
+ JOIN roles role ON role.id = assignment.role_id
300
+ JOIN role_permissions mapping ON mapping.role_id = role.id
301
+ JOIN permissions permission ON permission.id = mapping.permission_id
302
+ AND permission.application_id = role.application_id
303
+ WHERE target.organization_id = $1 AND target.id = $2
304
+ ORDER BY permission.slug ASC`, [organizationId, userId]);
305
+ return result.rows.map(mapRowToPermission);
151
306
  }
152
307
  /**
153
308
  * Get all roles assigned to a user.
@@ -156,15 +311,18 @@ export async function removeRolesFromUser(userId, roleIds) {
156
311
  * ordered by name for consistent output.
157
312
  *
158
313
  * @param userId - User UUID
314
+ * @param applicationId - Optional application UUID used to scope token authority
159
315
  * @returns Array of roles assigned to the user
160
316
  */
161
- export async function getRolesForUser(userId) {
317
+ export async function getRolesForUser(userId, applicationId) {
162
318
  const pool = getPool();
319
+ const applicationFilter = applicationId ? ' AND r.application_id = $2' : '';
320
+ const params = applicationId ? [userId, applicationId] : [userId];
163
321
  const result = await pool.query(`SELECT r.*
164
322
  FROM user_roles ur
165
323
  JOIN roles r ON r.id = ur.role_id
166
- WHERE ur.user_id = $1
167
- ORDER BY r.name ASC`, [userId]);
324
+ WHERE ur.user_id = $1${applicationFilter}
325
+ ORDER BY r.name ASC`, params);
168
326
  return result.rows.map(mapRowToRole);
169
327
  }
170
328
  /**
@@ -176,16 +334,22 @@ export async function getRolesForUser(userId) {
176
334
  * may have the same permission through multiple roles.
177
335
  *
178
336
  * @param userId - User UUID
337
+ * @param applicationId - Optional application UUID used to scope token authority
179
338
  * @returns Deduplicated array of permissions the user has through their roles
180
339
  */
181
- export async function getPermissionsForUser(userId) {
340
+ export async function getPermissionsForUser(userId, applicationId) {
182
341
  const pool = getPool();
342
+ const applicationFilter = applicationId
343
+ ? ' AND r.application_id = $2 AND p.application_id = $2'
344
+ : '';
345
+ const params = applicationId ? [userId, applicationId] : [userId];
183
346
  const result = await pool.query(`SELECT DISTINCT p.*
184
347
  FROM user_roles ur
348
+ JOIN roles r ON r.id = ur.role_id
185
349
  JOIN role_permissions rp ON rp.role_id = ur.role_id
186
- JOIN permissions p ON p.id = rp.permission_id
187
- WHERE ur.user_id = $1
188
- ORDER BY p.slug ASC`, [userId]);
350
+ JOIN permissions p ON p.id = rp.permission_id AND p.application_id = r.application_id
351
+ WHERE ur.user_id = $1${applicationFilter}
352
+ ORDER BY p.slug ASC`, params);
189
353
  return result.rows.map(mapRowToPermission);
190
354
  }
191
355
  /**
@@ -194,28 +358,31 @@ export async function getPermissionsForUser(userId) {
194
358
  * Supports pagination for admin UI views showing which users have a
195
359
  * particular role. JOINs with users table to filter by organization.
196
360
  *
361
+ * @param applicationId - Authoritative parent application UUID
197
362
  * @param roleId - Role UUID
198
363
  * @param orgId - Organization UUID (to scope users)
199
364
  * @param page - Page number (1-based)
200
365
  * @param pageSize - Number of results per page
201
366
  * @returns Paginated user-role assignments and total count
202
367
  */
203
- export async function getUsersWithRole(roleId, orgId, page, pageSize) {
368
+ export async function getUsersWithRole(applicationId, roleId, orgId, page, pageSize) {
204
369
  const pool = getPool();
205
370
  const offset = (page - 1) * pageSize;
206
371
  // Count total matching assignments
207
372
  const countResult = await pool.query(`SELECT COUNT(*)::int as count
208
373
  FROM user_roles ur
209
374
  JOIN users u ON u.id = ur.user_id
210
- WHERE ur.role_id = $1 AND u.organization_id = $2`, [roleId, orgId]);
375
+ JOIN roles r ON r.id = ur.role_id
376
+ WHERE r.application_id = $1 AND ur.role_id = $2 AND u.organization_id = $3`, [applicationId, roleId, orgId]);
211
377
  const total = parseInt(countResult.rows[0].count, 10);
212
378
  // Fetch paginated data
213
379
  const dataResult = await pool.query(`SELECT ur.*
214
380
  FROM user_roles ur
215
381
  JOIN users u ON u.id = ur.user_id
216
- WHERE ur.role_id = $1 AND u.organization_id = $2
382
+ JOIN roles r ON r.id = ur.role_id
383
+ WHERE r.application_id = $1 AND ur.role_id = $2 AND u.organization_id = $3
217
384
  ORDER BY ur.created_at DESC
218
- LIMIT $3 OFFSET $4`, [roleId, orgId, pageSize, offset]);
385
+ LIMIT $4 OFFSET $5`, [applicationId, roleId, orgId, pageSize, offset]);
219
386
  return {
220
387
  rows: dataResult.rows.map(mapRowToUserRole),
221
388
  total,
@@ -1 +1 @@
1
- {"version":3,"file":"mapping-repository.js","sourceRoot":"","sources":["../../src/rbac/mapping-repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mapping-repository.js","sourceRoot":"","sources":["../../src/rbac/mapping-repository.ts"],"names":[],"mappings":"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"}