@blockrun/clawrouter 0.12.94 → 0.12.96

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 (282) hide show
  1. package/dist/auth.d.ts +82 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +388 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/balance.d.ts +97 -0
  6. package/dist/balance.d.ts.map +1 -0
  7. package/dist/balance.js +157 -0
  8. package/dist/balance.js.map +1 -0
  9. package/dist/cli.d.ts +15 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +256 -54991
  12. package/dist/cli.js.map +1 -1
  13. package/dist/compression/codebook.d.ts +24 -0
  14. package/dist/compression/codebook.d.ts.map +1 -0
  15. package/dist/compression/codebook.js +119 -0
  16. package/dist/compression/codebook.js.map +1 -0
  17. package/dist/compression/index.d.ts +33 -0
  18. package/dist/compression/index.d.ts.map +1 -0
  19. package/dist/compression/index.js +246 -0
  20. package/dist/compression/index.js.map +1 -0
  21. package/dist/compression/layers/deduplication.d.ts +28 -0
  22. package/dist/compression/layers/deduplication.d.ts.map +1 -0
  23. package/dist/compression/layers/deduplication.js +101 -0
  24. package/dist/compression/layers/deduplication.js.map +1 -0
  25. package/dist/compression/layers/dictionary.d.ts +21 -0
  26. package/dist/compression/layers/dictionary.d.ts.map +1 -0
  27. package/dist/compression/layers/dictionary.js +73 -0
  28. package/dist/compression/layers/dictionary.js.map +1 -0
  29. package/dist/compression/layers/dynamic-codebook.d.ts +26 -0
  30. package/dist/compression/layers/dynamic-codebook.d.ts.map +1 -0
  31. package/dist/compression/layers/dynamic-codebook.js +149 -0
  32. package/dist/compression/layers/dynamic-codebook.js.map +1 -0
  33. package/dist/compression/layers/json-compact.d.ts +23 -0
  34. package/dist/compression/layers/json-compact.d.ts.map +1 -0
  35. package/dist/compression/layers/json-compact.js +79 -0
  36. package/dist/compression/layers/json-compact.js.map +1 -0
  37. package/dist/compression/layers/observation.d.ts +21 -0
  38. package/dist/compression/layers/observation.d.ts.map +1 -0
  39. package/dist/compression/layers/observation.js +130 -0
  40. package/dist/compression/layers/observation.js.map +1 -0
  41. package/dist/compression/layers/paths.d.ts +24 -0
  42. package/dist/compression/layers/paths.d.ts.map +1 -0
  43. package/dist/compression/layers/paths.js +110 -0
  44. package/dist/compression/layers/paths.js.map +1 -0
  45. package/dist/compression/layers/whitespace.d.ts +27 -0
  46. package/dist/compression/layers/whitespace.d.ts.map +1 -0
  47. package/dist/compression/layers/whitespace.js +60 -0
  48. package/dist/compression/layers/whitespace.js.map +1 -0
  49. package/dist/compression/types.d.ts +84 -0
  50. package/dist/compression/types.d.ts.map +1 -0
  51. package/dist/compression/types.js +27 -0
  52. package/dist/compression/types.js.map +1 -0
  53. package/dist/config.d.ts +12 -0
  54. package/dist/config.d.ts.map +1 -0
  55. package/dist/config.js +22 -0
  56. package/dist/config.js.map +1 -0
  57. package/dist/dedup.d.ts +34 -0
  58. package/dist/dedup.d.ts.map +1 -0
  59. package/dist/dedup.js +150 -0
  60. package/dist/dedup.js.map +1 -0
  61. package/dist/doctor.d.ts +8 -0
  62. package/dist/doctor.d.ts.map +1 -0
  63. package/dist/doctor.js +375 -0
  64. package/dist/doctor.js.map +1 -0
  65. package/dist/error-classification.test.d.ts +2 -0
  66. package/dist/error-classification.test.d.ts.map +1 -0
  67. package/dist/error-classification.test.js +59 -0
  68. package/dist/error-classification.test.js.map +1 -0
  69. package/dist/errors.d.ts +54 -0
  70. package/dist/errors.d.ts.map +1 -0
  71. package/dist/errors.js +85 -0
  72. package/dist/errors.js.map +1 -0
  73. package/dist/exclude-models.d.ts +28 -0
  74. package/dist/exclude-models.d.ts.map +1 -0
  75. package/dist/exclude-models.integration.test.d.ts +2 -0
  76. package/dist/exclude-models.integration.test.d.ts.map +1 -0
  77. package/dist/exclude-models.integration.test.js +46 -0
  78. package/dist/exclude-models.integration.test.js.map +1 -0
  79. package/dist/exclude-models.js +70 -0
  80. package/dist/exclude-models.js.map +1 -0
  81. package/dist/exclude-models.test.d.ts +5 -0
  82. package/dist/exclude-models.test.d.ts.map +1 -0
  83. package/dist/exclude-models.test.js +95 -0
  84. package/dist/exclude-models.test.js.map +1 -0
  85. package/dist/fs-read.d.ts +11 -0
  86. package/dist/fs-read.d.ts.map +1 -0
  87. package/dist/fs-read.js +47 -0
  88. package/dist/fs-read.js.map +1 -0
  89. package/dist/index.d.ts +34 -1368
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +1071 -56191
  92. package/dist/index.js.map +1 -1
  93. package/dist/journal.d.ts +67 -0
  94. package/dist/journal.d.ts.map +1 -0
  95. package/dist/journal.js +184 -0
  96. package/dist/journal.js.map +1 -0
  97. package/dist/journal.test.d.ts +2 -0
  98. package/dist/journal.test.d.ts.map +1 -0
  99. package/dist/journal.test.js +201 -0
  100. package/dist/journal.test.js.map +1 -0
  101. package/dist/logger.d.ts +33 -0
  102. package/dist/logger.d.ts.map +1 -0
  103. package/dist/logger.js +35 -0
  104. package/dist/logger.js.map +1 -0
  105. package/dist/models.d.ts +107 -0
  106. package/dist/models.d.ts.map +1 -0
  107. package/dist/models.js +941 -0
  108. package/dist/models.js.map +1 -0
  109. package/dist/models.test.d.ts +2 -0
  110. package/dist/models.test.d.ts.map +1 -0
  111. package/dist/models.test.js +38 -0
  112. package/dist/models.test.js.map +1 -0
  113. package/dist/partners/index.d.ts +8 -0
  114. package/dist/partners/index.d.ts.map +1 -0
  115. package/dist/partners/index.js +6 -0
  116. package/dist/partners/index.js.map +1 -0
  117. package/dist/partners/registry.d.ts +51 -0
  118. package/dist/partners/registry.d.ts.map +1 -0
  119. package/dist/partners/registry.js +256 -0
  120. package/dist/partners/registry.js.map +1 -0
  121. package/dist/partners/tools.d.ts +24 -0
  122. package/dist/partners/tools.d.ts.map +1 -0
  123. package/dist/partners/tools.js +97 -0
  124. package/dist/partners/tools.js.map +1 -0
  125. package/dist/payment-preauth.d.ts +17 -0
  126. package/dist/payment-preauth.d.ts.map +1 -0
  127. package/dist/payment-preauth.js +102 -0
  128. package/dist/payment-preauth.js.map +1 -0
  129. package/dist/provider.d.ts +19 -0
  130. package/dist/provider.d.ts.map +1 -0
  131. package/dist/provider.js +45 -0
  132. package/dist/provider.js.map +1 -0
  133. package/dist/proxy.d.ts +210 -0
  134. package/dist/proxy.d.ts.map +1 -0
  135. package/dist/proxy.debrand.test.d.ts +2 -0
  136. package/dist/proxy.debrand.test.d.ts.map +1 -0
  137. package/dist/proxy.debrand.test.js +101 -0
  138. package/dist/proxy.debrand.test.js.map +1 -0
  139. package/dist/proxy.degraded-response.test.d.ts +2 -0
  140. package/dist/proxy.degraded-response.test.d.ts.map +1 -0
  141. package/dist/proxy.degraded-response.test.js +105 -0
  142. package/dist/proxy.degraded-response.test.js.map +1 -0
  143. package/dist/proxy.image-download.test.d.ts +2 -0
  144. package/dist/proxy.image-download.test.d.ts.map +1 -0
  145. package/dist/proxy.image-download.test.js +92 -0
  146. package/dist/proxy.image-download.test.js.map +1 -0
  147. package/dist/proxy.js +3810 -0
  148. package/dist/proxy.js.map +1 -0
  149. package/dist/proxy.models-endpoint.test.d.ts +2 -0
  150. package/dist/proxy.models-endpoint.test.d.ts.map +1 -0
  151. package/dist/proxy.models-endpoint.test.js +19 -0
  152. package/dist/proxy.models-endpoint.test.js.map +1 -0
  153. package/dist/proxy.multiturn-thinking.test.d.ts +2 -0
  154. package/dist/proxy.multiturn-thinking.test.d.ts.map +1 -0
  155. package/dist/proxy.multiturn-thinking.test.js +82 -0
  156. package/dist/proxy.multiturn-thinking.test.js.map +1 -0
  157. package/dist/proxy.payment-chain-reuse.test.d.ts +2 -0
  158. package/dist/proxy.payment-chain-reuse.test.d.ts.map +1 -0
  159. package/dist/proxy.payment-chain-reuse.test.js +30 -0
  160. package/dist/proxy.payment-chain-reuse.test.js.map +1 -0
  161. package/dist/proxy.solana-resilience.test.d.ts +12 -0
  162. package/dist/proxy.solana-resilience.test.d.ts.map +1 -0
  163. package/dist/proxy.solana-resilience.test.js +39 -0
  164. package/dist/proxy.solana-resilience.test.js.map +1 -0
  165. package/dist/report.d.ts +6 -0
  166. package/dist/report.d.ts.map +1 -0
  167. package/dist/report.js +44 -0
  168. package/dist/report.js.map +1 -0
  169. package/dist/response-cache.advanced.test.d.ts +2 -0
  170. package/dist/response-cache.advanced.test.d.ts.map +1 -0
  171. package/dist/response-cache.advanced.test.js +566 -0
  172. package/dist/response-cache.advanced.test.js.map +1 -0
  173. package/dist/response-cache.d.ts +85 -0
  174. package/dist/response-cache.d.ts.map +1 -0
  175. package/dist/response-cache.edge-cases.test.d.ts +2 -0
  176. package/dist/response-cache.edge-cases.test.d.ts.map +1 -0
  177. package/dist/response-cache.edge-cases.test.js +488 -0
  178. package/dist/response-cache.edge-cases.test.js.map +1 -0
  179. package/dist/response-cache.extreme.test.d.ts +2 -0
  180. package/dist/response-cache.extreme.test.d.ts.map +1 -0
  181. package/dist/response-cache.extreme.test.js +561 -0
  182. package/dist/response-cache.extreme.test.js.map +1 -0
  183. package/dist/response-cache.js +240 -0
  184. package/dist/response-cache.js.map +1 -0
  185. package/dist/response-cache.test.d.ts +2 -0
  186. package/dist/response-cache.test.d.ts.map +1 -0
  187. package/dist/response-cache.test.js +242 -0
  188. package/dist/response-cache.test.js.map +1 -0
  189. package/dist/retry.d.ts +42 -0
  190. package/dist/retry.d.ts.map +1 -0
  191. package/dist/retry.js +99 -0
  192. package/dist/retry.js.map +1 -0
  193. package/dist/router/config.d.ts +11 -0
  194. package/dist/router/config.d.ts.map +1 -0
  195. package/dist/router/config.js +1215 -0
  196. package/dist/router/config.js.map +1 -0
  197. package/dist/router/index.d.ts +18 -0
  198. package/dist/router/index.d.ts.map +1 -0
  199. package/dist/router/index.js +19 -0
  200. package/dist/router/index.js.map +1 -0
  201. package/dist/router/llm-classifier.d.ts +29 -0
  202. package/dist/router/llm-classifier.d.ts.map +1 -0
  203. package/dist/router/llm-classifier.js +99 -0
  204. package/dist/router/llm-classifier.js.map +1 -0
  205. package/dist/router/rules.d.ts +12 -0
  206. package/dist/router/rules.d.ts.map +1 -0
  207. package/dist/router/rules.js +202 -0
  208. package/dist/router/rules.js.map +1 -0
  209. package/dist/router/selector.d.ts +58 -0
  210. package/dist/router/selector.d.ts.map +1 -0
  211. package/dist/router/selector.js +165 -0
  212. package/dist/router/selector.js.map +1 -0
  213. package/dist/router/selector.test.d.ts +2 -0
  214. package/dist/router/selector.test.d.ts.map +1 -0
  215. package/dist/router/selector.test.js +67 -0
  216. package/dist/router/selector.test.js.map +1 -0
  217. package/dist/router/strategy.d.ts +19 -0
  218. package/dist/router/strategy.d.ts.map +1 -0
  219. package/dist/router/strategy.js +138 -0
  220. package/dist/router/strategy.js.map +1 -0
  221. package/dist/router/strategy.test.d.ts +2 -0
  222. package/dist/router/strategy.test.d.ts.map +1 -0
  223. package/dist/router/strategy.test.js +131 -0
  224. package/dist/router/strategy.test.js.map +1 -0
  225. package/dist/router/types.d.ts +127 -0
  226. package/dist/router/types.d.ts.map +1 -0
  227. package/dist/router/types.js +11 -0
  228. package/dist/router/types.js.map +1 -0
  229. package/dist/session.d.ts +124 -0
  230. package/dist/session.d.ts.map +1 -0
  231. package/dist/session.js +256 -0
  232. package/dist/session.js.map +1 -0
  233. package/dist/session.test.d.ts +2 -0
  234. package/dist/session.test.d.ts.map +1 -0
  235. package/dist/session.test.js +163 -0
  236. package/dist/session.test.js.map +1 -0
  237. package/dist/solana-balance.d.ts +48 -0
  238. package/dist/solana-balance.d.ts.map +1 -0
  239. package/dist/solana-balance.js +142 -0
  240. package/dist/solana-balance.js.map +1 -0
  241. package/dist/spend-control.d.ts +112 -0
  242. package/dist/spend-control.d.ts.map +1 -0
  243. package/dist/spend-control.js +278 -0
  244. package/dist/spend-control.js.map +1 -0
  245. package/dist/spend-control.test.d.ts +5 -0
  246. package/dist/spend-control.test.d.ts.map +1 -0
  247. package/dist/spend-control.test.js +210 -0
  248. package/dist/spend-control.test.js.map +1 -0
  249. package/dist/stats.d.ts +64 -0
  250. package/dist/stats.d.ts.map +1 -0
  251. package/dist/stats.js +295 -0
  252. package/dist/stats.js.map +1 -0
  253. package/dist/types.d.ts +150 -0
  254. package/dist/types.d.ts.map +1 -0
  255. package/dist/types.js +9 -0
  256. package/dist/types.js.map +1 -0
  257. package/dist/update-hint.test.d.ts +9 -0
  258. package/dist/update-hint.test.d.ts.map +1 -0
  259. package/dist/update-hint.test.js +156 -0
  260. package/dist/update-hint.test.js.map +1 -0
  261. package/dist/updater.d.ts +10 -0
  262. package/dist/updater.d.ts.map +1 -0
  263. package/dist/updater.js +55 -0
  264. package/dist/updater.js.map +1 -0
  265. package/dist/version.d.ts +3 -0
  266. package/dist/version.d.ts.map +1 -0
  267. package/dist/version.js +16 -0
  268. package/dist/version.js.map +1 -0
  269. package/dist/wallet.d.ts +52 -0
  270. package/dist/wallet.d.ts.map +1 -0
  271. package/dist/wallet.js +93 -0
  272. package/dist/wallet.js.map +1 -0
  273. package/dist/wallet.test.d.ts +6 -0
  274. package/dist/wallet.test.d.ts.map +1 -0
  275. package/dist/wallet.test.js +117 -0
  276. package/dist/wallet.test.js.map +1 -0
  277. package/dist/x402-sdk.test.d.ts +6 -0
  278. package/dist/x402-sdk.test.d.ts.map +1 -0
  279. package/dist/x402-sdk.test.js +161 -0
  280. package/dist/x402-sdk.test.js.map +1 -0
  281. package/package.json +2 -2
  282. package/scripts/e2e-multiturn.mjs +4 -1
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Response Cache for LLM Completions
3
+ *
4
+ * Caches LLM responses by request hash (model + messages + params).
5
+ * Inspired by LiteLLM's caching system. Returns cached responses for
6
+ * identical requests, saving both cost and latency.
7
+ *
8
+ * Features:
9
+ * - TTL-based expiration (default 10 minutes)
10
+ * - LRU eviction when cache is full
11
+ * - Size limits per item (1MB max)
12
+ * - Heap-based expiration tracking for efficient pruning
13
+ */
14
+ export type CachedLLMResponse = {
15
+ body: Buffer;
16
+ status: number;
17
+ headers: Record<string, string>;
18
+ model: string;
19
+ cachedAt: number;
20
+ expiresAt: number;
21
+ };
22
+ export type ResponseCacheConfig = {
23
+ /** Maximum number of cached responses. Default: 200 */
24
+ maxSize?: number;
25
+ /** Default TTL in seconds. Default: 600 (10 minutes) */
26
+ defaultTTL?: number;
27
+ /** Maximum size per cached item in bytes. Default: 1MB */
28
+ maxItemSize?: number;
29
+ /** Enable/disable cache. Default: true */
30
+ enabled?: boolean;
31
+ };
32
+ export declare class ResponseCache {
33
+ private cache;
34
+ private expirationHeap;
35
+ private config;
36
+ private stats;
37
+ constructor(config?: ResponseCacheConfig);
38
+ /**
39
+ * Generate cache key from request body.
40
+ * Hashes: model + messages + temperature + max_tokens + other params
41
+ */
42
+ static generateKey(body: Buffer | string): string;
43
+ /**
44
+ * Check if caching is enabled for this request.
45
+ * Respects cache control headers and request params.
46
+ */
47
+ shouldCache(body: Buffer | string, headers?: Record<string, string>): boolean;
48
+ /**
49
+ * Get cached response if available and not expired.
50
+ */
51
+ get(key: string): CachedLLMResponse | undefined;
52
+ /**
53
+ * Cache a response with optional custom TTL.
54
+ */
55
+ set(key: string, response: {
56
+ body: Buffer;
57
+ status: number;
58
+ headers: Record<string, string>;
59
+ model: string;
60
+ }, ttlSeconds?: number): void;
61
+ /**
62
+ * Evict expired and oldest entries to make room.
63
+ */
64
+ private evict;
65
+ /**
66
+ * Get cache statistics.
67
+ */
68
+ getStats(): {
69
+ size: number;
70
+ maxSize: number;
71
+ hits: number;
72
+ misses: number;
73
+ evictions: number;
74
+ hitRate: string;
75
+ };
76
+ /**
77
+ * Clear all cached entries.
78
+ */
79
+ clear(): void;
80
+ /**
81
+ * Check if cache is enabled.
82
+ */
83
+ isEnabled(): boolean;
84
+ }
85
+ //# sourceMappingURL=response-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-cache.d.ts","sourceRoot":"","sources":["../src/response-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA+DF,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,MAAM,CAAgC;IAG9C,OAAO,CAAC,KAAK,CAIX;gBAEU,MAAM,GAAE,mBAAwB;IAQ5C;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAcjD;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAqB7E;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAkB/C;;OAEG;IACH,GAAG,CACD,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC;KACf,EACD,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI;IAkCP;;OAEG;IACH,OAAO,CAAC,KAAK;IAsCb;;OAEG;IACH,QAAQ,IAAI;QACV,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB;IAcD;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,SAAS,IAAI,OAAO;CAGrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=response-cache.edge-cases.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-cache.edge-cases.test.d.ts","sourceRoot":"","sources":["../src/response-cache.edge-cases.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,488 @@
1
+ import { describe, it, expect, beforeEach, vi } from "vitest";
2
+ import { ResponseCache } from "./response-cache.js";
3
+ describe("ResponseCache Edge Cases", () => {
4
+ let cache;
5
+ beforeEach(() => {
6
+ cache = new ResponseCache();
7
+ });
8
+ describe("generateKey edge cases", () => {
9
+ it("should handle empty body", () => {
10
+ expect(() => ResponseCache.generateKey("")).not.toThrow();
11
+ expect(ResponseCache.generateKey("")).toHaveLength(32);
12
+ });
13
+ it("should handle invalid JSON", () => {
14
+ expect(() => ResponseCache.generateKey("not json {{{")).not.toThrow();
15
+ expect(ResponseCache.generateKey("not json {{{")).toHaveLength(32);
16
+ });
17
+ it("should handle empty object", () => {
18
+ expect(ResponseCache.generateKey("{}")).toHaveLength(32);
19
+ });
20
+ it("should handle null values in messages", () => {
21
+ const body = JSON.stringify({
22
+ model: "gpt-4",
23
+ messages: [{ role: "user", content: null }],
24
+ });
25
+ expect(() => ResponseCache.generateKey(body)).not.toThrow();
26
+ });
27
+ it("should handle empty messages array", () => {
28
+ const body = JSON.stringify({ model: "gpt-4", messages: [] });
29
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
30
+ });
31
+ it("should handle missing model field", () => {
32
+ const body = JSON.stringify({ messages: [{ role: "user", content: "hi" }] });
33
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
34
+ });
35
+ it("should handle unicode characters", () => {
36
+ const body = JSON.stringify({
37
+ model: "gpt-4",
38
+ messages: [{ role: "user", content: "你好世界 🚀 émoji" }],
39
+ });
40
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
41
+ });
42
+ it("should handle very long content", () => {
43
+ const longContent = "a".repeat(100000);
44
+ const body = JSON.stringify({
45
+ model: "gpt-4",
46
+ messages: [{ role: "user", content: longContent }],
47
+ });
48
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
49
+ });
50
+ it("should handle nested objects in messages", () => {
51
+ const body = JSON.stringify({
52
+ model: "gpt-4",
53
+ messages: [
54
+ {
55
+ role: "user",
56
+ content: [
57
+ { type: "text", text: "hello" },
58
+ { type: "image_url", image_url: { url: "data:..." } },
59
+ ],
60
+ },
61
+ ],
62
+ });
63
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
64
+ });
65
+ it("should handle special characters in content", () => {
66
+ const body = JSON.stringify({
67
+ model: "gpt-4",
68
+ messages: [{ role: "user", content: 'line1\nline2\ttab\\backslash"quote' }],
69
+ });
70
+ expect(ResponseCache.generateKey(body)).toHaveLength(32);
71
+ });
72
+ it("should produce same key regardless of field order", () => {
73
+ const body1 = JSON.stringify({ model: "gpt-4", temperature: 0.7 });
74
+ const body2 = JSON.stringify({ temperature: 0.7, model: "gpt-4" });
75
+ expect(ResponseCache.generateKey(body1)).toBe(ResponseCache.generateKey(body2));
76
+ });
77
+ });
78
+ describe("shouldCache edge cases", () => {
79
+ it("should handle empty headers object", () => {
80
+ const body = JSON.stringify({ model: "gpt-4" });
81
+ expect(cache.shouldCache(body, {})).toBe(true);
82
+ });
83
+ it("should handle undefined headers", () => {
84
+ const body = JSON.stringify({ model: "gpt-4" });
85
+ expect(cache.shouldCache(body, undefined)).toBe(true);
86
+ });
87
+ it("should handle mixed case Cache-Control header", () => {
88
+ const body = JSON.stringify({ model: "gpt-4" });
89
+ // Headers should be lowercase in HTTP/2, but test robustness
90
+ expect(cache.shouldCache(body, { "cache-control": "NO-CACHE" })).toBe(true); // only checks "no-cache"
91
+ expect(cache.shouldCache(body, { "cache-control": "no-cache, no-store" })).toBe(false);
92
+ });
93
+ it("should handle cache-control with extra spaces", () => {
94
+ const body = JSON.stringify({ model: "gpt-4" });
95
+ expect(cache.shouldCache(body, { "cache-control": " no-cache " })).toBe(false);
96
+ });
97
+ it("should handle invalid JSON in body gracefully", () => {
98
+ expect(cache.shouldCache("not json")).toBe(true);
99
+ });
100
+ it("should handle Buffer body", () => {
101
+ const body = Buffer.from(JSON.stringify({ model: "gpt-4" }));
102
+ expect(cache.shouldCache(body)).toBe(true);
103
+ });
104
+ });
105
+ describe("set/get edge cases", () => {
106
+ it("should handle zero-byte response body", () => {
107
+ cache.set("empty", {
108
+ body: Buffer.from(""),
109
+ status: 200,
110
+ headers: {},
111
+ model: "gpt-4",
112
+ });
113
+ const cached = cache.get("empty");
114
+ expect(cached).toBeDefined();
115
+ expect(cached.body.length).toBe(0);
116
+ });
117
+ it("should handle binary response body", () => {
118
+ const binaryData = Buffer.from([0x00, 0x01, 0x02, 0xff, 0xfe]);
119
+ cache.set("binary", {
120
+ body: binaryData,
121
+ status: 200,
122
+ headers: {},
123
+ model: "gpt-4",
124
+ });
125
+ const cached = cache.get("binary");
126
+ expect(cached.body).toEqual(binaryData);
127
+ });
128
+ it("should handle all 4xx status codes", () => {
129
+ for (const status of [400, 401, 403, 404, 429, 499]) {
130
+ cache.set(`error-${status}`, {
131
+ body: Buffer.from("error"),
132
+ status,
133
+ headers: {},
134
+ model: "gpt-4",
135
+ });
136
+ expect(cache.get(`error-${status}`)).toBeUndefined();
137
+ }
138
+ });
139
+ it("should handle all 5xx status codes", () => {
140
+ for (const status of [500, 502, 503, 504]) {
141
+ cache.set(`error-${status}`, {
142
+ body: Buffer.from("error"),
143
+ status,
144
+ headers: {},
145
+ model: "gpt-4",
146
+ });
147
+ expect(cache.get(`error-${status}`)).toBeUndefined();
148
+ }
149
+ });
150
+ it("should cache 2xx status codes", () => {
151
+ for (const status of [200, 201, 204]) {
152
+ cache.set(`ok-${status}`, {
153
+ body: Buffer.from("ok"),
154
+ status,
155
+ headers: {},
156
+ model: "gpt-4",
157
+ });
158
+ expect(cache.get(`ok-${status}`)).toBeDefined();
159
+ }
160
+ });
161
+ it("should handle 3xx status codes (redirects)", () => {
162
+ // 3xx are < 400, so they should be cached
163
+ cache.set("redirect", {
164
+ body: Buffer.from("redirect"),
165
+ status: 302,
166
+ headers: {},
167
+ model: "gpt-4",
168
+ });
169
+ expect(cache.get("redirect")).toBeDefined();
170
+ });
171
+ it("should handle empty string key", () => {
172
+ cache.set("", {
173
+ body: Buffer.from("test"),
174
+ status: 200,
175
+ headers: {},
176
+ model: "gpt-4",
177
+ });
178
+ expect(cache.get("")).toBeDefined();
179
+ });
180
+ it("should handle very long key", () => {
181
+ const longKey = "k".repeat(10000);
182
+ cache.set(longKey, {
183
+ body: Buffer.from("test"),
184
+ status: 200,
185
+ headers: {},
186
+ model: "gpt-4",
187
+ });
188
+ expect(cache.get(longKey)).toBeDefined();
189
+ });
190
+ it("should handle special characters in key", () => {
191
+ const specialKey = "key/with:special?chars&more=stuff";
192
+ cache.set(specialKey, {
193
+ body: Buffer.from("test"),
194
+ status: 200,
195
+ headers: {},
196
+ model: "gpt-4",
197
+ });
198
+ expect(cache.get(specialKey)).toBeDefined();
199
+ });
200
+ it("should overwrite existing key", () => {
201
+ cache.set("key", {
202
+ body: Buffer.from("first"),
203
+ status: 200,
204
+ headers: {},
205
+ model: "gpt-4",
206
+ });
207
+ cache.set("key", {
208
+ body: Buffer.from("second"),
209
+ status: 200,
210
+ headers: {},
211
+ model: "gpt-4",
212
+ });
213
+ expect(cache.get("key").body.toString()).toBe("second");
214
+ });
215
+ it("should preserve headers with special values", () => {
216
+ const headers = {
217
+ "content-type": "application/json; charset=utf-8",
218
+ "x-custom": "value with spaces",
219
+ "x-empty": "",
220
+ };
221
+ cache.set("headers", {
222
+ body: Buffer.from("test"),
223
+ status: 200,
224
+ headers,
225
+ model: "gpt-4",
226
+ });
227
+ expect(cache.get("headers").headers).toEqual(headers);
228
+ });
229
+ });
230
+ describe("TTL edge cases", () => {
231
+ it("should handle zero TTL (immediate expiration)", () => {
232
+ vi.useFakeTimers();
233
+ cache.set("zero-ttl", {
234
+ body: Buffer.from("test"),
235
+ status: 200,
236
+ headers: {},
237
+ model: "gpt-4",
238
+ }, 0);
239
+ // With 0 TTL, should expire immediately on next tick
240
+ vi.advanceTimersByTime(1);
241
+ expect(cache.get("zero-ttl")).toBeUndefined();
242
+ vi.useRealTimers();
243
+ });
244
+ it("should handle very large TTL", () => {
245
+ vi.useFakeTimers();
246
+ const oneYear = 365 * 24 * 60 * 60; // seconds
247
+ cache.set("long-ttl", {
248
+ body: Buffer.from("test"),
249
+ status: 200,
250
+ headers: {},
251
+ model: "gpt-4",
252
+ }, oneYear);
253
+ // Advance 364 days
254
+ vi.advanceTimersByTime(364 * 24 * 60 * 60 * 1000);
255
+ expect(cache.get("long-ttl")).toBeDefined();
256
+ // Advance past 1 year
257
+ vi.advanceTimersByTime(2 * 24 * 60 * 60 * 1000);
258
+ expect(cache.get("long-ttl")).toBeUndefined();
259
+ vi.useRealTimers();
260
+ });
261
+ it("should handle negative TTL as immediate expiration", () => {
262
+ vi.useFakeTimers();
263
+ cache.set("negative-ttl", {
264
+ body: Buffer.from("test"),
265
+ status: 200,
266
+ headers: {},
267
+ model: "gpt-4",
268
+ }, -100);
269
+ // Negative TTL means already expired
270
+ expect(cache.get("negative-ttl")).toBeUndefined();
271
+ vi.useRealTimers();
272
+ });
273
+ it("should handle fractional TTL", () => {
274
+ vi.useFakeTimers();
275
+ cache.set("fractional-ttl", {
276
+ body: Buffer.from("test"),
277
+ status: 200,
278
+ headers: {},
279
+ model: "gpt-4",
280
+ }, 0.5);
281
+ vi.advanceTimersByTime(400);
282
+ expect(cache.get("fractional-ttl")).toBeDefined();
283
+ vi.advanceTimersByTime(200);
284
+ expect(cache.get("fractional-ttl")).toBeUndefined();
285
+ vi.useRealTimers();
286
+ });
287
+ });
288
+ describe("capacity edge cases", () => {
289
+ it("should handle maxSize of 0", () => {
290
+ const zeroCache = new ResponseCache({ maxSize: 0 });
291
+ zeroCache.set("key", {
292
+ body: Buffer.from("test"),
293
+ status: 200,
294
+ headers: {},
295
+ model: "gpt-4",
296
+ });
297
+ // With maxSize 0, nothing should be cached
298
+ expect(zeroCache.getStats().size).toBe(0);
299
+ });
300
+ it("should handle maxSize of 1", () => {
301
+ const tinyCache = new ResponseCache({ maxSize: 1 });
302
+ tinyCache.set("first", {
303
+ body: Buffer.from("first"),
304
+ status: 200,
305
+ headers: {},
306
+ model: "gpt-4",
307
+ });
308
+ tinyCache.set("second", {
309
+ body: Buffer.from("second"),
310
+ status: 200,
311
+ headers: {},
312
+ model: "gpt-4",
313
+ });
314
+ expect(tinyCache.getStats().size).toBe(1);
315
+ expect(tinyCache.get("second")).toBeDefined();
316
+ });
317
+ it("should handle rapid sequential sets", () => {
318
+ const smallCache = new ResponseCache({ maxSize: 10 });
319
+ for (let i = 0; i < 100; i++) {
320
+ smallCache.set(`key-${i}`, {
321
+ body: Buffer.from(`response-${i}`),
322
+ status: 200,
323
+ headers: {},
324
+ model: "gpt-4",
325
+ });
326
+ }
327
+ expect(smallCache.getStats().size).toBeLessThanOrEqual(10);
328
+ expect(smallCache.getStats().evictions).toBeGreaterThan(0);
329
+ });
330
+ it("should handle exact capacity boundary", () => {
331
+ const cache5 = new ResponseCache({ maxSize: 5 });
332
+ for (let i = 0; i < 5; i++) {
333
+ cache5.set(`key-${i}`, {
334
+ body: Buffer.from(`response-${i}`),
335
+ status: 200,
336
+ headers: {},
337
+ model: "gpt-4",
338
+ });
339
+ }
340
+ expect(cache5.getStats().size).toBe(5);
341
+ expect(cache5.getStats().evictions).toBe(0);
342
+ // Add one more to trigger eviction
343
+ cache5.set("key-5", {
344
+ body: Buffer.from("response-5"),
345
+ status: 200,
346
+ headers: {},
347
+ model: "gpt-4",
348
+ });
349
+ expect(cache5.getStats().size).toBe(5);
350
+ expect(cache5.getStats().evictions).toBeGreaterThan(0);
351
+ });
352
+ });
353
+ describe("size limit edge cases", () => {
354
+ it("should handle item exactly at maxItemSize", () => {
355
+ // maxItemSize is in bytes
356
+ const cache1kb = new ResponseCache({ maxItemSize: 1024 }); // 1024 bytes = 1KB
357
+ const exactSize = Buffer.alloc(1024); // Exactly 1024 bytes
358
+ cache1kb.set("exact", {
359
+ body: exactSize,
360
+ status: 200,
361
+ headers: {},
362
+ model: "gpt-4",
363
+ });
364
+ // Should be cached (at limit, not over)
365
+ expect(cache1kb.get("exact")).toBeDefined();
366
+ });
367
+ it("should reject item just over maxItemSize", () => {
368
+ // maxItemSize is in bytes
369
+ const cache1kb = new ResponseCache({ maxItemSize: 1024 }); // 1024 bytes
370
+ const overSize = Buffer.alloc(1025); // 1 byte over limit
371
+ cache1kb.set("over", {
372
+ body: overSize,
373
+ status: 200,
374
+ headers: {},
375
+ model: "gpt-4",
376
+ });
377
+ expect(cache1kb.get("over")).toBeUndefined();
378
+ });
379
+ });
380
+ describe("concurrent access patterns", () => {
381
+ it("should handle interleaved get/set operations", () => {
382
+ for (let i = 0; i < 50; i++) {
383
+ cache.set(`key-${i % 10}`, {
384
+ body: Buffer.from(`value-${i}`),
385
+ status: 200,
386
+ headers: {},
387
+ model: "gpt-4",
388
+ });
389
+ const result = cache.get(`key-${(i + 5) % 10}`);
390
+ // Result may or may not exist depending on order
391
+ if (result) {
392
+ expect(result.body).toBeDefined();
393
+ }
394
+ }
395
+ // Should not crash and should have some entries
396
+ expect(cache.getStats().size).toBeGreaterThan(0);
397
+ });
398
+ });
399
+ describe("stats edge cases", () => {
400
+ it("should handle stats with no operations", () => {
401
+ const stats = cache.getStats();
402
+ expect(stats.hits).toBe(0);
403
+ expect(stats.misses).toBe(0);
404
+ expect(stats.hitRate).toBe("0%");
405
+ });
406
+ it("should handle 100% miss rate", () => {
407
+ cache.get("miss1");
408
+ cache.get("miss2");
409
+ cache.get("miss3");
410
+ const stats = cache.getStats();
411
+ expect(stats.hits).toBe(0);
412
+ expect(stats.misses).toBe(3);
413
+ expect(stats.hitRate).toBe("0.0%");
414
+ });
415
+ it("should handle 100% hit rate", () => {
416
+ cache.set("key", {
417
+ body: Buffer.from("test"),
418
+ status: 200,
419
+ headers: {},
420
+ model: "gpt-4",
421
+ });
422
+ cache.get("key");
423
+ cache.get("key");
424
+ cache.get("key");
425
+ const stats = cache.getStats();
426
+ expect(stats.hits).toBe(3);
427
+ expect(stats.misses).toBe(0);
428
+ expect(stats.hitRate).toBe("100.0%");
429
+ });
430
+ });
431
+ describe("clear edge cases", () => {
432
+ it("should handle clear on empty cache", () => {
433
+ expect(() => cache.clear()).not.toThrow();
434
+ expect(cache.getStats().size).toBe(0);
435
+ });
436
+ it("should handle double clear", () => {
437
+ cache.set("key", {
438
+ body: Buffer.from("test"),
439
+ status: 200,
440
+ headers: {},
441
+ model: "gpt-4",
442
+ });
443
+ cache.clear();
444
+ cache.clear();
445
+ expect(cache.getStats().size).toBe(0);
446
+ });
447
+ it("should allow new entries after clear", () => {
448
+ cache.set("before", {
449
+ body: Buffer.from("before"),
450
+ status: 200,
451
+ headers: {},
452
+ model: "gpt-4",
453
+ });
454
+ cache.clear();
455
+ cache.set("after", {
456
+ body: Buffer.from("after"),
457
+ status: 200,
458
+ headers: {},
459
+ model: "gpt-4",
460
+ });
461
+ expect(cache.get("before")).toBeUndefined();
462
+ expect(cache.get("after")).toBeDefined();
463
+ });
464
+ });
465
+ describe("config edge cases", () => {
466
+ it("should handle all config options as undefined", () => {
467
+ const defaultCache = new ResponseCache({
468
+ maxSize: undefined,
469
+ defaultTTL: undefined,
470
+ maxItemSize: undefined,
471
+ enabled: undefined,
472
+ });
473
+ // Should use defaults
474
+ expect(defaultCache.isEnabled()).toBe(true);
475
+ });
476
+ it("should handle partial config", () => {
477
+ const partialCache = new ResponseCache({ maxSize: 50 });
478
+ partialCache.set("key", {
479
+ body: Buffer.from("test"),
480
+ status: 200,
481
+ headers: {},
482
+ model: "gpt-4",
483
+ });
484
+ expect(partialCache.get("key")).toBeDefined();
485
+ });
486
+ });
487
+ });
488
+ //# sourceMappingURL=response-cache.edge-cases.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-cache.edge-cases.test.js","sourceRoot":"","sources":["../src/response-cache.edge-cases.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=response-cache.extreme.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-cache.extreme.test.d.ts","sourceRoot":"","sources":["../src/response-cache.extreme.test.ts"],"names":[],"mappings":""}