lifecycleion 0.0.20 → 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.
Files changed (72) hide show
  1. package/README.md +39 -36
  2. package/dist/lib/event-emitter.cjs +195 -9
  3. package/dist/lib/event-emitter.cjs.map +1 -1
  4. package/dist/lib/event-emitter.js +195 -9
  5. package/dist/lib/event-emitter.js.map +1 -1
  6. package/dist/lib/global-event-target.cjs +217 -0
  7. package/dist/lib/global-event-target.cjs.map +1 -0
  8. package/dist/lib/global-event-target.d.cts +70 -0
  9. package/dist/lib/global-event-target.d.ts +70 -0
  10. package/dist/lib/global-event-target.js +189 -0
  11. package/dist/lib/global-event-target.js.map +1 -0
  12. package/dist/lib/http-client/index.cjs +554 -193
  13. package/dist/lib/http-client/index.cjs.map +1 -1
  14. package/dist/lib/http-client/index.d.cts +9 -3
  15. package/dist/lib/http-client/index.d.ts +9 -3
  16. package/dist/lib/http-client/index.js +554 -193
  17. package/dist/lib/http-client/index.js.map +1 -1
  18. package/dist/lib/http-client-mock/index.cjs +71 -10
  19. package/dist/lib/http-client-mock/index.cjs.map +1 -1
  20. package/dist/lib/http-client-mock/index.d.cts +50 -3
  21. package/dist/lib/http-client-mock/index.d.ts +50 -3
  22. package/dist/lib/http-client-mock/index.js +71 -10
  23. package/dist/lib/http-client-mock/index.js.map +1 -1
  24. package/dist/lib/http-client-node/index.cjs +98 -19
  25. package/dist/lib/http-client-node/index.cjs.map +1 -1
  26. package/dist/lib/http-client-node/index.d.cts +2 -2
  27. package/dist/lib/http-client-node/index.d.ts +2 -2
  28. package/dist/lib/http-client-node/index.js +98 -19
  29. package/dist/lib/http-client-node/index.js.map +1 -1
  30. package/dist/lib/http-client-xhr/index.cjs.map +1 -1
  31. package/dist/lib/http-client-xhr/index.d.cts +2 -2
  32. package/dist/lib/http-client-xhr/index.d.ts +2 -2
  33. package/dist/lib/http-client-xhr/index.js.map +1 -1
  34. package/dist/lib/lifecycle-manager/index.cjs +199 -13
  35. package/dist/lib/lifecycle-manager/index.cjs.map +1 -1
  36. package/dist/lib/lifecycle-manager/index.js +199 -13
  37. package/dist/lib/lifecycle-manager/index.js.map +1 -1
  38. package/dist/lib/logger/index.cjs +203 -21
  39. package/dist/lib/logger/index.cjs.map +1 -1
  40. package/dist/lib/logger/index.d.cts +5 -1
  41. package/dist/lib/logger/index.d.ts +5 -1
  42. package/dist/lib/logger/index.js +203 -21
  43. package/dist/lib/logger/index.js.map +1 -1
  44. package/dist/lib/lru-cache/index.cjs +195 -9
  45. package/dist/lib/lru-cache/index.cjs.map +1 -1
  46. package/dist/lib/lru-cache/index.js +195 -9
  47. package/dist/lib/lru-cache/index.js.map +1 -1
  48. package/dist/lib/process-signal-manager.cjs +199 -13
  49. package/dist/lib/process-signal-manager.cjs.map +1 -1
  50. package/dist/lib/process-signal-manager.js +199 -13
  51. package/dist/lib/process-signal-manager.js.map +1 -1
  52. package/dist/lib/promise-protected-resolver.cjs +195 -9
  53. package/dist/lib/promise-protected-resolver.cjs.map +1 -1
  54. package/dist/lib/promise-protected-resolver.js +195 -9
  55. package/dist/lib/promise-protected-resolver.js.map +1 -1
  56. package/dist/lib/retry-utils/index.cjs +195 -9
  57. package/dist/lib/retry-utils/index.cjs.map +1 -1
  58. package/dist/lib/retry-utils/index.js +195 -9
  59. package/dist/lib/retry-utils/index.js.map +1 -1
  60. package/dist/lib/safe-handle-callback.cjs +196 -18
  61. package/dist/lib/safe-handle-callback.cjs.map +1 -1
  62. package/dist/lib/safe-handle-callback.d.cts +14 -4
  63. package/dist/lib/safe-handle-callback.d.ts +14 -4
  64. package/dist/lib/safe-handle-callback.js +196 -18
  65. package/dist/lib/safe-handle-callback.js.map +1 -1
  66. package/dist/lib/single-event-observer.cjs +195 -9
  67. package/dist/lib/single-event-observer.cjs.map +1 -1
  68. package/dist/lib/single-event-observer.js +195 -9
  69. package/dist/lib/single-event-observer.js.map +1 -1
  70. package/dist/{types-6G59m8U9.d.cts → types-BFvpJPMt.d.cts} +71 -10
  71. package/dist/{types-CG10j6Lc.d.ts → types-BONtIhQ5.d.ts} +71 -10
  72. package/package.json +12 -2
@@ -364,20 +364,60 @@ var CERT_ERROR_CODES = /* @__PURE__ */ new Set([
364
364
  "UNABLE_TO_GET_ISSUER_CERT_LOCALLY",
365
365
  "CERT_REVOKED"
366
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_";
367
383
  function isTLSCertificateError(error) {
368
- const code = error.code ?? "";
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 : "";
369
400
  if (CERT_ERROR_CODES.has(code)) {
370
401
  return true;
371
402
  }
372
- if (code.includes("CRL")) {
403
+ if (CRL_CODE_PATTERN.test(code)) {
373
404
  return true;
374
405
  }
375
406
  if ((code.startsWith("ERR_TLS_") || code.startsWith("ERR_SSL_")) && code.includes("CERT")) {
376
407
  return true;
377
408
  }
378
- return /certificate|self signed|unable to verify|altname/i.test(
379
- error.message
380
- );
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
+ }
381
421
  }
382
422
 
383
423
  // src/lib/http-client/adapters/node-adapter-utils.ts
@@ -508,7 +548,6 @@ var NodeAdapter = class {
508
548
  let activeResponseStream;
509
549
  let activeBufferedResponse;
510
550
  let isStreamFactoryPending = false;
511
- let uploadedBodyBytes = 0;
512
551
  let didFireUpload100 = false;
513
552
  const reportUploadProgress = (event) => {
514
553
  if (didFireUpload100) {
@@ -517,7 +556,6 @@ var NodeAdapter = class {
517
556
  if (event.progress === 1) {
518
557
  didFireUpload100 = true;
519
558
  }
520
- uploadedBodyBytes = Math.max(uploadedBodyBytes, event.loaded);
521
559
  request.onUploadProgress?.(event);
522
560
  };
523
561
  reportUploadProgress({ loaded: 0, total: 0, progress: 0 });
@@ -567,7 +605,7 @@ var NodeAdapter = class {
567
605
  return;
568
606
  }
569
607
  if (writable === null || isStreamResponseCancel(writable)) {
570
- const cancelReason = writable !== null ? writable.reason : void 0;
608
+ const cancelReason = writable !== null ? readObjectMember(writable, "reason") : void 0;
571
609
  streamAbort.abort();
572
610
  req.destroy();
573
611
  const abortErr = new Error(
@@ -739,7 +777,7 @@ var NodeAdapter = class {
739
777
  );
740
778
  });
741
779
  })().catch((error) => {
742
- reject(error instanceof Error ? error : new Error(String(error)));
780
+ reject(normalizeError(error));
743
781
  });
744
782
  });
745
783
  req.on("error", (error) => {
@@ -766,7 +804,7 @@ var NodeAdapter = class {
766
804
  );
767
805
  return;
768
806
  }
769
- const isRetryableTransportError = uploadedBodyBytes === 0;
807
+ const wasDefinitelyNotSent = isPreConnectionError(error);
770
808
  resolveAdapterResponse(
771
809
  resolve,
772
810
  req,
@@ -775,7 +813,7 @@ var NodeAdapter = class {
775
813
  {
776
814
  status: 0,
777
815
  isTransportError: true,
778
- isRetryable: isRetryableTransportError,
816
+ ...wasDefinitelyNotSent ? { wasDefinitelyNotSent: true } : {},
779
817
  headers: {},
780
818
  body: null,
781
819
  errorCause: error
@@ -866,12 +904,14 @@ var NodeAdapter = class {
866
904
  request.requestURL,
867
905
  request.headers,
868
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.
869
910
  status: 0,
870
911
  isTransportError: true,
871
- isRetryable: false,
872
912
  headers: {},
873
913
  body: null,
874
- errorCause: error instanceof Error ? error : new Error(String(error))
914
+ errorCause: normalizeError(error)
875
915
  }
876
916
  );
877
917
  });
@@ -888,12 +928,14 @@ var NodeAdapter = class {
888
928
  request.requestURL,
889
929
  request.headers,
890
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.
891
934
  status: 0,
892
935
  isTransportError: true,
893
- isRetryable: false,
894
936
  headers: {},
895
937
  body: null,
896
- errorCause: error instanceof Error ? error : new Error(String(error))
938
+ errorCause: normalizeError(error)
897
939
  }
898
940
  );
899
941
  });
@@ -963,7 +1005,7 @@ async function streamResponseBody(res, writable, totalBytes, onProgress) {
963
1005
  } catch (error) {
964
1006
  settle({
965
1007
  code: "stream_write_error",
966
- cause: error instanceof Error ? error : new Error(String(error))
1008
+ cause: normalizeError(error)
967
1009
  });
968
1010
  return;
969
1011
  }
@@ -994,7 +1036,7 @@ async function streamResponseBody(res, writable, totalBytes, onProgress) {
994
1036
  } catch (error) {
995
1037
  settle({
996
1038
  code: "stream_write_error",
997
- cause: error instanceof Error ? error : new Error(String(error))
1039
+ cause: normalizeError(error)
998
1040
  });
999
1041
  }
1000
1042
  };
@@ -1100,6 +1142,16 @@ function removeWritableListener(writable, event, listener) {
1100
1142
  const removable = writable;
1101
1143
  removable.off?.(event, listener);
1102
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
+ }
1103
1155
  function makeResponseStreamError(message, cause) {
1104
1156
  const error = new Error(message);
1105
1157
  if (cause) {
@@ -1108,7 +1160,7 @@ function makeResponseStreamError(message, cause) {
1108
1160
  return error;
1109
1161
  }
1110
1162
  function markStreamFactoryError(error, req, fallbackHeaders) {
1111
- const normalized = error instanceof Error ? error : new Error(String(error));
1163
+ const normalized = normalizeError(error);
1112
1164
  const tagged = normalized;
1113
1165
  tagged[NON_RETRYABLE_HTTP_CLIENT_CALLBACK_ERROR_FLAG] = true;
1114
1166
  Object.assign(normalized, { [STREAM_FACTORY_ERROR_FLAG]: true });
@@ -1132,7 +1184,34 @@ function markResponseStreamAbortError(error, req, fallbackHeaders, status, heade
1132
1184
  return error;
1133
1185
  }
1134
1186
  function isStreamResponseCancel(value) {
1135
- return value !== null && typeof value === "object" && value.cancel === true;
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
+ }
1136
1215
  }
1137
1216
  // Annotate the CommonJS export names for ESM import in node:
1138
1217
  0 && (module.exports = {