lifecycleion 0.0.19 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -36
- package/dist/lib/event-emitter.cjs +195 -9
- package/dist/lib/event-emitter.cjs.map +1 -1
- package/dist/lib/event-emitter.js +195 -9
- package/dist/lib/event-emitter.js.map +1 -1
- package/dist/lib/global-event-target.cjs +217 -0
- package/dist/lib/global-event-target.cjs.map +1 -0
- package/dist/lib/global-event-target.d.cts +70 -0
- package/dist/lib/global-event-target.d.ts +70 -0
- package/dist/lib/global-event-target.js +189 -0
- package/dist/lib/global-event-target.js.map +1 -0
- package/dist/lib/http-client/index.cjs +554 -193
- package/dist/lib/http-client/index.cjs.map +1 -1
- package/dist/lib/http-client/index.d.cts +9 -3
- package/dist/lib/http-client/index.d.ts +9 -3
- package/dist/lib/http-client/index.js +554 -193
- package/dist/lib/http-client/index.js.map +1 -1
- package/dist/lib/http-client-mock/index.cjs +71 -24
- package/dist/lib/http-client-mock/index.cjs.map +1 -1
- package/dist/lib/http-client-mock/index.d.cts +50 -2
- package/dist/lib/http-client-mock/index.d.ts +50 -2
- package/dist/lib/http-client-mock/index.js +71 -24
- package/dist/lib/http-client-mock/index.js.map +1 -1
- package/dist/lib/http-client-node/index.cjs +135 -33
- package/dist/lib/http-client-node/index.cjs.map +1 -1
- package/dist/lib/http-client-node/index.d.cts +33 -2
- package/dist/lib/http-client-node/index.d.ts +33 -2
- package/dist/lib/http-client-node/index.js +135 -33
- package/dist/lib/http-client-node/index.js.map +1 -1
- package/dist/lib/http-client-xhr/index.cjs +0 -14
- package/dist/lib/http-client-xhr/index.cjs.map +1 -1
- package/dist/lib/http-client-xhr/index.d.cts +3 -2
- package/dist/lib/http-client-xhr/index.d.ts +3 -2
- package/dist/lib/http-client-xhr/index.js +0 -14
- package/dist/lib/http-client-xhr/index.js.map +1 -1
- package/dist/lib/lifecycle-manager/index.cjs +199 -13
- package/dist/lib/lifecycle-manager/index.cjs.map +1 -1
- package/dist/lib/lifecycle-manager/index.js +199 -13
- package/dist/lib/lifecycle-manager/index.js.map +1 -1
- package/dist/lib/logger/index.cjs +203 -21
- package/dist/lib/logger/index.cjs.map +1 -1
- package/dist/lib/logger/index.d.cts +5 -1
- package/dist/lib/logger/index.d.ts +5 -1
- package/dist/lib/logger/index.js +203 -21
- package/dist/lib/logger/index.js.map +1 -1
- package/dist/lib/lru-cache/index.cjs +195 -9
- package/dist/lib/lru-cache/index.cjs.map +1 -1
- package/dist/lib/lru-cache/index.js +195 -9
- package/dist/lib/lru-cache/index.js.map +1 -1
- package/dist/lib/process-signal-manager.cjs +199 -13
- package/dist/lib/process-signal-manager.cjs.map +1 -1
- package/dist/lib/process-signal-manager.js +199 -13
- package/dist/lib/process-signal-manager.js.map +1 -1
- package/dist/lib/promise-protected-resolver.cjs +195 -9
- package/dist/lib/promise-protected-resolver.cjs.map +1 -1
- package/dist/lib/promise-protected-resolver.js +195 -9
- package/dist/lib/promise-protected-resolver.js.map +1 -1
- package/dist/lib/retry-utils/index.cjs +195 -9
- package/dist/lib/retry-utils/index.cjs.map +1 -1
- package/dist/lib/retry-utils/index.js +195 -9
- package/dist/lib/retry-utils/index.js.map +1 -1
- package/dist/lib/safe-handle-callback.cjs +196 -18
- package/dist/lib/safe-handle-callback.cjs.map +1 -1
- package/dist/lib/safe-handle-callback.d.cts +14 -4
- package/dist/lib/safe-handle-callback.d.ts +14 -4
- package/dist/lib/safe-handle-callback.js +196 -18
- package/dist/lib/safe-handle-callback.js.map +1 -1
- package/dist/lib/single-event-observer.cjs +195 -9
- package/dist/lib/single-event-observer.cjs.map +1 -1
- package/dist/lib/single-event-observer.js +195 -9
- package/dist/lib/single-event-observer.js.map +1 -1
- package/dist/{types-CWw885iO.d.cts → types-BFvpJPMt.d.cts} +72 -11
- package/dist/{types-Mso0dYOS.d.ts → types-BONtIhQ5.d.ts} +72 -11
- package/package.json +31 -12
|
@@ -361,19 +361,63 @@ var CERT_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
|
361
361
|
"ERR_SSL_TLSV13_ALERT_CERTIFICATE_REQUIRED",
|
|
362
362
|
"ERR_SSL_PEER_DID_NOT_RETURN_A_CERTIFICATE",
|
|
363
363
|
"SELF_SIGNED_CERT_IN_CHAIN",
|
|
364
|
-
"UNABLE_TO_GET_ISSUER_CERT_LOCALLY"
|
|
364
|
+
"UNABLE_TO_GET_ISSUER_CERT_LOCALLY",
|
|
365
|
+
"CERT_REVOKED"
|
|
365
366
|
]);
|
|
367
|
+
var CRL_CODE_PATTERN = /(?:^|_)CRLS?(?:_|$)/;
|
|
368
|
+
var TRANSPORT_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
369
|
+
"ENOTFOUND",
|
|
370
|
+
"EAI_AGAIN",
|
|
371
|
+
"ECONNREFUSED",
|
|
372
|
+
"ECONNRESET",
|
|
373
|
+
"ECONNABORTED",
|
|
374
|
+
"ETIMEDOUT",
|
|
375
|
+
"EPIPE",
|
|
376
|
+
"EHOSTUNREACH",
|
|
377
|
+
"EHOSTDOWN",
|
|
378
|
+
"ENETUNREACH",
|
|
379
|
+
"ENETDOWN",
|
|
380
|
+
"EADDRNOTAVAIL"
|
|
381
|
+
]);
|
|
382
|
+
var UNDICI_TRANSPORT_ERROR_PREFIX = "UND_ERR_";
|
|
366
383
|
function isTLSCertificateError(error) {
|
|
367
|
-
|
|
384
|
+
if (isTLSCertificateErrorSelf(error)) {
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
const cause = readMember(error, "cause");
|
|
388
|
+
return isErrorValue(cause) ? isTLSCertificateErrorSelf(cause) : false;
|
|
389
|
+
}
|
|
390
|
+
function isErrorValue(value) {
|
|
391
|
+
try {
|
|
392
|
+
return value instanceof Error;
|
|
393
|
+
} catch {
|
|
394
|
+
return false;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
function isTLSCertificateErrorSelf(error) {
|
|
398
|
+
const rawCode = readMember(error, "code");
|
|
399
|
+
const code = typeof rawCode === "string" ? rawCode : "";
|
|
368
400
|
if (CERT_ERROR_CODES.has(code)) {
|
|
369
401
|
return true;
|
|
370
402
|
}
|
|
403
|
+
if (CRL_CODE_PATTERN.test(code)) {
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
371
406
|
if ((code.startsWith("ERR_TLS_") || code.startsWith("ERR_SSL_")) && code.includes("CERT")) {
|
|
372
407
|
return true;
|
|
373
408
|
}
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
409
|
+
if (TRANSPORT_ERROR_CODES.has(code) || code.startsWith(UNDICI_TRANSPORT_ERROR_PREFIX)) {
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
412
|
+
const message = readMember(error, "message");
|
|
413
|
+
return typeof message === "string" ? /certificate|self signed|unable to verify|altname/i.test(message) : false;
|
|
414
|
+
}
|
|
415
|
+
function readMember(error, key) {
|
|
416
|
+
try {
|
|
417
|
+
return error[key];
|
|
418
|
+
} catch {
|
|
419
|
+
return void 0;
|
|
420
|
+
}
|
|
377
421
|
}
|
|
378
422
|
|
|
379
423
|
// src/lib/http-client/adapters/node-adapter-utils.ts
|
|
@@ -404,20 +448,6 @@ function materializeNodeRequestHeaders(headers) {
|
|
|
404
448
|
|
|
405
449
|
// src/lib/http-client/utils.ts
|
|
406
450
|
var import_qs = __toESM(require("qs"), 1);
|
|
407
|
-
|
|
408
|
-
// src/lib/domain-utils/domain-utils.ts
|
|
409
|
-
var import_tldts = require("tldts");
|
|
410
|
-
|
|
411
|
-
// src/lib/domain-utils/helpers.ts
|
|
412
|
-
var import_tr46 = require("tr46");
|
|
413
|
-
var INTERNAL_PSEUDO_TLDS = Object.freeze(
|
|
414
|
-
/* @__PURE__ */ new Set(["localhost", "local", "test", "internal"])
|
|
415
|
-
);
|
|
416
|
-
|
|
417
|
-
// src/lib/domain-utils/domain-utils.ts
|
|
418
|
-
var import_tldts2 = require("tldts");
|
|
419
|
-
|
|
420
|
-
// src/lib/http-client/utils.ts
|
|
421
451
|
function resolveAbsoluteURL(url, baseURL) {
|
|
422
452
|
if (!url) {
|
|
423
453
|
return url;
|
|
@@ -507,6 +537,9 @@ var NodeAdapter = class {
|
|
|
507
537
|
}
|
|
508
538
|
httpsOptions.rejectUnauthorized = true;
|
|
509
539
|
}
|
|
540
|
+
if (this._config.crl !== void 0) {
|
|
541
|
+
httpsOptions.crl = normalizeCRL(this._config.crl);
|
|
542
|
+
}
|
|
510
543
|
if (this._config.rejectUnauthorized === false) {
|
|
511
544
|
httpsOptions.rejectUnauthorized = false;
|
|
512
545
|
}
|
|
@@ -515,7 +548,6 @@ var NodeAdapter = class {
|
|
|
515
548
|
let activeResponseStream;
|
|
516
549
|
let activeBufferedResponse;
|
|
517
550
|
let isStreamFactoryPending = false;
|
|
518
|
-
let uploadedBodyBytes = 0;
|
|
519
551
|
let didFireUpload100 = false;
|
|
520
552
|
const reportUploadProgress = (event) => {
|
|
521
553
|
if (didFireUpload100) {
|
|
@@ -524,7 +556,6 @@ var NodeAdapter = class {
|
|
|
524
556
|
if (event.progress === 1) {
|
|
525
557
|
didFireUpload100 = true;
|
|
526
558
|
}
|
|
527
|
-
uploadedBodyBytes = Math.max(uploadedBodyBytes, event.loaded);
|
|
528
559
|
request.onUploadProgress?.(event);
|
|
529
560
|
};
|
|
530
561
|
reportUploadProgress({ loaded: 0, total: 0, progress: 0 });
|
|
@@ -574,7 +605,7 @@ var NodeAdapter = class {
|
|
|
574
605
|
return;
|
|
575
606
|
}
|
|
576
607
|
if (writable === null || isStreamResponseCancel(writable)) {
|
|
577
|
-
const cancelReason = writable !== null ? writable
|
|
608
|
+
const cancelReason = writable !== null ? readObjectMember(writable, "reason") : void 0;
|
|
578
609
|
streamAbort.abort();
|
|
579
610
|
req.destroy();
|
|
580
611
|
const abortErr = new Error(
|
|
@@ -746,7 +777,7 @@ var NodeAdapter = class {
|
|
|
746
777
|
);
|
|
747
778
|
});
|
|
748
779
|
})().catch((error) => {
|
|
749
|
-
reject(
|
|
780
|
+
reject(normalizeError(error));
|
|
750
781
|
});
|
|
751
782
|
});
|
|
752
783
|
req.on("error", (error) => {
|
|
@@ -773,7 +804,7 @@ var NodeAdapter = class {
|
|
|
773
804
|
);
|
|
774
805
|
return;
|
|
775
806
|
}
|
|
776
|
-
const
|
|
807
|
+
const wasDefinitelyNotSent = isPreConnectionError(error);
|
|
777
808
|
resolveAdapterResponse(
|
|
778
809
|
resolve,
|
|
779
810
|
req,
|
|
@@ -782,7 +813,7 @@ var NodeAdapter = class {
|
|
|
782
813
|
{
|
|
783
814
|
status: 0,
|
|
784
815
|
isTransportError: true,
|
|
785
|
-
|
|
816
|
+
...wasDefinitelyNotSent ? { wasDefinitelyNotSent: true } : {},
|
|
786
817
|
headers: {},
|
|
787
818
|
body: null,
|
|
788
819
|
errorCause: error
|
|
@@ -873,12 +904,14 @@ var NodeAdapter = class {
|
|
|
873
904
|
request.requestURL,
|
|
874
905
|
request.headers,
|
|
875
906
|
{
|
|
907
|
+
// No isRetryable veto: that would stop retrying an idempotent
|
|
908
|
+
// PUT or DELETE. Delivery is unproven rather than disproven, so
|
|
909
|
+
// nothing is claimed and the client's method rule decides.
|
|
876
910
|
status: 0,
|
|
877
911
|
isTransportError: true,
|
|
878
|
-
isRetryable: false,
|
|
879
912
|
headers: {},
|
|
880
913
|
body: null,
|
|
881
|
-
errorCause:
|
|
914
|
+
errorCause: normalizeError(error)
|
|
882
915
|
}
|
|
883
916
|
);
|
|
884
917
|
});
|
|
@@ -895,12 +928,14 @@ var NodeAdapter = class {
|
|
|
895
928
|
request.requestURL,
|
|
896
929
|
request.headers,
|
|
897
930
|
{
|
|
931
|
+
// No isRetryable veto: that would stop retrying an idempotent
|
|
932
|
+
// PUT or DELETE. Delivery is unproven rather than disproven, so
|
|
933
|
+
// nothing is claimed and the client's method rule decides.
|
|
898
934
|
status: 0,
|
|
899
935
|
isTransportError: true,
|
|
900
|
-
isRetryable: false,
|
|
901
936
|
headers: {},
|
|
902
937
|
body: null,
|
|
903
|
-
errorCause:
|
|
938
|
+
errorCause: normalizeError(error)
|
|
904
939
|
}
|
|
905
940
|
);
|
|
906
941
|
});
|
|
@@ -970,7 +1005,7 @@ async function streamResponseBody(res, writable, totalBytes, onProgress) {
|
|
|
970
1005
|
} catch (error) {
|
|
971
1006
|
settle({
|
|
972
1007
|
code: "stream_write_error",
|
|
973
|
-
cause:
|
|
1008
|
+
cause: normalizeError(error)
|
|
974
1009
|
});
|
|
975
1010
|
return;
|
|
976
1011
|
}
|
|
@@ -1001,7 +1036,7 @@ async function streamResponseBody(res, writable, totalBytes, onProgress) {
|
|
|
1001
1036
|
} catch (error) {
|
|
1002
1037
|
settle({
|
|
1003
1038
|
code: "stream_write_error",
|
|
1004
|
-
cause:
|
|
1039
|
+
cause: normalizeError(error)
|
|
1005
1040
|
});
|
|
1006
1041
|
}
|
|
1007
1042
|
};
|
|
@@ -1030,6 +1065,36 @@ async function streamResponseBody(res, writable, totalBytes, onProgress) {
|
|
|
1030
1065
|
res.on("close", onResponseClose);
|
|
1031
1066
|
});
|
|
1032
1067
|
}
|
|
1068
|
+
var PEM_CRL_HEADER = "-----BEGIN X509 CRL-----";
|
|
1069
|
+
var PEM_CRL_BLOCK = /-----BEGIN X509 CRL-----[\s\S]*?-----END X509 CRL-----/g;
|
|
1070
|
+
var RESIDUE_OUTSIDE_PEM_BLOCKS = /\S/;
|
|
1071
|
+
function normalizeCRL(crl) {
|
|
1072
|
+
if (Array.isArray(crl)) {
|
|
1073
|
+
return crl.flatMap((entry) => normalizeCRLEntry(entry));
|
|
1074
|
+
}
|
|
1075
|
+
return normalizeCRLEntry(crl);
|
|
1076
|
+
}
|
|
1077
|
+
function normalizeCRLEntry(entry) {
|
|
1078
|
+
if (typeof entry === "string") {
|
|
1079
|
+
return splitCRLString(entry);
|
|
1080
|
+
}
|
|
1081
|
+
const text = entry.toString("latin1");
|
|
1082
|
+
if (!text.includes(PEM_CRL_HEADER)) {
|
|
1083
|
+
return entry;
|
|
1084
|
+
}
|
|
1085
|
+
const split = splitCRLString(text);
|
|
1086
|
+
return Array.isArray(split) ? split : entry;
|
|
1087
|
+
}
|
|
1088
|
+
function splitCRLString(crl) {
|
|
1089
|
+
const blocks = crl.match(PEM_CRL_BLOCK) ?? [];
|
|
1090
|
+
const residue = crl.replace(PEM_CRL_BLOCK, "");
|
|
1091
|
+
if (RESIDUE_OUTSIDE_PEM_BLOCKS.test(residue)) {
|
|
1092
|
+
throw new Error(
|
|
1093
|
+
"NodeAdapter: the `crl` value contains content outside any complete -----BEGIN/END X509 CRL----- block. Only PEM CRL blocks separated by whitespace are accepted, because a truncated CRL and a line of commentary are indistinguishable \u2014 accepting the second would mean silently dropping the first and enforcing an incomplete revocation set. Common causes: a partial download, a clipped or mistyped delimiter, or decoded text from `openssl ... -text`, which must be stripped before the bundle is passed here."
|
|
1094
|
+
);
|
|
1095
|
+
}
|
|
1096
|
+
return blocks.length > 1 ? blocks : crl;
|
|
1097
|
+
}
|
|
1033
1098
|
function normalizeResponseHeaders(headers) {
|
|
1034
1099
|
const result = {};
|
|
1035
1100
|
for (const [key, value] of Object.entries(headers)) {
|
|
@@ -1077,6 +1142,16 @@ function removeWritableListener(writable, event, listener) {
|
|
|
1077
1142
|
const removable = writable;
|
|
1078
1143
|
removable.off?.(event, listener);
|
|
1079
1144
|
}
|
|
1145
|
+
var PRE_CONNECTION_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
1146
|
+
"ECONNREFUSED",
|
|
1147
|
+
"ENOTFOUND",
|
|
1148
|
+
"EAI_AGAIN",
|
|
1149
|
+
"EADDRNOTAVAIL"
|
|
1150
|
+
]);
|
|
1151
|
+
function isPreConnectionError(error) {
|
|
1152
|
+
const code = readObjectMember(error, "code");
|
|
1153
|
+
return typeof code === "string" && PRE_CONNECTION_ERROR_CODES.has(code);
|
|
1154
|
+
}
|
|
1080
1155
|
function makeResponseStreamError(message, cause) {
|
|
1081
1156
|
const error = new Error(message);
|
|
1082
1157
|
if (cause) {
|
|
@@ -1085,7 +1160,7 @@ function makeResponseStreamError(message, cause) {
|
|
|
1085
1160
|
return error;
|
|
1086
1161
|
}
|
|
1087
1162
|
function markStreamFactoryError(error, req, fallbackHeaders) {
|
|
1088
|
-
const normalized =
|
|
1163
|
+
const normalized = normalizeError(error);
|
|
1089
1164
|
const tagged = normalized;
|
|
1090
1165
|
tagged[NON_RETRYABLE_HTTP_CLIENT_CALLBACK_ERROR_FLAG] = true;
|
|
1091
1166
|
Object.assign(normalized, { [STREAM_FACTORY_ERROR_FLAG]: true });
|
|
@@ -1109,7 +1184,34 @@ function markResponseStreamAbortError(error, req, fallbackHeaders, status, heade
|
|
|
1109
1184
|
return error;
|
|
1110
1185
|
}
|
|
1111
1186
|
function isStreamResponseCancel(value) {
|
|
1112
|
-
return value
|
|
1187
|
+
return readObjectMember(value, "cancel") === true;
|
|
1188
|
+
}
|
|
1189
|
+
function readObjectMember(source, key) {
|
|
1190
|
+
if (source === null || typeof source !== "object" && typeof source !== "function") {
|
|
1191
|
+
return void 0;
|
|
1192
|
+
}
|
|
1193
|
+
try {
|
|
1194
|
+
return source[key];
|
|
1195
|
+
} catch {
|
|
1196
|
+
return void 0;
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
function isErrorValue2(value) {
|
|
1200
|
+
try {
|
|
1201
|
+
return value instanceof Error;
|
|
1202
|
+
} catch {
|
|
1203
|
+
return false;
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
function normalizeError(value) {
|
|
1207
|
+
if (isErrorValue2(value)) {
|
|
1208
|
+
return value;
|
|
1209
|
+
}
|
|
1210
|
+
try {
|
|
1211
|
+
return new Error(String(value));
|
|
1212
|
+
} catch {
|
|
1213
|
+
return new Error("Unknown error");
|
|
1214
|
+
}
|
|
1113
1215
|
}
|
|
1114
1216
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1115
1217
|
0 && (module.exports = {
|