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
@@ -1,5 +1,5 @@
1
- import { H as HTTPAdapter, A as AdapterType, a as AdapterRequest, b as AdapterResponse } from '../../types-6G59m8U9.cjs';
2
- export { c as AdapterProgressEvent, d as HTTPMethod, S as StreamResponseCancel, e as StreamResponseContext, f as StreamResponseFactory, g as StreamResponseInfo, W as WritableLike } from '../../types-6G59m8U9.cjs';
1
+ import { H as HTTPAdapter, A as AdapterType, a as AdapterRequest, b as AdapterResponse } from '../../types-BFvpJPMt.cjs';
2
+ export { c as AdapterProgressEvent, d as HTTPMethod, S as StreamResponseCancel, e as StreamResponseContext, f as StreamResponseFactory, g as StreamResponseInfo, W as WritableLike } from '../../types-BFvpJPMt.cjs';
3
3
  import '../../types-BW0vnSzd.cjs';
4
4
 
5
5
  interface NodeAdapterConfig {
@@ -1,5 +1,5 @@
1
- import { H as HTTPAdapter, A as AdapterType, a as AdapterRequest, b as AdapterResponse } from '../../types-CG10j6Lc.js';
2
- export { c as AdapterProgressEvent, d as HTTPMethod, S as StreamResponseCancel, e as StreamResponseContext, f as StreamResponseFactory, g as StreamResponseInfo, W as WritableLike } from '../../types-CG10j6Lc.js';
1
+ import { H as HTTPAdapter, A as AdapterType, a as AdapterRequest, b as AdapterResponse } from '../../types-BONtIhQ5.js';
2
+ export { c as AdapterProgressEvent, d as HTTPMethod, S as StreamResponseCancel, e as StreamResponseContext, f as StreamResponseFactory, g as StreamResponseInfo, W as WritableLike } from '../../types-BONtIhQ5.js';
3
3
  import '../../types-BW0vnSzd.js';
4
4
 
5
5
  interface NodeAdapterConfig {
@@ -328,20 +328,60 @@ var CERT_ERROR_CODES = /* @__PURE__ */ new Set([
328
328
  "UNABLE_TO_GET_ISSUER_CERT_LOCALLY",
329
329
  "CERT_REVOKED"
330
330
  ]);
331
+ var CRL_CODE_PATTERN = /(?:^|_)CRLS?(?:_|$)/;
332
+ var TRANSPORT_ERROR_CODES = /* @__PURE__ */ new Set([
333
+ "ENOTFOUND",
334
+ "EAI_AGAIN",
335
+ "ECONNREFUSED",
336
+ "ECONNRESET",
337
+ "ECONNABORTED",
338
+ "ETIMEDOUT",
339
+ "EPIPE",
340
+ "EHOSTUNREACH",
341
+ "EHOSTDOWN",
342
+ "ENETUNREACH",
343
+ "ENETDOWN",
344
+ "EADDRNOTAVAIL"
345
+ ]);
346
+ var UNDICI_TRANSPORT_ERROR_PREFIX = "UND_ERR_";
331
347
  function isTLSCertificateError(error) {
332
- const code = error.code ?? "";
348
+ if (isTLSCertificateErrorSelf(error)) {
349
+ return true;
350
+ }
351
+ const cause = readMember(error, "cause");
352
+ return isErrorValue(cause) ? isTLSCertificateErrorSelf(cause) : false;
353
+ }
354
+ function isErrorValue(value) {
355
+ try {
356
+ return value instanceof Error;
357
+ } catch {
358
+ return false;
359
+ }
360
+ }
361
+ function isTLSCertificateErrorSelf(error) {
362
+ const rawCode = readMember(error, "code");
363
+ const code = typeof rawCode === "string" ? rawCode : "";
333
364
  if (CERT_ERROR_CODES.has(code)) {
334
365
  return true;
335
366
  }
336
- if (code.includes("CRL")) {
367
+ if (CRL_CODE_PATTERN.test(code)) {
337
368
  return true;
338
369
  }
339
370
  if ((code.startsWith("ERR_TLS_") || code.startsWith("ERR_SSL_")) && code.includes("CERT")) {
340
371
  return true;
341
372
  }
342
- return /certificate|self signed|unable to verify|altname/i.test(
343
- error.message
344
- );
373
+ if (TRANSPORT_ERROR_CODES.has(code) || code.startsWith(UNDICI_TRANSPORT_ERROR_PREFIX)) {
374
+ return false;
375
+ }
376
+ const message = readMember(error, "message");
377
+ return typeof message === "string" ? /certificate|self signed|unable to verify|altname/i.test(message) : false;
378
+ }
379
+ function readMember(error, key) {
380
+ try {
381
+ return error[key];
382
+ } catch {
383
+ return void 0;
384
+ }
345
385
  }
346
386
 
347
387
  // src/lib/http-client/adapters/node-adapter-utils.ts
@@ -472,7 +512,6 @@ var NodeAdapter = class {
472
512
  let activeResponseStream;
473
513
  let activeBufferedResponse;
474
514
  let isStreamFactoryPending = false;
475
- let uploadedBodyBytes = 0;
476
515
  let didFireUpload100 = false;
477
516
  const reportUploadProgress = (event) => {
478
517
  if (didFireUpload100) {
@@ -481,7 +520,6 @@ var NodeAdapter = class {
481
520
  if (event.progress === 1) {
482
521
  didFireUpload100 = true;
483
522
  }
484
- uploadedBodyBytes = Math.max(uploadedBodyBytes, event.loaded);
485
523
  request.onUploadProgress?.(event);
486
524
  };
487
525
  reportUploadProgress({ loaded: 0, total: 0, progress: 0 });
@@ -531,7 +569,7 @@ var NodeAdapter = class {
531
569
  return;
532
570
  }
533
571
  if (writable === null || isStreamResponseCancel(writable)) {
534
- const cancelReason = writable !== null ? writable.reason : void 0;
572
+ const cancelReason = writable !== null ? readObjectMember(writable, "reason") : void 0;
535
573
  streamAbort.abort();
536
574
  req.destroy();
537
575
  const abortErr = new Error(
@@ -703,7 +741,7 @@ var NodeAdapter = class {
703
741
  );
704
742
  });
705
743
  })().catch((error) => {
706
- reject(error instanceof Error ? error : new Error(String(error)));
744
+ reject(normalizeError(error));
707
745
  });
708
746
  });
709
747
  req.on("error", (error) => {
@@ -730,7 +768,7 @@ var NodeAdapter = class {
730
768
  );
731
769
  return;
732
770
  }
733
- const isRetryableTransportError = uploadedBodyBytes === 0;
771
+ const wasDefinitelyNotSent = isPreConnectionError(error);
734
772
  resolveAdapterResponse(
735
773
  resolve,
736
774
  req,
@@ -739,7 +777,7 @@ var NodeAdapter = class {
739
777
  {
740
778
  status: 0,
741
779
  isTransportError: true,
742
- isRetryable: isRetryableTransportError,
780
+ ...wasDefinitelyNotSent ? { wasDefinitelyNotSent: true } : {},
743
781
  headers: {},
744
782
  body: null,
745
783
  errorCause: error
@@ -830,12 +868,14 @@ var NodeAdapter = class {
830
868
  request.requestURL,
831
869
  request.headers,
832
870
  {
871
+ // No isRetryable veto: that would stop retrying an idempotent
872
+ // PUT or DELETE. Delivery is unproven rather than disproven, so
873
+ // nothing is claimed and the client's method rule decides.
833
874
  status: 0,
834
875
  isTransportError: true,
835
- isRetryable: false,
836
876
  headers: {},
837
877
  body: null,
838
- errorCause: error instanceof Error ? error : new Error(String(error))
878
+ errorCause: normalizeError(error)
839
879
  }
840
880
  );
841
881
  });
@@ -852,12 +892,14 @@ var NodeAdapter = class {
852
892
  request.requestURL,
853
893
  request.headers,
854
894
  {
895
+ // No isRetryable veto: that would stop retrying an idempotent
896
+ // PUT or DELETE. Delivery is unproven rather than disproven, so
897
+ // nothing is claimed and the client's method rule decides.
855
898
  status: 0,
856
899
  isTransportError: true,
857
- isRetryable: false,
858
900
  headers: {},
859
901
  body: null,
860
- errorCause: error instanceof Error ? error : new Error(String(error))
902
+ errorCause: normalizeError(error)
861
903
  }
862
904
  );
863
905
  });
@@ -927,7 +969,7 @@ async function streamResponseBody(res, writable, totalBytes, onProgress) {
927
969
  } catch (error) {
928
970
  settle({
929
971
  code: "stream_write_error",
930
- cause: error instanceof Error ? error : new Error(String(error))
972
+ cause: normalizeError(error)
931
973
  });
932
974
  return;
933
975
  }
@@ -958,7 +1000,7 @@ async function streamResponseBody(res, writable, totalBytes, onProgress) {
958
1000
  } catch (error) {
959
1001
  settle({
960
1002
  code: "stream_write_error",
961
- cause: error instanceof Error ? error : new Error(String(error))
1003
+ cause: normalizeError(error)
962
1004
  });
963
1005
  }
964
1006
  };
@@ -1064,6 +1106,16 @@ function removeWritableListener(writable, event, listener) {
1064
1106
  const removable = writable;
1065
1107
  removable.off?.(event, listener);
1066
1108
  }
1109
+ var PRE_CONNECTION_ERROR_CODES = /* @__PURE__ */ new Set([
1110
+ "ECONNREFUSED",
1111
+ "ENOTFOUND",
1112
+ "EAI_AGAIN",
1113
+ "EADDRNOTAVAIL"
1114
+ ]);
1115
+ function isPreConnectionError(error) {
1116
+ const code = readObjectMember(error, "code");
1117
+ return typeof code === "string" && PRE_CONNECTION_ERROR_CODES.has(code);
1118
+ }
1067
1119
  function makeResponseStreamError(message, cause) {
1068
1120
  const error = new Error(message);
1069
1121
  if (cause) {
@@ -1072,7 +1124,7 @@ function makeResponseStreamError(message, cause) {
1072
1124
  return error;
1073
1125
  }
1074
1126
  function markStreamFactoryError(error, req, fallbackHeaders) {
1075
- const normalized = error instanceof Error ? error : new Error(String(error));
1127
+ const normalized = normalizeError(error);
1076
1128
  const tagged = normalized;
1077
1129
  tagged[NON_RETRYABLE_HTTP_CLIENT_CALLBACK_ERROR_FLAG] = true;
1078
1130
  Object.assign(normalized, { [STREAM_FACTORY_ERROR_FLAG]: true });
@@ -1096,7 +1148,34 @@ function markResponseStreamAbortError(error, req, fallbackHeaders, status, heade
1096
1148
  return error;
1097
1149
  }
1098
1150
  function isStreamResponseCancel(value) {
1099
- return value !== null && typeof value === "object" && value.cancel === true;
1151
+ return readObjectMember(value, "cancel") === true;
1152
+ }
1153
+ function readObjectMember(source, key) {
1154
+ if (source === null || typeof source !== "object" && typeof source !== "function") {
1155
+ return void 0;
1156
+ }
1157
+ try {
1158
+ return source[key];
1159
+ } catch {
1160
+ return void 0;
1161
+ }
1162
+ }
1163
+ function isErrorValue2(value) {
1164
+ try {
1165
+ return value instanceof Error;
1166
+ } catch {
1167
+ return false;
1168
+ }
1169
+ }
1170
+ function normalizeError(value) {
1171
+ if (isErrorValue2(value)) {
1172
+ return value;
1173
+ }
1174
+ try {
1175
+ return new Error(String(value));
1176
+ } catch {
1177
+ return new Error("Unknown error");
1178
+ }
1100
1179
  }
1101
1180
  export {
1102
1181
  NodeAdapter