@procedures/client 0.0.0-stage → 0.1.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 (762) hide show
  1. package/CHANGELOG.md +16 -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 +561 -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 +48 -0
  122. package/dist/browser.d.ts.map +1 -0
  123. package/dist/browser.js +86 -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 +517 -0
  134. package/dist/client/client.d.ts.map +1 -0
  135. package/dist/client/client.js +990 -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 +296 -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/cli/announce.d.ts +67 -0
  458. package/dist/procedures/cli/announce.d.ts.map +1 -0
  459. package/dist/procedures/cli/announce.js +392 -0
  460. package/dist/procedures/cli/announce.js.map +1 -0
  461. package/dist/procedures/cli/discover.d.ts +66 -0
  462. package/dist/procedures/cli/discover.d.ts.map +1 -0
  463. package/dist/procedures/cli/discover.js +310 -0
  464. package/dist/procedures/cli/discover.js.map +1 -0
  465. package/dist/procedures/cli/index.d.ts +13 -0
  466. package/dist/procedures/cli/index.d.ts.map +1 -0
  467. package/dist/procedures/cli/index.js +201 -0
  468. package/dist/procedures/cli/index.js.map +1 -0
  469. package/dist/procedures/cli/init.d.ts +17 -0
  470. package/dist/procedures/cli/init.d.ts.map +1 -0
  471. package/dist/procedures/cli/init.js +336 -0
  472. package/dist/procedures/cli/init.js.map +1 -0
  473. package/dist/procedures/collection/index.d.ts +10 -0
  474. package/dist/procedures/collection/index.d.ts.map +1 -0
  475. package/dist/procedures/collection/index.js +10 -0
  476. package/dist/procedures/collection/index.js.map +1 -0
  477. package/dist/procedures/collection/procedures.d.ts +21 -0
  478. package/dist/procedures/collection/procedures.d.ts.map +1 -0
  479. package/dist/procedures/collection/procedures.js +198 -0
  480. package/dist/procedures/collection/procedures.js.map +1 -0
  481. package/dist/procedures/collection/schemas.d.ts +131 -0
  482. package/dist/procedures/collection/schemas.d.ts.map +1 -0
  483. package/dist/procedures/collection/schemas.js +422 -0
  484. package/dist/procedures/collection/schemas.js.map +1 -0
  485. package/dist/procedures/collection/storage.d.ts +53 -0
  486. package/dist/procedures/collection/storage.d.ts.map +1 -0
  487. package/dist/procedures/collection/storage.js +2 -0
  488. package/dist/procedures/collection/storage.js.map +1 -0
  489. package/dist/procedures/core/array.d.ts +276 -0
  490. package/dist/procedures/core/array.d.ts.map +1 -0
  491. package/dist/procedures/core/array.js +637 -0
  492. package/dist/procedures/core/array.js.map +1 -0
  493. package/dist/procedures/core/comparison.d.ts +85 -0
  494. package/dist/procedures/core/comparison.d.ts.map +1 -0
  495. package/dist/procedures/core/comparison.js +156 -0
  496. package/dist/procedures/core/comparison.js.map +1 -0
  497. package/dist/procedures/core/index.d.ts +261 -0
  498. package/dist/procedures/core/index.d.ts.map +1 -0
  499. package/dist/procedures/core/index.js +585 -0
  500. package/dist/procedures/core/index.js.map +1 -0
  501. package/dist/procedures/core/logic.d.ts +144 -0
  502. package/dist/procedures/core/logic.d.ts.map +1 -0
  503. package/dist/procedures/core/logic.js +169 -0
  504. package/dist/procedures/core/logic.js.map +1 -0
  505. package/dist/procedures/core/math.d.ts +139 -0
  506. package/dist/procedures/core/math.d.ts.map +1 -0
  507. package/dist/procedures/core/math.js +273 -0
  508. package/dist/procedures/core/math.js.map +1 -0
  509. package/dist/procedures/core/meta.d.ts +111 -0
  510. package/dist/procedures/core/meta.d.ts.map +1 -0
  511. package/dist/procedures/core/meta.js +239 -0
  512. package/dist/procedures/core/meta.js.map +1 -0
  513. package/dist/procedures/core/object.d.ts +109 -0
  514. package/dist/procedures/core/object.d.ts.map +1 -0
  515. package/dist/procedures/core/object.js +270 -0
  516. package/dist/procedures/core/object.js.map +1 -0
  517. package/dist/procedures/core/operands.d.ts +51 -0
  518. package/dist/procedures/core/operands.d.ts.map +1 -0
  519. package/dist/procedures/core/operands.js +90 -0
  520. package/dist/procedures/core/operands.js.map +1 -0
  521. package/dist/procedures/core/outputs.d.ts +28 -0
  522. package/dist/procedures/core/outputs.d.ts.map +1 -0
  523. package/dist/procedures/core/outputs.js +42 -0
  524. package/dist/procedures/core/outputs.js.map +1 -0
  525. package/dist/procedures/core/results.d.ts +202 -0
  526. package/dist/procedures/core/results.d.ts.map +1 -0
  527. package/dist/procedures/core/results.js +106 -0
  528. package/dist/procedures/core/results.js.map +1 -0
  529. package/dist/procedures/core/schemas.d.ts +48 -0
  530. package/dist/procedures/core/schemas.d.ts.map +1 -0
  531. package/dist/procedures/core/schemas.js +102 -0
  532. package/dist/procedures/core/schemas.js.map +1 -0
  533. package/dist/procedures/core/string.d.ts +138 -0
  534. package/dist/procedures/core/string.d.ts.map +1 -0
  535. package/dist/procedures/core/string.js +268 -0
  536. package/dist/procedures/core/string.js.map +1 -0
  537. package/dist/procedures/core/type.d.ts +101 -0
  538. package/dist/procedures/core/type.d.ts.map +1 -0
  539. package/dist/procedures/core/type.js +208 -0
  540. package/dist/procedures/core/type.js.map +1 -0
  541. package/dist/procedures/define-procedure.d.ts +187 -0
  542. package/dist/procedures/define-procedure.d.ts.map +1 -0
  543. package/dist/procedures/define-procedure.js +356 -0
  544. package/dist/procedures/define-procedure.js.map +1 -0
  545. package/dist/procedures/define.d.ts +228 -0
  546. package/dist/procedures/define.d.ts.map +1 -0
  547. package/dist/procedures/define.js +300 -0
  548. package/dist/procedures/define.js.map +1 -0
  549. package/dist/procedures/discovery.d.ts +57 -0
  550. package/dist/procedures/discovery.d.ts.map +1 -0
  551. package/dist/procedures/discovery.js +68 -0
  552. package/dist/procedures/discovery.js.map +1 -0
  553. package/dist/procedures/index.d.ts +24 -0
  554. package/dist/procedures/index.d.ts.map +1 -0
  555. package/dist/procedures/index.js +69 -0
  556. package/dist/procedures/index.js.map +1 -0
  557. package/dist/procedures/interceptors.d.ts +82 -0
  558. package/dist/procedures/interceptors.d.ts.map +1 -0
  559. package/dist/procedures/interceptors.js +193 -0
  560. package/dist/procedures/interceptors.js.map +1 -0
  561. package/dist/procedures/invoke.d.ts +127 -0
  562. package/dist/procedures/invoke.d.ts.map +1 -0
  563. package/dist/procedures/invoke.js +277 -0
  564. package/dist/procedures/invoke.js.map +1 -0
  565. package/dist/procedures/module.d.ts +49 -0
  566. package/dist/procedures/module.d.ts.map +1 -0
  567. package/dist/procedures/module.js +93 -0
  568. package/dist/procedures/module.js.map +1 -0
  569. package/dist/procedures/policy.d.ts +70 -0
  570. package/dist/procedures/policy.d.ts.map +1 -0
  571. package/dist/procedures/policy.js +138 -0
  572. package/dist/procedures/policy.js.map +1 -0
  573. package/dist/procedures/ref.d.ts +606 -0
  574. package/dist/procedures/ref.d.ts.map +1 -0
  575. package/dist/procedures/ref.js +895 -0
  576. package/dist/procedures/ref.js.map +1 -0
  577. package/dist/procedures/registry.d.ts +208 -0
  578. package/dist/procedures/registry.d.ts.map +1 -0
  579. package/dist/procedures/registry.js +402 -0
  580. package/dist/procedures/registry.js.map +1 -0
  581. package/dist/procedures/schema.d.ts +126 -0
  582. package/dist/procedures/schema.d.ts.map +1 -0
  583. package/dist/procedures/schema.js +108 -0
  584. package/dist/procedures/schema.js.map +1 -0
  585. package/dist/procedures/storage/adapter.d.ts +148 -0
  586. package/dist/procedures/storage/adapter.d.ts.map +1 -0
  587. package/dist/procedures/storage/adapter.js +214 -0
  588. package/dist/procedures/storage/adapter.js.map +1 -0
  589. package/dist/procedures/storage/api.d.ts +125 -0
  590. package/dist/procedures/storage/api.d.ts.map +1 -0
  591. package/dist/procedures/storage/api.js +220 -0
  592. package/dist/procedures/storage/api.js.map +1 -0
  593. package/dist/procedures/storage/factory.d.ts +134 -0
  594. package/dist/procedures/storage/factory.d.ts.map +1 -0
  595. package/dist/procedures/storage/factory.js +166 -0
  596. package/dist/procedures/storage/factory.js.map +1 -0
  597. package/dist/procedures/storage/hybrid.d.ts +193 -0
  598. package/dist/procedures/storage/hybrid.d.ts.map +1 -0
  599. package/dist/procedures/storage/hybrid.js +519 -0
  600. package/dist/procedures/storage/hybrid.js.map +1 -0
  601. package/dist/procedures/storage/index.d.ts +17 -0
  602. package/dist/procedures/storage/index.d.ts.map +1 -0
  603. package/dist/procedures/storage/index.js +17 -0
  604. package/dist/procedures/storage/index.js.map +1 -0
  605. package/dist/procedures/storage/procedures.d.ts +39 -0
  606. package/dist/procedures/storage/procedures.d.ts.map +1 -0
  607. package/dist/procedures/storage/procedures.js +261 -0
  608. package/dist/procedures/storage/procedures.js.map +1 -0
  609. package/dist/procedures/storage/serialization.d.ts +123 -0
  610. package/dist/procedures/storage/serialization.d.ts.map +1 -0
  611. package/dist/procedures/storage/serialization.js +216 -0
  612. package/dist/procedures/storage/serialization.js.map +1 -0
  613. package/dist/procedures/storage/synced-registry.d.ts +246 -0
  614. package/dist/procedures/storage/synced-registry.d.ts.map +1 -0
  615. package/dist/procedures/storage/synced-registry.js +575 -0
  616. package/dist/procedures/storage/synced-registry.js.map +1 -0
  617. package/dist/procedures/storage/types.d.ts +130 -0
  618. package/dist/procedures/storage/types.d.ts.map +1 -0
  619. package/dist/procedures/storage/types.js +8 -0
  620. package/dist/procedures/storage/types.js.map +1 -0
  621. package/dist/procedures/types.d.ts +370 -0
  622. package/dist/procedures/types.d.ts.map +1 -0
  623. package/dist/procedures/types.js +23 -0
  624. package/dist/procedures/types.js.map +1 -0
  625. package/dist/server/browser-guard.d.ts +69 -0
  626. package/dist/server/browser-guard.d.ts.map +1 -0
  627. package/dist/server/browser-guard.js +103 -0
  628. package/dist/server/browser-guard.js.map +1 -0
  629. package/dist/server/host-policy.d.ts +59 -0
  630. package/dist/server/host-policy.d.ts.map +1 -0
  631. package/dist/server/host-policy.js +82 -0
  632. package/dist/server/host-policy.js.map +1 -0
  633. package/dist/server/index.d.ts +46 -0
  634. package/dist/server/index.d.ts.map +1 -0
  635. package/dist/server/index.js +42 -0
  636. package/dist/server/index.js.map +1 -0
  637. package/dist/server/method.d.ts +24 -0
  638. package/dist/server/method.d.ts.map +1 -0
  639. package/dist/server/method.js +29 -0
  640. package/dist/server/method.js.map +1 -0
  641. package/dist/server/procedure-server.d.ts +212 -0
  642. package/dist/server/procedure-server.d.ts.map +1 -0
  643. package/dist/server/procedure-server.js +323 -0
  644. package/dist/server/procedure-server.js.map +1 -0
  645. package/dist/server/server.d.ts +161 -0
  646. package/dist/server/server.d.ts.map +1 -0
  647. package/dist/server/server.js +279 -0
  648. package/dist/server/server.js.map +1 -0
  649. package/dist/server/types.d.ts +106 -0
  650. package/dist/server/types.d.ts.map +1 -0
  651. package/dist/server/types.js +29 -0
  652. package/dist/server/types.js.map +1 -0
  653. package/package.json +115 -3
  654. package/src/adapters/http/client/index.ts +51 -0
  655. package/src/adapters/http/client/transport.ts +338 -0
  656. package/src/adapters/http/client/types.ts +33 -0
  657. package/src/adapters/http/index.ts +7 -0
  658. package/src/adapters/http/server/index.ts +14 -0
  659. package/src/adapters/http/server/strategies.ts +105 -0
  660. package/src/adapters/http/server/transport.ts +622 -0
  661. package/src/adapters/http/server/types.ts +81 -0
  662. package/src/adapters/http/shared/constants.ts +108 -0
  663. package/src/adapters/http/shared/errors.ts +199 -0
  664. package/src/adapters/http/shared/headers.ts +291 -0
  665. package/src/adapters/http/shared/index.ts +21 -0
  666. package/src/adapters/http/shared/status-codes.ts +212 -0
  667. package/src/adapters/http/shared/strategies.ts +255 -0
  668. package/src/adapters/local/client/index.ts +11 -0
  669. package/src/adapters/local/client/transport.ts +188 -0
  670. package/src/adapters/local/client/types.ts +50 -0
  671. package/src/adapters/metadata.ts +17 -0
  672. package/src/adapters/mock/client/builder.ts +64 -0
  673. package/src/adapters/mock/client/index.ts +19 -0
  674. package/src/adapters/mock/client/transport.ts +352 -0
  675. package/src/adapters/mock/client/types.ts +99 -0
  676. package/src/adapters/websocket/client/index.ts +18 -0
  677. package/src/adapters/websocket/client/transport.ts +733 -0
  678. package/src/adapters/websocket/client/types.ts +235 -0
  679. package/src/adapters/websocket/index.ts +24 -0
  680. package/src/adapters/websocket/server/index.ts +18 -0
  681. package/src/adapters/websocket/server/transport.ts +705 -0
  682. package/src/adapters/websocket/server/types.ts +169 -0
  683. package/src/browser.ts +373 -0
  684. package/src/client/batch-executor.ts +514 -0
  685. package/src/client/call-types.ts +491 -0
  686. package/src/client/client.ts +1202 -0
  687. package/src/client/consumption.ts +288 -0
  688. package/src/client/context.ts +228 -0
  689. package/src/client/errors/README.md +279 -0
  690. package/src/client/errors/codes.ts +88 -0
  691. package/src/client/errors/factory.ts +263 -0
  692. package/src/client/errors/http-errors.ts +601 -0
  693. package/src/client/errors/http-status.ts +82 -0
  694. package/src/client/errors/index.ts +72 -0
  695. package/src/client/errors/registry.ts +595 -0
  696. package/src/client/errors/types.ts +139 -0
  697. package/src/client/index.ts +124 -0
  698. package/src/client/middleware/auth.ts +132 -0
  699. package/src/client/middleware/cache.ts +316 -0
  700. package/src/client/middleware/circuit-breaker.ts +339 -0
  701. package/src/client/middleware/contexts.ts +319 -0
  702. package/src/client/middleware/items.ts +114 -0
  703. package/src/client/middleware/lru.ts +66 -0
  704. package/src/client/middleware/pagination.ts +213 -0
  705. package/src/client/middleware/rate-limit.ts +315 -0
  706. package/src/client/middleware/retry.ts +236 -0
  707. package/src/client/middleware/timeout.ts +308 -0
  708. package/src/client/middleware/tracing.ts +191 -0
  709. package/src/client/route-resolver.ts +407 -0
  710. package/src/client/typed-method.ts +65 -0
  711. package/src/client/typed.ts +140 -0
  712. package/src/client/types.ts +361 -0
  713. package/src/client/validation/index.ts +56 -0
  714. package/src/client/validation/middleware.ts +254 -0
  715. package/src/client/validation/types.ts +162 -0
  716. package/src/events/bus.ts +594 -0
  717. package/src/events/index.ts +67 -0
  718. package/src/events/types.ts +263 -0
  719. package/src/index.ts +33 -0
  720. package/src/middleware/compose.ts +159 -0
  721. package/src/middleware/index.ts +28 -0
  722. package/src/middleware/types.ts +166 -0
  723. package/src/procedures/cli/announce.ts +470 -0
  724. package/src/procedures/cli/discover.ts +390 -0
  725. package/src/procedures/cli/index.ts +229 -0
  726. package/src/procedures/cli/init.ts +370 -0
  727. package/src/procedures/collection/index.ts +51 -0
  728. package/src/procedures/collection/procedures.ts +245 -0
  729. package/src/procedures/collection/schemas.ts +550 -0
  730. package/src/procedures/collection/storage.ts +53 -0
  731. package/src/procedures/core/array.ts +1024 -0
  732. package/src/procedures/core/comparison.ts +263 -0
  733. package/src/procedures/core/index.ts +895 -0
  734. package/src/procedures/core/logic.ts +225 -0
  735. package/src/procedures/core/math.ts +469 -0
  736. package/src/procedures/core/meta.ts +384 -0
  737. package/src/procedures/core/object.ts +427 -0
  738. package/src/procedures/core/operands.ts +119 -0
  739. package/src/procedures/core/outputs.ts +48 -0
  740. package/src/procedures/core/results.ts +296 -0
  741. package/src/procedures/core/schemas.ts +123 -0
  742. package/src/procedures/core/string.ts +458 -0
  743. package/src/procedures/core/type.ts +344 -0
  744. package/src/procedures/define-procedure.ts +531 -0
  745. package/src/procedures/define.ts +387 -0
  746. package/src/procedures/discovery.ts +76 -0
  747. package/src/procedures/index.ts +228 -0
  748. package/src/procedures/interceptors.ts +272 -0
  749. package/src/procedures/invoke.ts +413 -0
  750. package/src/procedures/module.ts +107 -0
  751. package/src/procedures/policy.ts +171 -0
  752. package/src/procedures/ref.ts +1305 -0
  753. package/src/procedures/registry.ts +473 -0
  754. package/src/procedures/schema.ts +225 -0
  755. package/src/procedures/types.ts +485 -0
  756. package/src/server/browser-guard.ts +147 -0
  757. package/src/server/host-policy.ts +121 -0
  758. package/src/server/index.ts +70 -0
  759. package/src/server/method.ts +33 -0
  760. package/src/server/procedure-server.ts +417 -0
  761. package/src/server/server.ts +364 -0
  762. package/src/server/types.ts +147 -0
@@ -0,0 +1,485 @@
1
+ /**
2
+ * Procedure Type System
3
+ *
4
+ * Core types for procedure definitions, handlers, and registration.
5
+ * Procedures are the foundation for typed RPC calls with schema validation.
6
+ */
7
+
8
+ import type { ZodErrorLike } from "../client/validation/types.js";
9
+ import type { ProcedureSchema } from "./schema.js";
10
+ import type { CollectionStorage } from "./collection/storage.js";
11
+ import type { EventBus } from "../events/types.js";
12
+ import type { HydrationEvent } from "./ref.js";
13
+
14
+ // =============================================================================
15
+ // Procedure Path
16
+ // =============================================================================
17
+
18
+ /**
19
+ * Procedure path as array of segments.
20
+ * Forms a tree structure for nested routing.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * ['collections', 'users', 'get'] // collections.users.get
25
+ * ['weather', 'forecast'] // weather.forecast
26
+ * ```
27
+ */
28
+ export type ProcedurePath = string[];
29
+
30
+ /**
31
+ * Convert path array to dot-separated key.
32
+ */
33
+ export function pathToKey(path: ProcedurePath): string {
34
+ return path.join(".");
35
+ }
36
+
37
+ /**
38
+ * Parse dot-separated key to path array.
39
+ */
40
+ export function keyToPath(key: string): ProcedurePath {
41
+ return key.split(".");
42
+ }
43
+
44
+ // =============================================================================
45
+ // Procedure Metadata
46
+ // =============================================================================
47
+
48
+ /**
49
+ * Metadata for procedure documentation and categorization.
50
+ */
51
+ export interface ProcedureMetadata {
52
+ /** Human-readable description */
53
+ description?: string;
54
+
55
+ /** Tags for categorization and filtering */
56
+ tags?: string[];
57
+
58
+ /** Whether this procedure is deprecated */
59
+ deprecated?: boolean;
60
+
61
+ /** Deprecation message with migration guidance */
62
+ deprecationMessage?: string;
63
+
64
+ /**
65
+ * The procedures that this procedure calls through `ctx.client`: keys (`"shell.run"`) or
66
+ * namespaces (`"fs.*"`). A host with a call policy lets the procedure call only these and the
67
+ * exposed procedures (see `policy.ts`, deep dive MCP-3). `"*"` alone is not allowed: a
68
+ * procedure whose callees come from its input has the `runs-refs` tag.
69
+ */
70
+ calls?: readonly string[];
71
+
72
+ /** Custom metadata fields */
73
+ [key: string]: unknown;
74
+ }
75
+
76
+ // =============================================================================
77
+ // Procedure Context
78
+ // =============================================================================
79
+
80
+ /**
81
+ * Repository provider for storage access.
82
+ * Injected into procedure handlers for data access.
83
+ */
84
+ export interface RepositoryProvider {
85
+ /**
86
+ * Get storage for a collection.
87
+ *
88
+ * @param collection - Collection name
89
+ * @returns Storage instance for the collection
90
+ */
91
+ getStorage<T>(collection: string): CollectionStorage<T>;
92
+
93
+ /**
94
+ * Check if a collection exists.
95
+ *
96
+ * @param collection - Collection name
97
+ */
98
+ hasCollection(collection: string): boolean;
99
+ }
100
+
101
+ /**
102
+ * Context passed to procedure handlers.
103
+ * Contains request metadata and service access.
104
+ */
105
+ export interface ProcedureContext {
106
+ /** Request metadata (auth, tracing, etc.) */
107
+ metadata: Record<string, unknown>;
108
+
109
+ /** Abort signal for cancellation */
110
+ signal?: AbortSignal;
111
+
112
+ /** Repository provider for storage access */
113
+ repository?: RepositoryProvider;
114
+
115
+ /** The full path that was called */
116
+ path: ProcedurePath;
117
+
118
+ /**
119
+ * Event bus for pub/sub messaging.
120
+ * Use for streaming coordination and inter-procedure communication.
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * // Subscribe to updates in a streaming handler
125
+ * handler: async function* (input, ctx) {
126
+ * yield await getInitial(input.id);
127
+ *
128
+ * for await (const update of ctx.bus.stream(`entity:${input.id}`)) {
129
+ * yield update;
130
+ * }
131
+ * }
132
+ *
133
+ * // Emit events from another procedure
134
+ * handler: async (input, ctx) => {
135
+ * const result = await saveEntity(input);
136
+ * ctx.bus.emit(`entity:${input.id}`, result);
137
+ * return result;
138
+ * }
139
+ * ```
140
+ */
141
+ bus?: EventBus;
142
+
143
+ /**
144
+ * Client for calling other procedures.
145
+ * Enables inter-procedure communication via the RPC mechanism.
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * handler: async (input, ctx) => {
150
+ * // Call fs.mkdir procedure
151
+ * await ctx.client.call(["fs", "mkdir"], { path: input.dir });
152
+ *
153
+ * // Call git.init procedure
154
+ * await ctx.client.call(["git", "init"], { cwd: input.dir });
155
+ *
156
+ * return { created: true };
157
+ * }
158
+ * ```
159
+ */
160
+ client: ProcedureClient;
161
+
162
+ /**
163
+ * The registry of the caller: `ctx.client` finds the nested procedures here. A procedure that
164
+ * reads or changes the registry (`procedure.define`, `client.lookup`) uses this one. When it is
165
+ * not set, such a procedure uses `PROCEDURE_REGISTRY`.
166
+ */
167
+ registry?: ProcedureRegistryLike;
168
+
169
+ /**
170
+ * The hydration observer of the program that runs this procedure (`client.exec(ref, input,
171
+ * { onRef })`). A procedure that hydrates refs itself (control flow, a runner) gives it to
172
+ * `hydrateInput`, so a trace sees the events of its own program only.
173
+ */
174
+ onRef?: ((event: HydrationEvent) => void) | undefined;
175
+ }
176
+
177
+ /**
178
+ * The part of `ProcedureRegistry` that a procedure can use through `ctx.registry`.
179
+ */
180
+ export interface ProcedureRegistryLike {
181
+ get(path: ProcedurePath): AnyProcedure | undefined;
182
+ has(path: ProcedurePath): boolean;
183
+ getAll(): AnyProcedure[];
184
+ register(procedure: AnyProcedure, options?: RegistrationOptions): void;
185
+ unregister(path: ProcedurePath): boolean;
186
+ }
187
+
188
+ /**
189
+ * Interface for procedure-to-procedure calls.
190
+ * Implemented by both Client and ProcedureServer's internal caller.
191
+ */
192
+ export interface ProcedureClient {
193
+ /**
194
+ * Call a procedure by path. For a streaming procedure, the result is the last item.
195
+ */
196
+ call<TInput = unknown, TOutput = unknown>(
197
+ path: ProcedurePath,
198
+ input: TInput
199
+ ): Promise<TOutput>;
200
+
201
+ /**
202
+ * Call a procedure by path and read each output: each item of a streaming procedure, or the
203
+ * one value of another procedure. The procedure starts when the caller reads the first item.
204
+ * An older client has no `stream`.
205
+ */
206
+ stream?<TInput = unknown, TOutput = unknown>(
207
+ path: ProcedurePath,
208
+ input: TInput
209
+ ): AsyncIterable<TOutput>;
210
+ }
211
+
212
+ // =============================================================================
213
+ // Procedure Handler
214
+ // =============================================================================
215
+
216
+ /**
217
+ * Standard procedure handler function (single return).
218
+ * Receives validated input and context, returns output.
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * const handler: StandardHandler<{ id: string }, User> = async (input, ctx) => {
223
+ * const storage = ctx.repository?.getStorage<User>('users');
224
+ * const user = await storage?.get(input.id);
225
+ * if (!user) throw new Error('User not found');
226
+ * return user;
227
+ * };
228
+ * ```
229
+ */
230
+ export type StandardHandler<TInput = unknown, TOutput = unknown> = (
231
+ input: TInput,
232
+ context: ProcedureContext
233
+ ) => Promise<TOutput> | TOutput;
234
+
235
+ /**
236
+ * Generator procedure handler (streaming/multi-yield).
237
+ * Yields output values one or more times.
238
+ *
239
+ * @example
240
+ * ```typescript
241
+ * // Single yield (same as standard, but generator syntax)
242
+ * const handler: GeneratorHandler<{ id: string }, User> = async function* (input, ctx) {
243
+ * const user = await fetchUser(input.id);
244
+ * yield user; // yields once
245
+ * };
246
+ *
247
+ * // Multi-yield streaming
248
+ * const handler: GeneratorHandler<{ roomId: string }, Message> = async function* (input, ctx) {
249
+ * // Initial data
250
+ * yield await getInitialMessages(input.roomId);
251
+ *
252
+ * // Stream updates
253
+ * for await (const msg of ctx.bus.stream(`room:${input.roomId}`)) {
254
+ * yield msg; // yields many times
255
+ * }
256
+ * };
257
+ * ```
258
+ */
259
+ export type GeneratorHandler<TInput = unknown, TOutput = unknown> = (
260
+ input: TInput,
261
+ context: ProcedureContext
262
+ ) => AsyncGenerator<TOutput, void, unknown>;
263
+
264
+ /**
265
+ * Procedure handler function - supports both standard and generator forms.
266
+ *
267
+ * - **Standard handlers**: Return a single value (sync or async)
268
+ * - **Generator handlers**: Yield one or more values
269
+ *
270
+ * The caller's consumption mode (sponge/stream/handlers) determines
271
+ * how the output is delivered, regardless of handler type.
272
+ *
273
+ * @example
274
+ * ```typescript
275
+ * // Standard handler (single return)
276
+ * const handler: ProcedureHandler<{ id: string }, User> = async (input, ctx) => {
277
+ * return await fetchUser(input.id);
278
+ * };
279
+ *
280
+ * // Generator handler (streaming)
281
+ * const handler: ProcedureHandler<{ query: string }, SearchResult> = async function* (input, ctx) {
282
+ * for await (const result of search(input.query)) {
283
+ * yield result;
284
+ * }
285
+ * };
286
+ * ```
287
+ */
288
+ export type ProcedureHandler<TInput = unknown, TOutput = unknown> =
289
+ | StandardHandler<TInput, TOutput>
290
+ | GeneratorHandler<TInput, TOutput>;
291
+
292
+ // =============================================================================
293
+ // Procedure Definition
294
+ // =============================================================================
295
+
296
+ /**
297
+ * Full procedure definition with schemas and optional handler.
298
+ *
299
+ * @example
300
+ * ```typescript
301
+ * const getUserProcedure: Procedure<GetUserInput, User> = {
302
+ * path: ['users', 'get'],
303
+ * input: z.object({ id: z.string() }),
304
+ * output: z.object({ id: z.string(), name: z.string() }),
305
+ * metadata: { description: 'Get user by ID', tags: ['users', 'read'] },
306
+ * handler: async ({ id }, ctx) => { ... },
307
+ * };
308
+ * ```
309
+ */
310
+ export interface Procedure<
311
+ TInput = unknown,
312
+ TOutput = unknown,
313
+ TMeta extends ProcedureMetadata = ProcedureMetadata
314
+ > {
315
+ /** Path in the route tree */
316
+ path: ProcedurePath;
317
+
318
+ /** Input validation schema: a Standard Schema (zod 4, valibot, arktype) or a `ZodLike` */
319
+ input: ProcedureSchema<TInput>;
320
+
321
+ /** Output validation schema: a Standard Schema or a `ZodLike` */
322
+ output: ProcedureSchema<TOutput>;
323
+
324
+ /** Procedure metadata for documentation */
325
+ metadata: TMeta;
326
+
327
+ /**
328
+ * Whether this procedure supports streaming (multi-yield).
329
+ * When true, the handler is expected to be a generator that may yield multiple times.
330
+ * When false or undefined, the procedure yields exactly once.
331
+ *
332
+ * This is a capability declaration - callers can still consume
333
+ * streaming procedures in sponge mode (getting only the final value).
334
+ */
335
+ streaming?: boolean | undefined;
336
+
337
+ /**
338
+ * Output mode declaration - how the procedure produces its output.
339
+ *
340
+ * - `single`: Returns a single value (default) - most procedures
341
+ * - `stream`: Returns multiple values over time (generator that yields many times)
342
+ * - `batch`: Returns an array of values all at once
343
+ *
344
+ * The consumer can choose their consumption mode (sponge/stream/handlers)
345
+ * independently. The system translates automatically:
346
+ *
347
+ * | Producer Mode | Consumer Mode | Result Type |
348
+ * |---------------|---------------|--------------------------|
349
+ * | single | sponge | Promise<T> |
350
+ * | single | stream | AsyncIterable<T> (1 item)|
351
+ * | stream | sponge | Promise<T> (last value) |
352
+ * | stream | stream | AsyncIterable<T> |
353
+ * | batch | sponge | Promise<T[]> |
354
+ * | batch | stream | AsyncIterable<T> |
355
+ */
356
+ outputMode?: 'single' | 'stream' | 'batch' | undefined;
357
+
358
+ /** Server-side handler implementation (optional for stubs and aggregations) */
359
+ handler?: ProcedureHandler<TInput, TOutput> | undefined;
360
+ }
361
+
362
+ /**
363
+ * Procedure without type parameters for generic storage.
364
+ * Uses `any` for handler to allow covariant/contravariant type compatibility.
365
+ */
366
+ export type AnyProcedure = Procedure<any, any, ProcedureMetadata>;
367
+
368
+ // =============================================================================
369
+ // Output Mode Types
370
+ // =============================================================================
371
+
372
+ /**
373
+ * How a procedure produces its output.
374
+ */
375
+ export type OutputMode = 'single' | 'stream' | 'batch';
376
+
377
+ /**
378
+ * Default output mode when not specified.
379
+ */
380
+ export const DEFAULT_OUTPUT_MODE: OutputMode = 'single';
381
+
382
+ // =============================================================================
383
+ // Procedure Result Types
384
+ // =============================================================================
385
+
386
+ /**
387
+ * Result of a procedure call.
388
+ */
389
+ export type ProcedureResult<TOutput> =
390
+ | { success: true; data: TOutput }
391
+ | { success: false; error: ProcedureError };
392
+
393
+ /**
394
+ * Error from procedure execution.
395
+ */
396
+ export interface ProcedureError {
397
+ /** Error code */
398
+ code: string;
399
+
400
+ /** Error message */
401
+ message: string;
402
+
403
+ /** Whether the error is retryable */
404
+ retryable: boolean;
405
+
406
+ /** Validation errors if applicable */
407
+ validationErrors?: ZodErrorLike;
408
+
409
+ /** The procedure path that failed */
410
+ path: ProcedurePath;
411
+ }
412
+
413
+ // =============================================================================
414
+ // Infer Types from Procedure
415
+ // =============================================================================
416
+
417
+ /**
418
+ * Infer input type from a procedure.
419
+ */
420
+ export type InferProcedureInput<T> = T extends Procedure<infer TInput, any, any>
421
+ ? TInput
422
+ : unknown;
423
+
424
+ /**
425
+ * Infer output type from a procedure.
426
+ */
427
+ export type InferProcedureOutput<T> = T extends Procedure<any, infer TOutput, any>
428
+ ? TOutput
429
+ : unknown;
430
+
431
+ /**
432
+ * Infer metadata type from a procedure.
433
+ */
434
+ export type InferProcedureMetadata<T> = T extends Procedure<any, any, infer TMeta>
435
+ ? TMeta
436
+ : ProcedureMetadata;
437
+
438
+ // =============================================================================
439
+ // Registry Events
440
+ // =============================================================================
441
+
442
+ /**
443
+ * Event types emitted by ProcedureRegistry.
444
+ */
445
+ export type RegistryEventType = "register" | "unregister";
446
+
447
+ /**
448
+ * Listener for registry events.
449
+ */
450
+ export interface RegistryListener {
451
+ event: RegistryEventType;
452
+ listener: (procedure: AnyProcedure) => void;
453
+ }
454
+
455
+ // =============================================================================
456
+ // Module Registration
457
+ // =============================================================================
458
+
459
+ /**
460
+ * Module that exports procedures for registration.
461
+ */
462
+ export interface ProcedureModule {
463
+ /** Array of procedures exported by this module */
464
+ procedures: AnyProcedure[];
465
+
466
+ /** Optional module name for debugging */
467
+ name?: string;
468
+
469
+ /**
470
+ * The modules whose procedures this module calls (for example `client-lib` calls `fs.*` and
471
+ * `git.*`). `createRegistry()` registers them too.
472
+ */
473
+ requires?: readonly ProcedureModule[] | undefined;
474
+ }
475
+
476
+ /**
477
+ * Registration options for bulk procedure registration.
478
+ */
479
+ export interface RegistrationOptions {
480
+ /** Override existing procedures with same path */
481
+ override?: boolean;
482
+
483
+ /** Prefix to prepend to all paths */
484
+ pathPrefix?: ProcedurePath;
485
+ }
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Checks of requests that a web browser can send to a procedure server.
3
+ *
4
+ * A server serves its whole registry, often with `shell.*` in it, and a web page that the user
5
+ * opens can send requests to `127.0.0.1`. Before, the HTTP server transport read any request
6
+ * body as JSON, so a "simple" cross-site POST (`Content-Type: text/plain`, no CORS preflight)
7
+ * ran any procedure, and the WebSocket server accepted a connection from any page
8
+ * (cross-site WebSocket hijacking). The checks here are on by default in both transports:
9
+ *
10
+ * - A connection that arrives on a loopback address must name a loopback host in its `Host`
11
+ * header. A DNS rebinding attack sends the name of the attacker's site.
12
+ * - A browser request (an `Origin` header) must come from the server's own origin, or from an
13
+ * origin in `allowedOrigins`.
14
+ * - A request that the browser marks `Sec-Fetch-Site: cross-site` or `same-site` and that has
15
+ * no allowed origin is refused (an image tag or a form sends no `Origin` for a GET).
16
+ * - HTTP only: a procedure call by GET or HEAD is refused unless `allowGet` is true, and a
17
+ * request body must be JSON.
18
+ */
19
+
20
+ import type { IncomingHttpHeaders } from "node:http";
21
+
22
+ const LOOPBACK_NAMES = new Set(["localhost", "127.0.0.1", "::1", "[::1]"]);
23
+
24
+ /** The options of the browser checks of a server transport. */
25
+ export interface BrowserGuardOptions {
26
+ /**
27
+ * The web origins that can call the server, besides its own origin. `"*"` allows every
28
+ * origin. A function decides for each origin.
29
+ * @default [] (only the server's own origin)
30
+ */
31
+ allowedOrigins?: readonly string[] | "*" | ((origin: string) => boolean) | undefined;
32
+ /**
33
+ * The host names that a request on a loopback address can name in its `Host` header,
34
+ * besides the loopback names. `"*"` turns the check off.
35
+ * @default [] (only `localhost`, `127.0.0.1` and `[::1]`)
36
+ */
37
+ allowedHosts?: readonly string[] | "*" | undefined;
38
+ /**
39
+ * HTTP only: accept procedure calls by GET or HEAD. A RESTful URL strategy needs this. A GET
40
+ * is a request that any page can send (an image tag), so it is off by default.
41
+ * @default false
42
+ */
43
+ allowGet?: boolean | undefined;
44
+ }
45
+
46
+ /** The parts of an incoming request that the checks read. */
47
+ export interface GuardedRequest {
48
+ method?: string | undefined;
49
+ headers: IncomingHttpHeaders;
50
+ socket?: { localAddress?: string | undefined } | undefined;
51
+ }
52
+
53
+ /** The result of the checks: the request passes, or the HTTP status and the error to send. */
54
+ export type GuardResult =
55
+ | { readonly ok: true }
56
+ | { readonly ok: false; readonly status: 403 | 405 | 415; readonly code: string; readonly message: string };
57
+
58
+ /** True for a host name or a bind address that only this computer can reach. */
59
+ export function isLoopbackHost(host: string): boolean {
60
+ return LOOPBACK_NAMES.has(host.toLowerCase());
61
+ }
62
+
63
+ /** True for a local socket address on the loopback interface (IPv4, IPv6, or IPv4 in IPv6). */
64
+ export function isLoopbackAddress(address: string | undefined): boolean {
65
+ if (!address) return false;
66
+ const plain = address.startsWith("::ffff:") ? address.slice("::ffff:".length) : address;
67
+ return plain === "::1" || plain.startsWith("127.");
68
+ }
69
+
70
+ /** The name of a Host header without its port: "localhost:3000" gives "localhost", "[::1]:80" gives "[::1]". */
71
+ export function hostNameOf(header: string | undefined): string {
72
+ if (!header) return "";
73
+ if (header.startsWith("[")) return header.slice(0, header.indexOf("]") + 1).toLowerCase();
74
+ return (header.split(":")[0] ?? "").toLowerCase();
75
+ }
76
+
77
+ function originAllowedBy(origin: string, allowed: BrowserGuardOptions["allowedOrigins"]): boolean {
78
+ if (allowed === "*") return true;
79
+ if (typeof allowed === "function") return allowed(origin);
80
+ return (allowed ?? []).includes(origin);
81
+ }
82
+
83
+ /** True when the origin is the origin of the server that the request names in its Host header. */
84
+ function sameOrigin(origin: string, hostHeader: string | undefined): boolean {
85
+ if (!hostHeader) return false;
86
+ try {
87
+ return new URL(origin).host.toLowerCase() === hostHeader.toLowerCase();
88
+ } catch {
89
+ return false;
90
+ }
91
+ }
92
+
93
+ /** True for a media type of JSON: `application/json` or a `+json` type. */
94
+ function isJsonType(contentType: string | undefined): boolean {
95
+ const type = (contentType ?? "").split(";")[0]!.trim().toLowerCase();
96
+ return type === "application/json" || type.endsWith("+json");
97
+ }
98
+
99
+ /** True when the request has a body: a `Content-Length` above 0, or a chunked body. */
100
+ function hasBody(headers: IncomingHttpHeaders): boolean {
101
+ const length = Number(headers["content-length"] ?? 0);
102
+ return length > 0 || headers["transfer-encoding"] !== undefined;
103
+ }
104
+
105
+ /**
106
+ * The checks of the host, the origin and the fetch site, for HTTP and WebSocket requests.
107
+ * `http` adds the checks of the method and the body.
108
+ */
109
+ export function checkBrowserRequest(
110
+ req: GuardedRequest,
111
+ options: BrowserGuardOptions = {},
112
+ http = false
113
+ ): GuardResult {
114
+ const { headers } = req;
115
+
116
+ // DNS rebinding: a request on a loopback address must name a loopback host
117
+ if (options.allowedHosts !== "*" && isLoopbackAddress(req.socket?.localAddress)) {
118
+ const name = hostNameOf(headers.host);
119
+ if (!LOOPBACK_NAMES.has(name) && !(options.allowedHosts ?? []).includes(name)) {
120
+ return { ok: false, status: 403, code: "FORBIDDEN_HOST", message: `Forbidden: the host "${name}" is not allowed` };
121
+ }
122
+ }
123
+
124
+ const origin = typeof headers.origin === "string" ? headers.origin : undefined;
125
+ if (origin !== undefined) {
126
+ if (!sameOrigin(origin, headers.host) && !originAllowedBy(origin, options.allowedOrigins)) {
127
+ return { ok: false, status: 403, code: "FORBIDDEN_ORIGIN", message: `Forbidden: the origin "${origin}" is not allowed` };
128
+ }
129
+ } else {
130
+ const site = headers["sec-fetch-site"];
131
+ if ((site === "cross-site" || site === "same-site") && options.allowedOrigins !== "*") {
132
+ return { ok: false, status: 403, code: "FORBIDDEN_ORIGIN", message: "Forbidden: a request from another site" };
133
+ }
134
+ }
135
+
136
+ if (http) {
137
+ const method = (req.method ?? "GET").toUpperCase();
138
+ if ((method === "GET" || method === "HEAD") && !options.allowGet) {
139
+ return { ok: false, status: 405, code: "METHOD_NOT_ALLOWED", message: "Call a procedure with POST" };
140
+ }
141
+ if (hasBody(headers) && !isJsonType(headers["content-type"])) {
142
+ return { ok: false, status: 415, code: "UNSUPPORTED_MEDIA_TYPE", message: "The request body must be JSON (Content-Type: application/json)" };
143
+ }
144
+ }
145
+
146
+ return { ok: true };
147
+ }