@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
@@ -1,5 +1,7 @@
1
1
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
2
- export const serializeFunctionImports = (outputPath, functionsMap, functionsMeta, packageMappings = {}) => {
2
+ export const serializeFunctionImports = (outputPath, functionsMap, functionsMeta, packageMappings = {},
3
+ /** Package name for external packages (e.g., '@pikku/templates-function-external') */
4
+ externalPackageName) => {
3
5
  const serializedImports = [
4
6
  `/* Import and register functions used by RPCs */`,
5
7
  `import { addFunction } from '@pikku/core'`,
@@ -7,18 +9,20 @@ export const serializeFunctionImports = (outputPath, functionsMap, functionsMeta
7
9
  const serializedRegistrations = [];
8
10
  // Sort by function name for consistent output
9
11
  const sortedEntries = Array.from(functionsMap.entries()).sort((a, b) => a[0].localeCompare(b[0]));
12
+ // Third argument to addFunction is the package name (null for main package)
13
+ const packageArg = externalPackageName ? `, '${externalPackageName}'` : '';
10
14
  for (const [name, { path, exportedName }] of sortedEntries) {
11
15
  const filePath = getFileImportRelativePath(outputPath, path, packageMappings);
12
16
  // pikkuFunc/pikkuSessionlessFunc/pikkuVoidFunc always return config objects
13
17
  // For directly exported functions, we can just import and register them
14
18
  if (name === exportedName) {
15
19
  serializedImports.push(`import { ${exportedName} } from '${filePath}'`);
16
- serializedRegistrations.push(`addFunction('${name}', ${exportedName})`);
20
+ serializedRegistrations.push(`addFunction('${name}', ${exportedName}${packageArg})`);
17
21
  }
18
22
  // For renamed functions, we need to import and alias them
19
23
  else {
20
24
  serializedImports.push(`import { ${exportedName} as ${name} } from '${filePath}'`);
21
- serializedRegistrations.push(`addFunction('${name}', ${name})`);
25
+ serializedRegistrations.push(`addFunction('${name}', ${name}${packageArg})`);
22
26
  }
23
27
  }
24
28
  // Add a blank line between imports and registrations
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Generates core function, middleware, and permission type definitions
3
3
  */
4
- export declare const serializeFunctionTypes: (userSessionTypeImport: string, userSessionTypeName: string, singletonServicesTypeImport: string, singletonServicesTypeName: string, sessionServicesTypeImport: string, sessionServicesTypeName: string, rpcMapTypeImport: string, requiredServicesTypeImport: string, configTypeImport: string) => string;
4
+ export declare const serializeFunctionTypes: (userSessionTypeImport: string, userSessionTypeName: string, singletonServicesTypeImport: string, singletonServicesTypeName: string, wireServicesTypeImport: string, wireServicesTypeName: string, rpcMapTypeImport: string, requiredServicesTypeImport: string, configTypeImport: string, packageName?: string) => string;
@@ -1,25 +1,24 @@
1
1
  /**
2
2
  * Generates core function, middleware, and permission type definitions
3
3
  */
4
- export const serializeFunctionTypes = (userSessionTypeImport, userSessionTypeName, singletonServicesTypeImport, singletonServicesTypeName, sessionServicesTypeImport, sessionServicesTypeName, rpcMapTypeImport, requiredServicesTypeImport, configTypeImport) => {
4
+ export const serializeFunctionTypes = (userSessionTypeImport, userSessionTypeName, singletonServicesTypeImport, singletonServicesTypeName, wireServicesTypeImport, wireServicesTypeName, rpcMapTypeImport, requiredServicesTypeImport, configTypeImport, packageName) => {
5
+ const packageNameValue = packageName ? `'${packageName}'` : 'null';
5
6
  return `/**
6
7
  * Core function, middleware, and permission types for all wirings
7
8
  */
8
9
 
9
- import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore } from '@pikku/core'
10
+ import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired, ZodLike, CreateWireServices } from '@pikku/core'
10
11
  import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
11
- import { PikkuChannel } from '@pikku/core/channel'
12
- import { PikkuMCP } from '@pikku/core/mcp'
13
12
 
14
13
  ${userSessionTypeImport}
15
14
  ${singletonServicesTypeImport}
16
- ${sessionServicesTypeImport}
15
+ ${wireServicesTypeImport}
17
16
  ${configTypeImport}
18
17
  ${rpcMapTypeImport}
19
18
  ${requiredServicesTypeImport}
20
19
 
21
20
  ${singletonServicesTypeName !== 'SingletonServices' ? `type SingletonServices = ${singletonServicesTypeName}` : ''}
22
- ${sessionServicesTypeName !== 'Services' ? `type Services = ${sessionServicesTypeName}` : ''}
21
+ ${wireServicesTypeName !== 'Services' ? `type Services = ${wireServicesTypeName}` : ''}
23
22
  ${userSessionTypeName !== 'Session' ? `type Session = ${userSessionTypeName}` : ''}
24
23
  ${configTypeImport.includes('Config type not found') ? 'type Config = any' : ''}
25
24
 
@@ -30,7 +29,7 @@ ${configTypeImport.includes('Config type not found') ? 'type Config = any' : ''}
30
29
  * @template In - The input type that the permission check will receive
31
30
  * @template RequiredServices - The services required for this permission check
32
31
  */
33
- export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, Session>
32
+ export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, PikkuWire<In, never, false, Session>>
34
33
 
35
34
  /**
36
35
  * Type-safe middleware definition that can access your application's services and session.
@@ -38,7 +37,7 @@ export type PikkuPermission<In = unknown, RequiredServices extends Services = Se
38
37
  *
39
38
  * @template RequiredServices - The services required for this middleware
40
39
  */
41
- export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices, Session>
40
+ export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices>
42
41
 
43
42
  /**
44
43
  * Configuration object for creating a permission with metadata
@@ -59,7 +58,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
59
58
  * @example
60
59
  * \`\`\`typescript
61
60
  * // Direct function syntax
62
- * const permission = pikkuPermission(({ logger }, data, session) => {
61
+ * const permission = pikkuPermission(async ({ logger }, data, { session }) => {
62
+ * const session = await session?.get()
63
63
  * return session?.role === 'admin'
64
64
  * })
65
65
  *
@@ -67,7 +67,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
67
67
  * const adminPermission = pikkuPermission({
68
68
  * name: 'Admin Permission',
69
69
  * description: 'Checks if user has admin role',
70
- * func: async ({ logger }, data, session) => {
70
+ * func: async ({ logger }, data, { session }) => {
71
+ * const session = await session?.get()
71
72
  * return session?.role === 'admin'
72
73
  * }
73
74
  * })
@@ -98,7 +99,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
98
99
  * @example
99
100
  * \`\`\`typescript
100
101
  * // Direct function syntax
101
- * const middleware = pikkuMiddleware(({ logger }, interactions, next) => {
102
+ * const middleware = pikkuMiddleware(({ logger }, wires, next) => {
102
103
  * logger.info('Middleware executed')
103
104
  * await next()
104
105
  * })
@@ -107,7 +108,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
107
108
  * const logMiddleware = pikkuMiddleware({
108
109
  * name: 'Request Logger',
109
110
  * description: 'Logs all incoming requests',
110
- * func: async ({ logger }, interactions, next) => {
111
+ * func: async ({ logger }, wires, next) => {
111
112
  * logger.info('Request started')
112
113
  * await next()
113
114
  * }
@@ -130,7 +131,7 @@ export const pikkuMiddleware = <RequiredServices extends SingletonServices = Sin
130
131
  * message,
131
132
  * level = 'info'
132
133
  * }) => {
133
- * return pikkuMiddleware(async ({ logger }, _interaction, next) => {
134
+ * return pikkuMiddleware(async ({ logger }, next) => {
134
135
  * logger[level](message)
135
136
  * await next()
136
137
  * })
@@ -152,8 +153,8 @@ export const pikkuMiddlewareFactory = <In = any>(
152
153
  * export const requireRole = pikkuPermissionFactory<{ role: string }>(({
153
154
  * role
154
155
  * }) => {
155
- * return pikkuPermission(async ({ logger }, data, session) => {
156
- * if (!session || session.role !== role) {
156
+ * return pikkuPermission(async ({ logger }, data, { initialSession }) => {
157
+ * if (!initialSession || initialSession.role !== role) {
157
158
  * logger.warn(\`Permission denied: required role '\${role}'\`)
158
159
  * return false
159
160
  * }
@@ -174,25 +175,19 @@ export const pikkuPermissionFactory = <In = any>(
174
175
  *
175
176
  * @template In - The input type
176
177
  * @template Out - The output type that the function returns
177
- * @template ChannelData - Channel data type (null = optional channel)
178
- * @template MCPData - MCP data type (null = optional MCP)
179
178
  * @template RequiredServices - Services required by this function
180
179
  */
181
180
  export type PikkuFunctionSessionless<
182
181
  In = unknown,
183
182
  Out = never,
184
- ChannelData = null, // null means optional channel
185
- MCPData = null, // null means optional MCP
186
- RequiredServices extends Services = Omit<Services, 'rpc' | 'channel' | 'mcp'> &
187
- { rpc: TypedPikkuRPC } & (
188
- [ChannelData] extends [null]
189
- ? { channel?: PikkuChannel<unknown, Out> } // Optional channel
190
- : { channel: PikkuChannel<ChannelData, Out> } // Required channel with any data type
191
- ) & ([MCPData] extends [null]
192
- ? { mcp?: PikkuMCP } // Optional MCP
193
- : { mcp: PikkuMCP } // Required MCP
194
- )
195
- > = CorePikkuFunctionSessionless<In, Out, ChannelData, RequiredServices, Session>
183
+ RequiredWires extends keyof PikkuWire = never,
184
+ RequiredServices extends Services = Services
185
+ > = CorePikkuFunctionSessionless<
186
+ In,
187
+ Out,
188
+ RequiredServices,
189
+ PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any>, RequiredWires>
190
+ >
196
191
 
197
192
  /**
198
193
  * A session-aware API function that requires user authentication.
@@ -200,25 +195,24 @@ export type PikkuFunctionSessionless<
200
195
  *
201
196
  * @template In - The input type
202
197
  * @template Out - The output type that the function returns
203
- * @template ChannelData - Channel data type (null = optional channel)
204
- * @template MCPData - MCP data type (null = optional MCP)
205
198
  * @template RequiredServices - Services required by this function
206
199
  */
207
200
  export type PikkuFunction<
208
201
  In = unknown,
209
202
  Out = never,
210
- ChannelData = null, // null means optional channel
211
- MCPData = null, // null means optional MCP
212
- RequiredServices extends Services = Omit<Services, 'rpc' | 'channel' | 'mcp'> &
213
- { rpc: TypedPikkuRPC } & (
214
- [ChannelData] extends [null]
215
- ? { channel?: PikkuChannel<unknown, Out> } // Optional channel
216
- : { channel: PikkuChannel<ChannelData, Out> } // Required channel with any data type
217
- ) & ([MCPData] extends [null]
218
- ? { mcp?: PikkuMCP } // Optional MCP
219
- : { mcp: PikkuMCP } // Required MCP
220
- )
221
- > = CorePikkuFunction<In, Out, ChannelData, RequiredServices, Session>
203
+ RequiredWires extends keyof PikkuWire = 'session',
204
+ RequiredServices extends Services = Services
205
+ > = CorePikkuFunction<
206
+ In,
207
+ Out,
208
+ RequiredServices,
209
+ PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
210
+ >
211
+
212
+ /**
213
+ * Helper type to infer the output type from a Zod schema
214
+ */
215
+ export type InferZodOutput<T> = T extends ZodLike<infer U> ? U : never
222
216
 
223
217
  /**
224
218
  * Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
@@ -226,72 +220,172 @@ export type PikkuFunction<
226
220
  *
227
221
  * @template In - The input type
228
222
  * @template Out - The output type
229
- * @template ChannelData - Channel data type
230
- * @template MCPData - MCP data type
231
223
  * @template PikkuFunc - The function type (can be narrowed to PikkuFunction or PikkuFunctionSessionless)
232
224
  */
233
225
  export type PikkuFunctionConfig<
234
226
  In = unknown,
235
227
  Out = unknown,
236
- ChannelData = unknown,
237
- MCPData = unknown,
238
- PikkuFunc extends PikkuFunction<In, Out, ChannelData, MCPData> | PikkuFunctionSessionless<In, Out, ChannelData, MCPData> = PikkuFunction<In, Out, ChannelData, MCPData> | PikkuFunctionSessionless<In, Out, ChannelData, MCPData>
239
- > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware>
228
+ RequiredWires extends keyof PikkuWire = never,
229
+ PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
230
+ InputSchema extends ZodLike | undefined = undefined,
231
+ OutputSchema extends ZodLike | undefined = undefined
232
+ > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema>
233
+
234
+ /**
235
+ * Configuration object for Pikku functions with Zod schema validation.
236
+ * Use this when you want to define input/output schemas using Zod.
237
+ * Types are automatically inferred from the schemas.
238
+ */
239
+ export type PikkuFunctionConfigWithSchema<
240
+ InputSchema extends ZodLike,
241
+ OutputSchema extends ZodLike | undefined = undefined,
242
+ RequiredWires extends keyof PikkuWire = never
243
+ > = {
244
+ name?: string
245
+ tags?: string[]
246
+ expose?: boolean
247
+ internal?: boolean
248
+ func: PikkuFunction<
249
+ InferZodOutput<InputSchema>,
250
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
251
+ RequiredWires
252
+ > | PikkuFunctionSessionless<
253
+ InferZodOutput<InputSchema>,
254
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
255
+ RequiredWires
256
+ >
257
+ auth?: boolean
258
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
259
+ middleware?: PikkuMiddleware[]
260
+ input: InputSchema
261
+ output?: OutputSchema
262
+ }
240
263
 
241
264
  /**
242
265
  * Creates a Pikku function that can be either session-aware or sessionless.
243
266
  * This is the main function wrapper for creating API endpoints.
244
267
  *
245
- * @template In - Input type for the function
246
- * @template Out - Output type for the function
268
+ * Supports two patterns:
269
+ * 1. Generic types: \`pikkuFunc<Input, Output>({ func: ... })\`
270
+ * 2. Zod schemas: \`pikkuFunc({ input: z.object(...), output: z.object(...), func: ... })\`
271
+ *
272
+ * @template In - Input type for the function (inferred from schema if provided)
273
+ * @template Out - Output type for the function (inferred from schema if provided)
247
274
  * @param func - Function definition, either direct function or configuration object
248
275
  * @returns The normalized configuration object
249
276
  *
250
277
  * @example
251
- * \\\`\\\`\\\`typescript
252
- * const createUser = pikkuFunc<{name: string, email: string}, {id: number, message: string}>({
253
- * func: async ({db, logger}, input) => {
254
- * logger.info('Creating user', input.name)
278
+ * \`\`\`typescript
279
+ * // Pattern 1: Using generic types
280
+ * const createUser = pikkuFunc<{name: string, email: string}, {id: number}>({
281
+ * func: async ({db}, input) => {
255
282
  * const user = await db.users.create(input)
256
- * return {id: user.id, message: \\\`User \\\${input.name} created successfully\\\`}
257
- * },
258
- * auth: true
283
+ * return { id: user.id }
284
+ * }
259
285
  * })
260
- * \\\`\\\`\\\`
286
+ *
287
+ * // Pattern 2: Using Zod schemas (types inferred automatically)
288
+ * const createUserInput = z.object({ name: z.string(), email: z.string() })
289
+ * const createUserOutput = z.object({ id: z.number() })
290
+ *
291
+ * const createUser = pikkuFunc({
292
+ * input: createUserInput,
293
+ * output: createUserOutput,
294
+ * func: async ({db}, input) => {
295
+ * // input is typed as { name: string, email: string }
296
+ * const user = await db.users.create(input)
297
+ * return { id: user.id } // must match output schema
298
+ * }
299
+ * })
300
+ * \`\`\`
261
301
  */
262
- export const pikkuFunc = <In, Out = unknown>(
302
+ export function pikkuFunc<
303
+ InputSchema extends ZodLike,
304
+ OutputSchema extends ZodLike | undefined = undefined
305
+ >(
306
+ config: PikkuFunctionConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
307
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
308
+ export function pikkuFunc<In, Out = unknown>(
263
309
  func:
264
- | PikkuFunction<In, Out>
265
- | CorePikkuFunctionConfig<PikkuFunction<In, Out>, PikkuPermission<In>, PikkuMiddleware>
266
- ) => {
310
+ | PikkuFunction<In, Out, 'session' | 'rpc'>
311
+ | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
312
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
313
+ export function pikkuFunc(func: any) {
267
314
  return typeof func === 'function' ? { func } : func
268
315
  }
269
316
 
317
+ /**
318
+ * Configuration object for sessionless Pikku functions with Zod schema validation.
319
+ */
320
+ export type PikkuFunctionSessionlessConfigWithSchema<
321
+ InputSchema extends ZodLike,
322
+ OutputSchema extends ZodLike | undefined = undefined,
323
+ RequiredWires extends keyof PikkuWire = never
324
+ > = {
325
+ name?: string
326
+ description?: string
327
+ tags?: string[]
328
+ expose?: boolean
329
+ internal?: boolean
330
+ func: PikkuFunctionSessionless<
331
+ InferZodOutput<InputSchema>,
332
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
333
+ RequiredWires
334
+ >
335
+ auth?: boolean
336
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
337
+ middleware?: PikkuMiddleware[]
338
+ input: InputSchema
339
+ output?: OutputSchema
340
+ }
341
+
270
342
  /**
271
343
  * Creates a sessionless Pikku function that doesn't require user authentication.
272
344
  * Use this for public endpoints, webhooks, or background tasks.
273
345
  *
274
- * @template In - Input type for the function
275
- * @template Out - Output type for the function
346
+ * Supports two patterns:
347
+ * 1. Generic types: \`pikkuSessionlessFunc<Input, Output>({ func: ... })\`
348
+ * 2. Zod schemas: \`pikkuSessionlessFunc({ input: z.object(...), func: ... })\`
349
+ *
350
+ * @template In - Input type for the function (inferred from schema if provided)
351
+ * @template Out - Output type for the function (inferred from schema if provided)
276
352
  * @param func - Function definition, either direct function or configuration object
277
353
  * @returns The normalized configuration object
278
354
  *
279
355
  * @example
280
- * \\\`\\\`\\\`typescript
281
- * const healthCheck = pikkuSessionlessFunc<void, {status: string, timestamp: string}>({
356
+ * \`\`\`typescript
357
+ * // Pattern 1: Using generic types
358
+ * const healthCheck = pikkuSessionlessFunc<void, {status: string}>({
282
359
  * func: async ({logger}) => {
283
- * logger.info('Health check requested')
284
- * return {status: 'healthy', timestamp: new Date().toISOString()}
285
- * },
286
- * name: 'healthCheck'
360
+ * return { status: 'healthy' }
361
+ * }
362
+ * })
363
+ *
364
+ * // Pattern 2: Using Zod schemas
365
+ * const greetInput = z.object({ name: z.string() })
366
+ * const greetOutput = z.object({ message: z.string() })
367
+ *
368
+ * const greet = pikkuSessionlessFunc({
369
+ * input: greetInput,
370
+ * output: greetOutput,
371
+ * func: async (_services, { name }) => {
372
+ * return { message: \`Hello, \${name}!\` }
373
+ * }
287
374
  * })
288
- * \\\`\\\`\\\`
375
+ * \`\`\`
289
376
  */
290
- export const pikkuSessionlessFunc = <In, Out = unknown>(
377
+ export function pikkuSessionlessFunc<
378
+ InputSchema extends ZodLike,
379
+ OutputSchema extends ZodLike | undefined = undefined
380
+ >(
381
+ config: PikkuFunctionSessionlessConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
382
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
383
+ export function pikkuSessionlessFunc<In, Out = unknown>(
291
384
  func:
292
- | PikkuFunctionSessionless<In, Out>
293
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<In, Out>, PikkuPermission<In>, PikkuMiddleware>
294
- ) => {
385
+ | PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
386
+ | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
387
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
388
+ export function pikkuSessionlessFunc(func: any) {
295
389
  return typeof func === 'function' ? { func } : func
296
390
  }
297
391
 
@@ -303,22 +397,61 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
303
397
  * @returns The normalized configuration object
304
398
  *
305
399
  * @example
306
- * \\\`\\\`\\\`typescript
400
+ * \`\`\`typescript
307
401
  * const cleanupTempFiles = pikkuVoidFunc(async ({fileSystem, logger}) => {
308
402
  * logger.info('Starting cleanup of temporary files')
309
403
  * await fileSystem.deleteDirectory('/tmp/uploads')
310
404
  * logger.info('Cleanup completed')
311
405
  * })
312
- * \\\`\\\`\\\`
406
+ * \`\`\`
313
407
  */
314
408
  export const pikkuVoidFunc = (
315
409
  func:
316
- | PikkuFunctionSessionless<void, void>
317
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<void, void>, PikkuPermission<void>>
410
+ | PikkuFunctionSessionless<void, void, 'session' | 'rpc'>
411
+ | PikkuFunctionConfig<void, void, 'session' | 'rpc'>
318
412
  ) => {
319
413
  return typeof func === 'function' ? { func } : func
320
414
  }
321
415
 
416
+ /**
417
+ * Creates a wrapper function for external package functions that are exposed via RPC.
418
+ * This allows you to wire external functions to any wiring type (HTTP, queue, etc.)
419
+ * without type compatibility issues.
420
+ *
421
+ * @template Name - The RPC method name (must be a key in FlattenedRPCMap)
422
+ * @param rpcName - The name of the RPC method to invoke
423
+ * @returns A Pikku function that proxies calls to the external RPC method
424
+ *
425
+ * @example
426
+ * \`\`\`typescript
427
+ * // Wire an external function via HTTP
428
+ * wireHTTP({
429
+ * auth: false,
430
+ * method: 'get',
431
+ * route: '/external/hello',
432
+ * func: external('ext:hello'),
433
+ * tags: ['external'],
434
+ * })
435
+ * \`\`\`
436
+ */
437
+ export const external = <Name extends keyof FlattenedRPCMap>(
438
+ rpcName: Name
439
+ ): PikkuFunctionConfig<
440
+ FlattenedRPCMap[Name]['input'],
441
+ FlattenedRPCMap[Name]['output'],
442
+ 'session' | 'rpc'
443
+ > => {
444
+ return {
445
+ func: (async (_services: any, data: any, { rpc }: any) => {
446
+ return rpc.invoke(rpcName, data)
447
+ }) as any
448
+ } as PikkuFunctionConfig<
449
+ FlattenedRPCMap[Name]['input'],
450
+ FlattenedRPCMap[Name]['output'],
451
+ 'session' | 'rpc'
452
+ >
453
+ }
454
+
322
455
  /**
323
456
  * Creates a Pikku config factory.
324
457
  * Use this to define your application's configuration factory.
@@ -363,28 +496,28 @@ export const pikkuServices = (
363
496
  ) => func
364
497
 
365
498
  /**
366
- * Creates a Pikku session services factory.
499
+ * Creates a Pikku wire services factory.
367
500
  * Use this to define services that are created per-request/session.
368
501
  *
369
- * @param func - Session services factory function
370
- * @returns The session services factory function
502
+ * @param func - Wire services factory function
503
+ * @returns The wire services factory function
371
504
  *
372
505
  * @example
373
506
  * \`\`\`typescript
374
- * export const createSessionServices = pikkuSessionServices(async (services, interaction, session) => {
507
+ * export const createWireServices = pikkuWireServices(async (services, wire) => {
508
+ * const session = await wire.session?.get()
375
509
  * return {
376
510
  * userCache: new UserCache(session?.userId)
377
511
  * }
378
512
  * })
379
513
  * \`\`\`
380
514
  */
381
- export const pikkuSessionServices = (
515
+ export const pikkuWireServices = (
382
516
  func: (
383
517
  services: SingletonServices,
384
- interaction: any,
385
- session: Session | undefined
386
- ) => Promise<RequiredSessionServices>
387
- ) => func
518
+ wire: any
519
+ ) => Promise<RequiredWireServices>
520
+ ): CreateWireServices => func as unknown as CreateWireServices
388
521
 
389
522
  /**
390
523
  * Adds global middleware for a specific tag.
@@ -410,7 +543,7 @@ export const pikkuSessionServices = (
410
543
  * \`\`\`
411
544
  */
412
545
  export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
413
- addMiddlewareCore(tag, middleware as any)
546
+ addMiddlewareCore(tag, middleware as any, ${packageNameValue})
414
547
  }
415
548
 
416
549
  /**
@@ -437,7 +570,7 @@ export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
437
570
  * \`\`\`
438
571
  */
439
572
  export const addPermission = <In = unknown>(tag: string, permissions: CorePermissionGroup<PikkuPermission<In>> | PikkuPermission<In>[]) => {
440
- addPermissionCore(tag, permissions as any)
573
+ addPermissionCore(tag, permissions as any, ${packageNameValue})
441
574
  }
442
575
  `;
443
576
  };
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Generates the main pikku-types.gen.ts file as a re-export hub
3
3
  */
4
- export declare const serializePikkuTypesHub: (functionTypesImportPath: string, httpTypesImportPath: string, channelTypesImportPath: string, schedulerTypesImportPath: string, queueTypesImportPath: string, mcpTypesImportPath: string, cliTypesImportPath: string) => string;
4
+ export declare const serializePikkuTypesHub: (functionTypesImportPath: string, httpTypesImportPath: string | null, channelTypesImportPath: string | null, schedulerTypesImportPath: string | null, queueTypesImportPath: string | null, mcpTypesImportPath: string | null, cliTypesImportPath: string | null, forgeTypesImportPath: string | null) => string;
@@ -1,30 +1,28 @@
1
1
  /**
2
2
  * Generates the main pikku-types.gen.ts file as a re-export hub
3
3
  */
4
- export const serializePikkuTypesHub = (functionTypesImportPath, httpTypesImportPath, channelTypesImportPath, schedulerTypesImportPath, queueTypesImportPath, mcpTypesImportPath, cliTypesImportPath) => {
4
+ export const serializePikkuTypesHub = (functionTypesImportPath, httpTypesImportPath, channelTypesImportPath, schedulerTypesImportPath, queueTypesImportPath, mcpTypesImportPath, cliTypesImportPath, forgeTypesImportPath) => {
5
+ const exports = [
6
+ {
7
+ comment: 'Core function, middleware, and permission types',
8
+ path: functionTypesImportPath,
9
+ },
10
+ { comment: 'HTTP wiring types', path: httpTypesImportPath },
11
+ { comment: 'Channel wiring types', path: channelTypesImportPath },
12
+ { comment: 'Scheduler wiring types', path: schedulerTypesImportPath },
13
+ { comment: 'Queue wiring types', path: queueTypesImportPath },
14
+ { comment: 'MCP wiring types', path: mcpTypesImportPath },
15
+ { comment: 'CLI wiring types', path: cliTypesImportPath },
16
+ { comment: 'Forge wiring types', path: forgeTypesImportPath },
17
+ ];
18
+ const exportStatements = exports
19
+ .filter((e) => e.path)
20
+ .map((e) => `// ${e.comment}\nexport * from '${e.path}'`)
21
+ .join('\n\n');
5
22
  return `/**
6
23
  * Main type export hub - re-exports all wiring-specific types
7
24
  */
8
25
 
9
- // Core function, middleware, and permission types
10
- export * from '${functionTypesImportPath}'
11
-
12
- // HTTP wiring types
13
- export * from '${httpTypesImportPath}'
14
-
15
- // Channel wiring types
16
- export * from '${channelTypesImportPath}'
17
-
18
- // Scheduler wiring types
19
- export * from '${schedulerTypesImportPath}'
20
-
21
- // Queue wiring types
22
- export * from '${queueTypesImportPath}'
23
-
24
- // MCP wiring types
25
- export * from '${mcpTypesImportPath}'
26
-
27
- // CLI wiring types
28
- export * from '${cliTypesImportPath}'
26
+ ${exportStatements}
29
27
  `;
30
28
  };
@@ -2,7 +2,7 @@ import { pikkuState } from '@pikku/core';
2
2
  import _convertSchema from '@openapi-contrib/json-schema-to-openapi-schema';
3
3
  const convertSchema = 'default' in _convertSchema ? _convertSchema.default : _convertSchema;
4
4
  const getErrorResponseForConstructorName = (constructorName) => {
5
- const errors = Array.from(pikkuState('misc', 'errors').entries());
5
+ const errors = Array.from(pikkuState(null, 'misc', 'errors').entries());
6
6
  const foundError = errors.find(([e]) => e.name === constructorName);
7
7
  if (foundError) {
8
8
  return foundError[1];
@@ -38,7 +38,7 @@ export async function generateOpenAPISpec(logger, functionsMeta, httpMeta, schem
38
38
  const paths = {};
39
39
  for (const routeMeta of Object.values(httpMeta)) {
40
40
  for (const meta of Object.values(routeMeta)) {
41
- const { route, method, inputTypes, pikkuFuncName, params, query, docs } = meta;
41
+ const { route, method, inputTypes, pikkuFuncName, params, query, errors, description, tags, } = meta;
42
42
  const functionMeta = functionsMeta[pikkuFuncName];
43
43
  if (!functionMeta) {
44
44
  logger.error(`• No function metadata found for '${pikkuFuncName}' in route '${route}'.`);
@@ -50,7 +50,7 @@ export async function generateOpenAPISpec(logger, functionsMeta, httpMeta, schem
50
50
  paths[path] = {};
51
51
  }
52
52
  const responses = {};
53
- docs?.errors?.forEach((error) => {
53
+ errors?.forEach((error) => {
54
54
  const errorResponse = getErrorResponseForConstructorName(error);
55
55
  if (errorResponse) {
56
56
  responses[errorResponse.status] = {
@@ -59,9 +59,9 @@ export async function generateOpenAPISpec(logger, functionsMeta, httpMeta, schem
59
59
  }
60
60
  });
61
61
  const operation = {
62
- description: docs?.description ||
62
+ description: description ||
63
63
  `This endpoint handles the ${method.toUpperCase()} request for the route ${route}.`,
64
- tags: docs?.tags || [route.split('/')[1] || 'default'],
64
+ tags: tags || [route.split('/')[1] || 'default'],
65
65
  parameters: [],
66
66
  responses: {
67
67
  ...responses,