@meridianjs/meridian 2.5.0 → 2.7.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 (266) hide show
  1. package/dist/api/admin/api-tokens/[id]/route.d.ts +3 -0
  2. package/dist/api/admin/api-tokens/[id]/route.d.ts.map +1 -0
  3. package/dist/api/admin/api-tokens/[id]/route.js +20 -0
  4. package/dist/api/admin/api-tokens/[id]/route.js.map +1 -0
  5. package/dist/api/admin/api-tokens/route.d.ts +15 -0
  6. package/dist/api/admin/api-tokens/route.d.ts.map +1 -0
  7. package/dist/api/admin/api-tokens/route.js +63 -0
  8. package/dist/api/admin/api-tokens/route.js.map +1 -0
  9. package/dist/api/admin/issues/[id]/activities/route.d.ts.map +1 -1
  10. package/dist/api/admin/issues/[id]/activities/route.js +4 -15
  11. package/dist/api/admin/issues/[id]/activities/route.js.map +1 -1
  12. package/dist/api/admin/issues/[id]/attachments/[attachmentId]/route.d.ts.map +1 -1
  13. package/dist/api/admin/issues/[id]/attachments/[attachmentId]/route.js +6 -1
  14. package/dist/api/admin/issues/[id]/attachments/[attachmentId]/route.js.map +1 -1
  15. package/dist/api/admin/issues/[id]/attachments/route.d.ts.map +1 -1
  16. package/dist/api/admin/issues/[id]/attachments/route.js +2 -19
  17. package/dist/api/admin/issues/[id]/attachments/route.js.map +1 -1
  18. package/dist/api/admin/issues/[id]/comments/route.d.ts.map +1 -1
  19. package/dist/api/admin/issues/[id]/comments/route.js +4 -20
  20. package/dist/api/admin/issues/[id]/comments/route.js.map +1 -1
  21. package/dist/api/admin/issues/[id]/related/route.d.ts.map +1 -1
  22. package/dist/api/admin/issues/[id]/related/route.js +4 -5
  23. package/dist/api/admin/issues/[id]/related/route.js.map +1 -1
  24. package/dist/api/admin/issues/[id]/relations/route.d.ts.map +1 -1
  25. package/dist/api/admin/issues/[id]/relations/route.js +4 -5
  26. package/dist/api/admin/issues/[id]/relations/route.js.map +1 -1
  27. package/dist/api/admin/issues/[id]/route.d.ts.map +1 -1
  28. package/dist/api/admin/issues/[id]/route.js +12 -12
  29. package/dist/api/admin/issues/[id]/route.js.map +1 -1
  30. package/dist/api/admin/issues/[id]/time-logs/[logId]/route.d.ts.map +1 -1
  31. package/dist/api/admin/issues/[id]/time-logs/[logId]/route.js +7 -2
  32. package/dist/api/admin/issues/[id]/time-logs/[logId]/route.js.map +1 -1
  33. package/dist/api/admin/issues/[id]/time-logs/route.d.ts.map +1 -1
  34. package/dist/api/admin/issues/[id]/time-logs/route.js +1 -18
  35. package/dist/api/admin/issues/[id]/time-logs/route.js.map +1 -1
  36. package/dist/api/admin/issues/[id]/time-logs/timer/route.d.ts.map +1 -1
  37. package/dist/api/admin/issues/[id]/time-logs/timer/route.js +1 -18
  38. package/dist/api/admin/issues/[id]/time-logs/timer/route.js.map +1 -1
  39. package/dist/api/admin/issues/route.d.ts.map +1 -1
  40. package/dist/api/admin/issues/route.js +20 -4
  41. package/dist/api/admin/issues/route.js.map +1 -1
  42. package/dist/api/admin/my/tasks/route.d.ts.map +1 -1
  43. package/dist/api/admin/my/tasks/route.js +22 -5
  44. package/dist/api/admin/my/tasks/route.js.map +1 -1
  45. package/dist/api/admin/org/calendar/route.d.ts.map +1 -1
  46. package/dist/api/admin/org/calendar/route.js +2 -1
  47. package/dist/api/admin/org/calendar/route.js.map +1 -1
  48. package/dist/api/admin/org/holidays/[holidayId]/route.d.ts.map +1 -1
  49. package/dist/api/admin/org/holidays/[holidayId]/route.js +3 -2
  50. package/dist/api/admin/org/holidays/[holidayId]/route.js.map +1 -1
  51. package/dist/api/admin/org/holidays/route.d.ts.map +1 -1
  52. package/dist/api/admin/org/holidays/route.js +2 -1
  53. package/dist/api/admin/org/holidays/route.js.map +1 -1
  54. package/dist/api/admin/projects/[id]/access/route.d.ts.map +1 -1
  55. package/dist/api/admin/projects/[id]/access/route.js +14 -11
  56. package/dist/api/admin/projects/[id]/access/route.js.map +1 -1
  57. package/dist/api/admin/projects/[id]/access-requests/[requestId]/route.d.ts.map +1 -1
  58. package/dist/api/admin/projects/[id]/access-requests/[requestId]/route.js +3 -2
  59. package/dist/api/admin/projects/[id]/access-requests/[requestId]/route.js.map +1 -1
  60. package/dist/api/admin/projects/[id]/access-requests/route.d.ts.map +1 -1
  61. package/dist/api/admin/projects/[id]/access-requests/route.js +18 -19
  62. package/dist/api/admin/projects/[id]/access-requests/route.js.map +1 -1
  63. package/dist/api/admin/projects/[id]/activities/route.js +1 -1
  64. package/dist/api/admin/projects/[id]/activities/route.js.map +1 -1
  65. package/dist/api/admin/projects/[id]/health/[updateId]/route.d.ts.map +1 -1
  66. package/dist/api/admin/projects/[id]/health/[updateId]/route.js +3 -3
  67. package/dist/api/admin/projects/[id]/health/[updateId]/route.js.map +1 -1
  68. package/dist/api/admin/projects/[id]/health/route.d.ts.map +1 -1
  69. package/dist/api/admin/projects/[id]/health/route.js +3 -3
  70. package/dist/api/admin/projects/[id]/health/route.js.map +1 -1
  71. package/dist/api/admin/projects/[id]/members/batch/route.d.ts.map +1 -1
  72. package/dist/api/admin/projects/[id]/members/batch/route.js +3 -2
  73. package/dist/api/admin/projects/[id]/members/batch/route.js.map +1 -1
  74. package/dist/api/admin/projects/[id]/members/route.d.ts.map +1 -1
  75. package/dist/api/admin/projects/[id]/members/route.js +4 -3
  76. package/dist/api/admin/projects/[id]/members/route.js.map +1 -1
  77. package/dist/api/admin/projects/[id]/share/route.d.ts.map +1 -1
  78. package/dist/api/admin/projects/[id]/share/route.js +5 -4
  79. package/dist/api/admin/projects/[id]/share/route.js.map +1 -1
  80. package/dist/api/admin/projects/[id]/statuses/route.js +1 -1
  81. package/dist/api/admin/projects/[id]/statuses/route.js.map +1 -1
  82. package/dist/api/admin/projects/by-identifier/[identifier]/access-requests/route.d.ts.map +1 -1
  83. package/dist/api/admin/projects/by-identifier/[identifier]/access-requests/route.js +4 -3
  84. package/dist/api/admin/projects/by-identifier/[identifier]/access-requests/route.js.map +1 -1
  85. package/dist/api/admin/projects/route.d.ts.map +1 -1
  86. package/dist/api/admin/projects/route.js +7 -5
  87. package/dist/api/admin/projects/route.js.map +1 -1
  88. package/dist/api/admin/reporting/members/route.d.ts.map +1 -1
  89. package/dist/api/admin/reporting/members/route.js +6 -5
  90. package/dist/api/admin/reporting/members/route.js.map +1 -1
  91. package/dist/api/admin/reporting/time-logs/route.d.ts.map +1 -1
  92. package/dist/api/admin/reporting/time-logs/route.js +31 -9
  93. package/dist/api/admin/reporting/time-logs/route.js.map +1 -1
  94. package/dist/api/admin/team/tasks/route.d.ts +3 -0
  95. package/dist/api/admin/team/tasks/route.d.ts.map +1 -0
  96. package/dist/api/admin/team/tasks/route.js +155 -0
  97. package/dist/api/admin/team/tasks/route.js.map +1 -0
  98. package/dist/api/admin/users/[id]/reactivate/route.d.ts.map +1 -1
  99. package/dist/api/admin/users/[id]/reactivate/route.js +2 -1
  100. package/dist/api/admin/users/[id]/reactivate/route.js.map +1 -1
  101. package/dist/api/admin/users/[id]/route.d.ts.map +1 -1
  102. package/dist/api/admin/users/[id]/route.js +6 -5
  103. package/dist/api/admin/users/[id]/route.js.map +1 -1
  104. package/dist/api/admin/users/[id]/sessions/route.d.ts.map +1 -1
  105. package/dist/api/admin/users/[id]/sessions/route.js +6 -5
  106. package/dist/api/admin/users/[id]/sessions/route.js.map +1 -1
  107. package/dist/api/admin/users/invitations/[inviteId]/resend/route.d.ts.map +1 -1
  108. package/dist/api/admin/users/invitations/[inviteId]/resend/route.js +3 -2
  109. package/dist/api/admin/users/invitations/[inviteId]/resend/route.js.map +1 -1
  110. package/dist/api/admin/users/invitations/[inviteId]/route.d.ts.map +1 -1
  111. package/dist/api/admin/users/invitations/[inviteId]/route.js +2 -1
  112. package/dist/api/admin/users/invitations/[inviteId]/route.js.map +1 -1
  113. package/dist/api/admin/users/invitations/route.d.ts.map +1 -1
  114. package/dist/api/admin/users/invitations/route.js +2 -1
  115. package/dist/api/admin/users/invitations/route.js.map +1 -1
  116. package/dist/api/admin/users/invite/route.d.ts.map +1 -1
  117. package/dist/api/admin/users/invite/route.js +5 -4
  118. package/dist/api/admin/users/invite/route.js.map +1 -1
  119. package/dist/api/admin/users/map/route.d.ts.map +1 -1
  120. package/dist/api/admin/users/map/route.js +8 -5
  121. package/dist/api/admin/users/map/route.js.map +1 -1
  122. package/dist/api/admin/users/me/avatar/route.js +1 -1
  123. package/dist/api/admin/users/me/avatar/route.js.map +1 -1
  124. package/dist/api/admin/users/me/google/route.js +1 -1
  125. package/dist/api/admin/users/me/google/route.js.map +1 -1
  126. package/dist/api/admin/users/me/password/send-otp/route.d.ts.map +1 -1
  127. package/dist/api/admin/users/me/password/send-otp/route.js +2 -1
  128. package/dist/api/admin/users/me/password/send-otp/route.js.map +1 -1
  129. package/dist/api/admin/users/route.d.ts.map +1 -1
  130. package/dist/api/admin/users/route.js +8 -1
  131. package/dist/api/admin/users/route.js.map +1 -1
  132. package/dist/api/admin/workspaces/[id]/access-requests/[requestId]/route.d.ts.map +1 -1
  133. package/dist/api/admin/workspaces/[id]/access-requests/[requestId]/route.js +4 -3
  134. package/dist/api/admin/workspaces/[id]/access-requests/[requestId]/route.js.map +1 -1
  135. package/dist/api/admin/workspaces/[id]/access-requests/route.d.ts.map +1 -1
  136. package/dist/api/admin/workspaces/[id]/access-requests/route.js +3 -2
  137. package/dist/api/admin/workspaces/[id]/access-requests/route.js.map +1 -1
  138. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/resend/route.d.ts.map +1 -1
  139. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/resend/route.js +4 -3
  140. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/resend/route.js.map +1 -1
  141. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/route.d.ts.map +1 -1
  142. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/route.js +2 -2
  143. package/dist/api/admin/workspaces/[id]/invitations/[inviteId]/route.js.map +1 -1
  144. package/dist/api/admin/workspaces/[id]/invitations/route.d.ts.map +1 -1
  145. package/dist/api/admin/workspaces/[id]/invitations/route.js +6 -5
  146. package/dist/api/admin/workspaces/[id]/invitations/route.js.map +1 -1
  147. package/dist/api/admin/workspaces/[id]/members/[userId]/route.d.ts.map +1 -1
  148. package/dist/api/admin/workspaces/[id]/members/[userId]/route.js +5 -4
  149. package/dist/api/admin/workspaces/[id]/members/[userId]/route.js.map +1 -1
  150. package/dist/api/admin/workspaces/[id]/members/batch/route.d.ts.map +1 -1
  151. package/dist/api/admin/workspaces/[id]/members/batch/route.js +3 -2
  152. package/dist/api/admin/workspaces/[id]/members/batch/route.js.map +1 -1
  153. package/dist/api/admin/workspaces/[id]/members/route.d.ts.map +1 -1
  154. package/dist/api/admin/workspaces/[id]/members/route.js +3 -2
  155. package/dist/api/admin/workspaces/[id]/members/route.js.map +1 -1
  156. package/dist/api/admin/workspaces/route.d.ts.map +1 -1
  157. package/dist/api/admin/workspaces/route.js +5 -3
  158. package/dist/api/admin/workspaces/route.js.map +1 -1
  159. package/dist/api/admin/workspaces/search/route.d.ts.map +1 -1
  160. package/dist/api/admin/workspaces/search/route.js +25 -16
  161. package/dist/api/admin/workspaces/search/route.js.map +1 -1
  162. package/dist/api/auth/_apply-pending-invites.d.ts.map +1 -1
  163. package/dist/api/auth/_apply-pending-invites.js +6 -5
  164. package/dist/api/auth/_apply-pending-invites.js.map +1 -1
  165. package/dist/api/auth/forgot-password/route.d.ts.map +1 -1
  166. package/dist/api/auth/forgot-password/route.js +2 -1
  167. package/dist/api/auth/forgot-password/route.js.map +1 -1
  168. package/dist/api/auth/invite/[token]/route.d.ts.map +1 -1
  169. package/dist/api/auth/invite/[token]/route.js +15 -5
  170. package/dist/api/auth/invite/[token]/route.js.map +1 -1
  171. package/dist/api/auth/register/send-otp/route.d.ts.map +1 -1
  172. package/dist/api/auth/register/send-otp/route.js +2 -1
  173. package/dist/api/auth/register/send-otp/route.js.map +1 -1
  174. package/dist/api/utils/issue-access.d.ts +16 -0
  175. package/dist/api/utils/issue-access.d.ts.map +1 -0
  176. package/dist/api/utils/issue-access.js +38 -0
  177. package/dist/api/utils/issue-access.js.map +1 -0
  178. package/dist/api/utils/project-access.d.ts +2 -0
  179. package/dist/api/utils/project-access.d.ts.map +1 -1
  180. package/dist/api/utils/project-access.js +11 -8
  181. package/dist/api/utils/project-access.js.map +1 -1
  182. package/dist/api/utils/request.d.ts +30 -0
  183. package/dist/api/utils/request.d.ts.map +1 -0
  184. package/dist/api/utils/request.js +11 -0
  185. package/dist/api/utils/request.js.map +1 -0
  186. package/dist/api/utils/workspace-access.d.ts.map +1 -1
  187. package/dist/api/utils/workspace-access.js +6 -7
  188. package/dist/api/utils/workspace-access.js.map +1 -1
  189. package/dist/index.d.ts +6 -0
  190. package/dist/index.d.ts.map +1 -1
  191. package/dist/index.js +6 -0
  192. package/dist/index.js.map +1 -1
  193. package/dist/subscribers/comment-created.d.ts.map +1 -1
  194. package/dist/subscribers/comment-created.js +3 -1
  195. package/dist/subscribers/comment-created.js.map +1 -1
  196. package/dist/subscribers/issue-assigned.d.ts.map +1 -1
  197. package/dist/subscribers/issue-assigned.js +3 -1
  198. package/dist/subscribers/issue-assigned.js.map +1 -1
  199. package/dist/subscribers/issue-created.d.ts.map +1 -1
  200. package/dist/subscribers/issue-created.js +2 -1
  201. package/dist/subscribers/issue-created.js.map +1 -1
  202. package/dist/subscribers/issue-mentioned.d.ts.map +1 -1
  203. package/dist/subscribers/issue-mentioned.js +2 -1
  204. package/dist/subscribers/issue-mentioned.js.map +1 -1
  205. package/dist/subscribers/issue-status-changed.d.ts +1 -0
  206. package/dist/subscribers/issue-status-changed.d.ts.map +1 -1
  207. package/dist/subscribers/issue-status-changed.js +3 -1
  208. package/dist/subscribers/issue-status-changed.js.map +1 -1
  209. package/dist/subscribers/password-otp-requested.d.ts.map +1 -1
  210. package/dist/subscribers/password-otp-requested.js +2 -1
  211. package/dist/subscribers/password-otp-requested.js.map +1 -1
  212. package/dist/subscribers/password-reset-requested.d.ts.map +1 -1
  213. package/dist/subscribers/password-reset-requested.js +2 -1
  214. package/dist/subscribers/password-reset-requested.js.map +1 -1
  215. package/dist/subscribers/project-access-request-cancelled.d.ts.map +1 -1
  216. package/dist/subscribers/project-access-request-cancelled.js +2 -1
  217. package/dist/subscribers/project-access-request-cancelled.js.map +1 -1
  218. package/dist/subscribers/project-access-request-resolved.d.ts.map +1 -1
  219. package/dist/subscribers/project-access-request-resolved.js +2 -1
  220. package/dist/subscribers/project-access-request-resolved.js.map +1 -1
  221. package/dist/subscribers/project-access-requested.d.ts.map +1 -1
  222. package/dist/subscribers/project-access-requested.js +2 -1
  223. package/dist/subscribers/project-access-requested.js.map +1 -1
  224. package/dist/subscribers/project-member-added.d.ts.map +1 -1
  225. package/dist/subscribers/project-member-added.js +2 -1
  226. package/dist/subscribers/project-member-added.js.map +1 -1
  227. package/dist/subscribers/registration-otp-requested.d.ts.map +1 -1
  228. package/dist/subscribers/registration-otp-requested.js +2 -1
  229. package/dist/subscribers/registration-otp-requested.js.map +1 -1
  230. package/dist/subscribers/workspace-access-request-cancelled.d.ts.map +1 -1
  231. package/dist/subscribers/workspace-access-request-cancelled.js +2 -1
  232. package/dist/subscribers/workspace-access-request-cancelled.js.map +1 -1
  233. package/dist/subscribers/workspace-access-request-resolved.d.ts.map +1 -1
  234. package/dist/subscribers/workspace-access-request-resolved.js +2 -1
  235. package/dist/subscribers/workspace-access-request-resolved.js.map +1 -1
  236. package/dist/subscribers/workspace-access-requested.d.ts.map +1 -1
  237. package/dist/subscribers/workspace-access-requested.js +2 -1
  238. package/dist/subscribers/workspace-access-requested.js.map +1 -1
  239. package/dist/subscribers/workspace-member-added.d.ts.map +1 -1
  240. package/dist/subscribers/workspace-member-added.js +2 -1
  241. package/dist/subscribers/workspace-member-added.js.map +1 -1
  242. package/dist/subscribers/workspace-member-invited.d.ts.map +1 -1
  243. package/dist/subscribers/workspace-member-invited.js +2 -1
  244. package/dist/subscribers/workspace-member-invited.js.map +1 -1
  245. package/dist/workflows/assign-issue.d.ts.map +1 -1
  246. package/dist/workflows/assign-issue.js +2 -1
  247. package/dist/workflows/assign-issue.js.map +1 -1
  248. package/dist/workflows/complete-sprint.d.ts.map +1 -1
  249. package/dist/workflows/complete-sprint.js +2 -1
  250. package/dist/workflows/complete-sprint.js.map +1 -1
  251. package/dist/workflows/create-invitation.d.ts.map +1 -1
  252. package/dist/workflows/create-invitation.js +2 -1
  253. package/dist/workflows/create-invitation.js.map +1 -1
  254. package/dist/workflows/create-issue.d.ts.map +1 -1
  255. package/dist/workflows/create-issue.js +2 -1
  256. package/dist/workflows/create-issue.js.map +1 -1
  257. package/dist/workflows/create-project.d.ts.map +1 -1
  258. package/dist/workflows/create-project.js +2 -1
  259. package/dist/workflows/create-project.js.map +1 -1
  260. package/dist/workflows/transfer-project.d.ts.map +1 -1
  261. package/dist/workflows/transfer-project.js +28 -17
  262. package/dist/workflows/transfer-project.js.map +1 -1
  263. package/dist/workflows/update-issue-status.d.ts.map +1 -1
  264. package/dist/workflows/update-issue-status.js +3 -2
  265. package/dist/workflows/update-issue-status.js.map +1 -1
  266. package/package.json +7 -6
@@ -0,0 +1,3 @@
1
+ import type { Response, NextFunction } from "express";
2
+ export declare const DELETE: (req: any, res: Response, next: NextFunction) => Promise<void>;
3
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/api/admin/api-tokens/[id]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAErD,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAiBvE,CAAA"}
@@ -0,0 +1,20 @@
1
+ export const DELETE = async (req, res, next) => {
2
+ try {
3
+ const apiTokenService = req.scope.resolve("apiTokenModuleService");
4
+ const record = await apiTokenService.retrieveApiToken(req.params.id).catch(() => null);
5
+ if (!record) {
6
+ res.status(404).json({ error: { message: "API token not found" } });
7
+ return;
8
+ }
9
+ if (record.user_id !== req.user.id) {
10
+ res.status(403).json({ error: { message: "Forbidden" } });
11
+ return;
12
+ }
13
+ await apiTokenService.revokeToken(record.id);
14
+ res.status(204).end();
15
+ }
16
+ catch (err) {
17
+ next(err);
18
+ }
19
+ };
20
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../src/api/admin/api-tokens/[id]/route.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAC1E,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;QACzE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QACtF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QACD,MAAM,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC5C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAA;IACX,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { Response, NextFunction } from "express";
2
+ /** Serializes a token record for API responses — never exposes token_hash. */
3
+ export declare function toApiTokenDto(record: any): {
4
+ id: any;
5
+ name: any;
6
+ token_prefix: any;
7
+ scopes: any;
8
+ expires_at: any;
9
+ last_used_at: any;
10
+ revoked_at: any;
11
+ created_at: any;
12
+ };
13
+ export declare const GET: (req: any, res: Response, next: NextFunction) => Promise<void>;
14
+ export declare const POST: (req: any, res: Response, next: NextFunction) => Promise<void>;
15
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/api/admin/api-tokens/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAKrD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG;;;;;;;;;EAWxC;AAED,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAWpE,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBA2CrE,CAAA"}
@@ -0,0 +1,63 @@
1
+ const VALID_SCOPES = ["read", "write"];
2
+ const MAX_NAME_LENGTH = 100;
3
+ /** Serializes a token record for API responses — never exposes token_hash. */
4
+ export function toApiTokenDto(record) {
5
+ return {
6
+ id: record.id,
7
+ name: record.name,
8
+ token_prefix: record.token_prefix,
9
+ scopes: record.scopes,
10
+ expires_at: record.expires_at,
11
+ last_used_at: record.last_used_at,
12
+ revoked_at: record.revoked_at,
13
+ created_at: record.created_at,
14
+ };
15
+ }
16
+ export const GET = async (req, res, next) => {
17
+ try {
18
+ const apiTokenService = req.scope.resolve("apiTokenModuleService");
19
+ const [tokens] = await apiTokenService.listAndCountApiTokens({ user_id: req.user.id }, { orderBy: { created_at: "DESC" } });
20
+ res.json({ api_tokens: tokens.map(toApiTokenDto) });
21
+ }
22
+ catch (err) {
23
+ next(err);
24
+ }
25
+ };
26
+ export const POST = async (req, res, next) => {
27
+ try {
28
+ // A leaked token must not be able to mint fresh tokens for its owner.
29
+ if (req.user?.authType === "api-token") {
30
+ res.status(403).json({ error: { message: "API tokens cannot create other API tokens" } });
31
+ return;
32
+ }
33
+ const { name, scopes, expires_in_days } = req.body ?? {};
34
+ if (typeof name !== "string" || !name.trim() || name.trim().length > MAX_NAME_LENGTH) {
35
+ res.status(400).json({ error: { message: `name is required (max ${MAX_NAME_LENGTH} chars)` } });
36
+ return;
37
+ }
38
+ if (!Array.isArray(scopes) ||
39
+ scopes.length === 0 ||
40
+ !scopes.every((s) => VALID_SCOPES.includes(s))) {
41
+ res.status(400).json({ error: { message: 'scopes must be a non-empty array of "read" / "write"' } });
42
+ return;
43
+ }
44
+ if (expires_in_days != null &&
45
+ (!Number.isInteger(expires_in_days) || expires_in_days <= 0 || expires_in_days > 3650)) {
46
+ res.status(400).json({ error: { message: "expires_in_days must be a positive integer (max 3650)" } });
47
+ return;
48
+ }
49
+ const apiTokenService = req.scope.resolve("apiTokenModuleService");
50
+ const { token, apiToken } = await apiTokenService.createToken({
51
+ user_id: req.user.id,
52
+ name: name.trim(),
53
+ scopes: [...new Set(scopes)],
54
+ expires_in_days: expires_in_days ?? null,
55
+ });
56
+ // The plaintext token appears in this response only — it is never retrievable again.
57
+ res.status(201).json({ token, api_token: toApiTokenDto(apiToken) });
58
+ }
59
+ catch (err) {
60
+ next(err);
61
+ }
62
+ };
63
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../src/api/admin/api-tokens/route.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,CAAU,CAAA;AAC/C,MAAM,eAAe,GAAG,GAAG,CAAA;AAE3B,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,MAAW;IACvC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACvE,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;QACzE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,qBAAqB,CAC1D,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EACxB,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CACpC,CAAA;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACxE,IAAI,CAAC;QACH,sEAAsE;QACtE,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,WAAW,EAAE,CAAC;YACvC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,2CAA2C,EAAE,EAAE,CAAC,CAAA;YACzF,OAAM;QACR,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;QAExD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YACrF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,eAAe,SAAS,EAAE,EAAE,CAAC,CAAA;YAC/F,OAAM;QACR,CAAC;QACD,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACtB,MAAM,CAAC,MAAM,KAAK,CAAC;YACnB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAE,YAAkC,CAAC,QAAQ,CAAC,CAAW,CAAC,CAAC,EACxF,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,sDAAsD,EAAE,EAAE,CAAC,CAAA;YACpG,OAAM;QACR,CAAC;QACD,IACE,eAAe,IAAI,IAAI;YACvB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,eAAe,IAAI,CAAC,IAAI,eAAe,GAAG,IAAI,CAAC,EACtF,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,uDAAuD,EAAE,EAAE,CAAC,CAAA;YACrG,OAAM;QACR,CAAC;QAED,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;QACzE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC;YAC5D,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5B,eAAe,EAAE,eAAe,IAAI,IAAI;SACzC,CAAC,CAAA;QAEF,qFAAqF;QACrF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAA;IACX,CAAC;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/activities/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAmBhD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/activities/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAOhD,CAAA"}
@@ -1,22 +1,11 @@
1
- import { hasProjectAccess } from "../../../../utils/project-access.js";
1
+ import { assertIssueAccess } from "../../../../utils/issue-access.js";
2
2
  export const GET = async (req, res) => {
3
- const issueService = req.scope.resolve("issueModuleService");
4
- const issue = await issueService.retrieveIssue(req.params.id).catch(() => null);
5
- if (!issue) {
6
- res.status(404).json({ error: { message: "Issue not found" } });
3
+ const issue = await assertIssueAccess(req, res);
4
+ if (!issue)
7
5
  return;
8
- }
9
- if (issue.project_id) {
10
- const projectService = req.scope.resolve("projectModuleService");
11
- const project = await projectService.retrieveProject(issue.project_id).catch(() => null);
12
- if (project && !await hasProjectAccess(req, project)) {
13
- res.status(403).json({ error: { message: "Forbidden" } });
14
- return;
15
- }
16
- }
17
6
  const activityService = req.scope.resolve("activityModuleService");
18
7
  const activities = await activityService.listActivityForEntity("issue", req.params.id);
19
8
  activities.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime());
20
- res.json({ activities });
9
+ res.json({ activities, count: activities.length });
21
10
  };
22
11
  //# sourceMappingURL=route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/activities/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAEtE,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;IACnE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;QACvE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QACxF,IAAI,OAAO,IAAI,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;IACH,CAAC;IACD,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;IACzE,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACtF,UAAU,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACxG,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;AAC1B,CAAC,CAAA"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/activities/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;IACzE,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACtF,UAAU,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACxG,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;AACpD,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/attachments/[attachmentId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAKvC,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAuCnD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/attachments/[attachmentId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAQvC,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAwCnD,CAAA"}
@@ -1,8 +1,13 @@
1
1
  import { requirePermission } from "@meridianjs/auth";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
+ import { assertIssueAccess } from "../../../../../utils/issue-access.js";
5
+ import { PROJECT_ROLES } from "@meridianjs/types";
6
+ import { isGlobalAdmin } from "../../../../../utils/project-access.js";
4
7
  export const DELETE = async (req, res) => {
5
8
  requirePermission("issue:update")(req, res, async () => {
9
+ if (!(await assertIssueAccess(req, res)))
10
+ return;
6
11
  const issueService = req.scope.resolve("issueModuleService");
7
12
  const repo = req.scope.resolve("attachmentRepository");
8
13
  const attachment = await repo.findOne({ id: req.params.attachmentId });
@@ -17,7 +22,7 @@ export const DELETE = async (req, res) => {
17
22
  }
18
23
  // Verify caller uploaded the attachment or has manager/admin role
19
24
  const roles = req.user?.roles ?? [];
20
- const isPrivileged = roles.includes("super-admin") || roles.includes("admin") || roles.includes("manager");
25
+ const isPrivileged = isGlobalAdmin(req) || roles.includes(PROJECT_ROLES.MANAGER);
21
26
  if (!isPrivileged && attachment.uploader_id !== req.user?.id) {
22
27
  res.status(403).json({ error: { message: "Forbidden" } });
23
28
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/attachments/[attachmentId]/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/attachments/[attachmentId]/route.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/attachments/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAuBvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAKhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA0BjD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/attachments/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAKvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAKhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA0BjD,CAAA"}
@@ -1,29 +1,12 @@
1
1
  import { requirePermission } from "@meridianjs/auth";
2
- import { hasProjectAccess } from "../../../../utils/project-access.js";
2
+ import { assertIssueAccess } from "../../../../utils/issue-access.js";
3
3
  import { processUpload } from "../../../../../utils/upload.js";
4
- async function assertIssueAccess(req, res) {
5
- const issueService = req.scope.resolve("issueModuleService");
6
- const issue = await issueService.retrieveIssue(req.params.id).catch(() => null);
7
- if (!issue) {
8
- res.status(404).json({ error: { message: "Issue not found" } });
9
- return false;
10
- }
11
- if (issue.project_id) {
12
- const projectService = req.scope.resolve("projectModuleService");
13
- const project = await projectService.retrieveProject(issue.project_id).catch(() => null);
14
- if (project && !await hasProjectAccess(req, project)) {
15
- res.status(403).json({ error: { message: "Forbidden" } });
16
- return false;
17
- }
18
- }
19
- return true;
20
- }
21
4
  export const GET = async (req, res) => {
22
5
  if (!await assertIssueAccess(req, res))
23
6
  return;
24
7
  const issueService = req.scope.resolve("issueModuleService");
25
8
  const attachments = await issueService.listAttachmentsByIssue(req.params.id);
26
- res.json({ attachments });
9
+ res.json({ attachments, count: attachments.length });
27
10
  };
28
11
  export const POST = async (req, res) => {
29
12
  requirePermission("issue:update")(req, res, async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/attachments/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/attachments/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAE9D,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,IAAI,CAAC,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAM;IAC9C,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;IACnE,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC5E,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACpD,iBAAiB,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QACrD,IAAI,CAAC,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,OAAM;QAC9C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAA;QACzE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,mEAAmE,EAAE,EAAE,CAAC,CAAA;YACjH,OAAM;QACR,CAAC;QAED,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;QACnE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QAExF,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC;YACrD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;YACvB,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,IAAI,IAAI;YACxC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ;YACrC,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAA;QACF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/comments/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAsBvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAKhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAoBjD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/comments/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAKvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAKhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAoBjD,CAAA"}
@@ -1,28 +1,12 @@
1
1
  import { requirePermission } from "@meridianjs/auth";
2
- import { hasProjectAccess } from "../../../../utils/project-access.js";
3
- async function assertIssueAccess(req, res) {
4
- const issueService = req.scope.resolve("issueModuleService");
5
- const issue = await issueService.retrieveIssue(req.params.id).catch(() => null);
6
- if (!issue) {
7
- res.status(404).json({ error: { message: "Issue not found" } });
8
- return false;
9
- }
10
- if (issue.project_id) {
11
- const projectService = req.scope.resolve("projectModuleService");
12
- const project = await projectService.retrieveProject(issue.project_id).catch(() => null);
13
- if (project && !await hasProjectAccess(req, project)) {
14
- res.status(403).json({ error: { message: "Forbidden" } });
15
- return false;
16
- }
17
- }
18
- return true;
19
- }
2
+ import { assertIssueAccess } from "../../../../utils/issue-access.js";
3
+ import { EVENTS } from "@meridianjs/types";
20
4
  export const GET = async (req, res) => {
21
5
  if (!await assertIssueAccess(req, res))
22
6
  return;
23
7
  const issueService = req.scope.resolve("issueModuleService");
24
8
  const comments = await issueService.listCommentsByIssue(req.params.id);
25
- res.json({ comments });
9
+ res.json({ comments, count: comments.length });
26
10
  };
27
11
  export const POST = async (req, res) => {
28
12
  requirePermission("issue:create")(req, res, async () => {
@@ -42,7 +26,7 @@ export const POST = async (req, res) => {
42
26
  const mentionedUserIds = Array.isArray(metadata?.mentioned_user_ids)
43
27
  ? metadata.mentioned_user_ids.filter((id) => typeof id === "string")
44
28
  : [];
45
- eventBus.emit({ name: "comment.created", data: { comment_id: comment.id, issue_id: req.params.id, author_id: comment.author_id, mentioned_user_ids: mentionedUserIds } }).catch(() => { });
29
+ eventBus.emit({ name: EVENTS.COMMENT_CREATED, data: { comment_id: comment.id, issue_id: req.params.id, author_id: comment.author_id, mentioned_user_ids: mentionedUserIds } }).catch(() => { });
46
30
  res.status(201).json({ comment });
47
31
  });
48
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/comments/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/comments/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,IAAI,CAAC,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAM;IAC9C,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;IACnE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACtE,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACpD,iBAAiB,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QACrD,IAAI,CAAC,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,OAAM;QAC9C,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;QACnE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAQ,CAAA;QACrD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;QACnC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAA;YAChE,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;YAC/C,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ;YAC/E,QAAQ,EAAE,QAAQ,IAAI,IAAI;SAC3B,CAAC,CAAA;QACF,MAAM,gBAAgB,GAAa,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC;YAC5E,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC;YAC7E,CAAC,CAAC,EAAE,CAAA;QACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC9L,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/related/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA8BhD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/related/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA2BhD,CAAA"}
@@ -1,10 +1,9 @@
1
+ import { assertIssueAccess } from "../../../../utils/issue-access.js";
1
2
  export const GET = async (req, res) => {
2
- const issueService = req.scope.resolve("issueModuleService");
3
- const issue = await issueService.retrieveIssue(req.params.id).catch(() => null);
4
- if (!issue) {
5
- res.status(404).json({ error: { message: "Issue not found" } });
3
+ const issue = await assertIssueAccess(req, res);
4
+ if (!issue)
6
5
  return;
7
- }
6
+ const issueService = req.scope.resolve("issueModuleService");
8
7
  // Calculate depth by walking the parent chain
9
8
  let depth = 0;
10
9
  let currentId = issue.parent_id;
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/related/route.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;IACnE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IAED,8CAA8C;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;IAC/B,OAAO,SAAS,EAAE,CAAC;QACjB,KAAK,EAAE,CAAA;QACP,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAC5E,IAAI,CAAC,MAAM;YAAE,MAAK;QAClB,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;IAC9B,CAAC;IAED,aAAa;IACb,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS;QAC5B,CAAC,CAAC,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACrE,CAAC,CAAC,IAAI,CAAA;IAER,eAAe;IACf,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,YAAY,CAAC,kBAAkB,CACtD,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAC5B,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAC/C,CAAA;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;AACvC,CAAC,CAAA"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/related/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;IAEnE,8CAA8C;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;IAC/B,OAAO,SAAS,EAAE,CAAC;QACjB,KAAK,EAAE,CAAA;QACP,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAC5E,IAAI,CAAC,MAAM;YAAE,MAAK;QAClB,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;IAC9B,CAAC;IAED,aAAa;IACb,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS;QAC5B,CAAC,CAAC,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACrE,CAAC,CAAC,IAAI,CAAA;IAER,eAAe;IACf,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,YAAY,CAAC,kBAAkB,CACtD,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAC5B,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAC/C,CAAA;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;AACvC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/relations/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAqBhD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/relations/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAkBhD,CAAA"}
@@ -1,10 +1,9 @@
1
+ import { assertIssueAccess } from "../../../../utils/issue-access.js";
1
2
  export const GET = async (req, res) => {
2
- const issueService = req.scope.resolve("issueModuleService");
3
- const issue = await issueService.retrieveIssue(req.params.id).catch(() => null);
4
- if (!issue) {
5
- res.status(404).json({ error: { message: "Issue not found" } });
3
+ const issue = await assertIssueAccess(req, res);
4
+ if (!issue)
6
5
  return;
7
- }
6
+ const issueService = req.scope.resolve("issueModuleService");
8
7
  const fetchByIds = async (ids) => {
9
8
  const results = await Promise.all(ids.map((id) => issueService.retrieveIssue(id).catch(() => null)));
10
9
  return results.filter(Boolean);
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/relations/route.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;IACnE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,EAAE,GAAa,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAClE,CAAA;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC,CAAA;IAED,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjD,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAC,CAAA;IAEF,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/relations/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;IAEnE,MAAM,UAAU,GAAG,KAAK,EAAE,GAAa,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAClE,CAAA;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC,CAAA;IAED,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjD,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAC,CAAA;IAEF,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/api/admin/issues/[id]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAMrD,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAYhD,CAAA;AAED,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAsFpE,CAAA;AAED,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAUvE,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/api/admin/issues/[id]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAOrD,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAIhD,CAAA;AAED,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAwFpE,CAAA;AAED,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAYvE,CAAA"}
@@ -1,23 +1,20 @@
1
1
  import { requirePermission } from "@meridianjs/auth";
2
2
  import { updateIssueStatusWorkflow } from "../../../../workflows/update-issue-status.js";
3
3
  import { assignIssueWorkflow } from "../../../../workflows/assign-issue.js";
4
- import { hasProjectAccess } from "../../../utils/project-access.js";
4
+ import { assertIssueAccess } from "../../../utils/issue-access.js";
5
+ import { EVENTS } from "@meridianjs/types";
5
6
  export const GET = async (req, res) => {
6
- const issueService = req.scope.resolve("issueModuleService");
7
- const issue = await issueService.retrieveIssue(req.params.id);
8
- if (issue?.project_id) {
9
- const projectService = req.scope.resolve("projectModuleService");
10
- const project = await projectService.retrieveProject(issue.project_id).catch(() => null);
11
- if (project && !await hasProjectAccess(req, project)) {
12
- res.status(403).json({ error: { message: "Forbidden" } });
13
- return;
14
- }
15
- }
7
+ const issue = await assertIssueAccess(req, res);
8
+ if (!issue)
9
+ return;
16
10
  res.json({ issue });
17
11
  };
18
12
  export const PUT = async (req, res, next) => {
19
13
  requirePermission("issue:update")(req, res, async () => {
20
14
  try {
15
+ // Permission is org-wide; also require access to this issue's project.
16
+ if (!(await assertIssueAccess(req, res)))
17
+ return;
21
18
  const issueService = req.scope.resolve("issueModuleService");
22
19
  const activityService = req.scope.resolve("activityModuleService");
23
20
  const allowed = ["title", "description", "status", "priority", "type",
@@ -45,7 +42,7 @@ export const PUT = async (req, res, next) => {
45
42
  if (mentionedUserIds.length > 0 && req.body.description !== undefined) {
46
43
  const eventBus = req.scope.resolve("eventBus");
47
44
  eventBus.emit({
48
- name: "issue.mentioned",
45
+ name: EVENTS.ISSUE_MENTIONED,
49
46
  data: {
50
47
  issue_id: issue.id,
51
48
  actor_id: req.user?.id ?? "system",
@@ -114,6 +111,9 @@ export const PUT = async (req, res, next) => {
114
111
  export const DELETE = async (req, res, next) => {
115
112
  requirePermission("issue:delete")(req, res, async () => {
116
113
  try {
114
+ // Permission is org-wide; also require access to this issue's project.
115
+ if (!(await assertIssueAccess(req, res)))
116
+ return;
117
117
  const issueService = req.scope.resolve("issueModuleService");
118
118
  await issueService.softDeleteIssue(req.params.id);
119
119
  res.status(204).send();
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../src/api/admin/issues/[id]/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../src/api/admin/issues/[id]/route.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/time-logs/[logId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA8ChD,CAAA;AAED,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA0BnD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/time-logs/[logId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA+ChD,CAAA;AAED,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA2BnD,CAAA"}
@@ -1,10 +1,13 @@
1
1
  import { requirePermission } from "@meridianjs/auth";
2
+ import { assertIssueAccess } from "../../../../../utils/issue-access.js";
2
3
  export const PUT = async (req, res) => {
3
4
  requirePermission("issue:update")(req, res, async () => {
5
+ if (!(await assertIssueAccess(req, res)))
6
+ return;
4
7
  const issueService = req.scope.resolve("issueModuleService");
5
8
  const activityService = req.scope.resolve("activityModuleService");
6
9
  const entry = await issueService.retrieveTimeLog(req.params.logId);
7
- if (!entry) {
10
+ if (!entry || entry.issue_id !== req.params.id) {
8
11
  res.status(404).json({ error: { message: "Time log not found" } });
9
12
  return;
10
13
  }
@@ -43,10 +46,12 @@ export const PUT = async (req, res) => {
43
46
  };
44
47
  export const DELETE = async (req, res) => {
45
48
  requirePermission("issue:update")(req, res, async () => {
49
+ if (!(await assertIssueAccess(req, res)))
50
+ return;
46
51
  const issueService = req.scope.resolve("issueModuleService");
47
52
  const activityService = req.scope.resolve("activityModuleService");
48
53
  const entry = await issueService.retrieveTimeLog(req.params.logId);
49
- if (!entry) {
54
+ if (!entry || entry.issue_id !== req.params.id) {
50
55
  res.status(404).json({ error: { message: "Time log not found" } });
51
56
  return;
52
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/time-logs/[logId]/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/time-logs/[logId]/route.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/time-logs/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAsBvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAMhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAmBjD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/time-logs/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAMhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAmBjD,CAAA"}
@@ -1,22 +1,5 @@
1
1
  import { requirePermission } from "@meridianjs/auth";
2
- import { hasProjectAccess } from "../../../../utils/project-access.js";
3
- async function assertIssueAccess(req, res) {
4
- const issueService = req.scope.resolve("issueModuleService");
5
- const issue = await issueService.retrieveIssue(req.params.id).catch(() => null);
6
- if (!issue) {
7
- res.status(404).json({ error: { message: "Issue not found" } });
8
- return false;
9
- }
10
- if (issue.project_id) {
11
- const projectService = req.scope.resolve("projectModuleService");
12
- const project = await projectService.retrieveProject(issue.project_id).catch(() => null);
13
- if (project && !await hasProjectAccess(req, project)) {
14
- res.status(403).json({ error: { message: "Forbidden" } });
15
- return false;
16
- }
17
- }
18
- return true;
19
- }
2
+ import { assertIssueAccess } from "../../../../utils/issue-access.js";
20
3
  export const GET = async (req, res) => {
21
4
  if (!await assertIssueAccess(req, res))
22
5
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/time-logs/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/issues/[id]/time-logs/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,IAAI,CAAC,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAM;IAC9C,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;IACnE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAClE,MAAM,aAAa,GAAI,IAAc,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,GAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7G,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAA;AAC9C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACpD,iBAAiB,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QACrD,IAAI,CAAC,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,OAAM;QAC9C,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;QACnE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;QAC/D,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,6CAA6C,EAAE,EAAE,CAAC,CAAA;YAC3F,OAAM;QACR,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QACxF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,mBAAmB,CAAC;YACnD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY;YAC5F,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS;YACzC,gBAAgB,EAAE,WAAW,EAAE,WAAW,IAAI,IAAI;YAClD,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;SAC7D,CAAC,CAAA;QACF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/time-logs/timer/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAuBvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAKhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA6BjD,CAAA"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/issues/[id]/time-logs/timer/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAKvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAKhD,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA6BjD,CAAA"}