@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,623 @@
1
+ /**
2
+ * HTTP Server Transport Implementation
3
+ *
4
+ * Adapts Express HTTP server to unified RPC format.
5
+ * Converts HTTP requests to ServerRequest and ServerResponse back to HTTP.
6
+ */
7
+
8
+ import type { Request, Response, Express } from "express";
9
+ import { createServer } from "http";
10
+ import type { Server as HttpServer } from "http";
11
+ import type { ServerTransport, ServerRequest, ServerResponse } from "../../../server/types.js";
12
+ import type { Metadata } from "../../../client/types.js";
13
+ import type { Server } from "../../../server/index.js";
14
+ import { HTTPMethod, HTTPHeaders, decodeMetadataHeader, METADATA_HEADER_LIMIT } from "../shared/index.js";
15
+ import { ERROR_REGISTRY } from "../../../client/errors/index.js";
16
+ import type { HttpServerTransportOptions } from "./types.js";
17
+ import { createPatternServerUrlStrategy } from "./strategies.js";
18
+ import { checkBrowserRequest, type BrowserGuardOptions } from "../../../server/browser-guard.js";
19
+
20
+ /** The media type of a stream response: one JSON value on each line. */
21
+ const NDJSON = "application/x-ndjson";
22
+
23
+ /** The metadata keys that the transport sets: a query parameter or a header cannot replace them. */
24
+ const RESERVED_METADATA = new Set(["headers", "query", "params"]);
25
+
26
+ /** The error of a request body that the transport cannot read. */
27
+ class BodyError extends Error {
28
+ constructor(
29
+ message: string,
30
+ readonly httpStatus: number
31
+ ) {
32
+ super(message);
33
+ }
34
+ }
35
+
36
+ /** The code and message of a thrown error, with its retryable flag (deep dive TRN-7). */
37
+ function errorOf(error: unknown): { code: string; message: string; retryable: boolean } {
38
+ const code = (error as { code?: unknown } | undefined)?.code;
39
+ const retryable = (error as { retryable?: unknown } | undefined)?.retryable;
40
+ return {
41
+ code: typeof code === "string" ? code : "HANDLER_ERROR",
42
+ message: error instanceof Error ? error.message : String(error),
43
+ retryable: typeof retryable === "boolean" ? retryable : false,
44
+ };
45
+ }
46
+
47
+ /**
48
+ * Write one chunk. When the response's buffer is full, wait for "drain", or for the end of the
49
+ * request (deep dive TRN-3: before, the server ignored the result of write() and ran a stream
50
+ * to its end whatever the reader did).
51
+ */
52
+ function write(res: Response, chunk: string, signal: AbortSignal): Promise<void> {
53
+ if (res.write(chunk) || signal.aborted) return Promise.resolve();
54
+ return new Promise<void>((resolve) => {
55
+ const done = (): void => {
56
+ res.off("drain", done);
57
+ res.off("close", done);
58
+ signal.removeEventListener("abort", done);
59
+ resolve();
60
+ };
61
+ res.on("drain", done);
62
+ res.on("close", done);
63
+ signal.addEventListener("abort", done, { once: true });
64
+ });
65
+ }
66
+
67
+ /**
68
+ * The HTTP status of the error codes of a procedure invocation (they are not in the error
69
+ * registry, so before, a validation error was a 500).
70
+ */
71
+ const INVOCATION_HTTP_STATUS: Record<string, number> = {
72
+ VALIDATION_ERROR: 400,
73
+ NOT_EXPOSED: 403,
74
+ NOT_DECLARED: 403,
75
+ FORBIDDEN: 403,
76
+ NOT_FOUND: 404,
77
+ NO_HANDLER: 404,
78
+ ABORTED: 499,
79
+ TIMEOUT: 504,
80
+ OUTPUT_VALIDATION_ERROR: 500,
81
+ NO_OUTPUT: 500,
82
+ HANDLER_ERROR: 500,
83
+ };
84
+
85
+ /**
86
+ * HTTP server transport adapter for Express.
87
+ *
88
+ * Converts HTTP requests to unified RPC format and responses back to HTTP.
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const server = new Server();
93
+ * const app = express();
94
+ * app.use(express.json({ strict: false })); // optional: the transport can read the body itself
95
+ * const httpTransport = new HttpServerTransport(server, {
96
+ * app,
97
+ * port: 3000,
98
+ * // The default URL strategy parses the HTTP client's format: /api/{service}/{operation}
99
+ * });
100
+ *
101
+ * await httpTransport.start();
102
+ * ```
103
+ */
104
+ /**
105
+ * The origins that the CORS options allow: a page that CORS lets read the response can also
106
+ * call. With CORS off, no other origin can call.
107
+ */
108
+ function corsOrigins(options: HttpServerTransportOptions): BrowserGuardOptions["allowedOrigins"] {
109
+ if (!options.cors) return [];
110
+ const origin = options.corsOptions?.origin ?? "*";
111
+ if (origin === "*") return "*";
112
+ return Array.isArray(origin) ? origin : [origin];
113
+ }
114
+
115
+ export class HttpServerTransport implements ServerTransport {
116
+ readonly name = "http";
117
+
118
+ private app: Express;
119
+ private httpServer: HttpServer | null = null;
120
+ private options: Required<
121
+ Omit<
122
+ HttpServerTransportOptions,
123
+ "app" | "corsOptions" | "httpServer" | "bodyLimit" | "allowedOrigins" | "allowedHosts" | "allowGet"
124
+ >
125
+ > & {
126
+ corsOptions: HttpServerTransportOptions["corsOptions"] | undefined;
127
+ httpServer: HttpServer | undefined;
128
+ };
129
+ private server: Server;
130
+ /** The controllers of the requests in progress: stop() aborts them (deep dive TRN-15) */
131
+ private openRequests = new Set<AbortController>();
132
+ private stopped = false;
133
+ private readonly bodyLimit: number;
134
+ /** The browser checks of each procedure call (see `server/browser-guard.ts`) */
135
+ private readonly guard: BrowserGuardOptions;
136
+
137
+ constructor(server: Server, options: HttpServerTransportOptions = {}) {
138
+ this.server = server;
139
+ const basePath = options.basePath ?? "/api";
140
+ this.options = {
141
+ port: options.port ?? 3000,
142
+ // Loopback by default (see BUGS-2026-07 H19), and route by URL path so the raw server matches
143
+ // the HTTP client's default URL format instead of inferring the operation from the verb
144
+ // (which lost the payload for get/list/find/watch). See BUGS-2026-07 (C3, bug 16).
145
+ host: options.host ?? "127.0.0.1",
146
+ urlStrategy: options.urlStrategy ?? createPatternServerUrlStrategy(basePath),
147
+ basePath,
148
+ cors: options.cors ?? false,
149
+ corsOptions: options.corsOptions,
150
+ httpServer: options.httpServer,
151
+ };
152
+ this.bodyLimit = options.bodyLimit ?? 1024 * 1024;
153
+ this.guard = {
154
+ allowedOrigins: options.allowedOrigins ?? corsOrigins(options),
155
+ allowedHosts: options.allowedHosts,
156
+ allowGet: options.allowGet,
157
+ };
158
+
159
+ // Use provided app or create new one
160
+ if (options.app) {
161
+ this.app = options.app;
162
+ } else {
163
+ throw new Error(
164
+ "Express app is required. Please provide an app instance via options.app"
165
+ );
166
+ }
167
+
168
+ // Setup routes
169
+ this.setupRoutes();
170
+ }
171
+
172
+ /**
173
+ * Setup Express routes.
174
+ */
175
+ private setupRoutes(): void {
176
+ // CORS
177
+ if (this.options.cors) {
178
+ // The given options go over the defaults. Before, options with only `origin` replaced
179
+ // them all, and the server sent "Access-Control-Allow-Headers: undefined".
180
+ const corsOptions = {
181
+ origin: "*" as string | string[],
182
+ methods: [
183
+ HTTPMethod.GET,
184
+ HTTPMethod.POST,
185
+ HTTPMethod.PUT,
186
+ HTTPMethod.DELETE,
187
+ HTTPMethod.PATCH,
188
+ HTTPMethod.OPTIONS,
189
+ ],
190
+ // The headers that HttpTransport sends from the metadata. Without X-Metadata, a page of
191
+ // another origin failed its preflight for every call with custom metadata (pagination).
192
+ allowedHeaders: [
193
+ "Content-Type",
194
+ "Accept",
195
+ HTTPHeaders.AUTHORIZATION,
196
+ HTTPHeaders.API_KEY,
197
+ HTTPHeaders.REQUEST_ID,
198
+ HTTPHeaders.TRACE_ID,
199
+ HTTPHeaders.SPAN_ID,
200
+ HTTPHeaders.PARENT_SPAN_ID,
201
+ HTTPHeaders.TIMEOUT,
202
+ HTTPHeaders.METADATA,
203
+ "collection",
204
+ "collectionName",
205
+ "database",
206
+ ],
207
+ credentials: true,
208
+ ...this.options.corsOptions,
209
+ };
210
+
211
+ // One allowed origin goes back: the request's origin when it is in the list (a header
212
+ // with several origins is invalid), with Vary: Origin so that caches keep them apart
213
+ const origins = corsOptions.origin ?? "*";
214
+ const allowOrigin = (requestOrigin: string | undefined): string | undefined => {
215
+ if (origins === "*") return "*";
216
+ const list = Array.isArray(origins) ? origins : [origins];
217
+ return requestOrigin !== undefined && list.includes(requestOrigin) ? requestOrigin : undefined;
218
+ };
219
+
220
+ this.app.use((req, res, next) => {
221
+ const allowed = allowOrigin(req.headers.origin);
222
+ if (origins !== "*") res.vary("Origin");
223
+ if (allowed !== undefined) res.header("Access-Control-Allow-Origin", allowed);
224
+ res.header(
225
+ "Access-Control-Allow-Methods",
226
+ corsOptions.methods?.join(", ")
227
+ );
228
+ res.header(
229
+ "Access-Control-Allow-Headers",
230
+ corsOptions.allowedHeaders?.join(", ")
231
+ );
232
+ if (corsOptions.credentials) {
233
+ res.header("Access-Control-Allow-Credentials", "true");
234
+ }
235
+
236
+ if (req.method === "OPTIONS") {
237
+ res.sendStatus(204);
238
+ return;
239
+ }
240
+
241
+ next();
242
+ });
243
+ }
244
+
245
+ // Catch-all route for RPC - use regex to match any path under basePath
246
+ this.app.all(
247
+ new RegExp(`^${this.options.basePath.replace(/\//g, "\\/")}\\/.*`),
248
+ async (req, res) => {
249
+ await this.handleHttpRequest(req, res);
250
+ }
251
+ );
252
+ }
253
+
254
+ /**
255
+ * Handle HTTP request.
256
+ * Converts to unified RPC format, processes, and sends response.
257
+ */
258
+ private async handleHttpRequest(req: Request, res: Response): Promise<void> {
259
+ if (this.stopped) {
260
+ res.status(503).json({ error: "Server stopped", code: "SERVER_STOPPED", retryable: true });
261
+ return;
262
+ }
263
+ // A web page must not reach the procedures: host, origin, method and body type
264
+ const guard = checkBrowserRequest(req, this.guard, true);
265
+ if (!guard.ok) {
266
+ res.status(guard.status).json({ error: guard.message, code: guard.code, retryable: false });
267
+ return;
268
+ }
269
+ // A closed connection or stop() aborts the request: a stream stops, and its handler gets return()
270
+ const controller = new AbortController();
271
+ this.openRequests.add(controller);
272
+ res.on("close", () => {
273
+ this.openRequests.delete(controller);
274
+ if (!res.writableFinished) controller.abort();
275
+ });
276
+ try {
277
+ // Convert HTTP request to ServerRequest
278
+ let serverRequest: ServerRequest | null;
279
+ try {
280
+ serverRequest = this.httpToServerRequest(req, await this.readBody(req));
281
+ } catch (error) {
282
+ const status = error instanceof BodyError ? error.httpStatus : 400;
283
+ res.status(status).json({ error: (error as Error).message, code: "INVALID_REQUEST", retryable: false });
284
+ return;
285
+ }
286
+
287
+ if (!serverRequest) {
288
+ res.status(400).json({
289
+ error: "Invalid request: could not parse RPC method from URL",
290
+ });
291
+ return;
292
+ }
293
+
294
+ serverRequest.signal = controller.signal;
295
+
296
+ // Process request through universal server
297
+ const serverResponse = await this.server.handle(serverRequest);
298
+
299
+ if (serverResponse.stream) {
300
+ await this.streamToHttp(serverResponse, serverResponse.stream, req, res, controller.signal);
301
+ return;
302
+ }
303
+
304
+ // Convert ServerResponse to HTTP response
305
+ this.serverResponseToHttp(serverResponse, res);
306
+ } catch (error) {
307
+ if (!res.headersSent) {
308
+ res.status(500).json({
309
+ error: (error as Error).message || "Internal server error",
310
+ });
311
+ }
312
+ } finally {
313
+ this.openRequests.delete(controller);
314
+ }
315
+ }
316
+
317
+ /**
318
+ * The request body. A body parser of the app (`express.json({ strict: false })`) gives
319
+ * `req.body`. Without one, the transport reads the JSON body itself: before, every payload
320
+ * was {} when the app had no parser, and a parser with `strict: true` rejected a number or
321
+ * a string (deep dive TRN-10).
322
+ */
323
+ private async readBody(req: Request): Promise<unknown> {
324
+ if (req.body !== undefined) return req.body;
325
+ if (req.method === "GET" || req.method === "HEAD" || req.readableEnded) return undefined;
326
+ const chunks: Buffer[] = [];
327
+ let size = 0;
328
+ for await (const chunk of req as AsyncIterable<Buffer | string>) {
329
+ const buffer = typeof chunk === "string" ? Buffer.from(chunk) : chunk;
330
+ size += buffer.length;
331
+ if (size > this.bodyLimit) throw new BodyError(`The request body is larger than ${this.bodyLimit} bytes`, 413);
332
+ chunks.push(buffer);
333
+ }
334
+ const text = Buffer.concat(chunks).toString("utf8");
335
+ if (text.trim() === "") return undefined;
336
+ try {
337
+ return JSON.parse(text) as unknown;
338
+ } catch {
339
+ throw new BodyError("The request body is not valid JSON", 400);
340
+ }
341
+ }
342
+
343
+ /**
344
+ * Convert HTTP request to ServerRequest.
345
+ */
346
+ /**
347
+ * Send a stream response.
348
+ *
349
+ * A client that accepts `application/x-ndjson` gets one JSON line for each item
350
+ * (`{"type":"item","payload":...}`), then `{"type":"done"}`, or `{"type":"error","error":...}`.
351
+ * Another client (curl, a browser fetch without the header) gets the last item as plain JSON,
352
+ * the "sponge" mode, so a streaming procedure does not change its response format.
353
+ */
354
+ private async streamToHttp(
355
+ response: ServerResponse,
356
+ stream: AsyncIterable<unknown>,
357
+ req: Request,
358
+ res: Response,
359
+ signal: AbortSignal
360
+ ): Promise<void> {
361
+ const ndjson = String(req.headers.accept ?? "").includes(NDJSON);
362
+
363
+ if (!ndjson) {
364
+ let last: { value: unknown } | undefined;
365
+ try {
366
+ for await (const item of stream) last = { value: item };
367
+ } catch (error) {
368
+ this.serverResponseToHttp({ id: response.id, status: { type: "error", ...errorOf(error) }, metadata: {} }, res);
369
+ return;
370
+ }
371
+ if (!last) {
372
+ this.serverResponseToHttp(
373
+ {
374
+ id: response.id,
375
+ status: { type: "error", code: "NO_OUTPUT", message: "The procedure gave no output", retryable: false },
376
+ metadata: {},
377
+ },
378
+ res
379
+ );
380
+ return;
381
+ }
382
+ this.serverResponseToHttp({ id: response.id, status: response.status, metadata: response.metadata, payload: last.value }, res);
383
+ return;
384
+ }
385
+
386
+ res.status(200);
387
+ res.setHeader("Content-Type", NDJSON);
388
+ res.setHeader("Cache-Control", "no-cache");
389
+ res.flushHeaders();
390
+ // stop() aborted the request while the reader still listens: end the stream with an error
391
+ const endAborted = (): void => {
392
+ if (!res.writableEnded && !res.destroyed) {
393
+ res.end(JSON.stringify({ type: "error", error: { code: "ABORTED", message: "The server stopped the request", retryable: true } }) + "\n");
394
+ }
395
+ };
396
+ try {
397
+ for await (const item of stream) {
398
+ if (signal.aborted) break;
399
+ await write(res, JSON.stringify({ type: "item", payload: item }) + "\n", signal);
400
+ if (signal.aborted) break;
401
+ }
402
+ if (signal.aborted) {
403
+ endAborted();
404
+ return;
405
+ }
406
+ res.end(JSON.stringify({ type: "done" }) + "\n");
407
+ } catch (error) {
408
+ if (signal.aborted) {
409
+ endAborted();
410
+ return;
411
+ }
412
+ res.end(JSON.stringify({ type: "error", error: errorOf(error) }) + "\n");
413
+ }
414
+ }
415
+
416
+ private httpToServerRequest(req: Request, body: unknown): ServerRequest | null {
417
+ // Parse method from URL using strategy
418
+ const method = this.options.urlStrategy(req);
419
+ if (!method) {
420
+ return null;
421
+ }
422
+
423
+ // Generate request ID
424
+ const id =
425
+ (req.headers["x-request-id"] as string) ??
426
+ `req-${Date.now()}-${Math.random()}`;
427
+
428
+ // Build metadata from headers and query params. The flattened query parameters cannot
429
+ // replace headers, query or params (before, "?headers=x" replaced metadata.headers).
430
+ const metadata: Metadata = {
431
+ headers: req.headers as Record<string, string>,
432
+ query: req.query,
433
+ params: req.params,
434
+ };
435
+ for (const [key, value] of Object.entries(req.query)) {
436
+ if (!RESERVED_METADATA.has(key) && !key.startsWith("__")) metadata[key] = value;
437
+ }
438
+
439
+ // Extract custom headers to root-level metadata
440
+ // This mirrors the client's metadataToHeaders() behavior
441
+ const standardHeaders = new Set([
442
+ "host",
443
+ "connection",
444
+ "content-length",
445
+ "content-type",
446
+ "user-agent",
447
+ "accept",
448
+ "accept-encoding",
449
+ "accept-language",
450
+ "cache-control",
451
+ "origin",
452
+ "referer",
453
+ "x-request-id",
454
+ "x-trace-id",
455
+ "x-span-id",
456
+ "x-parent-span-id",
457
+ "x-timeout",
458
+ "x-api-key",
459
+ "authorization",
460
+ "x-metadata",
461
+ ]);
462
+
463
+ // Known custom header mappings (lowercase → camelCase)
464
+ const headerMappings: Record<string, string> = {
465
+ 'collectionname': 'collectionName',
466
+ };
467
+
468
+ for (const [key, value] of Object.entries(req.headers)) {
469
+ if (!standardHeaders.has(key.toLowerCase()) && typeof value === "string") {
470
+ // Use mapped name if available, otherwise use original key
471
+ const normalizedKey = headerMappings[key.toLowerCase()] || key;
472
+ if (!RESERVED_METADATA.has(normalizedKey) && !normalizedKey.startsWith("__")) {
473
+ metadata[normalizedKey] = value;
474
+ }
475
+ }
476
+ }
477
+
478
+ // The custom metadata of the HTTP client: any JSON value, any key (deep dive TRN-11)
479
+ const encoded = req.headers["x-metadata"];
480
+ if (typeof encoded === "string") {
481
+ if (encoded.length > METADATA_HEADER_LIMIT) {
482
+ throw new BodyError(`The X-Metadata header is longer than ${METADATA_HEADER_LIMIT} characters`, 431);
483
+ }
484
+ const custom = decodeMetadataHeader(encoded);
485
+ if (!custom) throw new BodyError("The X-Metadata header is not URI-encoded JSON of an object", 400);
486
+ for (const [key, value] of Object.entries(custom)) {
487
+ if (!RESERVED_METADATA.has(key) && key !== "auth" && !key.startsWith("__")) metadata[key] = value;
488
+ }
489
+ }
490
+
491
+ // Payload from body (for POST/PUT) or params (for GET)
492
+ let payload: unknown = body;
493
+ if (req.method === "GET" && req.params["id"]) {
494
+ payload = { id: req.params["id"] };
495
+ }
496
+
497
+ // Default to empty object only if there is no payload (common for GET requests): 0, false,
498
+ // "" and null stay (deep dive TRN-10)
499
+ if (payload === undefined) {
500
+ payload = {};
501
+ }
502
+
503
+ return {
504
+ id,
505
+ method,
506
+ payload,
507
+ metadata,
508
+ };
509
+ }
510
+
511
+ /**
512
+ * Convert ServerResponse to HTTP response.
513
+ */
514
+ private serverResponseToHttp(
515
+ serverResponse: ServerResponse,
516
+ res: Response
517
+ ): void {
518
+ const { status, payload, metadata } = serverResponse;
519
+
520
+ // Set status code (convert string to number if needed)
521
+ let httpStatusCode: number;
522
+ if (typeof status.code === "string") {
523
+ // status.code is a symbolic error code (e.g. "VALIDATION_ERROR", "NOT_FOUND"). Map it to an
524
+ // HTTP status via the error registry rather than parseInt (which yields NaN -> 500, so every
525
+ // error became a 500). See documentation/BUGS-2026-07.md (M7).
526
+ const mapped =
527
+ INVOCATION_HTTP_STATUS[status.code] ??
528
+ (ERROR_REGISTRY as Record<string, { httpStatus?: number }>)[status.code]?.httpStatus;
529
+ httpStatusCode = mapped ?? (status.type === "success" ? 200 : 500);
530
+ } else if (typeof status.code === "number") {
531
+ httpStatusCode = status.code;
532
+ } else {
533
+ // Default to 200 for success, 500 for error if code is null/undefined
534
+ httpStatusCode = status.type === "success" ? 200 : 500;
535
+ }
536
+ res.status(httpStatusCode);
537
+
538
+ // Set headers from metadata
539
+ if (metadata["headers"]) {
540
+ for (const [key, value] of Object.entries(metadata["headers"])) {
541
+ res.setHeader(key, value as string);
542
+ }
543
+ }
544
+
545
+ // Send response. A procedure that gave no result answers 204 with no body: before, the
546
+ // body was empty with a JSON content type, and the client got "" (deep dive TRN-10).
547
+ if (status.type === "success") {
548
+ if (payload === undefined) {
549
+ res.status(204).end();
550
+ return;
551
+ }
552
+ res.json(payload);
553
+ } else {
554
+ res.json({
555
+ error: status.message,
556
+ code: status.code,
557
+ retryable: status.retryable,
558
+ });
559
+ }
560
+ }
561
+
562
+ async start(): Promise<void> {
563
+ this.stopped = false;
564
+ // If an HTTP server was provided, use it (don't create or listen)
565
+ if (this.options.httpServer) {
566
+ this.httpServer = this.options.httpServer;
567
+ console.log(`[${this.name}] Using existing HTTP server`);
568
+ return Promise.resolve();
569
+ }
570
+
571
+ // Otherwise, create and listen on a new HTTP server
572
+ return new Promise((resolve, reject) => {
573
+ try {
574
+ const server = createServer(this.app);
575
+ this.httpServer = server;
576
+
577
+ server.listen(this.options.port, this.options.host, () => {
578
+ console.log(
579
+ `[${this.name}] Server listening on http://${this.options.host}:${this.options.port}`
580
+ );
581
+ resolve();
582
+ });
583
+
584
+ server.on("error", reject);
585
+ } catch (error) {
586
+ reject(error);
587
+ }
588
+ });
589
+ }
590
+
591
+ /**
592
+ * Stop the transport. The requests in progress are aborted: an open stream ends, and its
593
+ * handler gets return(). A server that the caller gave in `httpServer` stays open: the
594
+ * caller owns it. Before, stop() waited for open streams forever and closed the caller's
595
+ * server (deep dive TRN-15).
596
+ */
597
+ async stop(): Promise<void> {
598
+ this.stopped = true;
599
+ for (const controller of this.openRequests) controller.abort();
600
+ this.openRequests.clear();
601
+
602
+ if (this.options.httpServer || !this.httpServer) {
603
+ return;
604
+ }
605
+ const server = this.httpServer;
606
+ await new Promise<void>((resolve, reject) => {
607
+ server.close((err) => {
608
+ if (err) {
609
+ reject(err);
610
+ } else {
611
+ console.log(`[${this.name}] Server stopped`);
612
+ resolve();
613
+ }
614
+ });
615
+ // Idle keep-alive connections and finished streams do not keep close() waiting
616
+ server.closeAllConnections();
617
+ });
618
+ }
619
+
620
+ isRunning(): boolean {
621
+ return !this.stopped && this.httpServer !== null && this.httpServer.listening;
622
+ }
623
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * HTTP Server Transport Types
3
+ *
4
+ * Type definitions for HTTP server adapter.
5
+ */
6
+
7
+ import type { Request, Express } from "express";
8
+ import type { Server as HttpServer } from "http";
9
+ import type { Method } from "../../../client/types.js";
10
+ import type { BrowserGuardOptions } from "../../../server/browser-guard.js";
11
+
12
+ /**
13
+ * URL strategy for converting HTTP requests to RPC methods.
14
+ */
15
+ export type HttpUrlStrategy = (req: Request) => Method | null;
16
+
17
+ /**
18
+ * HTTP server transport options.
19
+ */
20
+ export interface HttpServerTransportOptions extends BrowserGuardOptions {
21
+ /**
22
+ * Express app instance.
23
+ * If not provided, a new app will be created.
24
+ */
25
+ app?: Express;
26
+
27
+ /**
28
+ * Existing HTTP server to use (optional).
29
+ * If provided, the transport will not create a new server or call listen().
30
+ * Useful for sharing the same HTTP server with WebSocket.
31
+ */
32
+ httpServer?: HttpServer;
33
+
34
+ /**
35
+ * Port to listen on.
36
+ * @default 3000
37
+ */
38
+ port?: number;
39
+
40
+ /**
41
+ * Host to bind to.
42
+ * @default "127.0.0.1"
43
+ */
44
+ host?: string;
45
+
46
+ /**
47
+ * URL strategy for converting HTTP requests to RPC methods.
48
+ * @default createPatternServerUrlStrategy(basePath): the format of the HTTP client
49
+ */
50
+ urlStrategy?: HttpUrlStrategy;
51
+
52
+ /**
53
+ * Base path for RPC endpoints.
54
+ * @default "/api"
55
+ */
56
+ basePath?: string;
57
+
58
+ /**
59
+ * Enable CORS.
60
+ * @default false
61
+ */
62
+ cors?: boolean;
63
+
64
+ /**
65
+ * The largest request body, in bytes, when the transport reads the body itself (the app has
66
+ * no body parser).
67
+ * @default 1 MiB
68
+ */
69
+ bodyLimit?: number;
70
+
71
+ /**
72
+ * Custom CORS options. `origin` is "*", one origin or a list: the response names the
73
+ * request's origin when it is in the list.
74
+ */
75
+ corsOptions?: {
76
+ origin?: string | string[];
77
+ methods?: string[];
78
+ allowedHeaders?: string[];
79
+ credentials?: boolean;
80
+ };
81
+ }