@cat-factory/gitlab 0.1.2 → 0.1.3
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/LICENSE +21 -21
- package/dist/FetchGitLabClient.d.ts +77 -0
- package/dist/FetchGitLabClient.d.ts.map +1 -0
- package/dist/FetchGitLabClient.js +435 -0
- package/dist/FetchGitLabClient.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/projection.d.ts +102 -0
- package/dist/projection.d.ts.map +1 -0
- package/dist/projection.js +173 -0
- package/dist/projection.js.map +1 -0
- package/dist/provisioning.d.ts +16 -0
- package/dist/provisioning.d.ts.map +1 -0
- package/dist/provisioning.js +73 -0
- package/dist/provisioning.js.map +1 -0
- package/dist/tokenSource.d.ts +25 -0
- package/dist/tokenSource.d.ts.map +1 -0
- package/dist/tokenSource.js +21 -0
- package/dist/tokenSource.js.map +1 -0
- package/dist/webhook.d.ts +17 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +183 -0
- package/dist/webhook.js.map +1 -0
- package/package.json +2 -2
package/dist/webhook.js
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { checkState, mrState } from './projection.js';
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// GitLab webhook ingest: verification + normalisation.
|
|
4
|
+
//
|
|
5
|
+
// GitLab does NOT sign the body (no HMAC like GitHub). Instead each webhook carries a
|
|
6
|
+
// caller-chosen secret token in the `X-Gitlab-Token` header, compared constant-time
|
|
7
|
+
// against the configured secret. The mapper then turns a verified delivery (keyed by the
|
|
8
|
+
// `X-Gitlab-Event` name) into a neutral {@link VcsWebhookEvent}.
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/**
|
|
11
|
+
* Verifies the `X-Gitlab-Token` header against the configured secret in constant time.
|
|
12
|
+
* The `WebhookVerifier` port's `verify(rawBody, signatureHeader)` is reused: GitLab passes
|
|
13
|
+
* the token header as `signatureHeader` (the body is irrelevant to GitLab verification).
|
|
14
|
+
*/
|
|
15
|
+
export class GitLabWebhookVerifier {
|
|
16
|
+
secret;
|
|
17
|
+
constructor(secret) {
|
|
18
|
+
this.secret = secret;
|
|
19
|
+
}
|
|
20
|
+
async verify(_rawBody, signatureHeader) {
|
|
21
|
+
if (!signatureHeader || !this.secret)
|
|
22
|
+
return false;
|
|
23
|
+
return constantTimeEqual(signatureHeader, this.secret);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function asObject(value) {
|
|
27
|
+
return typeof value === 'object' && value !== null ? value : null;
|
|
28
|
+
}
|
|
29
|
+
/** Build the neutral repo ref from a GitLab webhook `project` object. */
|
|
30
|
+
function repoRefOf(root) {
|
|
31
|
+
const project = asObject(root.project);
|
|
32
|
+
if (!project)
|
|
33
|
+
return null;
|
|
34
|
+
const id = project.id;
|
|
35
|
+
const pathWithNs = typeof project.path_with_namespace === 'string' ? project.path_with_namespace : '';
|
|
36
|
+
const name = pathWithNs.includes('/')
|
|
37
|
+
? pathWithNs.slice(pathWithNs.lastIndexOf('/') + 1)
|
|
38
|
+
: pathWithNs;
|
|
39
|
+
const owner = pathWithNs.includes('/') ? pathWithNs.slice(0, pathWithNs.lastIndexOf('/')) : '';
|
|
40
|
+
return { repoId: id === undefined ? '' : String(id), owner, repo: name };
|
|
41
|
+
}
|
|
42
|
+
function numericRepoId(repo) {
|
|
43
|
+
const n = Number(repo.repoId);
|
|
44
|
+
return Number.isInteger(n) ? n : 0;
|
|
45
|
+
}
|
|
46
|
+
export class GitLabWebhookMapper {
|
|
47
|
+
clock;
|
|
48
|
+
// The clock is injected (rather than `Date.now()`) so projected `updatedAt`/`syncedAt`
|
|
49
|
+
// timestamps are deterministic in tests and consistent with the client's clock.
|
|
50
|
+
constructor(clock) {
|
|
51
|
+
this.clock = clock;
|
|
52
|
+
}
|
|
53
|
+
map(connection, delivery) {
|
|
54
|
+
const root = asObject(delivery.payload);
|
|
55
|
+
if (!root)
|
|
56
|
+
return null;
|
|
57
|
+
const repo = repoRefOf(root);
|
|
58
|
+
if (!repo)
|
|
59
|
+
return null;
|
|
60
|
+
const now = this.clock.now();
|
|
61
|
+
const repoId = numericRepoId(repo);
|
|
62
|
+
switch (delivery.eventName) {
|
|
63
|
+
case 'Merge Request Hook': {
|
|
64
|
+
const attrs = asObject(root.object_attributes);
|
|
65
|
+
if (!attrs)
|
|
66
|
+
return null;
|
|
67
|
+
const { state, merged } = mrState(typeof attrs.state === 'string' ? attrs.state : undefined);
|
|
68
|
+
const lastCommit = asObject(attrs.last_commit);
|
|
69
|
+
const author = asObject(asObject(root.user) ? root.user : attrs.author);
|
|
70
|
+
return {
|
|
71
|
+
kind: 'pull-request',
|
|
72
|
+
connection,
|
|
73
|
+
repo,
|
|
74
|
+
pullRequest: {
|
|
75
|
+
repoGithubId: repoId,
|
|
76
|
+
number: num(attrs.iid),
|
|
77
|
+
githubId: num(attrs.id),
|
|
78
|
+
title: str(attrs.title),
|
|
79
|
+
state,
|
|
80
|
+
headRef: str(attrs.source_branch) || null,
|
|
81
|
+
baseRef: str(attrs.target_branch) || null,
|
|
82
|
+
headSha: lastCommit ? str(lastCommit.id) || null : null,
|
|
83
|
+
merged,
|
|
84
|
+
author: author ? str(author.username) || null : null,
|
|
85
|
+
updatedAt: now,
|
|
86
|
+
syncedAt: now,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
case 'Issue Hook': {
|
|
91
|
+
const attrs = asObject(root.object_attributes);
|
|
92
|
+
if (!attrs)
|
|
93
|
+
return null;
|
|
94
|
+
const labels = Array.isArray(root.labels)
|
|
95
|
+
? root.labels.map((l) => l.title ?? '').filter(Boolean)
|
|
96
|
+
: [];
|
|
97
|
+
const issueAuthor = asObject(root.user);
|
|
98
|
+
return {
|
|
99
|
+
kind: 'issue',
|
|
100
|
+
connection,
|
|
101
|
+
repo,
|
|
102
|
+
issue: {
|
|
103
|
+
repoGithubId: repoId,
|
|
104
|
+
number: num(attrs.iid),
|
|
105
|
+
githubId: num(attrs.id),
|
|
106
|
+
title: str(attrs.title),
|
|
107
|
+
state: str(attrs.state) === 'opened' ? 'open' : 'closed',
|
|
108
|
+
author: issueAuthor ? str(issueAuthor.username) || null : null,
|
|
109
|
+
labels,
|
|
110
|
+
updatedAt: now,
|
|
111
|
+
syncedAt: now,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
case 'Push Hook': {
|
|
116
|
+
const ref = str(root.ref);
|
|
117
|
+
const after = str(root.after);
|
|
118
|
+
const rawCommits = Array.isArray(root.commits) ? root.commits : [];
|
|
119
|
+
return {
|
|
120
|
+
kind: 'push',
|
|
121
|
+
connection,
|
|
122
|
+
repo,
|
|
123
|
+
branch: ref.startsWith('refs/heads/') && after
|
|
124
|
+
? { name: ref.slice('refs/heads/'.length), headSha: after }
|
|
125
|
+
: undefined,
|
|
126
|
+
commits: rawCommits.map((c) => ({
|
|
127
|
+
repoGithubId: repoId,
|
|
128
|
+
sha: str(c.id),
|
|
129
|
+
message: str(c.message),
|
|
130
|
+
author: (() => {
|
|
131
|
+
const a = asObject(c.author);
|
|
132
|
+
return a ? str(a.name) || null : null;
|
|
133
|
+
})(),
|
|
134
|
+
authoredAt: (() => {
|
|
135
|
+
const ts = Date.parse(str(c.timestamp));
|
|
136
|
+
return Number.isFinite(ts) ? ts : null;
|
|
137
|
+
})(),
|
|
138
|
+
syncedAt: now,
|
|
139
|
+
})),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
case 'Pipeline Hook': {
|
|
143
|
+
const attrs = asObject(root.object_attributes);
|
|
144
|
+
if (!attrs)
|
|
145
|
+
return null;
|
|
146
|
+
const { status, conclusion } = checkState(str(attrs.status));
|
|
147
|
+
return {
|
|
148
|
+
kind: 'ci-status',
|
|
149
|
+
connection,
|
|
150
|
+
repo,
|
|
151
|
+
checkRun: {
|
|
152
|
+
repoGithubId: repoId,
|
|
153
|
+
githubId: num(attrs.id),
|
|
154
|
+
headSha: str(attrs.sha),
|
|
155
|
+
name: 'pipeline',
|
|
156
|
+
status,
|
|
157
|
+
conclusion,
|
|
158
|
+
htmlUrl: str(attrs.url) || null,
|
|
159
|
+
syncedAt: now,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
default:
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function str(value) {
|
|
169
|
+
return typeof value === 'string' ? value : '';
|
|
170
|
+
}
|
|
171
|
+
function num(value) {
|
|
172
|
+
return typeof value === 'number' ? value : 0;
|
|
173
|
+
}
|
|
174
|
+
/** Length-aware constant-time string compare (avoids early-exit timing leaks). */
|
|
175
|
+
function constantTimeEqual(a, b) {
|
|
176
|
+
if (a.length !== b.length)
|
|
177
|
+
return false;
|
|
178
|
+
let diff = 0;
|
|
179
|
+
for (let i = 0; i < a.length; i++)
|
|
180
|
+
diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
|
|
181
|
+
return diff === 0;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/gitlab",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Opt-in GitLab VCS provider for cat-factory. Implements the provider-neutral VcsClient / webhook / provisioning ports against the GitLab REST v4 API and registers itself via registerVcsProvider('gitlab'). Depends only on @cat-factory/kernel + @cat-factory/contracts.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@cat-factory/contracts": "0.43.0",
|
|
28
|
-
"@cat-factory/kernel": "0.45.
|
|
28
|
+
"@cat-factory/kernel": "0.45.1"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"typescript": "7.0.1-rc",
|