@@ -13168,8 +13168,6 @@ var require_util = __commonJS({
13168
13168
return tree.lookup(value) ?? value.toString("latin1").toLowerCase();
13169
13169
}
13170
13170
function parseHeaders(headers, obj) {
13171
- if (!Array.isArray(headers))
13172
- return headers;
13173
13171
if (obj === void 0)
13174
13172
obj = {};
13175
13173
for (let i = 0; i < headers.length; i += 2) {
@@ -14962,9 +14960,9 @@ var require_data_url = __commonJS({
14962
14960
var assert = require("node:assert");
14963
14961
var encoder = new TextEncoder();
14964
14962
var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/;
14965
- var HTTP_WHITESPACE_REGEX = /[\u000A| \u000D| \u0009| \u0020]/;
14963
+ var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/;
14966
14964
var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g;
14967
- var HTTP_QUOTED_STRING_TOKENS = /[\u0009| \u0020-\u007E| \u0080-\u00FF]/;
14965
+ var HTTP_QUOTED_STRING_TOKENS = /[\u0009\u0020-\u007E\u0080-\u00FF]/;
14968
14966
function dataURLProcessor(dataURL) {
14969
14967
assert(dataURL.protocol === "data:");
14970
14968
let input = URLSerializer(dataURL, true);
@@ -15726,9 +15724,12 @@ var require_util2 = __commonJS({
15726
15724
var assert = require("node:assert");
15727
15725
var { isUint8Array } = require("node:util/types");
15728
15726
var { webidl } = require_webidl();
15727
+ var supportedHashes = [];
15729
15728
var crypto4;
15730
15729
try {
15731
15730
crypto4 = require("node:crypto");
15731
+ const possibleRelevantHashes = ["sha256", "sha384", "sha512"];
15732
+ supportedHashes = crypto4.getHashes().filter((hash) => possibleRelevantHashes.includes(hash));
15732
15733
} catch {
15733
15734
}
15734
15735
function responseURL(response) {
@@ -16009,45 +16010,37 @@ var require_util2 = __commonJS({
16009
16010
if (parsedMetadata.length === 0) {
16010
16011
return true;
16011
16012
}
16012
- const list = parsedMetadata.sort((c, d) => d.algo.localeCompare(c.algo));
16013
- const strongest = list[0].algo;
16014
- const metadata = list.filter((item) => item.algo === strongest);
16013
+ const strongest = getStrongestMetadata(parsedMetadata);
16014
+ const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest);
16015
16015
for (const item of metadata) {
16016
16016
const algorithm = item.algo;
16017
- let expectedValue = item.hash;
16018
- if (expectedValue.endsWith("==")) {
16019
- expectedValue = expectedValue.slice(0, -2);
16020
- }
16017
+ const expectedValue = item.hash;
16021
16018
let actualValue = crypto4.createHash(algorithm).update(bytes).digest("base64");
16022
- if (actualValue.endsWith("==")) {
16023
- actualValue = actualValue.slice(0, -2);
16024
- }
16025
- if (actualValue === expectedValue) {
16026
- return true;
16027
- }
16028
- let actualBase64URL = crypto4.createHash(algorithm).update(bytes).digest("base64url");
16029
- if (actualBase64URL.endsWith("==")) {
16030
- actualBase64URL = actualBase64URL.slice(0, -2);
16019
+ if (actualValue[actualValue.length - 1] === "=") {
16020
+ if (actualValue[actualValue.length - 2] === "=") {
16021
+ actualValue = actualValue.slice(0, -2);
16022
+ } else {
16023
+ actualValue = actualValue.slice(0, -1);
16024
+ }
16031
16025
}
16032
- if (actualBase64URL === expectedValue) {
16026
+ if (compareBase64Mixed(actualValue, expectedValue) ) {
16033
16027
return true;
16034
16028
}
16035
16029
}
16036
16030
return false;
16037
16031
}
16038
- var parseHashWithOptions = /(?<algo>sha256|sha384|sha512)-(?<hash>[A-Za-z0-9+/]+={0,2}(?= \s|$)) ( +[!-~]*)?/i;
16032
+ var parseHashWithOptions = /(?<algo>sha256|sha384|sha512)-(( ?<hash>[A-Za-z0-9+/]+|[A-Za-z0-9_-]+) ={0,2}(?: \s|$)( +[!-~]*)? )?/i;
16039
16033
function parseMetadata(metadata) {
16040
16034
const result = [];
16041
16035
let empty = true;
16042
- const supportedHashes = crypto4.getHashes();
16043
16036
for (const token of metadata.split(" ")) {
16044
16037
empty = false;
16045
16038
const parsedToken = parseHashWithOptions.exec(token);
16046
- if (parsedToken === null || parsedToken.groups === void 0) {
16039
+ if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0 ) {
16047
16040
continue;
16048
16041
}
16049
- const algorithm = parsedToken.groups.algo;
16050
- if (supportedHashes.includes(algorithm.toLowerCase() )) {
16042
+ const algorithm = parsedToken.groups.algo.toLowerCase() ;
16043
+ if (supportedHashes.includes(algorithm)) {
16051
16044
result.push(parsedToken.groups);
16052
16045
}
16053
16046
}
@@ -16056,6 +16049,51 @@ var require_util2 = __commonJS({
16056
16049
}
16057
16050
return result;
16058
16051
}
16052
+ function getStrongestMetadata(metadataList) {
16053
+ let algorithm = metadataList[0].algo;
16054
+ if (algorithm[3] === "5") {
16055
+ return algorithm;
16056
+ }
16057
+ for (let i = 1; i < metadataList.length; ++i) {
16058
+ const metadata = metadataList[i];
16059
+ if (metadata.algo[3] === "5") {
16060
+ algorithm = "sha512";
16061
+ break;
16062
+ } else if (algorithm[3] === "3") {
16063
+ continue;
16064
+ } else if (metadata.algo[3] === "3") {
16065
+ algorithm = "sha384";
16066
+ }
16067
+ }
16068
+ return algorithm;
16069
+ }
16070
+ function filterMetadataListByAlgorithm(metadataList, algorithm) {
16071
+ if (metadataList.length === 1) {
16072
+ return metadataList;
16073
+ }
16074
+ let pos = 0;
16075
+ for (let i = 0; i < metadataList.length; ++i) {
16076
+ if (metadataList[i].algo === algorithm) {
16077
+ metadataList[pos++] = metadataList[i];
16078
+ }
16079
+ }
16080
+ metadataList.length = pos;
16081
+ return metadataList;
16082
+ }
16083
+ function compareBase64Mixed(actualValue, expectedValue) {
16084
+ if (actualValue.length !== expectedValue.length) {
16085
+ return false;
16086
+ }
16087
+ for (let i = 0; i < actualValue.length; ++i) {
16088
+ if (actualValue[i] !== expectedValue[i]) {
16089
+ if (actualValue[i] === "+" && expectedValue[i] === "-" || actualValue[i] === "/" && expectedValue[i] === "_") {
16090
+ continue;
16091
+ }
16092
+ return false;
16093
+ }
16094
+ }
16095
+ return true;
16096
+ }
16059
16097
function tryUpgradeRequestToAPotentiallyTrustworthyURL(request2) {
16060
16098
}
16061
16099
function sameOrigin(A, B) {
@@ -18499,6 +18537,14 @@ var require_client_h2 = __commonJS({
18499
18537
HTTP2_HEADER_STATUS
18500
18538
}
18501
18539
} = http2;
18540
+ function parseH2Headers(headers) {
18541
+ headers = Object.entries(headers).flat(2);
18542
+ const result = [];
18543
+ for (const header of headers) {
18544
+ result.push(Buffer.from(header));
18545
+ }
18546
+ return result;
18547
+ }
18502
18548
async function connectH2(client, socket) {
18503
18549
client[kSocket] = socket;
18504
18550
if (!h2ExperimentalWarned) {
@@ -18734,7 +18780,13 @@ var require_client_h2 = __commonJS({
18734
18780
stream.once("response", (headers2) => {
18735
18781
const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
18736
18782
request2.onResponseStarted();
18737
- if (request2.onHeaders(Number(statusCode), realHeaders, stream.resume.bind(stream), "") === false) {
18783
+ if (request2.aborted || request2.completed) {
18784
+ const err = new RequestAbortedError();
18785
+ errorRequest(client, request2, err);
18786
+ util.destroy(stream, err);
18787
+ return;
18788
+ }
18789
+ if (request2.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) {
18738
18790
stream.pause();
18739
18791
}
18740
18792
stream.on("data", (chunk) => {
@@ -19054,9 +19106,9 @@ var require_redirect_handler = __commonJS({
19054
19106
if (removeContent && util.headerNameToString(header).startsWith("content-")) {
19055
19107
return true;
19056
19108
}
19057
- if (unknownOrigin && (header.length === 13 || header.length === 6)) {
19109
+ if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19 )) {
19058
19110
const name = util.headerNameToString(header);
19059
- return name === "authorization" || name === "cookie";
19111
+ return name === "authorization" || name === "cookie" || name === "proxy-authorization" ;
19060
19112
}
19061
19113
return false;
19062
19114
}
@@ -22379,6 +22431,8 @@ var require_pending_interceptors_formatter = __commonJS({
22379
22431
"use strict";
22380
22432
var { Transform } = require("node:stream");
22381
22433
var { Console } = require("node:console");
22434
+ var PERSISTENT = process.versions.icu ? "\u2705" : "Y ";
22435
+ var NOT_PERSISTENT = process.versions.icu ? "\u274C" : "N ";
22382
22436
module2.exports = class PendingInterceptorsFormatter {
22383
22437
constructor({ disableColors } = {}) {
22384
22438
this.transform = new Transform({
@@ -22400,7 +22454,7 @@ var require_pending_interceptors_formatter = __commonJS({
22400
22454
Origin: origin,
22401
22455
Path: path,
22402
22456
"Status code": statusCode,
22403
- Persistent: persist ? "\u2705" : "\u274C" ,
22457
+ Persistent: persist ? PERSISTENT : NOT_PERSISTENT ,
22404
22458
Invocations: timesInvoked,
22405
22459
Remaining: persist ? Infinity : times - timesInvoked
22406
22460
})
@@ -22670,7 +22724,7 @@ var require_headers = __commonJS({
22670
22724
} = require_util2();
22671
22725
var { webidl } = require_webidl();
22672
22726
var assert = require("node:assert");
22673
- var util = require("util");
22727
+ var util = require("node: util");
22674
22728
var kHeadersMap = Symbol("headers map");
22675
22729
var kHeadersSortedMap = Symbol("headers map sorted");
22676
22730
function isHTTPWhiteSpaceCharCode(code) {
@@ -25161,24 +25215,6 @@ var require_fetch = __commonJS({
25161
25215
codings = contentEncoding.toLowerCase().split(",").map((x) => x.trim());
25162
25216
}
25163
25217
location = headersList.get("location", true);
25164
- } else {
25165
- const keys = Object.keys(rawHeaders);
25166
- for (let i = 0; i < keys.length; ++i) {
25167
- const key = keys[i];
25168
- const value = rawHeaders[key];
25169
- if (key === "set-cookie") {
25170
- for (let j = 0; j < value.length; ++j) {
25171
- headersList.append(key, value[j], true);
25172
- }
25173
- } else {
25174
- headersList.append(key, value, true);
25175
- }
25176
- }
25177
- const contentEncoding = rawHeaders["content-encoding"];
25178
- if (contentEncoding) {
25179
- codings = contentEncoding.toLowerCase().split(",").map((x) => x.trim()).reverse();
25180
- }
25181
- location = rawHeaders.location;
25182
25218
}
25183
25219
this.body = new Readable({ read: resume });
25184
25220
const decoders = [];
0 commit comments