@pikku/cli 0.11.2 → 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 (301) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +63 -6
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +4 -4
  3. package/.pikku/channel/pikku-channels-meta.gen.ts +4 -2
  4. package/.pikku/channel/pikku-channels.gen.ts +1 -1
  5. package/.pikku/cli/pikku-cli-channel.ts +1 -1
  6. package/.pikku/cli/pikku-cli-client.gen.ts +1 -1
  7. package/.pikku/cli/pikku-cli-types.gen.ts +1 -1
  8. package/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
  9. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +2 -2
  10. package/.pikku/cli/pikku-cli-wirings.gen.ts +1 -1
  11. package/.pikku/cli/pikku-cli.gen.ts +1 -1
  12. package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
  13. package/.pikku/function/pikku-function-types.gen.ts +181 -35
  14. package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
  15. package/.pikku/function/pikku-functions-meta.gen.json +88 -420
  16. package/.pikku/function/pikku-functions-meta.gen.ts +2 -2
  17. package/.pikku/http/pikku-http-types.gen.ts +19 -3
  18. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +4 -4
  19. package/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  20. package/.pikku/http/pikku-http-wirings-meta.gen.ts +4 -10
  21. package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
  22. package/.pikku/mcp/pikku-mcp-types.gen.ts +69 -17
  23. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +4 -4
  24. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
  25. package/.pikku/pikku-bootstrap.gen.ts +7 -9
  26. package/.pikku/pikku-services.gen.ts +3 -2
  27. package/.pikku/pikku-types.gen.ts +4 -1
  28. package/.pikku/pikku-websocket.gen.ts +1 -1
  29. package/.pikku/queue/pikku-queue-types.gen.ts +1 -1
  30. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +4 -4
  31. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +2 -2
  32. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
  33. package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +4 -1
  34. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +12 -7
  35. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +15 -9
  36. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +1 -1
  37. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +2 -2
  38. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
  39. package/.pikku/schemas/register.gen.ts +9 -1
  40. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  41. package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  42. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  43. package/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  44. package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  45. package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  46. package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  47. package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  48. package/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  49. package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  50. package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  51. package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  52. package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  53. package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  54. package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  55. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  56. package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  57. package/.pikku/services/config.gen.json +11 -6
  58. package/.pikku/services/getInspectorState.gen.json +2 -2
  59. package/.pikku/services/jwt.gen.json +2 -2
  60. package/.pikku/services/logger.gen.json +2 -2
  61. package/.pikku/services/queueService.gen.json +2 -2
  62. package/.pikku/services/schedulerService.gen.json +2 -2
  63. package/.pikku/services/schema.gen.json +2 -2
  64. package/.pikku/services/secrets.gen.json +13 -0
  65. package/.pikku/services/variables.gen.json +2 -2
  66. package/.pikku/services/workflowService.gen.json +6 -6
  67. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
  68. package/.pikku/workflow/pikku-workflow-types.gen.ts +297 -45
  69. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +5 -4
  70. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -6
  71. package/CHANGELOG.md +23 -1
  72. package/cli.schema.json +1 -1
  73. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +47 -5
  74. package/dist/.pikku/channel/pikku-channel-types.gen.js +3 -13
  75. package/dist/.pikku/channel/pikku-channels-meta.gen.js +3 -2
  76. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  77. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  78. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  79. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  80. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  81. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  82. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  83. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +2 -2
  84. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +2 -1
  85. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  86. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  87. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  88. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  89. package/dist/.pikku/forge/pikku-forge-types.gen.d.ts +72 -0
  90. package/dist/.pikku/forge/pikku-forge-types.gen.js +55 -0
  91. package/dist/.pikku/function/pikku-function-types.gen.d.ts +123 -31
  92. package/dist/.pikku/function/pikku-function-types.gen.js +37 -51
  93. package/dist/.pikku/function/pikku-functions-meta.gen.js +2 -2
  94. package/dist/.pikku/function/pikku-functions-meta.gen.json +88 -420
  95. package/dist/.pikku/http/pikku-http-types.gen.d.ts +18 -3
  96. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  97. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +3 -10
  98. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  99. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  100. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  101. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +54 -14
  102. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
  103. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +4 -4
  104. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  105. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  106. package/dist/.pikku/pikku-bootstrap.gen.d.ts +7 -9
  107. package/dist/.pikku/pikku-bootstrap.gen.js +7 -9
  108. package/dist/.pikku/pikku-services.gen.d.ts +3 -2
  109. package/dist/.pikku/pikku-services.gen.js +1 -0
  110. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  111. package/dist/.pikku/pikku-types.gen.js +3 -1
  112. package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
  113. package/dist/.pikku/pikku-websocket.gen.js +1 -1
  114. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  115. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  116. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +2 -2
  117. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  118. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  119. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +4 -1
  120. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +4 -1
  121. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  122. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  123. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +2 -2
  124. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  125. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  126. package/dist/.pikku/schemas/register.gen.js +5 -1
  127. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  128. package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  129. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  130. package/dist/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  131. package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  132. package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  133. package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  134. package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  135. package/dist/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  136. package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  137. package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  138. package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  139. package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  140. package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  141. package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  142. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  143. package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  144. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +207 -37
  145. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +104 -28
  146. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -3
  147. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +2 -6
  148. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +2 -6
  149. package/dist/src/functions/commands/all.js +117 -79
  150. package/dist/src/functions/commands/bootstrap.js +2 -9
  151. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +0 -1
  152. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +49 -35
  153. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +49 -35
  154. package/dist/src/functions/wirings/channels/pikku-channels.js +1 -1
  155. package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
  156. package/dist/src/functions/wirings/channels/serialize-channel-types.js +62 -5
  157. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
  158. package/dist/src/functions/wirings/cli/pikku-command-cli.js +10 -2
  159. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.d.ts +1 -0
  160. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.js +90 -0
  161. package/dist/src/functions/wirings/forge/pikku-command-forge-types.d.ts +1 -0
  162. package/dist/src/functions/wirings/forge/pikku-command-forge-types.js +26 -0
  163. package/dist/src/functions/wirings/forge/serialize-forge-types.d.ts +4 -0
  164. package/dist/src/functions/wirings/forge/serialize-forge-types.js +90 -0
  165. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +1 -1
  166. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
  167. package/dist/src/functions/wirings/functions/pikku-command-functions.js +33 -18
  168. package/dist/src/functions/wirings/functions/pikku-command-services.js +1 -1
  169. package/dist/src/functions/wirings/functions/pikku-function-types.js +2 -2
  170. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  171. package/dist/src/functions/wirings/functions/schemas.js +5 -4
  172. package/dist/src/functions/wirings/functions/serialize-function-imports.d.ts +3 -1
  173. package/dist/src/functions/wirings/functions/serialize-function-imports.js +7 -3
  174. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  175. package/dist/src/functions/wirings/functions/serialize-function-types.js +181 -34
  176. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
  177. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +19 -21
  178. package/dist/src/functions/wirings/http/openapi-spec-generator.js +1 -1
  179. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +18 -2
  180. package/dist/src/functions/wirings/http/pikku-command-openapi.js +2 -2
  181. package/dist/src/functions/wirings/http/pikku-http-routes.js +1 -1
  182. package/dist/src/functions/wirings/http/serialize-http-types.js +18 -2
  183. package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
  184. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +15 -6
  185. package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
  186. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +68 -16
  187. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +5 -2
  188. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -0
  189. package/dist/src/functions/wirings/package/pikku-command-package.js +58 -0
  190. package/dist/src/functions/wirings/package/serialize-package.d.ts +5 -0
  191. package/dist/src/functions/wirings/package/serialize-package.js +32 -0
  192. package/dist/src/functions/wirings/queue/pikku-command-queue.js +10 -2
  193. package/dist/src/functions/wirings/queue/pikku-queue.js +1 -9
  194. package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
  195. package/dist/src/functions/wirings/queue/serialize-queue-meta.js +1 -1
  196. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +4 -4
  197. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +1 -1
  198. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +3 -0
  199. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +1 -1
  200. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -1
  201. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +54 -8
  202. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +10 -1
  203. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +1 -1
  204. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +56 -18
  205. package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +3 -0
  206. package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +30 -32
  207. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +1 -3
  208. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -18
  209. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.d.ts +7 -0
  210. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.js +53 -0
  211. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +3 -1
  212. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +299 -45
  213. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
  214. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +14 -27
  215. package/dist/src/services.js +4 -1
  216. package/dist/src/utils/command-summary.d.ts +2 -0
  217. package/dist/src/utils/command-summary.js +2 -0
  218. package/dist/src/utils/custom-types-generator.js +13 -15
  219. package/dist/src/utils/generate-bootstrap-file.js +1 -1
  220. package/dist/src/utils/pikku-cli-config.js +37 -9
  221. package/dist/src/utils/schema-generator.d.ts +4 -3
  222. package/dist/src/utils/schema-generator.js +135 -15
  223. package/dist/src/utils/strip-verbose-meta.d.ts +43 -0
  224. package/dist/src/utils/strip-verbose-meta.js +210 -0
  225. package/dist/tsconfig.tsbuildinfo +1 -1
  226. package/package.json +7 -4
  227. package/src/functions/commands/all.ts +144 -97
  228. package/src/functions/commands/bootstrap.ts +2 -10
  229. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +0 -1
  230. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +49 -35
  231. package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +49 -35
  232. package/src/functions/wirings/channels/pikku-channels.ts +1 -1
  233. package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
  234. package/src/functions/wirings/channels/serialize-channel-types.ts +62 -5
  235. package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
  236. package/src/functions/wirings/cli/pikku-command-cli.ts +21 -2
  237. package/src/functions/wirings/forge/pikku-command-forge-nodes.ts +135 -0
  238. package/src/functions/wirings/forge/pikku-command-forge-types.ts +38 -0
  239. package/src/functions/wirings/forge/serialize-forge-types.ts +94 -0
  240. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +3 -2
  241. package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
  242. package/src/functions/wirings/functions/pikku-command-functions.ts +47 -37
  243. package/src/functions/wirings/functions/pikku-command-services.ts +1 -1
  244. package/src/functions/wirings/functions/pikku-function-types.ts +3 -1
  245. package/src/functions/wirings/functions/schemas.ts +14 -4
  246. package/src/functions/wirings/functions/serialize-function-imports.ts +12 -3
  247. package/src/functions/wirings/functions/serialize-function-types.ts +182 -34
  248. package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
  249. package/src/functions/wirings/http/openapi-spec-generator.ts +1 -1
  250. package/src/functions/wirings/http/pikku-command-http-routes.ts +46 -2
  251. package/src/functions/wirings/http/pikku-command-openapi.ts +3 -2
  252. package/src/functions/wirings/http/pikku-http-routes.ts +1 -1
  253. package/src/functions/wirings/http/serialize-http-types.ts +18 -2
  254. package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
  255. package/src/functions/wirings/mcp/pikku-command-mcp.ts +32 -10
  256. package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
  257. package/src/functions/wirings/mcp/serialize-mcp-types.ts +68 -16
  258. package/src/functions/wirings/middleware/pikku-command-middleware.ts +6 -2
  259. package/src/functions/wirings/package/pikku-command-package.ts +81 -0
  260. package/src/functions/wirings/package/serialize-package.ts +69 -0
  261. package/src/functions/wirings/queue/pikku-command-queue.ts +22 -2
  262. package/src/functions/wirings/queue/pikku-queue.ts +1 -10
  263. package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
  264. package/src/functions/wirings/queue/serialize-queue-meta.ts +1 -1
  265. package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
  266. package/src/functions/wirings/rpc/pikku-command-rpc.ts +1 -1
  267. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +3 -0
  268. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +1 -1
  269. package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
  270. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +22 -1
  271. package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +1 -1
  272. package/src/functions/wirings/workflow/pikku-command-workflow.ts +104 -37
  273. package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
  274. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +66 -26
  275. package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
  276. package/src/functions/wirings/workflow/serialize-workflow-types.ts +299 -45
  277. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +14 -27
  278. package/src/services.ts +8 -1
  279. package/src/utils/command-summary.ts +4 -0
  280. package/src/utils/custom-types-generator.ts +15 -15
  281. package/src/utils/generate-bootstrap-file.ts +1 -1
  282. package/src/utils/pikku-cli-config.ts +51 -18
  283. package/src/utils/schema-generator.ts +185 -22
  284. package/src/utils/strip-verbose-meta.ts +254 -0
  285. package/types/config.d.ts +37 -3
  286. package/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
  287. package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -6
  288. package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
  289. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -6
  290. package/dist/.pikku/function/pikku-functions-meta.min.gen.json +0 -212
  291. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +0 -1
  292. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +0 -12
  293. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +0 -1
  294. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +0 -13
  295. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.d.ts +0 -8
  296. package/dist/src/functions/wirings/workflow/serialize-workflow-wirings.js +0 -30
  297. package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
  298. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -29
  299. package/src/functions/wirings/workflow/serialize-workflow-wirings.ts +0 -47
  300. /package/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
  301. /package/dist/.pikku/{workflow/pikku-workflow-wirings-meta.gen.json → channel/pikku-channels-meta.gen.json} +0 -0
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
  /**
5
5
 
@@ -9,6 +9,12 @@
9
9
  import { CoreChannel, wireChannel as wireChannelCore } from '@pikku/core/channel'
10
10
  import { AssertHTTPWiringParams } from '@pikku/core/http'
11
11
  import type { PikkuFunctionConfig, PikkuFunctionSessionless, PikkuPermission, PikkuMiddleware } from '../function/pikku-function-types.gen.js'
12
+ import type { ZodLike, CorePermissionGroup } from '@pikku/core'
13
+
14
+ /**
15
+ * Helper type to infer the output type from a Zod schema
16
+ */
17
+ type InferZodOutput<T> = T extends ZodLike<infer U> ? U : never
12
18
 
13
19
  /**
14
20
  * Type definition for WebSocket channels with typed data exchange.
@@ -59,21 +65,72 @@ export const pikkuChannelDisconnectionFunc = (
59
65
  return typeof func === 'function' ? { func } : func
60
66
  }
61
67
 
68
+ /**
69
+ * Configuration object for channel functions with Zod schema validation.
70
+ */
71
+ type PikkuChannelFuncConfigWithSchema<
72
+ InputSchema extends ZodLike,
73
+ OutputSchema extends ZodLike | undefined = undefined
74
+ > = {
75
+ name?: string
76
+ tags?: string[]
77
+ expose?: boolean
78
+ internal?: boolean
79
+ func: PikkuFunctionSessionless<
80
+ InferZodOutput<InputSchema>,
81
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
82
+ 'channel' | 'session' | 'rpc'
83
+ >
84
+ auth?: boolean
85
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
86
+ middleware?: PikkuMiddleware[]
87
+ input: InputSchema
88
+ output?: OutputSchema
89
+ }
90
+
62
91
  /**
63
92
  * Creates a function that handles WebSocket channel messages.
64
93
  * Called when a message is received on a channel.
65
- * This is the same as pikkuSessionlessFunc but with ChannelData = unknown by default.
66
94
  *
67
- * @template In - Input type for channel messages
68
- * @template Out - Output type for channel responses
95
+ * Supports two patterns:
96
+ * 1. Generic types: `pikkuChannelFunc<Input, Output>({ func: ... })`
97
+ * 2. Zod schemas: `pikkuChannelFunc({ input: z.object(...), func: ... })`
98
+ *
99
+ * @template In - Input type for channel messages (inferred from schema if provided)
100
+ * @template Out - Output type for channel responses (inferred from schema if provided)
69
101
  * @param func - Function definition, either direct function or configuration object
70
102
  * @returns The normalized configuration object
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * // Pattern 1: Using generic types
107
+ * const handleMessage = pikkuChannelFunc<{text: string}, {received: boolean}>({
108
+ * func: async (_services, { text }) => ({ received: true })
109
+ * })
110
+ *
111
+ * // Pattern 2: Using Zod schemas
112
+ * const messageInput = z.object({ text: z.string() })
113
+ * const messageOutput = z.object({ received: z.boolean() })
114
+ *
115
+ * const handleMessage = pikkuChannelFunc({
116
+ * input: messageInput,
117
+ * output: messageOutput,
118
+ * func: async (_services, { text }) => ({ received: true })
119
+ * })
120
+ * ```
71
121
  */
72
- export const pikkuChannelFunc = <In, Out = unknown>(
122
+ export function pikkuChannelFunc<
123
+ InputSchema extends ZodLike,
124
+ OutputSchema extends ZodLike | undefined = undefined
125
+ >(
126
+ config: PikkuChannelFuncConfigWithSchema<InputSchema, OutputSchema>
127
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'channel' | 'session' | 'rpc'>
128
+ export function pikkuChannelFunc<In, Out = unknown>(
73
129
  func:
74
130
  | PikkuFunctionSessionless<In, Out, 'channel' | 'session' | 'rpc'>
75
131
  | PikkuFunctionConfig<In, Out, 'channel' | 'session' | 'rpc'>
76
- ) => {
132
+ ): PikkuFunctionConfig<In, Out, 'channel' | 'session' | 'rpc'>
133
+ export function pikkuChannelFunc(func: any) {
77
134
  return typeof func === 'function' ? { func } : func
78
135
  }
79
136
 
@@ -1,14 +1,12 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
  /**
5
5
  * This provides the structure needed for TypeScript to be aware of channels
6
6
  */
7
-
8
7
 
9
8
 
10
- // Custom types are those that are defined directly within generics
11
- // or are broken into simpler types
9
+
12
10
  export type PikkuSchemasOutput = false | true
13
11
  export type PikkuFunctionsOutput = false | true
14
12
  export type PikkuMiddlewareOutput = false | true
@@ -23,6 +21,8 @@ export type PikkuQueueOutput = false | true
23
21
  export type PikkuChannelsOutput = false | true
24
22
  export type PikkuMCPOutput = false | true
25
23
  export type PikkuCLIOutput = false | true
24
+ export type PikkuPackageOutput = false | true
25
+ export type PikkuForgeNodesOutput = false | true
26
26
 
27
27
  interface ChannelHandler<I, O> {
28
28
  input: I;
@@ -1,5 +1,7 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
  import { pikkuState } from '@pikku/core'
5
- pikkuState('channel', 'meta', {})
5
+ import type { ChannelsMeta } from '@pikku/core/channel'
6
+ import metaData from './pikku-channels-meta.gen.json' with { type: 'json' }
7
+ pikkuState(null, 'channel', 'meta', metaData as ChannelsMeta)
@@ -1,4 +1,4 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
  /* The files with an addChannel function call */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
  /**
5
5
  * WebSocket channel backend for 'pikku' CLI commands
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
 
5
5
  import { executeCLIViaChannel } from '@pikku/core/cli/channel'
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
  /**
5
5
 
@@ -135,12 +135,13 @@
135
135
  "jwt",
136
136
  "config",
137
137
  "variables",
138
+ "secrets",
138
139
  "workflowService",
139
140
  "queueService",
140
141
  "schedulerService"
141
142
  ]
142
143
  },
143
- "filePath": "src/services.ts"
144
+ "filePath": "/home/runner/work/pikku/pikku/packages/cli/src/services.ts"
144
145
  }
145
146
  }
146
147
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
  import { pikkuState } from '@pikku/core'
5
5
  import { CLIMeta } from '@pikku/core/cli'
6
6
  import metaData from './pikku-cli-wirings-meta.gen.json' with { type: 'json' }
7
- pikkuState('cli', 'meta', metaData as CLIMeta)
7
+ pikkuState(null, 'cli', 'meta', metaData as CLIMeta)
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
  /* The files with an wireCLI function call */
5
5
  import '../../src/cli.wiring.js'
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
 
5
5
  import { executeCLI, CLIError } from '@pikku/core/cli'
@@ -0,0 +1,83 @@
1
+ /**
2
+ * This file was generated by @pikku/cli@0.11.3
3
+ */
4
+ /**
5
+ * Forge-specific type definitions for typed wireForgeNode and wireForgeCredential
6
+ */
7
+
8
+ import { wireForgeNode as wireForgeNodeCore, wireForgeCredential as wireForgeCredentialCore } from '@pikku/core/forge-node'
9
+ import type { CoreForgeNode, CoreForgeCredential } from '@pikku/core/forge-node'
10
+ import type { FlattenedRPCMap } from '../rpc/pikku-rpc-wirings-map.internal.gen.js'
11
+
12
+ /**
13
+ * Valid category values for forge nodes.
14
+ * No categories configured - wireForgeNode cannot be used until forge.node.categories is defined in pikku.config.json.
15
+ */
16
+ export type ForgeCategory = never
17
+
18
+ /**
19
+ * Valid RPC names that can be used with forge nodes.
20
+ * These are derived from the FlattenedRPCMap which includes both local and external package RPCs.
21
+ */
22
+ export type ForgeRPCName = keyof FlattenedRPCMap
23
+
24
+ /**
25
+ * Typed forge node configuration.
26
+ * Validates that category and rpc are valid values.
27
+ */
28
+ export type TypedForgeNode = Omit<CoreForgeNode, 'category' | 'rpc'> & {
29
+ /** Grouping category (validated against forge.node.categories in config) */
30
+ category: ForgeCategory
31
+ /** RPC name to call when node executes (must be a valid RPC name) */
32
+ rpc: ForgeRPCName
33
+ }
34
+
35
+ /**
36
+ * Registers a Forge node with validated category and RPC.
37
+ *
38
+ * @param config - Forge node configuration with typed category and rpc
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * wireForgeNode({
43
+ * name: 'send-email',
44
+ * displayName: 'Send Email',
45
+ * category: 'Communication', // Must be in forge.node.categories
46
+ * type: 'action',
47
+ * rpc: 'sendEmail', // Must be a valid RPC name
48
+ * description: 'Sends an email to a recipient'
49
+ * })
50
+ * ```
51
+ */
52
+ export const wireForgeNode = (config: TypedForgeNode): void => {
53
+ wireForgeNodeCore(config as CoreForgeNode)
54
+ }
55
+
56
+ /**
57
+ * Registers a Forge credential definition.
58
+ * Credentials define secrets/API keys required by the package.
59
+ *
60
+ * @template T - Zod schema type for the credential structure
61
+ * @param config - Forge credential configuration
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * import { z } from 'zod'
66
+ *
67
+ * const apiCredentials = z.object({
68
+ * apiKey: z.string().describe('API key for authentication'),
69
+ * apiSecret: z.string().describe('API secret')
70
+ * })
71
+ *
72
+ * wireForgeCredential({
73
+ * name: 'example-api',
74
+ * displayName: 'Example API Credentials',
75
+ * description: 'Credentials for the example external API',
76
+ * secretId: 'EXAMPLE_API_CREDENTIALS',
77
+ * schema: apiCredentials
78
+ * })
79
+ * ```
80
+ */
81
+ export const wireForgeCredential = <T>(config: CoreForgeCredential<T>): void => {
82
+ wireForgeCredentialCore(config)
83
+ }
@@ -1,18 +1,18 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.2
2
+ * This file was generated by @pikku/cli@0.11.3
3
3
  */
4
4
  /**
5
5
  * Core function, middleware, and permission types for all wirings
6
6
  */
7
7
 
8
- import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired } from '@pikku/core'
8
+ import { CorePikkuFunctionConfig, CorePikkuPermission, CorePikkuMiddleware, CorePermissionGroup, addMiddleware as addMiddlewareCore, addPermission as addPermissionCore, PikkuWire, PickRequired, ZodLike, CreateWireServices } from '@pikku/core'
9
9
  import { CorePikkuFunction, CorePikkuFunctionSessionless } from '@pikku/core/function'
10
10
 
11
11
  import type { UserSession } from '../../types/application-types.d.js'
12
12
  import type { SingletonServices } from '../../types/application-types.d.js'
13
13
  import type { Services } from '../../types/application-types.d.js'
14
14
  import type { Config } from '../../types/application-types.d.js'
15
- import type { TypedPikkuRPC } from '../rpc/pikku-rpc-wirings-map.internal.gen.d.js'
15
+ import type { TypedPikkuRPC, FlattenedRPCMap } from '../rpc/pikku-rpc-wirings-map.internal.gen.d.js'
16
16
  import type { RequiredSingletonServices, RequiredWireServices } from '../pikku-services.gen.js'
17
17
 
18
18
 
@@ -207,6 +207,11 @@ export type PikkuFunction<
207
207
  PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
208
208
  >
209
209
 
210
+ /**
211
+ * Helper type to infer the output type from a Zod schema
212
+ */
213
+ export type InferZodOutput<T> = T extends ZodLike<infer U> ? U : never
214
+
210
215
  /**
211
216
  * Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
212
217
  * This type wraps CorePikkuFunctionConfig with the user's custom types.
@@ -219,64 +224,166 @@ export type PikkuFunctionConfig<
219
224
  In = unknown,
220
225
  Out = unknown,
221
226
  RequiredWires extends keyof PikkuWire = never,
222
- PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>
223
- > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware>
227
+ PikkuFunc extends PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
228
+ InputSchema extends ZodLike | undefined = undefined,
229
+ OutputSchema extends ZodLike | undefined = undefined
230
+ > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema>
231
+
232
+ /**
233
+ * Configuration object for Pikku functions with Zod schema validation.
234
+ * Use this when you want to define input/output schemas using Zod.
235
+ * Types are automatically inferred from the schemas.
236
+ */
237
+ export type PikkuFunctionConfigWithSchema<
238
+ InputSchema extends ZodLike,
239
+ OutputSchema extends ZodLike | undefined = undefined,
240
+ RequiredWires extends keyof PikkuWire = never
241
+ > = {
242
+ name?: string
243
+ tags?: string[]
244
+ expose?: boolean
245
+ internal?: boolean
246
+ func: PikkuFunction<
247
+ InferZodOutput<InputSchema>,
248
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
249
+ RequiredWires
250
+ > | PikkuFunctionSessionless<
251
+ InferZodOutput<InputSchema>,
252
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
253
+ RequiredWires
254
+ >
255
+ auth?: boolean
256
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
257
+ middleware?: PikkuMiddleware[]
258
+ input: InputSchema
259
+ output?: OutputSchema
260
+ }
224
261
 
225
262
  /**
226
263
  * Creates a Pikku function that can be either session-aware or sessionless.
227
264
  * This is the main function wrapper for creating API endpoints.
228
265
  *
229
- * @template In - Input type for the function
230
- * @template Out - Output type for the function
266
+ * Supports two patterns:
267
+ * 1. Generic types: `pikkuFunc<Input, Output>({ func: ... })`
268
+ * 2. Zod schemas: `pikkuFunc({ input: z.object(...), output: z.object(...), func: ... })`
269
+ *
270
+ * @template In - Input type for the function (inferred from schema if provided)
271
+ * @template Out - Output type for the function (inferred from schema if provided)
231
272
  * @param func - Function definition, either direct function or configuration object
232
273
  * @returns The normalized configuration object
233
274
  *
234
275
  * @example
235
- * \`\`\`typescript
236
- * const createUser = pikkuFunc<{name: string, email: string}, {id: number, message: string}>({
237
- * func: async ({db, logger}, input, wire) => {
238
- * const session = await wire.session.get()
239
- * logger.info('Creating user', input.name)
276
+ * ```typescript
277
+ * // Pattern 1: Using generic types
278
+ * const createUser = pikkuFunc<{name: string, email: string}, {id: number}>({
279
+ * func: async ({db}, input) => {
240
280
  * const user = await db.users.create(input)
241
- * return {id: user.id, message: \`User \${input.name} created successfully\`}
242
- * },
243
- * auth: true
281
+ * return { id: user.id }
282
+ * }
244
283
  * })
245
- * \`\`\`
284
+ *
285
+ * // Pattern 2: Using Zod schemas (types inferred automatically)
286
+ * const createUserInput = z.object({ name: z.string(), email: z.string() })
287
+ * const createUserOutput = z.object({ id: z.number() })
288
+ *
289
+ * const createUser = pikkuFunc({
290
+ * input: createUserInput,
291
+ * output: createUserOutput,
292
+ * func: async ({db}, input) => {
293
+ * // input is typed as { name: string, email: string }
294
+ * const user = await db.users.create(input)
295
+ * return { id: user.id } // must match output schema
296
+ * }
297
+ * })
298
+ * ```
246
299
  */
247
- export const pikkuFunc = <In, Out = unknown>(
300
+ export function pikkuFunc<
301
+ InputSchema extends ZodLike,
302
+ OutputSchema extends ZodLike | undefined = undefined
303
+ >(
304
+ config: PikkuFunctionConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
305
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
306
+ export function pikkuFunc<In, Out = unknown>(
248
307
  func:
249
308
  | PikkuFunction<In, Out, 'session' | 'rpc'>
250
309
  | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
251
- ) => {
310
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
311
+ export function pikkuFunc(func: any) {
252
312
  return typeof func === 'function' ? { func } : func
253
313
  }
254
314
 
315
+ /**
316
+ * Configuration object for sessionless Pikku functions with Zod schema validation.
317
+ */
318
+ export type PikkuFunctionSessionlessConfigWithSchema<
319
+ InputSchema extends ZodLike,
320
+ OutputSchema extends ZodLike | undefined = undefined,
321
+ RequiredWires extends keyof PikkuWire = never
322
+ > = {
323
+ name?: string
324
+ description?: string
325
+ tags?: string[]
326
+ expose?: boolean
327
+ internal?: boolean
328
+ func: PikkuFunctionSessionless<
329
+ InferZodOutput<InputSchema>,
330
+ OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown,
331
+ RequiredWires
332
+ >
333
+ auth?: boolean
334
+ permissions?: CorePermissionGroup<PikkuPermission<InferZodOutput<InputSchema>>>
335
+ middleware?: PikkuMiddleware[]
336
+ input: InputSchema
337
+ output?: OutputSchema
338
+ }
339
+
255
340
  /**
256
341
  * Creates a sessionless Pikku function that doesn't require user authentication.
257
342
  * Use this for public endpoints, webhooks, or background tasks.
258
343
  *
259
- * @template In - Input type for the function
260
- * @template Out - Output type for the function
344
+ * Supports two patterns:
345
+ * 1. Generic types: `pikkuSessionlessFunc<Input, Output>({ func: ... })`
346
+ * 2. Zod schemas: `pikkuSessionlessFunc({ input: z.object(...), func: ... })`
347
+ *
348
+ * @template In - Input type for the function (inferred from schema if provided)
349
+ * @template Out - Output type for the function (inferred from schema if provided)
261
350
  * @param func - Function definition, either direct function or configuration object
262
351
  * @returns The normalized configuration object
263
352
  *
264
353
  * @example
265
- * \`\`\`typescript
266
- * const healthCheck = pikkuSessionlessFunc<void, {status: string, timestamp: string}>({
267
- * func: async ({logger}, input) => {
268
- * logger.info('Health check requested')
269
- * return {status: 'healthy', timestamp: new Date().toISOString()}
270
- * },
271
- * name: 'healthCheck'
354
+ * ```typescript
355
+ * // Pattern 1: Using generic types
356
+ * const healthCheck = pikkuSessionlessFunc<void, {status: string}>({
357
+ * func: async ({logger}) => {
358
+ * return { status: 'healthy' }
359
+ * }
360
+ * })
361
+ *
362
+ * // Pattern 2: Using Zod schemas
363
+ * const greetInput = z.object({ name: z.string() })
364
+ * const greetOutput = z.object({ message: z.string() })
365
+ *
366
+ * const greet = pikkuSessionlessFunc({
367
+ * input: greetInput,
368
+ * output: greetOutput,
369
+ * func: async (_services, { name }) => {
370
+ * return { message: `Hello, ${name}!` }
371
+ * }
272
372
  * })
273
- * \`\`\`
373
+ * ```
274
374
  */
275
- export const pikkuSessionlessFunc = <In, Out = unknown>(
375
+ export function pikkuSessionlessFunc<
376
+ InputSchema extends ZodLike,
377
+ OutputSchema extends ZodLike | undefined = undefined
378
+ >(
379
+ config: PikkuFunctionSessionlessConfigWithSchema<InputSchema, OutputSchema, 'session' | 'rpc'>
380
+ ): PikkuFunctionConfig<InferZodOutput<InputSchema>, OutputSchema extends ZodLike ? InferZodOutput<OutputSchema> : unknown, 'session' | 'rpc'>
381
+ export function pikkuSessionlessFunc<In, Out = unknown>(
276
382
  func:
277
383
  | PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
278
384
  | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
279
- ) => {
385
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
386
+ export function pikkuSessionlessFunc(func: any) {
280
387
  return typeof func === 'function' ? { func } : func
281
388
  }
282
389
 
@@ -288,13 +395,13 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
288
395
  * @returns The normalized configuration object
289
396
  *
290
397
  * @example
291
- * \`\`\`typescript
398
+ * ```typescript
292
399
  * const cleanupTempFiles = pikkuVoidFunc(async ({fileSystem, logger}) => {
293
400
  * logger.info('Starting cleanup of temporary files')
294
401
  * await fileSystem.deleteDirectory('/tmp/uploads')
295
402
  * logger.info('Cleanup completed')
296
403
  * })
297
- * \`\`\`
404
+ * ```
298
405
  */
299
406
  export const pikkuVoidFunc = (
300
407
  func:
@@ -304,6 +411,45 @@ export const pikkuVoidFunc = (
304
411
  return typeof func === 'function' ? { func } : func
305
412
  }
306
413
 
414
+ /**
415
+ * Creates a wrapper function for external package functions that are exposed via RPC.
416
+ * This allows you to wire external functions to any wiring type (HTTP, queue, etc.)
417
+ * without type compatibility issues.
418
+ *
419
+ * @template Name - The RPC method name (must be a key in FlattenedRPCMap)
420
+ * @param rpcName - The name of the RPC method to invoke
421
+ * @returns A Pikku function that proxies calls to the external RPC method
422
+ *
423
+ * @example
424
+ * ```typescript
425
+ * // Wire an external function via HTTP
426
+ * wireHTTP({
427
+ * auth: false,
428
+ * method: 'get',
429
+ * route: '/external/hello',
430
+ * func: external('ext:hello'),
431
+ * tags: ['external'],
432
+ * })
433
+ * ```
434
+ */
435
+ export const external = <Name extends keyof FlattenedRPCMap>(
436
+ rpcName: Name
437
+ ): PikkuFunctionConfig<
438
+ FlattenedRPCMap[Name]['input'],
439
+ FlattenedRPCMap[Name]['output'],
440
+ 'session' | 'rpc'
441
+ > => {
442
+ return {
443
+ func: (async (_services: any, data: any, { rpc }: any) => {
444
+ return rpc.invoke(rpcName, data)
445
+ }) as any
446
+ } as PikkuFunctionConfig<
447
+ FlattenedRPCMap[Name]['input'],
448
+ FlattenedRPCMap[Name]['output'],
449
+ 'session' | 'rpc'
450
+ >
451
+ }
452
+
307
453
  /**
308
454
  * Creates a Pikku config factory.
309
455
  * Use this to define your application's configuration factory.
@@ -369,7 +515,7 @@ export const pikkuWireServices = (
369
515
  services: SingletonServices,
370
516
  wire: any
371
517
  ) => Promise<RequiredWireServices>
372
- ) => func
518
+ ): CreateWireServices => func as unknown as CreateWireServices
373
519
 
374
520
  /**
375
521
  * Adds global middleware for a specific tag.
@@ -395,7 +541,7 @@ export const pikkuWireServices = (
395
541
  * ```
396
542
  */
397
543
  export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
398
- addMiddlewareCore(tag, middleware as any)
544
+ addMiddlewareCore(tag, middleware as any, null)
399
545
  }
400
546
 
401
547
  /**
@@ -422,5 +568,5 @@ export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
422
568
  * ```
423
569
  */
424
570
  export const addPermission = <In = unknown>(tag: string, permissions: CorePermissionGroup<PikkuPermission<In>> | PikkuPermission<In>[]) => {
425
- addPermissionCore(tag, permissions as any)
571
+ addPermissionCore(tag, permissions as any, null)
426
572
  }