gcb-host 0.7.0 → 0.8.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.
- package/CHANGELOG.md +23 -1
- package/bin/gcb.js +3 -3
- package/lib/audit.d.ts +4 -4
- package/lib/audit.d.ts.map +1 -1
- package/lib/audit.js +15 -14
- package/lib/audit.js.map +1 -1
- package/lib/broker.d.ts +12 -13
- package/lib/broker.d.ts.map +1 -1
- package/lib/broker.js +77 -53
- package/lib/broker.js.map +1 -1
- package/lib/commands/authorize.d.ts +43 -13
- package/lib/commands/authorize.d.ts.map +1 -1
- package/lib/commands/authorize.js +146 -53
- package/lib/commands/authorize.js.map +1 -1
- package/lib/commands/compose.d.ts +7 -7
- package/lib/commands/compose.d.ts.map +1 -1
- package/lib/commands/compose.js +21 -22
- package/lib/commands/compose.js.map +1 -1
- package/lib/commands/config.d.ts.map +1 -1
- package/lib/commands/config.js +59 -41
- package/lib/commands/config.js.map +1 -1
- package/lib/commands/deployment.d.ts +11 -11
- package/lib/commands/deployment.d.ts.map +1 -1
- package/lib/commands/deployment.js +19 -18
- package/lib/commands/deployment.js.map +1 -1
- package/lib/commands/diagnose.d.ts.map +1 -1
- package/lib/commands/diagnose.js +51 -33
- package/lib/commands/diagnose.js.map +1 -1
- package/lib/commands/doctor.d.ts +5 -5
- package/lib/commands/doctor.d.ts.map +1 -1
- package/lib/commands/doctor.js +53 -32
- package/lib/commands/doctor.js.map +1 -1
- package/lib/commands/host.d.ts +7 -7
- package/lib/commands/host.d.ts.map +1 -1
- package/lib/commands/host.js +147 -92
- package/lib/commands/host.js.map +1 -1
- package/lib/commands/init.d.ts +33 -33
- package/lib/commands/init.d.ts.map +1 -1
- package/lib/commands/init.js +93 -75
- package/lib/commands/init.js.map +1 -1
- package/lib/commands/stage.d.ts +6 -6
- package/lib/commands/stage.d.ts.map +1 -1
- package/lib/commands/stage.js +21 -15
- package/lib/commands/stage.js.map +1 -1
- package/lib/config.d.ts +29 -28
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +101 -85
- package/lib/config.js.map +1 -1
- package/lib/daemon.d.ts +9 -9
- package/lib/daemon.d.ts.map +1 -1
- package/lib/daemon.js +21 -18
- package/lib/daemon.js.map +1 -1
- package/lib/device-flow.d.ts +23 -22
- package/lib/device-flow.d.ts.map +1 -1
- package/lib/device-flow.js +33 -28
- package/lib/device-flow.js.map +1 -1
- package/lib/gh.d.ts +2 -2
- package/lib/gh.d.ts.map +1 -1
- package/lib/gh.js +74 -46
- package/lib/gh.js.map +1 -1
- package/lib/http.d.ts.map +1 -1
- package/lib/http.js +35 -18
- package/lib/http.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/policy.d.ts +25 -25
- package/lib/policy.d.ts.map +1 -1
- package/lib/policy.js +57 -36
- package/lib/policy.js.map +1 -1
- package/lib/providers/github-app.d.ts +12 -12
- package/lib/providers/github-app.d.ts.map +1 -1
- package/lib/providers/github-app.js +194 -125
- package/lib/providers/github-app.js.map +1 -1
- package/lib/providers/index.d.ts +8 -9
- package/lib/providers/index.d.ts.map +1 -1
- package/lib/providers/index.js +5 -5
- package/lib/providers/index.js.map +1 -1
- package/lib/providers/static.d.ts +3 -3
- package/lib/providers/static.d.ts.map +1 -1
- package/lib/providers/static.js +14 -12
- package/lib/providers/static.js.map +1 -1
- package/lib/proxy.d.ts +10 -10
- package/lib/proxy.d.ts.map +1 -1
- package/lib/proxy.js +18 -16
- package/lib/proxy.js.map +1 -1
- package/lib/public-repo.d.ts +10 -10
- package/lib/public-repo.d.ts.map +1 -1
- package/lib/public-repo.js +17 -14
- package/lib/public-repo.js.map +1 -1
- package/lib/reload.d.ts +4 -4
- package/lib/reload.d.ts.map +1 -1
- package/lib/reload.js +24 -14
- package/lib/reload.js.map +1 -1
- package/package.json +10 -10
package/lib/gh.js
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Run one catalogued `gh` action as the App, with the action's short-lived token.
|
|
3
3
|
*
|
|
4
4
|
* The caller has already validated the action, repository and values. This module owns the process
|
|
5
|
-
* boundary: a temp HOME/GH_CONFIG_DIR, a minimal environment, no shell, a hard timeout and an
|
|
6
|
-
* ceiling. The host user's gh configuration and token are never read.
|
|
5
|
+
* boundary: a temp HOME/GH_CONFIG_DIR, a minimal environment, no shell, a hard timeout and an
|
|
6
|
+
* output ceiling. The host user's gh configuration and token are never read.
|
|
7
7
|
*/
|
|
8
8
|
import { spawn } from 'node:child_process';
|
|
9
9
|
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
10
10
|
import { tmpdir } from 'node:os';
|
|
11
|
-
import { StringDecoder } from 'node:string_decoder';
|
|
12
11
|
import path from 'node:path';
|
|
12
|
+
import { StringDecoder } from 'node:string_decoder';
|
|
13
13
|
import { apiBodyJson, buildGhArgv, getGhAction } from 'gcb-core';
|
|
14
14
|
import { applyProxyChoice, PROXY_ENV_KEYS } from './http.js';
|
|
15
15
|
/** The default stdout/stderr ceiling, in bytes per stream. */
|
|
@@ -19,24 +19,28 @@ export const KILL_GRACE_MS = 2_000;
|
|
|
19
19
|
/**
|
|
20
20
|
* Whether any proxy URL in an environment carries a username or password.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
22
|
+
* Jq can read the environment, so a credentialed proxy URL would expose its secret to the
|
|
23
|
+
* expression.
|
|
23
24
|
*
|
|
24
|
-
* @param env -
|
|
25
|
-
* @returns
|
|
25
|
+
* @param env - The environment gh will receive.
|
|
26
|
+
* @returns True when a proxy URL has credentials.
|
|
26
27
|
*/
|
|
27
28
|
function proxyUrlHasCredentials(env) {
|
|
28
29
|
for (const key of PROXY_ENV_KEYS) {
|
|
29
|
-
if (key === 'NODE_USE_ENV_PROXY' || key.toLowerCase() === 'no_proxy')
|
|
30
|
+
if (key === 'NODE_USE_ENV_PROXY' || key.toLowerCase() === 'no_proxy') {
|
|
30
31
|
continue;
|
|
32
|
+
}
|
|
31
33
|
const value = env[key];
|
|
32
|
-
if (value === undefined || value === '')
|
|
34
|
+
if (value === undefined || value === '') {
|
|
33
35
|
continue;
|
|
36
|
+
}
|
|
34
37
|
try {
|
|
35
38
|
// Go prefixes a scheme-less value with http://, so `user:pass@host:3128` reaches the proxy
|
|
36
39
|
// with credentials even though URL would read `user:` as the scheme.
|
|
37
40
|
const url = new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(value) ? value : `http://${value}`);
|
|
38
|
-
if (url.username !== '' || url.password !== '')
|
|
41
|
+
if (url.username !== '' || url.password !== '') {
|
|
39
42
|
return true;
|
|
43
|
+
}
|
|
40
44
|
}
|
|
41
45
|
catch {
|
|
42
46
|
// Still unparseable: Node's parser is not gh's, so fail closed.
|
|
@@ -54,8 +58,9 @@ function probeIssueTarget(command, env, cwd, repo, issueNumber, timeoutMs) {
|
|
|
54
58
|
let settled = false;
|
|
55
59
|
let timedOut = false;
|
|
56
60
|
const killGroup = (signal) => {
|
|
57
|
-
if (child.pid === undefined)
|
|
61
|
+
if (child.pid === undefined) {
|
|
58
62
|
return;
|
|
63
|
+
}
|
|
59
64
|
try {
|
|
60
65
|
process.kill(-child.pid, signal);
|
|
61
66
|
}
|
|
@@ -69,31 +74,38 @@ function probeIssueTarget(command, env, cwd, repo, issueNumber, timeoutMs) {
|
|
|
69
74
|
setTimeout(() => killGroup('SIGKILL'), 200).unref();
|
|
70
75
|
}, timeoutMs);
|
|
71
76
|
child.stdout?.on('data', (chunk) => {
|
|
72
|
-
if (stdout.length < 64_000)
|
|
77
|
+
if (stdout.length < 64_000) {
|
|
73
78
|
stdout += chunk.toString();
|
|
79
|
+
}
|
|
74
80
|
});
|
|
75
81
|
child.stderr?.on('data', (chunk) => {
|
|
76
|
-
if (stderr.length < 64_000)
|
|
82
|
+
if (stderr.length < 64_000) {
|
|
77
83
|
stderr += chunk.toString();
|
|
84
|
+
}
|
|
78
85
|
});
|
|
79
|
-
child.on('error',
|
|
80
|
-
if (settled)
|
|
86
|
+
child.on('error', error => {
|
|
87
|
+
if (settled) {
|
|
81
88
|
return;
|
|
89
|
+
}
|
|
82
90
|
settled = true;
|
|
83
91
|
clearTimeout(timer);
|
|
84
92
|
reject(error);
|
|
85
93
|
});
|
|
86
|
-
child.on('close',
|
|
87
|
-
if (settled)
|
|
94
|
+
child.on('close', code => {
|
|
95
|
+
if (settled) {
|
|
88
96
|
return;
|
|
97
|
+
}
|
|
89
98
|
settled = true;
|
|
90
99
|
clearTimeout(timer);
|
|
91
|
-
if (timedOut)
|
|
100
|
+
if (timedOut) {
|
|
92
101
|
reject(new Error('issue-target probe timed out'));
|
|
93
|
-
|
|
102
|
+
}
|
|
103
|
+
else if (code === 0) {
|
|
94
104
|
resolve(stdout);
|
|
95
|
-
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
96
107
|
reject(new Error(stderr.trim() || `gh api exited ${String(code)}`));
|
|
108
|
+
}
|
|
97
109
|
});
|
|
98
110
|
});
|
|
99
111
|
}
|
|
@@ -111,16 +123,19 @@ async function assertIssueTarget(command, env, cwd, repo, number, timeoutMs) {
|
|
|
111
123
|
}
|
|
112
124
|
catch (error) {
|
|
113
125
|
const message = error.message;
|
|
114
|
-
if (message.includes('is a pull request'))
|
|
126
|
+
if (message.includes('is a pull request')) {
|
|
115
127
|
throw error;
|
|
116
|
-
|
|
128
|
+
}
|
|
129
|
+
throw new Error(`could not verify that #${String(issueNumber)} is an issue: ${message}`, {
|
|
130
|
+
cause: error,
|
|
131
|
+
});
|
|
117
132
|
}
|
|
118
133
|
}
|
|
119
134
|
/**
|
|
120
135
|
* Run one allowed action.
|
|
121
136
|
*
|
|
122
|
-
* @param options -
|
|
123
|
-
* @returns
|
|
137
|
+
* @param options - Action, values, repository and token.
|
|
138
|
+
* @returns The bounded process result.
|
|
124
139
|
*/
|
|
125
140
|
export async function runGhAction(options) {
|
|
126
141
|
const maxBytes = options.maxOutputBytes ?? DEFAULT_GH_OUTPUT_BYTES;
|
|
@@ -140,8 +155,9 @@ export async function runGhAction(options) {
|
|
|
140
155
|
};
|
|
141
156
|
for (const key of PROXY_ENV_KEYS) {
|
|
142
157
|
const value = source[key];
|
|
143
|
-
if (value !== undefined && value !== '')
|
|
158
|
+
if (value !== undefined && value !== '') {
|
|
144
159
|
env[key] = value;
|
|
160
|
+
}
|
|
145
161
|
}
|
|
146
162
|
applyProxyChoice(env, options.proxy);
|
|
147
163
|
if (usesJq && proxyUrlHasCredentials(env)) {
|
|
@@ -163,8 +179,9 @@ export async function runGhAction(options) {
|
|
|
163
179
|
throw error;
|
|
164
180
|
}
|
|
165
181
|
}
|
|
166
|
-
if (!usesJq)
|
|
182
|
+
if (!usesJq) {
|
|
167
183
|
env.GH_TOKEN = options.token;
|
|
184
|
+
}
|
|
168
185
|
const action = getGhAction(options.action);
|
|
169
186
|
const timeoutMs = options.timeoutMs ?? action.timeoutSeconds * 1000;
|
|
170
187
|
const deadline = Date.now() + timeoutMs;
|
|
@@ -186,7 +203,7 @@ export async function runGhAction(options) {
|
|
|
186
203
|
writeFileSync(bodyFile, content, { mode: 0o600 });
|
|
187
204
|
}
|
|
188
205
|
const argv = buildGhArgv(action.name, options.values, options.repo, bodyFile);
|
|
189
|
-
return await new Promise(
|
|
206
|
+
return await new Promise(resolve => {
|
|
190
207
|
let stdout = '';
|
|
191
208
|
let stderr = '';
|
|
192
209
|
let stdoutBytes = 0;
|
|
@@ -196,7 +213,6 @@ export async function runGhAction(options) {
|
|
|
196
213
|
let truncated = false;
|
|
197
214
|
let timedOut = false;
|
|
198
215
|
let settled = false;
|
|
199
|
-
let timer;
|
|
200
216
|
let killTimer;
|
|
201
217
|
const child = spawn(options.ghPath ?? 'gh', argv, {
|
|
202
218
|
cwd: home,
|
|
@@ -206,11 +222,11 @@ export async function runGhAction(options) {
|
|
|
206
222
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
207
223
|
});
|
|
208
224
|
const finish = (result) => {
|
|
209
|
-
if (settled)
|
|
225
|
+
if (settled) {
|
|
210
226
|
return;
|
|
227
|
+
}
|
|
211
228
|
settled = true;
|
|
212
|
-
|
|
213
|
-
clearTimeout(timer);
|
|
229
|
+
clearTimeout(timer);
|
|
214
230
|
// A closed parent does not prove the process group is gone; the repeat-kill interval below
|
|
215
231
|
// chases a fork created between the group signal and its delivery. Keep it until the group
|
|
216
232
|
// no longer exists.
|
|
@@ -218,13 +234,15 @@ export async function runGhAction(options) {
|
|
|
218
234
|
const fullStderr = stderr + stderrDecoder.end();
|
|
219
235
|
stdout = clampUtf8(fullStdout, maxBytes);
|
|
220
236
|
stderr = clampUtf8(fullStderr, maxBytes);
|
|
221
|
-
if (stdout !== fullStdout || stderr !== fullStderr)
|
|
237
|
+
if (stdout !== fullStdout || stderr !== fullStderr) {
|
|
222
238
|
truncated = true;
|
|
239
|
+
}
|
|
223
240
|
resolve({ ...result, stdout, stderr, truncated, timedOut });
|
|
224
241
|
};
|
|
225
242
|
const signalGroup = (signal = 'SIGKILL') => {
|
|
226
|
-
if (child.pid === undefined)
|
|
243
|
+
if (child.pid === undefined) {
|
|
227
244
|
return false;
|
|
245
|
+
}
|
|
228
246
|
try {
|
|
229
247
|
// The child is its own process-group leader; kill the group so a gh-spawned helper does
|
|
230
248
|
// not keep the pipe open after timeout or output overflow.
|
|
@@ -234,8 +252,9 @@ export async function runGhAction(options) {
|
|
|
234
252
|
catch (error) {
|
|
235
253
|
// ESRCH means the group itself is gone; do not fall back to the parent handle, which can
|
|
236
254
|
// report success while only a zombie remains.
|
|
237
|
-
if (error.code === 'ESRCH')
|
|
255
|
+
if (error.code === 'ESRCH') {
|
|
238
256
|
return false;
|
|
257
|
+
}
|
|
239
258
|
return child.exitCode === null && child.signalCode === null ? child.kill(signal) : false;
|
|
240
259
|
}
|
|
241
260
|
};
|
|
@@ -243,16 +262,20 @@ export async function runGhAction(options) {
|
|
|
243
262
|
// active after close when the timeout path scheduled it, because gh itself may exit on SIGTERM
|
|
244
263
|
// while a descendant that ignores SIGTERM is still in the group.
|
|
245
264
|
const chase = () => {
|
|
246
|
-
if (killTimer !== undefined)
|
|
265
|
+
if (killTimer !== undefined) {
|
|
247
266
|
return;
|
|
248
|
-
|
|
267
|
+
}
|
|
268
|
+
if (!signalGroup()) {
|
|
249
269
|
return;
|
|
270
|
+
}
|
|
250
271
|
const handle = setInterval(() => {
|
|
251
|
-
if (signalGroup())
|
|
272
|
+
if (signalGroup()) {
|
|
252
273
|
return;
|
|
274
|
+
}
|
|
253
275
|
clearInterval(handle);
|
|
254
|
-
if (killTimer === handle)
|
|
276
|
+
if (killTimer === handle) {
|
|
255
277
|
killTimer = undefined;
|
|
278
|
+
}
|
|
256
279
|
}, 100);
|
|
257
280
|
handle.unref();
|
|
258
281
|
killTimer = handle;
|
|
@@ -260,13 +283,15 @@ export async function runGhAction(options) {
|
|
|
260
283
|
const kill = () => {
|
|
261
284
|
// Truncation stops once the action settles; the timeout grace uses chase() directly so a
|
|
262
285
|
// child that closed does not hide a surviving descendant.
|
|
263
|
-
if (settled)
|
|
286
|
+
if (settled) {
|
|
264
287
|
return;
|
|
288
|
+
}
|
|
265
289
|
chase();
|
|
266
290
|
};
|
|
267
291
|
const take = (stream, chunk) => {
|
|
268
|
-
if (truncated || timedOut)
|
|
292
|
+
if (truncated || timedOut) {
|
|
269
293
|
return;
|
|
294
|
+
}
|
|
270
295
|
const used = stream === 'stdout' ? stdoutBytes : stderrBytes;
|
|
271
296
|
if (used >= maxBytes) {
|
|
272
297
|
truncated = true;
|
|
@@ -288,11 +313,12 @@ export async function runGhAction(options) {
|
|
|
288
313
|
kill();
|
|
289
314
|
}
|
|
290
315
|
};
|
|
291
|
-
timer = setTimeout(() => {
|
|
316
|
+
const timer = setTimeout(() => {
|
|
292
317
|
timedOut = true;
|
|
293
318
|
// Ask politely first; a gh process that ignores SIGTERM is killed on the grace deadline.
|
|
294
|
-
if (!signalGroup('SIGTERM'))
|
|
319
|
+
if (!signalGroup('SIGTERM')) {
|
|
295
320
|
return;
|
|
321
|
+
}
|
|
296
322
|
setTimeout(() => chase(), KILL_GRACE_MS).unref();
|
|
297
323
|
}, Math.max(1, deadline - Date.now()));
|
|
298
324
|
child.stdout?.on('data', (chunk) => take('stdout', chunk));
|
|
@@ -308,19 +334,21 @@ export async function runGhAction(options) {
|
|
|
308
334
|
/**
|
|
309
335
|
* Keep a decoded string within a UTF-8 byte budget without splitting a code point.
|
|
310
336
|
*
|
|
311
|
-
* @param text -
|
|
312
|
-
* @param maxBytes -
|
|
313
|
-
* @returns
|
|
337
|
+
* @param text - The decoded text.
|
|
338
|
+
* @param maxBytes - The byte budget.
|
|
339
|
+
* @returns The prefix that fits.
|
|
314
340
|
*/
|
|
315
341
|
function clampUtf8(text, maxBytes) {
|
|
316
|
-
if (Buffer.byteLength(text) <= maxBytes)
|
|
342
|
+
if (Buffer.byteLength(text) <= maxBytes) {
|
|
317
343
|
return text;
|
|
344
|
+
}
|
|
318
345
|
let used = 0;
|
|
319
346
|
let kept = '';
|
|
320
347
|
for (const character of text) {
|
|
321
348
|
const size = Buffer.byteLength(character);
|
|
322
|
-
if (used + size > maxBytes)
|
|
349
|
+
if (used + size > maxBytes) {
|
|
323
350
|
break;
|
|
351
|
+
}
|
|
324
352
|
kept += character;
|
|
325
353
|
used += size;
|
|
326
354
|
}
|
package/lib/gh.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gh.js","sourceRoot":"","sources":["../src/gh.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gh.js","sourceRoot":"","sources":["../src/gh.ts"],"names":[],"mappings":"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"}
|
package/lib/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAKzC,oFAAoF;AACpF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;AAEnD,2EAA2E;AAC3E,eAAO,MAAM,cAAc,YACzB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,oBAAoB,CACZ,CAAA;AAEV,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAcjF;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,KAAK,CAgB9D;AAKD,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAE/D;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAQxD;AAkDD,sFAAsF;AACtF,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAgBxD;AAED,2DAA2D;AAC3D,eAAO,MAAM,UAAU,EAAE,SAGxB,CAAA"}
|
package/lib/http.js
CHANGED
|
@@ -4,29 +4,39 @@
|
|
|
4
4
|
* Node's native fetch reads proxy variables once, when its dispatcher is created, so a command that
|
|
5
5
|
* wants a different proxy cannot get one by editing `process.env` (verified on 24.22: a later
|
|
6
6
|
* `http_proxy` change is ignored). `node-fetch-native` supplies the node-fetch agents (a direct
|
|
7
|
-
* pair, or `createProxy().agent` for an explicit proxy), and `x-fetch` wraps that fetch. The
|
|
8
|
-
* instance is cached by the effective proxy choice, so a busy broker does not create an
|
|
9
|
-
* command.
|
|
7
|
+
* pair, or `createProxy().agent` for an explicit proxy), and `x-fetch` wraps that fetch. The
|
|
8
|
+
* wrapped instance is cached by the effective proxy choice, so a busy broker does not create an
|
|
9
|
+
* agent per command.
|
|
10
10
|
*/
|
|
11
11
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
12
12
|
import http from 'node:http';
|
|
13
13
|
import https from 'node:https';
|
|
14
|
-
import { createProxy } from 'node-fetch-native/proxy';
|
|
15
14
|
import { fetch as directFetch } from 'node-fetch-native/node';
|
|
15
|
+
import { createProxy } from 'node-fetch-native/proxy';
|
|
16
16
|
import { createXFetch, isXFetchError } from 'x-fetch';
|
|
17
17
|
/** Every spelling that can carry a proxy to Node or to a child process. */
|
|
18
18
|
export const PROXY_ENV_KEYS = [
|
|
19
|
-
'http_proxy',
|
|
20
|
-
'
|
|
19
|
+
'http_proxy',
|
|
20
|
+
'https_proxy',
|
|
21
|
+
'all_proxy',
|
|
22
|
+
'no_proxy',
|
|
23
|
+
'HTTP_PROXY',
|
|
24
|
+
'HTTPS_PROXY',
|
|
25
|
+
'ALL_PROXY',
|
|
26
|
+
'NO_PROXY',
|
|
27
|
+
'NODE_USE_ENV_PROXY',
|
|
21
28
|
];
|
|
22
29
|
/** Apply one command's proxy choice to an environment for a child process. */
|
|
23
30
|
export function applyProxyChoice(env, proxy) {
|
|
24
|
-
if (proxy === undefined)
|
|
31
|
+
if (proxy === undefined) {
|
|
25
32
|
return;
|
|
26
|
-
|
|
33
|
+
}
|
|
34
|
+
for (const key of PROXY_ENV_KEYS) {
|
|
27
35
|
delete env[key];
|
|
28
|
-
|
|
36
|
+
}
|
|
37
|
+
if (proxy === null) {
|
|
29
38
|
return;
|
|
39
|
+
}
|
|
30
40
|
env.HTTP_PROXY = proxy;
|
|
31
41
|
env.HTTPS_PROXY = proxy;
|
|
32
42
|
env.ALL_PROXY = proxy;
|
|
@@ -34,12 +44,15 @@ export function applyProxyChoice(env, proxy) {
|
|
|
34
44
|
}
|
|
35
45
|
/** Parse a proxy choice; false means it is not a usable http(s) URL. */
|
|
36
46
|
export function parseProxy(value) {
|
|
37
|
-
if (value === undefined)
|
|
47
|
+
if (value === undefined) {
|
|
38
48
|
return undefined;
|
|
39
|
-
|
|
49
|
+
}
|
|
50
|
+
if (value === null) {
|
|
40
51
|
return null;
|
|
41
|
-
|
|
52
|
+
}
|
|
53
|
+
if (typeof value !== 'string') {
|
|
42
54
|
return false;
|
|
55
|
+
}
|
|
43
56
|
try {
|
|
44
57
|
const url = new URL(value);
|
|
45
58
|
return url.protocol === 'http:' || url.protocol === 'https:' ? value : false;
|
|
@@ -56,14 +69,16 @@ export function withProxy(proxy, fn) {
|
|
|
56
69
|
}
|
|
57
70
|
/** Return the stable key for one proxy choice. */
|
|
58
71
|
export function proxyCacheKey(proxy) {
|
|
59
|
-
if (proxy === null)
|
|
72
|
+
if (proxy === null) {
|
|
60
73
|
return 'direct';
|
|
61
|
-
|
|
74
|
+
}
|
|
75
|
+
if (proxy !== undefined) {
|
|
62
76
|
return `proxy:${proxy}`;
|
|
77
|
+
}
|
|
63
78
|
return `env:${process.env['https_proxy'] ?? ''}|${process.env['HTTPS_PROXY'] ?? ''}|${process.env['http_proxy'] ?? ''}|${process.env['HTTP_PROXY'] ?? ''}|${process.env['no_proxy'] ?? ''}|${process.env['NO_PROXY'] ?? ''}|${process.env['NODE_USE_ENV_PROXY'] ?? ''}`;
|
|
64
79
|
}
|
|
65
80
|
/**
|
|
66
|
-
*
|
|
81
|
+
* X-fetch throws on non-2xx, while every provider here wants to inspect the status and body itself.
|
|
67
82
|
* Turn the thrown error back into its response for this adapter.
|
|
68
83
|
*/
|
|
69
84
|
const returnResponse = async (_ctx, next) => {
|
|
@@ -71,8 +86,9 @@ const returnResponse = async (_ctx, next) => {
|
|
|
71
86
|
return await next();
|
|
72
87
|
}
|
|
73
88
|
catch (error) {
|
|
74
|
-
if (isXFetchError(error) && error.response !== undefined)
|
|
89
|
+
if (isXFetchError(error) && error.response !== undefined) {
|
|
75
90
|
return error.response;
|
|
91
|
+
}
|
|
76
92
|
throw error;
|
|
77
93
|
}
|
|
78
94
|
};
|
|
@@ -91,7 +107,7 @@ function makeFetch(proxy) {
|
|
|
91
107
|
// NODE_USE_ENV_PROXY=1, so a direct choice needs its own agents rather than agent: false.
|
|
92
108
|
const httpAgent = new http.Agent();
|
|
93
109
|
const httpsAgent = new https.Agent();
|
|
94
|
-
native = nodeFetchWithAgent(
|
|
110
|
+
native = nodeFetchWithAgent(url => (url.protocol === 'https:' ? httpsAgent : httpAgent));
|
|
95
111
|
}
|
|
96
112
|
else {
|
|
97
113
|
// createProxy's agent is a node-fetch agent; this works on Node 24 and 26, unlike handing its
|
|
@@ -117,8 +133,9 @@ export function fetcherFor(proxy) {
|
|
|
117
133
|
// arbitrary URLs grow this map for the life of the broker.
|
|
118
134
|
if (instances.size >= 16) {
|
|
119
135
|
const oldest = instances.keys().next().value;
|
|
120
|
-
if (oldest !== undefined)
|
|
136
|
+
if (oldest !== undefined) {
|
|
121
137
|
instances.delete(oldest);
|
|
138
|
+
}
|
|
122
139
|
}
|
|
123
140
|
fetcher = makeFetch(proxy);
|
|
124
141
|
instances.set(key, fetcher);
|
package/lib/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,UAAU,CAAA;AAI7D,cAAc,SAAS,CAAA;AAEvB,eAAO,MAAM,SAAS,k1BAgByC,CAAA;AAiC/D,eAAO,MAAM,WAAW,EAAE,cAKzB,CAAA"}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAuB,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAuB,MAAM,UAAU,CAAA;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,cAAc,SAAS,CAAA;AAEvB,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;+DAgBsC,CAAA;AAE/D,KAAK,UAAU,GAAG,CAAC,IAAuB;IACxC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAC/B,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ,EAAE,CAAC;YACd,kBAAkB,EAAE,CAAA;YACpB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;YACjD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;QACD,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC3D,KAAK,OAAO;YACV,OAAO,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC7D,KAAK,SAAS;YACZ,OAAO,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACjE,KAAK,QAAQ;YACX,OAAO,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC/D,KAAK,UAAU;YACb,OAAO,CAAC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACnE,KAAK,QAAQ;YACX,OAAO,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC/D,KAAK,WAAW;YACd,OAAO,CAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACrE,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QACjE;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,OAAO,IAAI,EAAE,OAAO,CAAC,CAAA;YACzE,OAAO,CAAC,CAAA;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,SAAS;IACf,GAAG;CACJ,CAAA"}
|
package/lib/policy.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Authorization policy: the only place that decides whether a host + repository pair may
|
|
3
|
-
*
|
|
2
|
+
* Authorization policy: the only place that decides whether a host + repository pair may receive a
|
|
3
|
+
* credential.
|
|
4
4
|
*
|
|
5
5
|
* Design rules (see the design review, findings P0-1 and P2-3):
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
6
|
+
*
|
|
7
|
+
* - Default deny: an unknown host or an unlisted repository never yields a credential;
|
|
8
|
+
* - Repository paths are normalized (drop leading/trailing slashes, drop a trailing `.git`,
|
|
9
|
+
* lowercase) before matching, because GitHub owner/repo names are case-insensitive;
|
|
10
|
+
* - Matching is exact per path segment, never a prefix match, so an allowlist entry for `acme/widget`
|
|
11
|
+
* can never authorize `acme/widget-evil`;
|
|
12
|
+
* - A wildcard is allowed only as a whole segment, never inside one, so a malformed entry matches
|
|
13
|
+
* nothing and therefore fails closed.
|
|
14
14
|
*/
|
|
15
15
|
import type { BrokerConfig, HostConfig, RepoRef } from 'gcb-core';
|
|
16
16
|
/** One parsed allowlist entry. */
|
|
@@ -21,25 +21,25 @@ export interface AllowEntry {
|
|
|
21
21
|
/**
|
|
22
22
|
* Normalize the `path=` value git hands to a credential helper into an `owner/repo` pair.
|
|
23
23
|
*
|
|
24
|
-
* @param rawPath -
|
|
25
|
-
* @returns
|
|
26
|
-
*
|
|
24
|
+
* @param rawPath - The raw `path` field, e.g. `acme/widget.git`.
|
|
25
|
+
* @returns The normalized reference, or null when the value is missing, has more than two segments,
|
|
26
|
+
* is made of dots, or contains characters we refuse to guess about.
|
|
27
27
|
*/
|
|
28
28
|
export declare function normalizeRepoPath(rawPath: unknown): RepoRef | null;
|
|
29
29
|
/**
|
|
30
|
-
* Parse one allowlist entry: exactly two segments, each either an identifier or a
|
|
31
|
-
*
|
|
30
|
+
* Parse one allowlist entry: exactly two segments, each either an identifier or a whole-segment
|
|
31
|
+
* wildcard.
|
|
32
32
|
*
|
|
33
|
-
* @param entry -
|
|
34
|
-
* @returns
|
|
33
|
+
* @param entry - The raw entry from configuration.
|
|
34
|
+
* @returns The parsed entry, or null when it is malformed (which matches nothing).
|
|
35
35
|
*/
|
|
36
36
|
export declare function parseAllowEntry(entry: unknown): AllowEntry | null;
|
|
37
37
|
/**
|
|
38
38
|
* Whether a normalized repository is covered by an allowlist.
|
|
39
39
|
*
|
|
40
|
-
* @param allowList -
|
|
41
|
-
* @param full -
|
|
42
|
-
* @returns
|
|
40
|
+
* @param allowList - Configured allow entries.
|
|
41
|
+
* @param full - A normalized `owner/repo` string.
|
|
42
|
+
* @returns True only for an exact segment-wise match.
|
|
43
43
|
*/
|
|
44
44
|
export declare function repoAllowed(allowList: unknown, full: string): boolean;
|
|
45
45
|
/** A host block together with the key it was configured under. */
|
|
@@ -49,12 +49,12 @@ export type ResolvedHostConfig = HostConfig & {
|
|
|
49
49
|
/**
|
|
50
50
|
* Look up the configuration block for a host as git reports it.
|
|
51
51
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
52
|
+
* Git sends `host=github.com` for the default port and `host=127.0.0.1:8080` otherwise, so the
|
|
53
|
+
* comparison is on the literal string, case-insensitively.
|
|
54
54
|
*
|
|
55
|
-
* @param config -
|
|
56
|
-
* @param host -
|
|
57
|
-
* @returns
|
|
55
|
+
* @param config - A validated broker config.
|
|
56
|
+
* @param host - The `host` field from the credential request.
|
|
57
|
+
* @returns The matching block, or null (default deny).
|
|
58
58
|
*/
|
|
59
59
|
export declare function hostConfig(config: BrokerConfig, host: unknown): ResolvedHostConfig | null;
|
|
60
60
|
//# sourceMappingURL=policy.d.ts.map
|
package/lib/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAcjE,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAiDlE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAkBjE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAyBrE;AAED,kEAAkE;AAClE,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvE;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAWzF"}
|