@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
@@ -6,30 +6,30 @@ export const serializeFunctionTypes = (
6
6
  userSessionTypeName: string,
7
7
  singletonServicesTypeImport: string,
8
8
  singletonServicesTypeName: string,
9
- sessionServicesTypeImport: string,
10
- sessionServicesTypeName: string,
9
+ wireServicesTypeImport: string,
10
+ wireServicesTypeName: string,
11
11
  rpcMapTypeImport: string,
12
12
  requiredServicesTypeImport: string,
13
- configTypeImport: string
13
+ configTypeImport: string,
14
+ packageName?: string
14
15
  ) => {
16
+ const packageNameValue = packageName ? `'${packageName}'` : 'null'
15
17
  return `/**
16
18
  * Core function, middleware, and permission types for all wirings
17
19
  */
18
20
 
19
- import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore } from '@pikku/core'
21
+ import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired, ZodLike, CreateWireServices } from '@pikku/core'
20
22
  import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
21
- import { PikkuChannel } from '@pikku/core/channel'
22
- import { PikkuMCP } from '@pikku/core/mcp'
23
23
 
24
24
  ${userSessionTypeImport}
25
25
  ${singletonServicesTypeImport}
26
- ${sessionServicesTypeImport}
26
+ ${wireServicesTypeImport}
27
27
  ${configTypeImport}
28
28
  ${rpcMapTypeImport}
29
29
  ${requiredServicesTypeImport}
30
30
 
31
31
  ${singletonServicesTypeName !== 'SingletonServices' ? `type SingletonServices = ${singletonServicesTypeName}` : ''}
32
- ${sessionServicesTypeName !== 'Services' ? `type Services = ${sessionServicesTypeName}` : ''}
32
+ ${wireServicesTypeName !== 'Services' ? `type Services = ${wireServicesTypeName}` : ''}
33
33
  ${userSessionTypeName !== 'Session' ? `type Session = ${userSessionTypeName}` : ''}
34
34
  ${configTypeImport.includes('Config type not found') ? 'type Config = any' : ''}
35
35
 
@@ -40,7 +40,7 @@ ${configTypeImport.includes('Config type not found') ? 'type Config = any' : ''}
40
40
  * @template In - The input type that the permission check will receive
41
41
  * @template RequiredServices - The services required for this permission check
42
42
  */
43
- export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, Session>
43
+ export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, PikkuWire<In, never, false, Session>>
44
44
 
45
45
  /**
46
46
  * Type-safe middleware definition that can access your application's services and session.
@@ -48,7 +48,7 @@ export type PikkuPermission<In = unknown, RequiredServices extends Services = Se
48
48
  *
49
49
  * @template RequiredServices - The services required for this middleware
50
50
  */
51
- export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices, Session>
51
+ export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices>
52
52
 
53
53
  /**
54
54
  * Configuration object for creating a permission with metadata
@@ -69,7 +69,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
69
69
  * @example
70
70
  * \`\`\`typescript
71
71
  * // Direct function syntax
72
- * const permission = pikkuPermission(({ logger }, data, session) => {
72
+ * const permission = pikkuPermission(async ({ logger }, data, { session }) => {
73
+ * const session = await session?.get()
73
74
  * return session?.role === 'admin'
74
75
  * })
75
76
  *
@@ -77,7 +78,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
77
78
  * const adminPermission = pikkuPermission({
78
79
  * name: 'Admin Permission',
79
80
  * description: 'Checks if user has admin role',
80
- * func: async ({ logger }, data, session) => {
81
+ * func: async ({ logger }, data, { session }) => {
82
+ * const session = await session?.get()
81
83
  * return session?.role === 'admin'
82
84
  * }
83
85
  * })
@@ -108,7 +110,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
108
110
  * @example
109
111
  * \`\`\`typescript
110
112
  * // Direct function syntax
111
- * const middleware = pikkuMiddleware(({ logger }, interactions, next) => {
113
+ * const middleware = pikkuMiddleware(({ logger }, wires, next) => {
112
114
  * logger.info('Middleware executed')
113
115
  * await next()
114
116
  * })
@@ -117,7 +119,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
117
119
  * const logMiddleware = pikkuMiddleware({
118
120
  * name: 'Request Logger',
119
121
  * description: 'Logs all incoming requests',
120
- * func: async ({ logger }, interactions, next) => {
122
+ * func: async ({ logger }, wires, next) => {
121
123
  * logger.info('Request started')
122
124
  * await next()
123
125
  * }
@@ -140,7 +142,7 @@ export const pikkuMiddleware = <RequiredServices extends SingletonServices = Sin
140
142
  * message,
141
143
  * level = 'info'
142
144
  * }) => {
143
- * return pikkuMiddleware(async ({ logger }, _interaction, next) => {
145
+ * return pikkuMiddleware(async ({ logger }, next) => {
144
146
  * logger[level](message)
145
147
  * await next()
146
148
  * })
@@ -162,8 +164,8 @@ export const pikkuMiddlewareFactory = <In = any>(
162
164
  * export const requireRole = pikkuPermissionFactory<{ role: string }>(({
163
165
  * role
164
166
  * }) => {
165
- * return pikkuPermission(async ({ logger }, data, session) => {
166
- * if (!session || session.role !== role) {
167
+ * return pikkuPermission(async ({ logger }, data, { initialSession }) => {
168
+ * if (!initialSession || initialSession.role !== role) {
167
169
  * logger.warn(\`Permission denied: required role '\${role}'\`)
168
170
  * return false
169
171
  * }
@@ -184,25 +186,19 @@ export const pikkuPermissionFactory = <In = any>(
184
186
  *
185
187
  * @template In - The input type
186
188
  * @template Out - The output type that the function returns
187
- * @template ChannelData - Channel data type (null = optional channel)
188
- * @template MCPData - MCP data type (null = optional MCP)
189
189
  * @template RequiredServices - Services required by this function
190
190
  */
191
191
  export type PikkuFunctionSessionless<
192
192
  In = unknown,
193
193
  Out = never,
194
- ChannelData = null, // null means optional channel
195
- MCPData = null, // null means optional MCP
196
- RequiredServices extends Services = Omit<Services, 'rpc' | 'channel' | 'mcp'> &
197
- { rpc: TypedPikkuRPC } & (
198
- [ChannelData] extends [null]
199
- ? { channel?: PikkuChannel<unknown, Out> } // Optional channel
200
- : { channel: PikkuChannel<ChannelData, Out> } // Required channel with any data type
201
- ) & ([MCPData] extends [null]
202
- ? { mcp?: PikkuMCP } // Optional MCP
203
- : { mcp: PikkuMCP } // Required MCP
204
- )
205
- > = CorePikkuFunctionSessionless<In, Out, ChannelData, RequiredServices, Session>
194
+ RequiredWires extends keyof PikkuWire = never,
195
+ RequiredServices extends Services = Services
196
+ > = CorePikkuFunctionSessionless<
197
+ In,
198
+ Out,
199
+ RequiredServices,
200
+ PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any>, RequiredWires>
201
+ >
206
202
 
207
203
  /**
208
204
  * A session-aware API function that requires user authentication.
@@ -210,25 +206,24 @@ export type PikkuFunctionSessionless<
210
206
  *
211
207
  * @template In - The input type
212
208
  * @template Out - The output type that the function returns
213
- * @template ChannelData - Channel data type (null = optional channel)
214
- * @template MCPData - MCP data type (null = optional MCP)
215
209
  * @template RequiredServices - Services required by this function
216
210
  */
217
211
  export type PikkuFunction<
218
212
  In = unknown,
219
213
  Out = never,
220
- ChannelData = null, // null means optional channel
221
- MCPData = null, // null means optional MCP
222
- RequiredServices extends Services = Omit<Services, 'rpc' | 'channel' | 'mcp'> &
223
- { rpc: TypedPikkuRPC } & (
224
- [ChannelData] extends [null]
225
- ? { channel?: PikkuChannel<unknown, Out> } // Optional channel
226
- : { channel: PikkuChannel<ChannelData, Out> } // Required channel with any data type
227
- ) & ([MCPData] extends [null]
228
- ? { mcp?: PikkuMCP } // Optional MCP
229
- : { mcp: PikkuMCP } // Required MCP
230
- )
231
- > = CorePikkuFunction<In, Out, ChannelData, RequiredServices, Session>
214
+ RequiredWires extends keyof PikkuWire = 'session',
215
+ RequiredServices extends Services = Services
216
+ > = CorePikkuFunction<
217
+ In,
218
+ Out,
219
+ RequiredServices,
220
+ PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
221
+ >
222
+
223
+ /**
224
+ * Helper type to infer the output type from a Zod schema
225
+ */
226
+ export type InferZodOutput<T> = T extends ZodLike<infer U> ? U : never
232
227
 
233
228
  /**
234
229
  * Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
@@ -236,72 +231,172 @@ export type PikkuFunction<
236
231
  *
237
232
  * @template In - The input type
238
233
  * @template Out - The output type
239
- * @template ChannelData - Channel data type
240
- * @template MCPData - MCP data type
241
234
  * @template PikkuFunc - The function type (can be narrowed to PikkuFunction or PikkuFunctionSessionless)
242
235
  */
243
236
  export type PikkuFunctionConfig<
244
237
  In = unknown,
245
238
  Out = unknown,
246
- ChannelData = unknown,
247
- MCPData = unknown,
248
- PikkuFunc extends PikkuFunction<In, Out, ChannelData, MCPData> | PikkuFunctionSessionless<In, Out, ChannelData, MCPData> = PikkuFunction<In, Out, ChannelData, MCPData> | PikkuFunctionSessionless<In, Out, ChannelData, MCPData>
249
- > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware>
239
+ RequiredWires extends keyof PikkuWire = never,
240
+ PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
241
+ InputSchema extends ZodLike | undefined = undefined,
242
+ OutputSchema extends ZodLike | undefined = undefined
243
+ > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema>
244
+
245
+ /**
246
+ * Configuration object for Pikku functions with Zod schema validation.
247
+ * Use this when you want to define input/output schemas using Zod.
248
+ * Types are automatically inferred from the schemas.
249
+ */
250
+ export type PikkuFunctionConfigWithSchema<
251
+ InputSchema extends ZodLike,
252
+ OutputSchema extends ZodLike | undefined = undefined,
253
+ RequiredWires extends keyof PikkuWire = never
254
+ > = {
255
+ name?: string
256
+ tags?: string[]
257
+ expose?: boolean
258
+ internal?: boolean
259
+ func: PikkuFunction<
260
+ InferZodOutput<InputSchema>,
261
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
262
+ RequiredWires
263
+ > | PikkuFunctionSessionless<
264
+ InferZodOutput<InputSchema>,
265
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
266
+ RequiredWires
267
+ >
268
+ auth?: boolean
269
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
270
+ middleware?: PikkuMiddleware[]
271
+ input: InputSchema
272
+ output?: OutputSchema
273
+ }
250
274
 
251
275
  /**
252
276
  * Creates a Pikku function that can be either session-aware or sessionless.
253
277
  * This is the main function wrapper for creating API endpoints.
254
278
  *
255
- * @template In - Input type for the function
256
- * @template Out - Output type for the function
279
+ * Supports two patterns:
280
+ * 1. Generic types: \`pikkuFunc<Input, Output>({ func: ... })\`
281
+ * 2. Zod schemas: \`pikkuFunc({ input: z.object(...), output: z.object(...), func: ... })\`
282
+ *
283
+ * @template In - Input type for the function (inferred from schema if provided)
284
+ * @template Out - Output type for the function (inferred from schema if provided)
257
285
  * @param func - Function definition, either direct function or configuration object
258
286
  * @returns The normalized configuration object
259
287
  *
260
288
  * @example
261
- * \\\`\\\`\\\`typescript
262
- * const createUser = pikkuFunc<{name: string, email: string}, {id: number, message: string}>({
263
- * func: async ({db, logger}, input) => {
264
- * logger.info('Creating user', input.name)
289
+ * \`\`\`typescript
290
+ * // Pattern 1: Using generic types
291
+ * const createUser = pikkuFunc<{name: string, email: string}, {id: number}>({
292
+ * func: async ({db}, input) => {
265
293
  * const user = await db.users.create(input)
266
- * return {id: user.id, message: \\\`User \\\${input.name} created successfully\\\`}
267
- * },
268
- * auth: true
294
+ * return { id: user.id }
295
+ * }
269
296
  * })
270
- * \\\`\\\`\\\`
297
+ *
298
+ * // Pattern 2: Using Zod schemas (types inferred automatically)
299
+ * const createUserInput = z.object({ name: z.string(), email: z.string() })
300
+ * const createUserOutput = z.object({ id: z.number() })
301
+ *
302
+ * const createUser = pikkuFunc({
303
+ * input: createUserInput,
304
+ * output: createUserOutput,
305
+ * func: async ({db}, input) => {
306
+ * // input is typed as { name: string, email: string }
307
+ * const user = await db.users.create(input)
308
+ * return { id: user.id } // must match output schema
309
+ * }
310
+ * })
311
+ * \`\`\`
271
312
  */
272
- export const pikkuFunc = <In, Out = unknown>(
313
+ export function pikkuFunc<
314
+ InputSchema extends ZodLike,
315
+ OutputSchema extends ZodLike | undefined = undefined
316
+ >(
317
+ config: PikkuFunctionConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
318
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
319
+ export function pikkuFunc<In, Out = unknown>(
273
320
  func:
274
- | PikkuFunction<In, Out>
275
- | CorePikkuFunctionConfig<PikkuFunction<In, Out>, PikkuPermission<In>, PikkuMiddleware>
276
- ) => {
321
+ | PikkuFunction<In, Out, 'session' | 'rpc'>
322
+ | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
323
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
324
+ export function pikkuFunc(func: any) {
277
325
  return typeof func === 'function' ? { func } : func
278
326
  }
279
327
 
328
+ /**
329
+ * Configuration object for sessionless Pikku functions with Zod schema validation.
330
+ */
331
+ export type PikkuFunctionSessionlessConfigWithSchema<
332
+ InputSchema extends ZodLike,
333
+ OutputSchema extends ZodLike | undefined = undefined,
334
+ RequiredWires extends keyof PikkuWire = never
335
+ > = {
336
+ name?: string
337
+ description?: string
338
+ tags?: string[]
339
+ expose?: boolean
340
+ internal?: boolean
341
+ func: PikkuFunctionSessionless<
342
+ InferZodOutput<InputSchema>,
343
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
344
+ RequiredWires
345
+ >
346
+ auth?: boolean
347
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
348
+ middleware?: PikkuMiddleware[]
349
+ input: InputSchema
350
+ output?: OutputSchema
351
+ }
352
+
280
353
  /**
281
354
  * Creates a sessionless Pikku function that doesn't require user authentication.
282
355
  * Use this for public endpoints, webhooks, or background tasks.
283
356
  *
284
- * @template In - Input type for the function
285
- * @template Out - Output type for the function
357
+ * Supports two patterns:
358
+ * 1. Generic types: \`pikkuSessionlessFunc<Input, Output>({ func: ... })\`
359
+ * 2. Zod schemas: \`pikkuSessionlessFunc({ input: z.object(...), func: ... })\`
360
+ *
361
+ * @template In - Input type for the function (inferred from schema if provided)
362
+ * @template Out - Output type for the function (inferred from schema if provided)
286
363
  * @param func - Function definition, either direct function or configuration object
287
364
  * @returns The normalized configuration object
288
365
  *
289
366
  * @example
290
- * \\\`\\\`\\\`typescript
291
- * const healthCheck = pikkuSessionlessFunc<void, {status: string, timestamp: string}>({
367
+ * \`\`\`typescript
368
+ * // Pattern 1: Using generic types
369
+ * const healthCheck = pikkuSessionlessFunc<void, {status: string}>({
292
370
  * func: async ({logger}) => {
293
- * logger.info('Health check requested')
294
- * return {status: 'healthy', timestamp: new Date().toISOString()}
295
- * },
296
- * name: 'healthCheck'
371
+ * return { status: 'healthy' }
372
+ * }
373
+ * })
374
+ *
375
+ * // Pattern 2: Using Zod schemas
376
+ * const greetInput = z.object({ name: z.string() })
377
+ * const greetOutput = z.object({ message: z.string() })
378
+ *
379
+ * const greet = pikkuSessionlessFunc({
380
+ * input: greetInput,
381
+ * output: greetOutput,
382
+ * func: async (_services, { name }) => {
383
+ * return { message: \`Hello, \${name}!\` }
384
+ * }
297
385
  * })
298
- * \\\`\\\`\\\`
386
+ * \`\`\`
299
387
  */
300
- export const pikkuSessionlessFunc = <In, Out = unknown>(
388
+ export function pikkuSessionlessFunc<
389
+ InputSchema extends ZodLike,
390
+ OutputSchema extends ZodLike | undefined = undefined
391
+ >(
392
+ config: PikkuFunctionSessionlessConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
393
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
394
+ export function pikkuSessionlessFunc<In, Out = unknown>(
301
395
  func:
302
- | PikkuFunctionSessionless<In, Out>
303
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<In, Out>, PikkuPermission<In>, PikkuMiddleware>
304
- ) => {
396
+ | PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
397
+ | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
398
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
399
+ export function pikkuSessionlessFunc(func: any) {
305
400
  return typeof func === 'function' ? { func } : func
306
401
  }
307
402
 
@@ -313,22 +408,61 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
313
408
  * @returns The normalized configuration object
314
409
  *
315
410
  * @example
316
- * \\\`\\\`\\\`typescript
411
+ * \`\`\`typescript
317
412
  * const cleanupTempFiles = pikkuVoidFunc(async ({fileSystem, logger}) => {
318
413
  * logger.info('Starting cleanup of temporary files')
319
414
  * await fileSystem.deleteDirectory('/tmp/uploads')
320
415
  * logger.info('Cleanup completed')
321
416
  * })
322
- * \\\`\\\`\\\`
417
+ * \`\`\`
323
418
  */
324
419
  export const pikkuVoidFunc = (
325
420
  func:
326
- | PikkuFunctionSessionless<void, void>
327
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<void, void>, PikkuPermission<void>>
421
+ | PikkuFunctionSessionless<void, void, 'session' | 'rpc'>
422
+ | PikkuFunctionConfig<void, void, 'session' | 'rpc'>
328
423
  ) => {
329
424
  return typeof func === 'function' ? { func } : func
330
425
  }
331
426
 
427
+ /**
428
+ * Creates a wrapper function for external package functions that are exposed via RPC.
429
+ * This allows you to wire external functions to any wiring type (HTTP, queue, etc.)
430
+ * without type compatibility issues.
431
+ *
432
+ * @template Name - The RPC method name (must be a key in FlattenedRPCMap)
433
+ * @param rpcName - The name of the RPC method to invoke
434
+ * @returns A Pikku function that proxies calls to the external RPC method
435
+ *
436
+ * @example
437
+ * \`\`\`typescript
438
+ * // Wire an external function via HTTP
439
+ * wireHTTP({
440
+ * auth: false,
441
+ * method: 'get',
442
+ * route: '/external/hello',
443
+ * func: external('ext:hello'),
444
+ * tags: ['external'],
445
+ * })
446
+ * \`\`\`
447
+ */
448
+ export const external = <Name extends keyof FlattenedRPCMap>(
449
+ rpcName: Name
450
+ ): PikkuFunctionConfig<
451
+ FlattenedRPCMap[Name]['input'],
452
+ FlattenedRPCMap[Name]['output'],
453
+ 'session' | 'rpc'
454
+ > => {
455
+ return {
456
+ func: (async (_services: any, data: any, { rpc }: any) => {
457
+ return rpc.invoke(rpcName, data)
458
+ }) as any
459
+ } as PikkuFunctionConfig<
460
+ FlattenedRPCMap[Name]['input'],
461
+ FlattenedRPCMap[Name]['output'],
462
+ 'session' | 'rpc'
463
+ >
464
+ }
465
+
332
466
  /**
333
467
  * Creates a Pikku config factory.
334
468
  * Use this to define your application's configuration factory.
@@ -373,28 +507,28 @@ export const pikkuServices = (
373
507
  ) => func
374
508
 
375
509
  /**
376
- * Creates a Pikku session services factory.
510
+ * Creates a Pikku wire services factory.
377
511
  * Use this to define services that are created per-request/session.
378
512
  *
379
- * @param func - Session services factory function
380
- * @returns The session services factory function
513
+ * @param func - Wire services factory function
514
+ * @returns The wire services factory function
381
515
  *
382
516
  * @example
383
517
  * \`\`\`typescript
384
- * export const createSessionServices = pikkuSessionServices(async (services, interaction, session) => {
518
+ * export const createWireServices = pikkuWireServices(async (services, wire) => {
519
+ * const session = await wire.session?.get()
385
520
  * return {
386
521
  * userCache: new UserCache(session?.userId)
387
522
  * }
388
523
  * })
389
524
  * \`\`\`
390
525
  */
391
- export const pikkuSessionServices = (
526
+ export const pikkuWireServices = (
392
527
  func: (
393
528
  services: SingletonServices,
394
- interaction: any,
395
- session: Session | undefined
396
- ) => Promise<RequiredSessionServices>
397
- ) => func
529
+ wire: any
530
+ ) => Promise<RequiredWireServices>
531
+ ): CreateWireServices => func as unknown as CreateWireServices
398
532
 
399
533
  /**
400
534
  * Adds global middleware for a specific tag.
@@ -420,7 +554,7 @@ export const pikkuSessionServices = (
420
554
  * \`\`\`
421
555
  */
422
556
  export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
423
- addMiddlewareCore(tag, middleware as any)
557
+ addMiddlewareCore(tag, middleware as any, ${packageNameValue})
424
558
  }
425
559
 
426
560
  /**
@@ -447,7 +581,7 @@ export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
447
581
  * \`\`\`
448
582
  */
449
583
  export const addPermission = <In = unknown>(tag: string, permissions: CorePermissionGroup<PikkuPermission<In>> | PikkuPermission<In>[]) => {
450
- addPermissionCore(tag, permissions as any)
584
+ addPermissionCore(tag, permissions as any, ${packageNameValue})
451
585
  }
452
586
  `
453
587
  }
@@ -3,36 +3,37 @@
3
3
  */
4
4
  export const serializePikkuTypesHub = (
5
5
  functionTypesImportPath: string,
6
- httpTypesImportPath: string,
7
- channelTypesImportPath: string,
8
- schedulerTypesImportPath: string,
9
- queueTypesImportPath: string,
10
- mcpTypesImportPath: string,
11
- cliTypesImportPath: string
6
+ httpTypesImportPath: string | null,
7
+ channelTypesImportPath: string | null,
8
+ schedulerTypesImportPath: string | null,
9
+ queueTypesImportPath: string | null,
10
+ mcpTypesImportPath: string | null,
11
+ cliTypesImportPath: string | null,
12
+ forgeTypesImportPath: string | null
12
13
  ) => {
14
+ const exports = [
15
+ {
16
+ comment: 'Core function, middleware, and permission types',
17
+ path: functionTypesImportPath,
18
+ },
19
+ { comment: 'HTTP wiring types', path: httpTypesImportPath },
20
+ { comment: 'Channel wiring types', path: channelTypesImportPath },
21
+ { comment: 'Scheduler wiring types', path: schedulerTypesImportPath },
22
+ { comment: 'Queue wiring types', path: queueTypesImportPath },
23
+ { comment: 'MCP wiring types', path: mcpTypesImportPath },
24
+ { comment: 'CLI wiring types', path: cliTypesImportPath },
25
+ { comment: 'Forge wiring types', path: forgeTypesImportPath },
26
+ ]
27
+
28
+ const exportStatements = exports
29
+ .filter((e) => e.path)
30
+ .map((e) => `// ${e.comment}\nexport * from '${e.path}'`)
31
+ .join('\n\n')
32
+
13
33
  return `/**
14
34
  * Main type export hub - re-exports all wiring-specific types
15
35
  */
16
36
 
17
- // Core function, middleware, and permission types
18
- export * from '${functionTypesImportPath}'
19
-
20
- // HTTP wiring types
21
- export * from '${httpTypesImportPath}'
22
-
23
- // Channel wiring types
24
- export * from '${channelTypesImportPath}'
25
-
26
- // Scheduler wiring types
27
- export * from '${schedulerTypesImportPath}'
28
-
29
- // Queue wiring types
30
- export * from '${queueTypesImportPath}'
31
-
32
- // MCP wiring types
33
- export * from '${mcpTypesImportPath}'
34
-
35
- // CLI wiring types
36
- export * from '${cliTypesImportPath}'
37
+ ${exportStatements}
37
38
  `
38
39
  }
@@ -68,7 +68,7 @@ export interface OpenAPISpecInfo {
68
68
  }
69
69
 
70
70
  const getErrorResponseForConstructorName = (constructorName: string) => {
71
- const errors = Array.from(pikkuState('misc', 'errors').entries())
71
+ const errors = Array.from(pikkuState(null, 'misc', 'errors').entries())
72
72
  const foundError = errors.find(([e]) => e.name === constructorName)
73
73
  if (foundError) {
74
74
  return foundError[1]
@@ -120,8 +120,17 @@ export async function generateOpenAPISpec(
120
120
 
121
121
  for (const routeMeta of Object.values(httpMeta)) {
122
122
  for (const meta of Object.values(routeMeta)) {
123
- const { route, method, inputTypes, pikkuFuncName, params, query, docs } =
124
- meta
123
+ const {
124
+ route,
125
+ method,
126
+ inputTypes,
127
+ pikkuFuncName,
128
+ params,
129
+ query,
130
+ errors,
131
+ description,
132
+ tags,
133
+ } = meta
125
134
  const functionMeta = functionsMeta[pikkuFuncName]
126
135
  if (!functionMeta) {
127
136
  logger.error(
@@ -139,7 +148,7 @@ export async function generateOpenAPISpec(
139
148
  }
140
149
 
141
150
  const responses = {}
142
- docs?.errors?.forEach((error) => {
151
+ errors?.forEach((error) => {
143
152
  const errorResponse = getErrorResponseForConstructorName(error)
144
153
  if (errorResponse) {
145
154
  responses[errorResponse.status] = {
@@ -150,9 +159,9 @@ export async function generateOpenAPISpec(
150
159
 
151
160
  const operation: any = {
152
161
  description:
153
- docs?.description ||
162
+ description ||
154
163
  `This endpoint handles the ${method.toUpperCase()} request for the route ${route}.`,
155
- tags: docs?.tags || [route.split('/')[1] || 'default'],
164
+ tags: tags || [route.split('/')[1] || 'default'],
156
165
  parameters: [],
157
166
  responses: {
158
167
  ...responses,