raffel 1.0.6 → 1.0.7

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 (513) hide show
  1. package/README.md +80 -33
  2. package/dist/adapters/grpc.d.ts +2 -2
  3. package/dist/adapters/grpc.d.ts.map +1 -1
  4. package/dist/adapters/grpc.js +37 -7
  5. package/dist/adapters/grpc.js.map +1 -1
  6. package/dist/adapters/http.d.ts +2 -2
  7. package/dist/adapters/http.d.ts.map +1 -1
  8. package/dist/adapters/http.js +56 -2
  9. package/dist/adapters/http.js.map +1 -1
  10. package/dist/adapters/inbound/grpc.d.ts +9 -0
  11. package/dist/adapters/inbound/grpc.d.ts.map +1 -0
  12. package/dist/adapters/inbound/grpc.js +8 -0
  13. package/dist/adapters/inbound/grpc.js.map +1 -0
  14. package/dist/adapters/inbound/http.d.ts +9 -0
  15. package/dist/adapters/inbound/http.d.ts.map +1 -0
  16. package/dist/adapters/inbound/http.js +8 -0
  17. package/dist/adapters/inbound/http.js.map +1 -0
  18. package/dist/adapters/inbound/index.d.ts +22 -0
  19. package/dist/adapters/inbound/index.d.ts.map +1 -0
  20. package/dist/adapters/inbound/index.js +22 -0
  21. package/dist/adapters/inbound/index.js.map +1 -0
  22. package/dist/adapters/inbound/jsonrpc.d.ts +9 -0
  23. package/dist/adapters/inbound/jsonrpc.d.ts.map +1 -0
  24. package/dist/adapters/inbound/jsonrpc.js +8 -0
  25. package/dist/adapters/inbound/jsonrpc.js.map +1 -0
  26. package/dist/adapters/inbound/tcp.d.ts +9 -0
  27. package/dist/adapters/inbound/tcp.d.ts.map +1 -0
  28. package/dist/adapters/inbound/tcp.js +8 -0
  29. package/dist/adapters/inbound/tcp.js.map +1 -0
  30. package/dist/adapters/inbound/udp.d.ts +9 -0
  31. package/dist/adapters/inbound/udp.d.ts.map +1 -0
  32. package/dist/adapters/inbound/udp.js +8 -0
  33. package/dist/adapters/inbound/udp.js.map +1 -0
  34. package/dist/adapters/inbound/utils/connection-filter.d.ts +9 -0
  35. package/dist/adapters/inbound/utils/connection-filter.d.ts.map +1 -0
  36. package/dist/adapters/inbound/utils/connection-filter.js +8 -0
  37. package/dist/adapters/inbound/utils/connection-filter.js.map +1 -0
  38. package/dist/adapters/inbound/websocket.d.ts +9 -0
  39. package/dist/adapters/inbound/websocket.d.ts.map +1 -0
  40. package/dist/adapters/inbound/websocket.js +8 -0
  41. package/dist/adapters/inbound/websocket.js.map +1 -0
  42. package/dist/adapters/index.d.ts +12 -0
  43. package/dist/adapters/index.d.ts.map +1 -1
  44. package/dist/adapters/index.js +13 -0
  45. package/dist/adapters/index.js.map +1 -1
  46. package/dist/adapters/jsonrpc.d.ts.map +1 -1
  47. package/dist/adapters/jsonrpc.js +39 -5
  48. package/dist/adapters/jsonrpc.js.map +1 -1
  49. package/dist/adapters/outbound/cache/file.d.ts +6 -0
  50. package/dist/adapters/outbound/cache/file.d.ts.map +1 -0
  51. package/dist/adapters/outbound/cache/file.js +6 -0
  52. package/dist/adapters/outbound/cache/file.js.map +1 -0
  53. package/dist/adapters/outbound/cache/index.d.ts +9 -0
  54. package/dist/adapters/outbound/cache/index.d.ts.map +1 -0
  55. package/dist/adapters/outbound/cache/index.js +9 -0
  56. package/dist/adapters/outbound/cache/index.js.map +1 -0
  57. package/dist/adapters/outbound/cache/memory.d.ts +6 -0
  58. package/dist/adapters/outbound/cache/memory.d.ts.map +1 -0
  59. package/dist/adapters/outbound/cache/memory.js +6 -0
  60. package/dist/adapters/outbound/cache/memory.js.map +1 -0
  61. package/dist/adapters/outbound/cache/redis.d.ts +6 -0
  62. package/dist/adapters/outbound/cache/redis.d.ts.map +1 -0
  63. package/dist/adapters/outbound/cache/redis.js +6 -0
  64. package/dist/adapters/outbound/cache/redis.js.map +1 -0
  65. package/dist/adapters/outbound/index.d.ts +15 -0
  66. package/dist/adapters/outbound/index.d.ts.map +1 -0
  67. package/dist/adapters/outbound/index.js +17 -0
  68. package/dist/adapters/outbound/index.js.map +1 -0
  69. package/dist/adapters/outbound/logger/index.d.ts +7 -0
  70. package/dist/adapters/outbound/logger/index.d.ts.map +1 -0
  71. package/dist/adapters/outbound/logger/index.js +7 -0
  72. package/dist/adapters/outbound/logger/index.js.map +1 -0
  73. package/dist/adapters/outbound/logger/pino.d.ts +12 -0
  74. package/dist/adapters/outbound/logger/pino.d.ts.map +1 -0
  75. package/dist/adapters/outbound/logger/pino.js +58 -0
  76. package/dist/adapters/outbound/logger/pino.js.map +1 -0
  77. package/dist/adapters/outbound/rate-limit/filesystem.d.ts +6 -0
  78. package/dist/adapters/outbound/rate-limit/filesystem.d.ts.map +1 -0
  79. package/dist/adapters/outbound/rate-limit/filesystem.js +6 -0
  80. package/dist/adapters/outbound/rate-limit/filesystem.js.map +1 -0
  81. package/dist/adapters/outbound/rate-limit/index.d.ts +10 -0
  82. package/dist/adapters/outbound/rate-limit/index.d.ts.map +1 -0
  83. package/dist/adapters/outbound/rate-limit/index.js +10 -0
  84. package/dist/adapters/outbound/rate-limit/index.js.map +1 -0
  85. package/dist/adapters/outbound/rate-limit/memory.d.ts +8 -0
  86. package/dist/adapters/outbound/rate-limit/memory.d.ts.map +1 -0
  87. package/dist/adapters/outbound/rate-limit/memory.js +8 -0
  88. package/dist/adapters/outbound/rate-limit/memory.js.map +1 -0
  89. package/dist/adapters/outbound/rate-limit/redis.d.ts +6 -0
  90. package/dist/adapters/outbound/rate-limit/redis.d.ts.map +1 -0
  91. package/dist/adapters/outbound/rate-limit/redis.js +6 -0
  92. package/dist/adapters/outbound/rate-limit/redis.js.map +1 -0
  93. package/dist/adapters/outbound/rate-limit/s3db.d.ts +6 -0
  94. package/dist/adapters/outbound/rate-limit/s3db.d.ts.map +1 -0
  95. package/dist/adapters/outbound/rate-limit/s3db.js +6 -0
  96. package/dist/adapters/outbound/rate-limit/s3db.js.map +1 -0
  97. package/dist/adapters/outbound/session/index.d.ts +12 -0
  98. package/dist/adapters/outbound/session/index.d.ts.map +1 -0
  99. package/dist/adapters/outbound/session/index.js +9 -0
  100. package/dist/adapters/outbound/session/index.js.map +1 -0
  101. package/dist/adapters/outbound/session/memory.d.ts +9 -0
  102. package/dist/adapters/outbound/session/memory.d.ts.map +1 -0
  103. package/dist/adapters/outbound/session/memory.js +8 -0
  104. package/dist/adapters/outbound/session/memory.js.map +1 -0
  105. package/dist/adapters/outbound/session/redis.d.ts +9 -0
  106. package/dist/adapters/outbound/session/redis.d.ts.map +1 -0
  107. package/dist/adapters/outbound/session/redis.js +8 -0
  108. package/dist/adapters/outbound/session/redis.js.map +1 -0
  109. package/dist/adapters/outbound/session/s3db.d.ts +9 -0
  110. package/dist/adapters/outbound/session/s3db.d.ts.map +1 -0
  111. package/dist/adapters/outbound/session/s3db.js +8 -0
  112. package/dist/adapters/outbound/session/s3db.js.map +1 -0
  113. package/dist/adapters/tcp.d.ts +2 -2
  114. package/dist/adapters/tcp.d.ts.map +1 -1
  115. package/dist/adapters/tcp.js +16 -3
  116. package/dist/adapters/tcp.js.map +1 -1
  117. package/dist/adapters/udp.d.ts +2 -2
  118. package/dist/adapters/udp.d.ts.map +1 -1
  119. package/dist/adapters/udp.js +16 -4
  120. package/dist/adapters/udp.js.map +1 -1
  121. package/dist/adapters/websocket.d.ts +2 -2
  122. package/dist/adapters/websocket.d.ts.map +1 -1
  123. package/dist/adapters/websocket.js +33 -9
  124. package/dist/adapters/websocket.js.map +1 -1
  125. package/dist/application/config-preview.d.ts +147 -0
  126. package/dist/application/config-preview.d.ts.map +1 -0
  127. package/dist/application/config-preview.js +122 -0
  128. package/dist/application/config-preview.js.map +1 -0
  129. package/dist/application/index.d.ts +13 -0
  130. package/dist/application/index.d.ts.map +1 -0
  131. package/dist/application/index.js +13 -0
  132. package/dist/application/index.js.map +1 -0
  133. package/dist/application/registration.d.ts +71 -0
  134. package/dist/application/registration.d.ts.map +1 -0
  135. package/dist/application/registration.js +99 -0
  136. package/dist/application/registration.js.map +1 -0
  137. package/dist/application/runtime-preview.d.ts +67 -0
  138. package/dist/application/runtime-preview.d.ts.map +1 -0
  139. package/dist/application/runtime-preview.js +43 -0
  140. package/dist/application/runtime-preview.js.map +1 -0
  141. package/dist/bootstrap/config-normalization.d.ts +10 -0
  142. package/dist/bootstrap/config-normalization.d.ts.map +1 -0
  143. package/dist/bootstrap/config-normalization.js +14 -0
  144. package/dist/bootstrap/config-normalization.js.map +1 -0
  145. package/dist/bootstrap/create-server.d.ts +15 -0
  146. package/dist/bootstrap/create-server.d.ts.map +1 -0
  147. package/dist/bootstrap/create-server.js +17 -0
  148. package/dist/bootstrap/create-server.js.map +1 -0
  149. package/dist/bootstrap/index.d.ts +11 -0
  150. package/dist/bootstrap/index.d.ts.map +1 -0
  151. package/dist/bootstrap/index.js +13 -0
  152. package/dist/bootstrap/index.js.map +1 -0
  153. package/dist/bootstrap/protocol-wiring.d.ts +13 -0
  154. package/dist/bootstrap/protocol-wiring.d.ts.map +1 -0
  155. package/dist/bootstrap/protocol-wiring.js +11 -0
  156. package/dist/bootstrap/protocol-wiring.js.map +1 -0
  157. package/dist/channels/channel-manager.d.ts +2 -1
  158. package/dist/channels/channel-manager.d.ts.map +1 -1
  159. package/dist/channels/channel-manager.js +52 -19
  160. package/dist/channels/channel-manager.js.map +1 -1
  161. package/dist/core/registry.d.ts +4 -0
  162. package/dist/core/registry.d.ts.map +1 -1
  163. package/dist/core/registry.js +23 -3
  164. package/dist/core/registry.js.map +1 -1
  165. package/dist/core/router.d.ts.map +1 -1
  166. package/dist/core/router.js +61 -10
  167. package/dist/core/router.js.map +1 -1
  168. package/dist/docs/generators/code-samples.d.ts.map +1 -1
  169. package/dist/docs/generators/code-samples.js +7 -75
  170. package/dist/docs/generators/code-samples.js.map +1 -1
  171. package/dist/docs/generators/grpc-generator.js +2 -2
  172. package/dist/docs/generators/grpc-generator.js.map +1 -1
  173. package/dist/docs/generators/http-generator.js +3 -2
  174. package/dist/docs/generators/http-generator.js.map +1 -1
  175. package/dist/docs/generators/index.d.ts +1 -1
  176. package/dist/docs/generators/index.d.ts.map +1 -1
  177. package/dist/docs/generators/index.js +1 -1
  178. package/dist/docs/generators/index.js.map +1 -1
  179. package/dist/docs/generators/jsonrpc-generator.js +2 -2
  180. package/dist/docs/generators/jsonrpc-generator.js.map +1 -1
  181. package/dist/docs/generators/schema-converter.d.ts +3 -3
  182. package/dist/docs/generators/schema-converter.d.ts.map +1 -1
  183. package/dist/docs/generators/schema-converter.js +8 -60
  184. package/dist/docs/generators/schema-converter.js.map +1 -1
  185. package/dist/docs/generators/streams-generator.js +2 -2
  186. package/dist/docs/generators/streams-generator.js.map +1 -1
  187. package/dist/docs/generators/tcp-generator.js +2 -2
  188. package/dist/docs/generators/tcp-generator.js.map +1 -1
  189. package/dist/docs/generators/udp-generator.js +2 -2
  190. package/dist/docs/generators/udp-generator.js.map +1 -1
  191. package/dist/docs/generators/websocket-generator.js +3 -3
  192. package/dist/docs/generators/websocket-generator.js.map +1 -1
  193. package/dist/docs/index.d.ts +1 -1
  194. package/dist/docs/index.d.ts.map +1 -1
  195. package/dist/docs/index.js +1 -1
  196. package/dist/docs/index.js.map +1 -1
  197. package/dist/docs/openapi/generator.d.ts +2 -0
  198. package/dist/docs/openapi/generator.d.ts.map +1 -1
  199. package/dist/docs/openapi/generator.js +16 -51
  200. package/dist/docs/openapi/generator.js.map +1 -1
  201. package/dist/dx/index.d.ts +2 -0
  202. package/dist/dx/index.d.ts.map +1 -1
  203. package/dist/dx/index.js +1 -0
  204. package/dist/dx/index.js.map +1 -1
  205. package/dist/dx/scaffold/index.d.ts +32 -0
  206. package/dist/dx/scaffold/index.d.ts.map +1 -0
  207. package/dist/dx/scaffold/index.js +471 -0
  208. package/dist/dx/scaffold/index.js.map +1 -0
  209. package/dist/graphql/adapter.d.ts.map +1 -1
  210. package/dist/graphql/adapter.js +58 -6
  211. package/dist/graphql/adapter.js.map +1 -1
  212. package/dist/graphql/schema-generator.d.ts +2 -2
  213. package/dist/graphql/schema-generator.d.ts.map +1 -1
  214. package/dist/graphql/schema-generator.js +228 -215
  215. package/dist/graphql/schema-generator.js.map +1 -1
  216. package/dist/http/app.d.ts +9 -4
  217. package/dist/http/app.d.ts.map +1 -1
  218. package/dist/http/app.js +125 -50
  219. package/dist/http/app.js.map +1 -1
  220. package/dist/http/context.d.ts +8 -1
  221. package/dist/http/context.d.ts.map +1 -1
  222. package/dist/http/context.js +2 -1
  223. package/dist/http/context.js.map +1 -1
  224. package/dist/http/cookie.d.ts +2 -2
  225. package/dist/http/cookie.js +1 -1
  226. package/dist/http/cors.d.ts +1 -1
  227. package/dist/http/cors.js +1 -1
  228. package/dist/http/guards.d.ts.map +1 -1
  229. package/dist/http/guards.js +38 -28
  230. package/dist/http/guards.js.map +1 -1
  231. package/dist/http/index.d.ts +1 -1
  232. package/dist/http/index.js +2 -2
  233. package/dist/http/index.js.map +1 -1
  234. package/dist/http/stream-auth.d.ts +1 -1
  235. package/dist/http/stream-auth.d.ts.map +1 -1
  236. package/dist/http/stream-auth.js +6 -5
  237. package/dist/http/stream-auth.js.map +1 -1
  238. package/dist/index.d.ts +23 -7
  239. package/dist/index.d.ts.map +1 -1
  240. package/dist/index.js +22 -3
  241. package/dist/index.js.map +1 -1
  242. package/dist/inspect/contracts.d.ts +47 -0
  243. package/dist/inspect/contracts.d.ts.map +1 -0
  244. package/dist/inspect/contracts.js +237 -0
  245. package/dist/inspect/contracts.js.map +1 -0
  246. package/dist/inspect/format-utils.d.ts +18 -0
  247. package/dist/inspect/format-utils.d.ts.map +1 -0
  248. package/dist/inspect/format-utils.js +55 -0
  249. package/dist/inspect/format-utils.js.map +1 -0
  250. package/dist/inspect/index.d.ts +13 -0
  251. package/dist/inspect/index.d.ts.map +1 -0
  252. package/dist/inspect/index.js +8 -0
  253. package/dist/inspect/index.js.map +1 -0
  254. package/dist/inspect/loader.d.ts +13 -0
  255. package/dist/inspect/loader.d.ts.map +1 -0
  256. package/dist/inspect/loader.js +115 -0
  257. package/dist/inspect/loader.js.map +1 -0
  258. package/dist/inspect/playground-html.d.ts +8 -0
  259. package/dist/inspect/playground-html.d.ts.map +1 -0
  260. package/dist/inspect/playground-html.js +381 -0
  261. package/dist/inspect/playground-html.js.map +1 -0
  262. package/dist/inspect/playground-invokers.d.ts +37 -0
  263. package/dist/inspect/playground-invokers.d.ts.map +1 -0
  264. package/dist/inspect/playground-invokers.js +950 -0
  265. package/dist/inspect/playground-invokers.js.map +1 -0
  266. package/dist/inspect/playground.d.ts +97 -0
  267. package/dist/inspect/playground.d.ts.map +1 -0
  268. package/dist/inspect/playground.js +412 -0
  269. package/dist/inspect/playground.js.map +1 -0
  270. package/dist/inspect/reports.d.ts +52 -0
  271. package/dist/inspect/reports.d.ts.map +1 -0
  272. package/dist/inspect/reports.js +400 -0
  273. package/dist/inspect/reports.js.map +1 -0
  274. package/dist/inspect/runtime-graph.d.ts +52 -0
  275. package/dist/inspect/runtime-graph.d.ts.map +1 -0
  276. package/dist/inspect/runtime-graph.js +739 -0
  277. package/dist/inspect/runtime-graph.js.map +1 -0
  278. package/dist/inspect/schema-samples.d.ts +18 -0
  279. package/dist/inspect/schema-samples.d.ts.map +1 -0
  280. package/dist/inspect/schema-samples.js +137 -0
  281. package/dist/inspect/schema-samples.js.map +1 -0
  282. package/dist/inspect/types.d.ts +146 -0
  283. package/dist/inspect/types.d.ts.map +1 -0
  284. package/dist/inspect/types.js +2 -0
  285. package/dist/inspect/types.js.map +1 -0
  286. package/dist/mcp/cli.d.ts +11 -12
  287. package/dist/mcp/cli.d.ts.map +1 -1
  288. package/dist/mcp/cli.js +303 -65
  289. package/dist/mcp/cli.js.map +1 -1
  290. package/dist/mcp/docs/patterns.d.ts.map +1 -1
  291. package/dist/mcp/docs/patterns.js +82 -29
  292. package/dist/mcp/docs/patterns.js.map +1 -1
  293. package/dist/mcp/docs/quickstart.d.ts +1 -1
  294. package/dist/mcp/docs/quickstart.d.ts.map +1 -1
  295. package/dist/mcp/docs/quickstart.js +65 -25
  296. package/dist/mcp/docs/quickstart.js.map +1 -1
  297. package/dist/mcp/resources/index.d.ts.map +1 -1
  298. package/dist/mcp/resources/index.js +82 -5
  299. package/dist/mcp/resources/index.js.map +1 -1
  300. package/dist/mcp/tools/definitions.d.ts.map +1 -1
  301. package/dist/mcp/tools/definitions.js +36 -0
  302. package/dist/mcp/tools/definitions.js.map +1 -1
  303. package/dist/mcp/tools/handlers.d.ts.map +1 -1
  304. package/dist/mcp/tools/handlers.js +148 -12
  305. package/dist/mcp/tools/handlers.js.map +1 -1
  306. package/dist/middleware/auth.d.ts.map +1 -1
  307. package/dist/middleware/auth.js +3 -2
  308. package/dist/middleware/auth.js.map +1 -1
  309. package/dist/mock-server/cli.d.ts +14 -0
  310. package/dist/mock-server/cli.d.ts.map +1 -0
  311. package/dist/mock-server/cli.js +314 -0
  312. package/dist/mock-server/cli.js.map +1 -0
  313. package/dist/mock-server/fake-data.d.ts +14 -0
  314. package/dist/mock-server/fake-data.d.ts.map +1 -0
  315. package/dist/mock-server/fake-data.js +21 -0
  316. package/dist/mock-server/fake-data.js.map +1 -0
  317. package/dist/mock-server/index.d.ts +69 -0
  318. package/dist/mock-server/index.d.ts.map +1 -0
  319. package/dist/mock-server/index.js +400 -0
  320. package/dist/mock-server/index.js.map +1 -0
  321. package/dist/mock-server/route-extractor.d.ts +40 -0
  322. package/dist/mock-server/route-extractor.d.ts.map +1 -0
  323. package/dist/mock-server/route-extractor.js +211 -0
  324. package/dist/mock-server/route-extractor.js.map +1 -0
  325. package/dist/mock-server/types.d.ts +64 -0
  326. package/dist/mock-server/types.d.ts.map +1 -0
  327. package/dist/mock-server/types.js +5 -0
  328. package/dist/mock-server/types.js.map +1 -0
  329. package/dist/policy/runtime.d.ts +7 -0
  330. package/dist/policy/runtime.d.ts.map +1 -0
  331. package/dist/policy/runtime.js +82 -0
  332. package/dist/policy/runtime.js.map +1 -0
  333. package/dist/ports/index.d.ts +18 -0
  334. package/dist/ports/index.d.ts.map +1 -0
  335. package/dist/ports/index.js +11 -0
  336. package/dist/ports/index.js.map +1 -0
  337. package/dist/ports/outbound/cache-driver.d.ts +9 -0
  338. package/dist/ports/outbound/cache-driver.d.ts.map +1 -0
  339. package/dist/ports/outbound/cache-driver.js +9 -0
  340. package/dist/ports/outbound/cache-driver.js.map +1 -0
  341. package/dist/ports/outbound/cache-store.d.ts +8 -0
  342. package/dist/ports/outbound/cache-store.d.ts.map +1 -0
  343. package/dist/ports/outbound/cache-store.js +8 -0
  344. package/dist/ports/outbound/cache-store.js.map +1 -0
  345. package/dist/ports/outbound/channel-presence.d.ts +30 -0
  346. package/dist/ports/outbound/channel-presence.d.ts.map +1 -0
  347. package/dist/ports/outbound/channel-presence.js +9 -0
  348. package/dist/ports/outbound/channel-presence.js.map +1 -0
  349. package/dist/ports/outbound/event-store.d.ts +9 -0
  350. package/dist/ports/outbound/event-store.d.ts.map +1 -0
  351. package/dist/ports/outbound/event-store.js +9 -0
  352. package/dist/ports/outbound/event-store.js.map +1 -0
  353. package/dist/ports/outbound/logger.d.ts +31 -0
  354. package/dist/ports/outbound/logger.d.ts.map +1 -0
  355. package/dist/ports/outbound/logger.js +8 -0
  356. package/dist/ports/outbound/logger.js.map +1 -0
  357. package/dist/ports/outbound/rate-limit-driver.d.ts +9 -0
  358. package/dist/ports/outbound/rate-limit-driver.d.ts.map +1 -0
  359. package/dist/ports/outbound/rate-limit-driver.js +9 -0
  360. package/dist/ports/outbound/rate-limit-driver.js.map +1 -0
  361. package/dist/ports/outbound/session-store.d.ts +9 -0
  362. package/dist/ports/outbound/session-store.d.ts.map +1 -0
  363. package/dist/ports/outbound/session-store.js +9 -0
  364. package/dist/ports/outbound/session-store.js.map +1 -0
  365. package/dist/ports/outbound/validator.d.ts +9 -0
  366. package/dist/ports/outbound/validator.d.ts.map +1 -0
  367. package/dist/ports/outbound/validator.js +9 -0
  368. package/dist/ports/outbound/validator.js.map +1 -0
  369. package/dist/server/builder/config-preview.d.ts +2 -33
  370. package/dist/server/builder/config-preview.d.ts.map +1 -1
  371. package/dist/server/builder/config-preview.js +1 -94
  372. package/dist/server/builder/config-preview.js.map +1 -1
  373. package/dist/server/builder/lifecycle.d.ts +11 -1
  374. package/dist/server/builder/lifecycle.d.ts.map +1 -1
  375. package/dist/server/builder/lifecycle.js +117 -3
  376. package/dist/server/builder/lifecycle.js.map +1 -1
  377. package/dist/server/builder/single-port-utils.d.ts +11 -2
  378. package/dist/server/builder/single-port-utils.d.ts.map +1 -1
  379. package/dist/server/builder/single-port-utils.js +88 -16
  380. package/dist/server/builder/single-port-utils.js.map +1 -1
  381. package/dist/server/builder.d.ts.map +1 -1
  382. package/dist/server/builder.js +203 -78
  383. package/dist/server/builder.js.map +1 -1
  384. package/dist/server/discovery-utils.d.ts +5 -1
  385. package/dist/server/discovery-utils.d.ts.map +1 -1
  386. package/dist/server/discovery-utils.js +4 -1
  387. package/dist/server/discovery-utils.js.map +1 -1
  388. package/dist/server/front-door.d.ts +3 -1
  389. package/dist/server/front-door.d.ts.map +1 -1
  390. package/dist/server/front-door.js +80 -18
  391. package/dist/server/front-door.js.map +1 -1
  392. package/dist/server/fs-routes/middleware-processor.d.ts.map +1 -1
  393. package/dist/server/fs-routes/middleware-processor.js +9 -8
  394. package/dist/server/fs-routes/middleware-processor.js.map +1 -1
  395. package/dist/server/handler-builders.d.ts +2 -1
  396. package/dist/server/handler-builders.d.ts.map +1 -1
  397. package/dist/server/handler-builders.js +21 -0
  398. package/dist/server/handler-builders.js.map +1 -1
  399. package/dist/server/index.d.ts +4 -2
  400. package/dist/server/index.d.ts.map +1 -1
  401. package/dist/server/index.js +2 -1
  402. package/dist/server/index.js.map +1 -1
  403. package/dist/server/port-binding.d.ts +8 -2
  404. package/dist/server/port-binding.d.ts.map +1 -1
  405. package/dist/server/port-binding.js +11 -1
  406. package/dist/server/port-binding.js.map +1 -1
  407. package/dist/server/protocol-config.d.ts.map +1 -1
  408. package/dist/server/protocol-config.js +1 -0
  409. package/dist/server/protocol-config.js.map +1 -1
  410. package/dist/server/protocol-fusion-diagnostics.d.ts +20 -0
  411. package/dist/server/protocol-fusion-diagnostics.d.ts.map +1 -0
  412. package/dist/server/protocol-fusion-diagnostics.js +51 -0
  413. package/dist/server/protocol-fusion-diagnostics.js.map +1 -0
  414. package/dist/server/rest-middleware.d.ts +3 -3
  415. package/dist/server/rest-middleware.d.ts.map +1 -1
  416. package/dist/server/rest-middleware.js +37 -5
  417. package/dist/server/rest-middleware.js.map +1 -1
  418. package/dist/server/router-module.d.ts +3 -1
  419. package/dist/server/router-module.d.ts.map +1 -1
  420. package/dist/server/router-module.js +14 -0
  421. package/dist/server/router-module.js.map +1 -1
  422. package/dist/server/shared-context.d.ts +3 -3
  423. package/dist/server/shared-context.d.ts.map +1 -1
  424. package/dist/server/shared-context.js +7 -9
  425. package/dist/server/shared-context.js.map +1 -1
  426. package/dist/server/single-port/dispatcher.d.ts.map +1 -1
  427. package/dist/server/single-port/dispatcher.js +20 -13
  428. package/dist/server/single-port/dispatcher.js.map +1 -1
  429. package/dist/server/types.d.ts +104 -7
  430. package/dist/server/types.d.ts.map +1 -1
  431. package/dist/types/context.d.ts +167 -4
  432. package/dist/types/context.d.ts.map +1 -1
  433. package/dist/types/context.js +168 -2
  434. package/dist/types/context.js.map +1 -1
  435. package/dist/types/handlers.d.ts +3 -0
  436. package/dist/types/handlers.d.ts.map +1 -1
  437. package/dist/types/index.d.ts +4 -2
  438. package/dist/types/index.d.ts.map +1 -1
  439. package/dist/types/index.js +2 -1
  440. package/dist/types/index.js.map +1 -1
  441. package/dist/types/policies.d.ts +54 -0
  442. package/dist/types/policies.d.ts.map +1 -0
  443. package/dist/types/policies.js +109 -0
  444. package/dist/types/policies.js.map +1 -0
  445. package/dist/ui/core/registry.d.ts +4 -0
  446. package/dist/ui/core/registry.d.ts.map +1 -1
  447. package/dist/ui/core/router.d.ts.map +1 -1
  448. package/dist/ui/docs/generators/code-samples.d.ts.map +1 -1
  449. package/dist/ui/docs/generators/index.d.ts +1 -1
  450. package/dist/ui/docs/generators/index.d.ts.map +1 -1
  451. package/dist/ui/docs/generators/schema-converter.d.ts +3 -3
  452. package/dist/ui/docs/generators/schema-converter.d.ts.map +1 -1
  453. package/dist/ui/docs/index.d.ts +1 -1
  454. package/dist/ui/docs/index.d.ts.map +1 -1
  455. package/dist/ui/docs/openapi/generator.d.ts +2 -0
  456. package/dist/ui/docs/openapi/generator.d.ts.map +1 -1
  457. package/dist/ui/middleware/interceptors/rate-limit.d.ts +147 -0
  458. package/dist/ui/middleware/interceptors/rate-limit.d.ts.map +1 -0
  459. package/dist/ui/middleware/interceptors/timeout.d.ts +121 -0
  460. package/dist/ui/middleware/interceptors/timeout.d.ts.map +1 -0
  461. package/dist/ui/middleware/types.d.ts +396 -0
  462. package/dist/ui/middleware/types.d.ts.map +1 -0
  463. package/dist/ui/policy/runtime.d.ts +7 -0
  464. package/dist/ui/policy/runtime.d.ts.map +1 -0
  465. package/dist/ui/rate-limit/drivers/filesystem.d.ts +19 -0
  466. package/dist/ui/rate-limit/drivers/filesystem.d.ts.map +1 -0
  467. package/dist/ui/rate-limit/drivers/memory.d.ts +17 -0
  468. package/dist/ui/rate-limit/drivers/memory.d.ts.map +1 -0
  469. package/dist/ui/rate-limit/drivers/redis.d.ts +14 -0
  470. package/dist/ui/rate-limit/drivers/redis.d.ts.map +1 -0
  471. package/dist/ui/rate-limit/drivers/s3db.d.ts +31 -0
  472. package/dist/ui/rate-limit/drivers/s3db.d.ts.map +1 -0
  473. package/dist/ui/rate-limit/factory.d.ts +12 -0
  474. package/dist/ui/rate-limit/factory.d.ts.map +1 -0
  475. package/dist/ui/rate-limit/types.d.ts +81 -0
  476. package/dist/ui/rate-limit/types.d.ts.map +1 -0
  477. package/dist/ui/server/fs-routes/middleware-processor.d.ts.map +1 -1
  478. package/dist/ui/types/context.d.ts +167 -4
  479. package/dist/ui/types/context.d.ts.map +1 -1
  480. package/dist/ui/types/handlers.d.ts +3 -0
  481. package/dist/ui/types/handlers.d.ts.map +1 -1
  482. package/dist/ui/types/index.d.ts +4 -2
  483. package/dist/ui/types/index.d.ts.map +1 -1
  484. package/dist/ui/types/policies.d.ts +54 -0
  485. package/dist/ui/types/policies.d.ts.map +1 -0
  486. package/dist/ui/usd/spec/types.d.ts +3 -0
  487. package/dist/ui/usd/spec/types.d.ts.map +1 -1
  488. package/dist/ui/utils/schema-examples.d.ts +39 -0
  489. package/dist/ui/utils/schema-examples.d.ts.map +1 -0
  490. package/dist/ui/validation/descriptor.d.ts +26 -0
  491. package/dist/ui/validation/descriptor.d.ts.map +1 -0
  492. package/dist/ui/validation/index.d.ts +1 -0
  493. package/dist/ui/validation/index.d.ts.map +1 -1
  494. package/dist/usd/spec/types.d.ts +3 -0
  495. package/dist/usd/spec/types.d.ts.map +1 -1
  496. package/dist/usd/spec/types.js.map +1 -1
  497. package/dist/utils/context-utils.d.ts +3 -2
  498. package/dist/utils/context-utils.d.ts.map +1 -1
  499. package/dist/utils/context-utils.js +4 -0
  500. package/dist/utils/context-utils.js.map +1 -1
  501. package/dist/utils/schema-examples.d.ts +39 -0
  502. package/dist/utils/schema-examples.d.ts.map +1 -0
  503. package/dist/utils/schema-examples.js +240 -0
  504. package/dist/utils/schema-examples.js.map +1 -0
  505. package/dist/validation/descriptor.d.ts +26 -0
  506. package/dist/validation/descriptor.d.ts.map +1 -0
  507. package/dist/validation/descriptor.js +155 -0
  508. package/dist/validation/descriptor.js.map +1 -0
  509. package/dist/validation/index.d.ts +1 -0
  510. package/dist/validation/index.d.ts.map +1 -1
  511. package/dist/validation/index.js +1 -0
  512. package/dist/validation/index.js.map +1 -1
  513. package/package.json +11 -3
@@ -0,0 +1,739 @@
1
+ import { normalizeContractPolicies } from '../types/policies.js';
2
+ import { normalizeSchemaDescriptor } from '../validation/index.js';
3
+ import { RUNTIME_INSPECTION_GRAPH_VERSION, } from './types.js';
4
+ function joinBasePath(basePath, path) {
5
+ const normalizedBase = basePath && basePath !== '/' ? (basePath.startsWith('/') ? basePath : `/${basePath}`) : '';
6
+ const normalizedPath = path.startsWith('/') ? path : `/${path}`;
7
+ if (!normalizedBase) {
8
+ return normalizedPath;
9
+ }
10
+ if (normalizedPath === normalizedBase || normalizedPath.startsWith(`${normalizedBase}/`)) {
11
+ return normalizedPath;
12
+ }
13
+ return `${normalizedBase}${normalizedPath}`;
14
+ }
15
+ function toFieldName(name) {
16
+ const last = name.split('.').pop() ?? name;
17
+ return last.replace(/[-_:]+([a-zA-Z0-9])/g, (_, char) => char.toUpperCase());
18
+ }
19
+ function deriveServiceName(meta, registration) {
20
+ if (registration?.grpc?.serviceName) {
21
+ return registration.grpc.serviceName;
22
+ }
23
+ if (meta.name.startsWith('stream:'))
24
+ return 'streams';
25
+ if (/^[a-z]+:\//.test(meta.name))
26
+ return 'http';
27
+ const parts = meta.name.split('.');
28
+ if (parts.length > 1) {
29
+ return parts.slice(0, -1).join('.');
30
+ }
31
+ return 'default';
32
+ }
33
+ function buildSchema(schema, validator) {
34
+ if (!schema) {
35
+ return { present: false };
36
+ }
37
+ return {
38
+ present: true,
39
+ descriptor: normalizeSchemaDescriptor(schema, { validator: validator }),
40
+ };
41
+ }
42
+ function buildTransportCatalog(config, protocols, basePath, tcpHandlers, udpHandlers) {
43
+ const transports = [{
44
+ id: 'http',
45
+ protocol: 'http',
46
+ enabled: true,
47
+ host: config.entrypoint.host,
48
+ port: config.entrypoint.port,
49
+ path: basePath,
50
+ shared: true,
51
+ source: config.protocols.http.source,
52
+ }];
53
+ if (config.protocols.websocket?.enabled) {
54
+ transports.push({
55
+ id: 'websocket',
56
+ protocol: 'websocket',
57
+ enabled: true,
58
+ host: config.protocols.websocket.host,
59
+ port: config.protocols.websocket.port,
60
+ path: joinBasePath(basePath, config.protocols.websocket.path ?? '/'),
61
+ shared: config.protocols.websocket.shared,
62
+ frontDoor: config.protocols.websocket.frontDoor,
63
+ strategy: config.protocols.websocket.strategy,
64
+ source: config.protocols.websocket.source,
65
+ });
66
+ }
67
+ if (config.protocols.jsonrpc?.enabled) {
68
+ transports.push({
69
+ id: 'jsonrpc',
70
+ protocol: 'jsonrpc',
71
+ enabled: true,
72
+ host: config.protocols.jsonrpc.host,
73
+ port: config.protocols.jsonrpc.port,
74
+ path: joinBasePath(basePath, config.protocols.jsonrpc.path ?? '/rpc'),
75
+ shared: config.protocols.jsonrpc.shared,
76
+ frontDoor: config.protocols.jsonrpc.frontDoor,
77
+ strategy: config.protocols.jsonrpc.strategy,
78
+ source: config.protocols.jsonrpc.source,
79
+ });
80
+ }
81
+ if (config.protocols.graphql?.enabled) {
82
+ transports.push({
83
+ id: 'graphql',
84
+ protocol: 'graphql',
85
+ enabled: true,
86
+ host: config.protocols.graphql.host,
87
+ port: config.protocols.graphql.port,
88
+ path: joinBasePath(basePath, config.protocols.graphql.path ?? '/graphql'),
89
+ shared: config.protocols.graphql.shared,
90
+ frontDoor: config.protocols.graphql.frontDoor,
91
+ strategy: config.protocols.graphql.strategy,
92
+ source: config.protocols.graphql.source,
93
+ });
94
+ }
95
+ if (config.protocols.grpc?.enabled) {
96
+ const grpcOptions = protocols.grpc?.options;
97
+ transports.push({
98
+ id: 'grpc',
99
+ protocol: 'grpc',
100
+ enabled: true,
101
+ host: config.protocols.grpc.host,
102
+ port: config.protocols.grpc.port,
103
+ shared: config.protocols.grpc.shared,
104
+ frontDoor: config.protocols.grpc.frontDoor,
105
+ strategy: config.protocols.grpc.strategy,
106
+ source: config.protocols.grpc.source,
107
+ grpc: grpcOptions ? {
108
+ protoPath: Array.isArray(grpcOptions.protoPath) ? [...grpcOptions.protoPath] : [grpcOptions.protoPath],
109
+ packageName: grpcOptions.packageName,
110
+ serviceNames: grpcOptions.serviceNames ? [...grpcOptions.serviceNames] : undefined,
111
+ } : undefined,
112
+ });
113
+ }
114
+ if (config.protocols.tcp?.enabled) {
115
+ transports.push({
116
+ id: 'tcp',
117
+ protocol: 'tcp',
118
+ enabled: true,
119
+ host: config.protocols.tcp.host,
120
+ port: config.protocols.tcp.port,
121
+ frontDoor: config.protocols.tcp.frontDoor,
122
+ strategy: config.protocols.tcp.strategy,
123
+ source: config.protocols.tcp.source,
124
+ });
125
+ }
126
+ if (tcpHandlers) {
127
+ const tcpTargets = new Set();
128
+ for (const handler of tcpHandlers) {
129
+ const host = handler.config.host;
130
+ const port = handler.config.port;
131
+ const key = `${host}:${port}`;
132
+ if (tcpTargets.has(key))
133
+ continue;
134
+ tcpTargets.add(key);
135
+ const existing = transports.find((transport) => transport.protocol === 'tcp'
136
+ && transport.host === host
137
+ && transport.port === port);
138
+ if (existing)
139
+ continue;
140
+ transports.push({
141
+ id: `tcp:${host}:${port}`,
142
+ protocol: 'tcp',
143
+ enabled: true,
144
+ host,
145
+ port,
146
+ frontDoor: config.frontDoor.protocols?.includes('tcp') ?? false,
147
+ source: config.sharedPort.enabled && port === config.entrypoint.port ? 'singlePort' : (config.frontDoor.protocols?.includes('tcp') ? 'offload' : 'native'),
148
+ });
149
+ }
150
+ }
151
+ if (udpHandlers) {
152
+ const udpTargets = new Set();
153
+ for (const handler of udpHandlers) {
154
+ const host = handler.config.host;
155
+ const port = handler.config.port;
156
+ const key = `${host}:${port}`;
157
+ if (udpTargets.has(key))
158
+ continue;
159
+ udpTargets.add(key);
160
+ transports.push({
161
+ id: `udp:${host}:${port}`,
162
+ protocol: 'udp',
163
+ enabled: true,
164
+ host,
165
+ port,
166
+ frontDoor: config.frontDoor.protocols?.includes('udp') ?? false,
167
+ source: config.sharedPort.enabled && port === config.entrypoint.port ? 'singlePort' : (config.frontDoor.protocols?.includes('udp') ? 'offload' : 'native'),
168
+ });
169
+ }
170
+ }
171
+ return transports;
172
+ }
173
+ function buildOperationBindings(meta, config, protocols, basePath, registration) {
174
+ const bindings = [];
175
+ if (meta.kind === 'procedure') {
176
+ if (meta.httpPath && meta.httpMethod) {
177
+ bindings.push({
178
+ id: `http:${meta.httpMethod}:${meta.httpPath}`,
179
+ protocol: 'http',
180
+ mode: 'rest',
181
+ method: meta.httpMethod,
182
+ path: joinBasePath(basePath, meta.httpPath),
183
+ procedure: meta.name,
184
+ shared: true,
185
+ source: config.protocols.http.source,
186
+ });
187
+ }
188
+ else {
189
+ bindings.push({
190
+ id: `http:POST:${meta.name}`,
191
+ protocol: 'http',
192
+ mode: 'rpc',
193
+ method: 'POST',
194
+ path: joinBasePath(basePath, `/${meta.name}`),
195
+ procedure: meta.name,
196
+ shared: true,
197
+ source: config.protocols.http.source,
198
+ });
199
+ }
200
+ if (config.protocols.jsonrpc?.enabled) {
201
+ bindings.push({
202
+ id: `jsonrpc:${meta.name}`,
203
+ protocol: 'jsonrpc',
204
+ mode: meta.jsonrpc?.notification ? 'notification' : 'request',
205
+ path: joinBasePath(basePath, protocols.jsonrpc?.options.path ?? '/rpc'),
206
+ procedure: meta.name,
207
+ shared: config.protocols.jsonrpc.shared,
208
+ frontDoor: config.protocols.jsonrpc.frontDoor,
209
+ strategy: config.protocols.jsonrpc.strategy,
210
+ source: config.protocols.jsonrpc.source,
211
+ });
212
+ }
213
+ if (config.protocols.graphql?.enabled && meta.graphql?.type) {
214
+ bindings.push({
215
+ id: `graphql:${meta.graphql.type}:${meta.name}`,
216
+ protocol: 'graphql',
217
+ mode: meta.graphql.type === 'query' ? 'query' : 'mutation',
218
+ path: joinBasePath(basePath, protocols.graphql?.options.path ?? '/graphql'),
219
+ field: toFieldName(meta.name),
220
+ procedure: meta.name,
221
+ shared: config.protocols.graphql.shared,
222
+ frontDoor: config.protocols.graphql.frontDoor,
223
+ strategy: config.protocols.graphql.strategy,
224
+ source: config.protocols.graphql.source,
225
+ });
226
+ }
227
+ }
228
+ if (meta.kind === 'stream') {
229
+ bindings.push({
230
+ id: `http:GET:streams/${meta.name}`,
231
+ protocol: 'http',
232
+ mode: 'stream',
233
+ method: 'GET',
234
+ path: joinBasePath(basePath, `/streams/${meta.name}`),
235
+ procedure: meta.name,
236
+ shared: true,
237
+ source: config.protocols.http.source,
238
+ });
239
+ }
240
+ if (meta.kind === 'event') {
241
+ bindings.push({
242
+ id: `http:POST:events/${meta.name}`,
243
+ protocol: 'http',
244
+ mode: 'event',
245
+ method: 'POST',
246
+ path: joinBasePath(basePath, `/events/${meta.name}`),
247
+ procedure: meta.name,
248
+ shared: true,
249
+ source: config.protocols.http.source,
250
+ });
251
+ }
252
+ if (config.protocols.websocket?.enabled) {
253
+ bindings.push({
254
+ id: `websocket:${meta.kind}:${meta.name}`,
255
+ protocol: 'websocket',
256
+ mode: meta.kind === 'procedure' ? 'request' : meta.kind,
257
+ path: joinBasePath(basePath, protocols.websocket?.options.path ?? '/'),
258
+ procedure: meta.name,
259
+ shared: config.protocols.websocket.shared,
260
+ frontDoor: config.protocols.websocket.frontDoor,
261
+ strategy: config.protocols.websocket.strategy,
262
+ source: config.protocols.websocket.source,
263
+ });
264
+ }
265
+ if (config.protocols.tcp?.enabled) {
266
+ bindings.push({
267
+ id: `tcp:${meta.kind}:${meta.name}`,
268
+ protocol: 'tcp',
269
+ mode: meta.kind === 'procedure' ? 'request' : meta.kind,
270
+ procedure: meta.name,
271
+ frontDoor: config.protocols.tcp.frontDoor,
272
+ strategy: config.protocols.tcp.strategy,
273
+ source: config.protocols.tcp.source,
274
+ });
275
+ }
276
+ const grpcMeta = meta.grpc;
277
+ const grpcHint = registration?.grpc;
278
+ if (config.protocols.grpc?.enabled && (grpcMeta || grpcHint)) {
279
+ const type = grpcHint?.type
280
+ ?? grpcMeta?.type
281
+ ?? (grpcMeta?.clientStreaming && grpcMeta?.serverStreaming
282
+ ? 'bidirectional'
283
+ : grpcMeta?.clientStreaming
284
+ ? 'client-streaming'
285
+ : grpcMeta?.serverStreaming
286
+ ? 'server-streaming'
287
+ : 'unary');
288
+ bindings.push({
289
+ id: `grpc:${grpcHint?.serviceName ?? grpcMeta?.serviceName ?? deriveServiceName(meta, registration)}:${grpcHint?.methodName ?? grpcMeta?.methodName ?? meta.name}`,
290
+ protocol: 'grpc',
291
+ mode: type,
292
+ service: grpcHint?.serviceName ?? grpcMeta?.serviceName ?? deriveServiceName(meta, registration),
293
+ operation: grpcHint?.methodName ?? grpcMeta?.methodName ?? meta.name.split('.').pop() ?? meta.name,
294
+ procedure: meta.name,
295
+ frontDoor: config.protocols.grpc.frontDoor,
296
+ strategy: config.protocols.grpc.strategy,
297
+ source: config.protocols.grpc.source,
298
+ });
299
+ }
300
+ return bindings;
301
+ }
302
+ function buildOperations(input) {
303
+ const schemaMap = new Map(input.schemaRegistry.list().map(({ name, schema }) => [name, schema]));
304
+ return input.registry.list().map((meta) => {
305
+ const schema = schemaMap.get(meta.name);
306
+ const registration = input.operationRegistrations?.get(meta.name);
307
+ const inputSchema = buildSchema(schema?.input, schema?.validator);
308
+ const outputSchema = buildSchema(schema?.output, schema?.validator);
309
+ return {
310
+ id: meta.name,
311
+ name: meta.name,
312
+ service: deriveServiceName(meta, registration),
313
+ kind: meta.kind,
314
+ summary: meta.summary,
315
+ description: meta.description,
316
+ tags: [...(meta.tags ?? [])],
317
+ source: registration?.source ?? { kind: 'programmatic', location: '<programmatic>' },
318
+ schema: {
319
+ input: inputSchema,
320
+ output: outputSchema,
321
+ },
322
+ policies: {
323
+ direct: normalizeContractPolicies(meta.policies),
324
+ effective: normalizeContractPolicies(meta.policies),
325
+ },
326
+ transports: buildOperationBindings(meta, input.config, input.protocols, input.basePath, registration),
327
+ };
328
+ });
329
+ }
330
+ function buildChannels(input) {
331
+ const wsTransport = input.config.protocols.websocket;
332
+ if (!wsTransport?.enabled || !input.channels) {
333
+ return [];
334
+ }
335
+ return Array.from(input.channels).map((channel) => ({
336
+ id: channel.name,
337
+ name: channel.name,
338
+ type: channel.type ?? 'public',
339
+ description: channel.description,
340
+ tags: [...(channel.tags ?? [])],
341
+ source: channel.filePath === '<programmatic>'
342
+ ? { kind: 'programmatic', location: channel.filePath }
343
+ : { kind: 'channel', location: channel.filePath },
344
+ auth: channel.config.auth ?? 'none',
345
+ transport: {
346
+ id: `websocket:channel:${channel.name}`,
347
+ protocol: 'websocket',
348
+ mode: 'channel',
349
+ path: joinBasePath(input.basePath, input.protocols.websocket?.options.path ?? '/'),
350
+ procedure: channel.name,
351
+ shared: wsTransport.shared,
352
+ frontDoor: wsTransport.frontDoor,
353
+ strategy: wsTransport.strategy,
354
+ source: input.config.protocols.websocket?.source,
355
+ },
356
+ events: Object.entries(channel.config.events ?? {}).map(([name, config]) => ({
357
+ name,
358
+ input: buildSchema(config.input),
359
+ })),
360
+ }));
361
+ }
362
+ function buildServices(operations) {
363
+ const services = new Map();
364
+ for (const operation of operations) {
365
+ const existing = services.get(operation.service);
366
+ if (existing) {
367
+ existing.push(operation.id);
368
+ }
369
+ else {
370
+ services.set(operation.service, [operation.id]);
371
+ }
372
+ }
373
+ return Array.from(services.entries())
374
+ .sort(([left], [right]) => left.localeCompare(right))
375
+ .map(([name, operationIds]) => ({
376
+ id: name,
377
+ name,
378
+ operationIds: operationIds.sort((left, right) => left.localeCompare(right)),
379
+ }));
380
+ }
381
+ function buildTransportHandlers(input, transports) {
382
+ const handlers = [];
383
+ if (input.tcpHandlers) {
384
+ for (const handler of input.tcpHandlers) {
385
+ const transport = transports.find((candidate) => candidate.protocol === 'tcp'
386
+ && candidate.host === handler.config.host
387
+ && candidate.port === handler.config.port);
388
+ handlers.push({
389
+ id: `tcp:${handler.name}`,
390
+ name: handler.name,
391
+ protocol: 'tcp',
392
+ mode: 'session',
393
+ source: handler.filePath === '<programmatic>'
394
+ ? { kind: 'programmatic', location: handler.filePath }
395
+ : { kind: 'tcp-handler', location: handler.filePath },
396
+ transportId: transport?.id ?? `tcp:${handler.config.host}:${handler.config.port}`,
397
+ target: {
398
+ host: handler.config.host,
399
+ port: handler.config.port,
400
+ },
401
+ details: handler.config.framing
402
+ ? {
403
+ framing: {
404
+ type: handler.config.framing.type,
405
+ lengthBytes: handler.config.framing.lengthBytes,
406
+ lengthEncoding: handler.config.framing.lengthEncoding,
407
+ delimiter: handler.config.framing.delimiter?.toString('utf8'),
408
+ },
409
+ }
410
+ : undefined,
411
+ });
412
+ }
413
+ }
414
+ if (!input.udpHandlers) {
415
+ return handlers;
416
+ }
417
+ for (const handler of input.udpHandlers) {
418
+ const transportId = `udp:${handler.config.host}:${handler.config.port}`;
419
+ handlers.push({
420
+ id: `udp:${handler.name}`,
421
+ name: handler.name,
422
+ protocol: 'udp',
423
+ mode: 'datagram',
424
+ source: handler.filePath === '<programmatic>'
425
+ ? { kind: 'programmatic', location: handler.filePath }
426
+ : { kind: 'udp-handler', location: handler.filePath },
427
+ transportId,
428
+ target: {
429
+ host: handler.config.host,
430
+ port: handler.config.port,
431
+ socketType: handler.config.type,
432
+ },
433
+ details: handler.config.multicast
434
+ ? {
435
+ multicast: {
436
+ group: handler.config.multicast.group,
437
+ interface: handler.config.multicast.interface,
438
+ },
439
+ }
440
+ : undefined,
441
+ });
442
+ }
443
+ return handlers;
444
+ }
445
+ function pushSchemaDiagnostics(diagnostics, operation) {
446
+ for (const [target, schema] of Object.entries(operation.schema)) {
447
+ for (const diagnostic of schema.descriptor?.diagnostics ?? []) {
448
+ diagnostics.push({
449
+ code: diagnostic.code,
450
+ severity: diagnostic.level,
451
+ message: `${operation.name} ${target} schema: ${diagnostic.message}`,
452
+ subject: {
453
+ kind: 'operation',
454
+ id: operation.id,
455
+ },
456
+ });
457
+ }
458
+ }
459
+ }
460
+ function pushOperationalWarnings(diagnostics, operation) {
461
+ const externallyExposed = operation.transports.some((binding) => binding.protocol === 'http' || binding.protocol === 'grpc');
462
+ if (externallyExposed && !operation.policies.effective?.auth) {
463
+ diagnostics.push({
464
+ code: 'MISSING_AUTH_POLICY',
465
+ severity: 'warning',
466
+ message: `${operation.name} is externally exposed without an auth policy`,
467
+ subject: {
468
+ kind: 'operation',
469
+ id: operation.id,
470
+ },
471
+ remediation: 'Attach a contract auth policy or explicitly mark the route as intentionally public.',
472
+ });
473
+ }
474
+ if (externallyExposed && !operation.schema.output.present) {
475
+ diagnostics.push({
476
+ code: 'MISSING_OUTPUT_SCHEMA',
477
+ severity: 'warning',
478
+ message: `${operation.name} is externally exposed without an output schema`,
479
+ subject: {
480
+ kind: 'operation',
481
+ id: operation.id,
482
+ },
483
+ remediation: 'Attach an output schema so docs, tooling, and contract tests can reason about responses.',
484
+ });
485
+ }
486
+ if (operation.source.kind === 'http-namespace'
487
+ || operation.source.kind === 'rpc-namespace'
488
+ || operation.source.kind === 'grpc-namespace') {
489
+ diagnostics.push({
490
+ code: 'LEGACY_TRANSPORT_SURFACE',
491
+ severity: 'warning',
492
+ message: `${operation.name} is registered through the ${operation.source.kind} compatibility surface`,
493
+ subject: {
494
+ kind: 'operation',
495
+ id: operation.id,
496
+ },
497
+ remediation: 'Prefer contract-first procedures/resources plus transport exposure so inspect, explain, docs, and contract tooling stay aligned.',
498
+ data: {
499
+ sourceKind: operation.source.kind,
500
+ },
501
+ });
502
+ }
503
+ }
504
+ function pushConflictDiagnostics(diagnostics, operations) {
505
+ const httpBindings = new Map();
506
+ const grpcBindings = new Map();
507
+ for (const operation of operations) {
508
+ for (const binding of operation.transports) {
509
+ if (binding.protocol === 'http' && binding.method && binding.path) {
510
+ const key = `${binding.method}:${binding.path}`;
511
+ const existing = httpBindings.get(key);
512
+ if (existing) {
513
+ existing.push(operation);
514
+ }
515
+ else {
516
+ httpBindings.set(key, [operation]);
517
+ }
518
+ }
519
+ if (binding.protocol === 'grpc' && binding.service && binding.operation) {
520
+ const key = `${binding.service}.${binding.operation}`;
521
+ const existing = grpcBindings.get(key);
522
+ if (existing) {
523
+ existing.push(operation);
524
+ }
525
+ else {
526
+ grpcBindings.set(key, [operation]);
527
+ }
528
+ }
529
+ }
530
+ }
531
+ for (const [binding, boundOperations] of httpBindings.entries()) {
532
+ if (boundOperations.length < 2)
533
+ continue;
534
+ diagnostics.push({
535
+ code: 'CONFLICTING_HTTP_EXPOSURE',
536
+ severity: 'error',
537
+ message: `Multiple operations resolve to the same HTTP binding (${binding})`,
538
+ subject: {
539
+ kind: 'binding',
540
+ id: binding,
541
+ },
542
+ remediation: 'Change the HTTP path or method so every exposed route is unique.',
543
+ data: {
544
+ operations: boundOperations.map((operation) => operation.id),
545
+ },
546
+ });
547
+ }
548
+ for (const [binding, boundOperations] of grpcBindings.entries()) {
549
+ if (boundOperations.length < 2)
550
+ continue;
551
+ diagnostics.push({
552
+ code: 'CONFLICTING_GRPC_EXPOSURE',
553
+ severity: 'error',
554
+ message: `Multiple operations resolve to the same gRPC binding (${binding})`,
555
+ subject: {
556
+ kind: 'binding',
557
+ id: binding,
558
+ },
559
+ remediation: 'Ensure each gRPC service/method pair is backed by exactly one operation.',
560
+ data: {
561
+ operations: boundOperations.map((operation) => operation.id),
562
+ },
563
+ });
564
+ }
565
+ }
566
+ function pushProtocolFusionDiagnostics(diagnostics, config) {
567
+ if (config.protocolFusion.enabled) {
568
+ diagnostics.push({
569
+ code: 'PROTOCOL_FUSION_MODE',
570
+ severity: 'info',
571
+ message: `Protocol fusion is active in ${config.protocolFusion.mode} mode on the ${config.protocolFusion.entrypoint.toUpperCase()} entrypoint`,
572
+ subject: {
573
+ kind: 'server',
574
+ id: 'protocol-fusion',
575
+ },
576
+ remediation: 'Use `raffel inspect`, `raffel explain`, or `server.getProtocolFusionState()` to inspect routing decisions and recent protocol rejections.',
577
+ data: {
578
+ mode: config.protocolFusion.mode,
579
+ entrypoint: config.protocolFusion.entrypoint,
580
+ },
581
+ });
582
+ }
583
+ if (config.sharedPort.enabled && (config.sharedPort.sniffers?.length ?? 0) > 0) {
584
+ diagnostics.push({
585
+ code: 'CUSTOM_PROTOCOL_SNIFFERS',
586
+ severity: 'info',
587
+ message: `Shared-port protocol fusion runs ${config.sharedPort.sniffers.length} custom sniffer(s): ${config.sharedPort.sniffers.join(', ')}`,
588
+ subject: {
589
+ kind: 'server',
590
+ id: 'shared-port-sniffers',
591
+ },
592
+ remediation: 'Keep custom sniffers deterministic and document their transport mapping so inspect, doctor, and playground workflows stay predictable.',
593
+ data: {
594
+ sniffers: [...config.sharedPort.sniffers],
595
+ },
596
+ });
597
+ }
598
+ const frontDoorOffloadProtocols = (config.frontDoor.protocols ?? []).filter((protocol) => protocol === 'grpc' || protocol === 'tcp' || protocol === 'udp');
599
+ if (frontDoorOffloadProtocols.length > 0) {
600
+ diagnostics.push({
601
+ code: 'FRONT_DOOR_OFFLOAD_PROTOCOLS',
602
+ severity: 'info',
603
+ message: `Front-door exposure includes offloaded protocols: ${frontDoorOffloadProtocols.join(', ')}`,
604
+ subject: {
605
+ kind: 'server',
606
+ id: 'front-door-offload',
607
+ },
608
+ remediation: 'Remember that front-door only parses HTTP-family traffic directly; offloaded protocols still rely on their dedicated adapter/runtime path.',
609
+ data: {
610
+ protocols: frontDoorOffloadProtocols,
611
+ },
612
+ });
613
+ }
614
+ const sharedPortProtocols = new Set(config.sharedPort.protocols ?? []);
615
+ if (config.sharedPort.enabled
616
+ && sharedPortProtocols.size > 0
617
+ && !sharedPortProtocols.has('http')
618
+ && (config.protocols.http.enabled
619
+ || config.protocols.websocket?.enabled
620
+ || config.protocols.jsonrpc?.enabled
621
+ || config.protocols.graphql?.enabled)) {
622
+ diagnostics.push({
623
+ code: 'HTTP_FAMILY_BLOCKED_BY_SHARED_PORT',
624
+ severity: 'warning',
625
+ message: 'sharedPort.protocols excludes http, so HTTP, WebSocket, JSON-RPC, and GraphQL traffic will be rejected at the transport entrypoint',
626
+ subject: {
627
+ kind: 'server',
628
+ id: 'shared-port-http-family',
629
+ },
630
+ remediation: 'Add `http` to `sharedPort.protocols`, or move HTTP-family transports to another listener before relying on inspect/playground workflows.',
631
+ data: {
632
+ allowedProtocols: [...sharedPortProtocols],
633
+ },
634
+ });
635
+ }
636
+ }
637
+ function buildDiagnostics(config, operations) {
638
+ const diagnostics = config.warnings.map((warning, index) => ({
639
+ code: 'CONFIG_WARNING',
640
+ severity: 'warning',
641
+ message: warning,
642
+ subject: {
643
+ kind: 'server',
644
+ id: `config-warning:${index}`,
645
+ },
646
+ }));
647
+ pushProtocolFusionDiagnostics(diagnostics, config);
648
+ for (const operation of operations) {
649
+ pushSchemaDiagnostics(diagnostics, operation);
650
+ pushOperationalWarnings(diagnostics, operation);
651
+ }
652
+ pushConflictDiagnostics(diagnostics, operations);
653
+ return diagnostics;
654
+ }
655
+ function stripUndefined(value) {
656
+ if (Array.isArray(value)) {
657
+ return value.map((entry) => stripUndefined(entry));
658
+ }
659
+ if (!value || typeof value !== 'object') {
660
+ return value;
661
+ }
662
+ const result = {};
663
+ for (const [key, entry] of Object.entries(value)) {
664
+ if (entry === undefined)
665
+ continue;
666
+ result[key] = stripUndefined(entry);
667
+ }
668
+ return result;
669
+ }
670
+ export function serializeRuntimeInspectionTransport(transport) {
671
+ return stripUndefined(transport);
672
+ }
673
+ export function serializeRuntimeInspectionSchema(schema) {
674
+ return stripUndefined(schema);
675
+ }
676
+ export function serializeRuntimeInspectionPolicies(policies) {
677
+ return stripUndefined(policies);
678
+ }
679
+ export function serializeRuntimeInspectionOperation(operation) {
680
+ return stripUndefined({
681
+ ...operation,
682
+ schema: {
683
+ input: serializeRuntimeInspectionSchema(operation.schema.input),
684
+ output: serializeRuntimeInspectionSchema(operation.schema.output),
685
+ },
686
+ policies: serializeRuntimeInspectionPolicies(operation.policies),
687
+ transports: operation.transports.map((binding) => stripUndefined(binding)),
688
+ });
689
+ }
690
+ export function serializeRuntimeInspectionService(service) {
691
+ return stripUndefined(service);
692
+ }
693
+ export function serializeRuntimeInspectionChannel(channel) {
694
+ return stripUndefined({
695
+ ...channel,
696
+ transport: stripUndefined(channel.transport),
697
+ events: channel.events.map((event) => ({
698
+ ...event,
699
+ input: serializeRuntimeInspectionSchema(event.input),
700
+ })),
701
+ });
702
+ }
703
+ export function serializeRuntimeInspectionTransportHandler(handler) {
704
+ return stripUndefined(handler);
705
+ }
706
+ export function serializeRuntimeInspectionDiagnostic(diagnostic) {
707
+ return stripUndefined(diagnostic);
708
+ }
709
+ export function serializeRuntimeInspectionGraph(graph) {
710
+ return stripUndefined({
711
+ ...graph,
712
+ services: graph.services.map(serializeRuntimeInspectionService),
713
+ operations: graph.operations.map(serializeRuntimeInspectionOperation),
714
+ channels: graph.channels.map(serializeRuntimeInspectionChannel),
715
+ transportHandlers: graph.transportHandlers.map(serializeRuntimeInspectionTransportHandler),
716
+ transports: graph.transports.map(serializeRuntimeInspectionTransport),
717
+ diagnostics: graph.diagnostics.map(serializeRuntimeInspectionDiagnostic),
718
+ });
719
+ }
720
+ export function buildRuntimeInspectionGraph(input) {
721
+ const transports = buildTransportCatalog(input.config, input.protocols, input.basePath, input.tcpHandlers, input.udpHandlers);
722
+ const operations = buildOperations(input);
723
+ const channels = buildChannels(input);
724
+ const transportHandlers = buildTransportHandlers(input, transports);
725
+ const services = buildServices(operations);
726
+ const diagnostics = buildDiagnostics(input.config, operations);
727
+ return serializeRuntimeInspectionGraph({
728
+ version: RUNTIME_INSPECTION_GRAPH_VERSION,
729
+ generatedAt: new Date().toISOString(),
730
+ config: input.config,
731
+ services,
732
+ operations,
733
+ channels,
734
+ transportHandlers,
735
+ transports,
736
+ diagnostics,
737
+ });
738
+ }
739
+ //# sourceMappingURL=runtime-graph.js.map