e02e816e55
Bumps [undici](https://github.com/nodejs/undici) from 7.24.6 to 8.2.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/nodejs/undici/releases">undici's releases</a>.</em></p> <blockquote> <h2>v8.2.0</h2> <h2>What's Changed</h2> <ul> <li>chore: use native addAbortListener by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5021">nodejs/undici#5021</a></li> <li>fix: fix the logic for the UNDICI_NO_WASM_SIMD environment variable by <a href="https://github.com/ShenHongFei"><code>@ShenHongFei</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5026">nodejs/undici#5026</a></li> <li>fix(http2): send body for non-expectsPayload methods with content by <a href="https://github.com/mcollina"><code>@mcollina</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5030">nodejs/undici#5030</a></li> <li>fix(fetch): correct 'navigator' typo to 'navigate' in fetchFinale by <a href="https://github.com/deepview-autofix"><code>@deepview-autofix</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5044">nodejs/undici#5044</a></li> <li>fix(webidl): correct signed integer bounds in ConvertToInt by <a href="https://github.com/deepview-autofix"><code>@deepview-autofix</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5038">nodejs/undici#5038</a></li> <li>fix(fetch): use || for CRLF check in multipart formdata-parser by <a href="https://github.com/deepview-autofix"><code>@deepview-autofix</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5049">nodejs/undici#5049</a></li> <li>fix(websocket): correct argument order in WebSocketStream UTF-8 failure by <a href="https://github.com/deepview-autofix"><code>@deepview-autofix</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5050">nodejs/undici#5050</a></li> <li>fix(pool): propagate useH2c to connector when connections > 1 by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5031">nodejs/undici#5031</a></li> <li>fix(cache): return immutable staleAt in milliseconds by <a href="https://github.com/deepview-autofix"><code>@deepview-autofix</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5048">nodejs/undici#5048</a></li> <li>fix(socks5-proxy-agent): use per-origin pools to prevent cross-origin routing by <a href="https://github.com/deepview-autofix"><code>@deepview-autofix</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5041">nodejs/undici#5041</a></li> <li>fix(cache): evict oldest entries first in SqliteCacheStore prune by <a href="https://github.com/deepview-autofix"><code>@deepview-autofix</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5039">nodejs/undici#5039</a></li> <li>fix(socks5): correctly expand IPv6 '::' compressed notation by <a href="https://github.com/deepview-autofix"><code>@deepview-autofix</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5046">nodejs/undici#5046</a></li> <li>Remove unused func and unnecessary shim by <a href="https://github.com/tsctx"><code>@tsctx</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5053">nodejs/undici#5053</a></li> <li>fix: reject malformed content-length request headers by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5060">nodejs/undici#5060</a></li> <li>fix(request): reject NaN highWaterMark during option validation by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5062">nodejs/undici#5062</a></li> <li>docs: fix broken links in docsify sidebar by <a href="https://github.com/maruthang"><code>@maruthang</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5065">nodejs/undici#5065</a></li> <li>fix(fetch): prefer filename* over filename in multipart form-data by <a href="https://github.com/maruthang"><code>@maruthang</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5068">nodejs/undici#5068</a></li> <li>fix(http2): reject websocket upgrades on non-200 responses by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5072">nodejs/undici#5072</a></li> <li>feat: support username-only proxy authentication in ProxyAgent by <a href="https://github.com/rossilor95"><code>@rossilor95</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/4935">nodejs/undici#4935</a></li> <li>build(deps): bump uWebSockets.js from v20.58.0 to v20.64.0 in /benchmarks by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/nodejs/undici/pull/5083">nodejs/undici#5083</a></li> <li>fix(client-h2): stop double-decrementing kOpenStreams on stream timeout by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5076">nodejs/undici#5076</a></li> <li>fix(http2): reject upgrade streams closed before response headers by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5069">nodejs/undici#5069</a></li> <li>fix(http2): allow GET and HEAD request bodies over h2 by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5058">nodejs/undici#5058</a></li> <li>fix(cache): include query in cache key when opts.path is undefined by <a href="https://github.com/maruthang"><code>@maruthang</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5081">nodejs/undici#5081</a></li> <li>fix: avoid premature cleanup of dispatcher in Agent by <a href="https://github.com/bienzaaron"><code>@bienzaaron</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5034">nodejs/undici#5034</a></li> <li>fix(http2): record ping failures on the socket by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5075">nodejs/undici#5075</a></li> <li>add undici security policy by <a href="https://github.com/mcollina"><code>@mcollina</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5056">nodejs/undici#5056</a></li> <li>fix(mock): make filterCalls AND operator actually intersect results by <a href="https://github.com/deepview-autofix"><code>@deepview-autofix</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5045">nodejs/undici#5045</a></li> <li>fix(socks5): enforce authenticated state before CONNECT by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5097">nodejs/undici#5097</a></li> <li>fix(cache): skip expired sqlite vary entries during lookup by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5095">nodejs/undici#5095</a></li> <li>fix: enforce maxCachedSessions in TLS session cache by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5102">nodejs/undici#5102</a></li> <li>fix(socks5): encode embedded IPv4 tails in IPv6 literals correctly by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5099">nodejs/undici#5099</a></li> <li>fix: handle invalid HTTP/2 connection headers (<a href="https://redirect.github.com/nodejs/undici/issues/4356">#4356</a>) by <a href="https://github.com/mcollina"><code>@mcollina</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5101">nodejs/undici#5101</a></li> <li>fix(interceptor): add throwOnMaxRedirect to types and interceptor opts by <a href="https://github.com/maruthang"><code>@maruthang</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5066">nodejs/undici#5066</a></li> <li>fix(websocket): avoid double-closing canceled stream readers by <a href="https://github.com/colinaaa"><code>@colinaaa</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5105">nodejs/undici#5105</a></li> <li>fix(cache): persist vary when updating sqlite cache entries by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5109">nodejs/undici#5109</a></li> <li>refactor(h1): track HEAD keep-alive override as boolean by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5110">nodejs/undici#5110</a></li> <li>client: cache llhttp wasm buffer view by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5115">nodejs/undici#5115</a></li> <li>deps: update llhttp to 9.3.1 by <a href="https://github.com/mcollina"><code>@mcollina</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5113">nodejs/undici#5113</a></li> <li>fix(http2): preserve accepted streams after GOAWAY by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5090">nodejs/undici#5090</a></li> <li>fix: reuse parser WeakRef for timeout callbacks by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5125">nodejs/undici#5125</a></li> <li>fix: stop buffering data after SOCKS5 connect by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5118">nodejs/undici#5118</a></li> <li>perf(http2): avoid response header reserialization by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5085">nodejs/undici#5085</a></li> <li>fix(cache): enforce sqlite maxCount after insert by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5112">nodejs/undici#5112</a></li> <li>perf: reduce EventSourceStream parser allocations by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5032">nodejs/undici#5032</a></li> <li>types(dispatcher): use OutgoingHttpHeaders for request headers by <a href="https://github.com/maruthang"><code>@maruthang</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5067">nodejs/undici#5067</a></li> <li>cleanup: delete redundant .gitkeep file by <a href="https://github.com/shivarm"><code>@shivarm</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5133">nodejs/undici#5133</a></li> <li>fix(http2): respect peer max concurrent streams by <a href="https://github.com/trivikr"><code>@trivikr</code></a> in <a href="https://redirect.github.com/nodejs/undici/pull/5135">nodejs/undici#5135</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/nodejs/undici/commit/bf684f7de01616708a33a5d1c092177622394442"><code>bf684f7</code></a> Bumped v8.2.0 (<a href="https://redirect.github.com/nodejs/undici/issues/5152">#5152</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/0ca054aa8524ed52709ebf15e94e187f4a18ebcf"><code>0ca054a</code></a> fix: replace stale pool clients under connection limit (<a href="https://redirect.github.com/nodejs/undici/issues/5145">#5145</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/7af90e9721f882bb5fc97606e3f95217ca849994"><code>7af90e9</code></a> perf: avoid redundant scans in BalancedPool dispatcher selection (<a href="https://redirect.github.com/nodejs/undici/issues/5146">#5146</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/abb9d06ba7b882d336129898f9e89176f1c8f1c3"><code>abb9d06</code></a> fix: validate H2CClient maxConcurrentStreams option (<a href="https://redirect.github.com/nodejs/undici/issues/5143">#5143</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/72a75913138bc6197bf0620a1291f7c2e764c430"><code>72a7591</code></a> perf(http2): avoid cloning headers when removing status (<a href="https://redirect.github.com/nodejs/undici/issues/5127">#5127</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/96fd5e9da9b19a4d49eb9e67534f73f4cfa1c677"><code>96fd5e9</code></a> fix(cache): allow streamed entries at maxEntrySize limit (<a href="https://redirect.github.com/nodejs/undici/issues/5129">#5129</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/f41e53f112659ec37b6fa8db4e4f39388b9e6ca6"><code>f41e53f</code></a> perf: use byteLength property for binary body chunks (<a href="https://redirect.github.com/nodejs/undici/issues/5126">#5126</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/bec49615931e3df3df4f75956b35c3f7f1fd05ca"><code>bec4961</code></a> chore(deps): add lockfile (<a href="https://redirect.github.com/nodejs/undici/issues/5139">#5139</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/86f1242cfc86364fe5c30d7e0fc1deec8d52954b"><code>86f1242</code></a> perf(http2): reduce writeH2 per-request callback allocations (<a href="https://redirect.github.com/nodejs/undici/issues/5138">#5138</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/cad3f70a86b95966a3e368f9f7118377858b8c3e"><code>cad3f70</code></a> perf(client): parse h1 content-length statelessly (<a href="https://redirect.github.com/nodejs/undici/issues/5124">#5124</a>)</li> <li>Additional commits viewable in <a href="https://github.com/nodejs/undici/compare/v7.24.6...v8.2.0">compare view</a></li> </ul> </details> <br /> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Parker Brown <17183625+parkerbxyz@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
124 lines
5.0 KiB
JavaScript
124 lines
5.0 KiB
JavaScript
// Base for all `main` tests.
|
||
// @ts-check
|
||
import { createMockAgent } from "./mock-agent.js";
|
||
|
||
export const DEFAULT_ENV = {
|
||
GITHUB_REPOSITORY_OWNER: "actions",
|
||
GITHUB_REPOSITORY: "actions/create-github-app-token",
|
||
// inputs are set as environment variables with the prefix INPUT_
|
||
// https://docs.github.com/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
||
"INPUT_GITHUB-API-URL": "https://api.github.com",
|
||
"INPUT_SKIP-TOKEN-REVOKE": "false",
|
||
"INPUT_CLIENT-ID": "Iv1.0123456789abcdef",
|
||
// This key is invalidated. It’s from https://github.com/octokit/auth-app.js/issues/465#issuecomment-1564998327.
|
||
"INPUT_PRIVATE-KEY": `-----BEGIN RSA PRIVATE KEY-----
|
||
MIIEowIBAAKCAQEA280nfuUM9w00Ib9E2rvZJ6Qu3Ua3IqR34ZlK53vn/Iobn2EL
|
||
Z9puc5Q/nFBU15NKwHyQNb+OG2hTCkjd1Xi9XPzEOH1r42YQmTGq8YCkUSkk6KZA
|
||
5dnhLwN9pFquT9fQgrf4r1D5GJj3rqvj8JDr1sBmunArqY5u4gziSrIohcjLIZV0
|
||
cIMz/RUIMe/EAsNeiwzEteHAtf/WpMs+OfF94SIUrDlkPr0H0H3DER8l1HZAvE0e
|
||
eD3ZJ6njrF6UHQWDVrekSTB0clpVTTU9TMpe+gs2nnFww9G8As+WsW8xHVjVipJy
|
||
AwqBhiR+s7wlcbh2i0NQqt8GL9/jIFTmleiwsQIDAQABAoIBAHNyP8pgl/yyzKzk
|
||
/0871wUBMTQ7zji91dGCaFtJM0HrcDK4D/uOOPEv7nE1qDpKPLr5Me1pHUS7+NGw
|
||
EAPtlNhgUtew2JfppdIwyi5qeOPADoi7ud6AH8xHsxg+IMwC+JuP8WhzyUHoJj9y
|
||
PRi/pX94Mvy9qdE25HqKddjx1mLdaHhxqPkr16/em23uYZqm1lORsCPD3vTlthj7
|
||
WiEbBSqmpYvjj8iFP4yFk2N+LvuWgSilRzq1Af3qE7PUp4xhjmcOPs78Sag1T7nl
|
||
ww/pgqCegISABHik7j++/5T+UlI5cLsyp/XENU9zAd4kCIczwNKpun2bn+djJdft
|
||
ravyX4ECgYEA+k2mHfi1zwKF3wT+cJbf30+uXrJczK2yZ33//4RKnhBaq7nSbQAI
|
||
nhWz2JESBK0TEo0+L7yYYq3HnT9vcES5R1NxzruH9wXgxssSx3JUj6w1raXYPh3B
|
||
+1XpYQsa6/bo2LmBELEx47F8FQbNgD5dmTJ4jBrf6MV4rRh9h6Bs7UkCgYEA4M3K
|
||
eAw52c2MNMIxH/LxdOQtEBq5GMu3AQC8I64DSSRrAoiypfEgyTV6S4gWJ5TKgYfD
|
||
zclnOVJF+tITe3neO9wHoZp8iCjCnoijcT6p2cJ4IaW68LEHPOokWBk0EpLjF4p2
|
||
7sFi9+lUpXYXfCN7aMJ77QpGzB7dNsBf0KUxMCkCgYEAjw/mjGbk82bLwUaHby6s
|
||
0mQmk7V6WPpGZ+Sadx7TzzglutVAslA8nK5m1rdEBywtJINaMcqnhm8xEm15cj+1
|
||
blEBUVnaQpQ3fyf+mcR9FIknPRL3X7l+b/sQowjH4GqFd6m/XR0KGMwO0a3Lsyry
|
||
MGeqgtmxdMe5S6YdyXEmERECgYAgQsgklDSVIh9Vzux31kh6auhgoEUh3tJDbZSS
|
||
Vj2YeIZ21aE1mTYISglj34K2aW7qSc56sMWEf18VkKJFHQccdgYOVfo7HAZZ8+fo
|
||
r4J2gqb0xTDfq7gLMNrIXc2QQM4gKbnJp60JQM3p9NmH8huavBZGvSvNzTwXyGG3
|
||
so0tiQKBgGQXZaxaXhYUcxYHuCkQ3V4Vsj3ezlM92xXlP32SGFm3KgFhYy9kATxw
|
||
Cax1ytZzvlrKLQyQFVK1COs2rHt7W4cJ7op7C8zXfsigXCiejnS664oAuX8sQZID
|
||
x3WQZRiXlWejSMUAHuMwXrhGlltF3lw83+xAjnqsVp75kGS6OH61
|
||
-----END RSA PRIVATE KEY-----`,
|
||
// The Actions runner sets all inputs to empty strings if not set.
|
||
"INPUT_PERMISSION-ADMINISTRATION": "",
|
||
};
|
||
|
||
export async function test(cb = (_mockPool) => {}, env = DEFAULT_ENV) {
|
||
for (const [key, value] of Object.entries(env)) {
|
||
process.env[key] = value;
|
||
}
|
||
|
||
// Set up mocking
|
||
const baseUrl = new URL(env["INPUT_GITHUB-API-URL"]);
|
||
const basePath = baseUrl.pathname === "/" ? "" : baseUrl.pathname;
|
||
const mockAgent = createMockAgent({ enableCallHistory: true });
|
||
const mockPool = mockAgent.get(baseUrl.origin);
|
||
|
||
// Calling `auth({ type: "app" })` to obtain a JWT doesn’t make network requests, so no need to intercept.
|
||
|
||
// Mock installation ID and app slug request
|
||
const mockInstallationId = "123456";
|
||
const mockAppSlug = "github-actions";
|
||
const owner = env.INPUT_OWNER ?? env.GITHUB_REPOSITORY_OWNER;
|
||
const currentRepoName = env.GITHUB_REPOSITORY.split("/")[1];
|
||
const repo = encodeURIComponent(
|
||
(env.INPUT_REPOSITORIES ?? currentRepoName).split(",")[0]
|
||
);
|
||
|
||
mockPool
|
||
.intercept({
|
||
path: `${basePath}/repos/${owner}/${repo}/installation`,
|
||
method: "GET",
|
||
headers: {
|
||
accept: "application/vnd.github.v3+json",
|
||
"user-agent": "actions/create-github-app-token",
|
||
// Intentionally omitting the `authorization` header, since JWT creation is not idempotent.
|
||
},
|
||
})
|
||
.reply(
|
||
200,
|
||
{ id: mockInstallationId, app_slug: mockAppSlug },
|
||
{ headers: { "content-type": "application/json" } }
|
||
);
|
||
|
||
// Mock installation access token request
|
||
const mockInstallationAccessToken =
|
||
"ghs_16C7e42F292c6912E7710c838347Ae178B4a"; // This token is invalidated. It’s from https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#create-an-installation-access-token-for-an-app.
|
||
const mockExpiresAt = "2016-07-11T22:14:10Z";
|
||
|
||
mockPool
|
||
.intercept({
|
||
path: `${basePath}/app/installations/${mockInstallationId}/access_tokens`,
|
||
method: "POST",
|
||
headers: {
|
||
accept: "application/vnd.github.v3+json",
|
||
"user-agent": "actions/create-github-app-token",
|
||
// Note: Intentionally omitting the `authorization` header, since JWT creation is not idempotent.
|
||
},
|
||
})
|
||
.reply(
|
||
201,
|
||
{ token: mockInstallationAccessToken, expires_at: mockExpiresAt },
|
||
{ headers: { "content-type": "application/json" } }
|
||
);
|
||
|
||
// Run the callback
|
||
cb(mockPool);
|
||
|
||
// Run the main script
|
||
const { default: promise } = await import("../main.js");
|
||
await promise;
|
||
|
||
console.log("--- REQUESTS ---");
|
||
const calls = mockAgent
|
||
.getCallHistory()
|
||
.calls()
|
||
.map((call) => {
|
||
const route = `${call.method} ${call.path}`;
|
||
if (call.method === "GET") return route;
|
||
|
||
return `${route}\n${call.body}`;
|
||
});
|
||
|
||
console.log(calls.join("\n"));
|
||
}
|