@meridianjs/meridian 0.1.24 → 0.1.26
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.
- package/dist/api/admin/projects/[id]/activities/route.d.ts +3 -0
- package/dist/api/admin/projects/[id]/activities/route.d.ts.map +1 -0
- package/dist/api/admin/projects/[id]/activities/route.js +18 -0
- package/dist/api/admin/projects/[id]/activities/route.js.map +1 -0
- package/dist/api/admin/projects/[id]/members/[userId]/route.d.ts.map +1 -1
- package/dist/api/admin/projects/[id]/members/[userId]/route.js +7 -0
- package/dist/api/admin/projects/[id]/members/[userId]/route.js.map +1 -1
- package/dist/api/admin/projects/[id]/members/route.d.ts.map +1 -1
- package/dist/api/admin/projects/[id]/members/route.js +7 -0
- package/dist/api/admin/projects/[id]/members/route.js.map +1 -1
- package/dist/api/admin/projects/[id]/share/route.d.ts +4 -0
- package/dist/api/admin/projects/[id]/share/route.d.ts.map +1 -0
- package/dist/api/admin/projects/[id]/share/route.js +58 -0
- package/dist/api/admin/projects/[id]/share/route.js.map +1 -0
- package/dist/api/admin/projects/[id]/teams/[teamId]/route.d.ts.map +1 -1
- package/dist/api/admin/projects/[id]/teams/[teamId]/route.js +7 -0
- package/dist/api/admin/projects/[id]/teams/[teamId]/route.js.map +1 -1
- package/dist/api/admin/projects/[id]/teams/route.d.ts.map +1 -1
- package/dist/api/admin/projects/[id]/teams/route.js +7 -0
- package/dist/api/admin/projects/[id]/teams/route.js.map +1 -1
- package/dist/api/public/share/[token]/issues/route.d.ts +3 -0
- package/dist/api/public/share/[token]/issues/route.d.ts.map +1 -0
- package/dist/api/public/share/[token]/issues/route.js +40 -0
- package/dist/api/public/share/[token]/issues/route.js.map +1 -0
- package/dist/api/public/share/[token]/route.d.ts +3 -0
- package/dist/api/public/share/[token]/route.d.ts.map +1 -0
- package/dist/api/public/share/[token]/route.js +21 -0
- package/dist/api/public/share/[token]/route.js.map +1 -0
- package/dist/api/public/share/[token]/sprints/route.d.ts +3 -0
- package/dist/api/public/share/[token]/sprints/route.d.ts.map +1 -0
- package/dist/api/public/share/[token]/sprints/route.js +12 -0
- package/dist/api/public/share/[token]/sprints/route.js.map +1 -0
- package/dist/subscribers/_email-helper.d.ts +2 -0
- package/dist/subscribers/_email-helper.d.ts.map +1 -1
- package/dist/subscribers/_email-helper.js +9 -0
- package/dist/subscribers/_email-helper.js.map +1 -1
- package/dist/subscribers/comment-created.d.ts.map +1 -1
- package/dist/subscribers/comment-created.js +5 -4
- package/dist/subscribers/comment-created.js.map +1 -1
- package/dist/subscribers/issue-assigned.d.ts.map +1 -1
- package/dist/subscribers/issue-assigned.js +5 -4
- package/dist/subscribers/issue-assigned.js.map +1 -1
- package/dist/subscribers/issue-created.d.ts.map +1 -1
- package/dist/subscribers/issue-created.js +6 -5
- package/dist/subscribers/issue-created.js.map +1 -1
- package/dist/subscribers/project-member-added.d.ts.map +1 -1
- package/dist/subscribers/project-member-added.js +5 -4
- package/dist/subscribers/project-member-added.js.map +1 -1
- package/dist/subscribers/workspace-member-invited.d.ts.map +1 -1
- package/dist/subscribers/workspace-member-invited.js +10 -4
- package/dist/subscribers/workspace-member-invited.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[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,kBAchD,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { hasProjectAccess } from "../../../../utils/project-access.js";
|
|
2
|
+
export const GET = async (req, res) => {
|
|
3
|
+
const projectService = req.scope.resolve("projectModuleService");
|
|
4
|
+
const project = await projectService.retrieveProject(req.params.id).catch(() => null);
|
|
5
|
+
if (!project) {
|
|
6
|
+
res.status(404).json({ error: { message: "Project not found" } });
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (!await hasProjectAccess(req, project)) {
|
|
10
|
+
res.status(403).json({ error: { message: "Forbidden" } });
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const activityService = req.scope.resolve("activityModuleService");
|
|
14
|
+
const activities = await activityService.listActivityForEntity("project", req.params.id);
|
|
15
|
+
activities.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());
|
|
16
|
+
res.json({ activities });
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[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,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;IACvE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IACrF,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAAC,OAAM;IAAC,CAAC;IAE3F,IAAI,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;QACzD,OAAM;IACR,CAAC;IAED,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;IACzE,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACxF,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/members/[userId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGrD,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/members/[userId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGrD,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBA8BvE,CAAA"}
|
|
@@ -12,6 +12,13 @@ export const DELETE = async (req, res, next) => {
|
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
await projectMemberService.removeProjectMember(project.id, req.params.userId);
|
|
15
|
+
const activityService = req.scope.resolve("activityModuleService");
|
|
16
|
+
activityService.recordActivity({
|
|
17
|
+
entity_type: "project", entity_id: project.id,
|
|
18
|
+
actor_id: req.user?.id ?? "system", action: "member_removed",
|
|
19
|
+
workspace_id: project.workspace_id,
|
|
20
|
+
changes: { user_id: { from: req.params.userId, to: null } },
|
|
21
|
+
}).catch(() => { });
|
|
15
22
|
res.status(204).send();
|
|
16
23
|
}
|
|
17
24
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/members/[userId]/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAC1E,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YACnF,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;YAEvE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;YAChC,MAAM,OAAO,GACX,CAAC,MAAM,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC,MAAM,cAAc,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,UAAU,aAAa,EAAE,EAAE,CAAC,CAAA;gBACjF,OAAM;YACR,CAAC;YAED,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/members/[userId]/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAC1E,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YACnF,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;YAEvE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;YAChC,MAAM,OAAO,GACX,CAAC,MAAM,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC,MAAM,cAAc,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,UAAU,aAAa,EAAE,EAAE,CAAC,CAAA;gBACjF,OAAM;YACR,CAAC;YAED,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAE7E,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;YACzE,eAAe,CAAC,cAAc,CAAC;gBAC7B,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;gBAC7C,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ,EAAE,MAAM,EAAE,gBAAgB;gBAC5D,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;aAC5D,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAElB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/members/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGrD,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/members/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGrD,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAgDrE,CAAA"}
|
|
@@ -28,6 +28,13 @@ export const POST = async (req, res, next) => {
|
|
|
28
28
|
actor_id: req.user?.id ?? "system",
|
|
29
29
|
},
|
|
30
30
|
}).catch(() => { });
|
|
31
|
+
const activityService = req.scope.resolve("activityModuleService");
|
|
32
|
+
activityService.recordActivity({
|
|
33
|
+
entity_type: "project", entity_id: project.id,
|
|
34
|
+
actor_id: req.user?.id ?? "system", action: "member_added",
|
|
35
|
+
workspace_id: project.workspace_id,
|
|
36
|
+
changes: { user_id: { from: null, to: user_id }, role: { from: null, to: role ?? "member" } },
|
|
37
|
+
}).catch(() => { });
|
|
31
38
|
res.status(201).json({ ok: true });
|
|
32
39
|
}
|
|
33
40
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/members/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACxE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YACnF,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;YACvE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAQ,CAAA;YACrD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YAElC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAA;gBACnE,OAAM;YACR,CAAC;YAED,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;YAChC,MAAM,OAAO,GACX,CAAC,MAAM,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC,MAAM,cAAc,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,UAAU,aAAa,EAAE,EAAE,CAAC,CAAA;gBACjF,OAAM;YACR,CAAC;YAED,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,IAAI,QAAQ,CAAC,CAAA;YAErF,MAAM,QAAQ,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE;oBACJ,UAAU,EAAE,OAAO,CAAC,EAAE;oBACtB,YAAY,EAAE,OAAO,CAAC,IAAI;oBAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,OAAO;oBACP,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ;iBACnC;aACF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAElB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/members/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACxE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YACnF,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;YACvE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAQ,CAAA;YACrD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YAElC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAA;gBACnE,OAAM;YACR,CAAC;YAED,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;YAChC,MAAM,OAAO,GACX,CAAC,MAAM,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC,MAAM,cAAc,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,UAAU,aAAa,EAAE,EAAE,CAAC,CAAA;gBACjF,OAAM;YACR,CAAC;YAED,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,IAAI,QAAQ,CAAC,CAAA;YAErF,MAAM,QAAQ,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE;oBACJ,UAAU,EAAE,OAAO,CAAC,EAAE;oBACtB,YAAY,EAAE,OAAO,CAAC,IAAI;oBAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,OAAO;oBACP,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ;iBACnC;aACF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAElB,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;YACzE,eAAe,CAAC,cAAc,CAAC;gBAC7B,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;gBAC7C,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ,EAAE,MAAM,EAAE,cAAc;gBAC1D,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,QAAQ,EAAE,EAAE;aAC9F,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAElB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/share/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAkBvC,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAuBjD,CAAA;AAED,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAoBnD,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** Check if the caller is allowed to manage share settings for this project. */
|
|
2
|
+
async function canManageShare(req, project) {
|
|
3
|
+
const roles = req.user?.roles ?? [];
|
|
4
|
+
if (roles.includes("super-admin") || roles.includes("admin"))
|
|
5
|
+
return true;
|
|
6
|
+
const workspaceMemberService = req.scope.resolve("workspaceMemberModuleService");
|
|
7
|
+
const projectMemberService = req.scope.resolve("projectMemberModuleService");
|
|
8
|
+
const userId = req.user?.id;
|
|
9
|
+
const membership = await workspaceMemberService.getMembership(project.workspace_id, userId).catch(() => null);
|
|
10
|
+
if (membership?.role === "admin")
|
|
11
|
+
return true;
|
|
12
|
+
const members = await projectMemberService.listProjectMembers(project.id);
|
|
13
|
+
return members.some((m) => m.user_id === userId && m.role === "manager");
|
|
14
|
+
}
|
|
15
|
+
export const POST = async (req, res) => {
|
|
16
|
+
const projectService = req.scope.resolve("projectModuleService");
|
|
17
|
+
const project = await projectService.retrieveProject(req.params.id).catch(() => null);
|
|
18
|
+
if (!project) {
|
|
19
|
+
res.status(404).json({ error: { message: "Project not found" } });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!await canManageShare(req, project)) {
|
|
23
|
+
res.status(403).json({ error: { message: "Forbidden" } });
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const updated = await projectService.generateShareToken(req.params.id);
|
|
27
|
+
const origin = `${req.protocol}://${req.get("host")}`;
|
|
28
|
+
const shareUrl = `${origin}/share/${updated.share_token}`;
|
|
29
|
+
const activityService = req.scope.resolve("activityModuleService");
|
|
30
|
+
activityService.recordActivity({
|
|
31
|
+
entity_type: "project", entity_id: req.params.id,
|
|
32
|
+
actor_id: req.user?.id ?? "system", action: "share_enabled",
|
|
33
|
+
workspace_id: project.workspace_id,
|
|
34
|
+
changes: { share_url: { from: null, to: shareUrl } },
|
|
35
|
+
}).catch(() => { });
|
|
36
|
+
res.json({ share_url: shareUrl, project: updated });
|
|
37
|
+
};
|
|
38
|
+
export const DELETE = async (req, res) => {
|
|
39
|
+
const projectService = req.scope.resolve("projectModuleService");
|
|
40
|
+
const project = await projectService.retrieveProject(req.params.id).catch(() => null);
|
|
41
|
+
if (!project) {
|
|
42
|
+
res.status(404).json({ error: { message: "Project not found" } });
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (!await canManageShare(req, project)) {
|
|
46
|
+
res.status(403).json({ error: { message: "Forbidden" } });
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const updated = await projectService.revokeShareToken(req.params.id);
|
|
50
|
+
const activityService = req.scope.resolve("activityModuleService");
|
|
51
|
+
activityService.recordActivity({
|
|
52
|
+
entity_type: "project", entity_id: req.params.id,
|
|
53
|
+
actor_id: req.user?.id ?? "system", action: "share_revoked",
|
|
54
|
+
workspace_id: project.workspace_id,
|
|
55
|
+
}).catch(() => { });
|
|
56
|
+
res.json({ project: updated });
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/share/route.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/teams/[teamId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGrD,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/teams/[teamId]/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGrD,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBA8BvE,CAAA"}
|
|
@@ -12,6 +12,13 @@ export const DELETE = async (req, res, next) => {
|
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
await projectMemberService.removeProjectTeam(project.id, req.params.teamId);
|
|
15
|
+
const activityService = req.scope.resolve("activityModuleService");
|
|
16
|
+
activityService.recordActivity({
|
|
17
|
+
entity_type: "project", entity_id: project.id,
|
|
18
|
+
actor_id: req.user?.id ?? "system", action: "team_removed",
|
|
19
|
+
workspace_id: project.workspace_id,
|
|
20
|
+
changes: { team_id: { from: req.params.teamId, to: null } },
|
|
21
|
+
}).catch(() => { });
|
|
15
22
|
res.status(204).send();
|
|
16
23
|
}
|
|
17
24
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/teams/[teamId]/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAC1E,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YACnF,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;YAEvE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;YAChC,MAAM,OAAO,GACX,CAAC,MAAM,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC,MAAM,cAAc,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,UAAU,aAAa,EAAE,EAAE,CAAC,CAAA;gBACjF,OAAM;YACR,CAAC;YAED,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../../src/api/admin/projects/[id]/teams/[teamId]/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAC1E,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YACnF,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;YAEvE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;YAChC,MAAM,OAAO,GACX,CAAC,MAAM,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC,MAAM,cAAc,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,UAAU,aAAa,EAAE,EAAE,CAAC,CAAA;gBACjF,OAAM;YACR,CAAC;YAED,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAE3E,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;YACzE,eAAe,CAAC,cAAc,CAAC;gBAC7B,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;gBAC7C,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ,EAAE,MAAM,EAAE,cAAc;gBAC1D,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;aAC5D,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAElB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/teams/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGrD,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/teams/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGrD,eAAO,MAAM,IAAI,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,kBAoCrE,CAAA"}
|
|
@@ -17,6 +17,13 @@ export const POST = async (req, res, next) => {
|
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
await projectMemberService.ensureProjectTeam(project.id, team_id);
|
|
20
|
+
const activityService = req.scope.resolve("activityModuleService");
|
|
21
|
+
activityService.recordActivity({
|
|
22
|
+
entity_type: "project", entity_id: project.id,
|
|
23
|
+
actor_id: req.user?.id ?? "system", action: "team_added",
|
|
24
|
+
workspace_id: project.workspace_id,
|
|
25
|
+
changes: { team_id: { from: null, to: team_id } },
|
|
26
|
+
}).catch(() => { });
|
|
20
27
|
res.status(201).json({ ok: true });
|
|
21
28
|
}
|
|
22
29
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/teams/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACxE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YACnF,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;YACvE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAA;gBACnE,OAAM;YACR,CAAC;YAED,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;YAChC,MAAM,OAAO,GACX,CAAC,MAAM,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC,MAAM,cAAc,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,UAAU,aAAa,EAAE,EAAE,CAAC,CAAA;gBACjF,OAAM;YACR,CAAC;YAED,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/projects/[id]/teams/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACxE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,oBAAoB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAQ,CAAA;YACnF,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;YACvE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;YAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAA;gBACnE,OAAM;YACR,CAAC;YAED,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;YAChC,MAAM,OAAO,GACX,CAAC,MAAM,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC,MAAM,cAAc,CAAC,2BAA2B,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,UAAU,aAAa,EAAE,EAAE,CAAC,CAAA;gBACjF,OAAM;YACR,CAAC;YAED,MAAM,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAEjE,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAQ,CAAA;YACzE,eAAe,CAAC,cAAc,CAAC;gBAC7B,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;gBAC7C,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ,EAAE,MAAM,EAAE,YAAY;gBACxD,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;aAClD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAElB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/public/share/[token]/issues/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBA8ChD,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const GET = async (req, res) => {
|
|
2
|
+
const projectService = req.scope.resolve("projectModuleService");
|
|
3
|
+
const issueService = req.scope.resolve("issueModuleService");
|
|
4
|
+
const userService = req.scope.resolve("userModuleService");
|
|
5
|
+
const project = await projectService.retrieveProjectByShareToken(req.params.token);
|
|
6
|
+
if (!project) {
|
|
7
|
+
res.status(404).json({ error: { message: "Share link not found or expired" } });
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const filters = { project_id: project.id };
|
|
11
|
+
if (req.query.status)
|
|
12
|
+
filters.status = req.query.status;
|
|
13
|
+
if (req.query.priority)
|
|
14
|
+
filters.priority = req.query.priority;
|
|
15
|
+
const limit = Math.min(Number(req.query.limit) || 100, 200);
|
|
16
|
+
const offset = Number(req.query.offset) || 0;
|
|
17
|
+
let [issues] = await issueService.listAndCountIssues(filters, { limit, offset, orderBy: { created_at: "ASC" } });
|
|
18
|
+
// Apply search filter in-memory (simple title match)
|
|
19
|
+
if (req.query.search) {
|
|
20
|
+
const q = req.query.search.toLowerCase();
|
|
21
|
+
issues = issues.filter((i) => i.title?.toLowerCase().includes(q));
|
|
22
|
+
}
|
|
23
|
+
// Strip sensitive data from assignees — return only { id, name, initials }
|
|
24
|
+
const sanitized = await Promise.all(issues.map(async (issue) => {
|
|
25
|
+
const assignees = await Promise.all((issue.assignee_ids ?? []).map(async (uid) => {
|
|
26
|
+
try {
|
|
27
|
+
const u = await userService.retrieveUser(uid);
|
|
28
|
+
const name = [u.first_name, u.last_name].filter(Boolean).join(" ");
|
|
29
|
+
const initials = [u.first_name?.[0], u.last_name?.[0]].filter(Boolean).join("").toUpperCase() || "?";
|
|
30
|
+
return { id: u.id, name, initials };
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return { id: uid, name: "Unknown", initials: "?" };
|
|
34
|
+
}
|
|
35
|
+
}));
|
|
36
|
+
return { ...issue, assignees };
|
|
37
|
+
}));
|
|
38
|
+
res.json({ issues: sanitized, count: sanitized.length });
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/public/share/[token]/issues/route.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/api/public/share/[token]/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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const GET = async (req, res) => {
|
|
2
|
+
const projectService = req.scope.resolve("projectModuleService");
|
|
3
|
+
const project = await projectService.retrieveProjectByShareToken(req.params.token);
|
|
4
|
+
if (!project) {
|
|
5
|
+
res.status(404).json({ error: { message: "Share link not found or expired" } });
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const statuses = await projectService.listStatusesByProject(project.id);
|
|
9
|
+
res.json({
|
|
10
|
+
project: {
|
|
11
|
+
id: project.id,
|
|
12
|
+
name: project.name,
|
|
13
|
+
identifier: project.identifier,
|
|
14
|
+
description: project.description,
|
|
15
|
+
icon: project.icon,
|
|
16
|
+
color: project.color,
|
|
17
|
+
statuses,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../src/api/public/share/[token]/route.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;IACvE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAClF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAAE,CAAC,CAAA;QAC/E,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAEvE,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE;YACP,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ;SACT;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/public/share/[token]/sprints/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,GAAG,GAAU,KAAK,GAAG,EAAE,KAAK,QAAQ,kBAYhD,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const GET = async (req, res) => {
|
|
2
|
+
const projectService = req.scope.resolve("projectModuleService");
|
|
3
|
+
const sprintService = req.scope.resolve("sprintModuleService");
|
|
4
|
+
const project = await projectService.retrieveProjectByShareToken(req.params.token);
|
|
5
|
+
if (!project) {
|
|
6
|
+
res.status(404).json({ error: { message: "Share link not found or expired" } });
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const [sprints] = await sprintService.listAndCountSprints({ project_id: project.id });
|
|
10
|
+
res.json({ sprints });
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/public/share/[token]/sprints/route.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAa,EAAE,EAAE;IACnD,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAQ,CAAA;IACvE,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAQ,CAAA;IAErE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAClF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAAE,CAAC,CAAA;QAC/E,OAAM;IACR,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,aAAa,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;IACrF,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;AACvB,CAAC,CAAA"}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
+
import type { EmailTemplateOverride } from "@meridianjs/types";
|
|
1
2
|
export declare function emailHtml(message: string): string;
|
|
3
|
+
export declare function resolveTemplate(container: any, event: string, data: unknown): EmailTemplateOverride | null;
|
|
2
4
|
//# sourceMappingURL=_email-helper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_email-helper.d.ts","sourceRoot":"","sources":["../../src/subscribers/_email-helper.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMjD"}
|
|
1
|
+
{"version":3,"file":"_email-helper.d.ts","sourceRoot":"","sources":["../../src/subscribers/_email-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAErF,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,GAAG,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,GACZ,qBAAqB,GAAG,IAAI,CAO9B"}
|
|
@@ -5,4 +5,13 @@ export function emailHtml(message) {
|
|
|
5
5
|
<p style="font-size:12px;color:#6b7280">Sent by Meridian</p>
|
|
6
6
|
</div>`;
|
|
7
7
|
}
|
|
8
|
+
export function resolveTemplate(container, event, data) {
|
|
9
|
+
try {
|
|
10
|
+
const svc = container.resolve("emailTemplateService");
|
|
11
|
+
return svc.render(event, data) ?? null;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null; // no emailTemplateService registered → use defaults
|
|
15
|
+
}
|
|
16
|
+
}
|
|
8
17
|
//# sourceMappingURL=_email-helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_email-helper.js","sourceRoot":"","sources":["../../src/subscribers/_email-helper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_email-helper.js","sourceRoot":"","sources":["../../src/subscribers/_email-helper.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO;SACA,OAAO;;;SAGP,CAAA;AACT,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAc,EACd,KAAa,EACb,IAAa;IAEb,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,sBAAsB,CAA0B,CAAA;QAC9E,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA,CAAC,oDAAoD;IAClE,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment-created.d.ts","sourceRoot":"","sources":["../../src/subscribers/comment-created.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIzE,UAAU,kBAAkB;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"comment-created.d.ts","sourceRoot":"","sources":["../../src/subscribers/comment-created.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIzE,UAAU,kBAAkB;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD7G;AAED,eAAO,MAAM,MAAM,EAAE,gBAA+C,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sseManager } from "@meridianjs/framework";
|
|
2
|
-
import { emailHtml } from "./_email-helper.js";
|
|
2
|
+
import { emailHtml, resolveTemplate } from "./_email-helper.js";
|
|
3
3
|
export default async function handler({ event, container }) {
|
|
4
4
|
const data = event.data;
|
|
5
5
|
const issueService = container.resolve("issueModuleService");
|
|
@@ -34,11 +34,12 @@ export default async function handler({ event, container }) {
|
|
|
34
34
|
const user = await userService.retrieveUser(userId);
|
|
35
35
|
if (!user?.email)
|
|
36
36
|
return;
|
|
37
|
+
const tpl = resolveTemplate(container, "comment.created", { issue, user });
|
|
37
38
|
await emailService.send({
|
|
38
39
|
to: user.email,
|
|
39
|
-
subject: `New comment on [${issue.identifier}]: ${issue.title}`,
|
|
40
|
-
text: `A comment was added on issue ${issue.identifier}: "${issue.title}" that you're involved with.`,
|
|
41
|
-
html: emailHtml(`A comment was added on issue <strong>${issue.identifier}</strong>: "${issue.title}" that you're involved with.`),
|
|
40
|
+
subject: tpl?.subject ?? `New comment on [${issue.identifier}]: ${issue.title}`,
|
|
41
|
+
text: tpl?.text ?? `A comment was added on issue ${issue.identifier}: "${issue.title}" that you're involved with.`,
|
|
42
|
+
html: tpl?.html ?? emailHtml(`A comment was added on issue <strong>${issue.identifier}</strong>: "${issue.title}" that you're involved with.`),
|
|
42
43
|
});
|
|
43
44
|
}));
|
|
44
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment-created.js","sourceRoot":"","sources":["../../src/subscribers/comment-created.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"comment-created.js","sourceRoot":"","sources":["../../src/subscribers/comment-created.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-assigned.d.ts","sourceRoot":"","sources":["../../src/subscribers/issue-assigned.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIzE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"issue-assigned.d.ts","sourceRoot":"","sources":["../../src/subscribers/issue-assigned.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIzE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD5G;AAED,eAAO,MAAM,MAAM,EAAE,gBAA8C,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sseManager } from "@meridianjs/framework";
|
|
2
|
-
import { emailHtml } from "./_email-helper.js";
|
|
2
|
+
import { emailHtml, resolveTemplate } from "./_email-helper.js";
|
|
3
3
|
export default async function handler({ event, container }) {
|
|
4
4
|
const data = event.data;
|
|
5
5
|
if (!data.assignee_ids?.length)
|
|
@@ -29,11 +29,12 @@ export default async function handler({ event, container }) {
|
|
|
29
29
|
const user = await userService.retrieveUser(userId);
|
|
30
30
|
if (!user?.email)
|
|
31
31
|
return;
|
|
32
|
+
const tpl = resolveTemplate(container, "issue.assigned", { issue, user });
|
|
32
33
|
await emailService.send({
|
|
33
34
|
to: user.email,
|
|
34
|
-
subject: `[${issue.identifier}] You've been assigned: ${issue.title}`,
|
|
35
|
-
text: `You've been assigned to issue ${issue.identifier}: "${issue.title}".`,
|
|
36
|
-
html: emailHtml(`You've been assigned to <strong>${issue.identifier}</strong>: "${issue.title}".`),
|
|
35
|
+
subject: tpl?.subject ?? `[${issue.identifier}] You've been assigned: ${issue.title}`,
|
|
36
|
+
text: tpl?.text ?? `You've been assigned to issue ${issue.identifier}: "${issue.title}".`,
|
|
37
|
+
html: tpl?.html ?? emailHtml(`You've been assigned to <strong>${issue.identifier}</strong>: "${issue.title}".`),
|
|
37
38
|
});
|
|
38
39
|
}));
|
|
39
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-assigned.js","sourceRoot":"","sources":["../../src/subscribers/issue-assigned.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"issue-assigned.js","sourceRoot":"","sources":["../../src/subscribers/issue-assigned.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAU/D,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAqC;IAC3F,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM;QAAE,OAAM;IAEtC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,2BAA2B,CAAQ,CAAA;IAE1E,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,YAAY;SACd,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC;SAClC,GAAG,CAAC,MAAM,CAAC,EAAE,CACZ,YAAY,CAAC,kBAAkB,CAAC;QAC9B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ;QAC/D,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,+BAA+B;QAC5D,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;KAC1C,CAAC,CACH,CACJ,CAAA;IAED,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,EAAE;QACxD,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC,CAAA;IAEF,8EAA8E;IAC9E,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,CAAQ,CAAA;QAC7D,MAAM,WAAW,GAAI,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAQ,CAAA;QAClE,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAQ,CAAA;QACnE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE7D,MAAM,OAAO,CAAC,UAAU,CACtB,IAAI,CAAC,YAAY;aACd,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC;aAClC,GAAG,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YACnD,IAAI,CAAC,IAAI,EAAE,KAAK;gBAAE,OAAM;YACxB,MAAM,GAAG,GAAG,eAAe,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACzE,MAAM,YAAY,CAAC,IAAI,CAAC;gBACtB,EAAE,EAAE,IAAI,CAAC,KAAK;gBACd,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,IAAI,KAAK,CAAC,UAAU,2BAA2B,KAAK,CAAC,KAAK,EAAE;gBACrF,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,iCAAiC,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,KAAK,IAAI;gBACzF,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,SAAS,CAAC,mCAAmC,KAAK,CAAC,UAAU,eAAe,KAAK,CAAC,KAAK,IAAI,CAAC;aAChH,CAAC,CAAA;QACJ,CAAC,CAAC,CACL,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAqB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-created.d.ts","sourceRoot":"","sources":["../../src/subscribers/issue-created.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIzE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"issue-created.d.ts","sourceRoot":"","sources":["../../src/subscribers/issue-created.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIzE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD3G;AAED,eAAO,MAAM,MAAM,EAAE,gBAA6C,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sseManager } from "@meridianjs/framework";
|
|
2
|
-
import { emailHtml } from "./_email-helper.js";
|
|
2
|
+
import { emailHtml, resolveTemplate } from "./_email-helper.js";
|
|
3
3
|
export default async function handler({ event, container }) {
|
|
4
4
|
const notifService = container.resolve("notificationModuleService");
|
|
5
5
|
const data = event.data;
|
|
@@ -35,13 +35,14 @@ export default async function handler({ event, container }) {
|
|
|
35
35
|
if (!user?.email)
|
|
36
36
|
return;
|
|
37
37
|
const isAssignee = data.assignee_ids?.includes(userId);
|
|
38
|
+
const tpl = resolveTemplate(container, "issue.created", { issue, user, isAssignee: !!isAssignee });
|
|
38
39
|
await emailService.send({
|
|
39
40
|
to: user.email,
|
|
40
|
-
subject: `New issue: [${issue.identifier}] ${issue.title}`,
|
|
41
|
-
text: isAssignee
|
|
41
|
+
subject: tpl?.subject ?? `New issue: [${issue.identifier}] ${issue.title}`,
|
|
42
|
+
text: tpl?.text ?? (isAssignee
|
|
42
43
|
? `You've been assigned to new issue ${issue.identifier}: "${issue.title}".`
|
|
43
|
-
: `A new issue ${issue.identifier} was created: "${issue.title}"
|
|
44
|
-
html: emailHtml(isAssignee
|
|
44
|
+
: `A new issue ${issue.identifier} was created: "${issue.title}".`),
|
|
45
|
+
html: tpl?.html ?? emailHtml(isAssignee
|
|
45
46
|
? `You've been assigned to new issue <strong>${issue.identifier}</strong>: "${issue.title}".`
|
|
46
47
|
: `A new issue <strong>${issue.identifier}</strong> was created: "${issue.title}".`),
|
|
47
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-created.js","sourceRoot":"","sources":["../../src/subscribers/issue-created.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"issue-created.js","sourceRoot":"","sources":["../../src/subscribers/issue-created.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-member-added.d.ts","sourceRoot":"","sources":["../../src/subscribers/project-member-added.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIzE,UAAU,sBAAsB;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"project-member-added.d.ts","sourceRoot":"","sources":["../../src/subscribers/project-member-added.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIzE,UAAU,sBAAsB;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCjH;AAED,eAAO,MAAM,MAAM,EAAE,gBAAoD,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sseManager } from "@meridianjs/framework";
|
|
2
|
-
import { emailHtml } from "./_email-helper.js";
|
|
2
|
+
import { emailHtml, resolveTemplate } from "./_email-helper.js";
|
|
3
3
|
export default async function handler({ event, container }) {
|
|
4
4
|
const data = event.data;
|
|
5
5
|
if (!data.user_id || data.user_id === data.actor_id)
|
|
@@ -24,11 +24,12 @@ export default async function handler({ event, container }) {
|
|
|
24
24
|
const userService = container.resolve("userModuleService");
|
|
25
25
|
const user = await userService.retrieveUser(data.user_id);
|
|
26
26
|
if (user?.email) {
|
|
27
|
+
const tpl = resolveTemplate(container, "project.member_added", { project: { name: data.project_name }, user });
|
|
27
28
|
await emailService.send({
|
|
28
29
|
to: user.email,
|
|
29
|
-
subject: `You've been added to project "${data.project_name}"`,
|
|
30
|
-
text: `You've been added to the project "${data.project_name}".`,
|
|
31
|
-
html: emailHtml(`You've been added to the project <strong>"${data.project_name}"</strong>.`),
|
|
30
|
+
subject: tpl?.subject ?? `You've been added to project "${data.project_name}"`,
|
|
31
|
+
text: tpl?.text ?? `You've been added to the project "${data.project_name}".`,
|
|
32
|
+
html: tpl?.html ?? emailHtml(`You've been added to the project <strong>"${data.project_name}"</strong>.`),
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-member-added.js","sourceRoot":"","sources":["../../src/subscribers/project-member-added.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"project-member-added.js","sourceRoot":"","sources":["../../src/subscribers/project-member-added.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAU/D,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAA0C;IAChG,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACvB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ;QAAE,OAAM;IAE3D,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,2BAA2B,CAAQ,CAAA;IAE1E,MAAM,YAAY,CAAC,kBAAkB,CAAC;QACpC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,IAAI,CAAC,UAAU;QAC1B,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,kCAAkC,IAAI,CAAC,YAAY,GAAG;QAC/D,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;KAC1C,CAAC,CAAA;IAEF,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,sBAAsB,EAAE;QAC9D,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAA;IAEF,8EAA8E;IAC9E,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,CAAQ,CAAA;QAC7D,MAAM,WAAW,GAAI,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAQ,CAAA;QAClE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzD,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,eAAe,CAAC,SAAS,EAAE,sBAAsB,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9G,MAAM,YAAY,CAAC,IAAI,CAAC;gBACtB,EAAE,EAAE,IAAI,CAAC,KAAK;gBACd,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,iCAAiC,IAAI,CAAC,YAAY,GAAG;gBAC9E,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,qCAAqC,IAAI,CAAC,YAAY,IAAI;gBAC7E,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,SAAS,CAAC,6CAA6C,IAAI,CAAC,YAAY,aAAa,CAAC;aAC1G,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAqB,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-member-invited.d.ts","sourceRoot":"","sources":["../../src/subscribers/workspace-member-invited.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGzE,UAAU,0BAA0B;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"workspace-member-invited.d.ts","sourceRoot":"","sources":["../../src/subscribers/workspace-member-invited.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGzE,UAAU,0BAA0B;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAA8B,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDrH;AAED,eAAO,MAAM,MAAM,EAAE,gBAAwD,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { emailHtml } from "./_email-helper.js";
|
|
1
|
+
import { emailHtml, resolveTemplate } from "./_email-helper.js";
|
|
2
2
|
export default async function handler({ event, container }) {
|
|
3
3
|
const data = event.data;
|
|
4
4
|
if (!data.email)
|
|
@@ -28,11 +28,17 @@ export default async function handler({ event, container }) {
|
|
|
28
28
|
const inviterName = [inviter.first_name, inviter.last_name].filter(Boolean).join(" ") || inviter.email;
|
|
29
29
|
const appUrl = process.env.APP_URL ?? "http://localhost:9000";
|
|
30
30
|
const inviteLink = `${appUrl}/invite/${invitation.token}`;
|
|
31
|
+
const tpl = resolveTemplate(container, "workspace.member_invited", {
|
|
32
|
+
workspace: { name: workspace.name },
|
|
33
|
+
inviter: { name: inviterName },
|
|
34
|
+
invitation: { token: invitation.token, role: roleDisplay },
|
|
35
|
+
invitee: { email: data.email },
|
|
36
|
+
});
|
|
31
37
|
await emailService.send({
|
|
32
38
|
to: data.email,
|
|
33
|
-
subject: `${inviterName} invited you to join "${workspace.name}" on Meridian`,
|
|
34
|
-
text: `${inviterName} has invited you to join "${workspace.name}" as a ${roleDisplay}.\n\nAccept your invitation here: ${inviteLink}`,
|
|
35
|
-
html: emailHtml(`<strong>${inviterName}</strong> has invited you to join <strong>${workspace.name}</strong> as a <strong>${roleDisplay}</strong>.<br/><br/>` +
|
|
39
|
+
subject: tpl?.subject ?? `${inviterName} invited you to join "${workspace.name}" on Meridian`,
|
|
40
|
+
text: tpl?.text ?? `${inviterName} has invited you to join "${workspace.name}" as a ${roleDisplay}.\n\nAccept your invitation here: ${inviteLink}`,
|
|
41
|
+
html: tpl?.html ?? emailHtml(`<strong>${inviterName}</strong> has invited you to join <strong>${workspace.name}</strong> as a <strong>${roleDisplay}</strong>.<br/><br/>` +
|
|
36
42
|
`<a href="${inviteLink}" style="display:inline-block;padding:10px 20px;background:#4f46e5;color:#fff;text-decoration:none;border-radius:6px;font-weight:600">Accept Invitation</a><br/><br/>` +
|
|
37
43
|
`Or copy this link: <a href="${inviteLink}">${inviteLink}</a>`),
|
|
38
44
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-member-invited.js","sourceRoot":"","sources":["../../src/subscribers/workspace-member-invited.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"workspace-member-invited.js","sourceRoot":"","sources":["../../src/subscribers/workspace-member-invited.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED