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
@@ -13,15 +13,39 @@ import { createLogger } from '../utils/logger.js';
13
13
  import { createProcedureBuilder, createStreamBuilder, createEventBuilder, createGroupBuilder, joinHandlerName, } from './handler-builders.js';
14
14
  import { createResourceBuilder } from './resource-builder.js';
15
15
  import { registerDiscoveredHandlers, resolveHooksForProcedure } from './discovery-utils.js';
16
+ import { createRegistrationService } from '../application/registration.js';
17
+ import { createRuntimePreviewService } from '../application/runtime-preview.js';
16
18
  import { buildProtocolConfig, resolveSinglePortConfig } from './protocol-config.js';
17
19
  import { normalizeInterceptors as normalizeInterceptorsShared } from './interceptor-utils.js';
18
- import { buildServerConfigPreview, emitConfigWarnings, logSinglePortConfig, } from './builder/config-preview.js';
19
20
  import { createFrontDoorBootstrap, normalizeFrontDoorProtocol } from './front-door.js';
21
+ import { createProtocolFusionDiagnosticsStore, resolveProtocolFusionMode, } from './protocol-fusion-diagnostics.js';
20
22
  import { createDiscoveryBootstrap } from './discovery-bootstrap.js';
21
23
  import { createServerLifecycle } from './builder/lifecycle.js';
22
24
  import { configureMetrics, configureTracing, createTelemetryState, } from './telemetry-bootstrap.js';
23
- import { isSinglePortTcpRouteEnabled as detectSinglePortTcpRouteEnabled, isSinglePortUdpRouteEnabled as detectSinglePortUdpRouteEnabled, } from './builder/single-port-utils.js';
25
+ import { isSinglePortTcpRouteEnabled as detectSinglePortTcpRouteEnabled, isSinglePortGrpcRouteEnabled as detectSinglePortGrpcRouteEnabled, isSinglePortUdpRouteEnabled as detectSinglePortUdpRouteEnabled, } from './builder/single-port-utils.js';
26
+ import { mergeContractPolicies } from '../types/policies.js';
27
+ import { adaptPinoLogger } from '../adapters/outbound/logger/pino.js';
24
28
  const logger = createLogger('server');
29
+ const loggerPort = adaptPinoLogger(logger);
30
+ function policyMetadataFromRouteMeta(meta) {
31
+ if (!meta)
32
+ return undefined;
33
+ return mergeContractPolicies(meta.auth && meta.auth !== 'none'
34
+ ? {
35
+ auth: {
36
+ mode: meta.auth,
37
+ ...(meta.roles && meta.roles.length > 0 && { roles: meta.roles }),
38
+ },
39
+ }
40
+ : undefined, meta.rateLimit
41
+ ? {
42
+ rateLimit: {
43
+ maxRequests: meta.rateLimit.limit,
44
+ windowMs: meta.rateLimit.window,
45
+ },
46
+ }
47
+ : undefined);
48
+ }
25
49
  /**
26
50
  * Check if a value is an async iterable
27
51
  */
@@ -32,7 +56,7 @@ function isAsyncIterable(value) {
32
56
  * Create a unified Raffel server
33
57
  */
34
58
  export function createServer(options) {
35
- const { port, host = '0.0.0.0', basePath = '/', cors = true, eventDelivery, websocket, jsonrpc, tcp, grpc, graphql, middleware, http: httpOptions, frontDoor, singlePort, envelope, discovery, hotReload = isDevelopment(), providers: initialProviders, protocolExtensions: initialProtocolExtensions, protocolAliasMode: serverProtocolAliasMode = 'standard', } = options;
59
+ const { port, host = '0.0.0.0', basePath = '/', cors = true, eventDelivery, websocket, jsonrpc, tcp, grpc, graphql, middleware, http: httpOptions, frontDoor, sharedPort, singlePort, envelope, discovery, hotReload = isDevelopment(), providers: initialProviders, protocolExtensions: initialProtocolExtensions, protocolAliasMode: serverProtocolAliasMode = 'standard', } = options;
36
60
  // Core components
37
61
  const registry = createRegistry();
38
62
  const router = createRouter(registry, { eventDelivery });
@@ -66,7 +90,9 @@ export function createServer(options) {
66
90
  const frontDoorEnabled = frontDoor?.enabled === true;
67
91
  const frontDoorHost = frontDoor?.host ?? host;
68
92
  const frontDoorPort = frontDoor?.port ?? port;
69
- let singlePortConfigInput = singlePort;
93
+ let singlePortConfigInput = sharedPort
94
+ ? { ...(singlePort ?? {}), ...sharedPort }
95
+ : singlePort;
70
96
  let singlePortConfig = resolveSinglePortConfig(singlePortConfigInput);
71
97
  const frontDoorAliasMode = frontDoor?.protocolAliasMode ?? serverProtocolAliasMode;
72
98
  const effectiveHost = frontDoorEnabled ? frontDoorHost : host;
@@ -80,6 +106,16 @@ export function createServer(options) {
80
106
  const getSinglePortSource = () => {
81
107
  return singlePortConfig.enabled ? 'singlePort' : 'native';
82
108
  };
109
+ const protocolFusionDiagnostics = createProtocolFusionDiagnosticsStore({
110
+ getMode: () => resolveProtocolFusionMode(frontDoorEnabled, singlePortConfig.enabled),
111
+ getEntrypoint: () => (singlePortConfig.enabled ? 'tcp' : 'http'),
112
+ getTarget: () => ({
113
+ host: effectiveHost,
114
+ port: effectivePort,
115
+ }),
116
+ getFrontDoorProtocols: () => frontDoorProtocols,
117
+ getSharedPortProtocols: () => singlePortConfig.protocols,
118
+ });
83
119
  const updateSinglePortConfig = (next) => {
84
120
  if (next === undefined)
85
121
  return;
@@ -124,6 +160,7 @@ export function createServer(options) {
124
160
  basePath,
125
161
  effectiveHost,
126
162
  effectivePort,
163
+ onDecision: (decision) => protocolFusionDiagnostics.record(decision),
127
164
  });
128
165
  // Global interceptors (from options + added via .use())
129
166
  const globalInterceptors = middleware ? [...middleware] : [];
@@ -160,6 +197,7 @@ export function createServer(options) {
160
197
  sniffTimeoutMs: singlePortConfig.sniffTimeoutMs,
161
198
  sniffMaxBytes: singlePortConfig.sniffMaxBytes,
162
199
  maxConcurrentDetections: singlePortConfig.maxConcurrentDetections,
200
+ sniffers: singlePortConfig.sniffers,
163
201
  protocols: singlePortConfig.protocols,
164
202
  alpn: singlePortConfig.alpn,
165
203
  }),
@@ -167,15 +205,6 @@ export function createServer(options) {
167
205
  getSinglePortSource,
168
206
  protocols,
169
207
  };
170
- function emitConfiguredWarnings() {
171
- emitConfigWarnings(serverConfigPreviewContext, logger);
172
- }
173
- function getPreviewConfig() {
174
- return buildServerConfigPreview(serverConfigPreviewContext);
175
- }
176
- function logSinglePortConfiguration() {
177
- logSinglePortConfig(serverConfigPreviewContext, logger);
178
- }
179
208
  // Namespace-level interceptors (for shared middleware per protocol)
180
209
  // These are persistent across getter calls, enabling shared middleware chains
181
210
  const httpInterceptors = [];
@@ -198,6 +227,7 @@ export function createServer(options) {
198
227
  providerMiddlewareInstalled: { value: false },
199
228
  portBinding: { value: null },
200
229
  singlePortTcpConnectionHandler: { value: null },
230
+ singlePortGrpcConnectionHandler: { value: null },
201
231
  httpServer: { value: null },
202
232
  wsAdapter: { value: null },
203
233
  jsonRpcAdapter: { value: null },
@@ -244,76 +274,64 @@ export function createServer(options) {
244
274
  const udpServers = [];
245
275
  // Channel definitions discovered from filesystem or added manually
246
276
  const channelRegistry = new Map();
277
+ const operationRegistrations = new Map();
247
278
  // REST resources for HTTP routing
248
279
  const restResourceRegistry = [];
280
+ function recordOperationRegistration(name, registration) {
281
+ operationRegistrations.set(name, registration);
282
+ }
283
+ function programmaticSource(kind = 'programmatic') {
284
+ return { kind, location: '<programmatic>' };
285
+ }
286
+ // Registration service (extracted to application/registration.ts)
287
+ const registrationService = createRegistrationService({
288
+ registry,
289
+ schemaRegistry,
290
+ globalInterceptors,
291
+ logger: loggerPort,
292
+ recordOperationRegistration,
293
+ generateResourceRoutes,
294
+ registerDiscoveredHandlers: (result, targetRegistry, targetSchemaRegistry, interceptors, onRegistered) => {
295
+ registerDiscoveredHandlers(result, targetRegistry, targetSchemaRegistry, interceptors, onRegistered);
296
+ },
297
+ });
249
298
  function registerChannel(channel) {
250
- channelRegistry.set(channel.name, channel);
299
+ registrationService.registerChannel(channelRegistry, channel);
251
300
  }
252
301
  function registerRestResource(resource) {
253
- // Store in registry for HTTP middleware
254
- restResourceRegistry.push(resource);
255
- for (const route of resource.routes) {
256
- // HEAD and OPTIONS have both collection and item routes - differentiate them
257
- const suffix = (route.operation === 'head' || route.operation === 'options')
258
- ? (route.isCollection ? ':collection' : ':item')
259
- : '';
260
- const name = `${resource.name}.${route.operation}${suffix}`;
261
- if (route.inputSchema || route.outputSchema) {
262
- const schema = {};
263
- if (route.inputSchema)
264
- schema.input = route.inputSchema;
265
- if (route.outputSchema)
266
- schema.output = route.outputSchema;
267
- schemaRegistry.register(name, schema);
268
- }
269
- registry.procedure(name, route.handler, {
270
- interceptors: globalInterceptors.length > 0 ? [...globalInterceptors] : undefined,
271
- });
272
- }
273
- logger.debug({ name: resource.name, routes: resource.routes.length }, 'Added REST resource');
302
+ registrationService.registerRestResource(restResourceRegistry, resource);
274
303
  }
275
304
  function registerResource(resource) {
276
- const routes = generateResourceRoutes([resource]);
277
- for (const route of routes) {
278
- const name = `${resource.name}.${route.operation}`;
279
- registry.procedure(name, route.handler, {
280
- interceptors: globalInterceptors.length > 0 ? [...globalInterceptors] : undefined,
281
- });
282
- }
283
- logger.debug({ name: resource.name, operations: routes.length }, 'Added resource');
305
+ registrationService.registerResource(resource);
284
306
  }
285
307
  function registerTcpHandler(handler) {
286
- tcpHandlers.push(handler);
287
- logger.debug({ name: handler.name, port: handler.config.port }, 'Added TCP handler');
308
+ registrationService.registerTcpHandler(tcpHandlers, handler);
288
309
  }
289
310
  function registerUdpHandler(handler) {
290
- udpHandlers.push(handler);
291
- logger.debug({ name: handler.name, port: handler.config.port }, 'Added UDP handler');
311
+ registrationService.registerUdpHandler(udpHandlers, handler);
292
312
  }
293
313
  function applyDiscoveryResult(result) {
294
- registerDiscoveredHandlers(result, registry, schemaRegistry, globalInterceptors);
295
- for (const channel of result.channels) {
296
- registerChannel(channel);
297
- }
298
- for (const resource of result.restResources) {
299
- registerRestResource(resource);
300
- }
301
- for (const resource of result.resources) {
302
- registerResource(resource);
303
- }
304
- for (const handler of result.tcpHandlers) {
305
- registerTcpHandler(handler);
306
- }
307
- for (const handler of result.udpHandlers) {
308
- registerUdpHandler(handler);
309
- }
314
+ registrationService.applyDiscoveryResult(result, channelRegistry, restResourceRegistry, tcpHandlers, udpHandlers);
310
315
  }
316
+ const runtimePreviewService = createRuntimePreviewService({
317
+ registry,
318
+ schemaRegistry,
319
+ basePath,
320
+ channelRegistry,
321
+ tcpHandlers,
322
+ udpHandlers,
323
+ operationRegistrations,
324
+ protocols,
325
+ serverConfigPreviewContext,
326
+ logger: loggerPort,
327
+ });
311
328
  const createFrontDoorDecisionMiddleware = () => frontDoorBootstrap.createDecisionMiddleware({
312
329
  info: logger.info.bind(logger),
313
330
  debug: logger.debug.bind(logger),
314
331
  warn: logger.warn.bind(logger),
315
332
  });
316
333
  const isSinglePortTcpRouteEnabled = () => detectSinglePortTcpRouteEnabled(singlePortConfig.enabled, protocols.tcp?.enabled ?? false, protocols.tcp?.options.port, protocols.tcp?.options.host, effectiveHost, effectivePort);
334
+ const isSinglePortGrpcRouteEnabled = () => detectSinglePortGrpcRouteEnabled(singlePortConfig.enabled, protocols.grpc?.enabled ?? false, protocols.grpc?.options.port, protocols.grpc?.options.host, effectiveHost, effectivePort);
317
335
  const isSinglePortUdpRouteEnabled = (handler) => detectSinglePortUdpRouteEnabled(singlePortConfig.enabled, handler.config.port, handler.config.host, effectiveHost, effectivePort);
318
336
  const serverLifecycle = createServerLifecycle({
319
337
  logger,
@@ -339,12 +357,14 @@ export function createServer(options) {
339
357
  udpServers,
340
358
  singlePortConfig,
341
359
  isSinglePortTcpRouteEnabled,
360
+ isSinglePortGrpcRouteEnabled,
342
361
  isSinglePortUdpRouteEnabled,
343
362
  getSinglePortSource,
344
363
  getSinglePortAliasMode,
364
+ recordProtocolFusionDecision: (decision) => protocolFusionDiagnostics.record(decision),
345
365
  createFrontDoorDecisionMiddleware,
346
366
  applyDiscoveryResult,
347
- logSinglePortConfig: logSinglePortConfiguration,
367
+ logSinglePortConfig: runtimePreviewService.logSinglePortConfiguration,
348
368
  host,
349
369
  effectiveHost,
350
370
  effectivePort,
@@ -355,7 +375,7 @@ export function createServer(options) {
355
375
  usdDocsConfig,
356
376
  });
357
377
  /**
358
- * Register an HTTP route (Hono-style).
378
+ * Register a native HTTP route.
359
379
  * Creates a procedure with the method and path as name (e.g., `get:/users/:id`).
360
380
  *
361
381
  * Interceptor chain order:
@@ -394,6 +414,7 @@ export function createServer(options) {
394
414
  httpMethod: method,
395
415
  interceptors: interceptors.length > 0 ? interceptors : undefined,
396
416
  });
417
+ recordOperationRegistration(name, { source: programmaticSource('http-namespace') });
397
418
  logger.debug({ name, path, method }, 'Added HTTP route');
398
419
  return server;
399
420
  }
@@ -591,7 +612,7 @@ export function createServer(options) {
591
612
  server.grpc(grpcCfg);
592
613
  }
593
614
  }
594
- emitConfiguredWarnings();
615
+ runtimePreviewService.emitWarnings();
595
616
  return server;
596
617
  },
597
618
  withProfile(profile, overrides) {
@@ -633,6 +654,9 @@ export function createServer(options) {
633
654
  return server;
634
655
  },
635
656
  enableSinglePort(config = true) {
657
+ return server.enableSharedPort(config);
658
+ },
659
+ enableSharedPort(config = true) {
636
660
  updateSinglePortConfig(config);
637
661
  return server;
638
662
  },
@@ -741,10 +765,25 @@ export function createServer(options) {
741
765
  ...opts,
742
766
  interceptors: interceptors.length > 0 ? interceptors : undefined,
743
767
  });
768
+ recordOperationRegistration(nameOrHandler, { source: programmaticSource() });
744
769
  return;
745
770
  }
746
771
  // Fluent builder with hooks resolver
747
- return createProcedureBuilder(registry, schemaRegistry, nameOrHandler, [...globalInterceptors], hooksResolver, envelopeInterceptor);
772
+ return createProcedureBuilder(registry, schemaRegistry, nameOrHandler, [...globalInterceptors], hooksResolver, envelopeInterceptor, (procedureName, procedureHandler, registration) => {
773
+ registry.procedure(procedureName, procedureHandler, {
774
+ summary: registration.summary,
775
+ description: registration.description,
776
+ tags: registration.tags,
777
+ graphql: registration.graphql,
778
+ httpPath: registration.httpPath,
779
+ httpMethod: registration.httpMethod,
780
+ jsonrpc: registration.jsonrpc,
781
+ grpc: registration.grpc,
782
+ policies: registration.policies,
783
+ interceptors: registration.interceptors,
784
+ });
785
+ recordOperationRegistration(procedureName, { source: programmaticSource() });
786
+ });
748
787
  },
749
788
  stream(name) {
750
789
  return createStreamBuilder(registry, schemaRegistry, name, [...globalInterceptors]);
@@ -763,7 +802,7 @@ export function createServer(options) {
763
802
  tags: [name],
764
803
  });
765
804
  },
766
- // === HTTP Routes (Hono-style) ===
805
+ // === HTTP Routes ===
767
806
  get(path, optionsOrHandler, maybeHandler) {
768
807
  return registerHttpRoute('GET', path, optionsOrHandler, maybeHandler);
769
808
  },
@@ -823,6 +862,7 @@ export function createServer(options) {
823
862
  tags: def.tags,
824
863
  httpPath,
825
864
  httpMethod,
865
+ policies: def.policies,
826
866
  interceptors: interceptors.length > 0 ? interceptors : undefined,
827
867
  });
828
868
  logger.debug({ name, httpPath, httpMethod }, 'Added procedure from map');
@@ -989,6 +1029,9 @@ export function createServer(options) {
989
1029
  const httpMethod = 'meta' in input ? input.meta?.httpMethod : input.httpMethod;
990
1030
  const jsonrpc = 'meta' in input ? input.meta?.jsonrpc : input.jsonrpc;
991
1031
  const grpc = 'meta' in input ? input.meta?.grpc : input.grpc;
1032
+ const policies = 'meta' in input
1033
+ ? policyMetadataFromRouteMeta(input.meta)
1034
+ : input.policies;
992
1035
  const routeInterceptors = 'middlewares' in input ? createRouteInterceptors(input) : [];
993
1036
  const inputInterceptors = 'interceptors' in input ? input.interceptors ?? [] : [];
994
1037
  let interceptors = normalizeInterceptors([...globalInterceptors, ...routeInterceptors, ...inputInterceptors]);
@@ -1011,8 +1054,14 @@ export function createServer(options) {
1011
1054
  httpMethod,
1012
1055
  jsonrpc,
1013
1056
  grpc,
1057
+ policies,
1014
1058
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1015
1059
  });
1060
+ recordOperationRegistration(name, {
1061
+ source: 'filePath' in input
1062
+ ? { kind: 'discovery', location: input.filePath }
1063
+ : programmaticSource(),
1064
+ });
1016
1065
  logger.debug({ name }, 'Added procedure');
1017
1066
  return server;
1018
1067
  },
@@ -1023,6 +1072,9 @@ export function createServer(options) {
1023
1072
  const outputSchema = input.outputSchema;
1024
1073
  const description = 'meta' in input ? input.meta?.description : input.description;
1025
1074
  const direction = 'meta' in input ? input.meta?.direction : input.direction;
1075
+ const policies = 'meta' in input
1076
+ ? policyMetadataFromRouteMeta(input.meta)
1077
+ : input.policies;
1026
1078
  const routeInterceptors = 'middlewares' in input ? createRouteInterceptors(input) : [];
1027
1079
  const inputInterceptors = 'interceptors' in input ? input.interceptors ?? [] : [];
1028
1080
  const interceptors = [...globalInterceptors, ...routeInterceptors, ...inputInterceptors];
@@ -1037,8 +1089,14 @@ export function createServer(options) {
1037
1089
  registry.stream(name, handler, {
1038
1090
  description,
1039
1091
  direction,
1092
+ policies,
1040
1093
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1041
1094
  });
1095
+ recordOperationRegistration(name, {
1096
+ source: 'filePath' in input
1097
+ ? { kind: 'discovery', location: input.filePath }
1098
+ : programmaticSource(),
1099
+ });
1042
1100
  logger.debug({ name }, 'Added stream');
1043
1101
  return server;
1044
1102
  },
@@ -1050,6 +1108,9 @@ export function createServer(options) {
1050
1108
  const delivery = 'meta' in input ? input.meta?.delivery : input.delivery;
1051
1109
  const retryPolicy = 'meta' in input ? input.meta?.retryPolicy : input.retryPolicy;
1052
1110
  const deduplicationWindow = 'meta' in input ? input.meta?.deduplicationWindow : input.deduplicationWindow;
1111
+ const policies = 'meta' in input
1112
+ ? policyMetadataFromRouteMeta(input.meta)
1113
+ : input.policies;
1053
1114
  const routeInterceptors = 'middlewares' in input ? createRouteInterceptors(input) : [];
1054
1115
  const inputInterceptors = 'interceptors' in input ? input.interceptors ?? [] : [];
1055
1116
  const interceptors = [...globalInterceptors, ...routeInterceptors, ...inputInterceptors];
@@ -1061,8 +1122,14 @@ export function createServer(options) {
1061
1122
  delivery,
1062
1123
  retryPolicy,
1063
1124
  deduplicationWindow,
1125
+ policies,
1064
1126
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1065
1127
  });
1128
+ recordOperationRegistration(name, {
1129
+ source: 'filePath' in input
1130
+ ? { kind: 'discovery', location: input.filePath }
1131
+ : programmaticSource(),
1132
+ });
1066
1133
  logger.debug({ name }, 'Added event');
1067
1134
  return server;
1068
1135
  },
@@ -1222,6 +1289,7 @@ export function createServer(options) {
1222
1289
  direction: 'server',
1223
1290
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1224
1291
  });
1292
+ recordOperationRegistration(streamName, { source: programmaticSource() });
1225
1293
  logger.debug({ name: streamName, path: options.path ?? `/${name}` }, 'Added stream source');
1226
1294
  return streamsNamespace;
1227
1295
  },
@@ -1241,6 +1309,7 @@ export function createServer(options) {
1241
1309
  direction: 'client',
1242
1310
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1243
1311
  });
1312
+ recordOperationRegistration(streamName, { source: programmaticSource() });
1244
1313
  logger.debug({ name: streamName, path: options.path ?? `/${name}` }, 'Added stream sink');
1245
1314
  return streamsNamespace;
1246
1315
  },
@@ -1260,6 +1329,7 @@ export function createServer(options) {
1260
1329
  direction: 'bidi',
1261
1330
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1262
1331
  });
1332
+ recordOperationRegistration(streamName, { source: programmaticSource() });
1263
1333
  logger.debug({ name: streamName, path: options.path ?? `/${name}` }, 'Added stream duplex');
1264
1334
  return streamsNamespace;
1265
1335
  },
@@ -1288,6 +1358,7 @@ export function createServer(options) {
1288
1358
  jsonrpc: { notification: isNotification },
1289
1359
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1290
1360
  });
1361
+ recordOperationRegistration(name, { source: programmaticSource('rpc-namespace') });
1291
1362
  logger.debug({ name, notification: isNotification }, 'Added RPC method');
1292
1363
  };
1293
1364
  const rpcNamespace = {
@@ -1332,14 +1403,25 @@ export function createServer(options) {
1332
1403
  return handlerBuilder;
1333
1404
  },
1334
1405
  end() {
1335
- // Build framing config if specified
1336
- const framingConfig = options?.framing ? {
1337
- type: options.framing,
1338
- lengthBytes: 4,
1339
- lengthEncoding: 'BE',
1340
- maxMessageSize: 16 * 1024 * 1024,
1341
- delimiter: options.delimiter ? Buffer.from(options.delimiter) : undefined,
1342
- } : null;
1406
+ let framingConfig = null;
1407
+ if (options?.framing === 'length-prefixed') {
1408
+ framingConfig = {
1409
+ type: 'length-prefixed',
1410
+ lengthBytes: 4,
1411
+ lengthEncoding: 'BE',
1412
+ maxMessageSize: 16 * 1024 * 1024,
1413
+ delimiter: undefined,
1414
+ };
1415
+ }
1416
+ else if (options?.framing === 'delimiter' || options?.framing === 'line') {
1417
+ framingConfig = {
1418
+ type: 'delimiter',
1419
+ lengthBytes: 4,
1420
+ lengthEncoding: 'BE',
1421
+ maxMessageSize: 16 * 1024 * 1024,
1422
+ delimiter: Buffer.from(options.delimiter ?? '\n'),
1423
+ };
1424
+ }
1343
1425
  // Store TCP handler configuration for later startup
1344
1426
  const tcpHandler = {
1345
1427
  name,
@@ -1356,7 +1438,12 @@ export function createServer(options) {
1356
1438
  },
1357
1439
  handlers: {
1358
1440
  onConnect: connectHandler,
1359
- onData: dataHandler,
1441
+ onData: framingConfig
1442
+ ? undefined
1443
+ : dataHandler,
1444
+ onMessage: framingConfig
1445
+ ? dataHandler
1446
+ : undefined,
1360
1447
  onClose: closeHandler,
1361
1448
  onError: errorHandler,
1362
1449
  },
@@ -1458,6 +1545,14 @@ export function createServer(options) {
1458
1545
  grpc: { serviceName, methodName: name, type: 'unary' },
1459
1546
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1460
1547
  });
1548
+ recordOperationRegistration(procedureName, {
1549
+ source: programmaticSource('grpc-namespace'),
1550
+ grpc: {
1551
+ serviceName: packageName ? `${packageName}.${serviceName}` : serviceName,
1552
+ methodName: name,
1553
+ type: 'unary',
1554
+ },
1555
+ });
1461
1556
  logger.debug({ name: procedureName, type: 'unary' }, 'Added gRPC method');
1462
1557
  return serviceBuilder;
1463
1558
  },
@@ -1480,6 +1575,14 @@ export function createServer(options) {
1480
1575
  direction: 'server',
1481
1576
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1482
1577
  });
1578
+ recordOperationRegistration(procedureName, {
1579
+ source: programmaticSource('grpc-namespace'),
1580
+ grpc: {
1581
+ serviceName: packageName ? `${packageName}.${serviceName}` : serviceName,
1582
+ methodName: name,
1583
+ type: 'server-streaming',
1584
+ },
1585
+ });
1483
1586
  logger.debug({ name: procedureName, type: 'server-stream' }, 'Added gRPC server stream');
1484
1587
  return serviceBuilder;
1485
1588
  },
@@ -1502,6 +1605,14 @@ export function createServer(options) {
1502
1605
  direction: 'client',
1503
1606
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1504
1607
  });
1608
+ recordOperationRegistration(procedureName, {
1609
+ source: programmaticSource('grpc-namespace'),
1610
+ grpc: {
1611
+ serviceName: packageName ? `${packageName}.${serviceName}` : serviceName,
1612
+ methodName: name,
1613
+ type: 'client-streaming',
1614
+ },
1615
+ });
1505
1616
  logger.debug({ name: procedureName, type: 'client-stream' }, 'Added gRPC client stream');
1506
1617
  return serviceBuilder;
1507
1618
  },
@@ -1524,6 +1635,14 @@ export function createServer(options) {
1524
1635
  direction: 'bidi',
1525
1636
  interceptors: interceptors.length > 0 ? interceptors : undefined,
1526
1637
  });
1638
+ recordOperationRegistration(procedureName, {
1639
+ source: programmaticSource('grpc-namespace'),
1640
+ grpc: {
1641
+ serviceName: packageName ? `${packageName}.${serviceName}` : serviceName,
1642
+ methodName: name,
1643
+ type: 'bidirectional',
1644
+ },
1645
+ });
1527
1646
  logger.debug({ name: procedureName, type: 'bidi-stream' }, 'Added gRPC bidi stream');
1528
1647
  return serviceBuilder;
1529
1648
  },
@@ -1562,7 +1681,13 @@ export function createServer(options) {
1562
1681
  get metrics() { return telemetryState.metricsRegistry; },
1563
1682
  get tracer() { return telemetryState.tracerInstance; },
1564
1683
  previewConfig() {
1565
- return getPreviewConfig();
1684
+ return runtimePreviewService.getPreviewConfig();
1685
+ },
1686
+ preview() {
1687
+ return runtimePreviewService.getRuntimeInspectionPreview();
1688
+ },
1689
+ getProtocolFusionState() {
1690
+ return protocolFusionDiagnostics.snapshot();
1566
1691
  },
1567
1692
  get usd() { return serverState.usdDocsHandlers.value; },
1568
1693
  // === USD Document Access ===