agent-shim 8.2.0 → 8.4.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/dist/cli.cjs CHANGED
@@ -7566,10 +7566,10 @@ var require_util2 = __commonJS({
7566
7566
  }
7567
7567
  return obj;
7568
7568
  }
7569
- function errorRequest(client, request6, err) {
7569
+ function errorRequest(client, request7, err) {
7570
7570
  try {
7571
- request6.onError(err);
7572
- assert2(request6.aborted);
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(request6, key, val) {
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 (request6.host !== null) {
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
- request6.host = val;
8299
+ request7.host = val;
8300
8300
  } else if (headerName === "content-length") {
8301
- if (request6.contentLength !== null) {
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
- request6.contentLength = parseInt(val, 10);
8308
- } else if (request6.contentType === null && headerName === "content-type") {
8309
- request6.contentType = val;
8310
- request6.headers.push(key, val);
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
- request6.reset = true;
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
- request6.headers.push(key, val);
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(request6) {
10924
- return request6.urlList[request6.urlList.length - 1];
10923
+ function requestCurrentURL(request7) {
10924
+ return request7.urlList[request7.urlList.length - 1];
10925
10925
  }
10926
- function requestBadPort(request6) {
10927
- const url2 = requestCurrentURL(request6);
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(request6, actualResponse) {
10965
+ function setRequestReferrerPolicyOnRedirect(request7, actualResponse) {
10966
10966
  const policy = parseReferrerPolicy(actualResponse);
10967
10967
  if (policy !== "") {
10968
- request6.referrerPolicy = policy;
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(request6) {
10986
- let serializedOrigin = request6.origin;
10985
+ function appendRequestOriginHeader(request7) {
10986
+ let serializedOrigin = request7.origin;
10987
10987
  if (serializedOrigin === "client" || serializedOrigin === void 0) {
10988
10988
  return;
10989
10989
  }
10990
- if (request6.responseTainting === "cors" || request6.mode === "websocket") {
10991
- request6.headersList.append("origin", serializedOrigin, true);
10992
- } else if (request6.method !== "GET" && request6.method !== "HEAD") {
10993
- switch (request6.referrerPolicy) {
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 (request6.origin && urlHasHttpsScheme(request6.origin) && !urlHasHttpsScheme(requestCurrentURL(request6))) {
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(request6, requestCurrentURL(request6))) {
11005
+ if (!sameOrigin(request7, requestCurrentURL(request7))) {
11006
11006
  serializedOrigin = null;
11007
11007
  }
11008
11008
  break;
11009
11009
  default:
11010
11010
  }
11011
- request6.headersList.append("origin", serializedOrigin, true);
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(request6) {
11066
- const policy = request6.referrerPolicy;
11065
+ function determineRequestsReferrer(request7) {
11066
+ const policy = request7.referrerPolicy;
11067
11067
  assert2(policy);
11068
11068
  let referrerSource = null;
11069
- if (request6.referrer === "client") {
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(request6.referrer)) {
11076
- referrerSource = request6.referrer;
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(request6);
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(request6);
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(request6, referrerURL)) {
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(request6, referrerURL)) {
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(request6);
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(request6) {
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(request6) {
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 request6 = client[kQueue][client[kRunningIdx]];
12796
- if (!request6) {
12795
+ const request7 = client[kQueue][client[kRunningIdx]];
12796
+ if (!request7) {
12797
12797
  return -1;
12798
12798
  }
12799
- request6.onResponseStarted();
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 request6 = client[kQueue][client[kRunningIdx]];
12862
- assert2(request6);
12863
- assert2(request6.upgrade || request6.method === "CONNECT");
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
- request6.onUpgrade(statusCode, headers, socket);
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 request6 = client[kQueue][client[kRunningIdx]];
12902
- if (!request6) {
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 && !request6.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
- request6.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive";
12918
+ request7.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive";
12919
12919
  if (this.statusCode >= 200) {
12920
- const bodyTimeout = request6.bodyTimeout != null ? request6.bodyTimeout : client[kBodyTimeout];
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 (request6.method === "CONNECT") {
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 = request6.onHeaders(statusCode, headers, this.resume, statusText) === false;
12959
- if (request6.aborted) {
12958
+ const pause = request7.onHeaders(statusCode, headers, this.resume, statusText) === false;
12959
+ if (request7.aborted) {
12960
12960
  return -1;
12961
12961
  }
12962
- if (request6.method === "HEAD") {
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 request6 = client[kQueue][client[kRunningIdx]];
12984
- assert2(request6);
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 (request6.onData(buf) === false) {
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 request6 = client[kQueue][client[kRunningIdx]];
13016
- assert2(request6);
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 (request6.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) {
13028
+ if (request7.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) {
13029
13029
  util.destroy(socket, new ResponseContentLengthMismatchError());
13030
13030
  return -1;
13031
13031
  }
13032
- request6.onComplete(headers);
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(request6) {
13102
- return writeH1(client, request6);
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(request6) {
13129
+ busy(request7) {
13130
13130
  if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) {
13131
13131
  return true;
13132
13132
  }
13133
- if (request6) {
13134
- if (client[kRunning] > 0 && !request6.idempotent) {
13133
+ if (request7) {
13134
+ if (client[kRunning] > 0 && !request7.idempotent) {
13135
13135
  return true;
13136
13136
  }
13137
- if (client[kRunning] > 0 && (request6.upgrade || request6.method === "CONNECT")) {
13137
+ if (client[kRunning] > 0 && (request7.upgrade || request7.method === "CONNECT")) {
13138
13138
  return true;
13139
13139
  }
13140
- if (client[kRunning] > 0 && util.bodyLength(request6.body) !== 0 && (util.isStream(request6.body) || util.isAsyncIterable(request6.body) || util.isFormDataLike(request6.body))) {
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 request6 = requests[i2];
13195
- util.errorRequest(client, request6, err);
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 request6 = client[kQueue][client[kRunningIdx]];
13198
+ const request7 = client[kQueue][client[kRunningIdx]];
13199
13199
  client[kQueue][client[kRunningIdx]++] = null;
13200
- util.errorRequest(client, request6, err);
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 request6 = client[kQueue][client[kRunningIdx]];
13269
- const headersTimeout = request6.headersTimeout != null ? request6.headersTimeout : client[kHeadersTimeout];
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, request6) {
13279
- const { method, path: path41, host, upgrade, blocking, reset } = request6;
13280
- let { body, headers, contentLength } = request6;
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 (request6.contentType == null) {
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) && request6.contentType == null) {
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, request6, new InvalidArgumentError2("invalid content-type header"));
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 = request6.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 && request6.contentLength !== null && request6.contentLength !== contentLength) {
13314
+ if (shouldSendContentLength(method) && contentLength > 0 && request7.contentLength !== null && request7.contentLength !== contentLength) {
13315
13315
  if (client[kStrictContentLength]) {
13316
- util.errorRequest(client, request6, new RequestContentLengthMismatchError());
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 (request6.aborted || request6.completed) {
13324
+ if (request7.aborted || request7.completed) {
13325
13325
  return;
13326
13326
  }
13327
- util.errorRequest(client, request6, err || new RequestAbortedError());
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
- request6.onConnect(abort);
13332
+ request7.onConnect(abort);
13333
13333
  } catch (err) {
13334
- util.errorRequest(client, request6, err);
13334
+ util.errorRequest(client, request7, err);
13335
13335
  }
13336
- if (request6.aborted) {
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(request6.typeOfService);
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: request6, headers: header, socket });
13390
+ channels.sendHeaders.publish({ request: request7, headers: header, socket });
13391
13391
  }
13392
13392
  if (!body || bodyLength === 0) {
13393
- writeBuffer(abort, null, client, request6, socket, contentLength, header, expectsPayload);
13393
+ writeBuffer(abort, null, client, request7, socket, contentLength, header, expectsPayload);
13394
13394
  } else if (util.isBuffer(body)) {
13395
- writeBuffer(abort, body, client, request6, socket, contentLength, header, expectsPayload);
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, request6, socket, contentLength, header, expectsPayload);
13398
+ writeIterable(abort, body.stream(), client, request7, socket, contentLength, header, expectsPayload);
13399
13399
  } else {
13400
- writeBlob(abort, body, client, request6, socket, contentLength, header, expectsPayload);
13400
+ writeBlob(abort, body, client, request7, socket, contentLength, header, expectsPayload);
13401
13401
  }
13402
13402
  } else if (util.isStream(body)) {
13403
- writeStream(abort, body, client, request6, socket, contentLength, header, expectsPayload);
13403
+ writeStream(abort, body, client, request7, socket, contentLength, header, expectsPayload);
13404
13404
  } else if (util.isIterable(body)) {
13405
- writeIterable(abort, body, client, request6, socket, contentLength, header, expectsPayload);
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, request6, socket, contentLength, header, expectsPayload) {
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: request6, contentLength, client, expectsPayload, header });
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, request6, socket, contentLength, header, expectsPayload) {
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
- request6.onBodySent(body);
13501
- if (!expectsPayload && request6.reset !== false) {
13500
+ request7.onBodySent(body);
13501
+ if (!expectsPayload && request7.reset !== false) {
13502
13502
  socket[kReset] = true;
13503
13503
  }
13504
13504
  }
13505
- request6.onRequestSent();
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, request6, socket, contentLength, header, expectsPayload) {
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
- request6.onBodySent(buffer);
13525
- request6.onRequestSent();
13526
- if (!expectsPayload && request6.reset !== false) {
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, request6, socket, contentLength, header, expectsPayload) {
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: request6, contentLength, client, expectsPayload, header });
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: request6, contentLength, client, expectsPayload, header }) {
13582
+ constructor({ abort, socket, request: request7, contentLength, client, expectsPayload, header }) {
13583
13583
  this.socket = socket;
13584
- this.request = request6;
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: request6, contentLength, client, bytesWritten, expectsPayload, header } = this;
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 && request6.reset !== false) {
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
- request6.onBodySent(chunk);
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: request6 } = this;
13652
- request6.onRequestSent();
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(request6) {
13833
- return writeH2(client, request6);
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(request6) {
13863
- if (request6 != null) {
13862
+ busy(request7) {
13863
+ if (request7 != null) {
13864
13864
  if (client[kRunning] > 0) {
13865
- if (request6.idempotent === false) return true;
13866
- if ((request6.upgrade === "websocket" || request6.method === "CONNECT") && session[kRemoteSettings] === false) return true;
13867
- if (util.bodyLength(request6.body) !== 0 && (util.isStream(request6.body) || util.isAsyncIterable(request6.body) || util.isFormDataLike(request6.body))) return true;
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 (request6.upgrade === "websocket" || request6.method === "CONNECT") && session[kRemoteSettings] === false;
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, request6, resetPendingIdx = false) {
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] === request6) {
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(request6, runningIdx);
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 request6 = client[kQueue][client[kRunningIdx]];
13972
+ const request7 = client[kQueue][client[kRunningIdx]];
13973
13973
  client[kQueue][client[kRunningIdx]++] = null;
13974
- if (request6 != null) {
13975
- util.errorRequest(client, request6, err);
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 request6 = requests[i2];
13999
- if (request6 != null) {
14000
- util.errorRequest(client, request6, err);
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, request6) {
14033
- const headersTimeout = request6.headersTimeout ?? client[kHeadersTimeout];
14034
- const bodyTimeout = request6.bodyTimeout ?? client[kBodyTimeout];
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 } = request6;
14037
- let { body } = request6;
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, request6, new InvalidArgumentError2(`Custom upgrade "${upgrade}" not supported over HTTP/2`));
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 (request6.aborted || request6.completed) {
14073
+ if (request7.aborted || request7.completed) {
14074
14074
  return;
14075
14075
  }
14076
14076
  err = err || new RequestAbortedError();
14077
- util.errorRequest(client, request6, err);
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, request6);
14082
+ completeRequest(client, request7);
14083
14083
  client[kResume]();
14084
14084
  }
14085
14085
  util.destroy(body, err);
14086
14086
  };
14087
14087
  try {
14088
- request6.onConnect(abort);
14088
+ request7.onConnect(abort);
14089
14089
  } catch (err) {
14090
- util.errorRequest(client, request6, err);
14090
+ util.errorRequest(client, request7, err);
14091
14091
  }
14092
- if (request6.aborted) {
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, request6, new InformationalError("HTTP/2: Extended CONNECT protocol not supported by server"));
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
- request6.onUpgrade(statusCode, parseH2Headers(realHeaders), stream);
14115
+ request7.onUpgrade(statusCode, parseH2Headers(realHeaders), stream);
14116
14116
  ++session[kOpenStreams];
14117
- completeRequest(client, request6);
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
- request6.onUpgrade(statusCode, parseH2Headers(realHeaders), stream);
14135
+ request7.onUpgrade(statusCode, parseH2Headers(realHeaders), stream);
14136
14136
  ++session[kOpenStreams];
14137
- completeRequest(client, request6);
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 = request6.contentLength;
14162
+ contentLength = request7.contentLength;
14163
14163
  }
14164
14164
  if (!expectsPayload) {
14165
14165
  contentLength = null;
14166
14166
  }
14167
- if (shouldSendContentLength(method) && contentLength > 0 && request6.contentLength != null && request6.contentLength !== contentLength) {
14167
+ if (shouldSendContentLength(method) && contentLength > 0 && request7.contentLength != null && request7.contentLength !== contentLength) {
14168
14168
  if (client[kStrictContentLength]) {
14169
- util.errorRequest(client, request6, new RequestContentLengthMismatchError());
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: request6, headers: header, socket: session[kSocket] });
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
- request6.onResponseStarted();
14206
+ request7.onResponseStarted();
14207
14207
  responseReceived = true;
14208
14208
  stream.setTimeout(bodyTimeout);
14209
- if (request6.aborted) {
14209
+ if (request7.aborted) {
14210
14210
  stream.removeAllListeners("data");
14211
14211
  return;
14212
14212
  }
14213
- if (request6.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) {
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 (request6.aborted || request6.completed) {
14217
+ if (request7.aborted || request7.completed) {
14218
14218
  return;
14219
14219
  }
14220
- if (request6.onData(chunk) === false) {
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 (!request6.aborted && !request6.completed) {
14229
- request6.onComplete({});
14228
+ if (!request7.aborted && !request7.completed) {
14229
+ request7.onComplete({});
14230
14230
  }
14231
- completeRequest(client, request6);
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, request6, true);
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 (!request6.aborted && !request6.completed) {
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 (request6.aborted || request6.completed) {
14270
+ if (request7.aborted || request7.completed) {
14271
14271
  return;
14272
14272
  }
14273
14273
  stream.removeAllListeners("data");
14274
- request6.onComplete(trailers);
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
- request6,
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
- request6,
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
- request6,
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
- request6,
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
- request6,
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
- request6,
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, request6, socket, contentLength, expectsPayload) {
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
- request6.onBodySent(body);
14359
+ request7.onBodySent(body);
14360
14360
  }
14361
14361
  if (!expectsPayload) {
14362
14362
  socket[kReset] = true;
14363
14363
  }
14364
- request6.onRequestSent();
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, request6, contentLength) {
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
- request6.onRequestSent();
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
- request6.onBodySent(chunk);
14391
+ request7.onBodySent(chunk);
14392
14392
  }
14393
14393
  }
14394
- async function writeBlob(abort, h2stream, body, client, request6, socket, contentLength, expectsPayload) {
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
- request6.onBodySent(buffer);
14406
- request6.onRequestSent();
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, request6, socket, contentLength, expectsPayload) {
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
- request6.onBodySent(chunk);
14440
+ request7.onBodySent(chunk);
14441
14441
  if (!res) {
14442
14442
  await waitForDrain();
14443
14443
  }
14444
14444
  }
14445
14445
  h2stream.end();
14446
- request6.onRequestSent();
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 request6 = new Request(this[kUrl].origin, opts, handler);
14732
- this[kQueue].push(request6);
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(request6.body) == null && util.isIterable(request6.body)) {
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 request6 = requests[i2];
14759
- if (request6 != null) {
14760
- util.errorRequest(this, request6, err);
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 request6 = requests[i2];
14786
- if (request6 != null) {
14787
- util.errorRequest(client, request6, err);
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 request6 = client[kQueue][client[kPendingIdx]++];
14899
- util.errorRequest(client, request6, err);
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 request6 = client[kQueue][client[kPendingIdx]];
14955
- if (request6 === null) {
14954
+ const request7 = client[kQueue][client[kPendingIdx]];
14955
+ if (request7 === null) {
14956
14956
  return;
14957
14957
  }
14958
- if (client[kUrl].protocol === "https:" && client[kServerName] !== request6.servername) {
14958
+ if (client[kUrl].protocol === "https:" && client[kServerName] !== request7.servername) {
14959
14959
  if (client[kRunning] > 0) {
14960
14960
  return;
14961
14961
  }
14962
- client[kServerName] = request6.servername;
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(request6)) {
14978
+ if (client[kHTTPContext].busy(request7)) {
14979
14979
  return;
14980
14980
  }
14981
- if (!request6.aborted && client[kHTTPContext].write(request6)) {
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 request6 = Buffer2.alloc(2 + this.authMethods.length);
16034
- request6[0] = SOCKS_VERSION;
16035
- request6[1] = this.authMethods.length;
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
- request6[2 + i2] = method;
16037
+ request7[2 + i2] = method;
16038
16038
  });
16039
- this.socket.write(request6);
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 request6 = Buffer2.alloc(3 + usernameBuffer.length + passwordBuffer.length);
16082
- request6[0] = 1;
16083
- request6[1] = usernameBuffer.length;
16084
- usernameBuffer.copy(request6, 2);
16085
- request6[2 + usernameBuffer.length] = passwordBuffer.length;
16086
- passwordBuffer.copy(request6, 3 + usernameBuffer.length);
16087
- this.socket.write(request6);
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 request6 = this.buildConnectRequest(COMMANDS.CONNECT, address, port);
16123
- this.socket.write(request6);
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 request6 = Buffer2.alloc(4 + addressBuffer.length + 2);
16131
- request6[0] = SOCKS_VERSION;
16132
- request6[1] = command;
16133
- request6[2] = 0;
16134
- request6[3] = addressType;
16135
- addressBuffer.copy(request6, 4);
16136
- request6.writeUInt16BE(port, 4 + addressBuffer.length);
16137
- return request6;
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 request6(opts, callback) {
17806
+ function request7(opts, callback) {
17807
17807
  if (callback === void 0) {
17808
17808
  return new Promise((resolve, reject) => {
17809
- request6.call(this, opts, (err, data) => {
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 = request6;
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 request6 = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions);
19809
- const hash2 = createRequestHash(request6);
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: request6,
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 request6 = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions);
19862
- const hash2 = createRequestHash(request6);
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 request6 = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions);
19958
- const hash2 = createRequestHash(request6);
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 request6 = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions);
19968
- const hash2 = createRequestHash(request6);
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: request6, responses, response } = snapshot;
20260
- const url2 = new URL(request6.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: request6.method,
20267
- headers: request6.headers,
20268
- body: request6.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 request6 = null;
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
- request6 = makeRequest({ urlList: [parsedURL] });
25586
+ request7 = makeRequest({ urlList: [parsedURL] });
25587
25587
  fallbackMode = "cors";
25588
25588
  } else {
25589
25589
  assert2(webidl.is.Request(input2));
25590
- request6 = input2.#state;
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 (request6.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request6.window, origin)) {
25597
- window = request6.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
- request6 = makeRequest({
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: request6.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: request6.headersList,
25612
+ headersList: request7.headersList,
25613
25613
  // unsafe-request flag Set.
25614
- unsafeRequest: request6.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: request6.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: request6.origin,
25624
+ origin: request7.origin,
25625
25625
  // referrer request’s referrer.
25626
- referrer: request6.referrer,
25626
+ referrer: request7.referrer,
25627
25627
  // referrer policy request’s referrer policy.
25628
- referrerPolicy: request6.referrerPolicy,
25628
+ referrerPolicy: request7.referrerPolicy,
25629
25629
  // mode request’s mode.
25630
- mode: request6.mode,
25630
+ mode: request7.mode,
25631
25631
  // credentials mode request’s credentials mode.
25632
- credentials: request6.credentials,
25632
+ credentials: request7.credentials,
25633
25633
  // cache mode request’s cache mode.
25634
- cache: request6.cache,
25634
+ cache: request7.cache,
25635
25635
  // redirect mode request’s redirect mode.
25636
- redirect: request6.redirect,
25636
+ redirect: request7.redirect,
25637
25637
  // integrity metadata request’s integrity metadata.
25638
- integrity: request6.integrity,
25638
+ integrity: request7.integrity,
25639
25639
  // keepalive request’s keepalive.
25640
- keepalive: request6.keepalive,
25640
+ keepalive: request7.keepalive,
25641
25641
  // reload-navigation flag request’s reload-navigation flag.
25642
- reloadNavigation: request6.reloadNavigation,
25642
+ reloadNavigation: request7.reloadNavigation,
25643
25643
  // history-navigation flag request’s history-navigation flag.
25644
- historyNavigation: request6.historyNavigation,
25644
+ historyNavigation: request7.historyNavigation,
25645
25645
  // URL list A clone of request’s URL list.
25646
- urlList: [...request6.urlList]
25646
+ urlList: [...request7.urlList]
25647
25647
  });
25648
25648
  const initHasKey = Object.keys(init).length !== 0;
25649
25649
  if (initHasKey) {
25650
- if (request6.mode === "navigate") {
25651
- request6.mode = "same-origin";
25650
+ if (request7.mode === "navigate") {
25651
+ request7.mode = "same-origin";
25652
25652
  }
25653
- request6.reloadNavigation = false;
25654
- request6.historyNavigation = false;
25655
- request6.origin = "client";
25656
- request6.referrer = "client";
25657
- request6.referrerPolicy = "";
25658
- request6.url = request6.urlList[request6.urlList.length - 1];
25659
- request6.urlList = [request6.url];
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
- request6.referrer = "no-referrer";
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
- request6.referrer = "client";
25673
+ request7.referrer = "client";
25674
25674
  } else {
25675
- request6.referrer = parsedReferrer;
25675
+ request7.referrer = parsedReferrer;
25676
25676
  }
25677
25677
  }
25678
25678
  }
25679
25679
  if (init.referrerPolicy !== void 0) {
25680
- request6.referrerPolicy = init.referrerPolicy;
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
- request6.mode = mode;
25695
+ request7.mode = mode;
25696
25696
  }
25697
25697
  if (init.credentials !== void 0) {
25698
- request6.credentials = init.credentials;
25698
+ request7.credentials = init.credentials;
25699
25699
  }
25700
25700
  if (init.cache !== void 0) {
25701
- request6.cache = init.cache;
25701
+ request7.cache = init.cache;
25702
25702
  }
25703
- if (request6.cache === "only-if-cached" && request6.mode !== "same-origin") {
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
- request6.redirect = init.redirect;
25709
+ request7.redirect = init.redirect;
25710
25710
  }
25711
25711
  if (init.integrity != null) {
25712
- request6.integrity = String(init.integrity);
25712
+ request7.integrity = String(init.integrity);
25713
25713
  }
25714
25714
  if (init.keepalive !== void 0) {
25715
- request6.keepalive = Boolean(init.keepalive);
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
- request6.method = mayBeNormalized;
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
- request6.method = method;
25731
+ request7.method = method;
25732
25732
  }
25733
- if (!patchMethodWarning && request6.method === "patch") {
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 = request6;
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, request6.headersList);
25761
+ setHeadersList(this.#headers, request7.headersList);
25762
25762
  setHeadersGuard(this.#headers, "request");
25763
25763
  if (mode === "no-cors") {
25764
- if (!corsSafeListedMethodsSet.has(request6.method)) {
25764
+ if (!corsSafeListedMethodsSet.has(request7.method)) {
25765
25765
  throw new TypeError(
25766
- `'${request6.method} is unsupported in no-cors mode.`
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) && (request6.method === "GET" || request6.method === "HEAD")) {
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
- request6.keepalive
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 (request6.mode !== "same-origin" && request6.mode !== "cors") {
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
- request6.useCORSPreflightFlag = true;
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(request6, newSignal) {
26000
- request6.#signal = newSignal;
26001
- return request6;
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(request6) {
26007
- return request6.#dispatcher;
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(request6, newDispatcher) {
26014
- request6.#dispatcher = newDispatcher;
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(request6, newHeaders) {
26021
- request6.#headers = newHeaders;
26020
+ static setRequestHeaders(request7, newHeaders) {
26021
+ request7.#headers = newHeaders;
26022
26022
  }
26023
26023
  /**
26024
26024
  * @param {Request} request
26025
26025
  */
26026
- static getRequestState(request6) {
26027
- return request6.#state;
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(request6, newState) {
26034
- request6.#state = newState;
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(request6) {
26090
- const newRequest = makeRequest({ ...request6, body: null });
26091
- if (request6.body != null) {
26092
- newRequest.body = cloneBody(request6.body);
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 request6 = new Request(kConstruct);
26098
- setRequestState(request6, innerRequest);
26099
- setRequestDispatcher(request6, dispatcher);
26100
- setRequestSignal(request6, signal);
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(request6, headers);
26102
+ setRequestHeaders(request7, headers);
26103
26103
  setHeadersList(headers, innerRequest.headersList);
26104
26104
  setHeadersGuard(headers, guard);
26105
- return request6;
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 request6 = getRequestState(requestObject);
26497
+ const request7 = getRequestState(requestObject);
26498
26498
  if (requestObject.signal.aborted) {
26499
- abortFetch(p, request6, null, requestObject.signal.reason, null);
26499
+ abortFetch(p, request7, null, requestObject.signal.reason, null);
26500
26500
  return p.promise;
26501
26501
  }
26502
- const globalObject = request6.client.globalObject;
26502
+ const globalObject = request7.client.globalObject;
26503
26503
  if (globalObject?.constructor?.name === "ServiceWorkerGlobalScope") {
26504
- request6.serviceWorkers = "none";
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, request6, realResponse, requestObject.signal.reason, controller.controller);
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, request6, responseObject, controller.serializedAbortReason, controller.controller);
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: request6,
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, request6, responseObject, error62, controller) {
26583
+ function abortFetch(p, request7, responseObject, error62, controller) {
26584
26584
  if (p) {
26585
26585
  p.reject(error62);
26586
26586
  }
26587
- if (request6.body?.stream != null && isReadable(request6.body.stream)) {
26588
- request6.body.stream.cancel(error62).catch((err) => {
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: request6,
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 (request6.client != null) {
26620
- taskDestination = request6.client.globalObject;
26621
- crossOriginIsolatedCapability = request6.client.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: request6,
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(!request6.body || request6.body.stream);
26642
- if (request6.window === "client") {
26643
- request6.window = request6.client?.globalObject?.constructor?.name === "Window" ? request6.client : "no-window";
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 (request6.origin === "client") {
26646
- request6.origin = request6.client.origin;
26645
+ if (request7.origin === "client") {
26646
+ request7.origin = request7.client.origin;
26647
26647
  }
26648
- if (request6.policyContainer === "client") {
26649
- if (request6.client != null) {
26650
- request6.policyContainer = clonePolicyContainer(
26651
- request6.client.policyContainer
26648
+ if (request7.policyContainer === "client") {
26649
+ if (request7.client != null) {
26650
+ request7.policyContainer = clonePolicyContainer(
26651
+ request7.client.policyContainer
26652
26652
  );
26653
26653
  } else {
26654
- request6.policyContainer = makePolicyContainer();
26654
+ request7.policyContainer = makePolicyContainer();
26655
26655
  }
26656
26656
  }
26657
- if (!request6.headersList.contains("accept", true)) {
26657
+ if (!request7.headersList.contains("accept", true)) {
26658
26658
  const value = "*/*";
26659
- request6.headersList.append("accept", value, true);
26659
+ request7.headersList.append("accept", value, true);
26660
26660
  }
26661
- if (!request6.headersList.contains("accept-language", true)) {
26662
- request6.headersList.append("accept-language", "*", true);
26661
+ if (!request7.headersList.contains("accept-language", true)) {
26662
+ request7.headersList.append("accept-language", "*", true);
26663
26663
  }
26664
- if (request6.priority === null) {
26664
+ if (request7.priority === null) {
26665
26665
  }
26666
- if (subresourceSet.has(request6.destination)) {
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 request6 = fetchParams.request;
26673
+ const request7 = fetchParams.request;
26674
26674
  let response = null;
26675
- if (request6.localURLsOnly && !urlIsLocal(requestCurrentURL(request6))) {
26675
+ if (request7.localURLsOnly && !urlIsLocal(requestCurrentURL(request7))) {
26676
26676
  response = makeNetworkError("local URLs only");
26677
26677
  }
26678
- tryUpgradeRequestToAPotentiallyTrustworthyURL(request6);
26679
- if (requestBadPort(request6) === "blocked") {
26678
+ tryUpgradeRequestToAPotentiallyTrustworthyURL(request7);
26679
+ if (requestBadPort(request7) === "blocked") {
26680
26680
  response = makeNetworkError("bad port");
26681
26681
  }
26682
- if (request6.referrerPolicy === "") {
26683
- request6.referrerPolicy = request6.policyContainer.referrerPolicy;
26682
+ if (request7.referrerPolicy === "") {
26683
+ request7.referrerPolicy = request7.policyContainer.referrerPolicy;
26684
26684
  }
26685
- if (request6.referrer !== "no-referrer") {
26686
- request6.referrer = determineRequestsReferrer(request6);
26685
+ if (request7.referrer !== "no-referrer") {
26686
+ request7.referrer = determineRequestsReferrer(request7);
26687
26687
  }
26688
26688
  if (response === null) {
26689
- const currentURL = requestCurrentURL(request6);
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, request6.url) && request6.responseTainting === "basic" || // request’s current URL’s scheme is "data"
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
- (request6.mode === "navigate" || request6.mode === "websocket")
26695
+ (request7.mode === "navigate" || request7.mode === "websocket")
26696
26696
  ) {
26697
- request6.responseTainting = "basic";
26697
+ request7.responseTainting = "basic";
26698
26698
  response = await schemeFetch(fetchParams);
26699
- } else if (request6.mode === "same-origin") {
26699
+ } else if (request7.mode === "same-origin") {
26700
26700
  response = makeNetworkError('request mode cannot be "same-origin"');
26701
- } else if (request6.mode === "no-cors") {
26702
- if (request6.redirect !== "follow") {
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
- request6.responseTainting = "opaque";
26707
+ request7.responseTainting = "opaque";
26708
26708
  response = await schemeFetch(fetchParams);
26709
26709
  }
26710
- } else if (!urlIsHttpHttpsScheme(requestCurrentURL(request6))) {
26710
+ } else if (!urlIsHttpHttpsScheme(requestCurrentURL(request7))) {
26711
26711
  response = makeNetworkError("URL scheme must be a HTTP(S) scheme");
26712
26712
  } else {
26713
- request6.responseTainting = "cors";
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 (request6.responseTainting === "cors") {
26721
+ if (request7.responseTainting === "cors") {
26722
26722
  }
26723
- if (request6.responseTainting === "basic") {
26723
+ if (request7.responseTainting === "basic") {
26724
26724
  response = filterResponse(response, "basic");
26725
- } else if (request6.responseTainting === "cors") {
26725
+ } else if (request7.responseTainting === "cors") {
26726
26726
  response = filterResponse(response, "cors");
26727
- } else if (request6.responseTainting === "opaque") {
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(...request6.urlList);
26735
+ internalResponse.urlList.push(...request7.urlList);
26736
26736
  }
26737
- if (!request6.timingAllowFailed) {
26737
+ if (!request7.timingAllowFailed) {
26738
26738
  response.timingAllowPassed = true;
26739
26739
  }
26740
- if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request6.headers.contains("range", true)) {
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 && (request6.method === "HEAD" || request6.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) {
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 (request6.integrity) {
26747
+ if (request7.integrity) {
26748
26748
  const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason));
26749
- if (request6.responseTainting === "opaque" || response.body == null) {
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, request6.integrity)) {
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: request6 } = fetchParams;
26774
- const { protocol: scheme } = requestCurrentURL(request6);
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(request6);
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 (request6.method !== "GET" || !webidl.is.Blob(blob)) {
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 (!request6.headersList.contains("range", true)) {
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 = request6.headersList.get("range", true);
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(request6);
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 request6 = fetchParams.request;
26923
+ const request7 = fetchParams.request;
26924
26924
  let response = null;
26925
26925
  let actualResponse = null;
26926
26926
  const timingInfo = fetchParams.timingInfo;
26927
- if (request6.serviceWorkers === "all") {
26927
+ if (request7.serviceWorkers === "all") {
26928
26928
  }
26929
26929
  if (response === null) {
26930
- if (request6.redirect === "follow") {
26931
- request6.serviceWorkers = "none";
26930
+ if (request7.redirect === "follow") {
26931
+ request7.serviceWorkers = "none";
26932
26932
  }
26933
26933
  actualResponse = response = await httpNetworkOrCacheFetch(fetchParams);
26934
- if (request6.responseTainting === "cors" && corsCheck(request6, response) === "failure") {
26934
+ if (request7.responseTainting === "cors" && corsCheck(request7, response) === "failure") {
26935
26935
  return makeNetworkError("cors failure");
26936
26936
  }
26937
- if (TAOCheck(request6, response) === "failure") {
26938
- request6.timingAllowFailed = true;
26937
+ if (TAOCheck(request7, response) === "failure") {
26938
+ request7.timingAllowFailed = true;
26939
26939
  }
26940
26940
  }
26941
- if ((request6.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck(
26942
- request6.origin,
26943
- request6.client,
26944
- request6.destination,
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 (request6.redirect !== "manual") {
26950
+ if (request7.redirect !== "manual") {
26951
26951
  fetchParams.controller.connection.destroy(void 0, false);
26952
26952
  }
26953
- if (request6.redirect === "error") {
26953
+ if (request7.redirect === "error") {
26954
26954
  response = makeNetworkError("unexpected redirect");
26955
- } else if (request6.redirect === "manual") {
26955
+ } else if (request7.redirect === "manual") {
26956
26956
  response = actualResponse;
26957
- } else if (request6.redirect === "follow") {
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 request6 = fetchParams.request;
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(request6).hash
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 (request6.redirectCount === 20) {
26984
+ if (request7.redirectCount === 20) {
26985
26985
  return Promise.resolve(makeNetworkError("redirect count exceeded"));
26986
26986
  }
26987
- request6.redirectCount += 1;
26988
- if (request6.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request6, locationURL)) {
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 (request6.responseTainting === "cors" && (locationURL.username || locationURL.password)) {
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 && request6.body != null && request6.body.source == null) {
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) && request6.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request6.method)) {
27000
- request6.method = "GET";
27001
- request6.body = null;
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
- request6.headersList.delete(headerName);
27003
+ request7.headersList.delete(headerName);
27004
27004
  }
27005
27005
  }
27006
- if (!sameOrigin(requestCurrentURL(request6), locationURL)) {
27007
- request6.headersList.delete("authorization", true);
27008
- request6.headersList.delete("proxy-authorization", true);
27009
- request6.headersList.delete("cookie", true);
27010
- request6.headersList.delete("host", true);
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 (request6.body != null) {
27013
- assert2(request6.body.source != null);
27014
- request6.body = safelyExtractBody(request6.body.source)[0];
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
- request6.urlList.push(locationURL);
27022
- setRequestReferrerPolicyOnRedirect(request6, actualResponse);
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 request6 = fetchParams.request;
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 (request6.window === "no-window" && request6.redirect === "error") {
27032
+ if (request7.window === "no-window" && request7.redirect === "error") {
27033
27033
  httpFetchParams = fetchParams;
27034
- httpRequest = request6;
27034
+ httpRequest = request7;
27035
27035
  } else {
27036
- httpRequest = cloneRequest(request6);
27036
+ httpRequest = cloneRequest(request7);
27037
27037
  httpFetchParams = { ...fetchParams };
27038
27038
  httpFetchParams.request = httpRequest;
27039
27039
  }
27040
- const includeCredentials = request6.credentials === "include" || request6.credentials === "same-origin" && request6.responseTainting === "basic";
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 && (request6.useURLCredentials !== void 0 || isTraversableNavigable(request6.traversableForUserPrompts))) {
27128
- if (request6.body != null) {
27129
- if (request6.body.source == null) {
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
- request6.body = safelyExtractBody(request6.body.source)[0];
27132
+ request7.body = safelyExtractBody(request7.body.source)[0];
27133
27133
  }
27134
- if (request6.useURLCredentials === void 0 || isAuthenticationFetch) {
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 (request6.window === "no-window") {
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
- (request6.body == null || request6.body.source != null)
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 request6 = fetchParams.request;
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
- request6.cache = "no-store";
27191
+ request7.cache = "no-store";
27192
27192
  }
27193
27193
  const newConnection = forceNewConnection ? "yes" : "no";
27194
- if (request6.mode === "websocket") {
27194
+ if (request7.mode === "websocket") {
27195
27195
  } else {
27196
27196
  }
27197
27197
  let requestBody = null;
27198
- if (request6.body == null && fetchParams.processRequestEndOfBody) {
27198
+ if (request7.body == null && fetchParams.processRequestEndOfBody) {
27199
27199
  queueMicrotask(() => fetchParams.processRequestEndOfBody());
27200
- } else if (request6.body != null) {
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 request6.body.stream) {
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(request6);
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: request6.method,
27344
- body: agent.isMockActive ? request6.body && (request6.body.source || request6.body.stream) : body,
27345
- headers: request6.headersList.entries,
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: request6.mode === "websocket" ? "websocket" : void 0
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 && request6.redirect === "follow" && redirectStatusSet.has(status);
27384
+ const willFollow = location && request7.redirect === "follow" && redirectStatusSet.has(status);
27385
27385
  const decoders = [];
27386
- if (request6.method !== "HEAD" && request6.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) {
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(request6, options = {}) {
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
- request6 = webidl.converters.RequestInfo(request6);
27586
+ request7 = webidl.converters.RequestInfo(request7);
27587
27587
  options = webidl.converters.CacheQueryOptions(options, prefix, "options");
27588
- const p = this.#internalMatchAll(request6, options, 1);
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(request6 = void 0, options = {}) {
27594
+ async matchAll(request7 = void 0, options = {}) {
27595
27595
  webidl.brandCheck(this, _Cache);
27596
27596
  const prefix = "Cache.matchAll";
27597
- if (request6 !== void 0) request6 = webidl.converters.RequestInfo(request6);
27597
+ if (request7 !== void 0) request7 = webidl.converters.RequestInfo(request7);
27598
27598
  options = webidl.converters.CacheQueryOptions(options, prefix, "options");
27599
- return this.#internalMatchAll(request6, options);
27599
+ return this.#internalMatchAll(request7, options);
27600
27600
  }
27601
- async add(request6) {
27601
+ async add(request7) {
27602
27602
  webidl.brandCheck(this, _Cache);
27603
27603
  const prefix = "Cache.add";
27604
27604
  webidl.argumentLengthCheck(arguments, 1, prefix);
27605
- request6 = webidl.converters.RequestInfo(request6);
27606
- const requests = [request6];
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 request6 of requests) {
27617
- if (request6 === void 0) {
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
- request6 = webidl.converters.RequestInfo(request6);
27625
- if (typeof request6 === "string") {
27624
+ request7 = webidl.converters.RequestInfo(request7);
27625
+ if (typeof request7 === "string") {
27626
27626
  continue;
27627
27627
  }
27628
- const r2 = getRequestState(request6);
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 request6 of requests) {
27638
- const r2 = getRequestState(new Request(request6));
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(request6, response) {
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
- request6 = webidl.converters.RequestInfo(request6);
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(request6)) {
27723
- innerRequest = getRequestState(request6);
27722
+ if (webidl.is.Request(request7)) {
27723
+ innerRequest = getRequestState(request7);
27724
27724
  } else {
27725
- innerRequest = getRequestState(new Request(request6));
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(request6, options = {}) {
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
- request6 = webidl.converters.RequestInfo(request6);
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(request6)) {
27804
- r2 = getRequestState(request6);
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 request6 === "string");
27810
- r2 = getRequestState(new Request(request6));
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(request6 = void 0, options = {}) {
27842
+ async keys(request7 = void 0, options = {}) {
27843
27843
  webidl.brandCheck(this, _Cache);
27844
27844
  const prefix = "Cache.keys";
27845
- if (request6 !== void 0) request6 = webidl.converters.RequestInfo(request6);
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 (request6 !== void 0) {
27849
- if (webidl.is.Request(request6)) {
27850
- r2 = getRequestState(request6);
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 request6 === "string") {
27855
- r2 = getRequestState(new Request(request6));
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 (request6 === void 0) {
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 request7 of requests) {
27872
+ for (const request8 of requests) {
27873
27873
  const requestObject = fromInnerRequest(
27874
- request7,
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, request6, response = null, options) {
27993
+ #requestMatchesCachedItem(requestQuery, request7, response = null, options) {
27994
27994
  const queryURL = new URL(requestQuery.url);
27995
- const cachedURL = new URL(request6.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 = request6.headersList.get(fieldValue);
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(request6, options, maxResponses = Infinity) {
28019
+ #internalMatchAll(request7, options, maxResponses = Infinity) {
28020
28020
  let r2 = null;
28021
- if (request6 !== void 0) {
28022
- if (webidl.is.Request(request6)) {
28023
- r2 = getRequestState(request6);
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 request6 === "string") {
28028
- r2 = getRequestState(new Request(request6));
28027
+ } else if (typeof request7 === "string") {
28028
+ r2 = getRequestState(new Request(request7));
28029
28029
  }
28030
28030
  }
28031
28031
  const responses = [];
28032
- if (request6 === void 0) {
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(request6, options = {}) {
28124
+ async match(request7, options = {}) {
28125
28125
  webidl.brandCheck(this, _CacheStorage);
28126
28126
  webidl.argumentLengthCheck(arguments, 1, "CacheStorage.match");
28127
- request6 = webidl.converters.RequestInfo(request6);
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(request6, options);
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(request6, options);
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 request6 = makeRequest({
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
- request6.headersList = headersList;
29343
+ request7.headersList = headersList;
29344
29344
  }
29345
29345
  const keyValue = crypto.randomBytes(16).toString("base64");
29346
- request6.headersList.append("sec-websocket-key", keyValue, true);
29347
- request6.headersList.append("sec-websocket-version", "13", true);
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
- request6.headersList.append("sec-websocket-protocol", protocol, true);
29349
+ request7.headersList.append("sec-websocket-protocol", protocol, true);
29350
29350
  }
29351
29351
  const permessageDeflate = "permessage-deflate; client_max_window_bits";
29352
- request6.headersList.append("sec-websocket-extensions", permessageDeflate, true);
29352
+ request7.headersList.append("sec-websocket-extensions", permessageDeflate, true);
29353
29353
  const controller = fetching({
29354
- request: request6,
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", request6.headersList);
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.2.0",
61043
+ version: "8.4.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, request6, sessionId, signal) {
63641
+ async function callCodex(ports, request7, sessionId, signal) {
63641
63642
  const url2 = ports.url ?? CODEX_RESPONSES_URL;
63642
- const body = JSON.stringify(request6);
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 (request6) => {
63917
- const token = singleValue(request6.headers[AUTH_HEADER]);
63918
- return token !== void 0 && isLiveToken(token) ? { ok: true, headers: { ...request6.forwardable } } : { ok: false, message: "agent-shim front door: this request carries no capability from a live agent-shim launch" };
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 (request6) => {
63923
- if (singleValue(request6.headers[HOP_SECRET_HEADER]) !== hopSecret) {
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(request6.headers[HOP_ID_HEADER]);
63927
- const provider = parseProviderPath(new URL(request6.url, "http://127.0.0.1").pathname)?.provider;
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(request6.forwardable, credentials) };
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: (request6) => {
64051
- append({ kind: "upgrade", method: request6.method ?? "?", url: request6.url ?? "?", headers: redactHeaders(request6.headers) });
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;
@@ -64063,19 +64064,19 @@ function createFileCapture(file2, now = () => /* @__PURE__ */ new Date()) {
64063
64064
  if (budget <= 0) {
64064
64065
  return;
64065
64066
  }
64066
- const excerpt = chunk.subarray(0, Math.min(CHUNK_LOG_CAP_BYTES, budget));
64067
- stored[direction] += excerpt.length;
64068
- const text2 = excerpt.toString("utf8");
64069
- const faithful = Buffer.from(text2, "utf8").equals(excerpt);
64067
+ const excerpt2 = chunk.subarray(0, Math.min(CHUNK_LOG_CAP_BYTES, budget));
64068
+ stored[direction] += excerpt2.length;
64069
+ const text2 = excerpt2.toString("utf8");
64070
+ const faithful = Buffer.from(text2, "utf8").equals(excerpt2);
64070
64071
  append({
64071
64072
  kind: "stream-chunk",
64072
64073
  id,
64073
64074
  dir: direction,
64074
64075
  seq: sequences[direction],
64075
64076
  bytes: chunk.length,
64076
- stored: excerpt.length,
64077
- truncated: excerpt.length < chunk.length,
64078
- ...faithful ? { body: redactText(text2) } : { b64: excerpt.toString("base64") }
64077
+ stored: excerpt2.length,
64078
+ truncated: excerpt2.length < chunk.length,
64079
+ ...faithful ? { body: redactText(text2) } : { b64: excerpt2.toString("base64") }
64079
64080
  });
64080
64081
  },
64081
64082
  onEnd: () => {
@@ -64083,10 +64084,10 @@ function createFileCapture(file2, now = () => /* @__PURE__ */ new Date()) {
64083
64084
  }
64084
64085
  };
64085
64086
  },
64086
- observePassthrough: (request6) => {
64087
+ observePassthrough: (request7) => {
64087
64088
  nextId += 1;
64088
64089
  const id = nextId;
64089
- append({ kind: "request", id, method: request6.method ?? "?", url: request6.url ?? "?", headers: redactHeaders(request6.headers) });
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) => {
@@ -64095,16 +64096,16 @@ function createFileCapture(file2, now = () => /* @__PURE__ */ new Date()) {
64095
64096
  if (budget <= 0) {
64096
64097
  return;
64097
64098
  }
64098
- const excerpt = incoming.subarray(0, Math.min(CHUNK_LOG_CAP_BYTES, budget));
64099
- logged[direction] += excerpt.length;
64099
+ const excerpt2 = incoming.subarray(0, Math.min(CHUNK_LOG_CAP_BYTES, budget));
64100
+ logged[direction] += excerpt2.length;
64100
64101
  append({
64101
64102
  kind: `${direction}-chunk`,
64102
64103
  id,
64103
64104
  seq: sequences[direction],
64104
64105
  bytes: incoming.length,
64105
- stored: excerpt.length,
64106
- truncated: excerpt.length < incoming.length,
64107
- body: redactBody(excerpt)
64106
+ stored: excerpt2.length,
64107
+ truncated: excerpt2.length < incoming.length,
64108
+ body: redactBody(excerpt2)
64108
64109
  });
64109
64110
  };
64110
64111
  return {
@@ -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) => (request6, socket, head) => {
64655
- config2.capture?.upgrade(request6);
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 = `${request6.method ?? "GET"} ${request6.url ?? "/"} HTTP/1.1\r
64661
- ${request6.rawHeaders.reduce((accumulated, value, index) => index % 2 === 0 ? `${accumulated}${value}: ` : `${accumulated}${value}\r
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 = (request6, response) => {
64675
- if (host === config2.routedHost && servedByPipeline(request6.url)) {
64676
- const tunnelToken = tunnelTokens.get(request6.socket);
64677
- if (tunnelToken !== void 0 && request6.headers[AUTH_HEADER] === void 0) {
64678
- request6.headers[AUTH_HEADER] = tunnelToken;
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(request6, response);
64681
+ config2.serveRouted(request7, response);
64681
64682
  return;
64682
64683
  }
64683
- effects.forwardHttp(config2.upstreamFor(host), request6, response, config2.capture?.observePassthrough(request6));
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", (request6, socket, head) => {
65086
- onUpgrade(request6, socket, head);
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, request6, response, observer) => {
65126
- const headers = forwardableHeaders(request6.headers);
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: request6.method,
65132
- path: request6.url,
65166
+ method: request7.method,
65167
+ path: request7.url,
65133
65168
  headers,
65134
65169
  agent: target.tls ? tlsAgent : plainAgent
65135
65170
  };
@@ -65164,15 +65199,20 @@ function realConnectEffects() {
65164
65199
  response.end(body);
65165
65200
  });
65166
65201
  if (observer !== void 0) {
65167
- request6.on("data", (chunk) => {
65202
+ request7.on("data", (chunk) => {
65168
65203
  observer.onRequestChunk(chunk);
65169
65204
  });
65205
+ if (observer.onRequestEnd !== void 0) {
65206
+ request7.on("end", () => {
65207
+ observer.onRequestEnd?.();
65208
+ });
65209
+ }
65170
65210
  response.on("close", () => {
65171
65211
  observer.onEnd();
65172
65212
  });
65173
65213
  }
65174
- request6.pipe(upstream);
65175
- request6.socket.setNoDelay(true);
65214
+ request7.pipe(upstream);
65215
+ request7.socket.setNoDelay(true);
65176
65216
  upstream.on("socket", (socket) => {
65177
65217
  socket.setNoDelay(true);
65178
65218
  });
@@ -65186,16 +65226,360 @@ var http3 = __toESM(require("node:http"), 1);
65186
65226
  // src/frontdoor/server.ts
65187
65227
  var import_node_http = __toESM(require("node:http"), 1);
65188
65228
  var import_node_https = __toESM(require("node:https"), 1);
65229
+
65230
+ // src/frontdoor/rcControl.ts
65231
+ var https2 = __toESM(require("node:https"), 1);
65232
+ var CONTROL_PATH_PREFIX = "/__agent-shim/rc";
65233
+ var CONTROL_BODY_CAP_BYTES = 10485760;
65234
+ function answerJson(response, status, body) {
65235
+ const text2 = JSON.stringify(body);
65236
+ response.writeHead(status, { "content-type": "application/json", "content-length": String(Buffer.byteLength(text2, "utf8")) });
65237
+ response.end(text2);
65238
+ }
65239
+ async function readBody(request7) {
65240
+ return await new Promise((resolve, reject) => {
65241
+ const chunks = [];
65242
+ let total = 0;
65243
+ request7.on("data", (chunk) => {
65244
+ total += chunk.length;
65245
+ if (total > CONTROL_BODY_CAP_BYTES) {
65246
+ request7.destroy();
65247
+ reject(new Error("too large"));
65248
+ return;
65249
+ }
65250
+ chunks.push(chunk);
65251
+ });
65252
+ request7.on("end", () => {
65253
+ resolve(Buffer.concat(chunks).toString("utf8"));
65254
+ });
65255
+ request7.on("error", () => {
65256
+ reject(new Error("the request body ended early"));
65257
+ });
65258
+ });
65259
+ }
65260
+ function createRcControlHandler(deps) {
65261
+ const sessionsPath = `${CONTROL_PATH_PREFIX}/sessions`;
65262
+ const statusPath = `${CONTROL_PATH_PREFIX}/status`;
65263
+ const pendingPath = `${CONTROL_PATH_PREFIX}/pending`;
65264
+ const injectPath = `${CONTROL_PATH_PREFIX}/inject`;
65265
+ const answerPath = `${CONTROL_PATH_PREFIX}/answer`;
65266
+ return (request7, response) => {
65267
+ const presented = request7.headers.authorization;
65268
+ const bearerPrefix = "bearer ".length;
65269
+ const token = typeof presented === "string" && presented.slice(0, bearerPrefix).toLowerCase() === "bearer " ? presented.slice(bearerPrefix) : void 0;
65270
+ if (token === void 0 || !isLiveCapability(token, [deps.expectedToken])) {
65271
+ answerJson(response, HTTP_STATUS.unauthorized, { error: "the front door's control routes demand this generation's control token as a Bearer credential" });
65272
+ return;
65273
+ }
65274
+ const url2 = new URL(request7.url ?? "/", "http://127.0.0.1");
65275
+ const handle = async () => {
65276
+ if (url2.pathname === sessionsPath) {
65277
+ if (request7.method !== "GET") {
65278
+ answerJson(response, HTTP_STATUS.methodNotAllowed, { error: "the session list is a GET" });
65279
+ return;
65280
+ }
65281
+ answerJson(response, HTTP_STATUS.ok, { sessions: deps.list() });
65282
+ return;
65283
+ }
65284
+ if (url2.pathname === statusPath || url2.pathname === pendingPath) {
65285
+ if (request7.method !== "GET") {
65286
+ answerJson(response, HTTP_STATUS.methodNotAllowed, { error: "the status and pending reads are GETs" });
65287
+ return;
65288
+ }
65289
+ const session = url2.searchParams.get("session") ?? void 0;
65290
+ if (session !== void 0 && !deps.statusOf(session).some((entry) => entry.id === session)) {
65291
+ answerJson(response, HTTP_STATUS.notFound, { error: `the front door has not observed Remote Control session ${session}: 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)` });
65292
+ return;
65293
+ }
65294
+ answerJson(response, HTTP_STATUS.ok, url2.pathname === statusPath ? { statuses: deps.statusOf(session) } : { pending: deps.pendingOf(session) });
65295
+ return;
65296
+ }
65297
+ if (url2.pathname === injectPath) {
65298
+ if (request7.method !== "POST") {
65299
+ answerJson(response, HTTP_STATUS.methodNotAllowed, { error: "the inject operation is a POST" });
65300
+ return;
65301
+ }
65302
+ let parsed;
65303
+ try {
65304
+ parsed = JSON.parse(await readBody(request7));
65305
+ } catch {
65306
+ answerJson(response, HTTP_STATUS.badRequest, { error: "the inject body is not readable JSON within the control body cap" });
65307
+ return;
65308
+ }
65309
+ if (typeof parsed !== "object" || parsed === null || !("session" in parsed) || !("text" in parsed) || typeof parsed.session !== "string" || typeof parsed.text !== "string" || parsed.session === "" || parsed.text === "") {
65310
+ answerJson(response, HTTP_STATUS.badRequest, { error: "the inject body must be JSON naming a non-empty session id and text" });
65311
+ return;
65312
+ }
65313
+ const result = await deps.inject(parsed.session, parsed.text);
65314
+ if (result.ok) {
65315
+ answerJson(response, HTTP_STATUS.ok, { session: parsed.session, sequenceNums: result.sequenceNums });
65316
+ return;
65317
+ }
65318
+ answerJson(response, HTTP_STATUS.badGateway, { error: result.message });
65319
+ return;
65320
+ }
65321
+ if (url2.pathname === answerPath) {
65322
+ if (request7.method !== "POST") {
65323
+ answerJson(response, HTTP_STATUS.methodNotAllowed, { error: "the answer operation is a POST" });
65324
+ return;
65325
+ }
65326
+ let parsed;
65327
+ try {
65328
+ parsed = JSON.parse(await readBody(request7));
65329
+ } catch {
65330
+ answerJson(response, HTTP_STATUS.badRequest, { error: "the answer body is not readable JSON within the control body cap" });
65331
+ return;
65332
+ }
65333
+ if (typeof parsed !== "object" || parsed === null || !("session" in parsed) || !("request" in parsed) || !("approve" in parsed) || typeof parsed.session !== "string" || typeof parsed.request !== "string" || typeof parsed.approve !== "boolean" || parsed.session === "" || parsed.request === "") {
65334
+ answerJson(response, HTTP_STATUS.badRequest, { error: "the answer body must be JSON naming a non-empty session id, request id, and an approve boolean" });
65335
+ return;
65336
+ }
65337
+ const text2 = "text" in parsed && typeof parsed.text === "string" ? parsed.text : void 0;
65338
+ if (parsed.approve && text2 !== void 0 && text2 !== "") {
65339
+ answerJson(response, HTTP_STATUS.badRequest, { error: "an approval carries no text (the protocol's allow result has no message field); text is the denial message" });
65340
+ return;
65341
+ }
65342
+ const result = await deps.answer(parsed.session, parsed.request, { approve: parsed.approve, message: parsed.approve ? void 0 : text2 });
65343
+ if (result.ok) {
65344
+ answerJson(response, HTTP_STATUS.ok, { session: parsed.session, request: parsed.request, sequenceNums: result.sequenceNums });
65345
+ return;
65346
+ }
65347
+ answerJson(response, HTTP_STATUS.badGateway, { error: result.message });
65348
+ return;
65349
+ }
65350
+ answerJson(response, HTTP_STATUS.notFound, { error: `no such control route: ${url2.pathname}` });
65351
+ };
65352
+ handle().catch((error62) => {
65353
+ answerJson(response, HTTP_STATUS.internalServerError, { error: `the control route failed: ${error62 instanceof Error ? error62.message : String(error62)}` });
65354
+ });
65355
+ };
65356
+ }
65357
+ function realRcControlTransport(port, ca) {
65358
+ return {
65359
+ request: async (options) => await new Promise((resolve, reject) => {
65360
+ const request7 = https2.request(
65361
+ {
65362
+ host: "127.0.0.1",
65363
+ port,
65364
+ method: options.method,
65365
+ path: options.path,
65366
+ headers: options.body === void 0 ? options.headers : { ...options.headers, "content-length": String(Buffer.byteLength(options.body, "utf8")) },
65367
+ agent: false,
65368
+ ca: [ca]
65369
+ },
65370
+ (response) => {
65371
+ const chunks = [];
65372
+ response.on("data", (chunk) => {
65373
+ chunks.push(chunk);
65374
+ });
65375
+ response.on("end", () => {
65376
+ resolve({ status: response.statusCode ?? 0, body: Buffer.concat(chunks).toString("utf8") });
65377
+ });
65378
+ }
65379
+ );
65380
+ request7.once("error", reject);
65381
+ if (options.body === void 0) {
65382
+ request7.end();
65383
+ } else {
65384
+ request7.end(options.body);
65385
+ }
65386
+ })
65387
+ };
65388
+ }
65389
+ function controlErrorOf(body) {
65390
+ try {
65391
+ const parsed = JSON.parse(body);
65392
+ if (typeof parsed === "object" && parsed !== null && "error" in parsed && typeof parsed.error === "string") {
65393
+ return parsed.error;
65394
+ }
65395
+ } catch {
65396
+ return body;
65397
+ }
65398
+ return void 0;
65399
+ }
65400
+ function isRcSessionSummary(value) {
65401
+ if (typeof value !== "object" || value === null) {
65402
+ return false;
65403
+ }
65404
+ if (!("id" in value) || !("createdAt" in value) || !("lastSeenAt" in value)) {
65405
+ return false;
65406
+ }
65407
+ return typeof value.id === "string" && typeof value.createdAt === "number" && typeof value.lastSeenAt === "number";
65408
+ }
65409
+ function isRcWorkerFact(value, valueIs) {
65410
+ if (typeof value !== "object" || value === null) {
65411
+ return false;
65412
+ }
65413
+ if (!("value" in value) || !("observedAt" in value)) {
65414
+ return false;
65415
+ }
65416
+ return valueIs(value.value) && typeof value.observedAt === "number";
65417
+ }
65418
+ function isRcSessionStatus(value) {
65419
+ if (!isRcSessionSummary(value)) {
65420
+ return false;
65421
+ }
65422
+ if (!("pending" in value) || !Array.isArray(value.pending)) {
65423
+ return false;
65424
+ }
65425
+ if ("workerState" in value && value.workerState !== void 0 && !isRcWorkerFact(value.workerState, (candidate) => typeof candidate === "string")) {
65426
+ return false;
65427
+ }
65428
+ if ("workerIdleSeconds" in value && value.workerIdleSeconds !== void 0 && !isRcWorkerFact(value.workerIdleSeconds, (candidate) => typeof candidate === "number")) {
65429
+ return false;
65430
+ }
65431
+ return value.pending.every((candidate) => isRcPendingRequestSummary(candidate));
65432
+ }
65433
+ function isRcPendingRequestSummary(value) {
65434
+ if (typeof value !== "object" || value === null) {
65435
+ return false;
65436
+ }
65437
+ if (!("sessionId" in value) || !("requestId" in value) || !("type" in value) || !("summary" in value) || !("observedAt" in value)) {
65438
+ return false;
65439
+ }
65440
+ return typeof value.sessionId === "string" && typeof value.requestId === "string" && typeof value.type === "string" && typeof value.summary === "string" && typeof value.observedAt === "number";
65441
+ }
65442
+ function sequenceNumsOfBody(body) {
65443
+ let parsed;
65444
+ try {
65445
+ parsed = JSON.parse(body);
65446
+ } catch {
65447
+ return void 0;
65448
+ }
65449
+ if (typeof parsed !== "object" || parsed === null || !("sequenceNums" in parsed) || !Array.isArray(parsed.sequenceNums)) {
65450
+ return void 0;
65451
+ }
65452
+ const sequenceNums = [];
65453
+ const values = parsed.sequenceNums;
65454
+ for (const value of values) {
65455
+ if (typeof value !== "number") {
65456
+ return void 0;
65457
+ }
65458
+ sequenceNums.push(value);
65459
+ }
65460
+ return sequenceNums;
65461
+ }
65462
+ function frontDoorRcControl(transport, token) {
65463
+ const headers = { authorization: `Bearer ${token}` };
65464
+ const listAnswerOf = async (path41, what) => {
65465
+ try {
65466
+ return await transport.request({ method: "GET", path: path41, headers });
65467
+ } catch (error62) {
65468
+ throw new Error(`${what}: could not reach the front door's control listener: ${error62 instanceof Error ? error62.message : String(error62)}`, { cause: error62 });
65469
+ }
65470
+ };
65471
+ const sessionsOf = (answer, what) => {
65472
+ if (answer.status !== HTTP_STATUS.ok) {
65473
+ throw new Error(`${what} failed (HTTP ${String(answer.status)}): ${controlErrorOf(answer.body) ?? answer.body}`);
65474
+ }
65475
+ let parsed;
65476
+ try {
65477
+ parsed = JSON.parse(answer.body);
65478
+ } catch {
65479
+ throw new Error(`${what}: the door's answer was not JSON: ${answer.body}`);
65480
+ }
65481
+ if (typeof parsed !== "object" || parsed === null || !("sessions" in parsed) || !Array.isArray(parsed.sessions)) {
65482
+ throw new Error(`${what}: the door's answer named no sessions list: ${answer.body}`);
65483
+ }
65484
+ const candidates = parsed.sessions;
65485
+ const sessions = [];
65486
+ for (const value of candidates) {
65487
+ if (!isRcSessionSummary(value)) {
65488
+ throw new Error(`${what}: the door's answer named no sessions list: ${answer.body}`);
65489
+ }
65490
+ sessions.push(value);
65491
+ }
65492
+ return sessions;
65493
+ };
65494
+ const statusesOf = (answer, what) => {
65495
+ if (answer.status !== HTTP_STATUS.ok) {
65496
+ throw new Error(`${what} failed (HTTP ${String(answer.status)}): ${controlErrorOf(answer.body) ?? answer.body}`);
65497
+ }
65498
+ let parsed;
65499
+ try {
65500
+ parsed = JSON.parse(answer.body);
65501
+ } catch {
65502
+ throw new Error(`${what}: the door's answer was not JSON: ${answer.body}`);
65503
+ }
65504
+ if (typeof parsed !== "object" || parsed === null || !("statuses" in parsed) || !Array.isArray(parsed.statuses)) {
65505
+ throw new Error(`${what}: the door's answer named no status list: ${answer.body}`);
65506
+ }
65507
+ const statuses = [];
65508
+ for (const value of parsed.statuses) {
65509
+ if (!isRcSessionStatus(value)) {
65510
+ throw new Error(`${what}: the door's answer named no status list: ${answer.body}`);
65511
+ }
65512
+ statuses.push(value);
65513
+ }
65514
+ return statuses;
65515
+ };
65516
+ const pendingOfAnswer = (answer, what) => {
65517
+ if (answer.status !== HTTP_STATUS.ok) {
65518
+ throw new Error(`${what} failed (HTTP ${String(answer.status)}): ${controlErrorOf(answer.body) ?? answer.body}`);
65519
+ }
65520
+ let parsed;
65521
+ try {
65522
+ parsed = JSON.parse(answer.body);
65523
+ } catch {
65524
+ throw new Error(`${what}: the door's answer was not JSON: ${answer.body}`);
65525
+ }
65526
+ if (typeof parsed !== "object" || parsed === null || !("pending" in parsed) || !Array.isArray(parsed.pending)) {
65527
+ throw new Error(`${what}: the door's answer named no pending list: ${answer.body}`);
65528
+ }
65529
+ const pending = [];
65530
+ for (const value of parsed.pending) {
65531
+ if (!isRcPendingRequestSummary(value)) {
65532
+ throw new Error(`${what}: the door's answer named no pending list: ${answer.body}`);
65533
+ }
65534
+ pending.push(value);
65535
+ }
65536
+ return pending;
65537
+ };
65538
+ const writeOf = async (path41, body, describeFailure) => {
65539
+ let answer;
65540
+ try {
65541
+ answer = await transport.request({ method: "POST", path: path41, headers: { ...headers, "content-type": "application/json" }, body });
65542
+ } catch (error62) {
65543
+ return { ok: false, message: `could not reach the front door's control listener: ${error62 instanceof Error ? error62.message : String(error62)}` };
65544
+ }
65545
+ if (answer.status === HTTP_STATUS.ok) {
65546
+ const sequenceNums = sequenceNumsOfBody(answer.body);
65547
+ if (sequenceNums === void 0) {
65548
+ return { ok: false, message: `the door accepted the event but its answer named no sequence numbers: ${answer.body}` };
65549
+ }
65550
+ return { ok: true, sequenceNums };
65551
+ }
65552
+ return { ok: false, message: describeFailure(answer.status, controlErrorOf(answer.body) ?? answer.body) };
65553
+ };
65554
+ const sessionQuery = (sessionId) => sessionId === void 0 ? "" : `?session=${encodeURIComponent(sessionId)}`;
65555
+ return {
65556
+ listSessions: async () => sessionsOf(await listAnswerOf(`${CONTROL_PATH_PREFIX}/sessions`, "listing the door's Remote Control sessions"), "listing the door's Remote Control sessions"),
65557
+ statusOf: async (sessionId) => statusesOf(await listAnswerOf(`${CONTROL_PATH_PREFIX}/status${sessionQuery(sessionId)}`, "reading the door's Remote Control session status"), "reading the door's Remote Control session status"),
65558
+ pendingOf: async (sessionId) => pendingOfAnswer(await listAnswerOf(`${CONTROL_PATH_PREFIX}/pending${sessionQuery(sessionId)}`, "listing the door's pending Remote Control control requests"), "listing the door's pending Remote Control control requests"),
65559
+ sendPrompt: async (sessionId, text2) => await writeOf(`${CONTROL_PATH_PREFIX}/inject`, JSON.stringify({ session: sessionId, text: text2 }), (status, message) => `injecting into ${sessionId} failed (HTTP ${String(status)}): ${message}`),
65560
+ answerRequest: async (sessionId, requestId, decision) => await writeOf(
65561
+ `${CONTROL_PATH_PREFIX}/answer`,
65562
+ JSON.stringify({ session: sessionId, request: requestId, approve: decision.approve, ...decision.approve || decision.message === void 0 ? {} : { text: decision.message } }),
65563
+ (status, message) => `answering control request ${requestId} on ${sessionId} failed (HTTP ${String(status)}): ${message}`
65564
+ )
65565
+ };
65566
+ }
65567
+
65568
+ // src/frontdoor/server.ts
65189
65569
  var HEALTH_TIMEOUT_MS = 2e3;
65190
65570
  var HEALTH_START_BUDGET_MS = 5e3;
65191
65571
  var HEALTH_RETRY_MS = 50;
65192
- function createFrontDoorServer(pipeline, log, tls2) {
65193
- const handler = (request6, response) => {
65194
- if (request6.method === "GET" && request6.url === "/healthz") {
65572
+ function createFrontDoorServer(pipeline, log, tls2, control) {
65573
+ const handler = (request7, response) => {
65574
+ if (request7.method === "GET" && request7.url === "/healthz") {
65195
65575
  response.writeHead(HTTP_STATUS.ok, { "Content-Type": "text/plain" });
65196
65576
  response.end("ok");
65197
65577
  return;
65198
65578
  }
65579
+ if (control !== void 0 && (request7.url ?? "/").startsWith(CONTROL_PATH_PREFIX)) {
65580
+ control(request7, response);
65581
+ return;
65582
+ }
65199
65583
  const abort = new AbortController();
65200
65584
  response.on("close", () => {
65201
65585
  if (!response.writableFinished) {
@@ -65203,13 +65587,13 @@ function createFrontDoorServer(pipeline, log, tls2) {
65203
65587
  }
65204
65588
  });
65205
65589
  const handle = async () => {
65206
- await pipeline({ method: request6.method ?? "GET", url: request6.url ?? "/", headers: aliasLegacyWireHeaders(request6.headers), body: request6, signal: abort.signal, response });
65207
- if (!request6.readableEnded) {
65208
- request6.resume();
65590
+ await pipeline({ method: request7.method ?? "GET", url: request7.url ?? "/", headers: aliasLegacyWireHeaders(request7.headers), body: request7, signal: abort.signal, response });
65591
+ if (!request7.readableEnded) {
65592
+ request7.resume();
65209
65593
  }
65210
65594
  };
65211
65595
  handle().catch((error62) => {
65212
- log(`request ${request6.method ?? "?"} ${request6.url ?? "?"} failed: ${error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62)}`);
65596
+ log(`request ${request7.method ?? "?"} ${request7.url ?? "?"} failed: ${error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62)}`);
65213
65597
  if (!response.headersSent) {
65214
65598
  response.writeHead(HTTP_STATUS.internalServerError, { "Content-Type": "application/json" });
65215
65599
  response.end(JSON.stringify({ type: "error", error: { type: "api_error", message: "internal error in the agent-shim front door" } }));
@@ -65234,11 +65618,11 @@ async function frontDoorHealthy(port, ca) {
65234
65618
  resolve(response.statusCode === HTTP_STATUS.ok);
65235
65619
  };
65236
65620
  const options = { host: "127.0.0.1", port, path: "/healthz", agent: false, timeout: HEALTH_TIMEOUT_MS };
65237
- const request6 = ca === void 0 ? import_node_http.default.get(options, onResponse) : import_node_https.default.get({ ...options, ca: [ca] }, onResponse);
65238
- request6.on("timeout", () => {
65239
- request6.destroy();
65621
+ const request7 = ca === void 0 ? import_node_http.default.get(options, onResponse) : import_node_https.default.get({ ...options, ca: [ca] }, onResponse);
65622
+ request7.on("timeout", () => {
65623
+ request7.destroy();
65240
65624
  });
65241
- request6.on("error", () => {
65625
+ request7.on("error", () => {
65242
65626
  resolve(false);
65243
65627
  });
65244
65628
  });
@@ -65323,24 +65707,24 @@ function responseHeaders(headers) {
65323
65707
  }
65324
65708
  return result;
65325
65709
  }
65326
- async function applyHeadroomHop(request6, response, upstream, deps) {
65710
+ async function applyHeadroomHop(request7, response, upstream, deps) {
65327
65711
  const target = deps.headroomSocket();
65328
65712
  if (target === void 0) {
65329
65713
  await answerBadGateway(response, "agent-shim front door: the headroom daemon is restarting");
65330
65714
  return;
65331
65715
  }
65332
65716
  if (target.refused !== void 0) {
65333
- deps.log(`front door: refusing the headroom hop (${request6.method} ${new URL(request6.url, "http://127.0.0.1").pathname}): ${target.refused}`);
65717
+ deps.log(`front door: refusing the headroom hop (${request7.method} ${new URL(request7.url, "http://127.0.0.1").pathname}): ${target.refused}`);
65334
65718
  await answerBadGateway(response, `agent-shim front door: refusing to send this request to headroom: ${target.refused}`);
65335
65719
  return;
65336
65720
  }
65337
65721
  const { socketPath } = target;
65338
- let headers = forwardableHeaders(request6.headers);
65722
+ let headers = forwardableHeaders(request7.headers);
65339
65723
  let hopId;
65340
65724
  if (upstream !== void 0) {
65341
- const provider = parseProviderPath(new URL(request6.url, "http://127.0.0.1").pathname)?.provider;
65725
+ const provider = parseProviderPath(new URL(request7.url, "http://127.0.0.1").pathname)?.provider;
65342
65726
  if (provider === void 0) {
65343
- throw new Error(`headroom hop for ${request6.url} names an upstream but no provider`);
65727
+ throw new Error(`headroom hop for ${request7.url} names an upstream but no provider`);
65344
65728
  }
65345
65729
  const sequestered = deps.custody.sequester(headers, provider);
65346
65730
  hopId = sequestered.hopId;
@@ -65348,12 +65732,12 @@ async function applyHeadroomHop(request6, response, upstream, deps) {
65348
65732
  headers[HOP_ID_HEADER] = hopId;
65349
65733
  headers[HEADROOM_BASE_URL_HEADER] = upstream;
65350
65734
  }
65351
- if (request6.session.projectId !== void 0) {
65352
- headers[PROJECT_ID_HEADER] = request6.session.projectId;
65735
+ if (request7.session.projectId !== void 0) {
65736
+ headers[PROJECT_ID_HEADER] = request7.session.projectId;
65353
65737
  }
65354
65738
  headers[HOP_SECRET_HEADER] = deps.hopSecret;
65355
65739
  try {
65356
- await forwardThroughHeadroom(request6, response, { socketPath, headers, log: deps.log });
65740
+ await forwardThroughHeadroom(request7, response, { socketPath, headers, log: deps.log });
65357
65741
  } finally {
65358
65742
  if (hopId !== void 0) {
65359
65743
  deps.custody.release(hopId);
@@ -65366,7 +65750,7 @@ async function answerBadGateway(response, message) {
65366
65750
  response.end();
65367
65751
  }
65368
65752
  var HOP_AGENT = new http3.Agent({ keepAlive: false });
65369
- async function forwardThroughHeadroom(request6, response, target) {
65753
+ async function forwardThroughHeadroom(request7, response, target) {
65370
65754
  const { socketPath, headers } = target;
65371
65755
  await new Promise((resolve) => {
65372
65756
  const onUpstreamResponse = (upstreamResponse) => {
@@ -65375,17 +65759,17 @@ async function forwardThroughHeadroom(request6, response, target) {
65375
65759
  const stream = async () => {
65376
65760
  try {
65377
65761
  for await (const chunk of upstreamChunks(upstreamResponse)) {
65378
- if (request6.signal.aborted) {
65762
+ if (request7.signal.aborted) {
65379
65763
  break;
65380
65764
  }
65381
65765
  await response.write(chunk);
65382
65766
  }
65383
- if (!request6.signal.aborted) {
65767
+ if (!request7.signal.aborted) {
65384
65768
  response.end();
65385
65769
  }
65386
65770
  } catch (error62) {
65387
- if (!request6.signal.aborted) {
65388
- target.log(`front door: headroom hop to ${socketPath} ended mid-stream (${request6.method} ${new URL(request6.url, "http://127.0.0.1").pathname}): ${error62 instanceof Error ? error62.message : String(error62)}`);
65771
+ if (!request7.signal.aborted) {
65772
+ 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
65773
  }
65390
65774
  response.destroy();
65391
65775
  }
@@ -65393,11 +65777,11 @@ async function forwardThroughHeadroom(request6, response, target) {
65393
65777
  };
65394
65778
  void stream();
65395
65779
  };
65396
- const hop = http3.request({ socketPath, method: request6.method, path: request6.url, headers, agent: HOP_AGENT }, onUpstreamResponse);
65780
+ const hop = http3.request({ socketPath, method: request7.method, path: request7.url, headers, agent: HOP_AGENT }, onUpstreamResponse);
65397
65781
  hop.on("error", (error62) => {
65398
65782
  const phase = response.headersSent ? "mid-stream" : "before the response started";
65399
65783
  const code = "code" in error62 && typeof error62.code === "string" ? ` ${error62.code}` : "";
65400
- target.log(`front door: headroom hop to ${socketPath} failed (${request6.method} ${new URL(request6.url, "http://127.0.0.1").pathname}, ${phase}): ${error62.message}${code}`);
65784
+ 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
65785
  if (!response.headersSent) {
65402
65786
  response.start(HTTP_BAD_GATEWAY2, { "Content-Type": "application/json" });
65403
65787
  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 +65792,11 @@ async function forwardThroughHeadroom(request6, response, target) {
65408
65792
  }
65409
65793
  resolve(void 0);
65410
65794
  });
65411
- request6.signal.addEventListener("abort", () => {
65795
+ request7.signal.addEventListener("abort", () => {
65412
65796
  hop.destroy();
65413
65797
  });
65414
- request6.body.pipe(hop);
65415
- request6.body.on("error", () => {
65798
+ request7.body.pipe(hop);
65799
+ request7.body.on("error", () => {
65416
65800
  hop.destroy();
65417
65801
  });
65418
65802
  });
@@ -65446,7 +65830,7 @@ function describeThrown(error62) {
65446
65830
  return error62 instanceof Error ? error62.message : String(error62);
65447
65831
  }
65448
65832
  function createRoutedResponse(response, context) {
65449
- const { deps, session, route, request: request6 } = context;
65833
+ const { deps, session, route, request: request7 } = context;
65450
65834
  let headersSent = false;
65451
65835
  let bodyObservers = [];
65452
65836
  let finished = false;
@@ -65492,7 +65876,7 @@ function createRoutedResponse(response, context) {
65492
65876
  start: (status, headers) => {
65493
65877
  for (const observe of deps.responseObservers) {
65494
65878
  try {
65495
- const body = observe({ session, route, method: request6.method, path: request6.path, receivedAt: request6.receivedAt, status, headers });
65879
+ const body = observe({ session, route, method: request7.method, path: request7.path, receivedAt: request7.receivedAt, status, headers });
65496
65880
  if (body !== void 0) {
65497
65881
  bodyObservers.push(body);
65498
65882
  }
@@ -65532,34 +65916,34 @@ function createRoutedResponse(response, context) {
65532
65916
  }
65533
65917
  };
65534
65918
  }
65535
- async function serveRouted(request6, deps) {
65536
- const observed = { method: request6.method, path: pathOf(request6.url), receivedAt: deps.now() };
65537
- const identified = identifyRequest(request6.headers);
65538
- const admission = deps.admit({ url: request6.url, headers: request6.headers, forwardable: identified.forwardableHeaders });
65919
+ async function serveRouted(request7, deps) {
65920
+ const observed = { method: request7.method, path: pathOf(request7.url), receivedAt: deps.now() };
65921
+ const identified = identifyRequest(request7.headers);
65922
+ const admission = deps.admit({ url: request7.url, headers: request7.headers, forwardable: identified.forwardableHeaders });
65539
65923
  if (!admission.ok) {
65540
- const response2 = createRoutedResponse(request6.response, { deps, session: identified.session, route: "(unauthorized)", request: observed });
65924
+ const response2 = createRoutedResponse(request7.response, { deps, session: identified.session, route: "(unauthorized)", request: observed });
65541
65925
  response2.start(HTTP_STATUS.unauthorized, { "Content-Type": "application/json" });
65542
65926
  await response2.write(errorBody(HTTP_STATUS.unauthorized, admission.message));
65543
65927
  response2.end();
65544
65928
  return;
65545
65929
  }
65546
65930
  const routed = {
65547
- method: request6.method,
65548
- url: request6.url,
65931
+ method: request7.method,
65932
+ url: request7.url,
65549
65933
  headers: admission.headers,
65550
- body: request6.body,
65551
- signal: request6.signal,
65934
+ body: request7.body,
65935
+ signal: request7.signal,
65552
65936
  session: identified.session
65553
65937
  };
65554
65938
  const resolution = await deps.resolveRoute(routed);
65555
65939
  if (!resolution.ok) {
65556
- const response2 = createRoutedResponse(request6.response, { deps, session: identified.session, route: "(unrouted)", request: observed });
65940
+ const response2 = createRoutedResponse(request7.response, { deps, session: identified.session, route: "(unrouted)", request: observed });
65557
65941
  response2.start(resolution.status, { "Content-Type": "application/json" });
65558
65942
  await response2.write(errorBody(resolution.status, resolution.message));
65559
65943
  response2.end();
65560
65944
  return;
65561
65945
  }
65562
- const response = createRoutedResponse(request6.response, { deps, session: identified.session, route: resolution.route.name, request: observed });
65946
+ const response = createRoutedResponse(request7.response, { deps, session: identified.session, route: resolution.route.name, request: observed });
65563
65947
  try {
65564
65948
  if (identified.session.headroom && resolution.route.headroomEligible && deps.headroom !== void 0) {
65565
65949
  await applyHeadroomHop(routed, response, resolution.route.headroomUpstream, deps.headroom);
@@ -65567,7 +65951,7 @@ async function serveRouted(request6, deps) {
65567
65951
  await resolution.route.serve(routed, response);
65568
65952
  }
65569
65953
  } catch (error62) {
65570
- if (request6.signal.aborted) {
65954
+ if (request7.signal.aborted) {
65571
65955
  return;
65572
65956
  }
65573
65957
  deps.log(`front door: route ${resolution.route.name} failed: ${error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62)}`);
@@ -65676,8 +66060,8 @@ var REQUESTABLE_EFFORTS = ["low", "medium", "high"];
65676
66060
  function isRequestableEffort(value) {
65677
66061
  return REQUESTABLE_EFFORTS.includes(value);
65678
66062
  }
65679
- function mapEffort(request6, config2) {
65680
- const requested = request6.output_config?.effort;
66063
+ function mapEffort(request7, config2) {
66064
+ const requested = request7.output_config?.effort;
65681
66065
  return requested !== void 0 && isRequestableEffort(requested) ? requested : config2.effort;
65682
66066
  }
65683
66067
  var BILLING_HEADER_LINE = /^x-anthropic-billing-header:[^\n]*\n/;
@@ -65803,7 +66187,7 @@ function translateRequest(body, config2) {
65803
66187
  const tools = mapTools(body.tools, names);
65804
66188
  const toolChoice = mapToolChoice(body.tool_choice, names);
65805
66189
  const userId = body.metadata?.user_id;
65806
- const request6 = {
66190
+ const request7 = {
65807
66191
  model: mapModel(body.model ?? "", config2),
65808
66192
  instructions: systemToInstructions(body.system),
65809
66193
  input: messagesToInput(body.messages, names),
@@ -65815,7 +66199,7 @@ function translateRequest(body, config2) {
65815
66199
  ...tools === void 0 ? {} : { tools },
65816
66200
  ...toolChoice === void 0 ? {} : { tool_choice: toolChoice }
65817
66201
  };
65818
- return { request: request6, toolNames: names };
66202
+ return { request: request7, toolNames: names };
65819
66203
  }
65820
66204
 
65821
66205
  // src/codex/events.ts
@@ -66190,7 +66574,7 @@ function describeError(error62) {
66190
66574
  return error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62);
66191
66575
  }
66192
66576
  function createCodexRoute(ports) {
66193
- const handleMessages = async (request6, config2, raw) => {
66577
+ const handleMessages = async (request7, config2, raw) => {
66194
66578
  const parsed = MessagesRequestSchema.safeParse(raw);
66195
66579
  if (!parsed.success) {
66196
66580
  return errorResponse(HTTP_STATUS.badRequest, `not an Anthropic Messages request: ${parsed.error.issues.map((issue2) => `${issue2.path.join(".")}: ${issue2.message}`).join("; ")}`);
@@ -66202,9 +66586,9 @@ function createCodexRoute(ports) {
66202
66586
  const elapsed = () => `${String(ports.now() - started)}ms`;
66203
66587
  let upstream;
66204
66588
  try {
66205
- upstream = await callCodex(ports.upstream, upstreamRequest, sessionIdFor(body.metadata?.user_id, ports.upstream.randomId), request6.signal);
66589
+ upstream = await callCodex(ports.upstream, upstreamRequest, sessionIdFor(body.metadata?.user_id, ports.upstream.randomId), request7.signal);
66206
66590
  } catch (error62) {
66207
- if (request6.signal.aborted) {
66591
+ if (request7.signal.aborted) {
66208
66592
  return errorResponse(HTTP_STATUS.clientClosedRequest, "client disconnected");
66209
66593
  }
66210
66594
  ports.log(`${upstreamRequest.model} upstream fetch failed after ${elapsed()}: ${describeError(error62)}`);
@@ -66264,7 +66648,7 @@ function createCodexRoute(ports) {
66264
66648
  ports.log(`${upstreamRequest.model} stream ended without completing after ${elapsed()}`);
66265
66649
  yield errorFrame(HTTP_STATUS.badGateway, "codex backend stream ended without completing");
66266
66650
  } catch (error62) {
66267
- if (request6.signal.aborted) {
66651
+ if (request7.signal.aborted) {
66268
66652
  return;
66269
66653
  }
66270
66654
  ports.log(`${upstreamRequest.model} stream relay failed: ${describeError(error62)}`);
@@ -66290,7 +66674,7 @@ function createCodexRoute(ports) {
66290
66674
  }
66291
66675
  }
66292
66676
  } catch (error62) {
66293
- if (request6.signal.aborted) {
66677
+ if (request7.signal.aborted) {
66294
66678
  return errorResponse(HTTP_STATUS.clientClosedRequest, "client disconnected");
66295
66679
  }
66296
66680
  ports.log(`${upstreamRequest.model} stream relay failed: ${describeError(error62)}`);
@@ -66307,26 +66691,26 @@ function createCodexRoute(ports) {
66307
66691
  const text2 = JSON.stringify({ system: parsed.data.system, messages: parsed.data.messages, tools: parsed.data.tools });
66308
66692
  return { status: HTTP_STATUS.ok, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ input_tokens: Math.ceil(text2.length / CHARS_PER_TOKEN) }) };
66309
66693
  };
66310
- return async (request6) => {
66311
- if (request6.method === "GET" && request6.path === "/healthz") {
66694
+ return async (request7) => {
66695
+ if (request7.method === "GET" && request7.path === "/healthz") {
66312
66696
  return { status: HTTP_STATUS.ok, headers: { "Content-Type": "text/plain" }, body: "ok" };
66313
66697
  }
66314
- if (request6.method !== "POST") {
66315
- return errorResponse(HTTP_STATUS.methodNotAllowed, `unsupported ${request6.method} ${request6.path}`);
66698
+ if (request7.method !== "POST") {
66699
+ return errorResponse(HTTP_STATUS.methodNotAllowed, `unsupported ${request7.method} ${request7.path}`);
66316
66700
  }
66317
- const scoped = parseProviderPath(request6.path);
66701
+ const scoped = parseProviderPath(request7.path);
66318
66702
  if (scoped === void 0 || scoped.rest !== "/v1/messages" && scoped.rest !== "/v1/messages/count_tokens") {
66319
- return errorResponse(HTTP_STATUS.notFound, `no such endpoint: ${request6.path}`);
66703
+ return errorResponse(HTTP_STATUS.notFound, `no such endpoint: ${request7.path}`);
66320
66704
  }
66321
66705
  const provider = ports.loadProvider(scoped.provider);
66322
66706
  if (!provider.ok) {
66323
66707
  return errorResponse(provider.status, provider.message);
66324
66708
  }
66325
- const json2 = parseJson3(request6.body);
66709
+ const json2 = parseJson3(request7.body);
66326
66710
  if (!json2.ok) {
66327
66711
  return errorResponse(HTTP_STATUS.badRequest, json2.message);
66328
66712
  }
66329
- return scoped.rest === "/v1/messages" ? await handleMessages(request6, provider.config, json2.value) : handleCountTokens(json2.value);
66713
+ return scoped.rest === "/v1/messages" ? await handleMessages(request7, provider.config, json2.value) : handleCountTokens(json2.value);
66330
66714
  };
66331
66715
  }
66332
66716
 
@@ -66338,10 +66722,10 @@ var BodyTooLargeError = class extends Error {
66338
66722
  this.name = "BodyTooLargeError";
66339
66723
  }
66340
66724
  };
66341
- async function readBody(request6) {
66725
+ async function readBody2(request7) {
66342
66726
  const chunks = [];
66343
66727
  let size = 0;
66344
- for await (const chunk of request6.body) {
66728
+ for await (const chunk of request7.body) {
66345
66729
  if (!Buffer.isBuffer(chunk)) {
66346
66730
  throw new TypeError("request body chunk was not a Buffer");
66347
66731
  }
@@ -66374,10 +66758,10 @@ function createCodexRouteMount(ports, upstreamBase, provider) {
66374
66758
  name: `codex:${provider}`,
66375
66759
  headroomEligible: true,
66376
66760
  headroomUpstream: upstreamBase,
66377
- serve: async (request6, response) => {
66761
+ serve: async (request7, response) => {
66378
66762
  let body;
66379
66763
  try {
66380
- body = await readBody(request6);
66764
+ body = await readBody2(request7);
66381
66765
  } catch (error62) {
66382
66766
  const tooLarge = error62 instanceof BodyTooLargeError;
66383
66767
  response.start(tooLarge ? HTTP_STATUS.payloadTooLarge : HTTP_STATUS.badRequest, { "Content-Type": "application/json" });
@@ -66385,23 +66769,23 @@ function createCodexRouteMount(ports, upstreamBase, provider) {
66385
66769
  JSON.stringify({ type: "error", error: { type: "invalid_request_error", message: error62 instanceof Error ? error62.message : String(error62) } })
66386
66770
  );
66387
66771
  response.end();
66388
- request6.body.resume();
66772
+ request7.body.resume();
66389
66773
  return;
66390
66774
  }
66391
- const path41 = new URL(request6.url, "http://127.0.0.1").pathname;
66392
- const translated = { method: request6.method, path: path41, body, signal: request6.signal };
66775
+ const path41 = new URL(request7.url, "http://127.0.0.1").pathname;
66776
+ const translated = { method: request7.method, path: path41, body, signal: request7.signal };
66393
66777
  const routed = await route(translated);
66394
- if (request6.signal.aborted) {
66778
+ if (request7.signal.aborted) {
66395
66779
  return;
66396
66780
  }
66397
- await writeRouteResponse(routed, response, request6.signal);
66781
+ await writeRouteResponse(routed, response, request7.signal);
66398
66782
  }
66399
66783
  };
66400
66784
  }
66401
66785
 
66402
66786
  // src/frontdoor/passthrough.ts
66403
66787
  var http4 = __toESM(require("node:http"), 1);
66404
- var https3 = __toESM(require("node:https"), 1);
66788
+ var https4 = __toESM(require("node:https"), 1);
66405
66789
  function responseHeaders2(headers) {
66406
66790
  const result = {};
66407
66791
  for (const [name, value] of Object.entries(forwardableHeaders(headers))) {
@@ -66421,16 +66805,16 @@ function createPassthroughRoute(name, target) {
66421
66805
  name,
66422
66806
  headroomEligible: true,
66423
66807
  headroomUpstream: target.headroomUpstream,
66424
- serve: async (request6, response) => {
66425
- const incoming = new URL(request6.url, "http://127.0.0.1");
66808
+ serve: async (request7, response) => {
66809
+ const incoming = new URL(request7.url, "http://127.0.0.1");
66426
66810
  const path41 = target.stripPrefix !== void 0 && incoming.pathname.startsWith(target.stripPrefix) ? incoming.pathname.slice(target.stripPrefix.length) : incoming.pathname;
66427
- const headers = forwardableHeaders(request6.headers);
66811
+ const headers = forwardableHeaders(request7.headers);
66428
66812
  delete headers.host;
66429
66813
  await new Promise((resolve) => {
66430
66814
  const options = {
66431
66815
  host: base.hostname,
66432
66816
  port: base.port === "" ? void 0 : Number(base.port),
66433
- method: request6.method,
66817
+ method: request7.method,
66434
66818
  path: `${basePath}${path41}${incoming.search}`,
66435
66819
  headers,
66436
66820
  agent
@@ -66441,7 +66825,7 @@ function createPassthroughRoute(name, target) {
66441
66825
  const stream = async () => {
66442
66826
  try {
66443
66827
  for await (const chunk of upstreamChunks(upstreamResponse)) {
66444
- if (request6.signal.aborted) {
66828
+ if (request7.signal.aborted) {
66445
66829
  return;
66446
66830
  }
66447
66831
  await response.write(chunk);
@@ -66454,7 +66838,7 @@ function createPassthroughRoute(name, target) {
66454
66838
  };
66455
66839
  void stream();
66456
66840
  };
66457
- const forward = tls2 ? https3.request(options, onUpstreamResponse) : http4.request(options, onUpstreamResponse);
66841
+ const forward = tls2 ? https4.request(options, onUpstreamResponse) : http4.request(options, onUpstreamResponse);
66458
66842
  forward.on("error", (error62) => {
66459
66843
  if (!response.headersSent) {
66460
66844
  response.start(HTTP_STATUS.badGateway, { "Content-Type": "application/json" });
@@ -66466,11 +66850,11 @@ function createPassthroughRoute(name, target) {
66466
66850
  }
66467
66851
  resolve(void 0);
66468
66852
  });
66469
- request6.signal.addEventListener("abort", () => {
66853
+ request7.signal.addEventListener("abort", () => {
66470
66854
  forward.destroy();
66471
66855
  });
66472
- request6.body.pipe(forward);
66473
- request6.body.on("error", () => {
66856
+ request7.body.pipe(forward);
66857
+ request7.body.on("error", () => {
66474
66858
  forward.destroy();
66475
66859
  });
66476
66860
  });
@@ -66492,8 +66876,8 @@ function createProviderRouteResolver(deps) {
66492
66876
  passthroughByTarget.set(key, route);
66493
66877
  return route;
66494
66878
  };
66495
- const resolve = (request6) => {
66496
- const path41 = new URL(request6.url, "http://127.0.0.1").pathname;
66879
+ const resolve = (request7) => {
66880
+ const path41 = new URL(request7.url, "http://127.0.0.1").pathname;
66497
66881
  const scoped = parseProviderPath(path41);
66498
66882
  if (scoped === void 0) {
66499
66883
  return path41.startsWith("/v1/") ? { ok: true, route: oauthRoute } : { ok: false, status: HTTP_STATUS.notFound, message: `no such endpoint: ${path41}` };
@@ -66532,7 +66916,452 @@ function createProviderRouteResolver(deps) {
66532
66916
  })
66533
66917
  };
66534
66918
  };
66535
- return async (request6) => await Promise.resolve(resolve(request6));
66919
+ return async (request7) => await Promise.resolve(resolve(request7));
66920
+ }
66921
+
66922
+ // src/frontdoor/rcSessions.ts
66923
+ var RC_SESSIONS_PATH_PREFIX = "/v1/code/sessions";
66924
+ var RC_SESSION_ID_PREFIX = "cse_";
66925
+ var RC_IDLE_EXPIRY_MS = 45e3;
66926
+ var RC_CREATE_RESPONSE_CAP_BYTES = 8192;
66927
+ var CONFLICT_REASON_HEADER = "x-ccr-conflict-reason";
66928
+ var RC_PENDING_DEADLINE_MS = 14e3;
66929
+ var RC_REQUEST_PARSE_CAP_BYTES = 262144;
66930
+ var RC_PENDING_SUMMARY_EXCERPT_CHARS = 300;
66931
+ var SUCCESS_STATUS_MAX_EXCLUSIVE = 300;
66932
+ function isSuccessful(status) {
66933
+ return status >= HTTP_STATUS.ok && status < SUCCESS_STATUS_MAX_EXCLUSIVE;
66934
+ }
66935
+ function singleHeader(headers, name) {
66936
+ const value = headers[name];
66937
+ return typeof value === "string" ? value : void 0;
66938
+ }
66939
+ function sessionCreateId(body) {
66940
+ let parsed;
66941
+ try {
66942
+ parsed = JSON.parse(body);
66943
+ } catch {
66944
+ return void 0;
66945
+ }
66946
+ if (typeof parsed !== "object" || parsed === null || !("session" in parsed)) {
66947
+ return void 0;
66948
+ }
66949
+ const session = parsed.session;
66950
+ if (typeof session !== "object" || session === null || !("id" in session)) {
66951
+ return void 0;
66952
+ }
66953
+ const id = session.id;
66954
+ return typeof id === "string" && id.startsWith(RC_SESSION_ID_PREFIX) ? id : void 0;
66955
+ }
66956
+ function isRecord3(value) {
66957
+ return typeof value === "object" && value !== null && !Array.isArray(value);
66958
+ }
66959
+ function parseJsonObject(body) {
66960
+ let parsed;
66961
+ try {
66962
+ parsed = JSON.parse(body);
66963
+ } catch {
66964
+ return void 0;
66965
+ }
66966
+ return isRecord3(parsed) ? parsed : void 0;
66967
+ }
66968
+ function nonEmptyString(record2, field) {
66969
+ const value = record2 === void 0 ? void 0 : record2[field];
66970
+ return typeof value === "string" && value !== "" ? value : void 0;
66971
+ }
66972
+ function finiteNumber(record2, field) {
66973
+ const value = record2 === void 0 ? void 0 : record2[field];
66974
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
66975
+ }
66976
+ function excerpt(text2) {
66977
+ return text2.length <= RC_PENDING_SUMMARY_EXCERPT_CHARS ? text2 : `${text2.slice(0, RC_PENDING_SUMMARY_EXCERPT_CHARS)}...`;
66978
+ }
66979
+ function payloadEventsOf(body) {
66980
+ const parsed = parseJsonObject(body);
66981
+ const events = parsed === void 0 ? void 0 : parsed.events;
66982
+ if (!Array.isArray(events)) {
66983
+ return [];
66984
+ }
66985
+ const payloads = [];
66986
+ for (const event of events) {
66987
+ if (!isRecord3(event)) {
66988
+ continue;
66989
+ }
66990
+ const payload = event.payload;
66991
+ if (!isRecord3(payload)) {
66992
+ continue;
66993
+ }
66994
+ payloads.push(payload);
66995
+ }
66996
+ return payloads;
66997
+ }
66998
+ function pendingOfControlRequestPayload(payload) {
66999
+ if (payload.type !== "control_request") {
67000
+ return void 0;
67001
+ }
67002
+ const requestId = nonEmptyString(payload, "request_id") ?? nonEmptyString(payload, "uuid");
67003
+ if (requestId === void 0) {
67004
+ return void 0;
67005
+ }
67006
+ const request7 = isRecord3(payload.request) ? payload.request : void 0;
67007
+ const subtype = nonEmptyString(request7, "subtype");
67008
+ const type = subtype ?? "control_request";
67009
+ let summary = "";
67010
+ if (subtype === "can_use_tool") {
67011
+ const toolName = nonEmptyString(request7, "tool_name") ?? "unknown tool";
67012
+ const input2 = request7 === void 0 ? void 0 : request7.input;
67013
+ summary = input2 === void 0 ? toolName : `${toolName} ${excerpt(JSON.stringify(input2))}`;
67014
+ } else if (request7 !== void 0) {
67015
+ summary = excerpt(JSON.stringify(request7));
67016
+ }
67017
+ return { requestId, type, summary };
67018
+ }
67019
+ function answeredRequestIdsOfControlResponsePayload(payload) {
67020
+ if (payload.type !== "control_response") {
67021
+ return [];
67022
+ }
67023
+ const response = isRecord3(payload.response) ? payload.response : void 0;
67024
+ const id = nonEmptyString(response, "request_id") ?? nonEmptyString(payload, "request_id") ?? nonEmptyString(payload, "uuid");
67025
+ return id === void 0 ? [] : [id];
67026
+ }
67027
+ function parseRcRequestBody(kind, body) {
67028
+ if (kind === "heartbeat") {
67029
+ return { controlRequests: [], answeredRequestIds: [], idleSeconds: finiteNumber(parseJsonObject(body), "idle_seconds"), workerStatus: void 0 };
67030
+ }
67031
+ if (kind === "worker-registration") {
67032
+ return { controlRequests: [], answeredRequestIds: [], idleSeconds: void 0, workerStatus: nonEmptyString(parseJsonObject(body), "status") };
67033
+ }
67034
+ const controlRequests = [];
67035
+ const answeredRequestIds = [];
67036
+ for (const payload of payloadEventsOf(body)) {
67037
+ const pending = pendingOfControlRequestPayload(payload);
67038
+ if (pending !== void 0) {
67039
+ controlRequests.push({ requestId: pending.requestId, type: pending.type, summary: pending.summary });
67040
+ continue;
67041
+ }
67042
+ answeredRequestIds.push(...answeredRequestIdsOfControlResponsePayload(payload));
67043
+ }
67044
+ return { controlRequests, answeredRequestIds, idleSeconds: void 0, workerStatus: void 0 };
67045
+ }
67046
+ function createRcSessionTracker(deps) {
67047
+ const entries = /* @__PURE__ */ new Map();
67048
+ const expire = (id) => {
67049
+ entries.delete(id);
67050
+ };
67051
+ const expirePendings = (entry, now) => {
67052
+ for (const [requestId, pending] of entry.pending) {
67053
+ if (now - pending.observedAt >= RC_PENDING_DEADLINE_MS) {
67054
+ entry.pending.delete(requestId);
67055
+ }
67056
+ }
67057
+ };
67058
+ const sweep = () => {
67059
+ for (const [id, entry] of entries) {
67060
+ if (deps.now() - entry.lastSeenAt >= deps.idleMs) {
67061
+ expire(id);
67062
+ continue;
67063
+ }
67064
+ expirePendings(entry, deps.now());
67065
+ }
67066
+ };
67067
+ const timer = setInterval(sweep, deps.idleMs);
67068
+ timer.unref();
67069
+ const birth = (id, facts) => {
67070
+ const record2 = { id, createdAt: deps.now(), lastSeenAt: deps.now(), ...facts, pending: /* @__PURE__ */ new Map(), workerState: void 0, workerIdleSeconds: void 0 };
67071
+ entries.set(id, record2);
67072
+ return record2;
67073
+ };
67074
+ const observeExchange = (request7) => {
67075
+ const method = (request7.method ?? "").toUpperCase();
67076
+ const path41 = new URL(request7.url ?? "/", "http://127.0.0.1").pathname;
67077
+ if (!path41.startsWith(RC_SESSIONS_PATH_PREFIX)) {
67078
+ return void 0;
67079
+ }
67080
+ const tail = path41.slice(RC_SESSIONS_PATH_PREFIX.length);
67081
+ const facts = {
67082
+ authorization: singleHeader(request7.headers, "authorization"),
67083
+ anthropicVersion: singleHeader(request7.headers, "anthropic-version"),
67084
+ anthropicClientPlatform: singleHeader(request7.headers, "anthropic-client-platform")
67085
+ };
67086
+ if (tail === "") {
67087
+ if (method !== "POST") {
67088
+ return void 0;
67089
+ }
67090
+ let accepted2 = false;
67091
+ let buffered2 = 0;
67092
+ let body = "";
67093
+ return {
67094
+ onResponse: (status) => {
67095
+ accepted2 = isSuccessful(status);
67096
+ },
67097
+ onBodyChunk: (chunk) => {
67098
+ if (!accepted2 || buffered2 >= RC_CREATE_RESPONSE_CAP_BYTES) {
67099
+ return;
67100
+ }
67101
+ const text2 = Buffer.from(chunk).toString("utf8");
67102
+ body = body + text2.slice(0, RC_CREATE_RESPONSE_CAP_BYTES - buffered2);
67103
+ buffered2 = body.length;
67104
+ },
67105
+ onEnd: () => {
67106
+ if (!accepted2) {
67107
+ return;
67108
+ }
67109
+ const id2 = sessionCreateId(body);
67110
+ if (id2 === void 0) {
67111
+ return;
67112
+ }
67113
+ birth(id2, facts);
67114
+ }
67115
+ };
67116
+ }
67117
+ const rest = tail.slice(1);
67118
+ const [id] = rest.split("/");
67119
+ if (id?.startsWith(RC_SESSION_ID_PREFIX) !== true) {
67120
+ return void 0;
67121
+ }
67122
+ const entry = entries.get(id) ?? birth(id, facts);
67123
+ entry.lastSeenAt = deps.now();
67124
+ entry.authorization = facts.authorization ?? entry.authorization;
67125
+ entry.anthropicVersion = facts.anthropicVersion ?? entry.anthropicVersion;
67126
+ entry.anthropicClientPlatform = facts.anthropicClientPlatform ?? entry.anthropicClientPlatform;
67127
+ const bodyKind = method === "POST" && rest === `${id}/worker/events` ? "worker-events" : method === "POST" && rest === `${id}/events` ? "client-events" : method === "POST" && rest === `${id}/worker/heartbeat` ? "heartbeat" : method === "PUT" && rest === `${id}/worker` ? "worker-registration" : void 0;
67128
+ let chunks = [];
67129
+ let buffered = 0;
67130
+ let oversized = false;
67131
+ let requestEnded = false;
67132
+ let accepted;
67133
+ let filed = false;
67134
+ const file2 = () => {
67135
+ if (filed || accepted !== true || !requestEnded || bodyKind === void 0) {
67136
+ return;
67137
+ }
67138
+ filed = true;
67139
+ const factsOfBody = oversized ? void 0 : parseRcRequestBody(bodyKind, Buffer.concat(chunks).toString("utf8"));
67140
+ chunks = [];
67141
+ const entryNow = entries.get(id);
67142
+ if (entryNow === void 0 || factsOfBody === void 0) {
67143
+ return;
67144
+ }
67145
+ const now = deps.now();
67146
+ for (const controlRequest of factsOfBody.controlRequests) {
67147
+ entryNow.pending.set(controlRequest.requestId, { sessionId: id, ...controlRequest, observedAt: now });
67148
+ }
67149
+ for (const requestId of factsOfBody.answeredRequestIds) {
67150
+ entryNow.pending.delete(requestId);
67151
+ }
67152
+ if (factsOfBody.idleSeconds !== void 0) {
67153
+ entryNow.workerIdleSeconds = { value: factsOfBody.idleSeconds, observedAt: now };
67154
+ }
67155
+ if (factsOfBody.workerStatus !== void 0) {
67156
+ entryNow.workerState = { value: factsOfBody.workerStatus, observedAt: now };
67157
+ }
67158
+ };
67159
+ const archiving = method === "POST" && rest === `${id}/archive`;
67160
+ return {
67161
+ ...bodyKind === void 0 ? {} : {
67162
+ onRequestChunk: (chunk) => {
67163
+ if (oversized) {
67164
+ return;
67165
+ }
67166
+ chunks.push(Buffer.from(chunk));
67167
+ buffered += chunk.length;
67168
+ if (buffered > RC_REQUEST_PARSE_CAP_BYTES) {
67169
+ oversized = true;
67170
+ chunks = [];
67171
+ }
67172
+ },
67173
+ onRequestEnd: () => {
67174
+ requestEnded = true;
67175
+ file2();
67176
+ }
67177
+ },
67178
+ onResponse: (status, headers) => {
67179
+ if (singleHeader(headers, CONFLICT_REASON_HEADER) !== void 0 || archiving && isSuccessful(status)) {
67180
+ expire(id);
67181
+ return;
67182
+ }
67183
+ accepted = isSuccessful(status);
67184
+ file2();
67185
+ },
67186
+ onBodyChunk: () => {
67187
+ },
67188
+ onEnd: () => {
67189
+ }
67190
+ };
67191
+ };
67192
+ const summaryOf = ({ id, createdAt, lastSeenAt }) => ({ id, createdAt, lastSeenAt });
67193
+ const pendingSummaryOf = ({ sessionId, requestId, type, summary, observedAt: observedAt2 }) => ({ sessionId, requestId, type, summary, observedAt: observedAt2 });
67194
+ const sortedEntries = () => [...entries.values()].sort((left, right) => left.createdAt - right.createdAt || (left.id < right.id ? -1 : 1));
67195
+ const pendingSorted = (entry) => [...entry.pending.values()].sort((left, right) => left.observedAt - right.observedAt || (left.requestId < right.requestId ? -1 : 1)).map(pendingSummaryOf);
67196
+ return {
67197
+ observeExchange,
67198
+ list: () => {
67199
+ sweep();
67200
+ return sortedEntries().map(summaryOf);
67201
+ },
67202
+ statusOf: (sessionId) => {
67203
+ sweep();
67204
+ return sortedEntries().filter((entry) => sessionId === void 0 || entry.id === sessionId).map((entry) => ({ ...summaryOf(entry), workerState: entry.workerState, workerIdleSeconds: entry.workerIdleSeconds, pending: pendingSorted(entry) }));
67205
+ },
67206
+ pendingOf: (sessionId) => {
67207
+ sweep();
67208
+ return sortedEntries().filter((entry) => sessionId === void 0 || entry.id === sessionId).flatMap((entry) => pendingSorted(entry));
67209
+ },
67210
+ credentialOf: (sessionId) => {
67211
+ const entry = entries.get(sessionId);
67212
+ return entry === void 0 ? void 0 : { authorization: entry.authorization, anthropicVersion: entry.anthropicVersion, anthropicClientPlatform: entry.anthropicClientPlatform };
67213
+ },
67214
+ completePending: (sessionId, requestId) => {
67215
+ entries.get(sessionId)?.pending.delete(requestId);
67216
+ },
67217
+ close: () => {
67218
+ clearInterval(timer);
67219
+ }
67220
+ };
67221
+ }
67222
+ function observingRoutedRoute(route, tracker) {
67223
+ return {
67224
+ ...route,
67225
+ serve: async (request7, response) => {
67226
+ const observed = tracker.observeExchange({ method: request7.method, url: request7.url, headers: request7.headers });
67227
+ if (observed?.onRequestChunk !== void 0) {
67228
+ request7.body.on("data", (chunk) => {
67229
+ observed.onRequestChunk?.(chunk);
67230
+ });
67231
+ request7.body.on("end", () => {
67232
+ observed.onRequestEnd?.();
67233
+ });
67234
+ }
67235
+ await route.serve(request7, observed === void 0 ? response : teeRoutedResponse(response, observed));
67236
+ }
67237
+ };
67238
+ }
67239
+ function teeRoutedResponse(response, observer) {
67240
+ return {
67241
+ get headersSent() {
67242
+ return response.headersSent;
67243
+ },
67244
+ start: (status, headers) => {
67245
+ observer.onResponse(status, headers);
67246
+ response.start(status, headers);
67247
+ },
67248
+ flush: () => {
67249
+ response.flush();
67250
+ },
67251
+ write: async (chunk) => {
67252
+ observer.onBodyChunk(typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk);
67253
+ await response.write(chunk);
67254
+ },
67255
+ end: () => {
67256
+ response.end();
67257
+ observer.onEnd();
67258
+ },
67259
+ destroy: () => {
67260
+ response.destroy();
67261
+ observer.onEnd();
67262
+ }
67263
+ };
67264
+ }
67265
+ function buildRcUserMessagePayload(uuid3, sessionId, text2) {
67266
+ return {
67267
+ type: "user",
67268
+ uuid: uuid3,
67269
+ session_id: sessionId,
67270
+ parent_tool_use_id: null,
67271
+ message: { role: "user", content: text2 }
67272
+ };
67273
+ }
67274
+ function buildRcEventWriteBody(payload) {
67275
+ return { events: [{ payload }] };
67276
+ }
67277
+ function sequenceNumsOf(body) {
67278
+ let parsed;
67279
+ try {
67280
+ parsed = JSON.parse(body);
67281
+ } catch {
67282
+ return void 0;
67283
+ }
67284
+ if (typeof parsed !== "object" || parsed === null || !("results" in parsed) || !Array.isArray(parsed.results)) {
67285
+ return void 0;
67286
+ }
67287
+ const sequenceNums = [];
67288
+ const results = parsed.results;
67289
+ for (const result of results) {
67290
+ if (typeof result !== "object" || result === null || !("sequence_num" in result)) {
67291
+ return void 0;
67292
+ }
67293
+ const sequenceNum = result.sequence_num;
67294
+ if (typeof sequenceNum !== "number") {
67295
+ return void 0;
67296
+ }
67297
+ sequenceNums.push(sequenceNum);
67298
+ }
67299
+ return sequenceNums.length === 0 ? void 0 : sequenceNums;
67300
+ }
67301
+ function rcEventWriteResultFromAnswer(answer) {
67302
+ if (!isSuccessful(answer.status)) {
67303
+ if (answer.status === HTTP_STATUS.unauthorized) {
67304
+ 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}` };
67305
+ }
67306
+ return { ok: false, message: `the API answered HTTP ${String(answer.status)} to the injected event: ${answer.body}` };
67307
+ }
67308
+ const sequenceNums = sequenceNumsOf(answer.body);
67309
+ if (sequenceNums === void 0) {
67310
+ 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}` };
67311
+ }
67312
+ return { ok: true, sequenceNums };
67313
+ }
67314
+ function rcWriteHeaders(credential) {
67315
+ const headers = { "content-type": "application/json" };
67316
+ if (credential.authorization !== void 0) {
67317
+ headers.authorization = credential.authorization;
67318
+ }
67319
+ if (credential.anthropicVersion !== void 0) {
67320
+ headers["anthropic-version"] = credential.anthropicVersion;
67321
+ }
67322
+ if (credential.anthropicClientPlatform !== void 0) {
67323
+ headers["anthropic-client-platform"] = credential.anthropicClientPlatform;
67324
+ }
67325
+ return headers;
67326
+ }
67327
+ async function injectRcUserMessage(deps, sessionId, text2) {
67328
+ const credential = deps.credentialOf(sessionId);
67329
+ if (credential === void 0) {
67330
+ 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)` };
67331
+ }
67332
+ const body = JSON.stringify(buildRcEventWriteBody(buildRcUserMessagePayload(deps.newUuid(), sessionId, text2)));
67333
+ let answer;
67334
+ try {
67335
+ answer = await deps.dial.writeEvents(sessionId, rcWriteHeaders(credential), body);
67336
+ } catch (error62) {
67337
+ return { ok: false, message: `the door could not reach the API host to inject into session ${sessionId}: ${error62 instanceof Error ? error62.message : String(error62)}` };
67338
+ }
67339
+ return rcEventWriteResultFromAnswer(answer);
67340
+ }
67341
+ function buildRcControlResponsePayload(requestId, decision) {
67342
+ const result = decision.approve ? { behavior: "allow" } : { behavior: "deny", message: decision.message ?? "" };
67343
+ return { type: "control_response", response: { subtype: "success", request_id: requestId, response: result } };
67344
+ }
67345
+ async function answerRcControlRequest(deps, sessionId, requestId, decision) {
67346
+ const credential = deps.credentialOf(sessionId);
67347
+ if (credential === void 0) {
67348
+ 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)` };
67349
+ }
67350
+ if (!deps.pendingOf(sessionId).some((pending) => pending.requestId === requestId)) {
67351
+ return { ok: false, message: `the front door has not observed control request ${requestId} pending on session ${sessionId}: it was answered already (by this door or by an attached client), it passed its answer deadline (the protocol's permission round-trip bound), or it never passed through this door` };
67352
+ }
67353
+ const body = JSON.stringify(buildRcEventWriteBody(buildRcControlResponsePayload(requestId, decision)));
67354
+ let answer;
67355
+ try {
67356
+ answer = await deps.dial.writeEvents(sessionId, rcWriteHeaders(credential), body);
67357
+ } catch (error62) {
67358
+ return { ok: false, message: `the door could not reach the API host to answer on session ${sessionId}: ${error62 instanceof Error ? error62.message : String(error62)}` };
67359
+ }
67360
+ const result = rcEventWriteResultFromAnswer(answer);
67361
+ if (result.ok) {
67362
+ deps.completePending(sessionId, requestId);
67363
+ }
67364
+ return result;
66536
67365
  }
66537
67366
 
66538
67367
  // src/usage/providerQuota.ts
@@ -66826,13 +67655,21 @@ function headroomSocketTarget(fsPort, trust, paths) {
66826
67655
  const socketPath = readHeadroomState(fsPort, paths.headroomStateFile)?.socketPath;
66827
67656
  return socketPath === void 0 ? void 0 : verifyHeadroomSocket(socketPath, trust);
66828
67657
  }
67658
+ function rcObservingResolver(resolve, tracker) {
67659
+ return async (request7) => {
67660
+ const resolution = await resolve(request7);
67661
+ return resolution.ok ? { ok: true, route: observingRoutedRoute(resolution.route, tracker) } : resolution;
67662
+ };
67663
+ }
66829
67664
  function realFrontDoorSupervisorPorts(paths) {
66830
67665
  const log = (line) => {
66831
67666
  appendLog(paths, `frontdoor ${String(process.pid)}: ${line}`);
66832
67667
  };
66833
67668
  let directPort = 0;
66834
67669
  const codexPorts = createCodexRoutePorts(log);
66835
- const resolveRoute = createProviderRouteResolver({ fs: realFsPort, providersDir: paths.providersDir, codexPorts, directPort: () => directPort });
67670
+ const rcTracker = createRcSessionTracker({ now: () => Date.now(), idleMs: RC_IDLE_EXPIRY_MS });
67671
+ const rcControlToken = (0, import_node_crypto11.randomUUID)();
67672
+ const resolveRoute = rcObservingResolver(createProviderRouteResolver({ fs: realFsPort, providersDir: paths.providersDir, codexPorts, directPort: () => directPort }), rcTracker);
66836
67673
  const isLiveToken = (token) => isLiveCapability(token, liveSessionTokens(realFarmFs, paths.frontdoorSessionsDir));
66837
67674
  const usageStore = createUsageStore({
66838
67675
  fs: realFarmFs,
@@ -66884,15 +67721,28 @@ function realFrontDoorSupervisorPorts(paths) {
66884
67721
  isRunning: realIsProcessRunning,
66885
67722
  startProviderListener: async (preferredPort) => {
66886
67723
  const authority = loadCa();
67724
+ const rcDial = realRcEventDial();
67725
+ const rcInject = async (sessionId, text2) => await injectRcUserMessage({ credentialOf: rcTracker.credentialOf, dial: rcDial, newUuid: import_node_crypto11.randomUUID }, sessionId, text2);
67726
+ const rcAnswer = async (sessionId, requestId, decision) => await answerRcControlRequest({ credentialOf: rcTracker.credentialOf, pendingOf: (id) => rcTracker.pendingOf(id), completePending: rcTracker.completePending, dial: rcDial }, sessionId, requestId, decision);
67727
+ realFarmFs.mkdirp(paths.frontdoorDir);
67728
+ realFarmFs.writeFilePrivate(paths.frontdoorControlTokenFile, `${rcControlToken}
67729
+ `);
66887
67730
  const server = createFrontDoorServer(
66888
- async (request6) => {
66889
- await serveRouted(request6, pipelines.clientFacing);
67731
+ async (request7) => {
67732
+ await serveRouted(request7, pipelines.clientFacing);
66890
67733
  },
66891
67734
  log,
66892
- mintLeaf(authority, LOOPBACK_LEAF_NAMES, /* @__PURE__ */ new Date())
67735
+ mintLeaf(authority, LOOPBACK_LEAF_NAMES, /* @__PURE__ */ new Date()),
67736
+ createRcControlHandler({ expectedToken: rcControlToken, list: rcTracker.list, statusOf: rcTracker.statusOf, pendingOf: rcTracker.pendingOf, inject: rcInject, answer: rcAnswer })
66893
67737
  );
66894
67738
  const handle = await listenFrontDoor(server, { ...preferredPort === void 0 ? {} : { preferredPort }, ca: authority.certPem, onError: onListenerError("provider") });
66895
- return { port: handle.port, close: handle.close };
67739
+ return {
67740
+ port: handle.port,
67741
+ close: async () => {
67742
+ realFarmFs.removeRecursive(paths.frontdoorControlTokenFile);
67743
+ await handle.close();
67744
+ }
67745
+ };
66896
67746
  },
66897
67747
  startConnectListener: async (preferredPort) => {
66898
67748
  const transparentPort = process.env.AGENT_SHIM_TRANSPARENT_SURFACE === void 0 ? void 0 : Number(process.env.AGENT_SHIM_TRANSPARENT_SURFACE);
@@ -66910,16 +67760,16 @@ function realFrontDoorSupervisorPorts(paths) {
66910
67760
  interceptHosts: CONNECT_INTERCEPT_HOSTS,
66911
67761
  tapHosts: CONNECT_TAP_HOSTS,
66912
67762
  routedHost: CONNECT_INTERCEPT_HOST,
66913
- serveRouted: (request6, response) => {
67763
+ serveRouted: (request7, response) => {
66914
67764
  const abort = new AbortController();
66915
67765
  response.on("close", () => {
66916
67766
  if (!response.writableFinished) {
66917
67767
  abort.abort();
66918
67768
  }
66919
67769
  });
66920
- void serveRouted({ method: request6.method ?? "GET", url: request6.url ?? "/", headers: request6.headers, body: request6, signal: abort.signal, response }, pipelines.clientFacing).catch(
67770
+ void serveRouted({ method: request7.method ?? "GET", url: request7.url ?? "/", headers: request7.headers, body: request7, signal: abort.signal, response }, pipelines.clientFacing).catch(
66921
67771
  (error62) => {
66922
- log(`connect request ${request6.method ?? "?"} ${request6.url ?? "?"} failed: ${error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62)}`);
67772
+ log(`connect request ${request7.method ?? "?"} ${request7.url ?? "?"} failed: ${error62 instanceof Error ? `${error62.name}: ${error62.message}` : String(error62)}`);
66923
67773
  if (!response.headersSent) {
66924
67774
  response.writeHead(HTTP_STATUS.badGateway, { "Content-Type": "application/json" });
66925
67775
  response.end(JSON.stringify({ type: "error", error: { type: "api_error", message: "internal error in the agent-shim front door" } }));
@@ -66942,8 +67792,8 @@ function realFrontDoorSupervisorPorts(paths) {
66942
67792
  return { port: server.port, close: server.close };
66943
67793
  },
66944
67794
  startDirectListener: async (preferredPort) => {
66945
- const server = createFrontDoorServer(async (request6) => {
66946
- await serveRouted(request6, pipelines.direct);
67795
+ const server = createFrontDoorServer(async (request7) => {
67796
+ await serveRouted(request7, pipelines.direct);
66947
67797
  }, log);
66948
67798
  const handle = await listenFrontDoor(server, {
66949
67799
  ...preferredPort === void 0 ? {} : { preferredPort },
@@ -67006,6 +67856,56 @@ function formatFrontDoorStatus(status, caCertPath) {
67006
67856
  lines.push(`daemon log: ${status.logPath}${status.logExists ? "" : " (not created yet)"}`);
67007
67857
  return lines;
67008
67858
  }
67859
+ function formatRcSessionList(sessions) {
67860
+ if (sessions.length === 0) {
67861
+ return ["no Remote Control sessions observed"];
67862
+ }
67863
+ return sessions.map((session) => `${session.id} created ${new Date(session.createdAt).toISOString()} last seen ${new Date(session.lastSeenAt).toISOString()}`);
67864
+ }
67865
+ function formatRcSessionStatus(statuses) {
67866
+ if (statuses.length === 0) {
67867
+ return ["no Remote Control sessions observed"];
67868
+ }
67869
+ const lines = [];
67870
+ for (const status of statuses) {
67871
+ lines.push(`${status.id} created ${new Date(status.createdAt).toISOString()} last seen ${new Date(status.lastSeenAt).toISOString()}`);
67872
+ const worker = status.workerState === void 0 && status.workerIdleSeconds === void 0 ? "not observed" : [
67873
+ status.workerState === void 0 ? "state unknown" : `state ${status.workerState.value} since ${new Date(status.workerState.observedAt).toISOString()}`,
67874
+ status.workerIdleSeconds === void 0 ? "idle unknown" : `idle ${String(status.workerIdleSeconds.value)} s as of ${new Date(status.workerIdleSeconds.observedAt).toISOString()}`
67875
+ ].join(", ");
67876
+ lines.push(` worker: ${worker}`);
67877
+ if (status.pending.length === 0) {
67878
+ lines.push(" pending: none");
67879
+ } else {
67880
+ lines.push(" pending:");
67881
+ for (const pending of status.pending) {
67882
+ lines.push(...formatRcPendingList([pending]).map((line) => ` ${line}`));
67883
+ }
67884
+ }
67885
+ }
67886
+ return lines;
67887
+ }
67888
+ function formatRcPendingList(pending) {
67889
+ if (pending.length === 0) {
67890
+ return ["no pending control requests observed"];
67891
+ }
67892
+ return pending.map((request7) => `${request7.sessionId} ${request7.requestId} ${request7.type}${request7.summary === "" ? "" : ` ${request7.summary}`} observed ${new Date(request7.observedAt).toISOString()}`);
67893
+ }
67894
+ function frontDoorRcControlFromState(fsPort, paths) {
67895
+ const state = readFrontDoorState(fsPort, paths.frontdoorStateFile);
67896
+ if (state?.port === void 0) {
67897
+ 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");
67898
+ }
67899
+ const ca = fsPort.readFileUtf8(paths.frontdoorCaCertFile);
67900
+ if (ca === void 0) {
67901
+ throw new Error(`the front door's CA certificate is missing at ${paths.frontdoorCaCertFile}, so its control listener cannot be authenticated`);
67902
+ }
67903
+ const token = fsPort.readFileUtf8(paths.frontdoorControlTokenFile)?.trim();
67904
+ if (token === void 0 || token === "") {
67905
+ throw new Error(`the serving front door's control token is missing at ${paths.frontdoorControlTokenFile}`);
67906
+ }
67907
+ return frontDoorRcControl(realRcControlTransport(state.port, ca), token);
67908
+ }
67009
67909
  function registerFrontDoorCommand(program2, deps) {
67010
67910
  const { paths } = deps;
67011
67911
  const frontdoor = withExamples(program2.command("frontdoor").description("Inspect the front-door daemon that routes every agent-shim session."), [
@@ -67024,6 +67924,86 @@ function registerFrontDoorCommand(program2, deps) {
67024
67924
  }),
67025
67925
  ["agent-shim frontdoor status", "agent-shim frontdoor status --json"]
67026
67926
  );
67927
+ const rc = withExamples(
67928
+ frontdoor.command("rc").description("Observe the Remote Control sessions passing through the front door, send a prompt into one, and answer its pending control requests."),
67929
+ ["agent-shim frontdoor rc list", "agent-shim frontdoor rc pending"]
67930
+ );
67931
+ withExamples(
67932
+ 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) => {
67933
+ const sessions = await frontDoorRcControlFromState(realFarmFs, paths).listSessions();
67934
+ if (options.json === true) {
67935
+ printJson({ sessions });
67936
+ return;
67937
+ }
67938
+ for (const line of formatRcSessionList(sessions)) {
67939
+ console.log(line);
67940
+ }
67941
+ }),
67942
+ ["agent-shim frontdoor rc list", "agent-shim frontdoor rc list --json"]
67943
+ );
67944
+ withExamples(
67945
+ rc.command("status").description("Report each observed Remote Control session's worker state and idle from its latest observed heartbeat and registration, with its pending control requests. Read-only.").argument("[session]", "One cse_ session id, as `frontdoor rc list` shows it; every observed session when omitted.").option("--json", "Print the statuses as JSON.").action(async (session, options) => {
67946
+ const statuses = await frontDoorRcControlFromState(realFarmFs, paths).statusOf(session);
67947
+ if (options.json === true) {
67948
+ printJson({ statuses });
67949
+ return;
67950
+ }
67951
+ for (const line of formatRcSessionStatus(statuses)) {
67952
+ console.log(line);
67953
+ }
67954
+ }),
67955
+ ["agent-shim frontdoor rc status", "agent-shim frontdoor rc status cse_00000000-0000-4000-8000-000000000000 --json"]
67956
+ );
67957
+ withExamples(
67958
+ rc.command("pending").description("List the control requests (tool and plan approvals above all) the front door has observed and that are still awaiting an answer. Read-only.").argument("[session]", "One cse_ session id, as `frontdoor rc list` shows it; every observed session when omitted.").option("--json", "Print the pending requests as JSON.").action(async (session, options) => {
67959
+ const pending = await frontDoorRcControlFromState(realFarmFs, paths).pendingOf(session);
67960
+ if (options.json === true) {
67961
+ printJson({ pending });
67962
+ return;
67963
+ }
67964
+ for (const line of formatRcPendingList(pending)) {
67965
+ console.log(line);
67966
+ }
67967
+ }),
67968
+ ["agent-shim frontdoor rc pending", "agent-shim frontdoor rc pending --json"]
67969
+ );
67970
+ withExamples(
67971
+ 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) => {
67972
+ const result = await frontDoorRcControlFromState(realFarmFs, paths).sendPrompt(options.session, options.text);
67973
+ if (!result.ok) {
67974
+ throw new Error(result.message);
67975
+ }
67976
+ if (options.json === true) {
67977
+ printJson({ session: options.session, sequenceNums: result.sequenceNums });
67978
+ return;
67979
+ }
67980
+ console.log(`sent to ${options.session}: sequence_num ${result.sequenceNums.join(", ")}`);
67981
+ }),
67982
+ ['agent-shim frontdoor rc send --session cse_00000000-0000-4000-8000-000000000000 --text "run the tests"']
67983
+ );
67984
+ withExamples(
67985
+ rc.command("answer").description("Answer one pending control request on an observed session, approving or denying it as an attached client's approval would.").requiredOption("--session <id>", "The cse_ session id, as `frontdoor rc list` shows it.").requiredOption("--request <id>", "The control request's id, as `frontdoor rc pending` shows it.").option("--approve", "Approve the request.").option("--deny", "Deny the request.").option("--text <text>", "The denial message the worker sees; applies to --deny only.").option("--json", "Print the delivery result as JSON.").action(async (options) => {
67986
+ if (options.approve === options.deny) {
67987
+ throw new UsageError("answer exactly one way: pass --approve or --deny, not both and not neither");
67988
+ }
67989
+ if (options.approve === true && options.text !== void 0) {
67990
+ throw new UsageError("--text is the denial message; an approval carries no text (the protocol's allow result has no message field)");
67991
+ }
67992
+ const result = await frontDoorRcControlFromState(realFarmFs, paths).answerRequest(options.session, options.request, { approve: options.approve === true, message: options.deny === true ? options.text : void 0 });
67993
+ if (!result.ok) {
67994
+ throw new Error(result.message);
67995
+ }
67996
+ if (options.json === true) {
67997
+ printJson({ session: options.session, request: options.request, sequenceNums: result.sequenceNums });
67998
+ return;
67999
+ }
68000
+ console.log(`${options.approve === true ? "approved" : "denied"} ${options.request} on ${options.session}: sequence_num ${result.sequenceNums.join(", ")}`);
68001
+ }),
68002
+ [
68003
+ "agent-shim frontdoor rc answer --session cse_00000000-0000-4000-8000-000000000000 --request req_00000000-0000-4000-8000-000000000000 --approve",
68004
+ 'agent-shim frontdoor rc answer --session cse_00000000-0000-4000-8000-000000000000 --request req_00000000-0000-4000-8000-000000000000 --deny --text "not today"'
68005
+ ]
68006
+ );
67027
68007
  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
68008
  const idleShutdownMinutes = readGlobalConfig(paths)?.frontdoor?.idleShutdownMinutes ?? FRONTDOOR_DEFAULT_IDLE_SHUTDOWN_MINUTES;
67029
68009
  process.on("SIGTERM", () => {