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,471 @@
1
+ import { mkdir, readdir, readFile, stat, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ export const serviceScaffoldPresets = {
4
+ api: {
5
+ name: 'api',
6
+ title: 'API Service',
7
+ description: 'HTTP-first service with WebSocket, JSON-RPC, GraphQL, docs, auth, health, and preview tooling.',
8
+ defaultDirectory: 'api-service',
9
+ protocols: ['http', 'websocket', 'jsonrpc', 'graphql'],
10
+ starterProcedure: 'users.list',
11
+ includesProto: false,
12
+ },
13
+ realtime: {
14
+ name: 'realtime',
15
+ title: 'Realtime Service',
16
+ description: 'WebSocket-first service with presence channels, logging, auth, docs, and runtime inspection.',
17
+ defaultDirectory: 'realtime-service',
18
+ protocols: ['http', 'websocket'],
19
+ starterProcedure: 'messages.publish',
20
+ includesProto: false,
21
+ },
22
+ rpc: {
23
+ name: 'rpc',
24
+ title: 'RPC Service',
25
+ description: 'JSON-RPC and gRPC starter with auth defaults, docs, health, and previewable runtime metadata.',
26
+ defaultDirectory: 'rpc-service',
27
+ protocols: ['http', 'jsonrpc', 'grpc'],
28
+ starterProcedure: 'rpc.echo',
29
+ includesProto: true,
30
+ },
31
+ gateway: {
32
+ name: 'gateway',
33
+ title: 'Gateway Service',
34
+ description: 'Edge-friendly multi-protocol gateway with shared-port defaults, docs, health, and runtime inspection.',
35
+ defaultDirectory: 'gateway-service',
36
+ protocols: ['http', 'websocket', 'jsonrpc', 'graphql', 'shared-port'],
37
+ starterProcedure: 'gateway.routes',
38
+ includesProto: false,
39
+ },
40
+ 'internal-service': {
41
+ name: 'internal-service',
42
+ title: 'Internal Service',
43
+ description: 'Service-to-service starter with JSON-RPC/gRPC defaults, internal auth posture, health, and docs.',
44
+ defaultDirectory: 'internal-service',
45
+ protocols: ['http', 'jsonrpc', 'grpc'],
46
+ starterProcedure: 'internal.status',
47
+ includesProto: true,
48
+ },
49
+ };
50
+ const BASE_DEPENDENCIES = {
51
+ raffel: 'latest',
52
+ zod: '^4.3.5',
53
+ };
54
+ const BASE_DEV_DEPENDENCIES = {
55
+ tsx: '^4.21.0',
56
+ typescript: '^5.9.3',
57
+ vitest: '^4.0.16',
58
+ };
59
+ function sanitizePackageName(input) {
60
+ const normalized = input
61
+ .trim()
62
+ .toLowerCase()
63
+ .replace(/[^a-z0-9._/-]+/g, '-')
64
+ .replace(/^-+|-+$/g, '');
65
+ return normalized || 'raffel-service';
66
+ }
67
+ function toTitleCase(input) {
68
+ return input
69
+ .split(/[-_/]+/)
70
+ .filter(Boolean)
71
+ .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))
72
+ .join(' ');
73
+ }
74
+ function getManifest(preset) {
75
+ return serviceScaffoldPresets[preset];
76
+ }
77
+ function renderPackageJson(manifest, packageName) {
78
+ return `${JSON.stringify({
79
+ name: sanitizePackageName(packageName),
80
+ private: true,
81
+ type: 'module',
82
+ scripts: {
83
+ dev: 'tsx watch src/server.ts',
84
+ build: 'tsc',
85
+ start: 'node dist/server.js',
86
+ inspect: 'raffel inspect src/server.ts',
87
+ doctor: 'raffel doctor src/server.ts --fail-on warning',
88
+ playground: 'raffel playground src/server.ts --port 4301',
89
+ 'contract-tests': 'raffel contract-tests src/server.ts',
90
+ test: 'vitest run',
91
+ typecheck: 'tsc --noEmit',
92
+ },
93
+ dependencies: BASE_DEPENDENCIES,
94
+ devDependencies: BASE_DEV_DEPENDENCIES,
95
+ }, null, 2)}\n`;
96
+ }
97
+ function renderTsconfig() {
98
+ return `${JSON.stringify({
99
+ compilerOptions: {
100
+ target: 'ES2022',
101
+ module: 'NodeNext',
102
+ moduleResolution: 'NodeNext',
103
+ strict: true,
104
+ esModuleInterop: true,
105
+ forceConsistentCasingInFileNames: true,
106
+ skipLibCheck: true,
107
+ outDir: 'dist',
108
+ },
109
+ include: ['src/**/*.ts', 'test/**/*.ts'],
110
+ }, null, 2)}\n`;
111
+ }
112
+ function renderGitignore() {
113
+ return 'node_modules\n.env\ndist\ncoverage\n';
114
+ }
115
+ function renderReadme(manifest, projectName) {
116
+ const title = toTitleCase(projectName);
117
+ return `# ${title}
118
+
119
+ Generated with \`raffel new ${manifest.name}\`.
120
+
121
+ ## Commands
122
+
123
+ \`\`\`bash
124
+ pnpm install
125
+ npx raffel inspect src/server.ts
126
+ npx raffel doctor src/server.ts
127
+ npx raffel playground src/server.ts --port 4301
128
+ npx raffel contract-tests src/server.ts
129
+ pnpm dev
130
+ pnpm test
131
+ \`\`\`
132
+
133
+ ## Starter Defaults
134
+
135
+ - Protocols: ${manifest.protocols.join(', ')}
136
+ - Auth: bearer token stub using \`Authorization: Bearer dev-token\`
137
+ - Logging: request ID + structured request logging
138
+ - Health: \`GET /health\`
139
+ - Docs: \`/docs\`
140
+
141
+ Use \`raffel inspect src/server.ts\` before start to preview routes, policies, schemas, and diagnostics.
142
+ Use \`raffel playground src/server.ts\` for live protocol-aware calls and \`raffel contract-tests src/server.ts\` to generate contract checks from the same runtime graph.
143
+ `;
144
+ }
145
+ function renderConfigBlock(preset, projectName) {
146
+ if (preset === 'api') {
147
+ return `const config = createServerScenario('api', {
148
+ port: PORT,
149
+ basePath: '/api',
150
+ })`;
151
+ }
152
+ if (preset === 'realtime') {
153
+ return `const config = createServerScenario('realtime', {
154
+ port: PORT,
155
+ basePath: '/realtime',
156
+ })`;
157
+ }
158
+ if (preset === 'rpc') {
159
+ return `const grpcProtoPath = fileURLToPath(new URL('../proto/service.proto', import.meta.url))
160
+
161
+ const config = createServerScenario('rpc', {
162
+ port: PORT,
163
+ basePath: '/rpc',
164
+ grpc: {
165
+ port: GRPC_PORT,
166
+ protoPath: grpcProtoPath,
167
+ },
168
+ })`;
169
+ }
170
+ if (preset === 'gateway') {
171
+ return `const config = {
172
+ ...createServerScenario('api', {
173
+ port: PORT,
174
+ basePath: '/gateway',
175
+ }),
176
+ sharedPort: {
177
+ enabled: true,
178
+ protocolFusion: true,
179
+ protocols: ['tcp'],
180
+ },
181
+ }`;
182
+ }
183
+ return `const grpcProtoPath = fileURLToPath(new URL('../proto/service.proto', import.meta.url))
184
+
185
+ const config = createServerScenario('rpc', {
186
+ port: PORT,
187
+ basePath: '/internal',
188
+ grpc: {
189
+ port: GRPC_PORT,
190
+ protoPath: grpcProtoPath,
191
+ },
192
+ })`;
193
+ }
194
+ function renderStarterSection(preset, serviceLabel) {
195
+ if (preset === 'api') {
196
+ return `const UserSchema = z.object({
197
+ id: z.string(),
198
+ name: z.string(),
199
+ viewer: z.string(),
200
+ })
201
+
202
+ server
203
+ .procedure('users.list')
204
+ .output(z.array(UserSchema))
205
+ .http('/users', 'GET')
206
+ .policy({ auth: { scopes: ['users:read'] } })
207
+ .handler(async (_input, ctx) => [
208
+ { id: 'user-1', name: 'Ada Lovelace', viewer: ctx.auth.principalId ?? 'anonymous' },
209
+ ])`;
210
+ }
211
+ if (preset === 'realtime') {
212
+ return `server
213
+ .procedure('messages.publish')
214
+ .input(z.object({
215
+ room: z.string(),
216
+ text: z.string().min(1),
217
+ }))
218
+ .output(z.object({
219
+ accepted: z.boolean(),
220
+ room: z.string(),
221
+ }))
222
+ .http('/messages', 'POST')
223
+ .policy({ auth: { scopes: ['messages:write'] } })
224
+ .handler(async (input) => ({
225
+ accepted: true,
226
+ room: input.room,
227
+ }))
228
+
229
+ server.ws.channel('presence.lobby', {
230
+ type: 'presence',
231
+ description: 'Presence channel for the lobby',
232
+ })`;
233
+ }
234
+ if (preset === 'rpc') {
235
+ return `server
236
+ .procedure('rpc.echo')
237
+ .input(z.object({ message: z.string() }))
238
+ .output(z.object({ message: z.string(), service: z.string() }))
239
+ .policy({ auth: { scopes: ['rpc:execute'] } })
240
+ .handler(async (input) => ({
241
+ message: input.message,
242
+ service: '${serviceLabel}',
243
+ }))`;
244
+ }
245
+ if (preset === 'gateway') {
246
+ return `server
247
+ .procedure('gateway.routes')
248
+ .output(z.array(z.object({
249
+ id: z.string(),
250
+ upstream: z.string(),
251
+ })))
252
+ .http('/routes', 'GET')
253
+ .policy({ auth: { scopes: ['gateway:read'] } })
254
+ .handler(async () => [
255
+ { id: 'users', upstream: 'users.internal:3000' },
256
+ ])
257
+
258
+ server.ws.channel('presence.edge', {
259
+ type: 'presence',
260
+ description: 'Gateway presence channel',
261
+ })`;
262
+ }
263
+ return `server
264
+ .procedure('internal.status')
265
+ .output(z.object({
266
+ status: z.literal('ok'),
267
+ principal: z.string().nullable(),
268
+ }))
269
+ .http('/status', 'GET')
270
+ .policy({ auth: { roles: ['service'] } })
271
+ .handler(async (_input, ctx) => ({
272
+ status: 'ok',
273
+ principal: ctx.auth.principalId ?? null,
274
+ }))`;
275
+ }
276
+ function renderProto() {
277
+ return `syntax = "proto3";
278
+
279
+ package scaffold;
280
+
281
+ service EchoService {
282
+ rpc Echo (EchoRequest) returns (EchoReply);
283
+ }
284
+
285
+ message EchoRequest {
286
+ string message = 1;
287
+ }
288
+
289
+ message EchoReply {
290
+ string message = 1;
291
+ }
292
+ `;
293
+ }
294
+ function renderServerSource(manifest, projectName) {
295
+ const title = toTitleCase(projectName);
296
+ const needsGrpc = manifest.includesProto;
297
+ return `import { fileURLToPath, pathToFileURL } from 'node:url'
298
+ import {
299
+ createAuthMiddleware,
300
+ createBearerStrategy,
301
+ createLoggingInterceptor,
302
+ createRequestIdInterceptor,
303
+ createServer,
304
+ createServerScenario,
305
+ createZodAdapter,
306
+ registerValidator,
307
+ } from 'raffel'
308
+ import { z } from 'zod'
309
+
310
+ registerValidator(createZodAdapter(z))
311
+
312
+ const SERVICE_NAME = '${sanitizePackageName(projectName)}'
313
+ const PORT = Number(process.env.PORT ?? 3000)
314
+ ${needsGrpc ? "const GRPC_PORT = Number(process.env.GRPC_PORT ?? 50051)\n" : ''}${renderConfigBlock(manifest.name, title)}
315
+
316
+ const server = createServer(config)
317
+
318
+ server.use(createRequestIdInterceptor())
319
+ server.use(createLoggingInterceptor())
320
+ server.use(createAuthMiddleware({
321
+ strategies: [
322
+ createBearerStrategy({
323
+ verify: async (token) => {
324
+ if (token !== 'dev-token') return null
325
+ return {
326
+ authenticated: true,
327
+ principal: 'dev-user',
328
+ roles: ['developer', 'service'],
329
+ scopes: ['users:read', 'messages:write', 'rpc:execute', 'gateway:read', 'internal:read'],
330
+ claims: {
331
+ environment: 'local',
332
+ },
333
+ }
334
+ },
335
+ }),
336
+ ],
337
+ }))
338
+ server.enableUSD({
339
+ basePath: '/docs',
340
+ info: {
341
+ title: '${title}',
342
+ version: '0.1.0',
343
+ },
344
+ })
345
+
346
+ server
347
+ .procedure('system.health')
348
+ .output(z.object({
349
+ status: z.literal('ok'),
350
+ service: z.string(),
351
+ }))
352
+ .http('/health', 'GET')
353
+ .policy({ auth: { mode: 'optional' } })
354
+ .handler(async () => ({
355
+ status: 'ok',
356
+ service: SERVICE_NAME,
357
+ }))
358
+
359
+ ${renderStarterSection(manifest.name, title)}
360
+
361
+ export { server }
362
+ export default server
363
+
364
+ async function main(): Promise<void> {
365
+ await server.start()
366
+ console.log(\`${title} listening on http://localhost:\${PORT}\`)
367
+ console.log('Inspect with: npx raffel inspect src/server.ts')
368
+ console.log('Doctor with: npx raffel doctor src/server.ts')
369
+ console.log('Playground with: npx raffel playground src/server.ts --port 4301')
370
+ }
371
+
372
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
373
+ main().catch((error) => {
374
+ console.error('Fatal error:', error)
375
+ process.exit(1)
376
+ })
377
+ }
378
+ `;
379
+ }
380
+ function renderStarterTest(manifest) {
381
+ return `import { describe, expect, it } from 'vitest'
382
+ import server from '../src/server.ts'
383
+
384
+ describe('${manifest.name} scaffold', () => {
385
+ it('exposes a stable runtime preview', () => {
386
+ const preview = server.preview()
387
+
388
+ expect(preview.operations.map((operation) => operation.name)).toContain('${manifest.starterProcedure}')
389
+ expect(preview.transports.map((transport) => transport.protocol)).toEqual(
390
+ expect.arrayContaining(${JSON.stringify(manifest.protocols.filter((protocol) => protocol !== 'shared-port'))})
391
+ )
392
+ expect(preview.diagnostics.filter((diagnostic) => diagnostic.severity === 'error')).toHaveLength(0)
393
+ })
394
+ })
395
+ `;
396
+ }
397
+ export function createScaffoldProject(options) {
398
+ const manifest = getManifest(options.preset);
399
+ const projectName = options.projectName ?? manifest.defaultDirectory;
400
+ const files = {
401
+ '.gitignore': renderGitignore(),
402
+ 'package.json': renderPackageJson(manifest, projectName),
403
+ 'README.md': renderReadme(manifest, projectName),
404
+ 'tsconfig.json': renderTsconfig(),
405
+ 'src/server.ts': renderServerSource(manifest, projectName),
406
+ 'test/server.test.ts': renderStarterTest(manifest),
407
+ };
408
+ if (manifest.includesProto) {
409
+ files['proto/service.proto'] = renderProto();
410
+ }
411
+ return {
412
+ manifest,
413
+ projectName,
414
+ files,
415
+ };
416
+ }
417
+ async function ensureTargetDirectory(targetDir, force = false) {
418
+ try {
419
+ const current = await stat(targetDir);
420
+ if (!current.isDirectory()) {
421
+ throw new Error(`Target path exists and is not a directory: ${targetDir}`);
422
+ }
423
+ const entries = await readdir(targetDir);
424
+ if (entries.length > 0 && !force) {
425
+ throw new Error(`Target directory is not empty: ${targetDir}`);
426
+ }
427
+ }
428
+ catch (error) {
429
+ if (error.code === 'ENOENT') {
430
+ return;
431
+ }
432
+ throw error;
433
+ }
434
+ }
435
+ export async function writeScaffoldProject(options) {
436
+ const manifest = getManifest(options.preset);
437
+ const cwd = path.resolve(options.cwd ?? process.cwd());
438
+ const directory = options.directory ?? manifest.defaultDirectory;
439
+ const targetDir = path.resolve(cwd, directory);
440
+ const projectName = options.projectName ?? path.basename(targetDir);
441
+ await ensureTargetDirectory(targetDir, options.force);
442
+ const project = createScaffoldProject({
443
+ preset: options.preset,
444
+ projectName,
445
+ });
446
+ await mkdir(targetDir, { recursive: true });
447
+ for (const [relativePath, content] of Object.entries(project.files)) {
448
+ const filePath = path.join(targetDir, relativePath);
449
+ await mkdir(path.dirname(filePath), { recursive: true });
450
+ if (!options.force) {
451
+ try {
452
+ await readFile(filePath, 'utf8');
453
+ throw new Error(`Refusing to overwrite existing file: ${filePath}`);
454
+ }
455
+ catch (error) {
456
+ if (error.code !== 'ENOENT') {
457
+ throw error;
458
+ }
459
+ }
460
+ }
461
+ await writeFile(filePath, content, 'utf8');
462
+ }
463
+ return {
464
+ ...project,
465
+ targetDir,
466
+ };
467
+ }
468
+ export function listScaffoldPresets() {
469
+ return Object.values(serviceScaffoldPresets);
470
+ }
471
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dx/scaffold/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/graphql/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgB,KAAK,MAAM,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAChG,OAAO,EAAE,eAAe,EAAa,MAAM,IAAI,CAAA;AAC/C,OAAO,EAML,KAAK,aAAa,EAGnB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EAErB,mBAAmB,EACpB,MAAM,YAAY,CAAA;AA+BnB,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3E,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACtC,wBAAwB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,eAAe,GAAG,IAAI,CAAA;CACrE;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAA;CACxC;AAmdD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAsEnF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CAkC5F"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/graphql/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAgB,KAAK,MAAM,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAChG,OAAO,EAAE,eAAe,EAAa,MAAM,IAAI,CAAA;AAC/C,OAAO,EAML,KAAK,aAAa,EAGnB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EAErB,mBAAmB,EACpB,MAAM,YAAY,CAAA;AA+BnB,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3E,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACtC,wBAAwB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,eAAe,GAAG,IAAI,CAAA;CACrE;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAA;CACxC;AA6fD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAsEnF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CAkC5F"}
@@ -126,13 +126,22 @@ async function withTimeout(promise, timeoutMs) {
126
126
  * Execute a procedure via the Router using envelope-based dispatching
127
127
  */
128
128
  async function executeProcedure(router, procedure, input, ctx, metadata) {
129
+ const executionCtx = {
130
+ ...ctx,
131
+ input: {
132
+ ...ctx.input,
133
+ body: input,
134
+ metadata,
135
+ },
136
+ extensions: new Map(ctx.extensions),
137
+ };
129
138
  const envelope = {
130
139
  id: sid(),
131
140
  procedure,
132
141
  type: 'request',
133
142
  payload: input,
134
143
  metadata,
135
- context: ctx,
144
+ context: executionCtx,
136
145
  };
137
146
  const result = await router.handle(envelope);
138
147
  if ('type' in result && result.type === 'error') {
@@ -148,13 +157,22 @@ async function executeProcedure(router, procedure, input, ctx, metadata) {
148
157
  * Emit an event via the Router
149
158
  */
150
159
  async function emitEvent(router, event, input, ctx, metadata) {
160
+ const executionCtx = {
161
+ ...ctx,
162
+ input: {
163
+ ...ctx.input,
164
+ body: input,
165
+ metadata,
166
+ },
167
+ extensions: new Map(ctx.extensions),
168
+ };
151
169
  const envelope = {
152
170
  id: sid(),
153
171
  procedure: event,
154
172
  type: 'event',
155
173
  payload: input,
156
174
  metadata,
157
- context: ctx,
175
+ context: executionCtx,
158
176
  };
159
177
  const result = await router.handle(envelope);
160
178
  if ('type' in result && result.type === 'error') {
@@ -167,13 +185,27 @@ async function emitEvent(router, event, input, ctx, metadata) {
167
185
  * Execute a stream via the Router
168
186
  */
169
187
  async function* executeStream(router, stream, input, ctx, metadata) {
188
+ const executionCtx = {
189
+ ...ctx,
190
+ input: {
191
+ ...ctx.input,
192
+ body: input,
193
+ metadata,
194
+ },
195
+ stream: {
196
+ kind: 'stream',
197
+ mode: 'graphql-subscription',
198
+ id: ctx.requestId,
199
+ },
200
+ extensions: new Map(ctx.extensions),
201
+ };
170
202
  const envelope = {
171
203
  id: sid(),
172
204
  procedure: stream,
173
205
  type: 'stream:start',
174
206
  payload: input,
175
207
  metadata,
176
- context: ctx,
208
+ context: executionCtx,
177
209
  };
178
210
  const result = await router.handle(envelope);
179
211
  // If result is async iterable (stream)
@@ -298,7 +330,17 @@ function createGraphQLHandlers(router, registry, schemaRegistry, config) {
298
330
  const gqlRequest = await parseGraphQLRequest(req, maxBodySize, requestCodec);
299
331
  const metadata = extractMetadataFromHeaders(req.headers);
300
332
  // Create context
301
- const ctx = createContext(sid());
333
+ const ctx = createContext(sid(), {
334
+ protocol: 'graphql',
335
+ input: {
336
+ body: gqlRequest.variables ?? {},
337
+ metadata,
338
+ },
339
+ graphql: {
340
+ kind: 'graphql',
341
+ operationName: gqlRequest.operationName,
342
+ },
343
+ });
302
344
  if (timeoutMs > 0) {
303
345
  ctx.deadline = Date.now() + timeoutMs;
304
346
  }
@@ -510,11 +552,21 @@ function handleSubscriptionConnection(ws, req, schema, router, registry, schemaI
510
552
  case 'subscribe': {
511
553
  const { id, payload } = message;
512
554
  const { query, operationName, variables } = payload;
513
- const ctx = createContext(sid());
555
+ const metadata = mergeMetadata(connectionMetadata, extractMetadataFromRecord(connectionInitPayload), extractMetadataFromRecord(connectionInitPayload?.headers), extractMetadataFromRecord(connectionInitPayload?.metadata));
556
+ const ctx = createContext(sid(), {
557
+ protocol: 'graphql',
558
+ input: {
559
+ metadata,
560
+ },
561
+ graphql: {
562
+ kind: 'graphql',
563
+ operationType: 'subscription',
564
+ operationName,
565
+ },
566
+ });
514
567
  if (connectionInitPayload !== undefined) {
515
568
  ctx.extensions.set(CONNECTION_INIT_KEY, connectionInitPayload);
516
569
  }
517
- const metadata = mergeMetadata(connectionMetadata, extractMetadataFromRecord(connectionInitPayload), extractMetadataFromRecord(connectionInitPayload?.headers), extractMetadataFromRecord(connectionInitPayload?.metadata));
518
570
  const document = parse(query);
519
571
  const rootValue = createRootValue(router, registry, schemaInfo, ctx, metadata);
520
572
  const result = await subscribe({