agent-shim 8.2.0 → 8.3.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/README.md +2 -0
- package/dist/cli.cjs +1186 -631
- package/dist/index.cjs +592 -39
- package/dist/index.mjs +569 -30
- package/dist/types/index.d.ts +231 -2
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -7566,10 +7566,10 @@ var require_util2 = __commonJS({
|
|
|
7566
7566
|
}
|
|
7567
7567
|
return obj;
|
|
7568
7568
|
}
|
|
7569
|
-
function errorRequest(client,
|
|
7569
|
+
function errorRequest(client, request7, err) {
|
|
7570
7570
|
try {
|
|
7571
|
-
|
|
7572
|
-
assert2(
|
|
7571
|
+
request7.onError(err);
|
|
7572
|
+
assert2(request7.aborted);
|
|
7573
7573
|
} catch (err2) {
|
|
7574
7574
|
client.emit("error", err2);
|
|
7575
7575
|
}
|
|
@@ -8243,7 +8243,7 @@ var require_request = __commonJS({
|
|
|
8243
8243
|
return this;
|
|
8244
8244
|
}
|
|
8245
8245
|
};
|
|
8246
|
-
function processHeader(
|
|
8246
|
+
function processHeader(request7, key, val) {
|
|
8247
8247
|
if (val && (typeof val === "object" && !Array.isArray(val))) {
|
|
8248
8248
|
throw new InvalidArgumentError2(`invalid ${key} header`);
|
|
8249
8249
|
} else if (val === void 0) {
|
|
@@ -8290,24 +8290,24 @@ var require_request = __commonJS({
|
|
|
8290
8290
|
}
|
|
8291
8291
|
}
|
|
8292
8292
|
if (headerName === "host") {
|
|
8293
|
-
if (
|
|
8293
|
+
if (request7.host !== null) {
|
|
8294
8294
|
throw new InvalidArgumentError2("duplicate host header");
|
|
8295
8295
|
}
|
|
8296
8296
|
if (typeof val !== "string") {
|
|
8297
8297
|
throw new InvalidArgumentError2("invalid host header");
|
|
8298
8298
|
}
|
|
8299
|
-
|
|
8299
|
+
request7.host = val;
|
|
8300
8300
|
} else if (headerName === "content-length") {
|
|
8301
|
-
if (
|
|
8301
|
+
if (request7.contentLength !== null) {
|
|
8302
8302
|
throw new InvalidArgumentError2("duplicate content-length header");
|
|
8303
8303
|
}
|
|
8304
8304
|
if (!isValidContentLengthHeaderValue(val)) {
|
|
8305
8305
|
throw new InvalidArgumentError2("invalid content-length header");
|
|
8306
8306
|
}
|
|
8307
|
-
|
|
8308
|
-
} else if (
|
|
8309
|
-
|
|
8310
|
-
|
|
8307
|
+
request7.contentLength = parseInt(val, 10);
|
|
8308
|
+
} else if (request7.contentType === null && headerName === "content-type") {
|
|
8309
|
+
request7.contentType = val;
|
|
8310
|
+
request7.headers.push(key, val);
|
|
8311
8311
|
} else if (headerName === "transfer-encoding" || headerName === "keep-alive" || headerName === "upgrade") {
|
|
8312
8312
|
throw new InvalidArgumentError2(`invalid ${headerName} header`);
|
|
8313
8313
|
} else if (headerName === "connection") {
|
|
@@ -8321,13 +8321,13 @@ var require_request = __commonJS({
|
|
|
8321
8321
|
throw new InvalidArgumentError2("invalid connection header");
|
|
8322
8322
|
}
|
|
8323
8323
|
if (trimmed === "close") {
|
|
8324
|
-
|
|
8324
|
+
request7.reset = true;
|
|
8325
8325
|
}
|
|
8326
8326
|
}
|
|
8327
8327
|
} else if (headerName === "expect") {
|
|
8328
8328
|
throw new NotSupportedError("expect header not supported");
|
|
8329
8329
|
} else {
|
|
8330
|
-
|
|
8330
|
+
request7.headers.push(key, val);
|
|
8331
8331
|
}
|
|
8332
8332
|
}
|
|
8333
8333
|
module2.exports = Request;
|
|
@@ -10920,11 +10920,11 @@ var require_util3 = __commonJS({
|
|
|
10920
10920
|
function normalizeBinaryStringToUtf8(value) {
|
|
10921
10921
|
return Buffer.from(value, "binary").toString("utf8");
|
|
10922
10922
|
}
|
|
10923
|
-
function requestCurrentURL(
|
|
10924
|
-
return
|
|
10923
|
+
function requestCurrentURL(request7) {
|
|
10924
|
+
return request7.urlList[request7.urlList.length - 1];
|
|
10925
10925
|
}
|
|
10926
|
-
function requestBadPort(
|
|
10927
|
-
const url2 = requestCurrentURL(
|
|
10926
|
+
function requestBadPort(request7) {
|
|
10927
|
+
const url2 = requestCurrentURL(request7);
|
|
10928
10928
|
if (urlIsHttpHttpsScheme(url2) && badPortsSet.has(url2.port)) {
|
|
10929
10929
|
return "blocked";
|
|
10930
10930
|
}
|
|
@@ -10962,10 +10962,10 @@ var require_util3 = __commonJS({
|
|
|
10962
10962
|
}
|
|
10963
10963
|
return policy;
|
|
10964
10964
|
}
|
|
10965
|
-
function setRequestReferrerPolicyOnRedirect(
|
|
10965
|
+
function setRequestReferrerPolicyOnRedirect(request7, actualResponse) {
|
|
10966
10966
|
const policy = parseReferrerPolicy(actualResponse);
|
|
10967
10967
|
if (policy !== "") {
|
|
10968
|
-
|
|
10968
|
+
request7.referrerPolicy = policy;
|
|
10969
10969
|
}
|
|
10970
10970
|
}
|
|
10971
10971
|
function crossOriginResourcePolicyCheck() {
|
|
@@ -10982,33 +10982,33 @@ var require_util3 = __commonJS({
|
|
|
10982
10982
|
header = httpRequest.mode;
|
|
10983
10983
|
httpRequest.headersList.set("sec-fetch-mode", header, true);
|
|
10984
10984
|
}
|
|
10985
|
-
function appendRequestOriginHeader(
|
|
10986
|
-
let serializedOrigin =
|
|
10985
|
+
function appendRequestOriginHeader(request7) {
|
|
10986
|
+
let serializedOrigin = request7.origin;
|
|
10987
10987
|
if (serializedOrigin === "client" || serializedOrigin === void 0) {
|
|
10988
10988
|
return;
|
|
10989
10989
|
}
|
|
10990
|
-
if (
|
|
10991
|
-
|
|
10992
|
-
} else if (
|
|
10993
|
-
switch (
|
|
10990
|
+
if (request7.responseTainting === "cors" || request7.mode === "websocket") {
|
|
10991
|
+
request7.headersList.append("origin", serializedOrigin, true);
|
|
10992
|
+
} else if (request7.method !== "GET" && request7.method !== "HEAD") {
|
|
10993
|
+
switch (request7.referrerPolicy) {
|
|
10994
10994
|
case "no-referrer":
|
|
10995
10995
|
serializedOrigin = null;
|
|
10996
10996
|
break;
|
|
10997
10997
|
case "no-referrer-when-downgrade":
|
|
10998
10998
|
case "strict-origin":
|
|
10999
10999
|
case "strict-origin-when-cross-origin":
|
|
11000
|
-
if (
|
|
11000
|
+
if (request7.origin && urlHasHttpsScheme(request7.origin) && !urlHasHttpsScheme(requestCurrentURL(request7))) {
|
|
11001
11001
|
serializedOrigin = null;
|
|
11002
11002
|
}
|
|
11003
11003
|
break;
|
|
11004
11004
|
case "same-origin":
|
|
11005
|
-
if (!sameOrigin(
|
|
11005
|
+
if (!sameOrigin(request7, requestCurrentURL(request7))) {
|
|
11006
11006
|
serializedOrigin = null;
|
|
11007
11007
|
}
|
|
11008
11008
|
break;
|
|
11009
11009
|
default:
|
|
11010
11010
|
}
|
|
11011
|
-
|
|
11011
|
+
request7.headersList.append("origin", serializedOrigin, true);
|
|
11012
11012
|
}
|
|
11013
11013
|
}
|
|
11014
11014
|
function coarsenTime(timestamp, crossOriginIsolatedCapability) {
|
|
@@ -11062,18 +11062,18 @@ var require_util3 = __commonJS({
|
|
|
11062
11062
|
referrerPolicy: policyContainer.referrerPolicy
|
|
11063
11063
|
};
|
|
11064
11064
|
}
|
|
11065
|
-
function determineRequestsReferrer(
|
|
11066
|
-
const policy =
|
|
11065
|
+
function determineRequestsReferrer(request7) {
|
|
11066
|
+
const policy = request7.referrerPolicy;
|
|
11067
11067
|
assert2(policy);
|
|
11068
11068
|
let referrerSource = null;
|
|
11069
|
-
if (
|
|
11069
|
+
if (request7.referrer === "client") {
|
|
11070
11070
|
const globalOrigin = getGlobalOrigin();
|
|
11071
11071
|
if (!globalOrigin || globalOrigin.origin === "null") {
|
|
11072
11072
|
return "no-referrer";
|
|
11073
11073
|
}
|
|
11074
11074
|
referrerSource = new URL(globalOrigin);
|
|
11075
|
-
} else if (webidl.is.URL(
|
|
11076
|
-
referrerSource =
|
|
11075
|
+
} else if (webidl.is.URL(request7.referrer)) {
|
|
11076
|
+
referrerSource = request7.referrer;
|
|
11077
11077
|
}
|
|
11078
11078
|
let referrerURL = stripURLForReferrer(referrerSource);
|
|
11079
11079
|
const referrerOrigin = stripURLForReferrer(referrerSource, true);
|
|
@@ -11091,14 +11091,14 @@ var require_util3 = __commonJS({
|
|
|
11091
11091
|
case "unsafe-url":
|
|
11092
11092
|
return referrerURL;
|
|
11093
11093
|
case "strict-origin": {
|
|
11094
|
-
const currentURL = requestCurrentURL(
|
|
11094
|
+
const currentURL = requestCurrentURL(request7);
|
|
11095
11095
|
if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {
|
|
11096
11096
|
return "no-referrer";
|
|
11097
11097
|
}
|
|
11098
11098
|
return referrerOrigin;
|
|
11099
11099
|
}
|
|
11100
11100
|
case "strict-origin-when-cross-origin": {
|
|
11101
|
-
const currentURL = requestCurrentURL(
|
|
11101
|
+
const currentURL = requestCurrentURL(request7);
|
|
11102
11102
|
if (sameOrigin(referrerURL, currentURL)) {
|
|
11103
11103
|
return referrerURL;
|
|
11104
11104
|
}
|
|
@@ -11108,17 +11108,17 @@ var require_util3 = __commonJS({
|
|
|
11108
11108
|
return referrerOrigin;
|
|
11109
11109
|
}
|
|
11110
11110
|
case "same-origin":
|
|
11111
|
-
if (sameOrigin(
|
|
11111
|
+
if (sameOrigin(request7, referrerURL)) {
|
|
11112
11112
|
return referrerURL;
|
|
11113
11113
|
}
|
|
11114
11114
|
return "no-referrer";
|
|
11115
11115
|
case "origin-when-cross-origin":
|
|
11116
|
-
if (sameOrigin(
|
|
11116
|
+
if (sameOrigin(request7, referrerURL)) {
|
|
11117
11117
|
return referrerURL;
|
|
11118
11118
|
}
|
|
11119
11119
|
return referrerOrigin;
|
|
11120
11120
|
case "no-referrer-when-downgrade": {
|
|
11121
|
-
const currentURL = requestCurrentURL(
|
|
11121
|
+
const currentURL = requestCurrentURL(request7);
|
|
11122
11122
|
if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {
|
|
11123
11123
|
return "no-referrer";
|
|
11124
11124
|
}
|
|
@@ -11185,7 +11185,7 @@ var require_util3 = __commonJS({
|
|
|
11185
11185
|
if (url2.protocol === "blob:") return true;
|
|
11186
11186
|
return isOriginPotentiallyTrustworthy(url2.origin);
|
|
11187
11187
|
}
|
|
11188
|
-
function tryUpgradeRequestToAPotentiallyTrustworthyURL(
|
|
11188
|
+
function tryUpgradeRequestToAPotentiallyTrustworthyURL(request7) {
|
|
11189
11189
|
}
|
|
11190
11190
|
function sameOrigin(A, B) {
|
|
11191
11191
|
if (A.origin === B.origin && A.origin === "null") {
|
|
@@ -11564,7 +11564,7 @@ var require_util3 = __commonJS({
|
|
|
11564
11564
|
}
|
|
11565
11565
|
return gettingDecodingSplitting(value);
|
|
11566
11566
|
}
|
|
11567
|
-
function hasAuthenticationEntry(
|
|
11567
|
+
function hasAuthenticationEntry(request7) {
|
|
11568
11568
|
return false;
|
|
11569
11569
|
}
|
|
11570
11570
|
function includesCredentials(url2) {
|
|
@@ -12792,11 +12792,11 @@ var require_client_h1 = __commonJS({
|
|
|
12792
12792
|
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
|
|
12793
12793
|
return -1;
|
|
12794
12794
|
}
|
|
12795
|
-
const
|
|
12796
|
-
if (!
|
|
12795
|
+
const request7 = client[kQueue][client[kRunningIdx]];
|
|
12796
|
+
if (!request7) {
|
|
12797
12797
|
return -1;
|
|
12798
12798
|
}
|
|
12799
|
-
|
|
12799
|
+
request7.onResponseStarted();
|
|
12800
12800
|
return 0;
|
|
12801
12801
|
}
|
|
12802
12802
|
/**
|
|
@@ -12858,9 +12858,9 @@ var require_client_h1 = __commonJS({
|
|
|
12858
12858
|
assert2(!socket.destroyed);
|
|
12859
12859
|
assert2(!this.paused);
|
|
12860
12860
|
assert2((headers.length & 1) === 0);
|
|
12861
|
-
const
|
|
12862
|
-
assert2(
|
|
12863
|
-
assert2(
|
|
12861
|
+
const request7 = client[kQueue][client[kRunningIdx]];
|
|
12862
|
+
assert2(request7);
|
|
12863
|
+
assert2(request7.upgrade || request7.method === "CONNECT");
|
|
12864
12864
|
this.statusCode = 0;
|
|
12865
12865
|
this.statusText = "";
|
|
12866
12866
|
this.shouldKeepAlive = false;
|
|
@@ -12877,7 +12877,7 @@ var require_client_h1 = __commonJS({
|
|
|
12877
12877
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
12878
12878
|
client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade"));
|
|
12879
12879
|
try {
|
|
12880
|
-
|
|
12880
|
+
request7.onUpgrade(statusCode, headers, socket);
|
|
12881
12881
|
} catch (err) {
|
|
12882
12882
|
util.destroy(socket, err);
|
|
12883
12883
|
}
|
|
@@ -12898,8 +12898,8 @@ var require_client_h1 = __commonJS({
|
|
|
12898
12898
|
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
|
|
12899
12899
|
return -1;
|
|
12900
12900
|
}
|
|
12901
|
-
const
|
|
12902
|
-
if (!
|
|
12901
|
+
const request7 = client[kQueue][client[kRunningIdx]];
|
|
12902
|
+
if (!request7) {
|
|
12903
12903
|
return -1;
|
|
12904
12904
|
}
|
|
12905
12905
|
assert2(!this.upgrade);
|
|
@@ -12908,23 +12908,23 @@ var require_client_h1 = __commonJS({
|
|
|
12908
12908
|
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
|
|
12909
12909
|
return -1;
|
|
12910
12910
|
}
|
|
12911
|
-
if (upgrade && !
|
|
12911
|
+
if (upgrade && !request7.upgrade) {
|
|
12912
12912
|
util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket)));
|
|
12913
12913
|
return -1;
|
|
12914
12914
|
}
|
|
12915
12915
|
assert2(this.timeoutType === TIMEOUT_HEADERS);
|
|
12916
12916
|
this.statusCode = statusCode;
|
|
12917
12917
|
this.shouldKeepAlive = shouldKeepAlive || // Override llhttp value which does not allow keepAlive for HEAD.
|
|
12918
|
-
|
|
12918
|
+
request7.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive";
|
|
12919
12919
|
if (this.statusCode >= 200) {
|
|
12920
|
-
const bodyTimeout =
|
|
12920
|
+
const bodyTimeout = request7.bodyTimeout != null ? request7.bodyTimeout : client[kBodyTimeout];
|
|
12921
12921
|
this.setTimeout(bodyTimeout, TIMEOUT_BODY);
|
|
12922
12922
|
} else if (this.timeout) {
|
|
12923
12923
|
if (this.timeout.refresh) {
|
|
12924
12924
|
this.timeout.refresh();
|
|
12925
12925
|
}
|
|
12926
12926
|
}
|
|
12927
|
-
if (
|
|
12927
|
+
if (request7.method === "CONNECT") {
|
|
12928
12928
|
assert2(client[kRunning] === 1);
|
|
12929
12929
|
this.upgrade = true;
|
|
12930
12930
|
return 2;
|
|
@@ -12955,11 +12955,11 @@ var require_client_h1 = __commonJS({
|
|
|
12955
12955
|
} else {
|
|
12956
12956
|
socket[kReset] = true;
|
|
12957
12957
|
}
|
|
12958
|
-
const pause =
|
|
12959
|
-
if (
|
|
12958
|
+
const pause = request7.onHeaders(statusCode, headers, this.resume, statusText) === false;
|
|
12959
|
+
if (request7.aborted) {
|
|
12960
12960
|
return -1;
|
|
12961
12961
|
}
|
|
12962
|
-
if (
|
|
12962
|
+
if (request7.method === "HEAD") {
|
|
12963
12963
|
return 1;
|
|
12964
12964
|
}
|
|
12965
12965
|
if (statusCode < 200) {
|
|
@@ -12980,8 +12980,8 @@ var require_client_h1 = __commonJS({
|
|
|
12980
12980
|
if (socket.destroyed) {
|
|
12981
12981
|
return -1;
|
|
12982
12982
|
}
|
|
12983
|
-
const
|
|
12984
|
-
assert2(
|
|
12983
|
+
const request7 = client[kQueue][client[kRunningIdx]];
|
|
12984
|
+
assert2(request7);
|
|
12985
12985
|
assert2(this.timeoutType === TIMEOUT_BODY);
|
|
12986
12986
|
if (this.timeout) {
|
|
12987
12987
|
if (this.timeout.refresh) {
|
|
@@ -12994,7 +12994,7 @@ var require_client_h1 = __commonJS({
|
|
|
12994
12994
|
return -1;
|
|
12995
12995
|
}
|
|
12996
12996
|
this.bytesRead += buf.length;
|
|
12997
|
-
if (
|
|
12997
|
+
if (request7.onData(buf) === false) {
|
|
12998
12998
|
return constants.ERROR.PAUSED;
|
|
12999
12999
|
}
|
|
13000
13000
|
return 0;
|
|
@@ -13012,8 +13012,8 @@ var require_client_h1 = __commonJS({
|
|
|
13012
13012
|
}
|
|
13013
13013
|
assert2(statusCode >= 100);
|
|
13014
13014
|
assert2((this.headers.length & 1) === 0);
|
|
13015
|
-
const
|
|
13016
|
-
assert2(
|
|
13015
|
+
const request7 = client[kQueue][client[kRunningIdx]];
|
|
13016
|
+
assert2(request7);
|
|
13017
13017
|
this.statusCode = 0;
|
|
13018
13018
|
this.statusText = "";
|
|
13019
13019
|
this.bytesRead = 0;
|
|
@@ -13025,11 +13025,11 @@ var require_client_h1 = __commonJS({
|
|
|
13025
13025
|
if (statusCode < 200) {
|
|
13026
13026
|
return 0;
|
|
13027
13027
|
}
|
|
13028
|
-
if (
|
|
13028
|
+
if (request7.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) {
|
|
13029
13029
|
util.destroy(socket, new ResponseContentLengthMismatchError());
|
|
13030
13030
|
return -1;
|
|
13031
13031
|
}
|
|
13032
|
-
|
|
13032
|
+
request7.onComplete(headers);
|
|
13033
13033
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
13034
13034
|
socket[kSocketUsed] = client[kPending] === 0;
|
|
13035
13035
|
if (socket[kWriting]) {
|
|
@@ -13098,8 +13098,8 @@ var require_client_h1 = __commonJS({
|
|
|
13098
13098
|
return {
|
|
13099
13099
|
version: "h1",
|
|
13100
13100
|
defaultPipelining: 1,
|
|
13101
|
-
write(
|
|
13102
|
-
return writeH1(client,
|
|
13101
|
+
write(request7) {
|
|
13102
|
+
return writeH1(client, request7);
|
|
13103
13103
|
},
|
|
13104
13104
|
resume() {
|
|
13105
13105
|
resumeH1(client);
|
|
@@ -13126,18 +13126,18 @@ var require_client_h1 = __commonJS({
|
|
|
13126
13126
|
* @param {import('../core/request.js')} request
|
|
13127
13127
|
* @returns {boolean}
|
|
13128
13128
|
*/
|
|
13129
|
-
busy(
|
|
13129
|
+
busy(request7) {
|
|
13130
13130
|
if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) {
|
|
13131
13131
|
return true;
|
|
13132
13132
|
}
|
|
13133
|
-
if (
|
|
13134
|
-
if (client[kRunning] > 0 && !
|
|
13133
|
+
if (request7) {
|
|
13134
|
+
if (client[kRunning] > 0 && !request7.idempotent) {
|
|
13135
13135
|
return true;
|
|
13136
13136
|
}
|
|
13137
|
-
if (client[kRunning] > 0 && (
|
|
13137
|
+
if (client[kRunning] > 0 && (request7.upgrade || request7.method === "CONNECT")) {
|
|
13138
13138
|
return true;
|
|
13139
13139
|
}
|
|
13140
|
-
if (client[kRunning] > 0 && util.bodyLength(
|
|
13140
|
+
if (client[kRunning] > 0 && util.bodyLength(request7.body) !== 0 && (util.isStream(request7.body) || util.isAsyncIterable(request7.body) || util.isFormDataLike(request7.body))) {
|
|
13141
13141
|
return true;
|
|
13142
13142
|
}
|
|
13143
13143
|
}
|
|
@@ -13191,13 +13191,13 @@ var require_client_h1 = __commonJS({
|
|
|
13191
13191
|
assert2(client[kPending] === 0);
|
|
13192
13192
|
const requests = client[kQueue].splice(client[kRunningIdx]);
|
|
13193
13193
|
for (let i2 = 0; i2 < requests.length; i2++) {
|
|
13194
|
-
const
|
|
13195
|
-
util.errorRequest(client,
|
|
13194
|
+
const request7 = requests[i2];
|
|
13195
|
+
util.errorRequest(client, request7, err);
|
|
13196
13196
|
}
|
|
13197
13197
|
} else if (client[kRunning] > 0 && err.code !== "UND_ERR_INFO") {
|
|
13198
|
-
const
|
|
13198
|
+
const request7 = client[kQueue][client[kRunningIdx]];
|
|
13199
13199
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
13200
|
-
util.errorRequest(client,
|
|
13200
|
+
util.errorRequest(client, request7, err);
|
|
13201
13201
|
}
|
|
13202
13202
|
client[kPendingIdx] = client[kRunningIdx];
|
|
13203
13203
|
assert2(client[kRunning] === 0);
|
|
@@ -13265,8 +13265,8 @@ var require_client_h1 = __commonJS({
|
|
|
13265
13265
|
}
|
|
13266
13266
|
} else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {
|
|
13267
13267
|
if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {
|
|
13268
|
-
const
|
|
13269
|
-
const headersTimeout =
|
|
13268
|
+
const request7 = client[kQueue][client[kRunningIdx]];
|
|
13269
|
+
const headersTimeout = request7.headersTimeout != null ? request7.headersTimeout : client[kHeadersTimeout];
|
|
13270
13270
|
socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS);
|
|
13271
13271
|
}
|
|
13272
13272
|
}
|
|
@@ -13275,26 +13275,26 @@ var require_client_h1 = __commonJS({
|
|
|
13275
13275
|
function shouldSendContentLength(method) {
|
|
13276
13276
|
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
|
|
13277
13277
|
}
|
|
13278
|
-
function writeH1(client,
|
|
13279
|
-
const { method, path: path41, host, upgrade, blocking, reset } =
|
|
13280
|
-
let { body, headers, contentLength } =
|
|
13278
|
+
function writeH1(client, request7) {
|
|
13279
|
+
const { method, path: path41, host, upgrade, blocking, reset } = request7;
|
|
13280
|
+
let { body, headers, contentLength } = request7;
|
|
13281
13281
|
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH";
|
|
13282
13282
|
if (util.isFormDataLike(body)) {
|
|
13283
13283
|
if (!extractBody) {
|
|
13284
13284
|
extractBody = require_body().extractBody;
|
|
13285
13285
|
}
|
|
13286
13286
|
const [bodyStream, contentType] = extractBody(body);
|
|
13287
|
-
if (
|
|
13287
|
+
if (request7.contentType == null) {
|
|
13288
13288
|
headers.push("content-type", contentType);
|
|
13289
13289
|
}
|
|
13290
13290
|
body = bodyStream.stream;
|
|
13291
13291
|
contentLength = bodyStream.length;
|
|
13292
|
-
} else if (util.isBlobLike(body) &&
|
|
13292
|
+
} else if (util.isBlobLike(body) && request7.contentType == null) {
|
|
13293
13293
|
const contentType = body.type;
|
|
13294
13294
|
if (contentType) {
|
|
13295
13295
|
const contentTypeValue = `${contentType}`;
|
|
13296
13296
|
if (!util.isValidHeaderValue(contentTypeValue)) {
|
|
13297
|
-
util.errorRequest(client,
|
|
13297
|
+
util.errorRequest(client, request7, new InvalidArgumentError2("invalid content-type header"));
|
|
13298
13298
|
return false;
|
|
13299
13299
|
}
|
|
13300
13300
|
headers.push("content-type", contentTypeValue);
|
|
@@ -13306,14 +13306,14 @@ var require_client_h1 = __commonJS({
|
|
|
13306
13306
|
const bodyLength = util.bodyLength(body);
|
|
13307
13307
|
contentLength = bodyLength ?? contentLength;
|
|
13308
13308
|
if (contentLength === null) {
|
|
13309
|
-
contentLength =
|
|
13309
|
+
contentLength = request7.contentLength;
|
|
13310
13310
|
}
|
|
13311
13311
|
if (contentLength === 0 && !expectsPayload) {
|
|
13312
13312
|
contentLength = null;
|
|
13313
13313
|
}
|
|
13314
|
-
if (shouldSendContentLength(method) && contentLength > 0 &&
|
|
13314
|
+
if (shouldSendContentLength(method) && contentLength > 0 && request7.contentLength !== null && request7.contentLength !== contentLength) {
|
|
13315
13315
|
if (client[kStrictContentLength]) {
|
|
13316
|
-
util.errorRequest(client,
|
|
13316
|
+
util.errorRequest(client, request7, new RequestContentLengthMismatchError());
|
|
13317
13317
|
return false;
|
|
13318
13318
|
}
|
|
13319
13319
|
process.emitWarning(new RequestContentLengthMismatchError());
|
|
@@ -13321,19 +13321,19 @@ var require_client_h1 = __commonJS({
|
|
|
13321
13321
|
const socket = client[kSocket];
|
|
13322
13322
|
clearIdleSocketValidation(socket);
|
|
13323
13323
|
const abort = (err) => {
|
|
13324
|
-
if (
|
|
13324
|
+
if (request7.aborted || request7.completed) {
|
|
13325
13325
|
return;
|
|
13326
13326
|
}
|
|
13327
|
-
util.errorRequest(client,
|
|
13327
|
+
util.errorRequest(client, request7, err || new RequestAbortedError());
|
|
13328
13328
|
util.destroy(body);
|
|
13329
13329
|
util.destroy(socket, new InformationalError("aborted"));
|
|
13330
13330
|
};
|
|
13331
13331
|
try {
|
|
13332
|
-
|
|
13332
|
+
request7.onConnect(abort);
|
|
13333
13333
|
} catch (err) {
|
|
13334
|
-
util.errorRequest(client,
|
|
13334
|
+
util.errorRequest(client, request7, err);
|
|
13335
13335
|
}
|
|
13336
|
-
if (
|
|
13336
|
+
if (request7.aborted) {
|
|
13337
13337
|
return false;
|
|
13338
13338
|
}
|
|
13339
13339
|
if (method === "HEAD") {
|
|
@@ -13352,7 +13352,7 @@ var require_client_h1 = __commonJS({
|
|
|
13352
13352
|
socket[kBlocking] = true;
|
|
13353
13353
|
}
|
|
13354
13354
|
if (socket.setTypeOfService) {
|
|
13355
|
-
socket.setTypeOfService(
|
|
13355
|
+
socket.setTypeOfService(request7.typeOfService);
|
|
13356
13356
|
}
|
|
13357
13357
|
let header = `${method} ${path41} HTTP/1.1\r
|
|
13358
13358
|
`;
|
|
@@ -13387,31 +13387,31 @@ upgrade: ${upgrade}\r
|
|
|
13387
13387
|
}
|
|
13388
13388
|
}
|
|
13389
13389
|
if (channels.sendHeaders.hasSubscribers) {
|
|
13390
|
-
channels.sendHeaders.publish({ request:
|
|
13390
|
+
channels.sendHeaders.publish({ request: request7, headers: header, socket });
|
|
13391
13391
|
}
|
|
13392
13392
|
if (!body || bodyLength === 0) {
|
|
13393
|
-
writeBuffer(abort, null, client,
|
|
13393
|
+
writeBuffer(abort, null, client, request7, socket, contentLength, header, expectsPayload);
|
|
13394
13394
|
} else if (util.isBuffer(body)) {
|
|
13395
|
-
writeBuffer(abort, body, client,
|
|
13395
|
+
writeBuffer(abort, body, client, request7, socket, contentLength, header, expectsPayload);
|
|
13396
13396
|
} else if (util.isBlobLike(body)) {
|
|
13397
13397
|
if (typeof body.stream === "function") {
|
|
13398
|
-
writeIterable(abort, body.stream(), client,
|
|
13398
|
+
writeIterable(abort, body.stream(), client, request7, socket, contentLength, header, expectsPayload);
|
|
13399
13399
|
} else {
|
|
13400
|
-
writeBlob(abort, body, client,
|
|
13400
|
+
writeBlob(abort, body, client, request7, socket, contentLength, header, expectsPayload);
|
|
13401
13401
|
}
|
|
13402
13402
|
} else if (util.isStream(body)) {
|
|
13403
|
-
writeStream(abort, body, client,
|
|
13403
|
+
writeStream(abort, body, client, request7, socket, contentLength, header, expectsPayload);
|
|
13404
13404
|
} else if (util.isIterable(body)) {
|
|
13405
|
-
writeIterable(abort, body, client,
|
|
13405
|
+
writeIterable(abort, body, client, request7, socket, contentLength, header, expectsPayload);
|
|
13406
13406
|
} else {
|
|
13407
13407
|
assert2(false);
|
|
13408
13408
|
}
|
|
13409
13409
|
return true;
|
|
13410
13410
|
}
|
|
13411
|
-
function writeStream(abort, body, client,
|
|
13411
|
+
function writeStream(abort, body, client, request7, socket, contentLength, header, expectsPayload) {
|
|
13412
13412
|
assert2(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined");
|
|
13413
13413
|
let finished = false;
|
|
13414
|
-
const writer = new AsyncWriter({ abort, socket, request:
|
|
13414
|
+
const writer = new AsyncWriter({ abort, socket, request: request7, contentLength, client, expectsPayload, header });
|
|
13415
13415
|
const onData = function(chunk) {
|
|
13416
13416
|
if (finished) {
|
|
13417
13417
|
return;
|
|
@@ -13477,7 +13477,7 @@ upgrade: ${upgrade}\r
|
|
|
13477
13477
|
setImmediate(onClose);
|
|
13478
13478
|
}
|
|
13479
13479
|
}
|
|
13480
|
-
function writeBuffer(abort, body, client,
|
|
13480
|
+
function writeBuffer(abort, body, client, request7, socket, contentLength, header, expectsPayload) {
|
|
13481
13481
|
try {
|
|
13482
13482
|
if (!body) {
|
|
13483
13483
|
if (contentLength === 0) {
|
|
@@ -13497,18 +13497,18 @@ upgrade: ${upgrade}\r
|
|
|
13497
13497
|
`, "latin1");
|
|
13498
13498
|
socket.write(body);
|
|
13499
13499
|
socket.uncork();
|
|
13500
|
-
|
|
13501
|
-
if (!expectsPayload &&
|
|
13500
|
+
request7.onBodySent(body);
|
|
13501
|
+
if (!expectsPayload && request7.reset !== false) {
|
|
13502
13502
|
socket[kReset] = true;
|
|
13503
13503
|
}
|
|
13504
13504
|
}
|
|
13505
|
-
|
|
13505
|
+
request7.onRequestSent();
|
|
13506
13506
|
client[kResume]();
|
|
13507
13507
|
} catch (err) {
|
|
13508
13508
|
abort(err);
|
|
13509
13509
|
}
|
|
13510
13510
|
}
|
|
13511
|
-
async function writeBlob(abort, body, client,
|
|
13511
|
+
async function writeBlob(abort, body, client, request7, socket, contentLength, header, expectsPayload) {
|
|
13512
13512
|
assert2(contentLength === body.size, "blob body must have content length");
|
|
13513
13513
|
try {
|
|
13514
13514
|
if (contentLength != null && contentLength !== body.size) {
|
|
@@ -13521,9 +13521,9 @@ upgrade: ${upgrade}\r
|
|
|
13521
13521
|
`, "latin1");
|
|
13522
13522
|
socket.write(buffer);
|
|
13523
13523
|
socket.uncork();
|
|
13524
|
-
|
|
13525
|
-
|
|
13526
|
-
if (!expectsPayload &&
|
|
13524
|
+
request7.onBodySent(buffer);
|
|
13525
|
+
request7.onRequestSent();
|
|
13526
|
+
if (!expectsPayload && request7.reset !== false) {
|
|
13527
13527
|
socket[kReset] = true;
|
|
13528
13528
|
}
|
|
13529
13529
|
client[kResume]();
|
|
@@ -13531,7 +13531,7 @@ upgrade: ${upgrade}\r
|
|
|
13531
13531
|
abort(err);
|
|
13532
13532
|
}
|
|
13533
13533
|
}
|
|
13534
|
-
async function writeIterable(abort, body, client,
|
|
13534
|
+
async function writeIterable(abort, body, client, request7, socket, contentLength, header, expectsPayload) {
|
|
13535
13535
|
assert2(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined");
|
|
13536
13536
|
let callback = null;
|
|
13537
13537
|
function onDrain() {
|
|
@@ -13550,7 +13550,7 @@ upgrade: ${upgrade}\r
|
|
|
13550
13550
|
}
|
|
13551
13551
|
});
|
|
13552
13552
|
socket.on("close", onDrain).on("drain", onDrain);
|
|
13553
|
-
const writer = new AsyncWriter({ abort, socket, request:
|
|
13553
|
+
const writer = new AsyncWriter({ abort, socket, request: request7, contentLength, client, expectsPayload, header });
|
|
13554
13554
|
try {
|
|
13555
13555
|
for await (const chunk of body) {
|
|
13556
13556
|
if (socket[kError]) {
|
|
@@ -13579,9 +13579,9 @@ upgrade: ${upgrade}\r
|
|
|
13579
13579
|
* @param {boolean} arg.expectsPayload
|
|
13580
13580
|
* @param {string} arg.header
|
|
13581
13581
|
*/
|
|
13582
|
-
constructor({ abort, socket, request:
|
|
13582
|
+
constructor({ abort, socket, request: request7, contentLength, client, expectsPayload, header }) {
|
|
13583
13583
|
this.socket = socket;
|
|
13584
|
-
this.request =
|
|
13584
|
+
this.request = request7;
|
|
13585
13585
|
this.contentLength = contentLength;
|
|
13586
13586
|
this.client = client;
|
|
13587
13587
|
this.bytesWritten = 0;
|
|
@@ -13595,7 +13595,7 @@ upgrade: ${upgrade}\r
|
|
|
13595
13595
|
* @returns
|
|
13596
13596
|
*/
|
|
13597
13597
|
write(chunk) {
|
|
13598
|
-
const { socket, request:
|
|
13598
|
+
const { socket, request: request7, contentLength, client, bytesWritten, expectsPayload, header } = this;
|
|
13599
13599
|
if (socket[kError]) {
|
|
13600
13600
|
throw socket[kError];
|
|
13601
13601
|
}
|
|
@@ -13614,7 +13614,7 @@ upgrade: ${upgrade}\r
|
|
|
13614
13614
|
}
|
|
13615
13615
|
socket.cork();
|
|
13616
13616
|
if (bytesWritten === 0) {
|
|
13617
|
-
if (!expectsPayload &&
|
|
13617
|
+
if (!expectsPayload && request7.reset !== false) {
|
|
13618
13618
|
socket[kReset] = true;
|
|
13619
13619
|
}
|
|
13620
13620
|
if (contentLength === null) {
|
|
@@ -13634,7 +13634,7 @@ ${len.toString(16)}\r
|
|
|
13634
13634
|
this.bytesWritten += len;
|
|
13635
13635
|
const ret = socket.write(chunk);
|
|
13636
13636
|
socket.uncork();
|
|
13637
|
-
|
|
13637
|
+
request7.onBodySent(chunk);
|
|
13638
13638
|
if (!ret) {
|
|
13639
13639
|
if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
|
|
13640
13640
|
if (socket[kParser].timeout.refresh) {
|
|
@@ -13648,8 +13648,8 @@ ${len.toString(16)}\r
|
|
|
13648
13648
|
* @returns {void}
|
|
13649
13649
|
*/
|
|
13650
13650
|
end() {
|
|
13651
|
-
const { socket, contentLength, client, bytesWritten, expectsPayload, header, request:
|
|
13652
|
-
|
|
13651
|
+
const { socket, contentLength, client, bytesWritten, expectsPayload, header, request: request7 } = this;
|
|
13652
|
+
request7.onRequestSent();
|
|
13653
13653
|
socket[kWriting] = false;
|
|
13654
13654
|
if (socket[kError]) {
|
|
13655
13655
|
throw socket[kError];
|
|
@@ -13829,8 +13829,8 @@ var require_client_h2 = __commonJS({
|
|
|
13829
13829
|
* @param {import('../core/request.js')} request
|
|
13830
13830
|
* @returns {boolean}
|
|
13831
13831
|
*/
|
|
13832
|
-
write(
|
|
13833
|
-
return writeH2(client,
|
|
13832
|
+
write(request7) {
|
|
13833
|
+
return writeH2(client, request7);
|
|
13834
13834
|
},
|
|
13835
13835
|
/**
|
|
13836
13836
|
* @returns {void}
|
|
@@ -13859,14 +13859,14 @@ var require_client_h2 = __commonJS({
|
|
|
13859
13859
|
* @param {import('../core/request.js')} request
|
|
13860
13860
|
* @returns {boolean}
|
|
13861
13861
|
*/
|
|
13862
|
-
busy(
|
|
13863
|
-
if (
|
|
13862
|
+
busy(request7) {
|
|
13863
|
+
if (request7 != null) {
|
|
13864
13864
|
if (client[kRunning] > 0) {
|
|
13865
|
-
if (
|
|
13866
|
-
if ((
|
|
13867
|
-
if (util.bodyLength(
|
|
13865
|
+
if (request7.idempotent === false) return true;
|
|
13866
|
+
if ((request7.upgrade === "websocket" || request7.method === "CONNECT") && session[kRemoteSettings] === false) return true;
|
|
13867
|
+
if (util.bodyLength(request7.body) !== 0 && (util.isStream(request7.body) || util.isAsyncIterable(request7.body) || util.isFormDataLike(request7.body))) return true;
|
|
13868
13868
|
} else {
|
|
13869
|
-
return (
|
|
13869
|
+
return (request7.upgrade === "websocket" || request7.method === "CONNECT") && session[kRemoteSettings] === false;
|
|
13870
13870
|
}
|
|
13871
13871
|
}
|
|
13872
13872
|
return false;
|
|
@@ -13942,15 +13942,15 @@ var require_client_h2 = __commonJS({
|
|
|
13942
13942
|
this.destroy(err);
|
|
13943
13943
|
util.destroy(this[kSocket], err);
|
|
13944
13944
|
}
|
|
13945
|
-
function completeRequest(client,
|
|
13945
|
+
function completeRequest(client, request7, resetPendingIdx = false) {
|
|
13946
13946
|
const queue = client[kQueue];
|
|
13947
13947
|
const runningIdx = client[kRunningIdx];
|
|
13948
|
-
if (runningIdx < client[kPendingIdx] && queue[runningIdx] ===
|
|
13948
|
+
if (runningIdx < client[kPendingIdx] && queue[runningIdx] === request7) {
|
|
13949
13949
|
queue[runningIdx] = null;
|
|
13950
13950
|
client[kRunningIdx] = runningIdx + 1;
|
|
13951
13951
|
return;
|
|
13952
13952
|
}
|
|
13953
|
-
const index = queue.indexOf(
|
|
13953
|
+
const index = queue.indexOf(request7, runningIdx);
|
|
13954
13954
|
if (index === -1 || index >= client[kPendingIdx]) {
|
|
13955
13955
|
return;
|
|
13956
13956
|
}
|
|
@@ -13969,10 +13969,10 @@ var require_client_h2 = __commonJS({
|
|
|
13969
13969
|
this[kHTTP2Session] = null;
|
|
13970
13970
|
util.destroy(this[kSocket], err);
|
|
13971
13971
|
if (client[kRunningIdx] < client[kQueue].length) {
|
|
13972
|
-
const
|
|
13972
|
+
const request7 = client[kQueue][client[kRunningIdx]];
|
|
13973
13973
|
client[kQueue][client[kRunningIdx]++] = null;
|
|
13974
|
-
if (
|
|
13975
|
-
util.errorRequest(client,
|
|
13974
|
+
if (request7 != null) {
|
|
13975
|
+
util.errorRequest(client, request7, err);
|
|
13976
13976
|
}
|
|
13977
13977
|
client[kPendingIdx] = client[kRunningIdx];
|
|
13978
13978
|
}
|
|
@@ -13995,9 +13995,9 @@ var require_client_h2 = __commonJS({
|
|
|
13995
13995
|
assert2(client[kPending] === 0);
|
|
13996
13996
|
const requests = client[kQueue].splice(client[kRunningIdx]);
|
|
13997
13997
|
for (let i2 = 0; i2 < requests.length; i2++) {
|
|
13998
|
-
const
|
|
13999
|
-
if (
|
|
14000
|
-
util.errorRequest(client,
|
|
13998
|
+
const request7 = requests[i2];
|
|
13999
|
+
if (request7 != null) {
|
|
14000
|
+
util.errorRequest(client, request7, err);
|
|
14001
14001
|
}
|
|
14002
14002
|
}
|
|
14003
14003
|
}
|
|
@@ -14029,14 +14029,14 @@ var require_client_h2 = __commonJS({
|
|
|
14029
14029
|
function shouldSendContentLength(method) {
|
|
14030
14030
|
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
|
|
14031
14031
|
}
|
|
14032
|
-
function writeH2(client,
|
|
14033
|
-
const headersTimeout =
|
|
14034
|
-
const bodyTimeout =
|
|
14032
|
+
function writeH2(client, request7) {
|
|
14033
|
+
const headersTimeout = request7.headersTimeout ?? client[kHeadersTimeout];
|
|
14034
|
+
const bodyTimeout = request7.bodyTimeout ?? client[kBodyTimeout];
|
|
14035
14035
|
const session = client[kHTTP2Session];
|
|
14036
|
-
const { method, path: path41, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } =
|
|
14037
|
-
let { body } =
|
|
14036
|
+
const { method, path: path41, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request7;
|
|
14037
|
+
let { body } = request7;
|
|
14038
14038
|
if (upgrade != null && upgrade !== "websocket") {
|
|
14039
|
-
util.errorRequest(client,
|
|
14039
|
+
util.errorRequest(client, request7, new InvalidArgumentError2(`Custom upgrade "${upgrade}" not supported over HTTP/2`));
|
|
14040
14040
|
return false;
|
|
14041
14041
|
}
|
|
14042
14042
|
const headers = {};
|
|
@@ -14070,33 +14070,33 @@ var require_client_h2 = __commonJS({
|
|
|
14070
14070
|
headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname3}${port ? `:${port}` : ""}`;
|
|
14071
14071
|
headers[HTTP2_HEADER_METHOD] = method;
|
|
14072
14072
|
const abort = (err) => {
|
|
14073
|
-
if (
|
|
14073
|
+
if (request7.aborted || request7.completed) {
|
|
14074
14074
|
return;
|
|
14075
14075
|
}
|
|
14076
14076
|
err = err || new RequestAbortedError();
|
|
14077
|
-
util.errorRequest(client,
|
|
14077
|
+
util.errorRequest(client, request7, err);
|
|
14078
14078
|
if (stream != null) {
|
|
14079
14079
|
stream.removeAllListeners("data");
|
|
14080
14080
|
stream.close();
|
|
14081
14081
|
client[kOnError](err);
|
|
14082
|
-
completeRequest(client,
|
|
14082
|
+
completeRequest(client, request7);
|
|
14083
14083
|
client[kResume]();
|
|
14084
14084
|
}
|
|
14085
14085
|
util.destroy(body, err);
|
|
14086
14086
|
};
|
|
14087
14087
|
try {
|
|
14088
|
-
|
|
14088
|
+
request7.onConnect(abort);
|
|
14089
14089
|
} catch (err) {
|
|
14090
|
-
util.errorRequest(client,
|
|
14090
|
+
util.errorRequest(client, request7, err);
|
|
14091
14091
|
}
|
|
14092
|
-
if (
|
|
14092
|
+
if (request7.aborted) {
|
|
14093
14093
|
return false;
|
|
14094
14094
|
}
|
|
14095
14095
|
if (upgrade || method === "CONNECT") {
|
|
14096
14096
|
session.ref();
|
|
14097
14097
|
if (upgrade === "websocket") {
|
|
14098
14098
|
if (session[kEnableConnectProtocol] === false) {
|
|
14099
|
-
util.errorRequest(client,
|
|
14099
|
+
util.errorRequest(client, request7, new InformationalError("HTTP/2: Extended CONNECT protocol not supported by server"));
|
|
14100
14100
|
session.unref();
|
|
14101
14101
|
return false;
|
|
14102
14102
|
}
|
|
@@ -14112,9 +14112,9 @@ var require_client_h2 = __commonJS({
|
|
|
14112
14112
|
stream[kHTTP2Stream] = true;
|
|
14113
14113
|
stream.once("response", (headers2, _flags) => {
|
|
14114
14114
|
const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
|
|
14115
|
-
|
|
14115
|
+
request7.onUpgrade(statusCode, parseH2Headers(realHeaders), stream);
|
|
14116
14116
|
++session[kOpenStreams];
|
|
14117
|
-
completeRequest(client,
|
|
14117
|
+
completeRequest(client, request7);
|
|
14118
14118
|
});
|
|
14119
14119
|
stream.on("error", () => {
|
|
14120
14120
|
if (stream.rstCode === NGHTTP2_REFUSED_STREAM || stream.rstCode === NGHTTP2_CANCEL) {
|
|
@@ -14132,9 +14132,9 @@ var require_client_h2 = __commonJS({
|
|
|
14132
14132
|
stream[kHTTP2Stream] = true;
|
|
14133
14133
|
stream.on("response", (headers2) => {
|
|
14134
14134
|
const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
|
|
14135
|
-
|
|
14135
|
+
request7.onUpgrade(statusCode, parseH2Headers(realHeaders), stream);
|
|
14136
14136
|
++session[kOpenStreams];
|
|
14137
|
-
completeRequest(client,
|
|
14137
|
+
completeRequest(client, request7);
|
|
14138
14138
|
});
|
|
14139
14139
|
stream.on("error", abort);
|
|
14140
14140
|
stream.once("close", () => {
|
|
@@ -14159,14 +14159,14 @@ var require_client_h2 = __commonJS({
|
|
|
14159
14159
|
contentLength = bodyStream.length;
|
|
14160
14160
|
}
|
|
14161
14161
|
if (contentLength == null) {
|
|
14162
|
-
contentLength =
|
|
14162
|
+
contentLength = request7.contentLength;
|
|
14163
14163
|
}
|
|
14164
14164
|
if (!expectsPayload) {
|
|
14165
14165
|
contentLength = null;
|
|
14166
14166
|
}
|
|
14167
|
-
if (shouldSendContentLength(method) && contentLength > 0 &&
|
|
14167
|
+
if (shouldSendContentLength(method) && contentLength > 0 && request7.contentLength != null && request7.contentLength !== contentLength) {
|
|
14168
14168
|
if (client[kStrictContentLength]) {
|
|
14169
|
-
util.errorRequest(client,
|
|
14169
|
+
util.errorRequest(client, request7, new RequestContentLengthMismatchError());
|
|
14170
14170
|
return false;
|
|
14171
14171
|
}
|
|
14172
14172
|
process.emitWarning(new RequestContentLengthMismatchError());
|
|
@@ -14182,7 +14182,7 @@ var require_client_h2 = __commonJS({
|
|
|
14182
14182
|
header += `${key}: ${headers[key]}\r
|
|
14183
14183
|
`;
|
|
14184
14184
|
}
|
|
14185
|
-
channels.sendHeaders.publish({ request:
|
|
14185
|
+
channels.sendHeaders.publish({ request: request7, headers: header, socket: session[kSocket] });
|
|
14186
14186
|
}
|
|
14187
14187
|
const shouldEndStream = method === "GET" || method === "HEAD" || body === null;
|
|
14188
14188
|
if (expectContinue) {
|
|
@@ -14203,21 +14203,21 @@ var require_client_h2 = __commonJS({
|
|
|
14203
14203
|
let responseReceived = false;
|
|
14204
14204
|
stream.once("response", (headers2) => {
|
|
14205
14205
|
const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
|
|
14206
|
-
|
|
14206
|
+
request7.onResponseStarted();
|
|
14207
14207
|
responseReceived = true;
|
|
14208
14208
|
stream.setTimeout(bodyTimeout);
|
|
14209
|
-
if (
|
|
14209
|
+
if (request7.aborted) {
|
|
14210
14210
|
stream.removeAllListeners("data");
|
|
14211
14211
|
return;
|
|
14212
14212
|
}
|
|
14213
|
-
if (
|
|
14213
|
+
if (request7.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) {
|
|
14214
14214
|
stream.pause();
|
|
14215
14215
|
}
|
|
14216
14216
|
stream.on("data", (chunk) => {
|
|
14217
|
-
if (
|
|
14217
|
+
if (request7.aborted || request7.completed) {
|
|
14218
14218
|
return;
|
|
14219
14219
|
}
|
|
14220
|
-
if (
|
|
14220
|
+
if (request7.onData(chunk) === false) {
|
|
14221
14221
|
stream.pause();
|
|
14222
14222
|
}
|
|
14223
14223
|
});
|
|
@@ -14225,14 +14225,14 @@ var require_client_h2 = __commonJS({
|
|
|
14225
14225
|
stream.once("end", () => {
|
|
14226
14226
|
stream.removeAllListeners("data");
|
|
14227
14227
|
if (responseReceived) {
|
|
14228
|
-
if (!
|
|
14229
|
-
|
|
14228
|
+
if (!request7.aborted && !request7.completed) {
|
|
14229
|
+
request7.onComplete({});
|
|
14230
14230
|
}
|
|
14231
|
-
completeRequest(client,
|
|
14231
|
+
completeRequest(client, request7);
|
|
14232
14232
|
client[kResume]();
|
|
14233
14233
|
} else {
|
|
14234
14234
|
abort(new InformationalError("HTTP/2: stream half-closed (remote)"));
|
|
14235
|
-
completeRequest(client,
|
|
14235
|
+
completeRequest(client, request7, true);
|
|
14236
14236
|
client[kResume]();
|
|
14237
14237
|
}
|
|
14238
14238
|
});
|
|
@@ -14242,7 +14242,7 @@ var require_client_h2 = __commonJS({
|
|
|
14242
14242
|
if (session[kOpenStreams] === 0) {
|
|
14243
14243
|
session.unref();
|
|
14244
14244
|
}
|
|
14245
|
-
if (!
|
|
14245
|
+
if (!request7.aborted && !request7.completed) {
|
|
14246
14246
|
abort(new InformationalError("HTTP/2: stream closed before the response was complete"));
|
|
14247
14247
|
}
|
|
14248
14248
|
});
|
|
@@ -14267,11 +14267,11 @@ var require_client_h2 = __commonJS({
|
|
|
14267
14267
|
abort(err);
|
|
14268
14268
|
});
|
|
14269
14269
|
stream.once("trailers", (trailers) => {
|
|
14270
|
-
if (
|
|
14270
|
+
if (request7.aborted || request7.completed) {
|
|
14271
14271
|
return;
|
|
14272
14272
|
}
|
|
14273
14273
|
stream.removeAllListeners("data");
|
|
14274
|
-
|
|
14274
|
+
request7.onComplete(trailers);
|
|
14275
14275
|
});
|
|
14276
14276
|
return true;
|
|
14277
14277
|
function writeBodyH2() {
|
|
@@ -14281,7 +14281,7 @@ var require_client_h2 = __commonJS({
|
|
|
14281
14281
|
stream,
|
|
14282
14282
|
null,
|
|
14283
14283
|
client,
|
|
14284
|
-
|
|
14284
|
+
request7,
|
|
14285
14285
|
client[kSocket],
|
|
14286
14286
|
contentLength,
|
|
14287
14287
|
expectsPayload
|
|
@@ -14292,7 +14292,7 @@ var require_client_h2 = __commonJS({
|
|
|
14292
14292
|
stream,
|
|
14293
14293
|
body,
|
|
14294
14294
|
client,
|
|
14295
|
-
|
|
14295
|
+
request7,
|
|
14296
14296
|
client[kSocket],
|
|
14297
14297
|
contentLength,
|
|
14298
14298
|
expectsPayload
|
|
@@ -14304,7 +14304,7 @@ var require_client_h2 = __commonJS({
|
|
|
14304
14304
|
stream,
|
|
14305
14305
|
body.stream(),
|
|
14306
14306
|
client,
|
|
14307
|
-
|
|
14307
|
+
request7,
|
|
14308
14308
|
client[kSocket],
|
|
14309
14309
|
contentLength,
|
|
14310
14310
|
expectsPayload
|
|
@@ -14315,7 +14315,7 @@ var require_client_h2 = __commonJS({
|
|
|
14315
14315
|
stream,
|
|
14316
14316
|
body,
|
|
14317
14317
|
client,
|
|
14318
|
-
|
|
14318
|
+
request7,
|
|
14319
14319
|
client[kSocket],
|
|
14320
14320
|
contentLength,
|
|
14321
14321
|
expectsPayload
|
|
@@ -14329,7 +14329,7 @@ var require_client_h2 = __commonJS({
|
|
|
14329
14329
|
stream,
|
|
14330
14330
|
body,
|
|
14331
14331
|
client,
|
|
14332
|
-
|
|
14332
|
+
request7,
|
|
14333
14333
|
contentLength
|
|
14334
14334
|
);
|
|
14335
14335
|
} else if (util.isIterable(body)) {
|
|
@@ -14338,7 +14338,7 @@ var require_client_h2 = __commonJS({
|
|
|
14338
14338
|
stream,
|
|
14339
14339
|
body,
|
|
14340
14340
|
client,
|
|
14341
|
-
|
|
14341
|
+
request7,
|
|
14342
14342
|
client[kSocket],
|
|
14343
14343
|
contentLength,
|
|
14344
14344
|
expectsPayload
|
|
@@ -14348,7 +14348,7 @@ var require_client_h2 = __commonJS({
|
|
|
14348
14348
|
}
|
|
14349
14349
|
}
|
|
14350
14350
|
}
|
|
14351
|
-
function writeBuffer(abort, h2stream, body, client,
|
|
14351
|
+
function writeBuffer(abort, h2stream, body, client, request7, socket, contentLength, expectsPayload) {
|
|
14352
14352
|
try {
|
|
14353
14353
|
if (body != null && util.isBuffer(body)) {
|
|
14354
14354
|
assert2(contentLength === body.byteLength, "buffer body must have content length");
|
|
@@ -14356,18 +14356,18 @@ var require_client_h2 = __commonJS({
|
|
|
14356
14356
|
h2stream.write(body);
|
|
14357
14357
|
h2stream.uncork();
|
|
14358
14358
|
h2stream.end();
|
|
14359
|
-
|
|
14359
|
+
request7.onBodySent(body);
|
|
14360
14360
|
}
|
|
14361
14361
|
if (!expectsPayload) {
|
|
14362
14362
|
socket[kReset] = true;
|
|
14363
14363
|
}
|
|
14364
|
-
|
|
14364
|
+
request7.onRequestSent();
|
|
14365
14365
|
client[kResume]();
|
|
14366
14366
|
} catch (error62) {
|
|
14367
14367
|
abort(error62);
|
|
14368
14368
|
}
|
|
14369
14369
|
}
|
|
14370
|
-
function writeStream(abort, socket, expectsPayload, h2stream, body, client,
|
|
14370
|
+
function writeStream(abort, socket, expectsPayload, h2stream, body, client, request7, contentLength) {
|
|
14371
14371
|
assert2(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined");
|
|
14372
14372
|
const pipe2 = pipeline(
|
|
14373
14373
|
body,
|
|
@@ -14378,7 +14378,7 @@ var require_client_h2 = __commonJS({
|
|
|
14378
14378
|
abort(err);
|
|
14379
14379
|
} else {
|
|
14380
14380
|
util.removeAllListeners(pipe2);
|
|
14381
|
-
|
|
14381
|
+
request7.onRequestSent();
|
|
14382
14382
|
if (!expectsPayload) {
|
|
14383
14383
|
socket[kReset] = true;
|
|
14384
14384
|
}
|
|
@@ -14388,10 +14388,10 @@ var require_client_h2 = __commonJS({
|
|
|
14388
14388
|
);
|
|
14389
14389
|
util.addListener(pipe2, "data", onPipeData);
|
|
14390
14390
|
function onPipeData(chunk) {
|
|
14391
|
-
|
|
14391
|
+
request7.onBodySent(chunk);
|
|
14392
14392
|
}
|
|
14393
14393
|
}
|
|
14394
|
-
async function writeBlob(abort, h2stream, body, client,
|
|
14394
|
+
async function writeBlob(abort, h2stream, body, client, request7, socket, contentLength, expectsPayload) {
|
|
14395
14395
|
assert2(contentLength === body.size, "blob body must have content length");
|
|
14396
14396
|
try {
|
|
14397
14397
|
if (contentLength != null && contentLength !== body.size) {
|
|
@@ -14402,8 +14402,8 @@ var require_client_h2 = __commonJS({
|
|
|
14402
14402
|
h2stream.write(buffer);
|
|
14403
14403
|
h2stream.uncork();
|
|
14404
14404
|
h2stream.end();
|
|
14405
|
-
|
|
14406
|
-
|
|
14405
|
+
request7.onBodySent(buffer);
|
|
14406
|
+
request7.onRequestSent();
|
|
14407
14407
|
if (!expectsPayload) {
|
|
14408
14408
|
socket[kReset] = true;
|
|
14409
14409
|
}
|
|
@@ -14412,7 +14412,7 @@ var require_client_h2 = __commonJS({
|
|
|
14412
14412
|
abort(err);
|
|
14413
14413
|
}
|
|
14414
14414
|
}
|
|
14415
|
-
async function writeIterable(abort, h2stream, body, client,
|
|
14415
|
+
async function writeIterable(abort, h2stream, body, client, request7, socket, contentLength, expectsPayload) {
|
|
14416
14416
|
assert2(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined");
|
|
14417
14417
|
let callback = null;
|
|
14418
14418
|
function onDrain() {
|
|
@@ -14437,13 +14437,13 @@ var require_client_h2 = __commonJS({
|
|
|
14437
14437
|
throw socket[kError];
|
|
14438
14438
|
}
|
|
14439
14439
|
const res = h2stream.write(chunk);
|
|
14440
|
-
|
|
14440
|
+
request7.onBodySent(chunk);
|
|
14441
14441
|
if (!res) {
|
|
14442
14442
|
await waitForDrain();
|
|
14443
14443
|
}
|
|
14444
14444
|
}
|
|
14445
14445
|
h2stream.end();
|
|
14446
|
-
|
|
14446
|
+
request7.onRequestSent();
|
|
14447
14447
|
if (!expectsPayload) {
|
|
14448
14448
|
socket[kReset] = true;
|
|
14449
14449
|
}
|
|
@@ -14728,10 +14728,10 @@ var require_client = __commonJS({
|
|
|
14728
14728
|
this.once("connect", cb);
|
|
14729
14729
|
}
|
|
14730
14730
|
[kDispatch](opts, handler) {
|
|
14731
|
-
const
|
|
14732
|
-
this[kQueue].push(
|
|
14731
|
+
const request7 = new Request(this[kUrl].origin, opts, handler);
|
|
14732
|
+
this[kQueue].push(request7);
|
|
14733
14733
|
if (this[kResuming]) {
|
|
14734
|
-
} else if (util.bodyLength(
|
|
14734
|
+
} else if (util.bodyLength(request7.body) == null && util.isIterable(request7.body)) {
|
|
14735
14735
|
this[kResuming] = 1;
|
|
14736
14736
|
queueMicrotask(() => resume(this));
|
|
14737
14737
|
} else {
|
|
@@ -14755,9 +14755,9 @@ var require_client = __commonJS({
|
|
|
14755
14755
|
return new Promise((resolve) => {
|
|
14756
14756
|
const requests = this[kQueue].splice(this[kPendingIdx]);
|
|
14757
14757
|
for (let i2 = 0; i2 < requests.length; i2++) {
|
|
14758
|
-
const
|
|
14759
|
-
if (
|
|
14760
|
-
util.errorRequest(this,
|
|
14758
|
+
const request7 = requests[i2];
|
|
14759
|
+
if (request7 != null) {
|
|
14760
|
+
util.errorRequest(this, request7, err);
|
|
14761
14761
|
}
|
|
14762
14762
|
}
|
|
14763
14763
|
const callback = () => {
|
|
@@ -14782,9 +14782,9 @@ var require_client = __commonJS({
|
|
|
14782
14782
|
assert2(client[kPendingIdx] === client[kRunningIdx]);
|
|
14783
14783
|
const requests = client[kQueue].splice(client[kRunningIdx]);
|
|
14784
14784
|
for (let i2 = 0; i2 < requests.length; i2++) {
|
|
14785
|
-
const
|
|
14786
|
-
if (
|
|
14787
|
-
util.errorRequest(client,
|
|
14785
|
+
const request7 = requests[i2];
|
|
14786
|
+
if (request7 != null) {
|
|
14787
|
+
util.errorRequest(client, request7, err);
|
|
14788
14788
|
}
|
|
14789
14789
|
}
|
|
14790
14790
|
assert2(client[kSize] === 0);
|
|
@@ -14895,8 +14895,8 @@ var require_client = __commonJS({
|
|
|
14895
14895
|
if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") {
|
|
14896
14896
|
assert2(client[kRunning] === 0);
|
|
14897
14897
|
while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {
|
|
14898
|
-
const
|
|
14899
|
-
util.errorRequest(client,
|
|
14898
|
+
const request7 = client[kQueue][client[kPendingIdx]++];
|
|
14899
|
+
util.errorRequest(client, request7, err);
|
|
14900
14900
|
}
|
|
14901
14901
|
} else {
|
|
14902
14902
|
onError(client, err);
|
|
@@ -14951,15 +14951,15 @@ var require_client = __commonJS({
|
|
|
14951
14951
|
if (client[kRunning] >= (getPipelining(client) || 1)) {
|
|
14952
14952
|
return;
|
|
14953
14953
|
}
|
|
14954
|
-
const
|
|
14955
|
-
if (
|
|
14954
|
+
const request7 = client[kQueue][client[kPendingIdx]];
|
|
14955
|
+
if (request7 === null) {
|
|
14956
14956
|
return;
|
|
14957
14957
|
}
|
|
14958
|
-
if (client[kUrl].protocol === "https:" && client[kServerName] !==
|
|
14958
|
+
if (client[kUrl].protocol === "https:" && client[kServerName] !== request7.servername) {
|
|
14959
14959
|
if (client[kRunning] > 0) {
|
|
14960
14960
|
return;
|
|
14961
14961
|
}
|
|
14962
|
-
client[kServerName] =
|
|
14962
|
+
client[kServerName] = request7.servername;
|
|
14963
14963
|
client[kHTTPContext]?.destroy(new InformationalError("servername changed"), () => {
|
|
14964
14964
|
client[kHTTPContext] = null;
|
|
14965
14965
|
resume(client);
|
|
@@ -14975,10 +14975,10 @@ var require_client = __commonJS({
|
|
|
14975
14975
|
if (client[kHTTPContext].destroyed) {
|
|
14976
14976
|
return;
|
|
14977
14977
|
}
|
|
14978
|
-
if (client[kHTTPContext].busy(
|
|
14978
|
+
if (client[kHTTPContext].busy(request7)) {
|
|
14979
14979
|
return;
|
|
14980
14980
|
}
|
|
14981
|
-
if (!
|
|
14981
|
+
if (!request7.aborted && client[kHTTPContext].write(request7)) {
|
|
14982
14982
|
client[kPendingIdx]++;
|
|
14983
14983
|
} else {
|
|
14984
14984
|
client[kQueue].splice(client[kPendingIdx], 1);
|
|
@@ -16030,13 +16030,13 @@ var require_socks5_client = __commonJS({
|
|
|
16030
16030
|
}
|
|
16031
16031
|
debug("starting handshake with", this.authMethods.length, "auth methods");
|
|
16032
16032
|
this.state = STATES.HANDSHAKING;
|
|
16033
|
-
const
|
|
16034
|
-
|
|
16035
|
-
|
|
16033
|
+
const request7 = Buffer2.alloc(2 + this.authMethods.length);
|
|
16034
|
+
request7[0] = SOCKS_VERSION;
|
|
16035
|
+
request7[1] = this.authMethods.length;
|
|
16036
16036
|
this.authMethods.forEach((method, i2) => {
|
|
16037
|
-
|
|
16037
|
+
request7[2 + i2] = method;
|
|
16038
16038
|
});
|
|
16039
|
-
this.socket.write(
|
|
16039
|
+
this.socket.write(request7);
|
|
16040
16040
|
}
|
|
16041
16041
|
/**
|
|
16042
16042
|
* Handle handshake response from server
|
|
@@ -16078,13 +16078,13 @@ var require_socks5_client = __commonJS({
|
|
|
16078
16078
|
if (usernameBuffer.length > 255 || passwordBuffer.length > 255) {
|
|
16079
16079
|
throw new InvalidArgumentError2("Username or password too long");
|
|
16080
16080
|
}
|
|
16081
|
-
const
|
|
16082
|
-
|
|
16083
|
-
|
|
16084
|
-
usernameBuffer.copy(
|
|
16085
|
-
|
|
16086
|
-
passwordBuffer.copy(
|
|
16087
|
-
this.socket.write(
|
|
16081
|
+
const request7 = Buffer2.alloc(3 + usernameBuffer.length + passwordBuffer.length);
|
|
16082
|
+
request7[0] = 1;
|
|
16083
|
+
request7[1] = usernameBuffer.length;
|
|
16084
|
+
usernameBuffer.copy(request7, 2);
|
|
16085
|
+
request7[2 + usernameBuffer.length] = passwordBuffer.length;
|
|
16086
|
+
passwordBuffer.copy(request7, 3 + usernameBuffer.length);
|
|
16087
|
+
this.socket.write(request7);
|
|
16088
16088
|
}
|
|
16089
16089
|
/**
|
|
16090
16090
|
* Handle authentication response
|
|
@@ -16119,22 +16119,22 @@ var require_socks5_client = __commonJS({
|
|
|
16119
16119
|
}
|
|
16120
16120
|
debug("connecting to", address, port);
|
|
16121
16121
|
this.state = STATES.CONNECTING;
|
|
16122
|
-
const
|
|
16123
|
-
this.socket.write(
|
|
16122
|
+
const request7 = this.buildConnectRequest(COMMANDS.CONNECT, address, port);
|
|
16123
|
+
this.socket.write(request7);
|
|
16124
16124
|
}
|
|
16125
16125
|
/**
|
|
16126
16126
|
* Build a SOCKS5 request
|
|
16127
16127
|
*/
|
|
16128
16128
|
buildConnectRequest(command, address, port) {
|
|
16129
16129
|
const { type: addressType, buffer: addressBuffer } = parseAddress(address);
|
|
16130
|
-
const
|
|
16131
|
-
|
|
16132
|
-
|
|
16133
|
-
|
|
16134
|
-
|
|
16135
|
-
addressBuffer.copy(
|
|
16136
|
-
|
|
16137
|
-
return
|
|
16130
|
+
const request7 = Buffer2.alloc(4 + addressBuffer.length + 2);
|
|
16131
|
+
request7[0] = SOCKS_VERSION;
|
|
16132
|
+
request7[1] = command;
|
|
16133
|
+
request7[2] = 0;
|
|
16134
|
+
request7[3] = addressType;
|
|
16135
|
+
addressBuffer.copy(request7, 4);
|
|
16136
|
+
request7.writeUInt16BE(port, 4 + addressBuffer.length);
|
|
16137
|
+
return request7;
|
|
16138
16138
|
}
|
|
16139
16139
|
/**
|
|
16140
16140
|
* Handle CONNECT response
|
|
@@ -17803,10 +17803,10 @@ var require_api_request = __commonJS({
|
|
|
17803
17803
|
}
|
|
17804
17804
|
}
|
|
17805
17805
|
};
|
|
17806
|
-
function
|
|
17806
|
+
function request7(opts, callback) {
|
|
17807
17807
|
if (callback === void 0) {
|
|
17808
17808
|
return new Promise((resolve, reject) => {
|
|
17809
|
-
|
|
17809
|
+
request7.call(this, opts, (err, data) => {
|
|
17810
17810
|
return err ? reject(err) : resolve(data);
|
|
17811
17811
|
});
|
|
17812
17812
|
});
|
|
@@ -17822,7 +17822,7 @@ var require_api_request = __commonJS({
|
|
|
17822
17822
|
queueMicrotask(() => callback(err, { opaque }));
|
|
17823
17823
|
}
|
|
17824
17824
|
}
|
|
17825
|
-
module2.exports =
|
|
17825
|
+
module2.exports = request7;
|
|
17826
17826
|
module2.exports.RequestHandler = RequestHandler;
|
|
17827
17827
|
}
|
|
17828
17828
|
});
|
|
@@ -19805,8 +19805,8 @@ var require_snapshot_recorder = __commonJS({
|
|
|
19805
19805
|
if (this.isUrlExcluded(requestOpts)) {
|
|
19806
19806
|
return;
|
|
19807
19807
|
}
|
|
19808
|
-
const
|
|
19809
|
-
const hash2 = createRequestHash(
|
|
19808
|
+
const request7 = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions);
|
|
19809
|
+
const hash2 = createRequestHash(request7);
|
|
19810
19810
|
const normalizedHeaders = normalizeHeaders(response.headers);
|
|
19811
19811
|
const responseData = {
|
|
19812
19812
|
statusCode: response.statusCode,
|
|
@@ -19824,7 +19824,7 @@ var require_snapshot_recorder = __commonJS({
|
|
|
19824
19824
|
existingSnapshot.timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
19825
19825
|
} else {
|
|
19826
19826
|
this.#snapshots.set(hash2, {
|
|
19827
|
-
request:
|
|
19827
|
+
request: request7,
|
|
19828
19828
|
responses: [responseData],
|
|
19829
19829
|
// Always store as array for consistency
|
|
19830
19830
|
callCount: 0,
|
|
@@ -19858,8 +19858,8 @@ var require_snapshot_recorder = __commonJS({
|
|
|
19858
19858
|
if (this.isUrlExcluded(requestOpts)) {
|
|
19859
19859
|
return void 0;
|
|
19860
19860
|
}
|
|
19861
|
-
const
|
|
19862
|
-
const hash2 = createRequestHash(
|
|
19861
|
+
const request7 = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions);
|
|
19862
|
+
const hash2 = createRequestHash(request7);
|
|
19863
19863
|
const snapshot = this.#snapshots.get(hash2);
|
|
19864
19864
|
if (!snapshot) return void 0;
|
|
19865
19865
|
const currentCallCount = snapshot.callCount || 0;
|
|
@@ -19954,8 +19954,8 @@ var require_snapshot_recorder = __commonJS({
|
|
|
19954
19954
|
* @returns {boolean} - True if snapshot was deleted, false if not found
|
|
19955
19955
|
*/
|
|
19956
19956
|
deleteSnapshot(requestOpts) {
|
|
19957
|
-
const
|
|
19958
|
-
const hash2 = createRequestHash(
|
|
19957
|
+
const request7 = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions);
|
|
19958
|
+
const hash2 = createRequestHash(request7);
|
|
19959
19959
|
return this.#snapshots.delete(hash2);
|
|
19960
19960
|
}
|
|
19961
19961
|
/**
|
|
@@ -19964,8 +19964,8 @@ var require_snapshot_recorder = __commonJS({
|
|
|
19964
19964
|
* @returns {SnapshotInfo|null} - Snapshot information or null if not found
|
|
19965
19965
|
*/
|
|
19966
19966
|
getSnapshotInfo(requestOpts) {
|
|
19967
|
-
const
|
|
19968
|
-
const hash2 = createRequestHash(
|
|
19967
|
+
const request7 = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions);
|
|
19968
|
+
const hash2 = createRequestHash(request7);
|
|
19969
19969
|
const snapshot = this.#snapshots.get(hash2);
|
|
19970
19970
|
if (!snapshot) return null;
|
|
19971
19971
|
return {
|
|
@@ -20256,16 +20256,16 @@ var require_snapshot_agent = __commonJS({
|
|
|
20256
20256
|
*/
|
|
20257
20257
|
#setupMockInterceptors() {
|
|
20258
20258
|
for (const snapshot of this[kSnapshotRecorder].getSnapshots()) {
|
|
20259
|
-
const { request:
|
|
20260
|
-
const url2 = new URL(
|
|
20259
|
+
const { request: request7, responses, response } = snapshot;
|
|
20260
|
+
const url2 = new URL(request7.url);
|
|
20261
20261
|
const mockPool = this.get(url2.origin);
|
|
20262
20262
|
const responseData = responses ? responses[0] : response;
|
|
20263
20263
|
if (!responseData) continue;
|
|
20264
20264
|
mockPool.intercept({
|
|
20265
20265
|
path: url2.pathname + url2.search,
|
|
20266
|
-
method:
|
|
20267
|
-
headers:
|
|
20268
|
-
body:
|
|
20266
|
+
method: request7.method,
|
|
20267
|
+
headers: request7.headers,
|
|
20268
|
+
body: request7.body
|
|
20269
20269
|
}).reply(responseData.statusCode, responseData.body, {
|
|
20270
20270
|
headers: responseData.headers,
|
|
20271
20271
|
trailers: responseData.trailers
|
|
@@ -25566,7 +25566,7 @@ var require_request2 = __commonJS({
|
|
|
25566
25566
|
webidl.argumentLengthCheck(arguments, 1, prefix);
|
|
25567
25567
|
input2 = webidl.converters.RequestInfo(input2);
|
|
25568
25568
|
init = webidl.converters.RequestInit(init);
|
|
25569
|
-
let
|
|
25569
|
+
let request7 = null;
|
|
25570
25570
|
let fallbackMode = null;
|
|
25571
25571
|
const baseUrl = environmentSettingsObject.settingsObject.baseUrl;
|
|
25572
25572
|
let signal = null;
|
|
@@ -25583,18 +25583,18 @@ var require_request2 = __commonJS({
|
|
|
25583
25583
|
"Request cannot be constructed from a URL that includes credentials: " + input2
|
|
25584
25584
|
);
|
|
25585
25585
|
}
|
|
25586
|
-
|
|
25586
|
+
request7 = makeRequest({ urlList: [parsedURL] });
|
|
25587
25587
|
fallbackMode = "cors";
|
|
25588
25588
|
} else {
|
|
25589
25589
|
assert2(webidl.is.Request(input2));
|
|
25590
|
-
|
|
25590
|
+
request7 = input2.#state;
|
|
25591
25591
|
signal = input2.#signal;
|
|
25592
25592
|
this.#dispatcher = init.dispatcher || input2.#dispatcher;
|
|
25593
25593
|
}
|
|
25594
25594
|
const origin = environmentSettingsObject.settingsObject.origin;
|
|
25595
25595
|
let window = "client";
|
|
25596
|
-
if (
|
|
25597
|
-
window =
|
|
25596
|
+
if (request7.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request7.window, origin)) {
|
|
25597
|
+
window = request7.window;
|
|
25598
25598
|
}
|
|
25599
25599
|
if (init.window != null) {
|
|
25600
25600
|
throw new TypeError(`'window' option '${window}' must be null`);
|
|
@@ -25602,66 +25602,66 @@ var require_request2 = __commonJS({
|
|
|
25602
25602
|
if ("window" in init) {
|
|
25603
25603
|
window = "no-window";
|
|
25604
25604
|
}
|
|
25605
|
-
|
|
25605
|
+
request7 = makeRequest({
|
|
25606
25606
|
// URL request’s URL.
|
|
25607
25607
|
// undici implementation note: this is set as the first item in request's urlList in makeRequest
|
|
25608
25608
|
// method request’s method.
|
|
25609
|
-
method:
|
|
25609
|
+
method: request7.method,
|
|
25610
25610
|
// header list A copy of request’s header list.
|
|
25611
25611
|
// undici implementation note: headersList is cloned in makeRequest
|
|
25612
|
-
headersList:
|
|
25612
|
+
headersList: request7.headersList,
|
|
25613
25613
|
// unsafe-request flag Set.
|
|
25614
|
-
unsafeRequest:
|
|
25614
|
+
unsafeRequest: request7.unsafeRequest,
|
|
25615
25615
|
// client This’s relevant settings object.
|
|
25616
25616
|
client: environmentSettingsObject.settingsObject,
|
|
25617
25617
|
// window window.
|
|
25618
25618
|
window,
|
|
25619
25619
|
// priority request’s priority.
|
|
25620
|
-
priority:
|
|
25620
|
+
priority: request7.priority,
|
|
25621
25621
|
// origin request’s origin. The propagation of the origin is only significant for navigation requests
|
|
25622
25622
|
// being handled by a service worker. In this scenario a request can have an origin that is different
|
|
25623
25623
|
// from the current client.
|
|
25624
|
-
origin:
|
|
25624
|
+
origin: request7.origin,
|
|
25625
25625
|
// referrer request’s referrer.
|
|
25626
|
-
referrer:
|
|
25626
|
+
referrer: request7.referrer,
|
|
25627
25627
|
// referrer policy request’s referrer policy.
|
|
25628
|
-
referrerPolicy:
|
|
25628
|
+
referrerPolicy: request7.referrerPolicy,
|
|
25629
25629
|
// mode request’s mode.
|
|
25630
|
-
mode:
|
|
25630
|
+
mode: request7.mode,
|
|
25631
25631
|
// credentials mode request’s credentials mode.
|
|
25632
|
-
credentials:
|
|
25632
|
+
credentials: request7.credentials,
|
|
25633
25633
|
// cache mode request’s cache mode.
|
|
25634
|
-
cache:
|
|
25634
|
+
cache: request7.cache,
|
|
25635
25635
|
// redirect mode request’s redirect mode.
|
|
25636
|
-
redirect:
|
|
25636
|
+
redirect: request7.redirect,
|
|
25637
25637
|
// integrity metadata request’s integrity metadata.
|
|
25638
|
-
integrity:
|
|
25638
|
+
integrity: request7.integrity,
|
|
25639
25639
|
// keepalive request’s keepalive.
|
|
25640
|
-
keepalive:
|
|
25640
|
+
keepalive: request7.keepalive,
|
|
25641
25641
|
// reload-navigation flag request’s reload-navigation flag.
|
|
25642
|
-
reloadNavigation:
|
|
25642
|
+
reloadNavigation: request7.reloadNavigation,
|
|
25643
25643
|
// history-navigation flag request’s history-navigation flag.
|
|
25644
|
-
historyNavigation:
|
|
25644
|
+
historyNavigation: request7.historyNavigation,
|
|
25645
25645
|
// URL list A clone of request’s URL list.
|
|
25646
|
-
urlList: [...
|
|
25646
|
+
urlList: [...request7.urlList]
|
|
25647
25647
|
});
|
|
25648
25648
|
const initHasKey = Object.keys(init).length !== 0;
|
|
25649
25649
|
if (initHasKey) {
|
|
25650
|
-
if (
|
|
25651
|
-
|
|
25650
|
+
if (request7.mode === "navigate") {
|
|
25651
|
+
request7.mode = "same-origin";
|
|
25652
25652
|
}
|
|
25653
|
-
|
|
25654
|
-
|
|
25655
|
-
|
|
25656
|
-
|
|
25657
|
-
|
|
25658
|
-
|
|
25659
|
-
|
|
25653
|
+
request7.reloadNavigation = false;
|
|
25654
|
+
request7.historyNavigation = false;
|
|
25655
|
+
request7.origin = "client";
|
|
25656
|
+
request7.referrer = "client";
|
|
25657
|
+
request7.referrerPolicy = "";
|
|
25658
|
+
request7.url = request7.urlList[request7.urlList.length - 1];
|
|
25659
|
+
request7.urlList = [request7.url];
|
|
25660
25660
|
}
|
|
25661
25661
|
if (init.referrer !== void 0) {
|
|
25662
25662
|
const referrer = init.referrer;
|
|
25663
25663
|
if (referrer === "") {
|
|
25664
|
-
|
|
25664
|
+
request7.referrer = "no-referrer";
|
|
25665
25665
|
} else {
|
|
25666
25666
|
let parsedReferrer;
|
|
25667
25667
|
try {
|
|
@@ -25670,14 +25670,14 @@ var require_request2 = __commonJS({
|
|
|
25670
25670
|
throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err });
|
|
25671
25671
|
}
|
|
25672
25672
|
if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl)) {
|
|
25673
|
-
|
|
25673
|
+
request7.referrer = "client";
|
|
25674
25674
|
} else {
|
|
25675
|
-
|
|
25675
|
+
request7.referrer = parsedReferrer;
|
|
25676
25676
|
}
|
|
25677
25677
|
}
|
|
25678
25678
|
}
|
|
25679
25679
|
if (init.referrerPolicy !== void 0) {
|
|
25680
|
-
|
|
25680
|
+
request7.referrerPolicy = init.referrerPolicy;
|
|
25681
25681
|
}
|
|
25682
25682
|
let mode;
|
|
25683
25683
|
if (init.mode !== void 0) {
|
|
@@ -25692,33 +25692,33 @@ var require_request2 = __commonJS({
|
|
|
25692
25692
|
});
|
|
25693
25693
|
}
|
|
25694
25694
|
if (mode != null) {
|
|
25695
|
-
|
|
25695
|
+
request7.mode = mode;
|
|
25696
25696
|
}
|
|
25697
25697
|
if (init.credentials !== void 0) {
|
|
25698
|
-
|
|
25698
|
+
request7.credentials = init.credentials;
|
|
25699
25699
|
}
|
|
25700
25700
|
if (init.cache !== void 0) {
|
|
25701
|
-
|
|
25701
|
+
request7.cache = init.cache;
|
|
25702
25702
|
}
|
|
25703
|
-
if (
|
|
25703
|
+
if (request7.cache === "only-if-cached" && request7.mode !== "same-origin") {
|
|
25704
25704
|
throw new TypeError(
|
|
25705
25705
|
"'only-if-cached' can be set only with 'same-origin' mode"
|
|
25706
25706
|
);
|
|
25707
25707
|
}
|
|
25708
25708
|
if (init.redirect !== void 0) {
|
|
25709
|
-
|
|
25709
|
+
request7.redirect = init.redirect;
|
|
25710
25710
|
}
|
|
25711
25711
|
if (init.integrity != null) {
|
|
25712
|
-
|
|
25712
|
+
request7.integrity = String(init.integrity);
|
|
25713
25713
|
}
|
|
25714
25714
|
if (init.keepalive !== void 0) {
|
|
25715
|
-
|
|
25715
|
+
request7.keepalive = Boolean(init.keepalive);
|
|
25716
25716
|
}
|
|
25717
25717
|
if (init.method !== void 0) {
|
|
25718
25718
|
let method = init.method;
|
|
25719
25719
|
const mayBeNormalized = normalizedMethodRecords[method];
|
|
25720
25720
|
if (mayBeNormalized !== void 0) {
|
|
25721
|
-
|
|
25721
|
+
request7.method = mayBeNormalized;
|
|
25722
25722
|
} else {
|
|
25723
25723
|
if (!isValidHTTPToken(method)) {
|
|
25724
25724
|
throw new TypeError(`'${method}' is not a valid HTTP method.`);
|
|
@@ -25728,9 +25728,9 @@ var require_request2 = __commonJS({
|
|
|
25728
25728
|
throw new TypeError(`'${method}' HTTP method is unsupported.`);
|
|
25729
25729
|
}
|
|
25730
25730
|
method = normalizedMethodRecordsBase[upperCase] ?? method;
|
|
25731
|
-
|
|
25731
|
+
request7.method = method;
|
|
25732
25732
|
}
|
|
25733
|
-
if (!patchMethodWarning &&
|
|
25733
|
+
if (!patchMethodWarning && request7.method === "patch") {
|
|
25734
25734
|
process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.", {
|
|
25735
25735
|
code: "UNDICI-FETCH-patch"
|
|
25736
25736
|
});
|
|
@@ -25740,7 +25740,7 @@ var require_request2 = __commonJS({
|
|
|
25740
25740
|
if (init.signal !== void 0) {
|
|
25741
25741
|
signal = init.signal;
|
|
25742
25742
|
}
|
|
25743
|
-
this.#state =
|
|
25743
|
+
this.#state = request7;
|
|
25744
25744
|
const ac = new AbortController();
|
|
25745
25745
|
this.#signal = ac.signal;
|
|
25746
25746
|
if (signal != null) {
|
|
@@ -25758,12 +25758,12 @@ var require_request2 = __commonJS({
|
|
|
25758
25758
|
}
|
|
25759
25759
|
}
|
|
25760
25760
|
this.#headers = new Headers(kConstruct);
|
|
25761
|
-
setHeadersList(this.#headers,
|
|
25761
|
+
setHeadersList(this.#headers, request7.headersList);
|
|
25762
25762
|
setHeadersGuard(this.#headers, "request");
|
|
25763
25763
|
if (mode === "no-cors") {
|
|
25764
|
-
if (!corsSafeListedMethodsSet.has(
|
|
25764
|
+
if (!corsSafeListedMethodsSet.has(request7.method)) {
|
|
25765
25765
|
throw new TypeError(
|
|
25766
|
-
`'${
|
|
25766
|
+
`'${request7.method} is unsupported in no-cors mode.`
|
|
25767
25767
|
);
|
|
25768
25768
|
}
|
|
25769
25769
|
setHeadersGuard(this.#headers, "request-no-cors");
|
|
@@ -25782,14 +25782,14 @@ var require_request2 = __commonJS({
|
|
|
25782
25782
|
}
|
|
25783
25783
|
}
|
|
25784
25784
|
const inputBody = webidl.is.Request(input2) ? input2.#state.body : null;
|
|
25785
|
-
if ((init.body != null || inputBody != null) && (
|
|
25785
|
+
if ((init.body != null || inputBody != null) && (request7.method === "GET" || request7.method === "HEAD")) {
|
|
25786
25786
|
throw new TypeError("Request with GET/HEAD method cannot have body.");
|
|
25787
25787
|
}
|
|
25788
25788
|
let initBody = null;
|
|
25789
25789
|
if (init.body != null) {
|
|
25790
25790
|
const [extractedBody, contentType] = extractBody(
|
|
25791
25791
|
init.body,
|
|
25792
|
-
|
|
25792
|
+
request7.keepalive
|
|
25793
25793
|
);
|
|
25794
25794
|
initBody = extractedBody;
|
|
25795
25795
|
if (contentType && !getHeadersList(this.#headers).contains("content-type", true)) {
|
|
@@ -25801,12 +25801,12 @@ var require_request2 = __commonJS({
|
|
|
25801
25801
|
if (initBody != null && init.duplex == null) {
|
|
25802
25802
|
throw new TypeError("RequestInit: duplex option is required when sending a body.");
|
|
25803
25803
|
}
|
|
25804
|
-
if (
|
|
25804
|
+
if (request7.mode !== "same-origin" && request7.mode !== "cors") {
|
|
25805
25805
|
throw new TypeError(
|
|
25806
25806
|
'If request is made from ReadableStream, mode should be "same-origin" or "cors"'
|
|
25807
25807
|
);
|
|
25808
25808
|
}
|
|
25809
|
-
|
|
25809
|
+
request7.useCORSPreflightFlag = true;
|
|
25810
25810
|
}
|
|
25811
25811
|
let finalBody = inputOrInitBody;
|
|
25812
25812
|
if (initBody == null && inputBody != null) {
|
|
@@ -25996,42 +25996,42 @@ var require_request2 = __commonJS({
|
|
|
25996
25996
|
* @param {Request} request
|
|
25997
25997
|
* @param {AbortSignal} newSignal
|
|
25998
25998
|
*/
|
|
25999
|
-
static setRequestSignal(
|
|
26000
|
-
|
|
26001
|
-
return
|
|
25999
|
+
static setRequestSignal(request7, newSignal) {
|
|
26000
|
+
request7.#signal = newSignal;
|
|
26001
|
+
return request7;
|
|
26002
26002
|
}
|
|
26003
26003
|
/**
|
|
26004
26004
|
* @param {Request} request
|
|
26005
26005
|
*/
|
|
26006
|
-
static getRequestDispatcher(
|
|
26007
|
-
return
|
|
26006
|
+
static getRequestDispatcher(request7) {
|
|
26007
|
+
return request7.#dispatcher;
|
|
26008
26008
|
}
|
|
26009
26009
|
/**
|
|
26010
26010
|
* @param {Request} request
|
|
26011
26011
|
* @param {import('../../dispatcher/dispatcher')} newDispatcher
|
|
26012
26012
|
*/
|
|
26013
|
-
static setRequestDispatcher(
|
|
26014
|
-
|
|
26013
|
+
static setRequestDispatcher(request7, newDispatcher) {
|
|
26014
|
+
request7.#dispatcher = newDispatcher;
|
|
26015
26015
|
}
|
|
26016
26016
|
/**
|
|
26017
26017
|
* @param {Request} request
|
|
26018
26018
|
* @param {Headers} newHeaders
|
|
26019
26019
|
*/
|
|
26020
|
-
static setRequestHeaders(
|
|
26021
|
-
|
|
26020
|
+
static setRequestHeaders(request7, newHeaders) {
|
|
26021
|
+
request7.#headers = newHeaders;
|
|
26022
26022
|
}
|
|
26023
26023
|
/**
|
|
26024
26024
|
* @param {Request} request
|
|
26025
26025
|
*/
|
|
26026
|
-
static getRequestState(
|
|
26027
|
-
return
|
|
26026
|
+
static getRequestState(request7) {
|
|
26027
|
+
return request7.#state;
|
|
26028
26028
|
}
|
|
26029
26029
|
/**
|
|
26030
26030
|
* @param {Request} request
|
|
26031
26031
|
* @param {any} newState
|
|
26032
26032
|
*/
|
|
26033
|
-
static setRequestState(
|
|
26034
|
-
|
|
26033
|
+
static setRequestState(request7, newState) {
|
|
26034
|
+
request7.#state = newState;
|
|
26035
26035
|
}
|
|
26036
26036
|
};
|
|
26037
26037
|
var { setRequestSignal, getRequestDispatcher, setRequestDispatcher, setRequestHeaders, getRequestState, setRequestState } = Request;
|
|
@@ -26086,23 +26086,23 @@ var require_request2 = __commonJS({
|
|
|
26086
26086
|
headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList()
|
|
26087
26087
|
};
|
|
26088
26088
|
}
|
|
26089
|
-
function cloneRequest(
|
|
26090
|
-
const newRequest = makeRequest({ ...
|
|
26091
|
-
if (
|
|
26092
|
-
newRequest.body = cloneBody(
|
|
26089
|
+
function cloneRequest(request7) {
|
|
26090
|
+
const newRequest = makeRequest({ ...request7, body: null });
|
|
26091
|
+
if (request7.body != null) {
|
|
26092
|
+
newRequest.body = cloneBody(request7.body);
|
|
26093
26093
|
}
|
|
26094
26094
|
return newRequest;
|
|
26095
26095
|
}
|
|
26096
26096
|
function fromInnerRequest(innerRequest, dispatcher, signal, guard) {
|
|
26097
|
-
const
|
|
26098
|
-
setRequestState(
|
|
26099
|
-
setRequestDispatcher(
|
|
26100
|
-
setRequestSignal(
|
|
26097
|
+
const request7 = new Request(kConstruct);
|
|
26098
|
+
setRequestState(request7, innerRequest);
|
|
26099
|
+
setRequestDispatcher(request7, dispatcher);
|
|
26100
|
+
setRequestSignal(request7, signal);
|
|
26101
26101
|
const headers = new Headers(kConstruct);
|
|
26102
|
-
setRequestHeaders(
|
|
26102
|
+
setRequestHeaders(request7, headers);
|
|
26103
26103
|
setHeadersList(headers, innerRequest.headersList);
|
|
26104
26104
|
setHeadersGuard(headers, guard);
|
|
26105
|
-
return
|
|
26105
|
+
return request7;
|
|
26106
26106
|
}
|
|
26107
26107
|
Object.defineProperties(Request.prototype, {
|
|
26108
26108
|
method: kEnumerableProperty,
|
|
@@ -26494,14 +26494,14 @@ var require_fetch = __commonJS({
|
|
|
26494
26494
|
p.reject(e);
|
|
26495
26495
|
return p.promise;
|
|
26496
26496
|
}
|
|
26497
|
-
const
|
|
26497
|
+
const request7 = getRequestState(requestObject);
|
|
26498
26498
|
if (requestObject.signal.aborted) {
|
|
26499
|
-
abortFetch(p,
|
|
26499
|
+
abortFetch(p, request7, null, requestObject.signal.reason, null);
|
|
26500
26500
|
return p.promise;
|
|
26501
26501
|
}
|
|
26502
|
-
const globalObject =
|
|
26502
|
+
const globalObject = request7.client.globalObject;
|
|
26503
26503
|
if (globalObject?.constructor?.name === "ServiceWorkerGlobalScope") {
|
|
26504
|
-
|
|
26504
|
+
request7.serviceWorkers = "none";
|
|
26505
26505
|
}
|
|
26506
26506
|
let responseObject = null;
|
|
26507
26507
|
let locallyAborted = false;
|
|
@@ -26513,7 +26513,7 @@ var require_fetch = __commonJS({
|
|
|
26513
26513
|
assert2(controller != null);
|
|
26514
26514
|
controller.abort(requestObject.signal.reason);
|
|
26515
26515
|
const realResponse = responseObject?.deref();
|
|
26516
|
-
abortFetch(p,
|
|
26516
|
+
abortFetch(p, request7, realResponse, requestObject.signal.reason, controller.controller);
|
|
26517
26517
|
}
|
|
26518
26518
|
);
|
|
26519
26519
|
const processResponse = (response) => {
|
|
@@ -26521,7 +26521,7 @@ var require_fetch = __commonJS({
|
|
|
26521
26521
|
return;
|
|
26522
26522
|
}
|
|
26523
26523
|
if (response.aborted) {
|
|
26524
|
-
abortFetch(p,
|
|
26524
|
+
abortFetch(p, request7, responseObject, controller.serializedAbortReason, controller.controller);
|
|
26525
26525
|
return;
|
|
26526
26526
|
}
|
|
26527
26527
|
if (response.type === "error") {
|
|
@@ -26533,7 +26533,7 @@ var require_fetch = __commonJS({
|
|
|
26533
26533
|
p = null;
|
|
26534
26534
|
};
|
|
26535
26535
|
controller = fetching({
|
|
26536
|
-
request:
|
|
26536
|
+
request: request7,
|
|
26537
26537
|
processResponseEndOfBody: handleFetchDone,
|
|
26538
26538
|
processResponse,
|
|
26539
26539
|
dispatcher: getRequestDispatcher(requestObject),
|
|
@@ -26580,12 +26580,12 @@ var require_fetch = __commonJS({
|
|
|
26580
26580
|
);
|
|
26581
26581
|
}
|
|
26582
26582
|
var markResourceTiming = performance.markResourceTiming;
|
|
26583
|
-
function abortFetch(p,
|
|
26583
|
+
function abortFetch(p, request7, responseObject, error62, controller) {
|
|
26584
26584
|
if (p) {
|
|
26585
26585
|
p.reject(error62);
|
|
26586
26586
|
}
|
|
26587
|
-
if (
|
|
26588
|
-
|
|
26587
|
+
if (request7.body?.stream != null && isReadable(request7.body.stream)) {
|
|
26588
|
+
request7.body.stream.cancel(error62).catch((err) => {
|
|
26589
26589
|
if (err.code === "ERR_INVALID_STATE") {
|
|
26590
26590
|
return;
|
|
26591
26591
|
}
|
|
@@ -26601,7 +26601,7 @@ var require_fetch = __commonJS({
|
|
|
26601
26601
|
}
|
|
26602
26602
|
}
|
|
26603
26603
|
function fetching({
|
|
26604
|
-
request:
|
|
26604
|
+
request: request7,
|
|
26605
26605
|
processRequestBodyChunkLength,
|
|
26606
26606
|
processRequestEndOfBody,
|
|
26607
26607
|
processResponse,
|
|
@@ -26616,9 +26616,9 @@ var require_fetch = __commonJS({
|
|
|
26616
26616
|
assert2(dispatcher);
|
|
26617
26617
|
let taskDestination = null;
|
|
26618
26618
|
let crossOriginIsolatedCapability = false;
|
|
26619
|
-
if (
|
|
26620
|
-
taskDestination =
|
|
26621
|
-
crossOriginIsolatedCapability =
|
|
26619
|
+
if (request7.client != null) {
|
|
26620
|
+
taskDestination = request7.client.globalObject;
|
|
26621
|
+
crossOriginIsolatedCapability = request7.client.crossOriginIsolatedCapability;
|
|
26622
26622
|
}
|
|
26623
26623
|
const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability);
|
|
26624
26624
|
const timingInfo = createOpaqueTimingInfo({
|
|
@@ -26626,7 +26626,7 @@ var require_fetch = __commonJS({
|
|
|
26626
26626
|
});
|
|
26627
26627
|
const fetchParams = {
|
|
26628
26628
|
controller: new Fetch(dispatcher),
|
|
26629
|
-
request:
|
|
26629
|
+
request: request7,
|
|
26630
26630
|
timingInfo,
|
|
26631
26631
|
processRequestBodyChunkLength,
|
|
26632
26632
|
processRequestEndOfBody,
|
|
@@ -26638,79 +26638,79 @@ var require_fetch = __commonJS({
|
|
|
26638
26638
|
// Keep requestObject alive to prevent its AbortController from being GC'd
|
|
26639
26639
|
requestObject
|
|
26640
26640
|
};
|
|
26641
|
-
assert2(!
|
|
26642
|
-
if (
|
|
26643
|
-
|
|
26641
|
+
assert2(!request7.body || request7.body.stream);
|
|
26642
|
+
if (request7.window === "client") {
|
|
26643
|
+
request7.window = request7.client?.globalObject?.constructor?.name === "Window" ? request7.client : "no-window";
|
|
26644
26644
|
}
|
|
26645
|
-
if (
|
|
26646
|
-
|
|
26645
|
+
if (request7.origin === "client") {
|
|
26646
|
+
request7.origin = request7.client.origin;
|
|
26647
26647
|
}
|
|
26648
|
-
if (
|
|
26649
|
-
if (
|
|
26650
|
-
|
|
26651
|
-
|
|
26648
|
+
if (request7.policyContainer === "client") {
|
|
26649
|
+
if (request7.client != null) {
|
|
26650
|
+
request7.policyContainer = clonePolicyContainer(
|
|
26651
|
+
request7.client.policyContainer
|
|
26652
26652
|
);
|
|
26653
26653
|
} else {
|
|
26654
|
-
|
|
26654
|
+
request7.policyContainer = makePolicyContainer();
|
|
26655
26655
|
}
|
|
26656
26656
|
}
|
|
26657
|
-
if (!
|
|
26657
|
+
if (!request7.headersList.contains("accept", true)) {
|
|
26658
26658
|
const value = "*/*";
|
|
26659
|
-
|
|
26659
|
+
request7.headersList.append("accept", value, true);
|
|
26660
26660
|
}
|
|
26661
|
-
if (!
|
|
26662
|
-
|
|
26661
|
+
if (!request7.headersList.contains("accept-language", true)) {
|
|
26662
|
+
request7.headersList.append("accept-language", "*", true);
|
|
26663
26663
|
}
|
|
26664
|
-
if (
|
|
26664
|
+
if (request7.priority === null) {
|
|
26665
26665
|
}
|
|
26666
|
-
if (subresourceSet.has(
|
|
26666
|
+
if (subresourceSet.has(request7.destination)) {
|
|
26667
26667
|
}
|
|
26668
26668
|
mainFetch(fetchParams, false);
|
|
26669
26669
|
return fetchParams.controller;
|
|
26670
26670
|
}
|
|
26671
26671
|
async function mainFetch(fetchParams, recursive2) {
|
|
26672
26672
|
try {
|
|
26673
|
-
const
|
|
26673
|
+
const request7 = fetchParams.request;
|
|
26674
26674
|
let response = null;
|
|
26675
|
-
if (
|
|
26675
|
+
if (request7.localURLsOnly && !urlIsLocal(requestCurrentURL(request7))) {
|
|
26676
26676
|
response = makeNetworkError("local URLs only");
|
|
26677
26677
|
}
|
|
26678
|
-
tryUpgradeRequestToAPotentiallyTrustworthyURL(
|
|
26679
|
-
if (requestBadPort(
|
|
26678
|
+
tryUpgradeRequestToAPotentiallyTrustworthyURL(request7);
|
|
26679
|
+
if (requestBadPort(request7) === "blocked") {
|
|
26680
26680
|
response = makeNetworkError("bad port");
|
|
26681
26681
|
}
|
|
26682
|
-
if (
|
|
26683
|
-
|
|
26682
|
+
if (request7.referrerPolicy === "") {
|
|
26683
|
+
request7.referrerPolicy = request7.policyContainer.referrerPolicy;
|
|
26684
26684
|
}
|
|
26685
|
-
if (
|
|
26686
|
-
|
|
26685
|
+
if (request7.referrer !== "no-referrer") {
|
|
26686
|
+
request7.referrer = determineRequestsReferrer(request7);
|
|
26687
26687
|
}
|
|
26688
26688
|
if (response === null) {
|
|
26689
|
-
const currentURL = requestCurrentURL(
|
|
26689
|
+
const currentURL = requestCurrentURL(request7);
|
|
26690
26690
|
if (
|
|
26691
26691
|
// - request’s current URL’s origin is same origin with request’s origin,
|
|
26692
26692
|
// and request’s response tainting is "basic"
|
|
26693
|
-
sameOrigin(currentURL,
|
|
26693
|
+
sameOrigin(currentURL, request7.url) && request7.responseTainting === "basic" || // request’s current URL’s scheme is "data"
|
|
26694
26694
|
currentURL.protocol === "data:" || // - request’s mode is "navigate" or "websocket"
|
|
26695
|
-
(
|
|
26695
|
+
(request7.mode === "navigate" || request7.mode === "websocket")
|
|
26696
26696
|
) {
|
|
26697
|
-
|
|
26697
|
+
request7.responseTainting = "basic";
|
|
26698
26698
|
response = await schemeFetch(fetchParams);
|
|
26699
|
-
} else if (
|
|
26699
|
+
} else if (request7.mode === "same-origin") {
|
|
26700
26700
|
response = makeNetworkError('request mode cannot be "same-origin"');
|
|
26701
|
-
} else if (
|
|
26702
|
-
if (
|
|
26701
|
+
} else if (request7.mode === "no-cors") {
|
|
26702
|
+
if (request7.redirect !== "follow") {
|
|
26703
26703
|
response = makeNetworkError(
|
|
26704
26704
|
'redirect mode cannot be "follow" for "no-cors" request'
|
|
26705
26705
|
);
|
|
26706
26706
|
} else {
|
|
26707
|
-
|
|
26707
|
+
request7.responseTainting = "opaque";
|
|
26708
26708
|
response = await schemeFetch(fetchParams);
|
|
26709
26709
|
}
|
|
26710
|
-
} else if (!urlIsHttpHttpsScheme(requestCurrentURL(
|
|
26710
|
+
} else if (!urlIsHttpHttpsScheme(requestCurrentURL(request7))) {
|
|
26711
26711
|
response = makeNetworkError("URL scheme must be a HTTP(S) scheme");
|
|
26712
26712
|
} else {
|
|
26713
|
-
|
|
26713
|
+
request7.responseTainting = "cors";
|
|
26714
26714
|
response = await httpFetch(fetchParams);
|
|
26715
26715
|
}
|
|
26716
26716
|
}
|
|
@@ -26718,13 +26718,13 @@ var require_fetch = __commonJS({
|
|
|
26718
26718
|
return response;
|
|
26719
26719
|
}
|
|
26720
26720
|
if (response.status !== 0 && !response.internalResponse) {
|
|
26721
|
-
if (
|
|
26721
|
+
if (request7.responseTainting === "cors") {
|
|
26722
26722
|
}
|
|
26723
|
-
if (
|
|
26723
|
+
if (request7.responseTainting === "basic") {
|
|
26724
26724
|
response = filterResponse(response, "basic");
|
|
26725
|
-
} else if (
|
|
26725
|
+
} else if (request7.responseTainting === "cors") {
|
|
26726
26726
|
response = filterResponse(response, "cors");
|
|
26727
|
-
} else if (
|
|
26727
|
+
} else if (request7.responseTainting === "opaque") {
|
|
26728
26728
|
response = filterResponse(response, "opaque");
|
|
26729
26729
|
} else {
|
|
26730
26730
|
assert2(false);
|
|
@@ -26732,26 +26732,26 @@ var require_fetch = __commonJS({
|
|
|
26732
26732
|
}
|
|
26733
26733
|
let internalResponse = response.status === 0 ? response : response.internalResponse;
|
|
26734
26734
|
if (internalResponse.urlList.length === 0) {
|
|
26735
|
-
internalResponse.urlList.push(...
|
|
26735
|
+
internalResponse.urlList.push(...request7.urlList);
|
|
26736
26736
|
}
|
|
26737
|
-
if (!
|
|
26737
|
+
if (!request7.timingAllowFailed) {
|
|
26738
26738
|
response.timingAllowPassed = true;
|
|
26739
26739
|
}
|
|
26740
|
-
if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !
|
|
26740
|
+
if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request7.headers.contains("range", true)) {
|
|
26741
26741
|
response = internalResponse = makeNetworkError();
|
|
26742
26742
|
}
|
|
26743
|
-
if (response.status !== 0 && (
|
|
26743
|
+
if (response.status !== 0 && (request7.method === "HEAD" || request7.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) {
|
|
26744
26744
|
internalResponse.body = null;
|
|
26745
26745
|
fetchParams.controller.dump = true;
|
|
26746
26746
|
}
|
|
26747
|
-
if (
|
|
26747
|
+
if (request7.integrity) {
|
|
26748
26748
|
const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason));
|
|
26749
|
-
if (
|
|
26749
|
+
if (request7.responseTainting === "opaque" || response.body == null) {
|
|
26750
26750
|
processBodyError(response.error);
|
|
26751
26751
|
return;
|
|
26752
26752
|
}
|
|
26753
26753
|
const processBody = (bytes) => {
|
|
26754
|
-
if (!bytesMatch(bytes,
|
|
26754
|
+
if (!bytesMatch(bytes, request7.integrity)) {
|
|
26755
26755
|
processBodyError("integrity mismatch");
|
|
26756
26756
|
return;
|
|
26757
26757
|
}
|
|
@@ -26770,8 +26770,8 @@ var require_fetch = __commonJS({
|
|
|
26770
26770
|
if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {
|
|
26771
26771
|
return Promise.resolve(makeAppropriateNetworkError(fetchParams));
|
|
26772
26772
|
}
|
|
26773
|
-
const { request:
|
|
26774
|
-
const { protocol: scheme } = requestCurrentURL(
|
|
26773
|
+
const { request: request7 } = fetchParams;
|
|
26774
|
+
const { protocol: scheme } = requestCurrentURL(request7);
|
|
26775
26775
|
switch (scheme) {
|
|
26776
26776
|
case "about:": {
|
|
26777
26777
|
return Promise.resolve(makeNetworkError("about scheme is not supported"));
|
|
@@ -26780,19 +26780,19 @@ var require_fetch = __commonJS({
|
|
|
26780
26780
|
if (!resolveObjectURL) {
|
|
26781
26781
|
resolveObjectURL = require("node:buffer").resolveObjectURL;
|
|
26782
26782
|
}
|
|
26783
|
-
const blobURLEntry = requestCurrentURL(
|
|
26783
|
+
const blobURLEntry = requestCurrentURL(request7);
|
|
26784
26784
|
if (blobURLEntry.search.length !== 0) {
|
|
26785
26785
|
return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource."));
|
|
26786
26786
|
}
|
|
26787
26787
|
const blob = resolveObjectURL(blobURLEntry.toString());
|
|
26788
|
-
if (
|
|
26788
|
+
if (request7.method !== "GET" || !webidl.is.Blob(blob)) {
|
|
26789
26789
|
return Promise.resolve(makeNetworkError("invalid method"));
|
|
26790
26790
|
}
|
|
26791
26791
|
const response = makeResponse();
|
|
26792
26792
|
const fullLength = blob.size;
|
|
26793
26793
|
const serializedFullLength = isomorphicEncode(`${fullLength}`);
|
|
26794
26794
|
const type = blob.type;
|
|
26795
|
-
if (!
|
|
26795
|
+
if (!request7.headersList.contains("range", true)) {
|
|
26796
26796
|
const bodyWithType = extractBody(blob);
|
|
26797
26797
|
response.statusText = "OK";
|
|
26798
26798
|
response.body = bodyWithType[0];
|
|
@@ -26800,7 +26800,7 @@ var require_fetch = __commonJS({
|
|
|
26800
26800
|
response.headersList.set("content-type", type, true);
|
|
26801
26801
|
} else {
|
|
26802
26802
|
response.rangeRequested = true;
|
|
26803
|
-
const rangeHeader =
|
|
26803
|
+
const rangeHeader = request7.headersList.get("range", true);
|
|
26804
26804
|
const rangeValue = simpleRangeHeaderValue(rangeHeader, true);
|
|
26805
26805
|
if (rangeValue === "failure") {
|
|
26806
26806
|
return Promise.resolve(makeNetworkError("failed to fetch the data URL"));
|
|
@@ -26831,7 +26831,7 @@ var require_fetch = __commonJS({
|
|
|
26831
26831
|
return Promise.resolve(response);
|
|
26832
26832
|
}
|
|
26833
26833
|
case "data:": {
|
|
26834
|
-
const currentURL = requestCurrentURL(
|
|
26834
|
+
const currentURL = requestCurrentURL(request7);
|
|
26835
26835
|
const dataURLStruct = dataURLProcessor(currentURL);
|
|
26836
26836
|
if (dataURLStruct === "failure") {
|
|
26837
26837
|
return Promise.resolve(makeNetworkError("failed to fetch the data URL"));
|
|
@@ -26920,41 +26920,41 @@ var require_fetch = __commonJS({
|
|
|
26920
26920
|
}
|
|
26921
26921
|
}
|
|
26922
26922
|
async function httpFetch(fetchParams) {
|
|
26923
|
-
const
|
|
26923
|
+
const request7 = fetchParams.request;
|
|
26924
26924
|
let response = null;
|
|
26925
26925
|
let actualResponse = null;
|
|
26926
26926
|
const timingInfo = fetchParams.timingInfo;
|
|
26927
|
-
if (
|
|
26927
|
+
if (request7.serviceWorkers === "all") {
|
|
26928
26928
|
}
|
|
26929
26929
|
if (response === null) {
|
|
26930
|
-
if (
|
|
26931
|
-
|
|
26930
|
+
if (request7.redirect === "follow") {
|
|
26931
|
+
request7.serviceWorkers = "none";
|
|
26932
26932
|
}
|
|
26933
26933
|
actualResponse = response = await httpNetworkOrCacheFetch(fetchParams);
|
|
26934
|
-
if (
|
|
26934
|
+
if (request7.responseTainting === "cors" && corsCheck(request7, response) === "failure") {
|
|
26935
26935
|
return makeNetworkError("cors failure");
|
|
26936
26936
|
}
|
|
26937
|
-
if (TAOCheck(
|
|
26938
|
-
|
|
26937
|
+
if (TAOCheck(request7, response) === "failure") {
|
|
26938
|
+
request7.timingAllowFailed = true;
|
|
26939
26939
|
}
|
|
26940
26940
|
}
|
|
26941
|
-
if ((
|
|
26942
|
-
|
|
26943
|
-
|
|
26944
|
-
|
|
26941
|
+
if ((request7.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck(
|
|
26942
|
+
request7.origin,
|
|
26943
|
+
request7.client,
|
|
26944
|
+
request7.destination,
|
|
26945
26945
|
actualResponse
|
|
26946
26946
|
) === "blocked") {
|
|
26947
26947
|
return makeNetworkError("blocked");
|
|
26948
26948
|
}
|
|
26949
26949
|
if (redirectStatusSet.has(actualResponse.status)) {
|
|
26950
|
-
if (
|
|
26950
|
+
if (request7.redirect !== "manual") {
|
|
26951
26951
|
fetchParams.controller.connection.destroy(void 0, false);
|
|
26952
26952
|
}
|
|
26953
|
-
if (
|
|
26953
|
+
if (request7.redirect === "error") {
|
|
26954
26954
|
response = makeNetworkError("unexpected redirect");
|
|
26955
|
-
} else if (
|
|
26955
|
+
} else if (request7.redirect === "manual") {
|
|
26956
26956
|
response = actualResponse;
|
|
26957
|
-
} else if (
|
|
26957
|
+
} else if (request7.redirect === "follow") {
|
|
26958
26958
|
response = await httpRedirectFetch(fetchParams, response);
|
|
26959
26959
|
} else {
|
|
26960
26960
|
assert2(false);
|
|
@@ -26964,13 +26964,13 @@ var require_fetch = __commonJS({
|
|
|
26964
26964
|
return response;
|
|
26965
26965
|
}
|
|
26966
26966
|
function httpRedirectFetch(fetchParams, response) {
|
|
26967
|
-
const
|
|
26967
|
+
const request7 = fetchParams.request;
|
|
26968
26968
|
const actualResponse = response.internalResponse ? response.internalResponse : response;
|
|
26969
26969
|
let locationURL;
|
|
26970
26970
|
try {
|
|
26971
26971
|
locationURL = responseLocationURL(
|
|
26972
26972
|
actualResponse,
|
|
26973
|
-
requestCurrentURL(
|
|
26973
|
+
requestCurrentURL(request7).hash
|
|
26974
26974
|
);
|
|
26975
26975
|
if (locationURL == null) {
|
|
26976
26976
|
return response;
|
|
@@ -26981,63 +26981,63 @@ var require_fetch = __commonJS({
|
|
|
26981
26981
|
if (!urlIsHttpHttpsScheme(locationURL)) {
|
|
26982
26982
|
return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme"));
|
|
26983
26983
|
}
|
|
26984
|
-
if (
|
|
26984
|
+
if (request7.redirectCount === 20) {
|
|
26985
26985
|
return Promise.resolve(makeNetworkError("redirect count exceeded"));
|
|
26986
26986
|
}
|
|
26987
|
-
|
|
26988
|
-
if (
|
|
26987
|
+
request7.redirectCount += 1;
|
|
26988
|
+
if (request7.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request7, locationURL)) {
|
|
26989
26989
|
return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"'));
|
|
26990
26990
|
}
|
|
26991
|
-
if (
|
|
26991
|
+
if (request7.responseTainting === "cors" && (locationURL.username || locationURL.password)) {
|
|
26992
26992
|
return Promise.resolve(makeNetworkError(
|
|
26993
26993
|
'URL cannot contain credentials for request mode "cors"'
|
|
26994
26994
|
));
|
|
26995
26995
|
}
|
|
26996
|
-
if (actualResponse.status !== 303 &&
|
|
26996
|
+
if (actualResponse.status !== 303 && request7.body != null && request7.body.source == null) {
|
|
26997
26997
|
return Promise.resolve(makeNetworkError());
|
|
26998
26998
|
}
|
|
26999
|
-
if ([301, 302].includes(actualResponse.status) &&
|
|
27000
|
-
|
|
27001
|
-
|
|
26999
|
+
if ([301, 302].includes(actualResponse.status) && request7.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request7.method)) {
|
|
27000
|
+
request7.method = "GET";
|
|
27001
|
+
request7.body = null;
|
|
27002
27002
|
for (const headerName of requestBodyHeader) {
|
|
27003
|
-
|
|
27003
|
+
request7.headersList.delete(headerName);
|
|
27004
27004
|
}
|
|
27005
27005
|
}
|
|
27006
|
-
if (!sameOrigin(requestCurrentURL(
|
|
27007
|
-
|
|
27008
|
-
|
|
27009
|
-
|
|
27010
|
-
|
|
27006
|
+
if (!sameOrigin(requestCurrentURL(request7), locationURL)) {
|
|
27007
|
+
request7.headersList.delete("authorization", true);
|
|
27008
|
+
request7.headersList.delete("proxy-authorization", true);
|
|
27009
|
+
request7.headersList.delete("cookie", true);
|
|
27010
|
+
request7.headersList.delete("host", true);
|
|
27011
27011
|
}
|
|
27012
|
-
if (
|
|
27013
|
-
assert2(
|
|
27014
|
-
|
|
27012
|
+
if (request7.body != null) {
|
|
27013
|
+
assert2(request7.body.source != null);
|
|
27014
|
+
request7.body = safelyExtractBody(request7.body.source)[0];
|
|
27015
27015
|
}
|
|
27016
27016
|
const timingInfo = fetchParams.timingInfo;
|
|
27017
27017
|
timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability);
|
|
27018
27018
|
if (timingInfo.redirectStartTime === 0) {
|
|
27019
27019
|
timingInfo.redirectStartTime = timingInfo.startTime;
|
|
27020
27020
|
}
|
|
27021
|
-
|
|
27022
|
-
setRequestReferrerPolicyOnRedirect(
|
|
27021
|
+
request7.urlList.push(locationURL);
|
|
27022
|
+
setRequestReferrerPolicyOnRedirect(request7, actualResponse);
|
|
27023
27023
|
return mainFetch(fetchParams, true);
|
|
27024
27024
|
}
|
|
27025
27025
|
async function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) {
|
|
27026
|
-
const
|
|
27026
|
+
const request7 = fetchParams.request;
|
|
27027
27027
|
let httpFetchParams = null;
|
|
27028
27028
|
let httpRequest = null;
|
|
27029
27029
|
let response = null;
|
|
27030
27030
|
const httpCache = null;
|
|
27031
27031
|
const revalidatingFlag = false;
|
|
27032
|
-
if (
|
|
27032
|
+
if (request7.window === "no-window" && request7.redirect === "error") {
|
|
27033
27033
|
httpFetchParams = fetchParams;
|
|
27034
|
-
httpRequest =
|
|
27034
|
+
httpRequest = request7;
|
|
27035
27035
|
} else {
|
|
27036
|
-
httpRequest = cloneRequest(
|
|
27036
|
+
httpRequest = cloneRequest(request7);
|
|
27037
27037
|
httpFetchParams = { ...fetchParams };
|
|
27038
27038
|
httpFetchParams.request = httpRequest;
|
|
27039
27039
|
}
|
|
27040
|
-
const includeCredentials =
|
|
27040
|
+
const includeCredentials = request7.credentials === "include" || request7.credentials === "same-origin" && request7.responseTainting === "basic";
|
|
27041
27041
|
const contentLength = httpRequest.body ? httpRequest.body.length : null;
|
|
27042
27042
|
let contentLengthHeaderValue = null;
|
|
27043
27043
|
if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) {
|
|
@@ -27124,14 +27124,14 @@ var require_fetch = __commonJS({
|
|
|
27124
27124
|
response.rangeRequested = true;
|
|
27125
27125
|
}
|
|
27126
27126
|
response.requestIncludesCredentials = includeCredentials;
|
|
27127
|
-
if (response.status === 401 && httpRequest.responseTainting !== "cors" && includeCredentials && (
|
|
27128
|
-
if (
|
|
27129
|
-
if (
|
|
27127
|
+
if (response.status === 401 && httpRequest.responseTainting !== "cors" && includeCredentials && (request7.useURLCredentials !== void 0 || isTraversableNavigable(request7.traversableForUserPrompts))) {
|
|
27128
|
+
if (request7.body != null) {
|
|
27129
|
+
if (request7.body.source == null) {
|
|
27130
27130
|
return response;
|
|
27131
27131
|
}
|
|
27132
|
-
|
|
27132
|
+
request7.body = safelyExtractBody(request7.body.source)[0];
|
|
27133
27133
|
}
|
|
27134
|
-
if (
|
|
27134
|
+
if (request7.useURLCredentials === void 0 || isAuthenticationFetch) {
|
|
27135
27135
|
if (isCancelled(fetchParams)) {
|
|
27136
27136
|
return makeAppropriateNetworkError(fetchParams);
|
|
27137
27137
|
}
|
|
@@ -27141,7 +27141,7 @@ var require_fetch = __commonJS({
|
|
|
27141
27141
|
response = await httpNetworkOrCacheFetch(fetchParams, true);
|
|
27142
27142
|
}
|
|
27143
27143
|
if (response.status === 407) {
|
|
27144
|
-
if (
|
|
27144
|
+
if (request7.window === "no-window") {
|
|
27145
27145
|
return makeNetworkError();
|
|
27146
27146
|
}
|
|
27147
27147
|
if (isCancelled(fetchParams)) {
|
|
@@ -27153,7 +27153,7 @@ var require_fetch = __commonJS({
|
|
|
27153
27153
|
// response’s status is 421
|
|
27154
27154
|
response.status === 421 && // isNewConnectionFetch is false
|
|
27155
27155
|
!isNewConnectionFetch && // request’s body is null, or request’s body is non-null and request’s body’s source is non-null
|
|
27156
|
-
(
|
|
27156
|
+
(request7.body == null || request7.body.source != null)
|
|
27157
27157
|
) {
|
|
27158
27158
|
if (isCancelled(fetchParams)) {
|
|
27159
27159
|
return makeAppropriateNetworkError(fetchParams);
|
|
@@ -27183,21 +27183,21 @@ var require_fetch = __commonJS({
|
|
|
27183
27183
|
}
|
|
27184
27184
|
}
|
|
27185
27185
|
};
|
|
27186
|
-
const
|
|
27186
|
+
const request7 = fetchParams.request;
|
|
27187
27187
|
let response = null;
|
|
27188
27188
|
const timingInfo = fetchParams.timingInfo;
|
|
27189
27189
|
const httpCache = null;
|
|
27190
27190
|
if (httpCache == null) {
|
|
27191
|
-
|
|
27191
|
+
request7.cache = "no-store";
|
|
27192
27192
|
}
|
|
27193
27193
|
const newConnection = forceNewConnection ? "yes" : "no";
|
|
27194
|
-
if (
|
|
27194
|
+
if (request7.mode === "websocket") {
|
|
27195
27195
|
} else {
|
|
27196
27196
|
}
|
|
27197
27197
|
let requestBody = null;
|
|
27198
|
-
if (
|
|
27198
|
+
if (request7.body == null && fetchParams.processRequestEndOfBody) {
|
|
27199
27199
|
queueMicrotask(() => fetchParams.processRequestEndOfBody());
|
|
27200
|
-
} else if (
|
|
27200
|
+
} else if (request7.body != null) {
|
|
27201
27201
|
const processBodyChunk = async function* (bytes) {
|
|
27202
27202
|
if (isCancelled(fetchParams)) {
|
|
27203
27203
|
return;
|
|
@@ -27225,7 +27225,7 @@ var require_fetch = __commonJS({
|
|
|
27225
27225
|
};
|
|
27226
27226
|
requestBody = (async function* () {
|
|
27227
27227
|
try {
|
|
27228
|
-
for await (const bytes of
|
|
27228
|
+
for await (const bytes of request7.body.stream) {
|
|
27229
27229
|
yield* processBodyChunk(bytes);
|
|
27230
27230
|
}
|
|
27231
27231
|
processEndOfBody();
|
|
@@ -27332,7 +27332,7 @@ var require_fetch = __commonJS({
|
|
|
27332
27332
|
}
|
|
27333
27333
|
return response;
|
|
27334
27334
|
function dispatch({ body }) {
|
|
27335
|
-
const url2 = requestCurrentURL(
|
|
27335
|
+
const url2 = requestCurrentURL(request7);
|
|
27336
27336
|
const agent = fetchParams.controller.dispatcher;
|
|
27337
27337
|
const path41 = url2.pathname + url2.search;
|
|
27338
27338
|
const hasTrailingQuestionMark = url2.search.length === 0 && url2.href[url2.href.length - url2.hash.length - 1] === "?";
|
|
@@ -27340,11 +27340,11 @@ var require_fetch = __commonJS({
|
|
|
27340
27340
|
{
|
|
27341
27341
|
path: hasTrailingQuestionMark ? `${path41}?` : path41,
|
|
27342
27342
|
origin: url2.origin,
|
|
27343
|
-
method:
|
|
27344
|
-
body: agent.isMockActive ?
|
|
27345
|
-
headers:
|
|
27343
|
+
method: request7.method,
|
|
27344
|
+
body: agent.isMockActive ? request7.body && (request7.body.source || request7.body.stream) : body,
|
|
27345
|
+
headers: request7.headersList.entries,
|
|
27346
27346
|
maxRedirections: 0,
|
|
27347
|
-
upgrade:
|
|
27347
|
+
upgrade: request7.mode === "websocket" ? "websocket" : void 0
|
|
27348
27348
|
},
|
|
27349
27349
|
{
|
|
27350
27350
|
body: null,
|
|
@@ -27381,9 +27381,9 @@ var require_fetch = __commonJS({
|
|
|
27381
27381
|
}
|
|
27382
27382
|
const location = headersList.get("location", true);
|
|
27383
27383
|
this.body = new Readable({ read: resume });
|
|
27384
|
-
const willFollow = location &&
|
|
27384
|
+
const willFollow = location && request7.redirect === "follow" && redirectStatusSet.has(status);
|
|
27385
27385
|
const decoders = [];
|
|
27386
|
-
if (
|
|
27386
|
+
if (request7.method !== "HEAD" && request7.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) {
|
|
27387
27387
|
const contentEncoding = headersList.get("content-encoding", true);
|
|
27388
27388
|
const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : [];
|
|
27389
27389
|
const maxContentEncodings = 5;
|
|
@@ -27579,31 +27579,31 @@ var require_cache3 = __commonJS({
|
|
|
27579
27579
|
webidl.util.markAsUncloneable(this);
|
|
27580
27580
|
this.#relevantRequestResponseList = arguments[1];
|
|
27581
27581
|
}
|
|
27582
|
-
async match(
|
|
27582
|
+
async match(request7, options = {}) {
|
|
27583
27583
|
webidl.brandCheck(this, _Cache);
|
|
27584
27584
|
const prefix = "Cache.match";
|
|
27585
27585
|
webidl.argumentLengthCheck(arguments, 1, prefix);
|
|
27586
|
-
|
|
27586
|
+
request7 = webidl.converters.RequestInfo(request7);
|
|
27587
27587
|
options = webidl.converters.CacheQueryOptions(options, prefix, "options");
|
|
27588
|
-
const p = this.#internalMatchAll(
|
|
27588
|
+
const p = this.#internalMatchAll(request7, options, 1);
|
|
27589
27589
|
if (p.length === 0) {
|
|
27590
27590
|
return;
|
|
27591
27591
|
}
|
|
27592
27592
|
return p[0];
|
|
27593
27593
|
}
|
|
27594
|
-
async matchAll(
|
|
27594
|
+
async matchAll(request7 = void 0, options = {}) {
|
|
27595
27595
|
webidl.brandCheck(this, _Cache);
|
|
27596
27596
|
const prefix = "Cache.matchAll";
|
|
27597
|
-
if (
|
|
27597
|
+
if (request7 !== void 0) request7 = webidl.converters.RequestInfo(request7);
|
|
27598
27598
|
options = webidl.converters.CacheQueryOptions(options, prefix, "options");
|
|
27599
|
-
return this.#internalMatchAll(
|
|
27599
|
+
return this.#internalMatchAll(request7, options);
|
|
27600
27600
|
}
|
|
27601
|
-
async add(
|
|
27601
|
+
async add(request7) {
|
|
27602
27602
|
webidl.brandCheck(this, _Cache);
|
|
27603
27603
|
const prefix = "Cache.add";
|
|
27604
27604
|
webidl.argumentLengthCheck(arguments, 1, prefix);
|
|
27605
|
-
|
|
27606
|
-
const requests = [
|
|
27605
|
+
request7 = webidl.converters.RequestInfo(request7);
|
|
27606
|
+
const requests = [request7];
|
|
27607
27607
|
const responseArrayPromise = this.addAll(requests);
|
|
27608
27608
|
return await responseArrayPromise;
|
|
27609
27609
|
}
|
|
@@ -27613,19 +27613,19 @@ var require_cache3 = __commonJS({
|
|
|
27613
27613
|
webidl.argumentLengthCheck(arguments, 1, prefix);
|
|
27614
27614
|
const responsePromises = [];
|
|
27615
27615
|
const requestList = [];
|
|
27616
|
-
for (let
|
|
27617
|
-
if (
|
|
27616
|
+
for (let request7 of requests) {
|
|
27617
|
+
if (request7 === void 0) {
|
|
27618
27618
|
throw webidl.errors.conversionFailed({
|
|
27619
27619
|
prefix,
|
|
27620
27620
|
argument: "Argument 1",
|
|
27621
27621
|
types: ["undefined is not allowed"]
|
|
27622
27622
|
});
|
|
27623
27623
|
}
|
|
27624
|
-
|
|
27625
|
-
if (typeof
|
|
27624
|
+
request7 = webidl.converters.RequestInfo(request7);
|
|
27625
|
+
if (typeof request7 === "string") {
|
|
27626
27626
|
continue;
|
|
27627
27627
|
}
|
|
27628
|
-
const r2 = getRequestState(
|
|
27628
|
+
const r2 = getRequestState(request7);
|
|
27629
27629
|
if (!urlIsHttpHttpsScheme(r2.url) || r2.method !== "GET") {
|
|
27630
27630
|
throw webidl.errors.exception({
|
|
27631
27631
|
header: prefix,
|
|
@@ -27634,8 +27634,8 @@ var require_cache3 = __commonJS({
|
|
|
27634
27634
|
}
|
|
27635
27635
|
}
|
|
27636
27636
|
const fetchControllers = [];
|
|
27637
|
-
for (const
|
|
27638
|
-
const r2 = getRequestState(new Request(
|
|
27637
|
+
for (const request7 of requests) {
|
|
27638
|
+
const r2 = getRequestState(new Request(request7));
|
|
27639
27639
|
if (!urlIsHttpHttpsScheme(r2.url)) {
|
|
27640
27640
|
throw webidl.errors.exception({
|
|
27641
27641
|
header: prefix,
|
|
@@ -27712,17 +27712,17 @@ var require_cache3 = __commonJS({
|
|
|
27712
27712
|
});
|
|
27713
27713
|
return cacheJobPromise.promise;
|
|
27714
27714
|
}
|
|
27715
|
-
async put(
|
|
27715
|
+
async put(request7, response) {
|
|
27716
27716
|
webidl.brandCheck(this, _Cache);
|
|
27717
27717
|
const prefix = "Cache.put";
|
|
27718
27718
|
webidl.argumentLengthCheck(arguments, 2, prefix);
|
|
27719
|
-
|
|
27719
|
+
request7 = webidl.converters.RequestInfo(request7);
|
|
27720
27720
|
response = webidl.converters.Response(response, prefix, "response");
|
|
27721
27721
|
let innerRequest = null;
|
|
27722
|
-
if (webidl.is.Request(
|
|
27723
|
-
innerRequest = getRequestState(
|
|
27722
|
+
if (webidl.is.Request(request7)) {
|
|
27723
|
+
innerRequest = getRequestState(request7);
|
|
27724
27724
|
} else {
|
|
27725
|
-
innerRequest = getRequestState(new Request(
|
|
27725
|
+
innerRequest = getRequestState(new Request(request7));
|
|
27726
27726
|
}
|
|
27727
27727
|
if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") {
|
|
27728
27728
|
throw webidl.errors.exception({
|
|
@@ -27793,21 +27793,21 @@ var require_cache3 = __commonJS({
|
|
|
27793
27793
|
});
|
|
27794
27794
|
return cacheJobPromise.promise;
|
|
27795
27795
|
}
|
|
27796
|
-
async delete(
|
|
27796
|
+
async delete(request7, options = {}) {
|
|
27797
27797
|
webidl.brandCheck(this, _Cache);
|
|
27798
27798
|
const prefix = "Cache.delete";
|
|
27799
27799
|
webidl.argumentLengthCheck(arguments, 1, prefix);
|
|
27800
|
-
|
|
27800
|
+
request7 = webidl.converters.RequestInfo(request7);
|
|
27801
27801
|
options = webidl.converters.CacheQueryOptions(options, prefix, "options");
|
|
27802
27802
|
let r2 = null;
|
|
27803
|
-
if (webidl.is.Request(
|
|
27804
|
-
r2 = getRequestState(
|
|
27803
|
+
if (webidl.is.Request(request7)) {
|
|
27804
|
+
r2 = getRequestState(request7);
|
|
27805
27805
|
if (r2.method !== "GET" && !options.ignoreMethod) {
|
|
27806
27806
|
return false;
|
|
27807
27807
|
}
|
|
27808
27808
|
} else {
|
|
27809
|
-
assert2(typeof
|
|
27810
|
-
r2 = getRequestState(new Request(
|
|
27809
|
+
assert2(typeof request7 === "string");
|
|
27810
|
+
r2 = getRequestState(new Request(request7));
|
|
27811
27811
|
}
|
|
27812
27812
|
const operations = [];
|
|
27813
27813
|
const operation = {
|
|
@@ -27839,25 +27839,25 @@ var require_cache3 = __commonJS({
|
|
|
27839
27839
|
* @param {import('../../../types/cache').CacheQueryOptions} options
|
|
27840
27840
|
* @returns {Promise<readonly Request[]>}
|
|
27841
27841
|
*/
|
|
27842
|
-
async keys(
|
|
27842
|
+
async keys(request7 = void 0, options = {}) {
|
|
27843
27843
|
webidl.brandCheck(this, _Cache);
|
|
27844
27844
|
const prefix = "Cache.keys";
|
|
27845
|
-
if (
|
|
27845
|
+
if (request7 !== void 0) request7 = webidl.converters.RequestInfo(request7);
|
|
27846
27846
|
options = webidl.converters.CacheQueryOptions(options, prefix, "options");
|
|
27847
27847
|
let r2 = null;
|
|
27848
|
-
if (
|
|
27849
|
-
if (webidl.is.Request(
|
|
27850
|
-
r2 = getRequestState(
|
|
27848
|
+
if (request7 !== void 0) {
|
|
27849
|
+
if (webidl.is.Request(request7)) {
|
|
27850
|
+
r2 = getRequestState(request7);
|
|
27851
27851
|
if (r2.method !== "GET" && !options.ignoreMethod) {
|
|
27852
27852
|
return [];
|
|
27853
27853
|
}
|
|
27854
|
-
} else if (typeof
|
|
27855
|
-
r2 = getRequestState(new Request(
|
|
27854
|
+
} else if (typeof request7 === "string") {
|
|
27855
|
+
r2 = getRequestState(new Request(request7));
|
|
27856
27856
|
}
|
|
27857
27857
|
}
|
|
27858
27858
|
const promise2 = createDeferredPromise();
|
|
27859
27859
|
const requests = [];
|
|
27860
|
-
if (
|
|
27860
|
+
if (request7 === void 0) {
|
|
27861
27861
|
for (const requestResponse of this.#relevantRequestResponseList) {
|
|
27862
27862
|
requests.push(requestResponse[0]);
|
|
27863
27863
|
}
|
|
@@ -27869,9 +27869,9 @@ var require_cache3 = __commonJS({
|
|
|
27869
27869
|
}
|
|
27870
27870
|
queueMicrotask(() => {
|
|
27871
27871
|
const requestList = [];
|
|
27872
|
-
for (const
|
|
27872
|
+
for (const request8 of requests) {
|
|
27873
27873
|
const requestObject = fromInnerRequest(
|
|
27874
|
-
|
|
27874
|
+
request8,
|
|
27875
27875
|
void 0,
|
|
27876
27876
|
new AbortController().signal,
|
|
27877
27877
|
"immutable"
|
|
@@ -27990,9 +27990,9 @@ var require_cache3 = __commonJS({
|
|
|
27990
27990
|
* @param {import('../../../types/cache').CacheQueryOptions | undefined} options
|
|
27991
27991
|
* @returns {boolean}
|
|
27992
27992
|
*/
|
|
27993
|
-
#requestMatchesCachedItem(requestQuery,
|
|
27993
|
+
#requestMatchesCachedItem(requestQuery, request7, response = null, options) {
|
|
27994
27994
|
const queryURL = new URL(requestQuery.url);
|
|
27995
|
-
const cachedURL = new URL(
|
|
27995
|
+
const cachedURL = new URL(request7.url);
|
|
27996
27996
|
if (options?.ignoreSearch) {
|
|
27997
27997
|
cachedURL.search = "";
|
|
27998
27998
|
queryURL.search = "";
|
|
@@ -28008,7 +28008,7 @@ var require_cache3 = __commonJS({
|
|
|
28008
28008
|
if (fieldValue === "*") {
|
|
28009
28009
|
return false;
|
|
28010
28010
|
}
|
|
28011
|
-
const requestValue =
|
|
28011
|
+
const requestValue = request7.headersList.get(fieldValue);
|
|
28012
28012
|
const queryValue = requestQuery.headersList.get(fieldValue);
|
|
28013
28013
|
if (requestValue !== queryValue) {
|
|
28014
28014
|
return false;
|
|
@@ -28016,20 +28016,20 @@ var require_cache3 = __commonJS({
|
|
|
28016
28016
|
}
|
|
28017
28017
|
return true;
|
|
28018
28018
|
}
|
|
28019
|
-
#internalMatchAll(
|
|
28019
|
+
#internalMatchAll(request7, options, maxResponses = Infinity) {
|
|
28020
28020
|
let r2 = null;
|
|
28021
|
-
if (
|
|
28022
|
-
if (webidl.is.Request(
|
|
28023
|
-
r2 = getRequestState(
|
|
28021
|
+
if (request7 !== void 0) {
|
|
28022
|
+
if (webidl.is.Request(request7)) {
|
|
28023
|
+
r2 = getRequestState(request7);
|
|
28024
28024
|
if (r2.method !== "GET" && !options.ignoreMethod) {
|
|
28025
28025
|
return [];
|
|
28026
28026
|
}
|
|
28027
|
-
} else if (typeof
|
|
28028
|
-
r2 = getRequestState(new Request(
|
|
28027
|
+
} else if (typeof request7 === "string") {
|
|
28028
|
+
r2 = getRequestState(new Request(request7));
|
|
28029
28029
|
}
|
|
28030
28030
|
}
|
|
28031
28031
|
const responses = [];
|
|
28032
|
-
if (
|
|
28032
|
+
if (request7 === void 0) {
|
|
28033
28033
|
for (const requestResponse of this.#relevantRequestResponseList) {
|
|
28034
28034
|
responses.push(requestResponse[1]);
|
|
28035
28035
|
}
|
|
@@ -28121,21 +28121,21 @@ var require_cachestorage = __commonJS({
|
|
|
28121
28121
|
}
|
|
28122
28122
|
webidl.util.markAsUncloneable(this);
|
|
28123
28123
|
}
|
|
28124
|
-
async match(
|
|
28124
|
+
async match(request7, options = {}) {
|
|
28125
28125
|
webidl.brandCheck(this, _CacheStorage);
|
|
28126
28126
|
webidl.argumentLengthCheck(arguments, 1, "CacheStorage.match");
|
|
28127
|
-
|
|
28127
|
+
request7 = webidl.converters.RequestInfo(request7);
|
|
28128
28128
|
options = webidl.converters.MultiCacheQueryOptions(options);
|
|
28129
28129
|
if (options.cacheName != null) {
|
|
28130
28130
|
if (this.#caches.has(options.cacheName)) {
|
|
28131
28131
|
const cacheList = this.#caches.get(options.cacheName);
|
|
28132
28132
|
const cache = new Cache(kConstruct, cacheList);
|
|
28133
|
-
return await cache.match(
|
|
28133
|
+
return await cache.match(request7, options);
|
|
28134
28134
|
}
|
|
28135
28135
|
} else {
|
|
28136
28136
|
for (const cacheList of this.#caches.values()) {
|
|
28137
28137
|
const cache = new Cache(kConstruct, cacheList);
|
|
28138
|
-
const response = await cache.match(
|
|
28138
|
+
const response = await cache.match(request7, options);
|
|
28139
28139
|
if (response !== void 0) {
|
|
28140
28140
|
return response;
|
|
28141
28141
|
}
|
|
@@ -29327,7 +29327,7 @@ var require_connection = __commonJS({
|
|
|
29327
29327
|
function establishWebSocketConnection(url2, protocols, client, handler, options) {
|
|
29328
29328
|
const requestURL = url2;
|
|
29329
29329
|
requestURL.protocol = url2.protocol === "ws:" ? "http:" : "https:";
|
|
29330
|
-
const
|
|
29330
|
+
const request7 = makeRequest({
|
|
29331
29331
|
urlList: [requestURL],
|
|
29332
29332
|
client,
|
|
29333
29333
|
serviceWorkers: "none",
|
|
@@ -29340,18 +29340,18 @@ var require_connection = __commonJS({
|
|
|
29340
29340
|
});
|
|
29341
29341
|
if (options.headers) {
|
|
29342
29342
|
const headersList = getHeadersList(new Headers(options.headers));
|
|
29343
|
-
|
|
29343
|
+
request7.headersList = headersList;
|
|
29344
29344
|
}
|
|
29345
29345
|
const keyValue = crypto.randomBytes(16).toString("base64");
|
|
29346
|
-
|
|
29347
|
-
|
|
29346
|
+
request7.headersList.append("sec-websocket-key", keyValue, true);
|
|
29347
|
+
request7.headersList.append("sec-websocket-version", "13", true);
|
|
29348
29348
|
for (const protocol of protocols) {
|
|
29349
|
-
|
|
29349
|
+
request7.headersList.append("sec-websocket-protocol", protocol, true);
|
|
29350
29350
|
}
|
|
29351
29351
|
const permessageDeflate = "permessage-deflate; client_max_window_bits";
|
|
29352
|
-
|
|
29352
|
+
request7.headersList.append("sec-websocket-extensions", permessageDeflate, true);
|
|
29353
29353
|
const controller = fetching({
|
|
29354
|
-
request:
|
|
29354
|
+
request: request7,
|
|
29355
29355
|
useParallelQueue: true,
|
|
29356
29356
|
dispatcher: options.dispatcher,
|
|
29357
29357
|
processResponse(response) {
|
|
@@ -29398,7 +29398,7 @@ var require_connection = __commonJS({
|
|
|
29398
29398
|
}
|
|
29399
29399
|
const secProtocol = response.headersList.get("Sec-WebSocket-Protocol");
|
|
29400
29400
|
if (secProtocol !== null) {
|
|
29401
|
-
const requestProtocols = getDecodeSplit("sec-websocket-protocol",
|
|
29401
|
+
const requestProtocols = getDecodeSplit("sec-websocket-protocol", request7.headersList);
|
|
29402
29402
|
if (requestProtocols === null || !requestProtocols.includes(secProtocol)) {
|
|
29403
29403
|
failWebsocketConnection(handler, 1002, "Protocol was not set in the opening handshake.");
|
|
29404
29404
|
return;
|
|
@@ -59667,6 +59667,7 @@ function buildLayoutPaths(root) {
|
|
|
59667
59667
|
frontdoorCaBundlesDir: import_node_path17.default.join(root, "frontdoor", "ca", "bundles"),
|
|
59668
59668
|
frontdoorStateFile: import_node_path17.default.join(root, "frontdoor", "state.json"),
|
|
59669
59669
|
frontdoorLockFile: import_node_path17.default.join(root, "frontdoor", "start.lock"),
|
|
59670
|
+
frontdoorControlTokenFile: import_node_path17.default.join(root, "frontdoor", "control-token"),
|
|
59670
59671
|
frontdoorSessionsDir: import_node_path17.default.join(root, "frontdoor", "sessions"),
|
|
59671
59672
|
frontdoorLogPath: import_node_path17.default.join(root, "logs", "frontdoor.log"),
|
|
59672
59673
|
usageDir: import_node_path17.default.join(root, "usage"),
|
|
@@ -61039,7 +61040,7 @@ function registerIdentityCommand(program2, deps) {
|
|
|
61039
61040
|
// package.json
|
|
61040
61041
|
var package_default = {
|
|
61041
61042
|
name: "agent-shim",
|
|
61042
|
-
version: "8.
|
|
61043
|
+
version: "8.3.0",
|
|
61043
61044
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
61044
61045
|
license: "MIT",
|
|
61045
61046
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
|
@@ -63637,9 +63638,9 @@ function headersFor(credentials, sessionId) {
|
|
|
63637
63638
|
session_id: sessionId
|
|
63638
63639
|
};
|
|
63639
63640
|
}
|
|
63640
|
-
async function callCodex(ports,
|
|
63641
|
+
async function callCodex(ports, request7, sessionId, signal) {
|
|
63641
63642
|
const url2 = ports.url ?? CODEX_RESPONSES_URL;
|
|
63642
|
-
const body = JSON.stringify(
|
|
63643
|
+
const body = JSON.stringify(request7);
|
|
63643
63644
|
const send = async (credentials2) => await fetchUntilHeaders(ports.fetch, ports.timers, url2, {
|
|
63644
63645
|
method: "POST",
|
|
63645
63646
|
headers: headersFor(credentials2, sessionId),
|
|
@@ -63913,23 +63914,23 @@ function singleValue(value) {
|
|
|
63913
63914
|
return typeof value === "string" ? value : void 0;
|
|
63914
63915
|
}
|
|
63915
63916
|
function admitLaunch(isLiveToken) {
|
|
63916
|
-
return (
|
|
63917
|
-
const token = singleValue(
|
|
63918
|
-
return token !== void 0 && isLiveToken(token) ? { ok: true, headers: { ...
|
|
63917
|
+
return (request7) => {
|
|
63918
|
+
const token = singleValue(request7.headers[AUTH_HEADER]);
|
|
63919
|
+
return token !== void 0 && isLiveToken(token) ? { ok: true, headers: { ...request7.forwardable } } : { ok: false, message: "agent-shim front door: this request carries no capability from a live agent-shim launch" };
|
|
63919
63920
|
};
|
|
63920
63921
|
}
|
|
63921
63922
|
function admitHop(hopSecret, custody) {
|
|
63922
|
-
return (
|
|
63923
|
-
if (singleValue(
|
|
63923
|
+
return (request7) => {
|
|
63924
|
+
if (singleValue(request7.headers[HOP_SECRET_HEADER]) !== hopSecret) {
|
|
63924
63925
|
return { ok: false, message: "agent-shim front door: the direct listener serves only this door's own headroom hop" };
|
|
63925
63926
|
}
|
|
63926
|
-
const hopId = singleValue(
|
|
63927
|
-
const provider = parseProviderPath(new URL(
|
|
63927
|
+
const hopId = singleValue(request7.headers[HOP_ID_HEADER]);
|
|
63928
|
+
const provider = parseProviderPath(new URL(request7.url, "http://127.0.0.1").pathname)?.provider;
|
|
63928
63929
|
const credentials = hopId === void 0 || provider === void 0 ? void 0 : custody.redeem(hopId, provider);
|
|
63929
63930
|
if (credentials === void 0) {
|
|
63930
63931
|
return { ok: false, message: "agent-shim front door: this request names no live headroom hop for its provider" };
|
|
63931
63932
|
}
|
|
63932
|
-
return { ok: true, headers: restoreCredentials(
|
|
63933
|
+
return { ok: true, headers: restoreCredentials(request7.forwardable, credentials) };
|
|
63933
63934
|
};
|
|
63934
63935
|
}
|
|
63935
63936
|
function createDoorPipelines(deps) {
|
|
@@ -64047,8 +64048,8 @@ function createFileCapture(file2, now = () => /* @__PURE__ */ new Date()) {
|
|
|
64047
64048
|
connect: (target, intercepted) => {
|
|
64048
64049
|
append({ kind: "connect", host: target.host, port: target.port, intercepted });
|
|
64049
64050
|
},
|
|
64050
|
-
upgrade: (
|
|
64051
|
-
append({ kind: "upgrade", method:
|
|
64051
|
+
upgrade: (request7) => {
|
|
64052
|
+
append({ kind: "upgrade", method: request7.method ?? "?", url: request7.url ?? "?", headers: redactHeaders(request7.headers) });
|
|
64052
64053
|
},
|
|
64053
64054
|
tapStream: (host) => {
|
|
64054
64055
|
nextId += 1;
|
|
@@ -64083,10 +64084,10 @@ function createFileCapture(file2, now = () => /* @__PURE__ */ new Date()) {
|
|
|
64083
64084
|
}
|
|
64084
64085
|
};
|
|
64085
64086
|
},
|
|
64086
|
-
observePassthrough: (
|
|
64087
|
+
observePassthrough: (request7) => {
|
|
64087
64088
|
nextId += 1;
|
|
64088
64089
|
const id = nextId;
|
|
64089
|
-
append({ kind: "request", id, method:
|
|
64090
|
+
append({ kind: "request", id, method: request7.method ?? "?", url: request7.url ?? "?", headers: redactHeaders(request7.headers) });
|
|
64090
64091
|
const logged = { request: 0, response: 0 };
|
|
64091
64092
|
const sequences = { request: 0, response: 0 };
|
|
64092
64093
|
const chunk = (direction, incoming) => {
|
|
@@ -64651,14 +64652,14 @@ function caParses(ca) {
|
|
|
64651
64652
|
var TAP_ALPN_PROTOCOLS = ["h2", "http/1.1"];
|
|
64652
64653
|
async function startConnectServer(config2, effects, preferredPort) {
|
|
64653
64654
|
const tunnelTokens = /* @__PURE__ */ new WeakMap();
|
|
64654
|
-
const onUpgrade = (host) => (
|
|
64655
|
-
config2.capture?.upgrade(
|
|
64655
|
+
const onUpgrade = (host) => (request7, socket, head) => {
|
|
64656
|
+
config2.capture?.upgrade(request7);
|
|
64656
64657
|
if (head.length > 0) {
|
|
64657
64658
|
socket.pause();
|
|
64658
64659
|
socket.unshift(head);
|
|
64659
64660
|
}
|
|
64660
|
-
const headText = `${
|
|
64661
|
-
${
|
|
64661
|
+
const headText = `${request7.method ?? "GET"} ${request7.url ?? "/"} HTTP/1.1\r
|
|
64662
|
+
${request7.rawHeaders.reduce((accumulated, value, index) => index % 2 === 0 ? `${accumulated}${value}: ` : `${accumulated}${value}\r
|
|
64662
64663
|
`, "")}\r
|
|
64663
64664
|
`;
|
|
64664
64665
|
pumpTapSession(socket, async (clientAlpn) => await effects.connectTlsUpstream(host, HTTPS_PORT, clientAlpn), config2.capture?.tapStream?.(host), Buffer.from(headText, "utf8"));
|
|
@@ -64671,16 +64672,16 @@ ${request6.rawHeaders.reduce((accumulated, value, index) => index % 2 === 0 ? `$
|
|
|
64671
64672
|
const tlsAcceptor2 = effects.createTlsAcceptor(config2.leafFor(host), serveSecure2, TAP_ALPN_PROTOCOLS);
|
|
64672
64673
|
return { host, serveSecure: serveSecure2, tlsAcceptor: tlsAcceptor2 };
|
|
64673
64674
|
}
|
|
64674
|
-
const handler = (
|
|
64675
|
-
if (host === config2.routedHost && servedByPipeline(
|
|
64676
|
-
const tunnelToken = tunnelTokens.get(
|
|
64677
|
-
if (tunnelToken !== void 0 &&
|
|
64678
|
-
|
|
64675
|
+
const handler = (request7, response) => {
|
|
64676
|
+
if (host === config2.routedHost && servedByPipeline(request7.url)) {
|
|
64677
|
+
const tunnelToken = tunnelTokens.get(request7.socket);
|
|
64678
|
+
if (tunnelToken !== void 0 && request7.headers[AUTH_HEADER] === void 0) {
|
|
64679
|
+
request7.headers[AUTH_HEADER] = tunnelToken;
|
|
64679
64680
|
}
|
|
64680
|
-
config2.serveRouted(
|
|
64681
|
+
config2.serveRouted(request7, response);
|
|
64681
64682
|
return;
|
|
64682
64683
|
}
|
|
64683
|
-
effects.forwardHttp(config2.upstreamFor(host),
|
|
64684
|
+
effects.forwardHttp(config2.upstreamFor(host), request7, response, config2.capture?.observePassthrough(request7));
|
|
64684
64685
|
};
|
|
64685
64686
|
const httpSession = effects.createHttpSession(handler, onUpgrade(host));
|
|
64686
64687
|
const serveSecure = (secure, capability) => {
|
|
@@ -64977,6 +64978,40 @@ var ExemptTlsAgent = class extends https.Agent {
|
|
|
64977
64978
|
return tls.connect(tlsOptions);
|
|
64978
64979
|
}
|
|
64979
64980
|
};
|
|
64981
|
+
function realRcEventDial(target = { host: CONNECT_INTERCEPT_HOST, port: HTTPS_PORT }) {
|
|
64982
|
+
const agent = new ExemptTlsAgent();
|
|
64983
|
+
return {
|
|
64984
|
+
writeEvents: async (sessionId, headers, body) => await new Promise((resolve, reject) => {
|
|
64985
|
+
const options = {
|
|
64986
|
+
host: target.host,
|
|
64987
|
+
port: target.port,
|
|
64988
|
+
method: "POST",
|
|
64989
|
+
path: `/v1/code/sessions/${encodeURIComponent(sessionId)}/events`,
|
|
64990
|
+
// The Host header names the host whose API this is, not the address dialled: a redirected test dials a loopback stand-in while still speaking to the API host by name, exactly as the forwarded paths present their SNI.
|
|
64991
|
+
headers: { ...headers, host: target.servername ?? target.host, "content-length": String(Buffer.byteLength(body, "utf8")) },
|
|
64992
|
+
agent
|
|
64993
|
+
};
|
|
64994
|
+
options.servername = target.servername ?? target.host;
|
|
64995
|
+
if (target.ca !== void 0) {
|
|
64996
|
+
options.ca = [...target.ca];
|
|
64997
|
+
}
|
|
64998
|
+
if (target.rejectUnauthorized !== void 0) {
|
|
64999
|
+
options.rejectUnauthorized = target.rejectUnauthorized;
|
|
65000
|
+
}
|
|
65001
|
+
const request7 = https.request(options, (response) => {
|
|
65002
|
+
const chunks = [];
|
|
65003
|
+
response.on("data", (chunk) => {
|
|
65004
|
+
chunks.push(chunk);
|
|
65005
|
+
});
|
|
65006
|
+
response.on("end", () => {
|
|
65007
|
+
resolve({ status: response.statusCode ?? HTTP_BAD_GATEWAY, body: Buffer.concat(chunks).toString("utf8") });
|
|
65008
|
+
});
|
|
65009
|
+
});
|
|
65010
|
+
request7.once("error", reject);
|
|
65011
|
+
request7.end(body);
|
|
65012
|
+
})
|
|
65013
|
+
};
|
|
65014
|
+
}
|
|
64980
65015
|
function realConnectEffects() {
|
|
64981
65016
|
const plainAgent = new ExemptHttpAgent();
|
|
64982
65017
|
const tlsAgent = new ExemptTlsAgent();
|
|
@@ -65082,8 +65117,8 @@ function realConnectEffects() {
|
|
|
65082
65117
|
socket.destroy();
|
|
65083
65118
|
});
|
|
65084
65119
|
if (onUpgrade !== void 0) {
|
|
65085
|
-
server.on("upgrade", (
|
|
65086
|
-
onUpgrade(
|
|
65120
|
+
server.on("upgrade", (request7, socket, head) => {
|
|
65121
|
+
onUpgrade(request7, socket, head);
|
|
65087
65122
|
});
|
|
65088
65123
|
}
|
|
65089
65124
|
return {
|
|
@@ -65122,14 +65157,14 @@ function realConnectEffects() {
|
|
|
65122
65157
|
});
|
|
65123
65158
|
socket.once("error", reject);
|
|
65124
65159
|
}),
|
|
65125
|
-
forwardHttp: (target,
|
|
65126
|
-
const headers = forwardableHeaders(
|
|
65160
|
+
forwardHttp: (target, request7, response, observer) => {
|
|
65161
|
+
const headers = forwardableHeaders(request7.headers);
|
|
65127
65162
|
const options = {
|
|
65128
65163
|
host: target.host,
|
|
65129
65164
|
port: target.port,
|
|
65130
65165
|
lookup: realAddressLookup,
|
|
65131
|
-
method:
|
|
65132
|
-
path:
|
|
65166
|
+
method: request7.method,
|
|
65167
|
+
path: request7.url,
|
|
65133
65168
|
headers,
|
|
65134
65169
|
agent: target.tls ? tlsAgent : plainAgent
|
|
65135
65170
|
};
|
|
@@ -65164,15 +65199,15 @@ function realConnectEffects() {
|
|
|
65164
65199
|
response.end(body);
|
|
65165
65200
|
});
|
|
65166
65201
|
if (observer !== void 0) {
|
|
65167
|
-
|
|
65202
|
+
request7.on("data", (chunk) => {
|
|
65168
65203
|
observer.onRequestChunk(chunk);
|
|
65169
65204
|
});
|
|
65170
65205
|
response.on("close", () => {
|
|
65171
65206
|
observer.onEnd();
|
|
65172
65207
|
});
|
|
65173
65208
|
}
|
|
65174
|
-
|
|
65175
|
-
|
|
65209
|
+
request7.pipe(upstream);
|
|
65210
|
+
request7.socket.setNoDelay(true);
|
|
65176
65211
|
upstream.on("socket", (socket) => {
|
|
65177
65212
|
socket.setNoDelay(true);
|
|
65178
65213
|
});
|
|
@@ -65186,16 +65221,227 @@ var http3 = __toESM(require("node:http"), 1);
|
|
|
65186
65221
|
// src/frontdoor/server.ts
|
|
65187
65222
|
var import_node_http = __toESM(require("node:http"), 1);
|
|
65188
65223
|
var import_node_https = __toESM(require("node:https"), 1);
|
|
65224
|
+
|
|
65225
|
+
// src/frontdoor/rcControl.ts
|
|
65226
|
+
var https2 = __toESM(require("node:https"), 1);
|
|
65227
|
+
var CONTROL_PATH_PREFIX = "/__agent-shim/rc";
|
|
65228
|
+
var CONTROL_BODY_CAP_BYTES = 10485760;
|
|
65229
|
+
function answerJson(response, status, body) {
|
|
65230
|
+
const text2 = JSON.stringify(body);
|
|
65231
|
+
response.writeHead(status, { "content-type": "application/json", "content-length": String(Buffer.byteLength(text2, "utf8")) });
|
|
65232
|
+
response.end(text2);
|
|
65233
|
+
}
|
|
65234
|
+
async function readBody(request7) {
|
|
65235
|
+
return await new Promise((resolve, reject) => {
|
|
65236
|
+
const chunks = [];
|
|
65237
|
+
let total = 0;
|
|
65238
|
+
request7.on("data", (chunk) => {
|
|
65239
|
+
total += chunk.length;
|
|
65240
|
+
if (total > CONTROL_BODY_CAP_BYTES) {
|
|
65241
|
+
request7.destroy();
|
|
65242
|
+
reject(new Error("too large"));
|
|
65243
|
+
return;
|
|
65244
|
+
}
|
|
65245
|
+
chunks.push(chunk);
|
|
65246
|
+
});
|
|
65247
|
+
request7.on("end", () => {
|
|
65248
|
+
resolve(Buffer.concat(chunks).toString("utf8"));
|
|
65249
|
+
});
|
|
65250
|
+
request7.on("error", () => {
|
|
65251
|
+
reject(new Error("the request body ended early"));
|
|
65252
|
+
});
|
|
65253
|
+
});
|
|
65254
|
+
}
|
|
65255
|
+
function createRcControlHandler(deps) {
|
|
65256
|
+
const sessionsPath = `${CONTROL_PATH_PREFIX}/sessions`;
|
|
65257
|
+
const injectPath = `${CONTROL_PATH_PREFIX}/inject`;
|
|
65258
|
+
return (request7, response) => {
|
|
65259
|
+
const presented = request7.headers.authorization;
|
|
65260
|
+
const bearerPrefix = "bearer ".length;
|
|
65261
|
+
const token = typeof presented === "string" && presented.slice(0, bearerPrefix).toLowerCase() === "bearer " ? presented.slice(bearerPrefix) : void 0;
|
|
65262
|
+
if (token === void 0 || !isLiveCapability(token, [deps.expectedToken])) {
|
|
65263
|
+
answerJson(response, HTTP_STATUS.unauthorized, { error: "the front door's control routes demand this generation's control token as a Bearer credential" });
|
|
65264
|
+
return;
|
|
65265
|
+
}
|
|
65266
|
+
const url2 = request7.url ?? "/";
|
|
65267
|
+
const handle = async () => {
|
|
65268
|
+
if (url2 === sessionsPath) {
|
|
65269
|
+
if (request7.method !== "GET") {
|
|
65270
|
+
answerJson(response, HTTP_STATUS.methodNotAllowed, { error: "the session list is a GET" });
|
|
65271
|
+
return;
|
|
65272
|
+
}
|
|
65273
|
+
answerJson(response, HTTP_STATUS.ok, { sessions: deps.list() });
|
|
65274
|
+
return;
|
|
65275
|
+
}
|
|
65276
|
+
if (url2 === injectPath) {
|
|
65277
|
+
if (request7.method !== "POST") {
|
|
65278
|
+
answerJson(response, HTTP_STATUS.methodNotAllowed, { error: "the inject operation is a POST" });
|
|
65279
|
+
return;
|
|
65280
|
+
}
|
|
65281
|
+
let parsed;
|
|
65282
|
+
try {
|
|
65283
|
+
parsed = JSON.parse(await readBody(request7));
|
|
65284
|
+
} catch {
|
|
65285
|
+
answerJson(response, HTTP_STATUS.badRequest, { error: "the inject body is not readable JSON within the control body cap" });
|
|
65286
|
+
return;
|
|
65287
|
+
}
|
|
65288
|
+
if (typeof parsed !== "object" || parsed === null || !("session" in parsed) || !("text" in parsed) || typeof parsed.session !== "string" || typeof parsed.text !== "string" || parsed.session === "" || parsed.text === "") {
|
|
65289
|
+
answerJson(response, HTTP_STATUS.badRequest, { error: "the inject body must be JSON naming a non-empty session id and text" });
|
|
65290
|
+
return;
|
|
65291
|
+
}
|
|
65292
|
+
const result = await deps.inject(parsed.session, parsed.text);
|
|
65293
|
+
if (result.ok) {
|
|
65294
|
+
answerJson(response, HTTP_STATUS.ok, { session: parsed.session, sequenceNums: result.sequenceNums });
|
|
65295
|
+
return;
|
|
65296
|
+
}
|
|
65297
|
+
answerJson(response, HTTP_STATUS.badGateway, { error: result.message });
|
|
65298
|
+
return;
|
|
65299
|
+
}
|
|
65300
|
+
answerJson(response, HTTP_STATUS.notFound, { error: `no such control route: ${url2}` });
|
|
65301
|
+
};
|
|
65302
|
+
handle().catch((error62) => {
|
|
65303
|
+
answerJson(response, HTTP_STATUS.internalServerError, { error: `the control route failed: ${error62 instanceof Error ? error62.message : String(error62)}` });
|
|
65304
|
+
});
|
|
65305
|
+
};
|
|
65306
|
+
}
|
|
65307
|
+
function realRcControlTransport(port, ca) {
|
|
65308
|
+
return {
|
|
65309
|
+
request: async (options) => await new Promise((resolve, reject) => {
|
|
65310
|
+
const request7 = https2.request(
|
|
65311
|
+
{
|
|
65312
|
+
host: "127.0.0.1",
|
|
65313
|
+
port,
|
|
65314
|
+
method: options.method,
|
|
65315
|
+
path: options.path,
|
|
65316
|
+
headers: options.body === void 0 ? options.headers : { ...options.headers, "content-length": String(Buffer.byteLength(options.body, "utf8")) },
|
|
65317
|
+
agent: false,
|
|
65318
|
+
ca: [ca]
|
|
65319
|
+
},
|
|
65320
|
+
(response) => {
|
|
65321
|
+
const chunks = [];
|
|
65322
|
+
response.on("data", (chunk) => {
|
|
65323
|
+
chunks.push(chunk);
|
|
65324
|
+
});
|
|
65325
|
+
response.on("end", () => {
|
|
65326
|
+
resolve({ status: response.statusCode ?? 0, body: Buffer.concat(chunks).toString("utf8") });
|
|
65327
|
+
});
|
|
65328
|
+
}
|
|
65329
|
+
);
|
|
65330
|
+
request7.once("error", reject);
|
|
65331
|
+
if (options.body === void 0) {
|
|
65332
|
+
request7.end();
|
|
65333
|
+
} else {
|
|
65334
|
+
request7.end(options.body);
|
|
65335
|
+
}
|
|
65336
|
+
})
|
|
65337
|
+
};
|
|
65338
|
+
}
|
|
65339
|
+
function controlErrorOf(body) {
|
|
65340
|
+
try {
|
|
65341
|
+
const parsed = JSON.parse(body);
|
|
65342
|
+
if (typeof parsed === "object" && parsed !== null && "error" in parsed && typeof parsed.error === "string") {
|
|
65343
|
+
return parsed.error;
|
|
65344
|
+
}
|
|
65345
|
+
} catch {
|
|
65346
|
+
return body;
|
|
65347
|
+
}
|
|
65348
|
+
return void 0;
|
|
65349
|
+
}
|
|
65350
|
+
function isRcSessionSummary(value) {
|
|
65351
|
+
if (typeof value !== "object" || value === null) {
|
|
65352
|
+
return false;
|
|
65353
|
+
}
|
|
65354
|
+
if (!("id" in value) || !("createdAt" in value) || !("lastSeenAt" in value)) {
|
|
65355
|
+
return false;
|
|
65356
|
+
}
|
|
65357
|
+
return typeof value.id === "string" && typeof value.createdAt === "number" && typeof value.lastSeenAt === "number";
|
|
65358
|
+
}
|
|
65359
|
+
function sequenceNumsOfBody(body) {
|
|
65360
|
+
let parsed;
|
|
65361
|
+
try {
|
|
65362
|
+
parsed = JSON.parse(body);
|
|
65363
|
+
} catch {
|
|
65364
|
+
return void 0;
|
|
65365
|
+
}
|
|
65366
|
+
if (typeof parsed !== "object" || parsed === null || !("sequenceNums" in parsed) || !Array.isArray(parsed.sequenceNums)) {
|
|
65367
|
+
return void 0;
|
|
65368
|
+
}
|
|
65369
|
+
const sequenceNums = [];
|
|
65370
|
+
const values = parsed.sequenceNums;
|
|
65371
|
+
for (const value of values) {
|
|
65372
|
+
if (typeof value !== "number") {
|
|
65373
|
+
return void 0;
|
|
65374
|
+
}
|
|
65375
|
+
sequenceNums.push(value);
|
|
65376
|
+
}
|
|
65377
|
+
return sequenceNums;
|
|
65378
|
+
}
|
|
65379
|
+
function frontDoorRcControl(transport, token) {
|
|
65380
|
+
const headers = { authorization: `Bearer ${token}` };
|
|
65381
|
+
const sessionsOf = (answer, what) => {
|
|
65382
|
+
if (answer.status !== HTTP_STATUS.ok) {
|
|
65383
|
+
throw new Error(`${what} failed (HTTP ${String(answer.status)}): ${controlErrorOf(answer.body) ?? answer.body}`);
|
|
65384
|
+
}
|
|
65385
|
+
let parsed;
|
|
65386
|
+
try {
|
|
65387
|
+
parsed = JSON.parse(answer.body);
|
|
65388
|
+
} catch {
|
|
65389
|
+
throw new Error(`${what}: the door's answer was not JSON: ${answer.body}`);
|
|
65390
|
+
}
|
|
65391
|
+
if (typeof parsed !== "object" || parsed === null || !("sessions" in parsed) || !Array.isArray(parsed.sessions)) {
|
|
65392
|
+
throw new Error(`${what}: the door's answer named no sessions list: ${answer.body}`);
|
|
65393
|
+
}
|
|
65394
|
+
const candidates = parsed.sessions;
|
|
65395
|
+
const sessions = [];
|
|
65396
|
+
for (const value of candidates) {
|
|
65397
|
+
if (!isRcSessionSummary(value)) {
|
|
65398
|
+
throw new Error(`${what}: the door's answer named no sessions list: ${answer.body}`);
|
|
65399
|
+
}
|
|
65400
|
+
sessions.push(value);
|
|
65401
|
+
}
|
|
65402
|
+
return sessions;
|
|
65403
|
+
};
|
|
65404
|
+
return {
|
|
65405
|
+
listSessions: async () => sessionsOf(await transport.request({ method: "GET", path: `${CONTROL_PATH_PREFIX}/sessions`, headers }), "listing the door's Remote Control sessions"),
|
|
65406
|
+
sendPrompt: async (sessionId, text2) => {
|
|
65407
|
+
let answer;
|
|
65408
|
+
try {
|
|
65409
|
+
answer = await transport.request({
|
|
65410
|
+
method: "POST",
|
|
65411
|
+
path: `${CONTROL_PATH_PREFIX}/inject`,
|
|
65412
|
+
headers: { ...headers, "content-type": "application/json" },
|
|
65413
|
+
body: JSON.stringify({ session: sessionId, text: text2 })
|
|
65414
|
+
});
|
|
65415
|
+
} catch (error62) {
|
|
65416
|
+
return { ok: false, message: `could not reach the front door's control listener: ${error62 instanceof Error ? error62.message : String(error62)}` };
|
|
65417
|
+
}
|
|
65418
|
+
if (answer.status === HTTP_STATUS.ok) {
|
|
65419
|
+
const sequenceNums = sequenceNumsOfBody(answer.body);
|
|
65420
|
+
if (sequenceNums === void 0) {
|
|
65421
|
+
return { ok: false, message: `the door accepted the event but its answer named no sequence numbers: ${answer.body}` };
|
|
65422
|
+
}
|
|
65423
|
+
return { ok: true, sequenceNums };
|
|
65424
|
+
}
|
|
65425
|
+
return { ok: false, message: `injecting into ${sessionId} failed (HTTP ${String(answer.status)}): ${controlErrorOf(answer.body) ?? answer.body}` };
|
|
65426
|
+
}
|
|
65427
|
+
};
|
|
65428
|
+
}
|
|
65429
|
+
|
|
65430
|
+
// src/frontdoor/server.ts
|
|
65189
65431
|
var HEALTH_TIMEOUT_MS = 2e3;
|
|
65190
65432
|
var HEALTH_START_BUDGET_MS = 5e3;
|
|
65191
65433
|
var HEALTH_RETRY_MS = 50;
|
|
65192
|
-
function createFrontDoorServer(pipeline, log, tls2) {
|
|
65193
|
-
const handler = (
|
|
65194
|
-
if (
|
|
65434
|
+
function createFrontDoorServer(pipeline, log, tls2, control) {
|
|
65435
|
+
const handler = (request7, response) => {
|
|
65436
|
+
if (request7.method === "GET" && request7.url === "/healthz") {
|
|
65195
65437
|
response.writeHead(HTTP_STATUS.ok, { "Content-Type": "text/plain" });
|
|
65196
65438
|
response.end("ok");
|
|
65197
65439
|
return;
|
|
65198
65440
|
}
|
|
65441
|
+
if (control !== void 0 && (request7.url ?? "/").startsWith(CONTROL_PATH_PREFIX)) {
|
|
65442
|
+
control(request7, response);
|
|
65443
|
+
return;
|
|
65444
|
+
}
|
|
65199
65445
|
const abort = new AbortController();
|
|
65200
65446
|
response.on("close", () => {
|
|
65201
65447
|
if (!response.writableFinished) {
|
|
@@ -65203,13 +65449,13 @@ function createFrontDoorServer(pipeline, log, tls2) {
|
|
|
65203
65449
|
}
|
|
65204
65450
|
});
|
|
65205
65451
|
const handle = async () => {
|
|
65206
|
-
await pipeline({ method:
|
|
65207
|
-
if (!
|
|
65208
|
-
|
|
65452
|
+
await pipeline({ method: request7.method ?? "GET", url: request7.url ?? "/", headers: aliasLegacyWireHeaders(request7.headers), body: request7, signal: abort.signal, response });
|
|
65453
|
+
if (!request7.readableEnded) {
|
|
65454
|
+
request7.resume();
|
|
65209
65455
|
}
|
|
65210
65456
|
};
|
|
65211
65457
|
handle().catch((error62) => {
|
|
65212
|
-
log(`request ${
|
|
65458
|
+
log(`request ${request7.method ?? "?"} ${request7.url ?? "?"} failed: ${error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62)}`);
|
|
65213
65459
|
if (!response.headersSent) {
|
|
65214
65460
|
response.writeHead(HTTP_STATUS.internalServerError, { "Content-Type": "application/json" });
|
|
65215
65461
|
response.end(JSON.stringify({ type: "error", error: { type: "api_error", message: "internal error in the agent-shim front door" } }));
|
|
@@ -65234,11 +65480,11 @@ async function frontDoorHealthy(port, ca) {
|
|
|
65234
65480
|
resolve(response.statusCode === HTTP_STATUS.ok);
|
|
65235
65481
|
};
|
|
65236
65482
|
const options = { host: "127.0.0.1", port, path: "/healthz", agent: false, timeout: HEALTH_TIMEOUT_MS };
|
|
65237
|
-
const
|
|
65238
|
-
|
|
65239
|
-
|
|
65483
|
+
const request7 = ca === void 0 ? import_node_http.default.get(options, onResponse) : import_node_https.default.get({ ...options, ca: [ca] }, onResponse);
|
|
65484
|
+
request7.on("timeout", () => {
|
|
65485
|
+
request7.destroy();
|
|
65240
65486
|
});
|
|
65241
|
-
|
|
65487
|
+
request7.on("error", () => {
|
|
65242
65488
|
resolve(false);
|
|
65243
65489
|
});
|
|
65244
65490
|
});
|
|
@@ -65323,24 +65569,24 @@ function responseHeaders(headers) {
|
|
|
65323
65569
|
}
|
|
65324
65570
|
return result;
|
|
65325
65571
|
}
|
|
65326
|
-
async function applyHeadroomHop(
|
|
65572
|
+
async function applyHeadroomHop(request7, response, upstream, deps) {
|
|
65327
65573
|
const target = deps.headroomSocket();
|
|
65328
65574
|
if (target === void 0) {
|
|
65329
65575
|
await answerBadGateway(response, "agent-shim front door: the headroom daemon is restarting");
|
|
65330
65576
|
return;
|
|
65331
65577
|
}
|
|
65332
65578
|
if (target.refused !== void 0) {
|
|
65333
|
-
deps.log(`front door: refusing the headroom hop (${
|
|
65579
|
+
deps.log(`front door: refusing the headroom hop (${request7.method} ${new URL(request7.url, "http://127.0.0.1").pathname}): ${target.refused}`);
|
|
65334
65580
|
await answerBadGateway(response, `agent-shim front door: refusing to send this request to headroom: ${target.refused}`);
|
|
65335
65581
|
return;
|
|
65336
65582
|
}
|
|
65337
65583
|
const { socketPath } = target;
|
|
65338
|
-
let headers = forwardableHeaders(
|
|
65584
|
+
let headers = forwardableHeaders(request7.headers);
|
|
65339
65585
|
let hopId;
|
|
65340
65586
|
if (upstream !== void 0) {
|
|
65341
|
-
const provider = parseProviderPath(new URL(
|
|
65587
|
+
const provider = parseProviderPath(new URL(request7.url, "http://127.0.0.1").pathname)?.provider;
|
|
65342
65588
|
if (provider === void 0) {
|
|
65343
|
-
throw new Error(`headroom hop for ${
|
|
65589
|
+
throw new Error(`headroom hop for ${request7.url} names an upstream but no provider`);
|
|
65344
65590
|
}
|
|
65345
65591
|
const sequestered = deps.custody.sequester(headers, provider);
|
|
65346
65592
|
hopId = sequestered.hopId;
|
|
@@ -65348,12 +65594,12 @@ async function applyHeadroomHop(request6, response, upstream, deps) {
|
|
|
65348
65594
|
headers[HOP_ID_HEADER] = hopId;
|
|
65349
65595
|
headers[HEADROOM_BASE_URL_HEADER] = upstream;
|
|
65350
65596
|
}
|
|
65351
|
-
if (
|
|
65352
|
-
headers[PROJECT_ID_HEADER] =
|
|
65597
|
+
if (request7.session.projectId !== void 0) {
|
|
65598
|
+
headers[PROJECT_ID_HEADER] = request7.session.projectId;
|
|
65353
65599
|
}
|
|
65354
65600
|
headers[HOP_SECRET_HEADER] = deps.hopSecret;
|
|
65355
65601
|
try {
|
|
65356
|
-
await forwardThroughHeadroom(
|
|
65602
|
+
await forwardThroughHeadroom(request7, response, { socketPath, headers, log: deps.log });
|
|
65357
65603
|
} finally {
|
|
65358
65604
|
if (hopId !== void 0) {
|
|
65359
65605
|
deps.custody.release(hopId);
|
|
@@ -65366,7 +65612,7 @@ async function answerBadGateway(response, message) {
|
|
|
65366
65612
|
response.end();
|
|
65367
65613
|
}
|
|
65368
65614
|
var HOP_AGENT = new http3.Agent({ keepAlive: false });
|
|
65369
|
-
async function forwardThroughHeadroom(
|
|
65615
|
+
async function forwardThroughHeadroom(request7, response, target) {
|
|
65370
65616
|
const { socketPath, headers } = target;
|
|
65371
65617
|
await new Promise((resolve) => {
|
|
65372
65618
|
const onUpstreamResponse = (upstreamResponse) => {
|
|
@@ -65375,17 +65621,17 @@ async function forwardThroughHeadroom(request6, response, target) {
|
|
|
65375
65621
|
const stream = async () => {
|
|
65376
65622
|
try {
|
|
65377
65623
|
for await (const chunk of upstreamChunks(upstreamResponse)) {
|
|
65378
|
-
if (
|
|
65624
|
+
if (request7.signal.aborted) {
|
|
65379
65625
|
break;
|
|
65380
65626
|
}
|
|
65381
65627
|
await response.write(chunk);
|
|
65382
65628
|
}
|
|
65383
|
-
if (!
|
|
65629
|
+
if (!request7.signal.aborted) {
|
|
65384
65630
|
response.end();
|
|
65385
65631
|
}
|
|
65386
65632
|
} catch (error62) {
|
|
65387
|
-
if (!
|
|
65388
|
-
target.log(`front door: headroom hop to ${socketPath} ended mid-stream (${
|
|
65633
|
+
if (!request7.signal.aborted) {
|
|
65634
|
+
target.log(`front door: headroom hop to ${socketPath} ended mid-stream (${request7.method} ${new URL(request7.url, "http://127.0.0.1").pathname}): ${error62 instanceof Error ? error62.message : String(error62)}`);
|
|
65389
65635
|
}
|
|
65390
65636
|
response.destroy();
|
|
65391
65637
|
}
|
|
@@ -65393,11 +65639,11 @@ async function forwardThroughHeadroom(request6, response, target) {
|
|
|
65393
65639
|
};
|
|
65394
65640
|
void stream();
|
|
65395
65641
|
};
|
|
65396
|
-
const hop = http3.request({ socketPath, method:
|
|
65642
|
+
const hop = http3.request({ socketPath, method: request7.method, path: request7.url, headers, agent: HOP_AGENT }, onUpstreamResponse);
|
|
65397
65643
|
hop.on("error", (error62) => {
|
|
65398
65644
|
const phase = response.headersSent ? "mid-stream" : "before the response started";
|
|
65399
65645
|
const code = "code" in error62 && typeof error62.code === "string" ? ` ${error62.code}` : "";
|
|
65400
|
-
target.log(`front door: headroom hop to ${socketPath} failed (${
|
|
65646
|
+
target.log(`front door: headroom hop to ${socketPath} failed (${request7.method} ${new URL(request7.url, "http://127.0.0.1").pathname}, ${phase}): ${error62.message}${code}`);
|
|
65401
65647
|
if (!response.headersSent) {
|
|
65402
65648
|
response.start(HTTP_BAD_GATEWAY2, { "Content-Type": "application/json" });
|
|
65403
65649
|
void response.write(JSON.stringify({ type: "error", error: { type: "api_error", message: `agent-shim front door: the headroom daemon is unreachable (${error62.message})` } })).then(() => {
|
|
@@ -65408,11 +65654,11 @@ async function forwardThroughHeadroom(request6, response, target) {
|
|
|
65408
65654
|
}
|
|
65409
65655
|
resolve(void 0);
|
|
65410
65656
|
});
|
|
65411
|
-
|
|
65657
|
+
request7.signal.addEventListener("abort", () => {
|
|
65412
65658
|
hop.destroy();
|
|
65413
65659
|
});
|
|
65414
|
-
|
|
65415
|
-
|
|
65660
|
+
request7.body.pipe(hop);
|
|
65661
|
+
request7.body.on("error", () => {
|
|
65416
65662
|
hop.destroy();
|
|
65417
65663
|
});
|
|
65418
65664
|
});
|
|
@@ -65446,7 +65692,7 @@ function describeThrown(error62) {
|
|
|
65446
65692
|
return error62 instanceof Error ? error62.message : String(error62);
|
|
65447
65693
|
}
|
|
65448
65694
|
function createRoutedResponse(response, context) {
|
|
65449
|
-
const { deps, session, route, request:
|
|
65695
|
+
const { deps, session, route, request: request7 } = context;
|
|
65450
65696
|
let headersSent = false;
|
|
65451
65697
|
let bodyObservers = [];
|
|
65452
65698
|
let finished = false;
|
|
@@ -65492,7 +65738,7 @@ function createRoutedResponse(response, context) {
|
|
|
65492
65738
|
start: (status, headers) => {
|
|
65493
65739
|
for (const observe of deps.responseObservers) {
|
|
65494
65740
|
try {
|
|
65495
|
-
const body = observe({ session, route, method:
|
|
65741
|
+
const body = observe({ session, route, method: request7.method, path: request7.path, receivedAt: request7.receivedAt, status, headers });
|
|
65496
65742
|
if (body !== void 0) {
|
|
65497
65743
|
bodyObservers.push(body);
|
|
65498
65744
|
}
|
|
@@ -65532,34 +65778,34 @@ function createRoutedResponse(response, context) {
|
|
|
65532
65778
|
}
|
|
65533
65779
|
};
|
|
65534
65780
|
}
|
|
65535
|
-
async function serveRouted(
|
|
65536
|
-
const observed = { method:
|
|
65537
|
-
const identified = identifyRequest(
|
|
65538
|
-
const admission = deps.admit({ url:
|
|
65781
|
+
async function serveRouted(request7, deps) {
|
|
65782
|
+
const observed = { method: request7.method, path: pathOf(request7.url), receivedAt: deps.now() };
|
|
65783
|
+
const identified = identifyRequest(request7.headers);
|
|
65784
|
+
const admission = deps.admit({ url: request7.url, headers: request7.headers, forwardable: identified.forwardableHeaders });
|
|
65539
65785
|
if (!admission.ok) {
|
|
65540
|
-
const response2 = createRoutedResponse(
|
|
65786
|
+
const response2 = createRoutedResponse(request7.response, { deps, session: identified.session, route: "(unauthorized)", request: observed });
|
|
65541
65787
|
response2.start(HTTP_STATUS.unauthorized, { "Content-Type": "application/json" });
|
|
65542
65788
|
await response2.write(errorBody(HTTP_STATUS.unauthorized, admission.message));
|
|
65543
65789
|
response2.end();
|
|
65544
65790
|
return;
|
|
65545
65791
|
}
|
|
65546
65792
|
const routed = {
|
|
65547
|
-
method:
|
|
65548
|
-
url:
|
|
65793
|
+
method: request7.method,
|
|
65794
|
+
url: request7.url,
|
|
65549
65795
|
headers: admission.headers,
|
|
65550
|
-
body:
|
|
65551
|
-
signal:
|
|
65796
|
+
body: request7.body,
|
|
65797
|
+
signal: request7.signal,
|
|
65552
65798
|
session: identified.session
|
|
65553
65799
|
};
|
|
65554
65800
|
const resolution = await deps.resolveRoute(routed);
|
|
65555
65801
|
if (!resolution.ok) {
|
|
65556
|
-
const response2 = createRoutedResponse(
|
|
65802
|
+
const response2 = createRoutedResponse(request7.response, { deps, session: identified.session, route: "(unrouted)", request: observed });
|
|
65557
65803
|
response2.start(resolution.status, { "Content-Type": "application/json" });
|
|
65558
65804
|
await response2.write(errorBody(resolution.status, resolution.message));
|
|
65559
65805
|
response2.end();
|
|
65560
65806
|
return;
|
|
65561
65807
|
}
|
|
65562
|
-
const response = createRoutedResponse(
|
|
65808
|
+
const response = createRoutedResponse(request7.response, { deps, session: identified.session, route: resolution.route.name, request: observed });
|
|
65563
65809
|
try {
|
|
65564
65810
|
if (identified.session.headroom && resolution.route.headroomEligible && deps.headroom !== void 0) {
|
|
65565
65811
|
await applyHeadroomHop(routed, response, resolution.route.headroomUpstream, deps.headroom);
|
|
@@ -65567,7 +65813,7 @@ async function serveRouted(request6, deps) {
|
|
|
65567
65813
|
await resolution.route.serve(routed, response);
|
|
65568
65814
|
}
|
|
65569
65815
|
} catch (error62) {
|
|
65570
|
-
if (
|
|
65816
|
+
if (request7.signal.aborted) {
|
|
65571
65817
|
return;
|
|
65572
65818
|
}
|
|
65573
65819
|
deps.log(`front door: route ${resolution.route.name} failed: ${error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62)}`);
|
|
@@ -65676,8 +65922,8 @@ var REQUESTABLE_EFFORTS = ["low", "medium", "high"];
|
|
|
65676
65922
|
function isRequestableEffort(value) {
|
|
65677
65923
|
return REQUESTABLE_EFFORTS.includes(value);
|
|
65678
65924
|
}
|
|
65679
|
-
function mapEffort(
|
|
65680
|
-
const requested =
|
|
65925
|
+
function mapEffort(request7, config2) {
|
|
65926
|
+
const requested = request7.output_config?.effort;
|
|
65681
65927
|
return requested !== void 0 && isRequestableEffort(requested) ? requested : config2.effort;
|
|
65682
65928
|
}
|
|
65683
65929
|
var BILLING_HEADER_LINE = /^x-anthropic-billing-header:[^\n]*\n/;
|
|
@@ -65803,7 +66049,7 @@ function translateRequest(body, config2) {
|
|
|
65803
66049
|
const tools = mapTools(body.tools, names);
|
|
65804
66050
|
const toolChoice = mapToolChoice(body.tool_choice, names);
|
|
65805
66051
|
const userId = body.metadata?.user_id;
|
|
65806
|
-
const
|
|
66052
|
+
const request7 = {
|
|
65807
66053
|
model: mapModel(body.model ?? "", config2),
|
|
65808
66054
|
instructions: systemToInstructions(body.system),
|
|
65809
66055
|
input: messagesToInput(body.messages, names),
|
|
@@ -65815,7 +66061,7 @@ function translateRequest(body, config2) {
|
|
|
65815
66061
|
...tools === void 0 ? {} : { tools },
|
|
65816
66062
|
...toolChoice === void 0 ? {} : { tool_choice: toolChoice }
|
|
65817
66063
|
};
|
|
65818
|
-
return { request:
|
|
66064
|
+
return { request: request7, toolNames: names };
|
|
65819
66065
|
}
|
|
65820
66066
|
|
|
65821
66067
|
// src/codex/events.ts
|
|
@@ -66190,7 +66436,7 @@ function describeError(error62) {
|
|
|
66190
66436
|
return error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62);
|
|
66191
66437
|
}
|
|
66192
66438
|
function createCodexRoute(ports) {
|
|
66193
|
-
const handleMessages = async (
|
|
66439
|
+
const handleMessages = async (request7, config2, raw) => {
|
|
66194
66440
|
const parsed = MessagesRequestSchema.safeParse(raw);
|
|
66195
66441
|
if (!parsed.success) {
|
|
66196
66442
|
return errorResponse(HTTP_STATUS.badRequest, `not an Anthropic Messages request: ${parsed.error.issues.map((issue2) => `${issue2.path.join(".")}: ${issue2.message}`).join("; ")}`);
|
|
@@ -66202,9 +66448,9 @@ function createCodexRoute(ports) {
|
|
|
66202
66448
|
const elapsed = () => `${String(ports.now() - started)}ms`;
|
|
66203
66449
|
let upstream;
|
|
66204
66450
|
try {
|
|
66205
|
-
upstream = await callCodex(ports.upstream, upstreamRequest, sessionIdFor(body.metadata?.user_id, ports.upstream.randomId),
|
|
66451
|
+
upstream = await callCodex(ports.upstream, upstreamRequest, sessionIdFor(body.metadata?.user_id, ports.upstream.randomId), request7.signal);
|
|
66206
66452
|
} catch (error62) {
|
|
66207
|
-
if (
|
|
66453
|
+
if (request7.signal.aborted) {
|
|
66208
66454
|
return errorResponse(HTTP_STATUS.clientClosedRequest, "client disconnected");
|
|
66209
66455
|
}
|
|
66210
66456
|
ports.log(`${upstreamRequest.model} upstream fetch failed after ${elapsed()}: ${describeError(error62)}`);
|
|
@@ -66264,7 +66510,7 @@ function createCodexRoute(ports) {
|
|
|
66264
66510
|
ports.log(`${upstreamRequest.model} stream ended without completing after ${elapsed()}`);
|
|
66265
66511
|
yield errorFrame(HTTP_STATUS.badGateway, "codex backend stream ended without completing");
|
|
66266
66512
|
} catch (error62) {
|
|
66267
|
-
if (
|
|
66513
|
+
if (request7.signal.aborted) {
|
|
66268
66514
|
return;
|
|
66269
66515
|
}
|
|
66270
66516
|
ports.log(`${upstreamRequest.model} stream relay failed: ${describeError(error62)}`);
|
|
@@ -66290,7 +66536,7 @@ function createCodexRoute(ports) {
|
|
|
66290
66536
|
}
|
|
66291
66537
|
}
|
|
66292
66538
|
} catch (error62) {
|
|
66293
|
-
if (
|
|
66539
|
+
if (request7.signal.aborted) {
|
|
66294
66540
|
return errorResponse(HTTP_STATUS.clientClosedRequest, "client disconnected");
|
|
66295
66541
|
}
|
|
66296
66542
|
ports.log(`${upstreamRequest.model} stream relay failed: ${describeError(error62)}`);
|
|
@@ -66307,26 +66553,26 @@ function createCodexRoute(ports) {
|
|
|
66307
66553
|
const text2 = JSON.stringify({ system: parsed.data.system, messages: parsed.data.messages, tools: parsed.data.tools });
|
|
66308
66554
|
return { status: HTTP_STATUS.ok, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ input_tokens: Math.ceil(text2.length / CHARS_PER_TOKEN) }) };
|
|
66309
66555
|
};
|
|
66310
|
-
return async (
|
|
66311
|
-
if (
|
|
66556
|
+
return async (request7) => {
|
|
66557
|
+
if (request7.method === "GET" && request7.path === "/healthz") {
|
|
66312
66558
|
return { status: HTTP_STATUS.ok, headers: { "Content-Type": "text/plain" }, body: "ok" };
|
|
66313
66559
|
}
|
|
66314
|
-
if (
|
|
66315
|
-
return errorResponse(HTTP_STATUS.methodNotAllowed, `unsupported ${
|
|
66560
|
+
if (request7.method !== "POST") {
|
|
66561
|
+
return errorResponse(HTTP_STATUS.methodNotAllowed, `unsupported ${request7.method} ${request7.path}`);
|
|
66316
66562
|
}
|
|
66317
|
-
const scoped = parseProviderPath(
|
|
66563
|
+
const scoped = parseProviderPath(request7.path);
|
|
66318
66564
|
if (scoped === void 0 || scoped.rest !== "/v1/messages" && scoped.rest !== "/v1/messages/count_tokens") {
|
|
66319
|
-
return errorResponse(HTTP_STATUS.notFound, `no such endpoint: ${
|
|
66565
|
+
return errorResponse(HTTP_STATUS.notFound, `no such endpoint: ${request7.path}`);
|
|
66320
66566
|
}
|
|
66321
66567
|
const provider = ports.loadProvider(scoped.provider);
|
|
66322
66568
|
if (!provider.ok) {
|
|
66323
66569
|
return errorResponse(provider.status, provider.message);
|
|
66324
66570
|
}
|
|
66325
|
-
const json2 = parseJson3(
|
|
66571
|
+
const json2 = parseJson3(request7.body);
|
|
66326
66572
|
if (!json2.ok) {
|
|
66327
66573
|
return errorResponse(HTTP_STATUS.badRequest, json2.message);
|
|
66328
66574
|
}
|
|
66329
|
-
return scoped.rest === "/v1/messages" ? await handleMessages(
|
|
66575
|
+
return scoped.rest === "/v1/messages" ? await handleMessages(request7, provider.config, json2.value) : handleCountTokens(json2.value);
|
|
66330
66576
|
};
|
|
66331
66577
|
}
|
|
66332
66578
|
|
|
@@ -66338,10 +66584,10 @@ var BodyTooLargeError = class extends Error {
|
|
|
66338
66584
|
this.name = "BodyTooLargeError";
|
|
66339
66585
|
}
|
|
66340
66586
|
};
|
|
66341
|
-
async function
|
|
66587
|
+
async function readBody2(request7) {
|
|
66342
66588
|
const chunks = [];
|
|
66343
66589
|
let size = 0;
|
|
66344
|
-
for await (const chunk of
|
|
66590
|
+
for await (const chunk of request7.body) {
|
|
66345
66591
|
if (!Buffer.isBuffer(chunk)) {
|
|
66346
66592
|
throw new TypeError("request body chunk was not a Buffer");
|
|
66347
66593
|
}
|
|
@@ -66374,10 +66620,10 @@ function createCodexRouteMount(ports, upstreamBase, provider) {
|
|
|
66374
66620
|
name: `codex:${provider}`,
|
|
66375
66621
|
headroomEligible: true,
|
|
66376
66622
|
headroomUpstream: upstreamBase,
|
|
66377
|
-
serve: async (
|
|
66623
|
+
serve: async (request7, response) => {
|
|
66378
66624
|
let body;
|
|
66379
66625
|
try {
|
|
66380
|
-
body = await
|
|
66626
|
+
body = await readBody2(request7);
|
|
66381
66627
|
} catch (error62) {
|
|
66382
66628
|
const tooLarge = error62 instanceof BodyTooLargeError;
|
|
66383
66629
|
response.start(tooLarge ? HTTP_STATUS.payloadTooLarge : HTTP_STATUS.badRequest, { "Content-Type": "application/json" });
|
|
@@ -66385,23 +66631,23 @@ function createCodexRouteMount(ports, upstreamBase, provider) {
|
|
|
66385
66631
|
JSON.stringify({ type: "error", error: { type: "invalid_request_error", message: error62 instanceof Error ? error62.message : String(error62) } })
|
|
66386
66632
|
);
|
|
66387
66633
|
response.end();
|
|
66388
|
-
|
|
66634
|
+
request7.body.resume();
|
|
66389
66635
|
return;
|
|
66390
66636
|
}
|
|
66391
|
-
const path41 = new URL(
|
|
66392
|
-
const translated = { method:
|
|
66637
|
+
const path41 = new URL(request7.url, "http://127.0.0.1").pathname;
|
|
66638
|
+
const translated = { method: request7.method, path: path41, body, signal: request7.signal };
|
|
66393
66639
|
const routed = await route(translated);
|
|
66394
|
-
if (
|
|
66640
|
+
if (request7.signal.aborted) {
|
|
66395
66641
|
return;
|
|
66396
66642
|
}
|
|
66397
|
-
await writeRouteResponse(routed, response,
|
|
66643
|
+
await writeRouteResponse(routed, response, request7.signal);
|
|
66398
66644
|
}
|
|
66399
66645
|
};
|
|
66400
66646
|
}
|
|
66401
66647
|
|
|
66402
66648
|
// src/frontdoor/passthrough.ts
|
|
66403
66649
|
var http4 = __toESM(require("node:http"), 1);
|
|
66404
|
-
var
|
|
66650
|
+
var https4 = __toESM(require("node:https"), 1);
|
|
66405
66651
|
function responseHeaders2(headers) {
|
|
66406
66652
|
const result = {};
|
|
66407
66653
|
for (const [name, value] of Object.entries(forwardableHeaders(headers))) {
|
|
@@ -66421,16 +66667,16 @@ function createPassthroughRoute(name, target) {
|
|
|
66421
66667
|
name,
|
|
66422
66668
|
headroomEligible: true,
|
|
66423
66669
|
headroomUpstream: target.headroomUpstream,
|
|
66424
|
-
serve: async (
|
|
66425
|
-
const incoming = new URL(
|
|
66670
|
+
serve: async (request7, response) => {
|
|
66671
|
+
const incoming = new URL(request7.url, "http://127.0.0.1");
|
|
66426
66672
|
const path41 = target.stripPrefix !== void 0 && incoming.pathname.startsWith(target.stripPrefix) ? incoming.pathname.slice(target.stripPrefix.length) : incoming.pathname;
|
|
66427
|
-
const headers = forwardableHeaders(
|
|
66673
|
+
const headers = forwardableHeaders(request7.headers);
|
|
66428
66674
|
delete headers.host;
|
|
66429
66675
|
await new Promise((resolve) => {
|
|
66430
66676
|
const options = {
|
|
66431
66677
|
host: base.hostname,
|
|
66432
66678
|
port: base.port === "" ? void 0 : Number(base.port),
|
|
66433
|
-
method:
|
|
66679
|
+
method: request7.method,
|
|
66434
66680
|
path: `${basePath}${path41}${incoming.search}`,
|
|
66435
66681
|
headers,
|
|
66436
66682
|
agent
|
|
@@ -66441,7 +66687,7 @@ function createPassthroughRoute(name, target) {
|
|
|
66441
66687
|
const stream = async () => {
|
|
66442
66688
|
try {
|
|
66443
66689
|
for await (const chunk of upstreamChunks(upstreamResponse)) {
|
|
66444
|
-
if (
|
|
66690
|
+
if (request7.signal.aborted) {
|
|
66445
66691
|
return;
|
|
66446
66692
|
}
|
|
66447
66693
|
await response.write(chunk);
|
|
@@ -66454,7 +66700,7 @@ function createPassthroughRoute(name, target) {
|
|
|
66454
66700
|
};
|
|
66455
66701
|
void stream();
|
|
66456
66702
|
};
|
|
66457
|
-
const forward = tls2 ?
|
|
66703
|
+
const forward = tls2 ? https4.request(options, onUpstreamResponse) : http4.request(options, onUpstreamResponse);
|
|
66458
66704
|
forward.on("error", (error62) => {
|
|
66459
66705
|
if (!response.headersSent) {
|
|
66460
66706
|
response.start(HTTP_STATUS.badGateway, { "Content-Type": "application/json" });
|
|
@@ -66466,11 +66712,11 @@ function createPassthroughRoute(name, target) {
|
|
|
66466
66712
|
}
|
|
66467
66713
|
resolve(void 0);
|
|
66468
66714
|
});
|
|
66469
|
-
|
|
66715
|
+
request7.signal.addEventListener("abort", () => {
|
|
66470
66716
|
forward.destroy();
|
|
66471
66717
|
});
|
|
66472
|
-
|
|
66473
|
-
|
|
66718
|
+
request7.body.pipe(forward);
|
|
66719
|
+
request7.body.on("error", () => {
|
|
66474
66720
|
forward.destroy();
|
|
66475
66721
|
});
|
|
66476
66722
|
});
|
|
@@ -66492,8 +66738,8 @@ function createProviderRouteResolver(deps) {
|
|
|
66492
66738
|
passthroughByTarget.set(key, route);
|
|
66493
66739
|
return route;
|
|
66494
66740
|
};
|
|
66495
|
-
const resolve = (
|
|
66496
|
-
const path41 = new URL(
|
|
66741
|
+
const resolve = (request7) => {
|
|
66742
|
+
const path41 = new URL(request7.url, "http://127.0.0.1").pathname;
|
|
66497
66743
|
const scoped = parseProviderPath(path41);
|
|
66498
66744
|
if (scoped === void 0) {
|
|
66499
66745
|
return path41.startsWith("/v1/") ? { ok: true, route: oauthRoute } : { ok: false, status: HTTP_STATUS.notFound, message: `no such endpoint: ${path41}` };
|
|
@@ -66532,7 +66778,246 @@ function createProviderRouteResolver(deps) {
|
|
|
66532
66778
|
})
|
|
66533
66779
|
};
|
|
66534
66780
|
};
|
|
66535
|
-
return async (
|
|
66781
|
+
return async (request7) => await Promise.resolve(resolve(request7));
|
|
66782
|
+
}
|
|
66783
|
+
|
|
66784
|
+
// src/frontdoor/rcSessions.ts
|
|
66785
|
+
var RC_SESSIONS_PATH_PREFIX = "/v1/code/sessions";
|
|
66786
|
+
var RC_SESSION_ID_PREFIX = "cse_";
|
|
66787
|
+
var RC_IDLE_EXPIRY_MS = 45e3;
|
|
66788
|
+
var RC_CREATE_RESPONSE_CAP_BYTES = 8192;
|
|
66789
|
+
var CONFLICT_REASON_HEADER = "x-ccr-conflict-reason";
|
|
66790
|
+
var SUCCESS_STATUS_MAX_EXCLUSIVE = 300;
|
|
66791
|
+
function isSuccessful(status) {
|
|
66792
|
+
return status >= HTTP_STATUS.ok && status < SUCCESS_STATUS_MAX_EXCLUSIVE;
|
|
66793
|
+
}
|
|
66794
|
+
function singleHeader(headers, name) {
|
|
66795
|
+
const value = headers[name];
|
|
66796
|
+
return typeof value === "string" ? value : void 0;
|
|
66797
|
+
}
|
|
66798
|
+
function sessionCreateId(body) {
|
|
66799
|
+
let parsed;
|
|
66800
|
+
try {
|
|
66801
|
+
parsed = JSON.parse(body);
|
|
66802
|
+
} catch {
|
|
66803
|
+
return void 0;
|
|
66804
|
+
}
|
|
66805
|
+
if (typeof parsed !== "object" || parsed === null || !("session" in parsed)) {
|
|
66806
|
+
return void 0;
|
|
66807
|
+
}
|
|
66808
|
+
const session = parsed.session;
|
|
66809
|
+
if (typeof session !== "object" || session === null || !("id" in session)) {
|
|
66810
|
+
return void 0;
|
|
66811
|
+
}
|
|
66812
|
+
const id = session.id;
|
|
66813
|
+
return typeof id === "string" && id.startsWith(RC_SESSION_ID_PREFIX) ? id : void 0;
|
|
66814
|
+
}
|
|
66815
|
+
function createRcSessionTracker(deps) {
|
|
66816
|
+
const entries = /* @__PURE__ */ new Map();
|
|
66817
|
+
const expire = (id) => {
|
|
66818
|
+
entries.delete(id);
|
|
66819
|
+
};
|
|
66820
|
+
const sweep = () => {
|
|
66821
|
+
for (const [id, entry] of entries) {
|
|
66822
|
+
if (deps.now() - entry.lastSeenAt >= deps.idleMs) {
|
|
66823
|
+
expire(id);
|
|
66824
|
+
}
|
|
66825
|
+
}
|
|
66826
|
+
};
|
|
66827
|
+
const timer = setInterval(sweep, deps.idleMs);
|
|
66828
|
+
timer.unref();
|
|
66829
|
+
const observeExchange = (request7) => {
|
|
66830
|
+
const method = (request7.method ?? "").toUpperCase();
|
|
66831
|
+
const path41 = new URL(request7.url ?? "/", "http://127.0.0.1").pathname;
|
|
66832
|
+
if (!path41.startsWith(RC_SESSIONS_PATH_PREFIX)) {
|
|
66833
|
+
return void 0;
|
|
66834
|
+
}
|
|
66835
|
+
const tail = path41.slice(RC_SESSIONS_PATH_PREFIX.length);
|
|
66836
|
+
const facts = {
|
|
66837
|
+
authorization: singleHeader(request7.headers, "authorization"),
|
|
66838
|
+
anthropicVersion: singleHeader(request7.headers, "anthropic-version"),
|
|
66839
|
+
anthropicClientPlatform: singleHeader(request7.headers, "anthropic-client-platform")
|
|
66840
|
+
};
|
|
66841
|
+
if (tail === "") {
|
|
66842
|
+
if (method !== "POST") {
|
|
66843
|
+
return void 0;
|
|
66844
|
+
}
|
|
66845
|
+
let accepted = false;
|
|
66846
|
+
let buffered = 0;
|
|
66847
|
+
let body = "";
|
|
66848
|
+
return {
|
|
66849
|
+
onResponse: (status) => {
|
|
66850
|
+
accepted = isSuccessful(status);
|
|
66851
|
+
},
|
|
66852
|
+
onBodyChunk: (chunk) => {
|
|
66853
|
+
if (!accepted || buffered >= RC_CREATE_RESPONSE_CAP_BYTES) {
|
|
66854
|
+
return;
|
|
66855
|
+
}
|
|
66856
|
+
const text2 = Buffer.from(chunk).toString("utf8");
|
|
66857
|
+
body = body + text2.slice(0, RC_CREATE_RESPONSE_CAP_BYTES - buffered);
|
|
66858
|
+
buffered = body.length;
|
|
66859
|
+
},
|
|
66860
|
+
onEnd: () => {
|
|
66861
|
+
if (!accepted) {
|
|
66862
|
+
return;
|
|
66863
|
+
}
|
|
66864
|
+
const id2 = sessionCreateId(body);
|
|
66865
|
+
if (id2 === void 0) {
|
|
66866
|
+
return;
|
|
66867
|
+
}
|
|
66868
|
+
entries.set(id2, { id: id2, createdAt: deps.now(), lastSeenAt: deps.now(), ...facts });
|
|
66869
|
+
}
|
|
66870
|
+
};
|
|
66871
|
+
}
|
|
66872
|
+
const rest = tail.slice(1);
|
|
66873
|
+
const [id] = rest.split("/");
|
|
66874
|
+
if (id?.startsWith(RC_SESSION_ID_PREFIX) !== true) {
|
|
66875
|
+
return void 0;
|
|
66876
|
+
}
|
|
66877
|
+
const entry = entries.get(id);
|
|
66878
|
+
if (entry === void 0) {
|
|
66879
|
+
entries.set(id, { id, createdAt: deps.now(), lastSeenAt: deps.now(), ...facts });
|
|
66880
|
+
} else {
|
|
66881
|
+
entry.lastSeenAt = deps.now();
|
|
66882
|
+
entry.authorization = facts.authorization ?? entry.authorization;
|
|
66883
|
+
entry.anthropicVersion = facts.anthropicVersion ?? entry.anthropicVersion;
|
|
66884
|
+
entry.anthropicClientPlatform = facts.anthropicClientPlatform ?? entry.anthropicClientPlatform;
|
|
66885
|
+
}
|
|
66886
|
+
const archiving = method === "POST" && rest === `${id}/archive`;
|
|
66887
|
+
return {
|
|
66888
|
+
onResponse: (status, headers) => {
|
|
66889
|
+
if (singleHeader(headers, CONFLICT_REASON_HEADER) !== void 0 || archiving && isSuccessful(status)) {
|
|
66890
|
+
expire(id);
|
|
66891
|
+
}
|
|
66892
|
+
},
|
|
66893
|
+
onBodyChunk: () => {
|
|
66894
|
+
},
|
|
66895
|
+
onEnd: () => {
|
|
66896
|
+
}
|
|
66897
|
+
};
|
|
66898
|
+
};
|
|
66899
|
+
return {
|
|
66900
|
+
observeExchange,
|
|
66901
|
+
list: () => {
|
|
66902
|
+
sweep();
|
|
66903
|
+
return [...entries.values()].sort((left, right) => left.createdAt - right.createdAt || (left.id < right.id ? -1 : 1)).map(({ id, createdAt, lastSeenAt }) => ({ id, createdAt, lastSeenAt }));
|
|
66904
|
+
},
|
|
66905
|
+
credentialOf: (sessionId) => {
|
|
66906
|
+
const entry = entries.get(sessionId);
|
|
66907
|
+
return entry === void 0 ? void 0 : { authorization: entry.authorization, anthropicVersion: entry.anthropicVersion, anthropicClientPlatform: entry.anthropicClientPlatform };
|
|
66908
|
+
},
|
|
66909
|
+
close: () => {
|
|
66910
|
+
clearInterval(timer);
|
|
66911
|
+
}
|
|
66912
|
+
};
|
|
66913
|
+
}
|
|
66914
|
+
function observingRoutedRoute(route, tracker) {
|
|
66915
|
+
return {
|
|
66916
|
+
...route,
|
|
66917
|
+
serve: async (request7, response) => {
|
|
66918
|
+
const observed = tracker.observeExchange({ method: request7.method, url: request7.url, headers: request7.headers });
|
|
66919
|
+
await route.serve(request7, observed === void 0 ? response : teeRoutedResponse(response, observed));
|
|
66920
|
+
}
|
|
66921
|
+
};
|
|
66922
|
+
}
|
|
66923
|
+
function teeRoutedResponse(response, observer) {
|
|
66924
|
+
return {
|
|
66925
|
+
get headersSent() {
|
|
66926
|
+
return response.headersSent;
|
|
66927
|
+
},
|
|
66928
|
+
start: (status, headers) => {
|
|
66929
|
+
observer.onResponse(status, headers);
|
|
66930
|
+
response.start(status, headers);
|
|
66931
|
+
},
|
|
66932
|
+
flush: () => {
|
|
66933
|
+
response.flush();
|
|
66934
|
+
},
|
|
66935
|
+
write: async (chunk) => {
|
|
66936
|
+
observer.onBodyChunk(typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk);
|
|
66937
|
+
await response.write(chunk);
|
|
66938
|
+
},
|
|
66939
|
+
end: () => {
|
|
66940
|
+
response.end();
|
|
66941
|
+
observer.onEnd();
|
|
66942
|
+
},
|
|
66943
|
+
destroy: () => {
|
|
66944
|
+
response.destroy();
|
|
66945
|
+
observer.onEnd();
|
|
66946
|
+
}
|
|
66947
|
+
};
|
|
66948
|
+
}
|
|
66949
|
+
function buildRcUserMessagePayload(uuid3, sessionId, text2) {
|
|
66950
|
+
return {
|
|
66951
|
+
type: "user",
|
|
66952
|
+
uuid: uuid3,
|
|
66953
|
+
session_id: sessionId,
|
|
66954
|
+
parent_tool_use_id: null,
|
|
66955
|
+
message: { role: "user", content: text2 }
|
|
66956
|
+
};
|
|
66957
|
+
}
|
|
66958
|
+
function buildRcEventWriteBody(payload) {
|
|
66959
|
+
return { events: [{ payload }] };
|
|
66960
|
+
}
|
|
66961
|
+
function sequenceNumsOf(body) {
|
|
66962
|
+
let parsed;
|
|
66963
|
+
try {
|
|
66964
|
+
parsed = JSON.parse(body);
|
|
66965
|
+
} catch {
|
|
66966
|
+
return void 0;
|
|
66967
|
+
}
|
|
66968
|
+
if (typeof parsed !== "object" || parsed === null || !("results" in parsed) || !Array.isArray(parsed.results)) {
|
|
66969
|
+
return void 0;
|
|
66970
|
+
}
|
|
66971
|
+
const sequenceNums = [];
|
|
66972
|
+
const results = parsed.results;
|
|
66973
|
+
for (const result of results) {
|
|
66974
|
+
if (typeof result !== "object" || result === null || !("sequence_num" in result)) {
|
|
66975
|
+
return void 0;
|
|
66976
|
+
}
|
|
66977
|
+
const sequenceNum = result.sequence_num;
|
|
66978
|
+
if (typeof sequenceNum !== "number") {
|
|
66979
|
+
return void 0;
|
|
66980
|
+
}
|
|
66981
|
+
sequenceNums.push(sequenceNum);
|
|
66982
|
+
}
|
|
66983
|
+
return sequenceNums.length === 0 ? void 0 : sequenceNums;
|
|
66984
|
+
}
|
|
66985
|
+
function rcInjectResultFromAnswer(answer) {
|
|
66986
|
+
if (!isSuccessful(answer.status)) {
|
|
66987
|
+
if (answer.status === HTTP_STATUS.unauthorized) {
|
|
66988
|
+
return { ok: false, message: `the API refused the observed Authorization bearer for this session (HTTP 401): the bearer went stale after the door last saw the session's traffic. The session's own client refreshes it on its next call, which the door will observe, so retry once Remote Control has been active again. API answer: ${answer.body}` };
|
|
66989
|
+
}
|
|
66990
|
+
return { ok: false, message: `the API answered HTTP ${String(answer.status)} to the injected event: ${answer.body}` };
|
|
66991
|
+
}
|
|
66992
|
+
const sequenceNums = sequenceNumsOf(answer.body);
|
|
66993
|
+
if (sequenceNums === void 0) {
|
|
66994
|
+
return { ok: false, message: `the API accepted the injected event but its answer named no results[].sequence_num, so delivery cannot be confirmed: ${answer.body}` };
|
|
66995
|
+
}
|
|
66996
|
+
return { ok: true, sequenceNums };
|
|
66997
|
+
}
|
|
66998
|
+
async function injectRcUserMessage(deps, sessionId, text2) {
|
|
66999
|
+
const credential = deps.credentialOf(sessionId);
|
|
67000
|
+
if (credential === void 0) {
|
|
67001
|
+
return { ok: false, message: `the front door has not observed Remote Control session ${sessionId}: it may never have passed through this door, or it ended or expired (an entry lives only a bounded idle period past its last observed traffic)` };
|
|
67002
|
+
}
|
|
67003
|
+
const headers = { "content-type": "application/json" };
|
|
67004
|
+
if (credential.authorization !== void 0) {
|
|
67005
|
+
headers.authorization = credential.authorization;
|
|
67006
|
+
}
|
|
67007
|
+
if (credential.anthropicVersion !== void 0) {
|
|
67008
|
+
headers["anthropic-version"] = credential.anthropicVersion;
|
|
67009
|
+
}
|
|
67010
|
+
if (credential.anthropicClientPlatform !== void 0) {
|
|
67011
|
+
headers["anthropic-client-platform"] = credential.anthropicClientPlatform;
|
|
67012
|
+
}
|
|
67013
|
+
const body = JSON.stringify(buildRcEventWriteBody(buildRcUserMessagePayload(deps.newUuid(), sessionId, text2)));
|
|
67014
|
+
let answer;
|
|
67015
|
+
try {
|
|
67016
|
+
answer = await deps.dial.writeEvents(sessionId, headers, body);
|
|
67017
|
+
} catch (error62) {
|
|
67018
|
+
return { ok: false, message: `the door could not reach the API host to inject into session ${sessionId}: ${error62 instanceof Error ? error62.message : String(error62)}` };
|
|
67019
|
+
}
|
|
67020
|
+
return rcInjectResultFromAnswer(answer);
|
|
66536
67021
|
}
|
|
66537
67022
|
|
|
66538
67023
|
// src/usage/providerQuota.ts
|
|
@@ -66826,13 +67311,21 @@ function headroomSocketTarget(fsPort, trust, paths) {
|
|
|
66826
67311
|
const socketPath = readHeadroomState(fsPort, paths.headroomStateFile)?.socketPath;
|
|
66827
67312
|
return socketPath === void 0 ? void 0 : verifyHeadroomSocket(socketPath, trust);
|
|
66828
67313
|
}
|
|
67314
|
+
function rcObservingResolver(resolve, tracker) {
|
|
67315
|
+
return async (request7) => {
|
|
67316
|
+
const resolution = await resolve(request7);
|
|
67317
|
+
return resolution.ok ? { ok: true, route: observingRoutedRoute(resolution.route, tracker) } : resolution;
|
|
67318
|
+
};
|
|
67319
|
+
}
|
|
66829
67320
|
function realFrontDoorSupervisorPorts(paths) {
|
|
66830
67321
|
const log = (line) => {
|
|
66831
67322
|
appendLog(paths, `frontdoor ${String(process.pid)}: ${line}`);
|
|
66832
67323
|
};
|
|
66833
67324
|
let directPort = 0;
|
|
66834
67325
|
const codexPorts = createCodexRoutePorts(log);
|
|
66835
|
-
const
|
|
67326
|
+
const rcTracker = createRcSessionTracker({ now: () => Date.now(), idleMs: RC_IDLE_EXPIRY_MS });
|
|
67327
|
+
const rcControlToken = (0, import_node_crypto11.randomUUID)();
|
|
67328
|
+
const resolveRoute = rcObservingResolver(createProviderRouteResolver({ fs: realFsPort, providersDir: paths.providersDir, codexPorts, directPort: () => directPort }), rcTracker);
|
|
66836
67329
|
const isLiveToken = (token) => isLiveCapability(token, liveSessionTokens(realFarmFs, paths.frontdoorSessionsDir));
|
|
66837
67330
|
const usageStore = createUsageStore({
|
|
66838
67331
|
fs: realFarmFs,
|
|
@@ -66884,15 +67377,26 @@ function realFrontDoorSupervisorPorts(paths) {
|
|
|
66884
67377
|
isRunning: realIsProcessRunning,
|
|
66885
67378
|
startProviderListener: async (preferredPort) => {
|
|
66886
67379
|
const authority = loadCa();
|
|
67380
|
+
const rcInject = async (sessionId, text2) => await injectRcUserMessage({ credentialOf: rcTracker.credentialOf, dial: realRcEventDial(), newUuid: import_node_crypto11.randomUUID }, sessionId, text2);
|
|
67381
|
+
realFarmFs.mkdirp(paths.frontdoorDir);
|
|
67382
|
+
realFarmFs.writeFilePrivate(paths.frontdoorControlTokenFile, `${rcControlToken}
|
|
67383
|
+
`);
|
|
66887
67384
|
const server = createFrontDoorServer(
|
|
66888
|
-
async (
|
|
66889
|
-
await serveRouted(
|
|
67385
|
+
async (request7) => {
|
|
67386
|
+
await serveRouted(request7, pipelines.clientFacing);
|
|
66890
67387
|
},
|
|
66891
67388
|
log,
|
|
66892
|
-
mintLeaf(authority, LOOPBACK_LEAF_NAMES, /* @__PURE__ */ new Date())
|
|
67389
|
+
mintLeaf(authority, LOOPBACK_LEAF_NAMES, /* @__PURE__ */ new Date()),
|
|
67390
|
+
createRcControlHandler({ expectedToken: rcControlToken, list: rcTracker.list, inject: rcInject })
|
|
66893
67391
|
);
|
|
66894
67392
|
const handle = await listenFrontDoor(server, { ...preferredPort === void 0 ? {} : { preferredPort }, ca: authority.certPem, onError: onListenerError("provider") });
|
|
66895
|
-
return {
|
|
67393
|
+
return {
|
|
67394
|
+
port: handle.port,
|
|
67395
|
+
close: async () => {
|
|
67396
|
+
realFarmFs.removeRecursive(paths.frontdoorControlTokenFile);
|
|
67397
|
+
await handle.close();
|
|
67398
|
+
}
|
|
67399
|
+
};
|
|
66896
67400
|
},
|
|
66897
67401
|
startConnectListener: async (preferredPort) => {
|
|
66898
67402
|
const transparentPort = process.env.AGENT_SHIM_TRANSPARENT_SURFACE === void 0 ? void 0 : Number(process.env.AGENT_SHIM_TRANSPARENT_SURFACE);
|
|
@@ -66910,16 +67414,16 @@ function realFrontDoorSupervisorPorts(paths) {
|
|
|
66910
67414
|
interceptHosts: CONNECT_INTERCEPT_HOSTS,
|
|
66911
67415
|
tapHosts: CONNECT_TAP_HOSTS,
|
|
66912
67416
|
routedHost: CONNECT_INTERCEPT_HOST,
|
|
66913
|
-
serveRouted: (
|
|
67417
|
+
serveRouted: (request7, response) => {
|
|
66914
67418
|
const abort = new AbortController();
|
|
66915
67419
|
response.on("close", () => {
|
|
66916
67420
|
if (!response.writableFinished) {
|
|
66917
67421
|
abort.abort();
|
|
66918
67422
|
}
|
|
66919
67423
|
});
|
|
66920
|
-
void serveRouted({ method:
|
|
67424
|
+
void serveRouted({ method: request7.method ?? "GET", url: request7.url ?? "/", headers: request7.headers, body: request7, signal: abort.signal, response }, pipelines.clientFacing).catch(
|
|
66921
67425
|
(error62) => {
|
|
66922
|
-
log(`connect request ${
|
|
67426
|
+
log(`connect request ${request7.method ?? "?"} ${request7.url ?? "?"} failed: ${error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62)}`);
|
|
66923
67427
|
if (!response.headersSent) {
|
|
66924
67428
|
response.writeHead(HTTP_STATUS.badGateway, { "Content-Type": "application/json" });
|
|
66925
67429
|
response.end(JSON.stringify({ type: "error", error: { type: "api_error", message: "internal error in the agent-shim front door" } }));
|
|
@@ -66942,8 +67446,8 @@ function realFrontDoorSupervisorPorts(paths) {
|
|
|
66942
67446
|
return { port: server.port, close: server.close };
|
|
66943
67447
|
},
|
|
66944
67448
|
startDirectListener: async (preferredPort) => {
|
|
66945
|
-
const server = createFrontDoorServer(async (
|
|
66946
|
-
await serveRouted(
|
|
67449
|
+
const server = createFrontDoorServer(async (request7) => {
|
|
67450
|
+
await serveRouted(request7, pipelines.direct);
|
|
66947
67451
|
}, log);
|
|
66948
67452
|
const handle = await listenFrontDoor(server, {
|
|
66949
67453
|
...preferredPort === void 0 ? {} : { preferredPort },
|
|
@@ -67006,6 +67510,27 @@ function formatFrontDoorStatus(status, caCertPath) {
|
|
|
67006
67510
|
lines.push(`daemon log: ${status.logPath}${status.logExists ? "" : " (not created yet)"}`);
|
|
67007
67511
|
return lines;
|
|
67008
67512
|
}
|
|
67513
|
+
function formatRcSessionList(sessions) {
|
|
67514
|
+
if (sessions.length === 0) {
|
|
67515
|
+
return ["no Remote Control sessions observed"];
|
|
67516
|
+
}
|
|
67517
|
+
return sessions.map((session) => `${session.id} created ${new Date(session.createdAt).toISOString()} last seen ${new Date(session.lastSeenAt).toISOString()}`);
|
|
67518
|
+
}
|
|
67519
|
+
function frontDoorRcControlFromState(fsPort, paths) {
|
|
67520
|
+
const state = readFrontDoorState(fsPort, paths.frontdoorStateFile);
|
|
67521
|
+
if (state?.port === void 0) {
|
|
67522
|
+
throw new Error("the front door is not serving: Remote Control sessions are observed only while it runs, so start a session through the door first");
|
|
67523
|
+
}
|
|
67524
|
+
const ca = fsPort.readFileUtf8(paths.frontdoorCaCertFile);
|
|
67525
|
+
if (ca === void 0) {
|
|
67526
|
+
throw new Error(`the front door's CA certificate is missing at ${paths.frontdoorCaCertFile}, so its control listener cannot be authenticated`);
|
|
67527
|
+
}
|
|
67528
|
+
const token = fsPort.readFileUtf8(paths.frontdoorControlTokenFile)?.trim();
|
|
67529
|
+
if (token === void 0 || token === "") {
|
|
67530
|
+
throw new Error(`the serving front door's control token is missing at ${paths.frontdoorControlTokenFile}`);
|
|
67531
|
+
}
|
|
67532
|
+
return frontDoorRcControl(realRcControlTransport(state.port, ca), token);
|
|
67533
|
+
}
|
|
67009
67534
|
function registerFrontDoorCommand(program2, deps) {
|
|
67010
67535
|
const { paths } = deps;
|
|
67011
67536
|
const frontdoor = withExamples(program2.command("frontdoor").description("Inspect the front-door daemon that routes every agent-shim session."), [
|
|
@@ -67024,6 +67549,36 @@ function registerFrontDoorCommand(program2, deps) {
|
|
|
67024
67549
|
}),
|
|
67025
67550
|
["agent-shim frontdoor status", "agent-shim frontdoor status --json"]
|
|
67026
67551
|
);
|
|
67552
|
+
const rc = withExamples(frontdoor.command("rc").description("Observe the Remote Control sessions passing through the front door, and send a prompt into one."), [
|
|
67553
|
+
"agent-shim frontdoor rc list"
|
|
67554
|
+
]);
|
|
67555
|
+
withExamples(
|
|
67556
|
+
rc.command("list").description("List the Remote Control sessions the front door has observed, with when each was created and last seen. Read-only.").option("--json", "Print the sessions as JSON.").action(async (options) => {
|
|
67557
|
+
const sessions = await frontDoorRcControlFromState(realFarmFs, paths).listSessions();
|
|
67558
|
+
if (options.json === true) {
|
|
67559
|
+
printJson({ sessions });
|
|
67560
|
+
return;
|
|
67561
|
+
}
|
|
67562
|
+
for (const line of formatRcSessionList(sessions)) {
|
|
67563
|
+
console.log(line);
|
|
67564
|
+
}
|
|
67565
|
+
}),
|
|
67566
|
+
["agent-shim frontdoor rc list", "agent-shim frontdoor rc list --json"]
|
|
67567
|
+
);
|
|
67568
|
+
withExamples(
|
|
67569
|
+
rc.command("send").description("Send a text prompt into one observed Remote Control session, arriving as a message from an attached client would.").requiredOption("--session <id>", "The cse_ session id, as `frontdoor rc list` shows it.").requiredOption("--text <text>", "The prompt text to deliver.").option("--json", "Print the delivery result as JSON.").action(async (options) => {
|
|
67570
|
+
const result = await frontDoorRcControlFromState(realFarmFs, paths).sendPrompt(options.session, options.text);
|
|
67571
|
+
if (!result.ok) {
|
|
67572
|
+
throw new Error(result.message);
|
|
67573
|
+
}
|
|
67574
|
+
if (options.json === true) {
|
|
67575
|
+
printJson({ session: options.session, sequenceNums: result.sequenceNums });
|
|
67576
|
+
return;
|
|
67577
|
+
}
|
|
67578
|
+
console.log(`sent to ${options.session}: sequence_num ${result.sequenceNums.join(", ")}`);
|
|
67579
|
+
}),
|
|
67580
|
+
['agent-shim frontdoor rc send --session cse_00000000-0000-4000-8000-000000000000 --text "run the tests"']
|
|
67581
|
+
);
|
|
67027
67582
|
program2.command("__frontdoor-supervisor", { hidden: true }).description("Internal: serve the front-door routing listeners. Started by the launcher; never run by hand.").allowUnknownOption().action(async () => {
|
|
67028
67583
|
const idleShutdownMinutes = readGlobalConfig(paths)?.frontdoor?.idleShutdownMinutes ?? FRONTDOOR_DEFAULT_IDLE_SHUTDOWN_MINUTES;
|
|
67029
67584
|
process.on("SIGTERM", () => {
|