kinetex 1.4.0 → 1.5.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.
Files changed (95) hide show
  1. package/README.md +170 -46
  2. package/dist/browser/kinetex.esm.js +29 -29
  3. package/dist/browser/kinetex.js +1143 -791
  4. package/dist/browser/kinetex.min.js +29 -29
  5. package/dist/cjs/aws-sigv4.js +7 -14
  6. package/dist/cjs/cache.js +9 -0
  7. package/dist/cjs/circuit-breaker.js +8 -1
  8. package/dist/cjs/client.js +350 -95
  9. package/dist/cjs/cookie-parser.js +28 -1
  10. package/dist/cjs/core.js +227 -5
  11. package/dist/cjs/dedup.js +93 -10
  12. package/dist/cjs/digest.js +36 -15
  13. package/dist/cjs/graphql.js +2 -11
  14. package/dist/cjs/headers.js +24 -1
  15. package/dist/cjs/interceptors.js +6 -17
  16. package/dist/cjs/lifecycle.js +3 -19
  17. package/dist/cjs/logging.js +12 -29
  18. package/dist/cjs/progress.js +1 -3
  19. package/dist/cjs/proxy.js +19 -2
  20. package/dist/cjs/response.js +202 -75
  21. package/dist/cjs/socks5.js +5 -0
  22. package/dist/cjs/utils.js +115 -27
  23. package/dist/cjs/ws.js +43 -2
  24. package/dist/esm/aws-sigv4.js +7 -14
  25. package/dist/esm/aws-sigv4.js.map +1 -1
  26. package/dist/esm/cache.js +9 -0
  27. package/dist/esm/cache.js.map +1 -1
  28. package/dist/esm/circuit-breaker.js +8 -1
  29. package/dist/esm/circuit-breaker.js.map +1 -1
  30. package/dist/esm/client.js +350 -95
  31. package/dist/esm/client.js.map +1 -1
  32. package/dist/esm/cookie-parser.js +28 -1
  33. package/dist/esm/cookie-parser.js.map +1 -1
  34. package/dist/esm/core.js +227 -5
  35. package/dist/esm/core.js.map +1 -1
  36. package/dist/esm/dedup.js +93 -10
  37. package/dist/esm/dedup.js.map +1 -1
  38. package/dist/esm/digest.js +36 -15
  39. package/dist/esm/digest.js.map +1 -1
  40. package/dist/esm/graphql.js +2 -11
  41. package/dist/esm/graphql.js.map +1 -1
  42. package/dist/esm/headers.js +24 -1
  43. package/dist/esm/headers.js.map +1 -1
  44. package/dist/esm/interceptors.js +6 -17
  45. package/dist/esm/interceptors.js.map +1 -1
  46. package/dist/esm/lifecycle.js +3 -19
  47. package/dist/esm/lifecycle.js.map +1 -1
  48. package/dist/esm/logging.js +12 -29
  49. package/dist/esm/logging.js.map +1 -1
  50. package/dist/esm/progress.js +1 -3
  51. package/dist/esm/progress.js.map +1 -1
  52. package/dist/esm/proxy.js +19 -2
  53. package/dist/esm/proxy.js.map +1 -1
  54. package/dist/esm/response.js +202 -75
  55. package/dist/esm/response.js.map +1 -1
  56. package/dist/esm/socks5.js +5 -0
  57. package/dist/esm/socks5.js.map +1 -1
  58. package/dist/esm/types.js.map +1 -1
  59. package/dist/esm/url.js.map +1 -1
  60. package/dist/esm/utils.js +115 -27
  61. package/dist/esm/utils.js.map +1 -1
  62. package/dist/esm/ws.js +43 -2
  63. package/dist/esm/ws.js.map +1 -1
  64. package/dist/types/aws-sigv4.d.ts.map +1 -1
  65. package/dist/types/cache.d.ts.map +1 -1
  66. package/dist/types/circuit-breaker.d.ts +1 -1
  67. package/dist/types/circuit-breaker.d.ts.map +1 -1
  68. package/dist/types/client.d.ts.map +1 -1
  69. package/dist/types/cookie-parser.d.ts.map +1 -1
  70. package/dist/types/core.d.ts +113 -0
  71. package/dist/types/core.d.ts.map +1 -1
  72. package/dist/types/dedup.d.ts +38 -3
  73. package/dist/types/dedup.d.ts.map +1 -1
  74. package/dist/types/digest.d.ts.map +1 -1
  75. package/dist/types/graphql.d.ts.map +1 -1
  76. package/dist/types/headers.d.ts +23 -4
  77. package/dist/types/headers.d.ts.map +1 -1
  78. package/dist/types/interceptors.d.ts +24 -38
  79. package/dist/types/interceptors.d.ts.map +1 -1
  80. package/dist/types/lifecycle.d.ts.map +1 -1
  81. package/dist/types/logging.d.ts.map +1 -1
  82. package/dist/types/progress.d.ts.map +1 -1
  83. package/dist/types/proxy.d.ts.map +1 -1
  84. package/dist/types/response.d.ts +42 -1
  85. package/dist/types/response.d.ts.map +1 -1
  86. package/dist/types/socks5.d.ts.map +1 -1
  87. package/dist/types/types.d.ts +105 -23
  88. package/dist/types/types.d.ts.map +1 -1
  89. package/dist/types/url.d.ts +0 -11
  90. package/dist/types/url.d.ts.map +1 -1
  91. package/dist/types/utils.d.ts +69 -1
  92. package/dist/types/utils.d.ts.map +1 -1
  93. package/dist/types/ws.d.ts +0 -1
  94. package/dist/types/ws.d.ts.map +1 -1
  95. package/package.json +10 -4
@@ -22,6 +22,13 @@
22
22
  */
23
23
  // Node.js globals accessed via globalThis for cross-runtime compatibility
24
24
  import { TimeoutError, NetworkError } from "./types.js";
25
+ import { sha256Hex } from "./utils.js";
26
+ /** Convert a Uint8Array to a lowercase hex string. */
27
+ function toHex(bytes) {
28
+ return Array.from(bytes)
29
+ .map((b) => b.toString(16).padStart(2, "0"))
30
+ .join("");
31
+ }
25
32
  /**
26
33
  * Static credential provider — wraps a fixed set of credentials.
27
34
  */
@@ -277,20 +284,6 @@ async function hmacSHA256(key, data) {
277
284
  /**
278
285
  * SHA-256 hash of a string or bytes. Returns lowercase hex.
279
286
  */
280
- async function sha256Hex(data) {
281
- const enc = new TextEncoder();
282
- const raw = typeof data === "string" ? enc.encode(data) : data;
283
- // Cast to ArrayBuffer for WebCrypto digest overload
284
- const buf = raw.buffer.slice(raw.byteOffset, raw.byteOffset + raw.byteLength);
285
- const hashBuf = await crypto.subtle.digest("SHA-256", buf);
286
- return toHex(new Uint8Array(hashBuf));
287
- }
288
- /** Convert a Uint8Array to a lowercase hex string. */
289
- function toHex(bytes) {
290
- return Array.from(bytes)
291
- .map((b) => b.toString(16).padStart(2, "0"))
292
- .join("");
293
- }
294
287
  // ============================================================================
295
288
  // #5 CANONICAL REQUEST
296
289
  // ============================================================================
package/dist/cjs/cache.js CHANGED
@@ -438,6 +438,15 @@ function computeTTL(response, defaultTtl, honor) {
438
438
  if (honor && d.noStore) {
439
439
  return { ttlMs: 0, swrMs: 0, staleOnError: 0, shouldCache: false };
440
440
  }
441
+ // `private` marks a response as belonging to a single user. A browser's cache
442
+ // *is* per-user, so storing it there is correct — but this cache is a Map in
443
+ // the calling process, shared by every request that process makes. Honouring
444
+ // the directive is the difference between one user's `private` response and
445
+ // another user's. `d.private` was parsed and then never read, so a response
446
+ // that explicitly asked not to be shared was stored and replayed anyway.
447
+ if (honor && d.private) {
448
+ return { ttlMs: 0, swrMs: 0, staleOnError: 0, shouldCache: false };
449
+ }
441
450
  // s-maxage takes priority (for shared/proxy caches)
442
451
  const maxAgeSecs = d.sMaxAge ?? d.maxAge;
443
452
  let ttlMs;
@@ -327,7 +327,14 @@ export class CircuitBreaker {
327
327
  const code = err.code;
328
328
  if (this.failureFilter.networkErrors && code === "ENETWORK")
329
329
  return true;
330
- if (this.failureFilter.timeouts && code === "ETIMEOUT")
330
+ // `ETIMEDOUT` as well as `ETIMEOUT`. The timeout interceptor raises its own
331
+ // `TimeoutError` (src/interceptors.ts), which carries `ETIMEDOUT`, so a
332
+ // request that timed out at the interceptor was never counted toward the
333
+ // threshold no matter what `failureFilter.timeouts` was set to. Both codes
334
+ // are kept because `ETIMEDOUT` is also a node:net errno (see
335
+ // `TRANSIENT_DIAL_CODES` in socks5.ts), so accepting it is right
336
+ // independently of the interceptor.
337
+ if (this.failureFilter.timeouts && (code === "ETIMEOUT" || code === "ETIMEDOUT"))
331
338
  return true;
332
339
  if (this.failureFilter.serverErrors) {
333
340
  const status = err.status;