cyrus-gitlab-event-transport 0.2.38

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.
@@ -0,0 +1,69 @@
1
+ /**
2
+ * GitLab Message Translator
3
+ *
4
+ * Translates GitLab webhook events into unified internal messages for the
5
+ * internal message bus.
6
+ *
7
+ * @module gitlab-event-transport/GitLabMessageTranslator
8
+ */
9
+ import type { IMessageTranslator, TranslationContext, TranslationResult } from "cyrus-core";
10
+ import type { GitLabWebhookEvent } from "./types.js";
11
+ /**
12
+ * Translates GitLab webhook events into internal messages.
13
+ *
14
+ * Note: GitLab webhooks can result in either:
15
+ * - SessionStartMessage: First mention/comment that starts a session
16
+ * - UserPromptMessage: Follow-up comments in an existing session
17
+ *
18
+ * The distinction between session start vs user prompt is determined by
19
+ * the EdgeWorker based on whether an active session exists for the MR.
20
+ */
21
+ export declare class GitLabMessageTranslator implements IMessageTranslator<GitLabWebhookEvent> {
22
+ /**
23
+ * Check if this translator can handle the given event.
24
+ */
25
+ canTranslate(event: unknown): event is GitLabWebhookEvent;
26
+ /**
27
+ * Translate a GitLab webhook event into an internal message.
28
+ *
29
+ * By default, creates a SessionStartMessage. The EdgeWorker will
30
+ * determine if this should actually be a UserPromptMessage based
31
+ * on whether an active session exists.
32
+ */
33
+ translate(event: GitLabWebhookEvent, context?: TranslationContext): TranslationResult;
34
+ /**
35
+ * Translate note event to SessionStartMessage.
36
+ */
37
+ private translateNote;
38
+ /**
39
+ * Translate merge_request event to SessionStartMessage.
40
+ */
41
+ private translateMergeRequest;
42
+ /**
43
+ * Create a UserPromptMessage from a GitLab event.
44
+ * This is called by EdgeWorker when it determines the message
45
+ * is a follow-up to an existing session.
46
+ */
47
+ translateAsUserPrompt(event: GitLabWebhookEvent, context?: TranslationContext): TranslationResult;
48
+ /**
49
+ * Translate note as UserPromptMessage.
50
+ */
51
+ private translateNoteAsUserPrompt;
52
+ /**
53
+ * Build project reference from webhook data.
54
+ */
55
+ private buildProjectRef;
56
+ /**
57
+ * Build merge request reference from the embedded MR object in note payloads.
58
+ */
59
+ private buildMergeRequestRef;
60
+ /**
61
+ * Build merge request reference from merge_request event attributes.
62
+ */
63
+ private buildMergeRequestRefFromAttributes;
64
+ /**
65
+ * Build note reference from webhook data.
66
+ */
67
+ private buildNoteRef;
68
+ }
69
+ //# sourceMappingURL=GitLabMessageTranslator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitLabMessageTranslator.d.ts","sourceRoot":"","sources":["../src/GitLabMessageTranslator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAIX,kBAAkB,EAElB,kBAAkB,EAClB,iBAAiB,EAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAGX,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;GASG;AACH,qBAAa,uBACZ,YAAW,kBAAkB,CAAC,kBAAkB,CAAC;IAEjD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB;IAezD;;;;;;OAMG;IACH,SAAS,CACR,KAAK,EAAE,kBAAkB,EACzB,OAAO,CAAC,EAAE,kBAAkB,GAC1B,iBAAiB;IAepB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkDrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwD7B;;;;OAIG;IACH,qBAAqB,CACpB,KAAK,EAAE,kBAAkB,EACzB,OAAO,CAAC,EAAE,kBAAkB,GAC1B,iBAAiB;IAWpB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAkDjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,kCAAkC;IAoB1C;;OAEG;IACH,OAAO,CAAC,YAAY;CAwBpB"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * GitLab Message Translator
3
+ *
4
+ * Translates GitLab webhook events into unified internal messages for the
5
+ * internal message bus.
6
+ *
7
+ * @module gitlab-event-transport/GitLabMessageTranslator
8
+ */
9
+ import { randomUUID } from "node:crypto";
10
+ /**
11
+ * Translates GitLab webhook events into internal messages.
12
+ *
13
+ * Note: GitLab webhooks can result in either:
14
+ * - SessionStartMessage: First mention/comment that starts a session
15
+ * - UserPromptMessage: Follow-up comments in an existing session
16
+ *
17
+ * The distinction between session start vs user prompt is determined by
18
+ * the EdgeWorker based on whether an active session exists for the MR.
19
+ */
20
+ export class GitLabMessageTranslator {
21
+ /**
22
+ * Check if this translator can handle the given event.
23
+ */
24
+ canTranslate(event) {
25
+ if (!event || typeof event !== "object") {
26
+ return false;
27
+ }
28
+ const e = event;
29
+ return (typeof e.eventType === "string" &&
30
+ (e.eventType === "note" || e.eventType === "merge_request") &&
31
+ e.payload !== null &&
32
+ typeof e.payload === "object");
33
+ }
34
+ /**
35
+ * Translate a GitLab webhook event into an internal message.
36
+ *
37
+ * By default, creates a SessionStartMessage. The EdgeWorker will
38
+ * determine if this should actually be a UserPromptMessage based
39
+ * on whether an active session exists.
40
+ */
41
+ translate(event, context) {
42
+ if (event.eventType === "note") {
43
+ return this.translateNote(event, context);
44
+ }
45
+ if (event.eventType === "merge_request") {
46
+ return this.translateMergeRequest(event, context);
47
+ }
48
+ return {
49
+ success: false,
50
+ reason: `Unsupported GitLab event type: ${event.eventType}`,
51
+ };
52
+ }
53
+ /**
54
+ * Translate note event to SessionStartMessage.
55
+ */
56
+ translateNote(event, context) {
57
+ const payload = event.payload;
58
+ const { project, user, object_attributes, merge_request } = payload;
59
+ if (!merge_request) {
60
+ return {
61
+ success: false,
62
+ reason: "Note is not on a merge request",
63
+ };
64
+ }
65
+ const organizationId = context?.organizationId || String(project.id);
66
+ const sessionKey = `${project.path_with_namespace}!${merge_request.iid}`;
67
+ const workItemIdentifier = `${project.path_with_namespace}!${merge_request.iid}`;
68
+ const platformData = {
69
+ eventType: event.eventType,
70
+ project: this.buildProjectRef(project),
71
+ mergeRequest: this.buildMergeRequestRef(merge_request, project),
72
+ note: this.buildNoteRef(object_attributes, user),
73
+ accessToken: event.accessToken,
74
+ };
75
+ const message = {
76
+ id: randomUUID(),
77
+ source: "gitlab",
78
+ action: "session_start",
79
+ receivedAt: object_attributes.created_at,
80
+ organizationId,
81
+ sessionKey,
82
+ workItemId: String(merge_request.id),
83
+ workItemIdentifier,
84
+ author: {
85
+ id: String(user.id),
86
+ name: user.username,
87
+ avatarUrl: user.avatar_url,
88
+ },
89
+ initialPrompt: object_attributes.note,
90
+ title: merge_request.title,
91
+ description: merge_request.description ?? undefined,
92
+ platformData,
93
+ };
94
+ return { success: true, message };
95
+ }
96
+ /**
97
+ * Translate merge_request event to SessionStartMessage.
98
+ */
99
+ translateMergeRequest(event, context) {
100
+ const payload = event.payload;
101
+ const { project, user, object_attributes } = payload;
102
+ const organizationId = context?.organizationId || String(project.id);
103
+ const sessionKey = `${project.path_with_namespace}!${object_attributes.iid}`;
104
+ const workItemIdentifier = `${project.path_with_namespace}!${object_attributes.iid}`;
105
+ const platformData = {
106
+ eventType: event.eventType,
107
+ project: this.buildProjectRef(project),
108
+ mergeRequest: this.buildMergeRequestRefFromAttributes(object_attributes, project),
109
+ note: {
110
+ id: 0,
111
+ body: `MR action: ${object_attributes.action}`,
112
+ noteableType: "MergeRequest",
113
+ author: {
114
+ username: user.username,
115
+ id: user.id,
116
+ avatarUrl: user.avatar_url,
117
+ },
118
+ createdAt: object_attributes.updated_at,
119
+ },
120
+ accessToken: event.accessToken,
121
+ };
122
+ const message = {
123
+ id: randomUUID(),
124
+ source: "gitlab",
125
+ action: "session_start",
126
+ receivedAt: object_attributes.updated_at,
127
+ organizationId,
128
+ sessionKey,
129
+ workItemId: String(object_attributes.id),
130
+ workItemIdentifier,
131
+ author: {
132
+ id: String(user.id),
133
+ name: user.username,
134
+ avatarUrl: user.avatar_url,
135
+ },
136
+ initialPrompt: `MR ${object_attributes.action}: ${object_attributes.title}`,
137
+ title: object_attributes.title,
138
+ description: object_attributes.description ?? undefined,
139
+ platformData,
140
+ };
141
+ return { success: true, message };
142
+ }
143
+ /**
144
+ * Create a UserPromptMessage from a GitLab event.
145
+ * This is called by EdgeWorker when it determines the message
146
+ * is a follow-up to an existing session.
147
+ */
148
+ translateAsUserPrompt(event, context) {
149
+ if (event.eventType === "note") {
150
+ return this.translateNoteAsUserPrompt(event, context);
151
+ }
152
+ return {
153
+ success: false,
154
+ reason: `Unsupported GitLab event type for user prompt: ${event.eventType}`,
155
+ };
156
+ }
157
+ /**
158
+ * Translate note as UserPromptMessage.
159
+ */
160
+ translateNoteAsUserPrompt(event, context) {
161
+ const payload = event.payload;
162
+ const { project, user, object_attributes, merge_request } = payload;
163
+ if (!merge_request) {
164
+ return {
165
+ success: false,
166
+ reason: "Note is not on a merge request",
167
+ };
168
+ }
169
+ const organizationId = context?.organizationId || String(project.id);
170
+ const sessionKey = `${project.path_with_namespace}!${merge_request.iid}`;
171
+ const platformData = {
172
+ eventType: event.eventType,
173
+ project: this.buildProjectRef(project),
174
+ note: this.buildNoteRef(object_attributes, user),
175
+ accessToken: event.accessToken,
176
+ };
177
+ const message = {
178
+ id: randomUUID(),
179
+ source: "gitlab",
180
+ action: "user_prompt",
181
+ receivedAt: object_attributes.created_at,
182
+ organizationId,
183
+ sessionKey,
184
+ workItemId: String(merge_request.id),
185
+ workItemIdentifier: `${project.path_with_namespace}!${merge_request.iid}`,
186
+ author: {
187
+ id: String(user.id),
188
+ name: user.username,
189
+ avatarUrl: user.avatar_url,
190
+ },
191
+ content: object_attributes.note,
192
+ platformData,
193
+ };
194
+ return { success: true, message };
195
+ }
196
+ // ============================================================================
197
+ // HELPER METHODS
198
+ // ============================================================================
199
+ /**
200
+ * Build project reference from webhook data.
201
+ */
202
+ buildProjectRef(project) {
203
+ return {
204
+ id: project.id,
205
+ name: project.name,
206
+ pathWithNamespace: project.path_with_namespace,
207
+ webUrl: project.web_url,
208
+ defaultBranch: project.default_branch,
209
+ };
210
+ }
211
+ /**
212
+ * Build merge request reference from the embedded MR object in note payloads.
213
+ */
214
+ buildMergeRequestRef(mr, project) {
215
+ return {
216
+ id: mr.id,
217
+ iid: mr.iid,
218
+ title: mr.title,
219
+ description: mr.description,
220
+ state: mr.state,
221
+ webUrl: mr.url || `${project.web_url}/-/merge_requests/${mr.iid}`,
222
+ sourceBranch: mr.source_branch,
223
+ targetBranch: mr.target_branch,
224
+ author: {
225
+ username: "", // Not available in embedded MR object
226
+ id: mr.author_id,
227
+ },
228
+ };
229
+ }
230
+ /**
231
+ * Build merge request reference from merge_request event attributes.
232
+ */
233
+ buildMergeRequestRefFromAttributes(attrs, project) {
234
+ return {
235
+ id: attrs.id,
236
+ iid: attrs.iid,
237
+ title: attrs.title,
238
+ description: attrs.description,
239
+ state: attrs.state,
240
+ webUrl: attrs.url || `${project.web_url}/-/merge_requests/${attrs.iid}`,
241
+ sourceBranch: attrs.source_branch,
242
+ targetBranch: attrs.target_branch,
243
+ author: {
244
+ username: "", // Not directly in attributes; would need user lookup
245
+ id: attrs.author_id,
246
+ },
247
+ };
248
+ }
249
+ /**
250
+ * Build note reference from webhook data.
251
+ */
252
+ buildNoteRef(attrs, user) {
253
+ return {
254
+ id: attrs.id,
255
+ body: attrs.note,
256
+ noteableType: attrs.noteable_type,
257
+ author: {
258
+ username: user.username,
259
+ id: user.id,
260
+ avatarUrl: user.avatar_url,
261
+ },
262
+ createdAt: attrs.created_at,
263
+ position: attrs.position
264
+ ? {
265
+ newPath: attrs.position.new_path,
266
+ oldPath: attrs.position.old_path,
267
+ newLine: attrs.position.new_line ?? undefined,
268
+ }
269
+ : undefined,
270
+ discussionId: attrs.discussion_id,
271
+ };
272
+ }
273
+ }
274
+ //# sourceMappingURL=GitLabMessageTranslator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitLabMessageTranslator.js","sourceRoot":"","sources":["../src/GitLabMessageTranslator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Utility functions for processing GitLab webhook payloads
3
+ */
4
+ import type { GitLabMergeRequestPayload, GitLabNotePayload, GitLabWebhookEvent } from "./types.js";
5
+ /**
6
+ * Type guard for note payloads
7
+ */
8
+ export declare function isNotePayload(payload: GitLabWebhookEvent["payload"]): payload is GitLabNotePayload;
9
+ /**
10
+ * Type guard for merge_request payloads
11
+ */
12
+ export declare function isMergeRequestPayload(payload: GitLabWebhookEvent["payload"]): payload is GitLabMergeRequestPayload;
13
+ /**
14
+ * Check if a note webhook is for a merge request (not an issue or snippet)
15
+ */
16
+ export declare function isNoteOnMergeRequest(event: GitLabWebhookEvent): boolean;
17
+ /**
18
+ * Extract the MR source branch from a GitLab webhook event
19
+ */
20
+ export declare function extractMRBranchRef(event: GitLabWebhookEvent): string | null;
21
+ /**
22
+ * Extract the MR target (base) branch from a GitLab webhook event
23
+ */
24
+ export declare function extractMRBaseBranchRef(event: GitLabWebhookEvent): string | null;
25
+ /**
26
+ * Extract the MR iid (project-scoped ID) from a GitLab webhook event
27
+ */
28
+ export declare function extractMRIid(event: GitLabWebhookEvent): number | null;
29
+ /**
30
+ * Extract the note body from a GitLab note webhook event
31
+ */
32
+ export declare function extractNoteBody(event: GitLabWebhookEvent): string;
33
+ /**
34
+ * Extract the note/event author username from a GitLab webhook event
35
+ */
36
+ export declare function extractNoteAuthor(event: GitLabWebhookEvent): string;
37
+ /**
38
+ * Extract the note ID from a GitLab webhook event
39
+ */
40
+ export declare function extractNoteId(event: GitLabWebhookEvent): number | null;
41
+ /**
42
+ * Extract the discussion ID from a GitLab note webhook event
43
+ */
44
+ export declare function extractDiscussionId(event: GitLabWebhookEvent): string | null;
45
+ /**
46
+ * Extract project path_with_namespace (e.g., "group/project") from a GitLab webhook event
47
+ */
48
+ export declare function extractProjectPath(event: GitLabWebhookEvent): string;
49
+ /**
50
+ * Extract project ID from a GitLab webhook event
51
+ */
52
+ export declare function extractProjectId(event: GitLabWebhookEvent): number;
53
+ /**
54
+ * Extract the MR title from a GitLab webhook event
55
+ */
56
+ export declare function extractMRTitle(event: GitLabWebhookEvent): string | null;
57
+ /**
58
+ * Extract the MR web URL from a GitLab webhook event
59
+ */
60
+ export declare function extractMRUrl(event: GitLabWebhookEvent): string | null;
61
+ /**
62
+ * Extract the note URL from a GitLab note webhook event
63
+ */
64
+ export declare function extractNoteUrl(event: GitLabWebhookEvent): string;
65
+ /**
66
+ * Extract a unique session identifier for the GitLab webhook event.
67
+ * Uses gitlab:path_with_namespace!iid format.
68
+ */
69
+ export declare function extractSessionKey(event: GitLabWebhookEvent): string;
70
+ /**
71
+ * Strip the @mention from a note body to get the actual instructions
72
+ */
73
+ export declare function stripMention(noteBody: string, mentionHandle?: string): string;
74
+ //# sourceMappingURL=gitlab-webhook-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-webhook-utils.d.ts","sourceRoot":"","sources":["../src/gitlab-webhook-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACX,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,aAAa,CAC5B,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,GACpC,OAAO,IAAI,iBAAiB,CAE9B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,GACpC,OAAO,IAAI,yBAAyB,CAEtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAQvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAQ3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,kBAAkB,GACvB,MAAM,GAAG,IAAI,CAQf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAQrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAKjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAKtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAK5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAQvE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAQrE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAKhE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAInE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,MAAsB,GACnC,MAAM,CAUR"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Utility functions for processing GitLab webhook payloads
3
+ */
4
+ /**
5
+ * Type guard for note payloads
6
+ */
7
+ export function isNotePayload(payload) {
8
+ return payload.object_kind === "note";
9
+ }
10
+ /**
11
+ * Type guard for merge_request payloads
12
+ */
13
+ export function isMergeRequestPayload(payload) {
14
+ return payload.object_kind === "merge_request";
15
+ }
16
+ /**
17
+ * Check if a note webhook is for a merge request (not an issue or snippet)
18
+ */
19
+ export function isNoteOnMergeRequest(event) {
20
+ if (isNotePayload(event.payload)) {
21
+ return (event.payload.object_attributes.noteable_type === "MergeRequest" &&
22
+ event.payload.merge_request != null);
23
+ }
24
+ return false;
25
+ }
26
+ /**
27
+ * Extract the MR source branch from a GitLab webhook event
28
+ */
29
+ export function extractMRBranchRef(event) {
30
+ if (isNotePayload(event.payload) && event.payload.merge_request) {
31
+ return event.payload.merge_request.source_branch;
32
+ }
33
+ if (isMergeRequestPayload(event.payload)) {
34
+ return event.payload.object_attributes.source_branch;
35
+ }
36
+ return null;
37
+ }
38
+ /**
39
+ * Extract the MR target (base) branch from a GitLab webhook event
40
+ */
41
+ export function extractMRBaseBranchRef(event) {
42
+ if (isNotePayload(event.payload) && event.payload.merge_request) {
43
+ return event.payload.merge_request.target_branch;
44
+ }
45
+ if (isMergeRequestPayload(event.payload)) {
46
+ return event.payload.object_attributes.target_branch;
47
+ }
48
+ return null;
49
+ }
50
+ /**
51
+ * Extract the MR iid (project-scoped ID) from a GitLab webhook event
52
+ */
53
+ export function extractMRIid(event) {
54
+ if (isNotePayload(event.payload) && event.payload.merge_request) {
55
+ return event.payload.merge_request.iid;
56
+ }
57
+ if (isMergeRequestPayload(event.payload)) {
58
+ return event.payload.object_attributes.iid;
59
+ }
60
+ return null;
61
+ }
62
+ /**
63
+ * Extract the note body from a GitLab note webhook event
64
+ */
65
+ export function extractNoteBody(event) {
66
+ if (isNotePayload(event.payload)) {
67
+ return event.payload.object_attributes.note;
68
+ }
69
+ return "";
70
+ }
71
+ /**
72
+ * Extract the note/event author username from a GitLab webhook event
73
+ */
74
+ export function extractNoteAuthor(event) {
75
+ return event.payload.user.username;
76
+ }
77
+ /**
78
+ * Extract the note ID from a GitLab webhook event
79
+ */
80
+ export function extractNoteId(event) {
81
+ if (isNotePayload(event.payload)) {
82
+ return event.payload.object_attributes.id;
83
+ }
84
+ return null;
85
+ }
86
+ /**
87
+ * Extract the discussion ID from a GitLab note webhook event
88
+ */
89
+ export function extractDiscussionId(event) {
90
+ if (isNotePayload(event.payload)) {
91
+ return event.payload.object_attributes.discussion_id ?? null;
92
+ }
93
+ return null;
94
+ }
95
+ /**
96
+ * Extract project path_with_namespace (e.g., "group/project") from a GitLab webhook event
97
+ */
98
+ export function extractProjectPath(event) {
99
+ return event.payload.project.path_with_namespace;
100
+ }
101
+ /**
102
+ * Extract project ID from a GitLab webhook event
103
+ */
104
+ export function extractProjectId(event) {
105
+ return event.payload.project.id;
106
+ }
107
+ /**
108
+ * Extract the MR title from a GitLab webhook event
109
+ */
110
+ export function extractMRTitle(event) {
111
+ if (isNotePayload(event.payload) && event.payload.merge_request) {
112
+ return event.payload.merge_request.title;
113
+ }
114
+ if (isMergeRequestPayload(event.payload)) {
115
+ return event.payload.object_attributes.title;
116
+ }
117
+ return null;
118
+ }
119
+ /**
120
+ * Extract the MR web URL from a GitLab webhook event
121
+ */
122
+ export function extractMRUrl(event) {
123
+ if (isNotePayload(event.payload) && event.payload.merge_request) {
124
+ return event.payload.merge_request.url;
125
+ }
126
+ if (isMergeRequestPayload(event.payload)) {
127
+ return event.payload.object_attributes.url;
128
+ }
129
+ return null;
130
+ }
131
+ /**
132
+ * Extract the note URL from a GitLab note webhook event
133
+ */
134
+ export function extractNoteUrl(event) {
135
+ if (isNotePayload(event.payload)) {
136
+ return event.payload.object_attributes.url;
137
+ }
138
+ return "";
139
+ }
140
+ /**
141
+ * Extract a unique session identifier for the GitLab webhook event.
142
+ * Uses gitlab:path_with_namespace!iid format.
143
+ */
144
+ export function extractSessionKey(event) {
145
+ const projectPath = extractProjectPath(event);
146
+ const mrIid = extractMRIid(event);
147
+ return `gitlab:${projectPath}!${mrIid}`;
148
+ }
149
+ /**
150
+ * Strip the @mention from a note body to get the actual instructions
151
+ */
152
+ export function stripMention(noteBody, mentionHandle = "@cyrusagent") {
153
+ return noteBody
154
+ .replace(new RegExp(`\\s*${mentionHandle.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*`, "gi"), " ")
155
+ .trim();
156
+ }
157
+ //# sourceMappingURL=gitlab-webhook-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-webhook-utils.js","sourceRoot":"","sources":["../src/gitlab-webhook-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type { AddAwardEmojiParams, GitLabCommentServiceConfig, GitLabNoteResponse, PostDiscussionReplyParams, PostMRNoteParams, } from "./GitLabCommentService.js";
2
+ export { GitLabCommentService } from "./GitLabCommentService.js";
3
+ export { GitLabEventTransport } from "./GitLabEventTransport.js";
4
+ export { GitLabMessageTranslator } from "./GitLabMessageTranslator.js";
5
+ export { extractDiscussionId, extractMRBaseBranchRef, extractMRBranchRef, extractMRIid, extractMRTitle, extractMRUrl, extractNoteAuthor, extractNoteBody, extractNoteId, extractNoteUrl, extractProjectId, extractProjectPath, extractSessionKey, isMergeRequestPayload, isNoteOnMergeRequest, isNotePayload, stripMention, } from "./gitlab-webhook-utils.js";
6
+ export type { GitLabEventTransportConfig, GitLabEventTransportEvents, GitLabEventType, GitLabMergeRequest, GitLabMergeRequestAttributes, GitLabMergeRequestPayload, GitLabNoteAttributes, GitLabNotePayload, GitLabProject, GitLabUser, GitLabVerificationMode, GitLabWebhookEvent, } from "./types.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,mBAAmB,EACnB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EACN,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,YAAY,GACZ,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACX,0BAA0B,EAC1B,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,EAClB,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,sBAAsB,EACtB,kBAAkB,GAClB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { GitLabCommentService } from "./GitLabCommentService.js";
2
+ export { GitLabEventTransport } from "./GitLabEventTransport.js";
3
+ export { GitLabMessageTranslator } from "./GitLabMessageTranslator.js";
4
+ export { extractDiscussionId, extractMRBaseBranchRef, extractMRBranchRef, extractMRIid, extractMRTitle, extractMRUrl, extractNoteAuthor, extractNoteBody, extractNoteId, extractNoteUrl, extractProjectId, extractProjectPath, extractSessionKey, isMergeRequestPayload, isNoteOnMergeRequest, isNotePayload, stripMention, } from "./gitlab-webhook-utils.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EACN,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,YAAY,GACZ,MAAM,2BAA2B,CAAC"}