@procedures/client 0.0.0-stage → 0.2.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 (777) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +832 -2
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/adapters/http/client/index.d.ts +11 -0
  6. package/dist/adapters/http/client/index.d.ts.map +1 -0
  7. package/dist/adapters/http/client/index.js +18 -0
  8. package/dist/adapters/http/client/index.js.map +1 -0
  9. package/dist/adapters/http/client/transport.d.ts +72 -0
  10. package/dist/adapters/http/client/transport.d.ts.map +1 -0
  11. package/dist/adapters/http/client/transport.js +282 -0
  12. package/dist/adapters/http/client/transport.js.map +1 -0
  13. package/dist/adapters/http/client/types.d.ts +27 -0
  14. package/dist/adapters/http/client/types.d.ts.map +1 -0
  15. package/dist/adapters/http/client/types.js +8 -0
  16. package/dist/adapters/http/client/types.js.map +1 -0
  17. package/dist/adapters/http/index.d.ts +7 -0
  18. package/dist/adapters/http/index.d.ts.map +1 -0
  19. package/dist/adapters/http/index.js +7 -0
  20. package/dist/adapters/http/index.js.map +1 -0
  21. package/dist/adapters/http/server/index.d.ts +9 -0
  22. package/dist/adapters/http/server/index.d.ts.map +1 -0
  23. package/dist/adapters/http/server/index.js +10 -0
  24. package/dist/adapters/http/server/index.js.map +1 -0
  25. package/dist/adapters/http/server/strategies.d.ts +39 -0
  26. package/dist/adapters/http/server/strategies.d.ts.map +1 -0
  27. package/dist/adapters/http/server/strategies.js +90 -0
  28. package/dist/adapters/http/server/strategies.js.map +1 -0
  29. package/dist/adapters/http/server/transport.d.ts +66 -0
  30. package/dist/adapters/http/server/transport.d.ts.map +1 -0
  31. package/dist/adapters/http/server/transport.js +562 -0
  32. package/dist/adapters/http/server/transport.js.map +1 -0
  33. package/dist/adapters/http/server/types.d.ts +71 -0
  34. package/dist/adapters/http/server/types.d.ts.map +1 -0
  35. package/dist/adapters/http/server/types.js +7 -0
  36. package/dist/adapters/http/server/types.js.map +1 -0
  37. package/dist/adapters/http/shared/constants.d.ts +95 -0
  38. package/dist/adapters/http/shared/constants.d.ts.map +1 -0
  39. package/dist/adapters/http/shared/constants.js +102 -0
  40. package/dist/adapters/http/shared/constants.js.map +1 -0
  41. package/dist/adapters/http/shared/errors.d.ts +78 -0
  42. package/dist/adapters/http/shared/errors.d.ts.map +1 -0
  43. package/dist/adapters/http/shared/errors.js +151 -0
  44. package/dist/adapters/http/shared/errors.js.map +1 -0
  45. package/dist/adapters/http/shared/headers.d.ts +122 -0
  46. package/dist/adapters/http/shared/headers.d.ts.map +1 -0
  47. package/dist/adapters/http/shared/headers.js +216 -0
  48. package/dist/adapters/http/shared/headers.js.map +1 -0
  49. package/dist/adapters/http/shared/index.d.ts +12 -0
  50. package/dist/adapters/http/shared/index.d.ts.map +1 -0
  51. package/dist/adapters/http/shared/index.js +17 -0
  52. package/dist/adapters/http/shared/index.js.map +1 -0
  53. package/dist/adapters/http/shared/status-codes.d.ts +92 -0
  54. package/dist/adapters/http/shared/status-codes.d.ts.map +1 -0
  55. package/dist/adapters/http/shared/status-codes.js +189 -0
  56. package/dist/adapters/http/shared/status-codes.js.map +1 -0
  57. package/dist/adapters/http/shared/strategies.d.ts +90 -0
  58. package/dist/adapters/http/shared/strategies.d.ts.map +1 -0
  59. package/dist/adapters/http/shared/strategies.js +180 -0
  60. package/dist/adapters/http/shared/strategies.js.map +1 -0
  61. package/dist/adapters/local/client/index.d.ts +8 -0
  62. package/dist/adapters/local/client/index.d.ts.map +1 -0
  63. package/dist/adapters/local/client/index.js +8 -0
  64. package/dist/adapters/local/client/index.js.map +1 -0
  65. package/dist/adapters/local/client/transport.d.ts +81 -0
  66. package/dist/adapters/local/client/transport.d.ts.map +1 -0
  67. package/dist/adapters/local/client/transport.js +172 -0
  68. package/dist/adapters/local/client/transport.js.map +1 -0
  69. package/dist/adapters/local/client/types.d.ts +39 -0
  70. package/dist/adapters/local/client/types.d.ts.map +1 -0
  71. package/dist/adapters/local/client/types.js +13 -0
  72. package/dist/adapters/local/client/types.js.map +1 -0
  73. package/dist/adapters/metadata.d.ts +10 -0
  74. package/dist/adapters/metadata.d.ts.map +1 -0
  75. package/dist/adapters/metadata.js +19 -0
  76. package/dist/adapters/metadata.js.map +1 -0
  77. package/dist/adapters/mock/client/builder.d.ts +35 -0
  78. package/dist/adapters/mock/client/builder.d.ts.map +1 -0
  79. package/dist/adapters/mock/client/builder.js +58 -0
  80. package/dist/adapters/mock/client/builder.js.map +1 -0
  81. package/dist/adapters/mock/client/index.d.ts +9 -0
  82. package/dist/adapters/mock/client/index.d.ts.map +1 -0
  83. package/dist/adapters/mock/client/index.js +10 -0
  84. package/dist/adapters/mock/client/index.js.map +1 -0
  85. package/dist/adapters/mock/client/transport.d.ts +149 -0
  86. package/dist/adapters/mock/client/transport.d.ts.map +1 -0
  87. package/dist/adapters/mock/client/transport.js +289 -0
  88. package/dist/adapters/mock/client/transport.js.map +1 -0
  89. package/dist/adapters/mock/client/types.d.ts +86 -0
  90. package/dist/adapters/mock/client/types.d.ts.map +1 -0
  91. package/dist/adapters/mock/client/types.js +7 -0
  92. package/dist/adapters/mock/client/types.js.map +1 -0
  93. package/dist/adapters/websocket/client/index.d.ts +9 -0
  94. package/dist/adapters/websocket/client/index.d.ts.map +1 -0
  95. package/dist/adapters/websocket/client/index.js +9 -0
  96. package/dist/adapters/websocket/client/index.js.map +1 -0
  97. package/dist/adapters/websocket/client/transport.d.ts +106 -0
  98. package/dist/adapters/websocket/client/transport.d.ts.map +1 -0
  99. package/dist/adapters/websocket/client/transport.js +647 -0
  100. package/dist/adapters/websocket/client/transport.js.map +1 -0
  101. package/dist/adapters/websocket/client/types.d.ts +192 -0
  102. package/dist/adapters/websocket/client/types.d.ts.map +1 -0
  103. package/dist/adapters/websocket/client/types.js +17 -0
  104. package/dist/adapters/websocket/client/types.js.map +1 -0
  105. package/dist/adapters/websocket/index.d.ts +8 -0
  106. package/dist/adapters/websocket/index.d.ts.map +1 -0
  107. package/dist/adapters/websocket/index.js +8 -0
  108. package/dist/adapters/websocket/index.js.map +1 -0
  109. package/dist/adapters/websocket/server/index.d.ts +8 -0
  110. package/dist/adapters/websocket/server/index.d.ts.map +1 -0
  111. package/dist/adapters/websocket/server/index.js +8 -0
  112. package/dist/adapters/websocket/server/index.js.map +1 -0
  113. package/dist/adapters/websocket/server/transport.d.ts +112 -0
  114. package/dist/adapters/websocket/server/transport.d.ts.map +1 -0
  115. package/dist/adapters/websocket/server/transport.js +619 -0
  116. package/dist/adapters/websocket/server/transport.js.map +1 -0
  117. package/dist/adapters/websocket/server/types.d.ts +140 -0
  118. package/dist/adapters/websocket/server/types.d.ts.map +1 -0
  119. package/dist/adapters/websocket/server/types.js +7 -0
  120. package/dist/adapters/websocket/server/types.js.map +1 -0
  121. package/dist/browser.d.ts +51 -0
  122. package/dist/browser.d.ts.map +1 -0
  123. package/dist/browser.js +89 -0
  124. package/dist/browser.js.map +1 -0
  125. package/dist/client/batch-executor.d.ts +160 -0
  126. package/dist/client/batch-executor.d.ts.map +1 -0
  127. package/dist/client/batch-executor.js +397 -0
  128. package/dist/client/batch-executor.js.map +1 -0
  129. package/dist/client/call-types.d.ts +271 -0
  130. package/dist/client/call-types.d.ts.map +1 -0
  131. package/dist/client/call-types.js +208 -0
  132. package/dist/client/call-types.js.map +1 -0
  133. package/dist/client/client.d.ts +525 -0
  134. package/dist/client/client.d.ts.map +1 -0
  135. package/dist/client/client.js +1011 -0
  136. package/dist/client/client.js.map +1 -0
  137. package/dist/client/consumption.d.ts +191 -0
  138. package/dist/client/consumption.d.ts.map +1 -0
  139. package/dist/client/consumption.js +98 -0
  140. package/dist/client/consumption.js.map +1 -0
  141. package/dist/client/context.d.ts +116 -0
  142. package/dist/client/context.d.ts.map +1 -0
  143. package/dist/client/context.js +111 -0
  144. package/dist/client/context.js.map +1 -0
  145. package/dist/client/errors/codes.d.ts +71 -0
  146. package/dist/client/errors/codes.d.ts.map +1 -0
  147. package/dist/client/errors/codes.js +81 -0
  148. package/dist/client/errors/codes.js.map +1 -0
  149. package/dist/client/errors/factory.d.ts +102 -0
  150. package/dist/client/errors/factory.d.ts.map +1 -0
  151. package/dist/client/errors/factory.js +210 -0
  152. package/dist/client/errors/factory.js.map +1 -0
  153. package/dist/client/errors/http-errors.d.ts +47 -0
  154. package/dist/client/errors/http-errors.d.ts.map +1 -0
  155. package/dist/client/errors/http-errors.js +548 -0
  156. package/dist/client/errors/http-errors.js.map +1 -0
  157. package/dist/client/errors/http-status.d.ts +73 -0
  158. package/dist/client/errors/http-status.d.ts.map +1 -0
  159. package/dist/client/errors/http-status.js +79 -0
  160. package/dist/client/errors/http-status.js.map +1 -0
  161. package/dist/client/errors/index.d.ts +36 -0
  162. package/dist/client/errors/index.d.ts.map +1 -0
  163. package/dist/client/errors/index.js +40 -0
  164. package/dist/client/errors/index.js.map +1 -0
  165. package/dist/client/errors/registry.d.ts +38 -0
  166. package/dist/client/errors/registry.d.ts.map +1 -0
  167. package/dist/client/errors/registry.js +535 -0
  168. package/dist/client/errors/registry.js.map +1 -0
  169. package/dist/client/errors/types.d.ts +112 -0
  170. package/dist/client/errors/types.d.ts.map +1 -0
  171. package/dist/client/errors/types.js +45 -0
  172. package/dist/client/errors/types.js.map +1 -0
  173. package/dist/client/index.d.ts +44 -0
  174. package/dist/client/index.d.ts.map +1 -0
  175. package/dist/client/index.js +36 -0
  176. package/dist/client/index.js.map +1 -0
  177. package/dist/client/middleware/auth.d.ts +90 -0
  178. package/dist/client/middleware/auth.d.ts.map +1 -0
  179. package/dist/client/middleware/auth.js +98 -0
  180. package/dist/client/middleware/auth.js.map +1 -0
  181. package/dist/client/middleware/batching.d.ts +102 -0
  182. package/dist/client/middleware/batching.d.ts.map +1 -0
  183. package/dist/client/middleware/batching.js +245 -0
  184. package/dist/client/middleware/batching.js.map +1 -0
  185. package/dist/client/middleware/cache.d.ts +124 -0
  186. package/dist/client/middleware/cache.d.ts.map +1 -0
  187. package/dist/client/middleware/cache.js +208 -0
  188. package/dist/client/middleware/cache.js.map +1 -0
  189. package/dist/client/middleware/circuit-breaker.d.ts +113 -0
  190. package/dist/client/middleware/circuit-breaker.d.ts.map +1 -0
  191. package/dist/client/middleware/circuit-breaker.js +236 -0
  192. package/dist/client/middleware/circuit-breaker.js.map +1 -0
  193. package/dist/client/middleware/contexts.d.ts +199 -0
  194. package/dist/client/middleware/contexts.d.ts.map +1 -0
  195. package/dist/client/middleware/contexts.js +74 -0
  196. package/dist/client/middleware/contexts.js.map +1 -0
  197. package/dist/client/middleware/items.d.ts +37 -0
  198. package/dist/client/middleware/items.d.ts.map +1 -0
  199. package/dist/client/middleware/items.js +100 -0
  200. package/dist/client/middleware/items.js.map +1 -0
  201. package/dist/client/middleware/lru.d.ts +32 -0
  202. package/dist/client/middleware/lru.d.ts.map +1 -0
  203. package/dist/client/middleware/lru.js +62 -0
  204. package/dist/client/middleware/lru.js.map +1 -0
  205. package/dist/client/middleware/pagination.d.ts +114 -0
  206. package/dist/client/middleware/pagination.d.ts.map +1 -0
  207. package/dist/client/middleware/pagination.js +148 -0
  208. package/dist/client/middleware/pagination.js.map +1 -0
  209. package/dist/client/middleware/rate-limit.d.ts +105 -0
  210. package/dist/client/middleware/rate-limit.d.ts.map +1 -0
  211. package/dist/client/middleware/rate-limit.js +222 -0
  212. package/dist/client/middleware/rate-limit.js.map +1 -0
  213. package/dist/client/middleware/retry.d.ts +100 -0
  214. package/dist/client/middleware/retry.d.ts.map +1 -0
  215. package/dist/client/middleware/retry.js +150 -0
  216. package/dist/client/middleware/retry.js.map +1 -0
  217. package/dist/client/middleware/timeout.d.ts +91 -0
  218. package/dist/client/middleware/timeout.d.ts.map +1 -0
  219. package/dist/client/middleware/timeout.js +253 -0
  220. package/dist/client/middleware/timeout.js.map +1 -0
  221. package/dist/client/middleware/tracing.d.ts +118 -0
  222. package/dist/client/middleware/tracing.d.ts.map +1 -0
  223. package/dist/client/middleware/tracing.js +152 -0
  224. package/dist/client/middleware/tracing.js.map +1 -0
  225. package/dist/client/route-resolver.d.ts +181 -0
  226. package/dist/client/route-resolver.d.ts.map +1 -0
  227. package/dist/client/route-resolver.js +300 -0
  228. package/dist/client/route-resolver.js.map +1 -0
  229. package/dist/client/typed-method.d.ts +29 -0
  230. package/dist/client/typed-method.d.ts.map +1 -0
  231. package/dist/client/typed-method.js +36 -0
  232. package/dist/client/typed-method.js.map +1 -0
  233. package/dist/client/typed.d.ts +102 -0
  234. package/dist/client/typed.d.ts.map +1 -0
  235. package/dist/client/typed.js +52 -0
  236. package/dist/client/typed.js.map +1 -0
  237. package/dist/client/types.d.ts +305 -0
  238. package/dist/client/types.d.ts.map +1 -0
  239. package/dist/client/types.js +26 -0
  240. package/dist/client/types.js.map +1 -0
  241. package/dist/client/validation/index.d.ts +34 -0
  242. package/dist/client/validation/index.d.ts.map +1 -0
  243. package/dist/client/validation/index.js +36 -0
  244. package/dist/client/validation/index.js.map +1 -0
  245. package/dist/client/validation/middleware.d.ts +82 -0
  246. package/dist/client/validation/middleware.d.ts.map +1 -0
  247. package/dist/client/validation/middleware.js +138 -0
  248. package/dist/client/validation/middleware.js.map +1 -0
  249. package/dist/client/validation/types.d.ts +118 -0
  250. package/dist/client/validation/types.d.ts.map +1 -0
  251. package/dist/client/validation/types.js +59 -0
  252. package/dist/client/validation/types.js.map +1 -0
  253. package/dist/collections/async/async-queue.d.ts +144 -0
  254. package/dist/collections/async/async-queue.d.ts.map +1 -0
  255. package/dist/collections/async/async-queue.js +347 -0
  256. package/dist/collections/async/async-queue.js.map +1 -0
  257. package/dist/collections/async/channels.d.ts +188 -0
  258. package/dist/collections/async/channels.d.ts.map +1 -0
  259. package/dist/collections/async/channels.js +312 -0
  260. package/dist/collections/async/channels.js.map +1 -0
  261. package/dist/collections/behaviors/bounded.d.ts +79 -0
  262. package/dist/collections/behaviors/bounded.d.ts.map +1 -0
  263. package/dist/collections/behaviors/bounded.js +384 -0
  264. package/dist/collections/behaviors/bounded.js.map +1 -0
  265. package/dist/collections/behaviors/evented.d.ts +154 -0
  266. package/dist/collections/behaviors/evented.d.ts.map +1 -0
  267. package/dist/collections/behaviors/evented.js +299 -0
  268. package/dist/collections/behaviors/evented.js.map +1 -0
  269. package/dist/collections/behaviors/lru.d.ts +84 -0
  270. package/dist/collections/behaviors/lru.d.ts.map +1 -0
  271. package/dist/collections/behaviors/lru.js +330 -0
  272. package/dist/collections/behaviors/lru.js.map +1 -0
  273. package/dist/collections/behaviors/readonly.d.ts +73 -0
  274. package/dist/collections/behaviors/readonly.d.ts.map +1 -0
  275. package/dist/collections/behaviors/readonly.js +158 -0
  276. package/dist/collections/behaviors/readonly.js.map +1 -0
  277. package/dist/collections/behaviors/safe.d.ts +163 -0
  278. package/dist/collections/behaviors/safe.d.ts.map +1 -0
  279. package/dist/collections/behaviors/safe.js +172 -0
  280. package/dist/collections/behaviors/safe.js.map +1 -0
  281. package/dist/collections/behaviors/synchronized.d.ts +88 -0
  282. package/dist/collections/behaviors/synchronized.d.ts.map +1 -0
  283. package/dist/collections/behaviors/synchronized.js +294 -0
  284. package/dist/collections/behaviors/synchronized.js.map +1 -0
  285. package/dist/collections/behaviors/ttl.d.ts +118 -0
  286. package/dist/collections/behaviors/ttl.d.ts.map +1 -0
  287. package/dist/collections/behaviors/ttl.js +338 -0
  288. package/dist/collections/behaviors/ttl.js.map +1 -0
  289. package/dist/collections/core/effects.d.ts +176 -0
  290. package/dist/collections/core/effects.d.ts.map +1 -0
  291. package/dist/collections/core/effects.js +180 -0
  292. package/dist/collections/core/effects.js.map +1 -0
  293. package/dist/collections/core/events.d.ts +192 -0
  294. package/dist/collections/core/events.d.ts.map +1 -0
  295. package/dist/collections/core/events.js +291 -0
  296. package/dist/collections/core/events.js.map +1 -0
  297. package/dist/collections/core/middleware.d.ts +231 -0
  298. package/dist/collections/core/middleware.d.ts.map +1 -0
  299. package/dist/collections/core/middleware.js +161 -0
  300. package/dist/collections/core/middleware.js.map +1 -0
  301. package/dist/collections/core/policies.d.ts +220 -0
  302. package/dist/collections/core/policies.d.ts.map +1 -0
  303. package/dist/collections/core/policies.js +48 -0
  304. package/dist/collections/core/policies.js.map +1 -0
  305. package/dist/collections/core/traits.d.ts +142 -0
  306. package/dist/collections/core/traits.d.ts.map +1 -0
  307. package/dist/collections/core/traits.js +8 -0
  308. package/dist/collections/core/traits.js.map +1 -0
  309. package/dist/collections/examples.d.ts +13 -0
  310. package/dist/collections/examples.d.ts.map +1 -0
  311. package/dist/collections/examples.js +302 -0
  312. package/dist/collections/examples.js.map +1 -0
  313. package/dist/collections/fx/collectors.d.ts +190 -0
  314. package/dist/collections/fx/collectors.d.ts.map +1 -0
  315. package/dist/collections/fx/collectors.js +369 -0
  316. package/dist/collections/fx/collectors.js.map +1 -0
  317. package/dist/collections/fx/iter.d.ts +166 -0
  318. package/dist/collections/fx/iter.d.ts.map +1 -0
  319. package/dist/collections/fx/iter.js +421 -0
  320. package/dist/collections/fx/iter.js.map +1 -0
  321. package/dist/collections/impl/array-deque.d.ts +107 -0
  322. package/dist/collections/impl/array-deque.d.ts.map +1 -0
  323. package/dist/collections/impl/array-deque.js +381 -0
  324. package/dist/collections/impl/array-deque.js.map +1 -0
  325. package/dist/collections/impl/array-list.d.ts +101 -0
  326. package/dist/collections/impl/array-list.d.ts.map +1 -0
  327. package/dist/collections/impl/array-list.js +387 -0
  328. package/dist/collections/impl/array-list.js.map +1 -0
  329. package/dist/collections/impl/hash-map.d.ts +141 -0
  330. package/dist/collections/impl/hash-map.d.ts.map +1 -0
  331. package/dist/collections/impl/hash-map.js +450 -0
  332. package/dist/collections/impl/hash-map.js.map +1 -0
  333. package/dist/collections/impl/hash-set.d.ts +125 -0
  334. package/dist/collections/impl/hash-set.d.ts.map +1 -0
  335. package/dist/collections/impl/hash-set.js +264 -0
  336. package/dist/collections/impl/hash-set.js.map +1 -0
  337. package/dist/collections/impl/linked-hash-map.d.ts +141 -0
  338. package/dist/collections/impl/linked-hash-map.d.ts.map +1 -0
  339. package/dist/collections/impl/linked-hash-map.js +472 -0
  340. package/dist/collections/impl/linked-hash-map.js.map +1 -0
  341. package/dist/collections/impl/linked-list.d.ts +109 -0
  342. package/dist/collections/impl/linked-list.d.ts.map +1 -0
  343. package/dist/collections/impl/linked-list.js +491 -0
  344. package/dist/collections/impl/linked-list.js.map +1 -0
  345. package/dist/collections/impl/priority-queue.d.ts +134 -0
  346. package/dist/collections/impl/priority-queue.d.ts.map +1 -0
  347. package/dist/collections/impl/priority-queue.js +336 -0
  348. package/dist/collections/impl/priority-queue.js.map +1 -0
  349. package/dist/collections/impl/tree-map.d.ts +146 -0
  350. package/dist/collections/impl/tree-map.d.ts.map +1 -0
  351. package/dist/collections/impl/tree-map.js +781 -0
  352. package/dist/collections/impl/tree-map.js.map +1 -0
  353. package/dist/collections/impl/tree-set.d.ts +112 -0
  354. package/dist/collections/impl/tree-set.d.ts.map +1 -0
  355. package/dist/collections/impl/tree-set.js +374 -0
  356. package/dist/collections/impl/tree-set.js.map +1 -0
  357. package/dist/collections/index.d.ts +105 -0
  358. package/dist/collections/index.d.ts.map +1 -0
  359. package/dist/collections/index.js +135 -0
  360. package/dist/collections/index.js.map +1 -0
  361. package/dist/collections/interfaces/collection.d.ts +119 -0
  362. package/dist/collections/interfaces/collection.d.ts.map +1 -0
  363. package/dist/collections/interfaces/collection.js +8 -0
  364. package/dist/collections/interfaces/collection.js.map +1 -0
  365. package/dist/collections/interfaces/list.d.ts +247 -0
  366. package/dist/collections/interfaces/list.d.ts.map +1 -0
  367. package/dist/collections/interfaces/list.js +8 -0
  368. package/dist/collections/interfaces/list.js.map +1 -0
  369. package/dist/collections/interfaces/map.d.ts +344 -0
  370. package/dist/collections/interfaces/map.d.ts.map +1 -0
  371. package/dist/collections/interfaces/map.js +8 -0
  372. package/dist/collections/interfaces/map.js.map +1 -0
  373. package/dist/collections/interfaces/queue.d.ts +304 -0
  374. package/dist/collections/interfaces/queue.d.ts.map +1 -0
  375. package/dist/collections/interfaces/queue.js +8 -0
  376. package/dist/collections/interfaces/queue.js.map +1 -0
  377. package/dist/collections/interfaces/set.d.ts +137 -0
  378. package/dist/collections/interfaces/set.d.ts.map +1 -0
  379. package/dist/collections/interfaces/set.js +8 -0
  380. package/dist/collections/interfaces/set.js.map +1 -0
  381. package/dist/collections/storage/api.d.ts +109 -0
  382. package/dist/collections/storage/api.d.ts.map +1 -0
  383. package/dist/collections/storage/api.js +182 -0
  384. package/dist/collections/storage/api.js.map +1 -0
  385. package/dist/collections/storage/hybrid.d.ts +164 -0
  386. package/dist/collections/storage/hybrid.d.ts.map +1 -0
  387. package/dist/collections/storage/hybrid.js +416 -0
  388. package/dist/collections/storage/hybrid.js.map +1 -0
  389. package/dist/collections/storage/index.d.ts +16 -0
  390. package/dist/collections/storage/index.d.ts.map +1 -0
  391. package/dist/collections/storage/index.js +13 -0
  392. package/dist/collections/storage/index.js.map +1 -0
  393. package/dist/collections/storage/interface.d.ts +141 -0
  394. package/dist/collections/storage/interface.d.ts.map +1 -0
  395. package/dist/collections/storage/interface.js +23 -0
  396. package/dist/collections/storage/interface.js.map +1 -0
  397. package/dist/collections/storage/memory.d.ts +68 -0
  398. package/dist/collections/storage/memory.d.ts.map +1 -0
  399. package/dist/collections/storage/memory.js +154 -0
  400. package/dist/collections/storage/memory.js.map +1 -0
  401. package/dist/collections/utils/defaults.d.ts +135 -0
  402. package/dist/collections/utils/defaults.d.ts.map +1 -0
  403. package/dist/collections/utils/defaults.js +322 -0
  404. package/dist/collections/utils/defaults.js.map +1 -0
  405. package/dist/collections/utils/factories.d.ts +144 -0
  406. package/dist/collections/utils/factories.d.ts.map +1 -0
  407. package/dist/collections/utils/factories.js +293 -0
  408. package/dist/collections/utils/factories.js.map +1 -0
  409. package/dist/collections/utils/helpers.d.ts +137 -0
  410. package/dist/collections/utils/helpers.d.ts.map +1 -0
  411. package/dist/collections/utils/helpers.js +221 -0
  412. package/dist/collections/utils/helpers.js.map +1 -0
  413. package/dist/collections.d.ts +12 -0
  414. package/dist/collections.d.ts.map +1 -0
  415. package/dist/collections.js +10 -0
  416. package/dist/collections.js.map +1 -0
  417. package/dist/components/define.d.ts +134 -0
  418. package/dist/components/define.d.ts.map +1 -0
  419. package/dist/components/define.js +486 -0
  420. package/dist/components/define.js.map +1 -0
  421. package/dist/components/index.d.ts +39 -0
  422. package/dist/components/index.d.ts.map +1 -0
  423. package/dist/components/index.js +38 -0
  424. package/dist/components/index.js.map +1 -0
  425. package/dist/components/types.d.ts +264 -0
  426. package/dist/components/types.d.ts.map +1 -0
  427. package/dist/components/types.js +46 -0
  428. package/dist/components/types.js.map +1 -0
  429. package/dist/events/bus.d.ts +193 -0
  430. package/dist/events/bus.d.ts.map +1 -0
  431. package/dist/events/bus.js +511 -0
  432. package/dist/events/bus.js.map +1 -0
  433. package/dist/events/index.d.ts +34 -0
  434. package/dist/events/index.d.ts.map +1 -0
  435. package/dist/events/index.js +36 -0
  436. package/dist/events/index.js.map +1 -0
  437. package/dist/events/types.d.ts +242 -0
  438. package/dist/events/types.d.ts.map +1 -0
  439. package/dist/events/types.js +8 -0
  440. package/dist/events/types.js.map +1 -0
  441. package/dist/index.d.ts +17 -0
  442. package/dist/index.d.ts.map +1 -0
  443. package/dist/index.js +17 -0
  444. package/dist/index.js.map +1 -0
  445. package/dist/middleware/compose.d.ts +88 -0
  446. package/dist/middleware/compose.d.ts.map +1 -0
  447. package/dist/middleware/compose.js +108 -0
  448. package/dist/middleware/compose.js.map +1 -0
  449. package/dist/middleware/index.d.ts +12 -0
  450. package/dist/middleware/index.d.ts.map +1 -0
  451. package/dist/middleware/index.js +11 -0
  452. package/dist/middleware/index.js.map +1 -0
  453. package/dist/middleware/types.d.ts +112 -0
  454. package/dist/middleware/types.d.ts.map +1 -0
  455. package/dist/middleware/types.js +14 -0
  456. package/dist/middleware/types.js.map +1 -0
  457. package/dist/procedures/capability.d.ts +111 -0
  458. package/dist/procedures/capability.d.ts.map +1 -0
  459. package/dist/procedures/capability.js +269 -0
  460. package/dist/procedures/capability.js.map +1 -0
  461. package/dist/procedures/cli/announce.d.ts +67 -0
  462. package/dist/procedures/cli/announce.d.ts.map +1 -0
  463. package/dist/procedures/cli/announce.js +392 -0
  464. package/dist/procedures/cli/announce.js.map +1 -0
  465. package/dist/procedures/cli/discover.d.ts +66 -0
  466. package/dist/procedures/cli/discover.d.ts.map +1 -0
  467. package/dist/procedures/cli/discover.js +310 -0
  468. package/dist/procedures/cli/discover.js.map +1 -0
  469. package/dist/procedures/cli/index.d.ts +13 -0
  470. package/dist/procedures/cli/index.d.ts.map +1 -0
  471. package/dist/procedures/cli/index.js +203 -0
  472. package/dist/procedures/cli/index.js.map +1 -0
  473. package/dist/procedures/cli/init.d.ts +17 -0
  474. package/dist/procedures/cli/init.d.ts.map +1 -0
  475. package/dist/procedures/cli/init.js +336 -0
  476. package/dist/procedures/cli/init.js.map +1 -0
  477. package/dist/procedures/collection/index.d.ts +10 -0
  478. package/dist/procedures/collection/index.d.ts.map +1 -0
  479. package/dist/procedures/collection/index.js +10 -0
  480. package/dist/procedures/collection/index.js.map +1 -0
  481. package/dist/procedures/collection/procedures.d.ts +21 -0
  482. package/dist/procedures/collection/procedures.d.ts.map +1 -0
  483. package/dist/procedures/collection/procedures.js +210 -0
  484. package/dist/procedures/collection/procedures.js.map +1 -0
  485. package/dist/procedures/collection/schemas.d.ts +131 -0
  486. package/dist/procedures/collection/schemas.d.ts.map +1 -0
  487. package/dist/procedures/collection/schemas.js +422 -0
  488. package/dist/procedures/collection/schemas.js.map +1 -0
  489. package/dist/procedures/collection/storage.d.ts +53 -0
  490. package/dist/procedures/collection/storage.d.ts.map +1 -0
  491. package/dist/procedures/collection/storage.js +2 -0
  492. package/dist/procedures/collection/storage.js.map +1 -0
  493. package/dist/procedures/core/array.d.ts +276 -0
  494. package/dist/procedures/core/array.d.ts.map +1 -0
  495. package/dist/procedures/core/array.js +639 -0
  496. package/dist/procedures/core/array.js.map +1 -0
  497. package/dist/procedures/core/comparison.d.ts +85 -0
  498. package/dist/procedures/core/comparison.d.ts.map +1 -0
  499. package/dist/procedures/core/comparison.js +158 -0
  500. package/dist/procedures/core/comparison.js.map +1 -0
  501. package/dist/procedures/core/index.d.ts +261 -0
  502. package/dist/procedures/core/index.d.ts.map +1 -0
  503. package/dist/procedures/core/index.js +588 -0
  504. package/dist/procedures/core/index.js.map +1 -0
  505. package/dist/procedures/core/logic.d.ts +144 -0
  506. package/dist/procedures/core/logic.d.ts.map +1 -0
  507. package/dist/procedures/core/logic.js +169 -0
  508. package/dist/procedures/core/logic.js.map +1 -0
  509. package/dist/procedures/core/math.d.ts +139 -0
  510. package/dist/procedures/core/math.d.ts.map +1 -0
  511. package/dist/procedures/core/math.js +275 -0
  512. package/dist/procedures/core/math.js.map +1 -0
  513. package/dist/procedures/core/meta.d.ts +111 -0
  514. package/dist/procedures/core/meta.d.ts.map +1 -0
  515. package/dist/procedures/core/meta.js +244 -0
  516. package/dist/procedures/core/meta.js.map +1 -0
  517. package/dist/procedures/core/object.d.ts +109 -0
  518. package/dist/procedures/core/object.d.ts.map +1 -0
  519. package/dist/procedures/core/object.js +272 -0
  520. package/dist/procedures/core/object.js.map +1 -0
  521. package/dist/procedures/core/operands.d.ts +51 -0
  522. package/dist/procedures/core/operands.d.ts.map +1 -0
  523. package/dist/procedures/core/operands.js +90 -0
  524. package/dist/procedures/core/operands.js.map +1 -0
  525. package/dist/procedures/core/outputs.d.ts +28 -0
  526. package/dist/procedures/core/outputs.d.ts.map +1 -0
  527. package/dist/procedures/core/outputs.js +42 -0
  528. package/dist/procedures/core/outputs.js.map +1 -0
  529. package/dist/procedures/core/results.d.ts +202 -0
  530. package/dist/procedures/core/results.d.ts.map +1 -0
  531. package/dist/procedures/core/results.js +106 -0
  532. package/dist/procedures/core/results.js.map +1 -0
  533. package/dist/procedures/core/schemas.d.ts +48 -0
  534. package/dist/procedures/core/schemas.d.ts.map +1 -0
  535. package/dist/procedures/core/schemas.js +102 -0
  536. package/dist/procedures/core/schemas.js.map +1 -0
  537. package/dist/procedures/core/string.d.ts +138 -0
  538. package/dist/procedures/core/string.d.ts.map +1 -0
  539. package/dist/procedures/core/string.js +270 -0
  540. package/dist/procedures/core/string.js.map +1 -0
  541. package/dist/procedures/core/type.d.ts +101 -0
  542. package/dist/procedures/core/type.d.ts.map +1 -0
  543. package/dist/procedures/core/type.js +210 -0
  544. package/dist/procedures/core/type.js.map +1 -0
  545. package/dist/procedures/define-procedure.d.ts +187 -0
  546. package/dist/procedures/define-procedure.d.ts.map +1 -0
  547. package/dist/procedures/define-procedure.js +357 -0
  548. package/dist/procedures/define-procedure.js.map +1 -0
  549. package/dist/procedures/define.d.ts +228 -0
  550. package/dist/procedures/define.d.ts.map +1 -0
  551. package/dist/procedures/define.js +300 -0
  552. package/dist/procedures/define.js.map +1 -0
  553. package/dist/procedures/discovery.d.ts +57 -0
  554. package/dist/procedures/discovery.d.ts.map +1 -0
  555. package/dist/procedures/discovery.js +68 -0
  556. package/dist/procedures/discovery.js.map +1 -0
  557. package/dist/procedures/effects.d.ts +15 -0
  558. package/dist/procedures/effects.d.ts.map +1 -0
  559. package/dist/procedures/effects.js +18 -0
  560. package/dist/procedures/effects.js.map +1 -0
  561. package/dist/procedures/index.d.ts +27 -0
  562. package/dist/procedures/index.d.ts.map +1 -0
  563. package/dist/procedures/index.js +54 -0
  564. package/dist/procedures/index.js.map +1 -0
  565. package/dist/procedures/interceptors.d.ts +82 -0
  566. package/dist/procedures/interceptors.d.ts.map +1 -0
  567. package/dist/procedures/interceptors.js +194 -0
  568. package/dist/procedures/interceptors.js.map +1 -0
  569. package/dist/procedures/invoke.d.ts +155 -0
  570. package/dist/procedures/invoke.d.ts.map +1 -0
  571. package/dist/procedures/invoke.js +343 -0
  572. package/dist/procedures/invoke.js.map +1 -0
  573. package/dist/procedures/module.d.ts +54 -0
  574. package/dist/procedures/module.d.ts.map +1 -0
  575. package/dist/procedures/module.js +103 -0
  576. package/dist/procedures/module.js.map +1 -0
  577. package/dist/procedures/policy.d.ts +70 -0
  578. package/dist/procedures/policy.d.ts.map +1 -0
  579. package/dist/procedures/policy.js +138 -0
  580. package/dist/procedures/policy.js.map +1 -0
  581. package/dist/procedures/ref.d.ts +606 -0
  582. package/dist/procedures/ref.d.ts.map +1 -0
  583. package/dist/procedures/ref.js +895 -0
  584. package/dist/procedures/ref.js.map +1 -0
  585. package/dist/procedures/registry.d.ts +208 -0
  586. package/dist/procedures/registry.d.ts.map +1 -0
  587. package/dist/procedures/registry.js +402 -0
  588. package/dist/procedures/registry.js.map +1 -0
  589. package/dist/procedures/schema.d.ts +126 -0
  590. package/dist/procedures/schema.d.ts.map +1 -0
  591. package/dist/procedures/schema.js +108 -0
  592. package/dist/procedures/schema.js.map +1 -0
  593. package/dist/procedures/storage/adapter.d.ts +148 -0
  594. package/dist/procedures/storage/adapter.d.ts.map +1 -0
  595. package/dist/procedures/storage/adapter.js +214 -0
  596. package/dist/procedures/storage/adapter.js.map +1 -0
  597. package/dist/procedures/storage/api.d.ts +125 -0
  598. package/dist/procedures/storage/api.d.ts.map +1 -0
  599. package/dist/procedures/storage/api.js +220 -0
  600. package/dist/procedures/storage/api.js.map +1 -0
  601. package/dist/procedures/storage/factory.d.ts +134 -0
  602. package/dist/procedures/storage/factory.d.ts.map +1 -0
  603. package/dist/procedures/storage/factory.js +166 -0
  604. package/dist/procedures/storage/factory.js.map +1 -0
  605. package/dist/procedures/storage/hybrid.d.ts +193 -0
  606. package/dist/procedures/storage/hybrid.d.ts.map +1 -0
  607. package/dist/procedures/storage/hybrid.js +519 -0
  608. package/dist/procedures/storage/hybrid.js.map +1 -0
  609. package/dist/procedures/storage/index.d.ts +17 -0
  610. package/dist/procedures/storage/index.d.ts.map +1 -0
  611. package/dist/procedures/storage/index.js +17 -0
  612. package/dist/procedures/storage/index.js.map +1 -0
  613. package/dist/procedures/storage/procedures.d.ts +39 -0
  614. package/dist/procedures/storage/procedures.d.ts.map +1 -0
  615. package/dist/procedures/storage/procedures.js +261 -0
  616. package/dist/procedures/storage/procedures.js.map +1 -0
  617. package/dist/procedures/storage/serialization.d.ts +123 -0
  618. package/dist/procedures/storage/serialization.d.ts.map +1 -0
  619. package/dist/procedures/storage/serialization.js +216 -0
  620. package/dist/procedures/storage/serialization.js.map +1 -0
  621. package/dist/procedures/storage/synced-registry.d.ts +246 -0
  622. package/dist/procedures/storage/synced-registry.d.ts.map +1 -0
  623. package/dist/procedures/storage/synced-registry.js +575 -0
  624. package/dist/procedures/storage/synced-registry.js.map +1 -0
  625. package/dist/procedures/storage/types.d.ts +130 -0
  626. package/dist/procedures/storage/types.d.ts.map +1 -0
  627. package/dist/procedures/storage/types.js +8 -0
  628. package/dist/procedures/storage/types.js.map +1 -0
  629. package/dist/procedures/types.d.ts +468 -0
  630. package/dist/procedures/types.d.ts.map +1 -0
  631. package/dist/procedures/types.js +23 -0
  632. package/dist/procedures/types.js.map +1 -0
  633. package/dist/register.d.ts +8 -0
  634. package/dist/register.d.ts.map +1 -0
  635. package/dist/register.js +9 -0
  636. package/dist/register.js.map +1 -0
  637. package/dist/server/browser-guard.d.ts +69 -0
  638. package/dist/server/browser-guard.d.ts.map +1 -0
  639. package/dist/server/browser-guard.js +103 -0
  640. package/dist/server/browser-guard.js.map +1 -0
  641. package/dist/server/host-policy.d.ts +81 -0
  642. package/dist/server/host-policy.d.ts.map +1 -0
  643. package/dist/server/host-policy.js +104 -0
  644. package/dist/server/host-policy.js.map +1 -0
  645. package/dist/server/index.d.ts +46 -0
  646. package/dist/server/index.d.ts.map +1 -0
  647. package/dist/server/index.js +42 -0
  648. package/dist/server/index.js.map +1 -0
  649. package/dist/server/method.d.ts +24 -0
  650. package/dist/server/method.d.ts.map +1 -0
  651. package/dist/server/method.js +29 -0
  652. package/dist/server/method.js.map +1 -0
  653. package/dist/server/procedure-server.d.ts +226 -0
  654. package/dist/server/procedure-server.d.ts.map +1 -0
  655. package/dist/server/procedure-server.js +348 -0
  656. package/dist/server/procedure-server.js.map +1 -0
  657. package/dist/server/server.d.ts +161 -0
  658. package/dist/server/server.d.ts.map +1 -0
  659. package/dist/server/server.js +279 -0
  660. package/dist/server/server.js.map +1 -0
  661. package/dist/server/types.d.ts +106 -0
  662. package/dist/server/types.d.ts.map +1 -0
  663. package/dist/server/types.js +29 -0
  664. package/dist/server/types.js.map +1 -0
  665. package/package.json +117 -3
  666. package/src/adapters/http/client/index.ts +51 -0
  667. package/src/adapters/http/client/transport.ts +338 -0
  668. package/src/adapters/http/client/types.ts +33 -0
  669. package/src/adapters/http/index.ts +7 -0
  670. package/src/adapters/http/server/index.ts +14 -0
  671. package/src/adapters/http/server/strategies.ts +105 -0
  672. package/src/adapters/http/server/transport.ts +623 -0
  673. package/src/adapters/http/server/types.ts +81 -0
  674. package/src/adapters/http/shared/constants.ts +108 -0
  675. package/src/adapters/http/shared/errors.ts +199 -0
  676. package/src/adapters/http/shared/headers.ts +291 -0
  677. package/src/adapters/http/shared/index.ts +21 -0
  678. package/src/adapters/http/shared/status-codes.ts +212 -0
  679. package/src/adapters/http/shared/strategies.ts +255 -0
  680. package/src/adapters/local/client/index.ts +11 -0
  681. package/src/adapters/local/client/transport.ts +188 -0
  682. package/src/adapters/local/client/types.ts +50 -0
  683. package/src/adapters/metadata.ts +17 -0
  684. package/src/adapters/mock/client/builder.ts +64 -0
  685. package/src/adapters/mock/client/index.ts +19 -0
  686. package/src/adapters/mock/client/transport.ts +352 -0
  687. package/src/adapters/mock/client/types.ts +99 -0
  688. package/src/adapters/websocket/client/index.ts +18 -0
  689. package/src/adapters/websocket/client/transport.ts +733 -0
  690. package/src/adapters/websocket/client/types.ts +235 -0
  691. package/src/adapters/websocket/index.ts +24 -0
  692. package/src/adapters/websocket/server/index.ts +18 -0
  693. package/src/adapters/websocket/server/transport.ts +705 -0
  694. package/src/adapters/websocket/server/types.ts +169 -0
  695. package/src/browser.ts +401 -0
  696. package/src/client/batch-executor.ts +514 -0
  697. package/src/client/call-types.ts +491 -0
  698. package/src/client/client.ts +1229 -0
  699. package/src/client/consumption.ts +288 -0
  700. package/src/client/context.ts +228 -0
  701. package/src/client/errors/README.md +279 -0
  702. package/src/client/errors/codes.ts +88 -0
  703. package/src/client/errors/factory.ts +263 -0
  704. package/src/client/errors/http-errors.ts +601 -0
  705. package/src/client/errors/http-status.ts +82 -0
  706. package/src/client/errors/index.ts +72 -0
  707. package/src/client/errors/registry.ts +595 -0
  708. package/src/client/errors/types.ts +139 -0
  709. package/src/client/index.ts +124 -0
  710. package/src/client/middleware/auth.ts +132 -0
  711. package/src/client/middleware/cache.ts +316 -0
  712. package/src/client/middleware/circuit-breaker.ts +339 -0
  713. package/src/client/middleware/contexts.ts +319 -0
  714. package/src/client/middleware/items.ts +114 -0
  715. package/src/client/middleware/lru.ts +66 -0
  716. package/src/client/middleware/pagination.ts +213 -0
  717. package/src/client/middleware/rate-limit.ts +315 -0
  718. package/src/client/middleware/retry.ts +236 -0
  719. package/src/client/middleware/timeout.ts +308 -0
  720. package/src/client/middleware/tracing.ts +191 -0
  721. package/src/client/route-resolver.ts +407 -0
  722. package/src/client/typed-method.ts +65 -0
  723. package/src/client/typed.ts +140 -0
  724. package/src/client/types.ts +372 -0
  725. package/src/client/validation/index.ts +56 -0
  726. package/src/client/validation/middleware.ts +254 -0
  727. package/src/client/validation/types.ts +162 -0
  728. package/src/events/bus.ts +594 -0
  729. package/src/events/index.ts +67 -0
  730. package/src/events/types.ts +263 -0
  731. package/src/index.ts +33 -0
  732. package/src/middleware/compose.ts +159 -0
  733. package/src/middleware/index.ts +28 -0
  734. package/src/middleware/types.ts +166 -0
  735. package/src/procedures/capability.ts +333 -0
  736. package/src/procedures/cli/announce.ts +470 -0
  737. package/src/procedures/cli/discover.ts +390 -0
  738. package/src/procedures/cli/index.ts +231 -0
  739. package/src/procedures/cli/init.ts +370 -0
  740. package/src/procedures/collection/index.ts +51 -0
  741. package/src/procedures/collection/procedures.ts +257 -0
  742. package/src/procedures/collection/schemas.ts +550 -0
  743. package/src/procedures/collection/storage.ts +53 -0
  744. package/src/procedures/core/array.ts +1026 -0
  745. package/src/procedures/core/comparison.ts +265 -0
  746. package/src/procedures/core/index.ts +898 -0
  747. package/src/procedures/core/logic.ts +225 -0
  748. package/src/procedures/core/math.ts +471 -0
  749. package/src/procedures/core/meta.ts +389 -0
  750. package/src/procedures/core/object.ts +429 -0
  751. package/src/procedures/core/operands.ts +119 -0
  752. package/src/procedures/core/outputs.ts +48 -0
  753. package/src/procedures/core/results.ts +296 -0
  754. package/src/procedures/core/schemas.ts +123 -0
  755. package/src/procedures/core/string.ts +460 -0
  756. package/src/procedures/core/type.ts +346 -0
  757. package/src/procedures/define-procedure.ts +532 -0
  758. package/src/procedures/define.ts +387 -0
  759. package/src/procedures/discovery.ts +76 -0
  760. package/src/procedures/effects.ts +24 -0
  761. package/src/procedures/index.ts +239 -0
  762. package/src/procedures/interceptors.ts +273 -0
  763. package/src/procedures/invoke.ts +506 -0
  764. package/src/procedures/module.ts +117 -0
  765. package/src/procedures/policy.ts +171 -0
  766. package/src/procedures/ref.ts +1305 -0
  767. package/src/procedures/registry.ts +473 -0
  768. package/src/procedures/schema.ts +225 -0
  769. package/src/procedures/types.ts +596 -0
  770. package/src/register.ts +10 -0
  771. package/src/server/browser-guard.ts +147 -0
  772. package/src/server/host-policy.ts +163 -0
  773. package/src/server/index.ts +70 -0
  774. package/src/server/method.ts +33 -0
  775. package/src/server/procedure-server.ts +459 -0
  776. package/src/server/server.ts +364 -0
  777. package/src/server/types.ts +147 -0
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Universal Error System - Type Definitions
3
+ *
4
+ * Protocol-agnostic error metadata system.
5
+ * Works across HTTP, WebSocket, gRPC, Local transports.
6
+ */
7
+
8
+ /**
9
+ * Error severity levels.
10
+ */
11
+ export enum ErrorSeverity {
12
+ /** Informational - not an actual error */
13
+ INFO = "info",
14
+ /** Warning - degraded but functional */
15
+ WARNING = "warning",
16
+ /** Error - operation failed */
17
+ ERROR = "error",
18
+ /** Critical - system-level failure */
19
+ CRITICAL = "critical",
20
+ }
21
+
22
+ /**
23
+ * Error categories for classification.
24
+ */
25
+ export enum ErrorCategory {
26
+ /** Network-level errors (connectivity, DNS, etc.) */
27
+ NETWORK = "network",
28
+ /** Client-side errors (validation, configuration) */
29
+ CLIENT = "client",
30
+ /** Server-side errors (5xx, internal errors) */
31
+ SERVER = "server",
32
+ /** Protocol-level errors (parsing, encoding) */
33
+ PROTOCOL = "protocol",
34
+ /** Authentication/authorization errors */
35
+ AUTH = "auth",
36
+ /** Rate limiting and throttling */
37
+ RATE_LIMIT = "rate_limit",
38
+ /** Timeout errors */
39
+ TIMEOUT = "timeout",
40
+ /** Cancellation errors */
41
+ CANCELLED = "cancelled",
42
+ /** Unknown/uncategorized errors */
43
+ UNKNOWN = "unknown",
44
+ }
45
+
46
+ /**
47
+ * Complete error metadata for an error code.
48
+ *
49
+ * Central registry entry containing all information about an error.
50
+ */
51
+ export interface ErrorMetadata {
52
+ /** Unique error code identifier */
53
+ code: string;
54
+
55
+ /** Short human-readable summary (1 line) */
56
+ summary: string;
57
+
58
+ /** Detailed explanation of what this error means */
59
+ detail: string;
60
+
61
+ /** Error category for classification */
62
+ category: ErrorCategory;
63
+
64
+ /** Whether this error is retryable */
65
+ retryable: boolean;
66
+
67
+ /** Severity level */
68
+ severity: ErrorSeverity;
69
+
70
+ /** End-user friendly message (non-technical) */
71
+ userMessage: string;
72
+
73
+ /** Developer-facing diagnostic message */
74
+ devMessage: string;
75
+
76
+ /** HTTP status code (if applicable) */
77
+ httpStatus?: number;
78
+
79
+ /** Suggested user actions */
80
+ suggestions?: string[];
81
+
82
+ /** Related documentation URL */
83
+ docsUrl?: string;
84
+ }
85
+
86
+ /**
87
+ * Error registry - maps error codes to metadata.
88
+ */
89
+ export type ErrorRegistry = Record<string, ErrorMetadata>;
90
+
91
+ /**
92
+ * Error context - runtime information attached to an error.
93
+ */
94
+ export interface ErrorContext {
95
+ /** Timestamp when error occurred */
96
+ timestamp: number;
97
+
98
+ /** Request ID for correlation */
99
+ requestId?: string;
100
+
101
+ /** Transport that generated the error */
102
+ transport?: string;
103
+
104
+ /** Method that was being called */
105
+ method?: {
106
+ service: string;
107
+ operation: string;
108
+ version?: string;
109
+ };
110
+
111
+ /** Additional runtime context */
112
+ [key: string]: unknown;
113
+ }
114
+
115
+ /**
116
+ * Rich error details combining metadata and context.
117
+ */
118
+ export interface RichError {
119
+ /** Error code from registry */
120
+ code: string;
121
+
122
+ /** Error metadata (summary, detail, etc.) */
123
+ metadata: ErrorMetadata;
124
+
125
+ /** Runtime context */
126
+ context: ErrorContext;
127
+
128
+ /** Original cause (if wrapped) */
129
+ cause?: Error;
130
+ }
131
+
132
+ /**
133
+ * Error factory function type.
134
+ */
135
+ export type ErrorFactory = (
136
+ code: string,
137
+ context?: Partial<ErrorContext>,
138
+ cause?: Error
139
+ ) => RichError;
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Universal Client System
3
+ *
4
+ * Protocol-agnostic RPC client with middleware composition.
5
+ * Works with HTTP, gRPC, WebSocket, and local transports.
6
+ */
7
+
8
+ // Core Client
9
+ export { Client } from "./client.js";
10
+
11
+ // Universal Error System
12
+ export type { ErrorMetadata, ErrorRegistry, ErrorContext, RichError } from "./errors/index.js";
13
+ export { ErrorSeverity, ErrorCategory } from "./errors/index.js";
14
+ export {
15
+ ERROR_REGISTRY,
16
+ getErrorMetadata,
17
+ isKnownError,
18
+ createError,
19
+ createErrorFromHTTPStatus,
20
+ createErrorFromException,
21
+ formatError,
22
+ } from "./errors/index.js";
23
+
24
+ // Transport Adapters
25
+ export { HttpTransport, defaultUrlPattern, restfulHttpMethodStrategy, postOnlyStrategy } from "../adapters/http/client/index.js";
26
+ export type { HttpTransportOptions, UrlStrategy, HttpMethodStrategy } from "../adapters/http/client/index.js";
27
+
28
+ export { LocalTransport } from "../adapters/local/client/index.js";
29
+ export type { LocalTransportOptions, Handler } from "../adapters/local/client/index.js";
30
+
31
+ export { WebSocketTransport } from "../adapters/websocket/client/index.js";
32
+ export type { WebSocketTransportOptions } from "../adapters/websocket/client/index.js";
33
+ // WebSocketState is a runtime enum — export as a value (not type-only) so consumers can compare
34
+ // transport.getState() === WebSocketState.CONNECTED. See documentation/BUGS-2026-07.md (L1).
35
+ export { WebSocketState } from "../adapters/websocket/client/index.js";
36
+
37
+ export { MockTransport, mockBuilder } from "../adapters/mock/client/index.js";
38
+ export type {
39
+ MockTransportOptions,
40
+ MockResponse,
41
+ ResponseMatcher,
42
+ CallHistoryEntry,
43
+ } from "../adapters/mock/client//index.js";
44
+
45
+ // Middleware
46
+ export { createRetryMiddleware } from "./middleware/retry.js";``
47
+ export type { RetryOptions } from "./middleware/retry.js";
48
+
49
+ export { createCacheMiddleware } from "./middleware/cache.js";
50
+ export type { CacheOptions, CacheStats } from "./middleware/cache.js";
51
+
52
+ export {
53
+ createTimeoutMiddleware,
54
+ createOverallTimeoutMiddleware,
55
+ createCombinedTimeoutMiddleware,
56
+ } from "./middleware/timeout.js";
57
+ export type { TimeoutOptions } from "./middleware/timeout.js";
58
+
59
+ export { createPaginationMiddleware, paginateAll } from "./middleware/pagination.js";
60
+ export type { PaginationOptions } from "./middleware/pagination.js";
61
+ export { createCircuitBreakerMiddleware, CircuitBreakerError } from "./middleware/circuit-breaker.js";
62
+ export type { CircuitBreakerOptions, CircuitBreakerStats, CircuitState } from "./middleware/circuit-breaker.js";
63
+
64
+ export { createRateLimitMiddleware, createPerServiceRateLimiter, RateLimitError } from "./middleware/rate-limit.js";
65
+ export type { RateLimitOptions, RateLimitStats } from "./middleware/rate-limit.js";
66
+
67
+ export {
68
+ createAuthMiddleware,
69
+ createBearerAuthMiddleware,
70
+ createApiKeyAuthMiddleware,
71
+ } from "./middleware/auth.js";
72
+ export type { AuthOptions } from "./middleware/auth.js";
73
+
74
+ export {
75
+ createTracingMiddleware,
76
+ createSimpleTracingMiddleware,
77
+ extractTracingInfo,
78
+ } from "./middleware/tracing.js";
79
+ export type { TracingOptions } from "./middleware/tracing.js";
80
+
81
+ // Zod Validation Middleware
82
+ export { createZodMiddleware, ValidationError, methodToKey, keyToMethod } from "./validation/index.js";
83
+ export type {
84
+ ZodMiddlewareOptions,
85
+ ValidationMode,
86
+ ZodLike,
87
+ ZodErrorLike,
88
+ SchemaDefinition,
89
+ ValidationPhase,
90
+ ZodValidationContext,
91
+ } from "./validation/index.js";
92
+
93
+ // Context System
94
+ export { mergeContext, normalizeCallOptions, isCallOptions } from "./context.js";
95
+ export type { CallOptions, ClientContextInput, MiddlewareContextFields, SchemaOverride } from "./context.js";
96
+
97
+ // Core Types
98
+ export type {
99
+ Transport,
100
+ Method,
101
+ Metadata,
102
+ Message,
103
+ ResponseItem,
104
+ Status,
105
+ ClientContext,
106
+ ClientRunner,
107
+ ClientMiddleware,
108
+ ClientOptions,
109
+ } from "./types.js";
110
+
111
+ export { ClientError } from "./types.js";
112
+
113
+ // Typed Caller
114
+ export { createTypedCaller } from "./typed.js";
115
+ export type {
116
+ TypedCaller,
117
+ BaseCaller,
118
+ ProcedureDef,
119
+ ProcedureNamespace,
120
+ ProcedurePaths,
121
+ PathInput,
122
+ PathOutput,
123
+ MergeProcedures,
124
+ } from "./typed.js";
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Authentication Middleware
3
+ *
4
+ * Adds authentication metadata to requests.
5
+ * Works with ALL transports (HTTP, WebSocket, Local, Mock).
6
+ *
7
+ * Each transport converts metadata.auth to its protocol format:
8
+ * - HTTP: Authorization header, X-API-Key header
9
+ * - WebSocket: Frame metadata
10
+ * - Local: Passed directly to handler
11
+ */
12
+
13
+ import type { TypedClientMiddleware } from "../types.js";
14
+ import type { AuthContext } from "./contexts.js";
15
+
16
+ /**
17
+ * Authentication Options
18
+ */
19
+ export interface AuthOptions {
20
+ /** Bearer token for Authorization header */
21
+ token?: string;
22
+
23
+ /** API key for X-API-Key header */
24
+ apiKey?: string;
25
+
26
+ /** User ID for context */
27
+ userId?: string;
28
+
29
+ /** Additional custom auth fields */
30
+ [key: string]: unknown;
31
+ }
32
+
33
+ /**
34
+ * Create authentication middleware
35
+ *
36
+ * Adds auth metadata to all requests. The transport layer
37
+ * converts this to protocol-specific format.
38
+ *
39
+ * **Context Override**: User-provided context (via withContext or per-call)
40
+ * takes precedence. Middleware options serve as defaults.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * // Create middleware with default auth
45
+ * client.use(createAuthMiddleware({ token: "default-token" }));
46
+ *
47
+ * // Override per-call via context
48
+ * await client.call(method, payload, {
49
+ * context: { auth: { token: "override-token" } }
50
+ * });
51
+ * ```
52
+ *
53
+ * @example Bearer Token
54
+ * ```typescript
55
+ * createAuthMiddleware({ token: process.env.API_TOKEN })
56
+ * // HTTP: Authorization: Bearer abc123
57
+ * // WebSocket: frame.metadata.auth.token
58
+ * ```
59
+ *
60
+ * @example API Key
61
+ * ```typescript
62
+ * createAuthMiddleware({ apiKey: process.env.API_KEY })
63
+ * // HTTP: X-API-Key: xyz789
64
+ * // WebSocket: frame.metadata.auth.apiKey
65
+ * ```
66
+ *
67
+ * @example Dynamic Auth (from function)
68
+ * ```typescript
69
+ * createAuthMiddleware(() => ({
70
+ * token: getTokenFromStore(),
71
+ * userId: getCurrentUserId(),
72
+ * }))
73
+ * ```
74
+ */
75
+ export function createAuthMiddleware(
76
+ authOptionsOrFn: AuthOptions | (() => AuthOptions)
77
+ ): TypedClientMiddleware<AuthContext, {}> {
78
+ return (next) => async function* (context) {
79
+ // Get auth options (static or dynamic)
80
+ const authOptions = typeof authOptionsOrFn === "function"
81
+ ? authOptionsOrFn()
82
+ : authOptionsOrFn;
83
+
84
+ // Merge: middleware defaults first, then user-provided context takes precedence
85
+ // User context is already in metadata.auth from Client.stream()
86
+ context.message.metadata.auth = {
87
+ ...authOptions, // Middleware defaults
88
+ ...context.message.metadata.auth, // User context overrides
89
+ };
90
+
91
+ // Continue middleware chain
92
+ yield* next(context);
93
+ };
94
+ }
95
+
96
+ /**
97
+ * Create Bearer token auth middleware (convenience)
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * createBearerAuthMiddleware("abc123")
102
+ * // Equivalent to: createAuthMiddleware({ token: "abc123" })
103
+ * ```
104
+ */
105
+ export function createBearerAuthMiddleware(
106
+ tokenOrFn: string | (() => string)
107
+ ): TypedClientMiddleware<AuthContext, {}> {
108
+ return createAuthMiddleware(
109
+ typeof tokenOrFn === "function"
110
+ ? () => ({ token: tokenOrFn() })
111
+ : { token: tokenOrFn }
112
+ );
113
+ }
114
+
115
+ /**
116
+ * Create API key auth middleware (convenience)
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * createApiKeyAuthMiddleware("xyz789")
121
+ * // Equivalent to: createAuthMiddleware({ apiKey: "xyz789" })
122
+ * ```
123
+ */
124
+ export function createApiKeyAuthMiddleware(
125
+ apiKeyOrFn: string | (() => string)
126
+ ): TypedClientMiddleware<AuthContext, {}> {
127
+ return createAuthMiddleware(
128
+ typeof apiKeyOrFn === "function"
129
+ ? () => ({ apiKey: apiKeyOrFn() })
130
+ : { apiKey: apiKeyOrFn }
131
+ );
132
+ }
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Universal Cache Middleware
3
+ *
4
+ * Protocol-agnostic caching with LRU eviction and TTL expiration.
5
+ * Works with any transport!
6
+ */
7
+
8
+ import type { ClientRunner, ClientContext, ResponseItem, Metadata, Method, TypedClientMiddleware } from "../types.js";
9
+ import type { CacheContext } from "./contexts.js";
10
+ import { LruMap } from "./lru.js";
11
+
12
+ /**
13
+ * Cache middleware options.
14
+ */
15
+ export interface CacheOptions {
16
+ /**
17
+ * The methods whose responses the middleware caches: a list of `"service.operation"` names,
18
+ * or a predicate. Caching is opt-in for each method: before, the middleware cached every
19
+ * call, mutations too (deep dive TRN-5).
20
+ */
21
+ methods: readonly string[] | ((method: Method) => boolean);
22
+
23
+ /**
24
+ * Time-to-live for cache entries in milliseconds. A call can give its own: `cache: { ttl }`.
25
+ * @default 60000 (1 minute)
26
+ */
27
+ ttl?: number;
28
+
29
+ /**
30
+ * Maximum number of cache entries (LRU eviction when exceeded).
31
+ * @default 100
32
+ */
33
+ capacity?: number;
34
+
35
+ /**
36
+ * Optional callback for cache statistics.
37
+ * Called periodically with hit/miss/eviction metrics.
38
+ */
39
+ onStats?: (stats: CacheStats) => void;
40
+
41
+ /**
42
+ * Interval in milliseconds for emitting cache statistics.
43
+ * Only used if onStats is provided.
44
+ * @default 60000 (1 minute)
45
+ */
46
+ statsInterval?: number;
47
+
48
+ /**
49
+ * Custom cache key generator.
50
+ * Default: the method, the payload and the request metadata (see `defaultKeyGenerator`).
51
+ *
52
+ * @param method - Method being called
53
+ * @param payload - Request payload
54
+ * @param metadata - Request metadata (auth, pagination, custom fields)
55
+ * @returns Cache key string
56
+ */
57
+ keyGenerator?: (method: Method, payload: unknown, metadata: Metadata) => string;
58
+
59
+ /**
60
+ * Predicate to determine if a response should be cached.
61
+ * Default: Only cache successful responses
62
+ *
63
+ * @param item - Response item
64
+ * @returns true if response should be cached
65
+ */
66
+ shouldCache?: (item: ResponseItem<unknown>) => boolean;
67
+ }
68
+
69
+ /**
70
+ * Cache performance statistics.
71
+ */
72
+ export interface CacheStats {
73
+ /** Number of cache hits */
74
+ hits: number;
75
+ /** Number of cache misses */
76
+ misses: number;
77
+ /** Current cache size */
78
+ size: number;
79
+ /** Number of entries evicted */
80
+ evictions: number;
81
+ /** Hit rate as a percentage (0-100) */
82
+ hitRate: number;
83
+ }
84
+
85
+ /**
86
+ * Deterministic stringify for cache keys: recursively sorts object keys at every depth, so
87
+ * payloads that are structurally equal (regardless of key order) map to the same key, and
88
+ * null / primitive / array payloads are handled without throwing.
89
+ *
90
+ * Replaces a prior `JSON.stringify(payload, Object.keys(payload).sort())` which misused the
91
+ * array-replacer form of JSON.stringify: that filters keys at *every* depth (so `{filter:{a:1}}`
92
+ * and `{filter:{b:2}}` collided to the same key and returned each other's cached response) and
93
+ * threw `TypeError` on null/primitive payloads. See documentation/BUGS-2026-07.md (C1).
94
+ */
95
+ export function stableStringify(value: unknown): string {
96
+ if (typeof value === "bigint") return `${value}n`;
97
+ if (value === null || typeof value !== "object") {
98
+ // Primitives — and undefined/function/symbol (JSON.stringify → undefined): never throw.
99
+ return JSON.stringify(value) ?? String(value);
100
+ }
101
+ if (Array.isArray(value)) {
102
+ return `[${value.map(stableStringify).join(",")}]`;
103
+ }
104
+ const obj = value as Record<string, unknown>;
105
+ const body = Object.keys(obj)
106
+ .sort()
107
+ .map((key) => `${JSON.stringify(key)}:${stableStringify(obj[key])}`)
108
+ .join(",");
109
+ return `{${body}}`;
110
+ }
111
+
112
+ /**
113
+ * The metadata keys that do not change a response: middleware state and tracing. The other
114
+ * keys (auth, pagination, custom fields) are part of the cache key.
115
+ */
116
+ const VOLATILE_METADATA = new Set(["retry", "timeout", "tracing", "cache", "circuitBreaker", "rateLimit"]);
117
+
118
+ /** The part of the metadata that can change a response. */
119
+ function keyMetadata(metadata: Metadata): Record<string, unknown> {
120
+ const out: Record<string, unknown> = {};
121
+ for (const [key, value] of Object.entries(metadata)) {
122
+ if (VOLATILE_METADATA.has(key) || key.startsWith("__") || value === undefined) continue;
123
+ out[key] = value;
124
+ }
125
+ return out;
126
+ }
127
+
128
+ /**
129
+ * Default cache key generator: the method, the payload and the metadata that can change the
130
+ * response. Before, the key ignored the metadata: with `withContext({ auth })`, one user got
131
+ * the cached response of another user, and a pagination cursor in the metadata returned the
132
+ * first page forever (deep dive TRN-5).
133
+ */
134
+ export function defaultKeyGenerator(method: Method, payload: unknown, metadata?: Metadata): string {
135
+ const methodKey = method.version
136
+ ? `${method.version}:${method.service}.${method.operation}`
137
+ : `${method.service}.${method.operation}`;
138
+
139
+ const base = `${methodKey}:${stableStringify(payload)}`;
140
+ return metadata ? `${base}|${stableStringify(keyMetadata(metadata))}` : base;
141
+ }
142
+
143
+ /** A deep copy of a cache entry, or undefined when the payload cannot be copied. */
144
+ function copyItem<T>(item: ResponseItem<T>): ResponseItem<T> | undefined {
145
+ try {
146
+ return structuredClone(item);
147
+ } catch {
148
+ return undefined;
149
+ }
150
+ }
151
+
152
+ /** A stored response and the time at which it expires. */
153
+ interface CacheEntry {
154
+ items: ResponseItem<unknown>[];
155
+ expiresAt: number;
156
+ }
157
+
158
+ /** The overrides of one call: `cache: { ttl, bypass, refresh }` in its context. */
159
+ function cacheOverrides(value: unknown): { ttl?: number; bypass?: boolean; refresh?: boolean } {
160
+ if (typeof value !== "object" || value === null) return {};
161
+ const { ttl, bypass, refresh } = value as Record<string, unknown>;
162
+ return {
163
+ ...(typeof ttl === "number" && ttl >= 0 ? { ttl } : {}),
164
+ ...(bypass === true ? { bypass: true } : {}),
165
+ ...(refresh === true ? { refresh: true } : {}),
166
+ };
167
+ }
168
+
169
+ /**
170
+ * Default should cache predicate - only cache successful responses.
171
+ */
172
+ function defaultShouldCache(item: ResponseItem<unknown>): boolean {
173
+ return item.status.type === "success";
174
+ }
175
+
176
+ /**
177
+ * Create cache middleware with LRU eviction and TTL expiration.
178
+ *
179
+ * Memory management:
180
+ * - LRU eviction when capacity is reached (bounded memory, a small map of the core)
181
+ * - Each entry has its own expiry time, so a call can give its own TTL
182
+ *
183
+ * Each call can give overrides in its context (`route()` overrides, or `withContext`):
184
+ * `cache: { ttl }` for the entry that it stores, `cache: { bypass: true }` to skip the cache, and
185
+ * `cache: { refresh: true }` to fetch and replace the stored response. After the call, the
186
+ * context has `cache.hit` (CacheContext).
187
+ *
188
+ * Features:
189
+ * - Protocol-agnostic: Works with HTTP, gRPC, WebSocket, local
190
+ * - Automatic eviction: LRU + TTL composition
191
+ * - Observable: Optional stats callback
192
+ * - Customizable: Custom key generation and cache predicates
193
+ *
194
+ * @param options - Cache configuration options
195
+ * @returns Middleware function
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * client.use(createCacheMiddleware({
200
+ * methods: ["users.get", "users.list"], // only these calls are cached
201
+ * capacity: 100,
202
+ * ttl: 60000, // 1 minute
203
+ * onStats: (stats) => console.log(`Hit rate: ${stats.hitRate}%`)
204
+ * }));
205
+ * ```
206
+ */
207
+ export function createCacheMiddleware(options: CacheOptions): TypedClientMiddleware<CacheContext, {}> {
208
+ const {
209
+ methods,
210
+ ttl = 60000,
211
+ capacity = 100,
212
+ onStats,
213
+ statsInterval = 60000,
214
+ keyGenerator = defaultKeyGenerator,
215
+ shouldCache = defaultShouldCache,
216
+ } = options;
217
+
218
+ // An LRU map bounds the memory. Each entry keeps its own expiry time, so a call can give its
219
+ // own TTL: before, one TTL map expired every entry after the TTL of the middleware.
220
+ const cache = new LruMap<string, CacheEntry>(capacity, () => {
221
+ stats.evictions++;
222
+ });
223
+
224
+ // Track cache statistics
225
+ const stats = {
226
+ hits: 0,
227
+ misses: 0,
228
+ evictions: 0,
229
+ };
230
+
231
+ // Emit stats periodically if callback provided
232
+ if (onStats) {
233
+ const statsTimer = setInterval(() => {
234
+ const total = stats.hits + stats.misses;
235
+ const hitRate = total > 0 ? (stats.hits / total) * 100 : 0;
236
+
237
+ onStats({
238
+ hits: stats.hits,
239
+ misses: stats.misses,
240
+ size: cache.size,
241
+ evictions: stats.evictions,
242
+ hitRate: Math.round(hitRate * 100) / 100, // Round to 2 decimal places
243
+ });
244
+ }, statsInterval);
245
+ // Unref so the stats timer never keeps the process alive on its own (its lifecycle is tied
246
+ // to the client, not the event loop). See documentation/BUGS-2026-07.md (M4).
247
+ statsTimer.unref?.();
248
+ }
249
+
250
+ const cacheable =
251
+ typeof methods === "function"
252
+ ? methods
253
+ : ((names: ReadonlySet<string>) => (method: Method): boolean => names.has(`${method.service}.${method.operation}`))(
254
+ new Set(methods),
255
+ );
256
+
257
+ return <TReq, TRes>(next: ClientRunner<TReq, TRes>): ClientRunner<TReq, TRes> => {
258
+ return async function* (context: ClientContext<TReq>) {
259
+ if (!cacheable(context.message.method)) {
260
+ yield* next(context);
261
+ return;
262
+ }
263
+
264
+ const metadata = context.message.metadata;
265
+ const overrides = cacheOverrides(metadata["cache"]);
266
+ // The state for the outer middlewares (CacheContext). The key is not written: it holds the
267
+ // payload, and the metadata of a retry travels in a header.
268
+ const setState = (hit: boolean): void => {
269
+ metadata["cache"] = { ...overrides, hit };
270
+ };
271
+
272
+ if (overrides.bypass) {
273
+ yield* next(context);
274
+ setState(false);
275
+ return;
276
+ }
277
+
278
+ // Generate cache key
279
+ const cacheKey = keyGenerator(context.message.method, context.message.payload, metadata);
280
+
281
+ // Check cache - use has() to avoid throwing "Key not found" error. A refresh skips the read.
282
+ if (!overrides.refresh && cache.has(cacheKey)) {
283
+ const cached = cache.get(cacheKey);
284
+ if (cached && cached.expiresAt > Date.now()) {
285
+ // Cache hit - yield a copy: a caller that changes its result does not change the cache
286
+ stats.hits++;
287
+ setState(true);
288
+ for (const item of cached.items) {
289
+ yield (copyItem(item) ?? item) as ResponseItem<TRes>;
290
+ }
291
+ return;
292
+ }
293
+ // Expired
294
+ cache.delete(cacheKey);
295
+ }
296
+
297
+ // Cache miss - fetch and store. Only a response of one item is cached: a stream is never
298
+ // collected or cached (before, the middleware kept every item of a stream in memory).
299
+ stats.misses++;
300
+ let first: ResponseItem<TRes> | undefined;
301
+ let count = 0;
302
+
303
+ for await (const item of next(context)) {
304
+ count++;
305
+ if (count === 1) first = item;
306
+ yield item;
307
+ }
308
+ setState(false);
309
+
310
+ if (count === 1 && first && shouldCache(first)) {
311
+ const copy = copyItem(first);
312
+ if (copy) cache.set(cacheKey, { items: [copy as ResponseItem<unknown>], expiresAt: Date.now() + (overrides.ttl ?? ttl) });
313
+ }
314
+ };
315
+ };
316
+ }