@pikku/cli 0.11.1 → 0.11.3

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 (358) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +73 -17
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +11 -11
  3. package/.pikku/channel/pikku-channels-meta.gen.json +1 -0
  4. package/.pikku/channel/pikku-channels-meta.gen.ts +4 -2
  5. package/.pikku/channel/pikku-channels.gen.ts +1 -1
  6. package/.pikku/cli/pikku-cli-channel.ts +2 -2
  7. package/.pikku/cli/pikku-cli-client.gen.ts +1 -3
  8. package/.pikku/cli/pikku-cli-types.gen.ts +3 -3
  9. package/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
  10. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +4 -157
  11. package/.pikku/cli/pikku-cli-wirings.gen.ts +3 -3
  12. package/.pikku/cli/pikku-cli.gen.ts +3 -3
  13. package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
  14. package/.pikku/function/pikku-function-types.gen.ts +223 -91
  15. package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
  16. package/.pikku/function/pikku-functions-meta.gen.json +656 -0
  17. package/.pikku/function/pikku-functions-meta.gen.ts +4 -970
  18. package/.pikku/http/pikku-http-types.gen.ts +20 -4
  19. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +11 -11
  20. package/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  21. package/.pikku/http/pikku-http-wirings-meta.gen.ts +4 -10
  22. package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
  23. package/.pikku/mcp/pikku-mcp-types.gen.ts +72 -20
  24. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  25. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +6 -4
  26. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
  27. package/.pikku/pikku-bootstrap.gen.ts +7 -12
  28. package/.pikku/pikku-services.gen.ts +6 -7
  29. package/.pikku/pikku-types.gen.ts +4 -1
  30. package/.pikku/pikku-websocket.gen.ts +1 -1
  31. package/.pikku/queue/pikku-queue-types.gen.ts +2 -2
  32. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +11 -11
  33. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  34. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +5 -7
  35. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
  36. package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +5 -2
  37. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +19 -14
  38. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +46 -39
  39. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +2 -2
  40. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  41. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +5 -2
  42. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
  43. package/.pikku/schemas/register.gen.ts +31 -23
  44. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  45. package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  46. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  47. package/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  48. package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  49. package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  50. package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  51. package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  52. package/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  53. package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  54. package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  55. package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  56. package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  57. package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  58. package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  59. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  60. package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  61. package/.pikku/services/config.gen.json +104 -0
  62. package/.pikku/services/getInspectorState.gen.json +10 -0
  63. package/.pikku/services/jwt.gen.json +13 -0
  64. package/.pikku/services/logger.gen.json +25 -0
  65. package/.pikku/services/queueService.gen.json +14 -0
  66. package/.pikku/services/schedulerService.gen.json +17 -0
  67. package/.pikku/services/schema.gen.json +14 -0
  68. package/.pikku/services/secrets.gen.json +13 -0
  69. package/.pikku/services/variables.gen.json +13 -0
  70. package/.pikku/services/workflowService.gen.json +31 -0
  71. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
  72. package/.pikku/workflow/pikku-workflow-types.gen.ts +305 -48
  73. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +6 -2
  74. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -2
  75. package/CHANGELOG.md +44 -1
  76. package/bin/pikku.ts +6 -32
  77. package/build.sh +53 -31
  78. package/cli.schema.json +1 -1
  79. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +51 -10
  80. package/dist/.pikku/channel/pikku-channel-types.gen.js +3 -13
  81. package/dist/.pikku/channel/pikku-channels-meta.gen.js +3 -2
  82. package/dist/.pikku/channel/pikku-channels-meta.gen.json +1 -0
  83. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  84. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  85. package/dist/.pikku/cli/pikku-cli-channel.js +2 -2
  86. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  87. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -3
  88. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +3 -3
  89. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  90. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +3 -157
  91. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
  92. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -2
  93. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -2
  94. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  95. package/dist/.pikku/cli/pikku-cli.gen.js +3 -3
  96. package/dist/.pikku/forge/pikku-forge-types.gen.d.ts +72 -0
  97. package/dist/.pikku/forge/pikku-forge-types.gen.js +55 -0
  98. package/dist/.pikku/function/pikku-function-types.gen.d.ts +141 -99
  99. package/dist/.pikku/function/pikku-function-types.gen.js +52 -62
  100. package/dist/.pikku/function/pikku-functions-meta.gen.js +3 -969
  101. package/dist/.pikku/function/pikku-functions-meta.gen.json +656 -0
  102. package/dist/.pikku/http/pikku-http-types.gen.d.ts +19 -4
  103. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  104. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +3 -10
  105. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  106. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  107. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  108. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +57 -17
  109. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
  110. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +5 -4
  111. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  112. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  113. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  114. package/dist/.pikku/pikku-bootstrap.gen.d.ts +7 -12
  115. package/dist/.pikku/pikku-bootstrap.gen.js +7 -12
  116. package/dist/.pikku/pikku-services.gen.d.ts +5 -7
  117. package/dist/.pikku/pikku-services.gen.js +3 -5
  118. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  119. package/dist/.pikku/pikku-types.gen.js +3 -1
  120. package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
  121. package/dist/.pikku/pikku-websocket.gen.js +1 -1
  122. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +2 -2
  123. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  124. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +3 -7
  125. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  126. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  127. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  128. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +9 -9
  129. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +5 -2
  130. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +2 -2
  131. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  132. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +3 -2
  133. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  134. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  135. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  136. package/dist/.pikku/schemas/register.gen.js +19 -15
  137. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  138. package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  139. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  140. package/dist/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  141. package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  142. package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  143. package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  144. package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  145. package/dist/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  146. package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  147. package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  148. package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  149. package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  150. package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  151. package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  152. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  153. package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  154. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +213 -39
  155. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +106 -16
  156. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -2
  157. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
  158. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -2
  159. package/dist/bin/pikku.js +5 -26
  160. package/dist/src/cli.wiring.js +4 -4
  161. package/dist/src/functions/commands/all.js +172 -94
  162. package/dist/src/functions/commands/bootstrap.js +21 -16
  163. package/dist/src/functions/commands/watch.js +6 -3
  164. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +12 -8
  165. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +1 -1
  166. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +74 -22
  167. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
  168. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +72 -20
  169. package/dist/src/functions/wirings/channels/pikku-channels.js +9 -2
  170. package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
  171. package/dist/src/functions/wirings/channels/serialize-channel-types.js +72 -16
  172. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
  173. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +4 -4
  174. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +1 -1
  175. package/dist/src/functions/wirings/cli/pikku-command-cli.js +17 -3
  176. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +1 -1
  177. package/dist/src/functions/wirings/cli/serialize-cli-types.js +2 -2
  178. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +1 -1
  179. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -4
  180. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.d.ts +1 -0
  181. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.js +90 -0
  182. package/dist/src/functions/wirings/forge/pikku-command-forge-types.d.ts +1 -0
  183. package/dist/src/functions/wirings/forge/pikku-command-forge-types.js +26 -0
  184. package/dist/src/functions/wirings/forge/serialize-forge-types.d.ts +4 -0
  185. package/dist/src/functions/wirings/forge/serialize-forge-types.js +90 -0
  186. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +4 -4
  187. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
  188. package/dist/src/functions/wirings/functions/pikku-command-functions.js +35 -10
  189. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  190. package/dist/src/functions/wirings/functions/pikku-command-services.js +24 -24
  191. package/dist/src/functions/wirings/functions/pikku-function-types.js +2 -2
  192. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  193. package/dist/src/functions/wirings/functions/schemas.js +5 -4
  194. package/dist/src/functions/wirings/functions/serialize-function-imports.d.ts +3 -1
  195. package/dist/src/functions/wirings/functions/serialize-function-imports.js +7 -3
  196. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  197. package/dist/src/functions/wirings/functions/serialize-function-types.js +224 -91
  198. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
  199. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +19 -21
  200. package/dist/src/functions/wirings/http/openapi-spec-generator.js +5 -5
  201. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +18 -2
  202. package/dist/src/functions/wirings/http/pikku-command-openapi.js +2 -2
  203. package/dist/src/functions/wirings/http/pikku-http-routes.js +9 -2
  204. package/dist/src/functions/wirings/http/serialize-http-types.js +19 -3
  205. package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
  206. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +29 -6
  207. package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
  208. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +71 -19
  209. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +29 -2
  210. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +5 -2
  211. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +5 -13
  212. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -0
  213. package/dist/src/functions/wirings/package/pikku-command-package.js +58 -0
  214. package/dist/src/functions/wirings/package/serialize-package.d.ts +5 -0
  215. package/dist/src/functions/wirings/package/serialize-package.js +32 -0
  216. package/dist/src/functions/wirings/queue/pikku-command-queue.js +17 -3
  217. package/dist/src/functions/wirings/queue/pikku-queue.js +9 -11
  218. package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
  219. package/dist/src/functions/wirings/queue/serialize-queue-meta.d.ts +2 -1
  220. package/dist/src/functions/wirings/queue/serialize-queue-meta.js +10 -1
  221. package/dist/src/functions/wirings/queue/serialize-queue-types.js +1 -1
  222. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +4 -4
  223. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +9 -2
  224. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +11 -4
  225. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +4 -1
  226. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
  227. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -1
  228. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +54 -8
  229. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +15 -3
  230. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.d.ts +2 -1
  231. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +11 -1
  232. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +1 -1
  233. package/dist/src/functions/wirings/services/pikku-command-service-metadata.d.ts +1 -0
  234. package/dist/src/functions/wirings/services/pikku-command-service-metadata.js +22 -0
  235. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +58 -16
  236. package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +3 -0
  237. package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +30 -32
  238. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +1 -2
  239. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -8
  240. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.d.ts +7 -0
  241. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.js +53 -0
  242. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +4 -2
  243. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +308 -49
  244. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
  245. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +16 -29
  246. package/dist/src/middleware/log-command-info-and-time.d.ts +2 -2
  247. package/dist/src/middleware/log-command-info-and-time.js +1 -4
  248. package/dist/src/services/cli-logger-forwarder.service.js +1 -1
  249. package/dist/src/services.d.ts +2 -7
  250. package/dist/src/services.js +18 -13
  251. package/dist/src/utils/check-required-types.d.ts +2 -2
  252. package/dist/src/utils/check-required-types.js +2 -3
  253. package/dist/src/utils/command-summary.d.ts +2 -0
  254. package/dist/src/utils/command-summary.js +2 -0
  255. package/dist/src/utils/custom-types-generator.js +13 -15
  256. package/dist/src/utils/generate-bootstrap-file.js +1 -1
  257. package/dist/src/utils/pikku-cli-config.js +65 -4
  258. package/dist/src/utils/pikku-files-and-methods.d.ts +2 -2
  259. package/dist/src/utils/pikku-files-and-methods.js +4 -4
  260. package/dist/src/utils/schema-generator.d.ts +4 -3
  261. package/dist/src/utils/schema-generator.js +135 -15
  262. package/dist/src/utils/strip-verbose-meta.d.ts +43 -0
  263. package/dist/src/utils/strip-verbose-meta.js +210 -0
  264. package/dist/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +11 -9
  266. package/src/cli.wiring.ts +4 -4
  267. package/src/functions/commands/all.ts +203 -107
  268. package/src/functions/commands/bootstrap.ts +23 -16
  269. package/src/functions/commands/watch.ts +6 -3
  270. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +26 -6
  271. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +75 -22
  272. package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +72 -19
  273. package/src/functions/wirings/channels/pikku-channels.ts +27 -3
  274. package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
  275. package/src/functions/wirings/channels/serialize-channel-types.ts +72 -16
  276. package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
  277. package/src/functions/wirings/cli/pikku-command-cli-entry.ts +4 -4
  278. package/src/functions/wirings/cli/pikku-command-cli-types.ts +1 -1
  279. package/src/functions/wirings/cli/pikku-command-cli.ts +45 -3
  280. package/src/functions/wirings/cli/serialize-channel-cli.ts +1 -1
  281. package/src/functions/wirings/cli/serialize-cli-types.ts +2 -2
  282. package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +5 -5
  283. package/src/functions/wirings/forge/pikku-command-forge-nodes.ts +135 -0
  284. package/src/functions/wirings/forge/pikku-command-forge-types.ts +38 -0
  285. package/src/functions/wirings/forge/serialize-forge-types.ts +94 -0
  286. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +9 -8
  287. package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
  288. package/src/functions/wirings/functions/pikku-command-functions.ts +59 -14
  289. package/src/functions/wirings/functions/pikku-command-services.ts +26 -26
  290. package/src/functions/wirings/functions/pikku-function-types.ts +3 -1
  291. package/src/functions/wirings/functions/schemas.ts +14 -4
  292. package/src/functions/wirings/functions/serialize-function-imports.ts +12 -3
  293. package/src/functions/wirings/functions/serialize-function-types.ts +227 -93
  294. package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
  295. package/src/functions/wirings/http/openapi-spec-generator.ts +15 -6
  296. package/src/functions/wirings/http/pikku-command-http-routes.ts +46 -2
  297. package/src/functions/wirings/http/pikku-command-openapi.ts +3 -2
  298. package/src/functions/wirings/http/pikku-http-routes.ts +28 -2
  299. package/src/functions/wirings/http/serialize-http-types.ts +19 -3
  300. package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
  301. package/src/functions/wirings/mcp/pikku-command-mcp.ts +58 -10
  302. package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
  303. package/src/functions/wirings/mcp/serialize-mcp-types.ts +71 -19
  304. package/src/functions/wirings/middleware/pikku-command-middleware.ts +39 -2
  305. package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +4 -19
  306. package/src/functions/wirings/package/pikku-command-package.ts +81 -0
  307. package/src/functions/wirings/package/serialize-package.ts +69 -0
  308. package/src/functions/wirings/permissions/pikku-command-permissions.ts +2 -2
  309. package/src/functions/wirings/queue/pikku-command-queue.ts +47 -2
  310. package/src/functions/wirings/queue/pikku-queue.ts +26 -10
  311. package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
  312. package/src/functions/wirings/queue/serialize-queue-meta.ts +15 -1
  313. package/src/functions/wirings/queue/serialize-queue-types.ts +1 -1
  314. package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
  315. package/src/functions/wirings/rpc/pikku-command-rpc.ts +25 -2
  316. package/src/functions/wirings/rpc/serialize-public-rpc.ts +11 -4
  317. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +4 -1
  318. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +3 -3
  319. package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
  320. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +51 -4
  321. package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +20 -1
  322. package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +1 -1
  323. package/src/functions/wirings/services/pikku-command-service-metadata.ts +25 -0
  324. package/src/functions/wirings/workflow/pikku-command-workflow.ts +114 -19
  325. package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
  326. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +68 -11
  327. package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
  328. package/src/functions/wirings/workflow/serialize-workflow-types.ts +311 -49
  329. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +16 -29
  330. package/src/middleware/log-command-info-and-time.ts +3 -6
  331. package/src/services/cli-logger-forwarder.service.ts +1 -1
  332. package/src/services.ts +23 -16
  333. package/src/utils/check-required-types.ts +4 -7
  334. package/src/utils/command-summary.ts +4 -0
  335. package/src/utils/custom-types-generator.ts +15 -15
  336. package/src/utils/generate-bootstrap-file.ts +1 -1
  337. package/src/utils/pikku-cli-config.ts +105 -5
  338. package/src/utils/pikku-files-and-methods.ts +10 -13
  339. package/src/utils/schema-generator.ts +185 -22
  340. package/src/utils/strip-verbose-meta.ts +254 -0
  341. package/types/application-types.d.ts +1 -1
  342. package/types/config.d.ts +47 -2
  343. package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -211
  344. package/.pikku/function/pikku-functions.gen.ts +0 -84
  345. package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +0 -47
  346. package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
  347. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -211
  348. package/dist/.pikku/function/pikku-functions.gen.d.ts +0 -1
  349. package/dist/.pikku/function/pikku-functions.gen.js +0 -83
  350. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +0 -1
  351. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +0 -47
  352. package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +0 -1
  353. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +0 -1
  354. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +0 -12
  355. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +0 -1
  356. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +0 -11
  357. package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
  358. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -22
@@ -0,0 +1,81 @@
1
+ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
2
+ import { writeFileInDir } from '../../../utils/file-writer.js'
3
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
4
+ import { serializePackageFactories } from './serialize-package.js'
5
+
6
+ export const pikkuPackage: any = pikkuSessionlessFunc<
7
+ void,
8
+ boolean | undefined
9
+ >({
10
+ func: async ({ logger, config, getInspectorState }) => {
11
+ const { externalPackageName, packageMappings, packageFile } = config
12
+
13
+ // Only generate for external packages
14
+ if (!externalPackageName) {
15
+ logger.info({
16
+ message:
17
+ 'Skipping package factories - not an external package (externalPackageName not set)',
18
+ type: 'skip',
19
+ })
20
+ return false
21
+ }
22
+
23
+ if (!packageFile) {
24
+ logger.info({
25
+ message: 'Skipping package factories - packageFile not configured',
26
+ type: 'skip',
27
+ })
28
+ return false
29
+ }
30
+
31
+ const state = await getInspectorState()
32
+ const { filesAndMethods } = state
33
+
34
+ const {
35
+ pikkuConfigFactory,
36
+ singletonServicesFactory,
37
+ wireServicesFactory,
38
+ } = filesAndMethods
39
+
40
+ const content = serializePackageFactories(
41
+ packageFile,
42
+ externalPackageName,
43
+ pikkuConfigFactory
44
+ ? {
45
+ file: pikkuConfigFactory.file,
46
+ variable: pikkuConfigFactory.variable,
47
+ }
48
+ : undefined,
49
+ singletonServicesFactory
50
+ ? {
51
+ file: singletonServicesFactory.file,
52
+ variable: singletonServicesFactory.variable,
53
+ }
54
+ : undefined,
55
+ wireServicesFactory
56
+ ? {
57
+ file: wireServicesFactory.file,
58
+ variable: wireServicesFactory.variable,
59
+ }
60
+ : undefined,
61
+ packageMappings
62
+ )
63
+
64
+ if (!content) {
65
+ logger.info({
66
+ message: 'Skipping package factories - no service factories found',
67
+ type: 'skip',
68
+ })
69
+ return false
70
+ }
71
+
72
+ await writeFileInDir(logger, packageFile, content)
73
+ return true
74
+ },
75
+ middleware: [
76
+ logCommandInfoAndTime({
77
+ commandStart: 'Generating package service factories',
78
+ commandEnd: 'Generated package service factories',
79
+ }),
80
+ ],
81
+ })
@@ -0,0 +1,69 @@
1
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
2
+
3
+ export interface PackageFactoryInfo {
4
+ file: string
5
+ variable: string
6
+ }
7
+
8
+ export const serializePackageFactories = (
9
+ outputPath: string,
10
+ packageName: string,
11
+ configFactory: PackageFactoryInfo | undefined,
12
+ singletonServicesFactory: PackageFactoryInfo | undefined,
13
+ wireServicesFactory: PackageFactoryInfo | undefined,
14
+ packageMappings: Record<string, string> = {}
15
+ ) => {
16
+ const imports: string[] = [
17
+ `import { addPackageServiceFactories } from '@pikku/core'`,
18
+ ]
19
+
20
+ const factoryEntries: string[] = []
21
+
22
+ if (configFactory) {
23
+ const filePath = getFileImportRelativePath(
24
+ outputPath,
25
+ configFactory.file,
26
+ packageMappings
27
+ )
28
+ imports.push(
29
+ `import { ${configFactory.variable} as createConfig } from '${filePath}'`
30
+ )
31
+ factoryEntries.push(` createConfig,`)
32
+ }
33
+
34
+ if (singletonServicesFactory) {
35
+ const filePath = getFileImportRelativePath(
36
+ outputPath,
37
+ singletonServicesFactory.file,
38
+ packageMappings
39
+ )
40
+ imports.push(
41
+ `import { ${singletonServicesFactory.variable} as createSingletonServices } from '${filePath}'`
42
+ )
43
+ factoryEntries.push(` createSingletonServices,`)
44
+ }
45
+
46
+ if (wireServicesFactory) {
47
+ const filePath = getFileImportRelativePath(
48
+ outputPath,
49
+ wireServicesFactory.file,
50
+ packageMappings
51
+ )
52
+ imports.push(
53
+ `import { ${wireServicesFactory.variable} as createWireServices } from '${filePath}'`
54
+ )
55
+ factoryEntries.push(` createWireServices,`)
56
+ }
57
+
58
+ // Only generate if at least one factory is defined
59
+ if (factoryEntries.length === 0) {
60
+ return null
61
+ }
62
+
63
+ return `${imports.join('\n')}
64
+
65
+ addPackageServiceFactories('${packageName}', {
66
+ ${factoryEntries.join('\n')}
67
+ })
68
+ `
69
+ }
@@ -17,10 +17,10 @@ export const pikkuPermissions: any = pikkuSessionlessFunc<
17
17
  // Check if there are any permission group factories
18
18
  const hasHTTPFactories = Array.from(
19
19
  state.http.routePermissions.values()
20
- ).some((meta) => meta.exportName && meta.isFactory)
20
+ ).some((meta: any) => meta.exportName && meta.isFactory)
21
21
  const hasTagFactories = Array.from(
22
22
  state.permissions.tagPermissions.values()
23
- ).some((meta) => meta.exportName && meta.isFactory)
23
+ ).some((meta: any) => meta.exportName && meta.isFactory)
24
24
  const hasFactories = hasHTTPFactories || hasTagFactories
25
25
 
26
26
  // Generate permissions imports file if there are factories
@@ -2,7 +2,15 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
2
2
  import { serializeFileImports } from '../../../utils/file-imports-serializer.js'
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js'
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
5
- import { serializeQueueMeta } from './serialize-queue-meta.js'
5
+ import {
6
+ serializeQueueMeta,
7
+ serializeQueueMetaTS,
8
+ } from './serialize-queue-meta.js'
9
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
10
+ import {
11
+ stripVerboseFields,
12
+ hasVerboseFields,
13
+ } from '../../../utils/strip-verbose-meta.js'
6
14
 
7
15
  export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean | undefined>({
8
16
  func: async ({ logger, config, getInspectorState }) => {
@@ -10,15 +18,52 @@ export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean | undefined>({
10
18
  const {
11
19
  queueWorkersWiringFile,
12
20
  queueWorkersWiringMetaFile,
21
+ queueWorkersWiringMetaJsonFile,
13
22
  packageMappings,
23
+ schema,
14
24
  } = config
15
25
  const { queueWorkers } = visitState
16
26
 
27
+ const fullMeta = serializeQueueMeta(queueWorkers.meta)
28
+
29
+ // Write minimal JSON file (runtime-only fields)
30
+ const minimalMeta = stripVerboseFields(fullMeta)
17
31
  await writeFileInDir(
18
32
  logger,
33
+ queueWorkersWiringMetaJsonFile,
34
+ JSON.stringify(minimalMeta, null, 2)
35
+ )
36
+
37
+ // Write verbose JSON only if it has additional fields
38
+ if (hasVerboseFields(fullMeta)) {
39
+ const verbosePath = queueWorkersWiringMetaJsonFile.replace(
40
+ /\.gen\.json$/,
41
+ '-verbose.gen.json'
42
+ )
43
+ await writeFileInDir(
44
+ logger,
45
+ verbosePath,
46
+ JSON.stringify(fullMeta, null, 2)
47
+ )
48
+ }
49
+
50
+ // Calculate relative path from TS file to JSON file
51
+ const jsonImportPath = getFileImportRelativePath(
19
52
  queueWorkersWiringMetaFile,
20
- serializeQueueMeta(queueWorkers.meta)
53
+ queueWorkersWiringMetaJsonFile,
54
+ packageMappings
21
55
  )
56
+
57
+ // Write TypeScript file that imports JSON
58
+ await writeFileInDir(
59
+ logger,
60
+ queueWorkersWiringMetaFile,
61
+ serializeQueueMetaTS(
62
+ jsonImportPath,
63
+ schema?.supportsImportAttributes ?? false
64
+ )
65
+ )
66
+
22
67
  await writeFileInDir(
23
68
  logger,
24
69
  queueWorkersWiringFile,
@@ -2,7 +2,11 @@ import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
2
2
  import { serializeFileImports } from '../../../utils/file-imports-serializer.js'
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js'
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
5
- import { serializeQueueMeta } from './serialize-queue-meta.js'
5
+ import {
6
+ serializeQueueMeta,
7
+ serializeQueueMetaTS,
8
+ } from './serialize-queue-meta.js'
9
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
6
10
 
7
11
  export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean>({
8
12
  func: async ({ logger, config, getInspectorState }) => {
@@ -10,24 +14,36 @@ export const pikkuQueue: any = pikkuSessionlessFunc<void, boolean>({
10
14
  const {
11
15
  queueWorkersWiringFile,
12
16
  queueWorkersWiringMetaFile,
17
+ queueWorkersWiringMetaJsonFile,
13
18
  packageMappings,
19
+ schema,
14
20
  } = config
15
21
  const { queueWorkers } = visitState
16
22
 
17
- // Add remote RPC worker to queue metadata if it exists
18
- const queueMeta = { ...queueWorkers.meta }
19
- if (config.rpc?.remoteRpcWorkersPath) {
20
- queueMeta['pikku-remote-internal-rpc'] = {
21
- pikkuFuncName: 'pikkuRemoteInternalRPC',
22
- queueName: 'pikku-remote-internal-rpc',
23
- }
24
- }
23
+ // Write JSON file
24
+ await writeFileInDir(
25
+ logger,
26
+ queueWorkersWiringMetaJsonFile,
27
+ JSON.stringify(serializeQueueMeta(queueWorkers.meta), null, 2)
28
+ )
29
+
30
+ // Calculate relative path from TS file to JSON file
31
+ const jsonImportPath = getFileImportRelativePath(
32
+ queueWorkersWiringMetaFile,
33
+ queueWorkersWiringMetaJsonFile,
34
+ packageMappings
35
+ )
25
36
 
37
+ // Write TypeScript file that imports JSON
26
38
  await writeFileInDir(
27
39
  logger,
28
40
  queueWorkersWiringMetaFile,
29
- serializeQueueMeta(queueMeta)
41
+ serializeQueueMetaTS(
42
+ jsonImportPath,
43
+ schema?.supportsImportAttributes ?? false
44
+ )
30
45
  )
46
+
31
47
  await writeFileInDir(
32
48
  logger,
33
49
  queueWorkersWiringFile,
@@ -30,7 +30,7 @@ export const serializeQueueMap = (
30
30
  return `/**
31
31
  * This provides the structure needed for typescript to be aware of Queue workers and their input/output types
32
32
  */
33
-
33
+
34
34
  ${serializedImportMap}
35
35
  ${serializedCustomTypes}
36
36
 
@@ -93,8 +93,23 @@ function generateQueues(
93
93
  const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined
94
94
 
95
95
  // Store the input and output types for QueueHandler
96
- const inputType = input ? typesMap.getTypeMeta(input).uniqueName : 'null'
97
- const outputType = output ? typesMap.getTypeMeta(output).uniqueName : 'null'
96
+ // For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
97
+ let inputType = 'null'
98
+ if (input) {
99
+ try {
100
+ inputType = typesMap.getTypeMeta(input).uniqueName
101
+ } catch {
102
+ inputType = input
103
+ }
104
+ }
105
+ let outputType = 'null'
106
+ if (output) {
107
+ try {
108
+ outputType = typesMap.getTypeMeta(output).uniqueName
109
+ } catch {
110
+ outputType = output
111
+ }
112
+ }
98
113
 
99
114
  requiredTypes.add(inputType)
100
115
  requiredTypes.add(outputType)
@@ -1,10 +1,24 @@
1
1
  import { QueueWorkersMeta } from '@pikku/core/queue'
2
2
 
3
3
  export const serializeQueueMeta = (queueWorkersMeta: QueueWorkersMeta) => {
4
+ return queueWorkersMeta
5
+ }
6
+
7
+ export const serializeQueueMetaTS = (
8
+ jsonImportPath: string,
9
+ supportsImportAttributes: boolean
10
+ ) => {
11
+ const importStatement = supportsImportAttributes
12
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
13
+ : `import metaData from '${jsonImportPath}'`
14
+
4
15
  const serializedOutput: string[] = []
5
16
  serializedOutput.push("import { pikkuState } from '@pikku/core'")
17
+ serializedOutput.push("import { QueueWorkersMeta } from '@pikku/core/queue'")
18
+ serializedOutput.push(importStatement)
19
+ serializedOutput.push('')
6
20
  serializedOutput.push(
7
- `pikkuState('queue', 'meta', ${JSON.stringify(queueWorkersMeta, null, 2)})`
21
+ "pikkuState(null, 'queue', 'meta', metaData as QueueWorkersMeta)"
8
22
  )
9
23
  return serializedOutput.join('\n')
10
24
  }
@@ -15,7 +15,7 @@ import type { PikkuFunctionConfig } from '${functionTypesImportPath}'
15
15
  * @template In - Input type for the queue job
16
16
  * @template Out - Output type for the queue job
17
17
  */
18
- type QueueWiring<In, Out> = CoreQueueWorker<PikkuFunctionConfig<In, Out>>
18
+ type QueueWiring<In, Out> = CoreQueueWorker<PikkuFunctionConfig<In, Out, 'session' | 'rpc'>>
19
19
 
20
20
  /**
21
21
  * Registers a queue worker with the Pikku framework.
@@ -6,14 +6,16 @@ import { serializeTypedRPCMap } from './serialize-typed-rpc-map.js'
6
6
  export const pikkuRPCInternalMap: any = pikkuSessionlessFunc<void, void>({
7
7
  func: async ({ logger, config, getInspectorState }) => {
8
8
  const { functions, rpc } = await getInspectorState()
9
- const { rpcInternalMapDeclarationFile, packageMappings } = config
9
+ const { rpcInternalMapDeclarationFile, packageMappings, externalPackages } =
10
+ config
10
11
 
11
12
  const content = serializeTypedRPCMap(
12
13
  rpcInternalMapDeclarationFile,
13
14
  packageMappings,
14
15
  functions.typesMap,
15
16
  functions.meta,
16
- rpc.internalMeta
17
+ rpc.internalMeta,
18
+ externalPackages
17
19
  )
18
20
  await writeFileInDir(logger, rpcInternalMapDeclarationFile, content)
19
21
  },
@@ -28,14 +30,15 @@ export const pikkuRPCInternalMap: any = pikkuSessionlessFunc<void, void>({
28
30
  export const pikkuRPCExposedMap: any = pikkuSessionlessFunc<void, void>({
29
31
  func: async ({ logger, config, getInspectorState }) => {
30
32
  const { functions, rpc } = await getInspectorState()
31
- const { rpcMapDeclarationFile, packageMappings } = config
33
+ const { rpcMapDeclarationFile, packageMappings, externalPackages } = config
32
34
 
33
35
  const content = serializeTypedRPCMap(
34
36
  rpcMapDeclarationFile,
35
37
  packageMappings,
36
38
  functions.typesMap,
37
39
  functions.meta,
38
- rpc.exposedMeta
40
+ rpc.exposedMeta,
41
+ externalPackages
39
42
  )
40
43
  await writeFileInDir(logger, rpcMapDeclarationFile, content)
41
44
  },
@@ -1,17 +1,40 @@
1
1
  import { pikkuSessionlessFunc } from '../../../../.pikku/pikku-types.gen.js'
2
2
  import { writeFileInDir } from '../../../utils/file-writer.js'
3
3
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js'
4
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js'
4
5
 
5
6
  export const pikkuRPC: any = pikkuSessionlessFunc<void, boolean>({
6
7
  func: async ({ logger, config, getInspectorState }) => {
7
8
  const { rpc } = await getInspectorState()
8
- const { rpcInternalWiringMetaFile } = config
9
+ const {
10
+ rpcInternalWiringMetaFile,
11
+ rpcInternalWiringMetaJsonFile,
12
+ packageMappings,
13
+ schema,
14
+ } = config
9
15
 
10
16
  if (rpc.internalFiles.size > 0) {
17
+ await writeFileInDir(
18
+ logger,
19
+ rpcInternalWiringMetaJsonFile,
20
+ JSON.stringify(rpc.internalMeta, null, 2)
21
+ )
22
+
23
+ const jsonImportPath = getFileImportRelativePath(
24
+ rpcInternalWiringMetaFile,
25
+ rpcInternalWiringMetaJsonFile,
26
+ packageMappings
27
+ )
28
+
29
+ const supportsImportAttributes = schema?.supportsImportAttributes ?? false
30
+ const importStatement = supportsImportAttributes
31
+ ? `import metaData from '${jsonImportPath}' with { type: 'json' }`
32
+ : `import metaData from '${jsonImportPath}'`
33
+
11
34
  await writeFileInDir(
12
35
  logger,
13
36
  rpcInternalWiringMetaFile,
14
- `import { pikkuState } from '@pikku/core'\npikkuState('rpc', 'meta', ${JSON.stringify(rpc.internalMeta, null, 2)})`
37
+ `import { pikkuState } from '@pikku/core'\n${importStatement}\npikkuState(null, 'rpc', 'meta', metaData as Record<string, string>)`
15
38
  )
16
39
  return true
17
40
  }
@@ -13,16 +13,23 @@ import { pikkuSessionlessFunc, wireHTTP } from '${pathToPikkuTypes}'
13
13
  * This is used for public HTTP access to exposed server functions
14
14
  */
15
15
  export const rpcCaller = pikkuSessionlessFunc<
16
- { name: string, data?: any },
16
+ { rpcName: string, data?: any },
17
17
  any
18
18
  >({
19
- func: async ({ rpc }, { name, data }) => {
20
- return await (rpc.invokeExposed as any)(name, data)
19
+ func: async (services, { rpcName, data }, { rpc }) => {
20
+ return await (rpc.invokeExposed as any)(rpcName, data)
21
21
  },
22
22
  })
23
23
 
24
24
  wireHTTP({
25
- route: '/rpc',
25
+ route: "/rpc/:rpcName",
26
+ method: "options",
27
+ auth: false,
28
+ func: pikkuSessionlessFunc<{ rpcName: string }>(async () => void 0),
29
+ });
30
+
31
+ wireHTTP({
32
+ route: '/rpc/:rpcName',
26
33
  method: 'post',
27
34
  func: rpcCaller,
28
35
  })
@@ -11,12 +11,15 @@ import { pikkuSessionlessFunc, wireQueueWorker } from '${pathToPikkuTypes}'
11
11
  /**
12
12
  * Generic remote RPC worker that invokes any internal RPC by name
13
13
  * This is used for executing internal RPCs via a queue or HTTP (e.g., scheduled tasks, background jobs, internal services)
14
+ *
15
+ * TODO: Security risk - this allows any RPC to be invoked by name. Should validate
16
+ * that rpcName is in an allowlist of permitted internal RPCs to prevent unauthorized access.
14
17
  */
15
18
  export const pikkuRemoteInternalRPC = pikkuSessionlessFunc<
16
19
  { rpcName: string, data?: any },
17
20
  any
18
21
  >({
19
- func: async ({ rpc }, { rpcName, data }) => {
22
+ func: async (_services, { rpcName, data }, { rpc }) => {
20
23
  return await (rpc.invoke as any)(rpcName, data)
21
24
  },
22
25
  internal: true,
@@ -54,12 +54,12 @@ export class PikkuRPC {
54
54
  * This is a generic method that routes to the appropriate server function
55
55
  * based on the function name and passes the provided data.
56
56
  *
57
- * @param name - The name of the server function to invoke
57
+ * @param rpcName - The name of the server function to invoke
58
58
  * @param data - The data to pass to the server function
59
59
  * @returns A promise that resolves with the function's return value
60
60
  */
61
- invoke: RPCInvoke = async (name, data) => {
62
- return await this.pikkuFetch.post('/rpc' as any, { name, data }) as any
61
+ invoke: RPCInvoke = async (rpcName, data) => {
62
+ return await this.pikkuFetch.post(\`/rpc/\${rpcName}\` as any, { rpcName: String(rpcName), data }) as any
63
63
  }
64
64
  }
65
65
 
@@ -8,7 +8,8 @@ export const serializeTypedRPCMap = (
8
8
  packageMappings: Record<string, string>,
9
9
  typesMap: TypesMap,
10
10
  functionsMeta: FunctionsMeta,
11
- rpcMeta: Record<string, string>
11
+ rpcMeta: Record<string, string>,
12
+ externalPackages?: Record<string, string>
12
13
  ) => {
13
14
  const requiredTypes = new Set<string>()
14
15
  const serializedCustomTypes = generateCustomTypes(typesMap, requiredTypes)
@@ -26,10 +27,17 @@ export const serializeTypedRPCMap = (
26
27
  requiredTypes
27
28
  )
28
29
 
30
+ const externalPackageImports = generateExternalPackageImports(
31
+ externalPackages,
32
+ relativeToPath
33
+ )
34
+
35
+ const mergedRPCMap = generateMergedRPCMap(externalPackages)
36
+
29
37
  return `/**
30
38
  * This provides the structure needed for typescript to be aware of RPCs and their return types
31
39
  */
32
-
40
+
33
41
  ${serializedImportMap}
34
42
  ${serializedCustomTypes}
35
43
 
@@ -39,14 +47,16 @@ interface RPCHandler<I, O> {
39
47
  }
40
48
 
41
49
  ${serializedRPCs}
50
+ ${externalPackageImports}
51
+ ${mergedRPCMap}
42
52
 
43
- export type RPCInvoke = <Name extends keyof RPCMap>(
53
+ export type RPCInvoke = <Name extends keyof FlattenedRPCMap>(
44
54
  name: Name,
45
- data: RPCMap[Name]['input'],
55
+ data: FlattenedRPCMap[Name]['input'],
46
56
  options?: {
47
57
  location?: 'local' | 'remote' | 'auto'
48
58
  }
49
- ) => Promise<RPCMap[Name]['output']>
59
+ ) => Promise<FlattenedRPCMap[Name]['output']>
50
60
 
51
61
  // Import WorkflowMap for workflow typing
52
62
  import type { WorkflowMap } from '../workflow/pikku-workflow-map.gen.js'
@@ -64,6 +74,60 @@ export type TypedPikkuRPC = {
64
74
  `
65
75
  }
66
76
 
77
+ function generateExternalPackageImports(
78
+ externalPackages: Record<string, string> | undefined,
79
+ relativeToPath: string
80
+ ): string {
81
+ if (!externalPackages || Object.keys(externalPackages).length === 0) {
82
+ return ''
83
+ }
84
+
85
+ let imports = '\n// External package RPC maps\n'
86
+ for (const [namespace, packageName] of Object.entries(externalPackages)) {
87
+ // Import the RPCMap from each external package's internal RPC map
88
+ // Use .js extension - package.json exports will resolve to .d.ts for types
89
+ imports += `import type { RPCMap as ${toPascalCase(namespace)}RPCMap } from '${packageName}/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.js'\n`
90
+ }
91
+ return imports
92
+ }
93
+
94
+ function generateMergedRPCMap(
95
+ externalPackages: Record<string, string> | undefined
96
+ ): string {
97
+ if (!externalPackages || Object.keys(externalPackages).length === 0) {
98
+ return `
99
+ // No external packages, use RPCMap directly
100
+ export type FlattenedRPCMap = RPCMap
101
+ `
102
+ }
103
+
104
+ // TypeScript utility to flatten namespaced RPC maps
105
+ const utilityTypes = `
106
+ // Utility type to prefix keys with namespace
107
+ type PrefixKeys<T, Prefix extends string> = {
108
+ [K in keyof T as \`\${Prefix}:\${string & K}\`]: T[K]
109
+ }
110
+
111
+ // Merge all RPC maps with namespace prefixes
112
+ export type FlattenedRPCMap =
113
+ RPCMap${Object.keys(externalPackages)
114
+ .map(
115
+ (namespace) =>
116
+ ` & PrefixKeys<${toPascalCase(namespace)}RPCMap, '${namespace}'>`
117
+ )
118
+ .join('')}
119
+ `
120
+
121
+ return utilityTypes
122
+ }
123
+
124
+ function toPascalCase(str: string): string {
125
+ return str
126
+ .split(/[-_]/)
127
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
128
+ .join('')
129
+ }
130
+
67
131
  function generateRPCs(
68
132
  rpcMeta: Record<string, string>,
69
133
  functionsMeta: FunctionsMeta,
@@ -86,13 +150,14 @@ function generateRPCs(
86
150
  const output = functionMeta.outputs ? functionMeta.outputs[0] : undefined
87
151
 
88
152
  // Store the input and output types for RPCHandler
89
- // Use 'any' for types not in typesMap (e.g., inline types in generated workflow workers)
153
+ // For zod-derived schemas, the type might not be in typesMap, so use the schema name directly
90
154
  let inputType = 'null'
91
155
  if (input) {
92
156
  try {
93
157
  inputType = typesMap.getTypeMeta(input).uniqueName
94
158
  } catch {
95
- inputType = 'any'
159
+ // Type not in typesMap - use the name directly (e.g., zod-derived types)
160
+ inputType = input
96
161
  }
97
162
  }
98
163
 
@@ -101,7 +166,8 @@ function generateRPCs(
101
166
  try {
102
167
  outputType = typesMap.getTypeMeta(output).uniqueName
103
168
  } catch {
104
- outputType = 'any'
169
+ // Type not in typesMap - use the name directly (e.g., zod-derived types)
170
+ outputType = output
105
171
  }
106
172
  }
107
173