@pikku/cli 0.11.1 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/.pikku/channel/pikku-channel-types.gen.ts +73 -17
  2. package/.pikku/channel/pikku-channels-map.gen.d.ts +11 -11
  3. package/.pikku/channel/pikku-channels-meta.gen.json +1 -0
  4. package/.pikku/channel/pikku-channels-meta.gen.ts +4 -2
  5. package/.pikku/channel/pikku-channels.gen.ts +1 -1
  6. package/.pikku/cli/pikku-cli-channel.ts +2 -2
  7. package/.pikku/cli/pikku-cli-client.gen.ts +1 -3
  8. package/.pikku/cli/pikku-cli-types.gen.ts +3 -3
  9. package/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
  10. package/.pikku/cli/pikku-cli-wirings-meta.gen.ts +4 -157
  11. package/.pikku/cli/pikku-cli-wirings.gen.ts +3 -3
  12. package/.pikku/cli/pikku-cli.gen.ts +3 -3
  13. package/.pikku/forge/pikku-forge-types.gen.ts +83 -0
  14. package/.pikku/function/pikku-function-types.gen.ts +223 -91
  15. package/.pikku/function/pikku-functions-meta-verbose.gen.json +1030 -0
  16. package/.pikku/function/pikku-functions-meta.gen.json +656 -0
  17. package/.pikku/function/pikku-functions-meta.gen.ts +4 -970
  18. package/.pikku/http/pikku-http-types.gen.ts +20 -4
  19. package/.pikku/http/pikku-http-wirings-map.gen.d.ts +11 -11
  20. package/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  21. package/.pikku/http/pikku-http-wirings-meta.gen.ts +4 -10
  22. package/.pikku/http/pikku-http-wirings.gen.ts +1 -1
  23. package/.pikku/mcp/pikku-mcp-types.gen.ts +72 -20
  24. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  25. package/.pikku/mcp/pikku-mcp-wirings-meta.gen.ts +6 -4
  26. package/.pikku/mcp/pikku-mcp-wirings.gen.ts +1 -1
  27. package/.pikku/pikku-bootstrap.gen.ts +7 -12
  28. package/.pikku/pikku-services.gen.ts +6 -7
  29. package/.pikku/pikku-types.gen.ts +4 -1
  30. package/.pikku/pikku-websocket.gen.ts +1 -1
  31. package/.pikku/queue/pikku-queue-types.gen.ts +2 -2
  32. package/.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts +11 -11
  33. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  34. package/.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts +5 -7
  35. package/.pikku/queue/pikku-queue-workers-wirings.gen.ts +1 -1
  36. package/.pikku/rpc/pikku-remote-rpc-workers.gen.ts +5 -2
  37. package/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +19 -14
  38. package/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +46 -39
  39. package/.pikku/scheduler/pikku-scheduler-types.gen.ts +2 -2
  40. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  41. package/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.ts +5 -2
  42. package/.pikku/scheduler/pikku-schedulers-wirings.gen.ts +1 -1
  43. package/.pikku/schemas/register.gen.ts +31 -23
  44. package/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  45. package/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  46. package/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  47. package/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  48. package/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  49. package/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  50. package/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  51. package/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  52. package/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  53. package/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  54. package/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  55. package/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  56. package/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  57. package/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  58. package/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  59. package/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  60. package/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  61. package/.pikku/services/config.gen.json +104 -0
  62. package/.pikku/services/getInspectorState.gen.json +10 -0
  63. package/.pikku/services/jwt.gen.json +13 -0
  64. package/.pikku/services/logger.gen.json +25 -0
  65. package/.pikku/services/queueService.gen.json +14 -0
  66. package/.pikku/services/schedulerService.gen.json +17 -0
  67. package/.pikku/services/schema.gen.json +14 -0
  68. package/.pikku/services/secrets.gen.json +13 -0
  69. package/.pikku/services/variables.gen.json +13 -0
  70. package/.pikku/services/workflowService.gen.json +31 -0
  71. package/.pikku/workflow/pikku-workflow-map.gen.d.ts +2 -36
  72. package/.pikku/workflow/pikku-workflow-types.gen.ts +305 -48
  73. package/.pikku/workflow/pikku-workflow-wirings-meta.gen.ts +6 -2
  74. package/.pikku/workflow/pikku-workflow-wirings.gen.ts +1 -2
  75. package/CHANGELOG.md +44 -1
  76. package/bin/pikku.ts +6 -32
  77. package/build.sh +53 -31
  78. package/cli.schema.json +1 -1
  79. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +51 -10
  80. package/dist/.pikku/channel/pikku-channel-types.gen.js +3 -13
  81. package/dist/.pikku/channel/pikku-channels-meta.gen.js +3 -2
  82. package/dist/.pikku/channel/pikku-channels-meta.gen.json +1 -0
  83. package/dist/.pikku/channel/pikku-channels.gen.d.ts +1 -1
  84. package/dist/.pikku/channel/pikku-channels.gen.js +1 -1
  85. package/dist/.pikku/cli/pikku-cli-channel.js +2 -2
  86. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  87. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -3
  88. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +3 -3
  89. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  90. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +3 -157
  91. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +147 -0
  92. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +2 -2
  93. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +2 -2
  94. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  95. package/dist/.pikku/cli/pikku-cli.gen.js +3 -3
  96. package/dist/.pikku/forge/pikku-forge-types.gen.d.ts +72 -0
  97. package/dist/.pikku/forge/pikku-forge-types.gen.js +55 -0
  98. package/dist/.pikku/function/pikku-function-types.gen.d.ts +141 -99
  99. package/dist/.pikku/function/pikku-function-types.gen.js +52 -62
  100. package/dist/.pikku/function/pikku-functions-meta.gen.js +3 -969
  101. package/dist/.pikku/function/pikku-functions-meta.gen.json +656 -0
  102. package/dist/.pikku/http/pikku-http-types.gen.d.ts +19 -4
  103. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  104. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +3 -10
  105. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +9 -0
  106. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  107. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  108. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +57 -17
  109. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +7 -31
  110. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.js +5 -4
  111. package/dist/.pikku/mcp/pikku-mcp-wirings-meta.gen.json +5 -0
  112. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.d.ts +1 -1
  113. package/dist/.pikku/mcp/pikku-mcp-wirings.gen.js +1 -1
  114. package/dist/.pikku/pikku-bootstrap.gen.d.ts +7 -12
  115. package/dist/.pikku/pikku-bootstrap.gen.js +7 -12
  116. package/dist/.pikku/pikku-services.gen.d.ts +5 -7
  117. package/dist/.pikku/pikku-services.gen.js +3 -5
  118. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  119. package/dist/.pikku/pikku-types.gen.js +3 -1
  120. package/dist/.pikku/pikku-websocket.gen.d.ts +1 -1
  121. package/dist/.pikku/pikku-websocket.gen.js +1 -1
  122. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +2 -2
  123. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  124. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +3 -7
  125. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +1 -0
  126. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  127. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  128. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.d.ts +9 -9
  129. package/dist/.pikku/rpc/pikku-remote-rpc-workers.gen.js +5 -2
  130. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +2 -2
  131. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  132. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.js +3 -2
  133. package/dist/.pikku/scheduler/pikku-schedulers-wirings-meta.gen.json +1 -0
  134. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.d.ts +1 -1
  135. package/dist/.pikku/scheduler/pikku-schedulers-wirings.gen.js +1 -1
  136. package/dist/.pikku/schemas/register.gen.js +19 -15
  137. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  138. package/dist/.pikku/schemas/schemas/PikkuCLIOutput.schema.json +1 -1
  139. package/dist/.pikku/schemas/schemas/PikkuChannelsOutput.schema.json +1 -1
  140. package/dist/.pikku/schemas/schemas/PikkuForgeNodesOutput.schema.json +1 -0
  141. package/dist/.pikku/schemas/schemas/PikkuFunctionsOutput.schema.json +1 -1
  142. package/dist/.pikku/schemas/schemas/PikkuHTTPOutput.schema.json +1 -1
  143. package/dist/.pikku/schemas/schemas/PikkuMCPOutput.schema.json +1 -1
  144. package/dist/.pikku/schemas/schemas/PikkuMiddlewareOutput.schema.json +1 -1
  145. package/dist/.pikku/schemas/schemas/PikkuPackageOutput.schema.json +1 -0
  146. package/dist/.pikku/schemas/schemas/PikkuPermissionsOutput.schema.json +1 -1
  147. package/dist/.pikku/schemas/schemas/PikkuPublicRPCOutput.schema.json +1 -1
  148. package/dist/.pikku/schemas/schemas/PikkuQueueOutput.schema.json +1 -1
  149. package/dist/.pikku/schemas/schemas/PikkuRPCOutput.schema.json +1 -1
  150. package/dist/.pikku/schemas/schemas/PikkuRemoteRPCOutput.schema.json +1 -1
  151. package/dist/.pikku/schemas/schemas/PikkuSchedulerOutput.schema.json +1 -1
  152. package/dist/.pikku/schemas/schemas/PikkuSchemasOutput.schema.json +1 -1
  153. package/dist/.pikku/schemas/schemas/PikkuWorkflowOutput.schema.json +1 -1
  154. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +213 -39
  155. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +106 -16
  156. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +3 -2
  157. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
  158. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -2
  159. package/dist/bin/pikku.js +5 -26
  160. package/dist/src/cli.wiring.js +4 -4
  161. package/dist/src/functions/commands/all.js +172 -94
  162. package/dist/src/functions/commands/bootstrap.js +21 -16
  163. package/dist/src/functions/commands/watch.js +6 -3
  164. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +12 -8
  165. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.d.ts +1 -1
  166. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.js +74 -22
  167. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
  168. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +72 -20
  169. package/dist/src/functions/wirings/channels/pikku-channels.js +9 -2
  170. package/dist/src/functions/wirings/channels/pikku-command-channels.js +18 -2
  171. package/dist/src/functions/wirings/channels/serialize-channel-types.js +72 -16
  172. package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +1 -2
  173. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +4 -4
  174. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +1 -1
  175. package/dist/src/functions/wirings/cli/pikku-command-cli.js +17 -3
  176. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +1 -1
  177. package/dist/src/functions/wirings/cli/serialize-cli-types.js +2 -2
  178. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.d.ts +1 -1
  179. package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -4
  180. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.d.ts +1 -0
  181. package/dist/src/functions/wirings/forge/pikku-command-forge-nodes.js +90 -0
  182. package/dist/src/functions/wirings/forge/pikku-command-forge-types.d.ts +1 -0
  183. package/dist/src/functions/wirings/forge/pikku-command-forge-types.js +26 -0
  184. package/dist/src/functions/wirings/forge/serialize-forge-types.d.ts +4 -0
  185. package/dist/src/functions/wirings/forge/serialize-forge-types.js +90 -0
  186. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +4 -4
  187. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +7 -2
  188. package/dist/src/functions/wirings/functions/pikku-command-functions.js +35 -10
  189. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  190. package/dist/src/functions/wirings/functions/pikku-command-services.js +24 -24
  191. package/dist/src/functions/wirings/functions/pikku-function-types.js +2 -2
  192. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  193. package/dist/src/functions/wirings/functions/schemas.js +5 -4
  194. package/dist/src/functions/wirings/functions/serialize-function-imports.d.ts +3 -1
  195. package/dist/src/functions/wirings/functions/serialize-function-imports.js +7 -3
  196. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  197. package/dist/src/functions/wirings/functions/serialize-function-types.js +224 -91
  198. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
  199. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +19 -21
  200. package/dist/src/functions/wirings/http/openapi-spec-generator.js +5 -5
  201. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +18 -2
  202. package/dist/src/functions/wirings/http/pikku-command-openapi.js +2 -2
  203. package/dist/src/functions/wirings/http/pikku-http-routes.js +9 -2
  204. package/dist/src/functions/wirings/http/serialize-http-types.js +19 -3
  205. package/dist/src/functions/wirings/http/serialize-typed-http-map.js +33 -8
  206. package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +29 -6
  207. package/dist/src/functions/wirings/mcp/serialize-mcp-json.js +3 -2
  208. package/dist/src/functions/wirings/mcp/serialize-mcp-types.js +71 -19
  209. package/dist/src/functions/wirings/middleware/pikku-command-middleware.js +29 -2
  210. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.d.ts +5 -2
  211. package/dist/src/functions/wirings/middleware/serialize-middleware-groups-meta.js +5 -13
  212. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -0
  213. package/dist/src/functions/wirings/package/pikku-command-package.js +58 -0
  214. package/dist/src/functions/wirings/package/serialize-package.d.ts +5 -0
  215. package/dist/src/functions/wirings/package/serialize-package.js +32 -0
  216. package/dist/src/functions/wirings/queue/pikku-command-queue.js +17 -3
  217. package/dist/src/functions/wirings/queue/pikku-queue.js +9 -11
  218. package/dist/src/functions/wirings/queue/serialize-queue-map.js +20 -3
  219. package/dist/src/functions/wirings/queue/serialize-queue-meta.d.ts +2 -1
  220. package/dist/src/functions/wirings/queue/serialize-queue-meta.js +10 -1
  221. package/dist/src/functions/wirings/queue/serialize-queue-types.js +1 -1
  222. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +4 -4
  223. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +9 -2
  224. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +11 -4
  225. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +4 -1
  226. package/dist/src/functions/wirings/rpc/serialize-rpc-wrapper.js +3 -3
  227. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -1
  228. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +54 -8
  229. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.js +15 -3
  230. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.d.ts +2 -1
  231. package/dist/src/functions/wirings/scheduler/serialize-scheduler-meta.js +11 -1
  232. package/dist/src/functions/wirings/scheduler/serialize-scheduler-types.js +1 -1
  233. package/dist/src/functions/wirings/services/pikku-command-service-metadata.d.ts +1 -0
  234. package/dist/src/functions/wirings/services/pikku-command-service-metadata.js +22 -0
  235. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +58 -16
  236. package/dist/src/functions/wirings/workflow/serialize-workflow-map.d.ts +3 -0
  237. package/dist/src/functions/wirings/workflow/serialize-workflow-map.js +30 -32
  238. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.d.ts +1 -2
  239. package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +43 -8
  240. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.d.ts +7 -0
  241. package/dist/src/functions/wirings/workflow/serialize-workflow-registration.js +53 -0
  242. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +4 -2
  243. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +308 -49
  244. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.d.ts +1 -1
  245. package/dist/src/functions/wirings/workflow/serialize-workflow-workers.js +16 -29
  246. package/dist/src/middleware/log-command-info-and-time.d.ts +2 -2
  247. package/dist/src/middleware/log-command-info-and-time.js +1 -4
  248. package/dist/src/services/cli-logger-forwarder.service.js +1 -1
  249. package/dist/src/services.d.ts +2 -7
  250. package/dist/src/services.js +18 -13
  251. package/dist/src/utils/check-required-types.d.ts +2 -2
  252. package/dist/src/utils/check-required-types.js +2 -3
  253. package/dist/src/utils/command-summary.d.ts +2 -0
  254. package/dist/src/utils/command-summary.js +2 -0
  255. package/dist/src/utils/custom-types-generator.js +13 -15
  256. package/dist/src/utils/generate-bootstrap-file.js +1 -1
  257. package/dist/src/utils/pikku-cli-config.js +65 -4
  258. package/dist/src/utils/pikku-files-and-methods.d.ts +2 -2
  259. package/dist/src/utils/pikku-files-and-methods.js +4 -4
  260. package/dist/src/utils/schema-generator.d.ts +4 -3
  261. package/dist/src/utils/schema-generator.js +135 -15
  262. package/dist/src/utils/strip-verbose-meta.d.ts +43 -0
  263. package/dist/src/utils/strip-verbose-meta.js +210 -0
  264. package/dist/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +11 -9
  266. package/src/cli.wiring.ts +4 -4
  267. package/src/functions/commands/all.ts +203 -107
  268. package/src/functions/commands/bootstrap.ts +23 -16
  269. package/src/functions/commands/watch.ts +6 -3
  270. package/src/functions/runtimes/nextjs/pikku-command-nextjs.ts +26 -6
  271. package/src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts +75 -22
  272. package/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts +72 -19
  273. package/src/functions/wirings/channels/pikku-channels.ts +27 -3
  274. package/src/functions/wirings/channels/pikku-command-channels.ts +46 -3
  275. package/src/functions/wirings/channels/serialize-channel-types.ts +72 -16
  276. package/src/functions/wirings/channels/serialize-typed-channel-map.ts +3 -2
  277. package/src/functions/wirings/cli/pikku-command-cli-entry.ts +4 -4
  278. package/src/functions/wirings/cli/pikku-command-cli-types.ts +1 -1
  279. package/src/functions/wirings/cli/pikku-command-cli.ts +45 -3
  280. package/src/functions/wirings/cli/serialize-channel-cli.ts +1 -1
  281. package/src/functions/wirings/cli/serialize-cli-types.ts +2 -2
  282. package/src/functions/wirings/cli/serialize-local-cli-bootstrap.ts +5 -5
  283. package/src/functions/wirings/forge/pikku-command-forge-nodes.ts +135 -0
  284. package/src/functions/wirings/forge/pikku-command-forge-types.ts +38 -0
  285. package/src/functions/wirings/forge/serialize-forge-types.ts +94 -0
  286. package/src/functions/wirings/functions/pikku-command-function-types-split.ts +9 -8
  287. package/src/functions/wirings/functions/pikku-command-function-types.ts +17 -10
  288. package/src/functions/wirings/functions/pikku-command-functions.ts +59 -14
  289. package/src/functions/wirings/functions/pikku-command-services.ts +26 -26
  290. package/src/functions/wirings/functions/pikku-function-types.ts +3 -1
  291. package/src/functions/wirings/functions/schemas.ts +14 -4
  292. package/src/functions/wirings/functions/serialize-function-imports.ts +12 -3
  293. package/src/functions/wirings/functions/serialize-function-types.ts +227 -93
  294. package/src/functions/wirings/functions/serialize-pikku-types-hub.ts +27 -26
  295. package/src/functions/wirings/http/openapi-spec-generator.ts +15 -6
  296. package/src/functions/wirings/http/pikku-command-http-routes.ts +46 -2
  297. package/src/functions/wirings/http/pikku-command-openapi.ts +3 -2
  298. package/src/functions/wirings/http/pikku-http-routes.ts +28 -2
  299. package/src/functions/wirings/http/serialize-http-types.ts +19 -3
  300. package/src/functions/wirings/http/serialize-typed-http-map.ts +32 -8
  301. package/src/functions/wirings/mcp/pikku-command-mcp.ts +58 -10
  302. package/src/functions/wirings/mcp/serialize-mcp-json.ts +8 -6
  303. package/src/functions/wirings/mcp/serialize-mcp-types.ts +71 -19
  304. package/src/functions/wirings/middleware/pikku-command-middleware.ts +39 -2
  305. package/src/functions/wirings/middleware/serialize-middleware-groups-meta.ts +4 -19
  306. package/src/functions/wirings/package/pikku-command-package.ts +81 -0
  307. package/src/functions/wirings/package/serialize-package.ts +69 -0
  308. package/src/functions/wirings/permissions/pikku-command-permissions.ts +2 -2
  309. package/src/functions/wirings/queue/pikku-command-queue.ts +47 -2
  310. package/src/functions/wirings/queue/pikku-queue.ts +26 -10
  311. package/src/functions/wirings/queue/serialize-queue-map.ts +18 -3
  312. package/src/functions/wirings/queue/serialize-queue-meta.ts +15 -1
  313. package/src/functions/wirings/queue/serialize-queue-types.ts +1 -1
  314. package/src/functions/wirings/rpc/pikku-command-rpc-map.ts +7 -4
  315. package/src/functions/wirings/rpc/pikku-command-rpc.ts +25 -2
  316. package/src/functions/wirings/rpc/serialize-public-rpc.ts +11 -4
  317. package/src/functions/wirings/rpc/serialize-remote-rpc.ts +4 -1
  318. package/src/functions/wirings/rpc/serialize-rpc-wrapper.ts +3 -3
  319. package/src/functions/wirings/rpc/serialize-typed-rpc-map.ts +74 -8
  320. package/src/functions/wirings/scheduler/pikku-command-scheduler.ts +51 -4
  321. package/src/functions/wirings/scheduler/serialize-scheduler-meta.ts +20 -1
  322. package/src/functions/wirings/scheduler/serialize-scheduler-types.ts +1 -1
  323. package/src/functions/wirings/services/pikku-command-service-metadata.ts +25 -0
  324. package/src/functions/wirings/workflow/pikku-command-workflow.ts +114 -19
  325. package/src/functions/wirings/workflow/serialize-workflow-map.ts +38 -40
  326. package/src/functions/wirings/workflow/serialize-workflow-meta.ts +68 -11
  327. package/src/functions/wirings/workflow/serialize-workflow-registration.ts +83 -0
  328. package/src/functions/wirings/workflow/serialize-workflow-types.ts +311 -49
  329. package/src/functions/wirings/workflow/serialize-workflow-workers.ts +16 -29
  330. package/src/middleware/log-command-info-and-time.ts +3 -6
  331. package/src/services/cli-logger-forwarder.service.ts +1 -1
  332. package/src/services.ts +23 -16
  333. package/src/utils/check-required-types.ts +4 -7
  334. package/src/utils/command-summary.ts +4 -0
  335. package/src/utils/custom-types-generator.ts +15 -15
  336. package/src/utils/generate-bootstrap-file.ts +1 -1
  337. package/src/utils/pikku-cli-config.ts +105 -5
  338. package/src/utils/pikku-files-and-methods.ts +10 -13
  339. package/src/utils/schema-generator.ts +185 -22
  340. package/src/utils/strip-verbose-meta.ts +254 -0
  341. package/types/application-types.d.ts +1 -1
  342. package/types/config.d.ts +47 -2
  343. package/.pikku/function/pikku-functions-meta.min.gen.ts +0 -211
  344. package/.pikku/function/pikku-functions.gen.ts +0 -84
  345. package/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts +0 -47
  346. package/dist/.pikku/function/pikku-functions-meta.min.gen.d.ts +0 -1
  347. package/dist/.pikku/function/pikku-functions-meta.min.gen.js +0 -211
  348. package/dist/.pikku/function/pikku-functions.gen.d.ts +0 -1
  349. package/dist/.pikku/function/pikku-functions.gen.js +0 -83
  350. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +0 -1
  351. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +0 -47
  352. package/dist/.pikku/schemas/schemas/PikkuRemoteInternalRPCInput.schema.json +0 -1
  353. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.d.ts +0 -1
  354. package/dist/src/functions/wirings/workflow/pikku-command-workflow-map.js +0 -12
  355. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.d.ts +0 -1
  356. package/dist/src/functions/wirings/workflow/pikku-command-workflow-types.js +0 -11
  357. package/src/functions/wirings/workflow/pikku-command-workflow-map.ts +0 -24
  358. package/src/functions/wirings/workflow/pikku-command-workflow-types.ts +0 -22
@@ -0,0 +1,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,21 +1,19 @@
1
1
  /**
2
- * This file was generated by @pikku/cli@0.11.1
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 } 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
- import { PikkuChannel } from '@pikku/core/channel'
11
- import { PikkuMCP } from '@pikku/core/mcp'
12
10
 
13
11
  import type { UserSession } from '../../types/application-types.d.js'
14
12
  import type { SingletonServices } from '../../types/application-types.d.js'
15
13
  import type { Services } from '../../types/application-types.d.js'
16
14
  import type { Config } from '../../types/application-types.d.js'
17
- import type { TypedPikkuRPC } from '../rpc/pikku-rpc-wirings-map.internal.gen.d.js'
18
- import type { RequiredSingletonServices, RequiredSessionServices } from '../pikku-services.gen.js'
15
+ import type { TypedPikkuRPC, FlattenedRPCMap } from '../rpc/pikku-rpc-wirings-map.internal.gen.d.js'
16
+ import type { RequiredSingletonServices, RequiredWireServices } from '../pikku-services.gen.js'
19
17
 
20
18
 
21
19
 
@@ -29,7 +27,7 @@ type Session = UserSession
29
27
  * @template In - The input type that the permission check will receive
30
28
  * @template RequiredServices - The services required for this permission check
31
29
  */
32
- export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, Session>
30
+ export type PikkuPermission<In = unknown, RequiredServices extends Services = Services> = CorePikkuPermission<In, RequiredServices, PikkuWire<In, never, false, Session>>
33
31
 
34
32
  /**
35
33
  * Type-safe middleware definition that can access your application's services and session.
@@ -37,7 +35,7 @@ export type PikkuPermission<In = unknown, RequiredServices extends Services = Se
37
35
  *
38
36
  * @template RequiredServices - The services required for this middleware
39
37
  */
40
- export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices, Session>
38
+ export type PikkuMiddleware<RequiredServices extends SingletonServices = SingletonServices> = CorePikkuMiddleware<RequiredServices>
41
39
 
42
40
  /**
43
41
  * Configuration object for creating a permission with metadata
@@ -58,7 +56,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
58
56
  * @example
59
57
  * ```typescript
60
58
  * // Direct function syntax
61
- * const permission = pikkuPermission(({ logger }, data, session) => {
59
+ * const permission = pikkuPermission(async ({ logger }, data, { session }) => {
60
+ * const session = await session?.get()
62
61
  * return session?.role === 'admin'
63
62
  * })
64
63
  *
@@ -66,7 +65,8 @@ export type PikkuPermissionConfig<In = unknown, RequiredServices extends Service
66
65
  * const adminPermission = pikkuPermission({
67
66
  * name: 'Admin Permission',
68
67
  * description: 'Checks if user has admin role',
69
- * func: async ({ logger }, data, session) => {
68
+ * func: async ({ logger }, data, { session }) => {
69
+ * const session = await session?.get()
70
70
  * return session?.role === 'admin'
71
71
  * }
72
72
  * })
@@ -97,7 +97,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
97
97
  * @example
98
98
  * ```typescript
99
99
  * // Direct function syntax
100
- * const middleware = pikkuMiddleware(({ logger }, interactions, next) => {
100
+ * const middleware = pikkuMiddleware(({ logger }, wires, next) => {
101
101
  * logger.info('Middleware executed')
102
102
  * await next()
103
103
  * })
@@ -106,7 +106,7 @@ export type PikkuMiddlewareConfig<RequiredServices extends SingletonServices = S
106
106
  * const logMiddleware = pikkuMiddleware({
107
107
  * name: 'Request Logger',
108
108
  * description: 'Logs all incoming requests',
109
- * func: async ({ logger }, interactions, next) => {
109
+ * func: async ({ logger }, wires, next) => {
110
110
  * logger.info('Request started')
111
111
  * await next()
112
112
  * }
@@ -129,7 +129,7 @@ export const pikkuMiddleware = <RequiredServices extends SingletonServices = Sin
129
129
  * message,
130
130
  * level = 'info'
131
131
  * }) => {
132
- * return pikkuMiddleware(async ({ logger }, _interaction, next) => {
132
+ * return pikkuMiddleware(async ({ logger }, next) => {
133
133
  * logger[level](message)
134
134
  * await next()
135
135
  * })
@@ -151,8 +151,8 @@ export const pikkuMiddlewareFactory = <In = any>(
151
151
  * export const requireRole = pikkuPermissionFactory<{ role: string }>(({
152
152
  * role
153
153
  * }) => {
154
- * return pikkuPermission(async ({ logger }, data, session) => {
155
- * if (!session || session.role !== role) {
154
+ * return pikkuPermission(async ({ logger }, data, { initialSession }) => {
155
+ * if (!initialSession || initialSession.role !== role) {
156
156
  * logger.warn(`Permission denied: required role '${role}'`)
157
157
  * return false
158
158
  * }
@@ -173,25 +173,19 @@ export const pikkuPermissionFactory = <In = any>(
173
173
  *
174
174
  * @template In - The input type
175
175
  * @template Out - The output type that the function returns
176
- * @template ChannelData - Channel data type (null = optional channel)
177
- * @template MCPData - MCP data type (null = optional MCP)
178
176
  * @template RequiredServices - Services required by this function
179
177
  */
180
178
  export type PikkuFunctionSessionless<
181
179
  In = unknown,
182
180
  Out = never,
183
- ChannelData = null, // null means optional channel
184
- MCPData = null, // null means optional MCP
185
- RequiredServices extends Services = Omit<Services, 'rpc' | 'channel' | 'mcp'> &
186
- { rpc: TypedPikkuRPC } & (
187
- [ChannelData] extends [null]
188
- ? { channel?: PikkuChannel<unknown, Out> } // Optional channel
189
- : { channel: PikkuChannel<ChannelData, Out> } // Required channel with any data type
190
- ) & ([MCPData] extends [null]
191
- ? { mcp?: PikkuMCP } // Optional MCP
192
- : { mcp: PikkuMCP } // Required MCP
193
- )
194
- > = CorePikkuFunctionSessionless<In, Out, ChannelData, RequiredServices, Session>
181
+ RequiredWires extends keyof PikkuWire = never,
182
+ RequiredServices extends Services = Services
183
+ > = CorePikkuFunctionSessionless<
184
+ In,
185
+ Out,
186
+ RequiredServices,
187
+ PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any>, RequiredWires>
188
+ >
195
189
 
196
190
  /**
197
191
  * A session-aware API function that requires user authentication.
@@ -199,25 +193,24 @@ export type PikkuFunctionSessionless<
199
193
  *
200
194
  * @template In - The input type
201
195
  * @template Out - The output type that the function returns
202
- * @template ChannelData - Channel data type (null = optional channel)
203
- * @template MCPData - MCP data type (null = optional MCP)
204
196
  * @template RequiredServices - Services required by this function
205
197
  */
206
198
  export type PikkuFunction<
207
199
  In = unknown,
208
200
  Out = never,
209
- ChannelData = null, // null means optional channel
210
- MCPData = null, // null means optional MCP
211
- RequiredServices extends Services = Omit<Services, 'rpc' | 'channel' | 'mcp'> &
212
- { rpc: TypedPikkuRPC } & (
213
- [ChannelData] extends [null]
214
- ? { channel?: PikkuChannel<unknown, Out> } // Optional channel
215
- : { channel: PikkuChannel<ChannelData, Out> } // Required channel with any data type
216
- ) & ([MCPData] extends [null]
217
- ? { mcp?: PikkuMCP } // Optional MCP
218
- : { mcp: PikkuMCP } // Required MCP
219
- )
220
- > = CorePikkuFunction<In, Out, ChannelData, RequiredServices, Session>
201
+ RequiredWires extends keyof PikkuWire = 'session',
202
+ RequiredServices extends Services = Services
203
+ > = CorePikkuFunction<
204
+ In,
205
+ Out,
206
+ RequiredServices,
207
+ PickRequired<PikkuWire<In, Out, true, Session, TypedPikkuRPC, null, any>, RequiredWires>
208
+ >
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
221
214
 
222
215
  /**
223
216
  * Configuration object for Pikku functions with optional middleware, permissions, tags, and documentation.
@@ -225,72 +218,172 @@ export type PikkuFunction<
225
218
  *
226
219
  * @template In - The input type
227
220
  * @template Out - The output type
228
- * @template ChannelData - Channel data type
229
- * @template MCPData - MCP data type
230
221
  * @template PikkuFunc - The function type (can be narrowed to PikkuFunction or PikkuFunctionSessionless)
231
222
  */
232
223
  export type PikkuFunctionConfig<
233
224
  In = unknown,
234
225
  Out = unknown,
235
- ChannelData = unknown,
236
- MCPData = unknown,
237
- PikkuFunc extends PikkuFunction<In, Out, ChannelData, MCPData> | PikkuFunctionSessionless<In, Out, ChannelData, MCPData> = PikkuFunction<In, Out, ChannelData, MCPData> | PikkuFunctionSessionless<In, Out, ChannelData, MCPData>
238
- > = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware>
226
+ RequiredWires extends keyof PikkuWire = never,
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
+ }
239
261
 
240
262
  /**
241
263
  * Creates a Pikku function that can be either session-aware or sessionless.
242
264
  * This is the main function wrapper for creating API endpoints.
243
265
  *
244
- * @template In - Input type for the function
245
- * @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)
246
272
  * @param func - Function definition, either direct function or configuration object
247
273
  * @returns The normalized configuration object
248
274
  *
249
275
  * @example
250
- * \`\`\`typescript
251
- * const createUser = pikkuFunc<{name: string, email: string}, {id: number, message: string}>({
252
- * func: async ({db, logger}, input) => {
253
- * 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) => {
254
280
  * const user = await db.users.create(input)
255
- * return {id: user.id, message: \`User \${input.name} created successfully\`}
256
- * },
257
- * auth: true
281
+ * return { id: user.id }
282
+ * }
258
283
  * })
259
- * \`\`\`
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
+ * ```
260
299
  */
261
- 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>(
262
307
  func:
263
- | PikkuFunction<In, Out>
264
- | CorePikkuFunctionConfig<PikkuFunction<In, Out>, PikkuPermission<In>, PikkuMiddleware>
265
- ) => {
308
+ | PikkuFunction<In, Out, 'session' | 'rpc'>
309
+ | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
310
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
311
+ export function pikkuFunc(func: any) {
266
312
  return typeof func === 'function' ? { func } : func
267
313
  }
268
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
+
269
340
  /**
270
341
  * Creates a sessionless Pikku function that doesn't require user authentication.
271
342
  * Use this for public endpoints, webhooks, or background tasks.
272
343
  *
273
- * @template In - Input type for the function
274
- * @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)
275
350
  * @param func - Function definition, either direct function or configuration object
276
351
  * @returns The normalized configuration object
277
352
  *
278
353
  * @example
279
- * \`\`\`typescript
280
- * const healthCheck = pikkuSessionlessFunc<void, {status: string, timestamp: string}>({
354
+ * ```typescript
355
+ * // Pattern 1: Using generic types
356
+ * const healthCheck = pikkuSessionlessFunc<void, {status: string}>({
281
357
  * func: async ({logger}) => {
282
- * logger.info('Health check requested')
283
- * return {status: 'healthy', timestamp: new Date().toISOString()}
284
- * },
285
- * name: 'healthCheck'
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
+ * }
286
372
  * })
287
- * \`\`\`
373
+ * ```
288
374
  */
289
- 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>(
290
382
  func:
291
- | PikkuFunctionSessionless<In, Out>
292
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<In, Out>, PikkuPermission<In>, PikkuMiddleware>
293
- ) => {
383
+ | PikkuFunctionSessionless<In, Out, 'session' | 'rpc'>
384
+ | PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
385
+ ): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
386
+ export function pikkuSessionlessFunc(func: any) {
294
387
  return typeof func === 'function' ? { func } : func
295
388
  }
296
389
 
@@ -302,22 +395,61 @@ export const pikkuSessionlessFunc = <In, Out = unknown>(
302
395
  * @returns The normalized configuration object
303
396
  *
304
397
  * @example
305
- * \`\`\`typescript
398
+ * ```typescript
306
399
  * const cleanupTempFiles = pikkuVoidFunc(async ({fileSystem, logger}) => {
307
400
  * logger.info('Starting cleanup of temporary files')
308
401
  * await fileSystem.deleteDirectory('/tmp/uploads')
309
402
  * logger.info('Cleanup completed')
310
403
  * })
311
- * \`\`\`
404
+ * ```
312
405
  */
313
406
  export const pikkuVoidFunc = (
314
407
  func:
315
- | PikkuFunctionSessionless<void, void>
316
- | CorePikkuFunctionConfig<PikkuFunctionSessionless<void, void>, PikkuPermission<void>>
408
+ | PikkuFunctionSessionless<void, void, 'session' | 'rpc'>
409
+ | PikkuFunctionConfig<void, void, 'session' | 'rpc'>
317
410
  ) => {
318
411
  return typeof func === 'function' ? { func } : func
319
412
  }
320
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
+
321
453
  /**
322
454
  * Creates a Pikku config factory.
323
455
  * Use this to define your application's configuration factory.
@@ -362,28 +494,28 @@ export const pikkuServices = (
362
494
  ) => func
363
495
 
364
496
  /**
365
- * Creates a Pikku session services factory.
497
+ * Creates a Pikku wire services factory.
366
498
  * Use this to define services that are created per-request/session.
367
499
  *
368
- * @param func - Session services factory function
369
- * @returns The session services factory function
500
+ * @param func - Wire services factory function
501
+ * @returns The wire services factory function
370
502
  *
371
503
  * @example
372
504
  * ```typescript
373
- * export const createSessionServices = pikkuSessionServices(async (services, interaction, session) => {
505
+ * export const createWireServices = pikkuWireServices(async (services, wire) => {
506
+ * const session = await wire.session?.get()
374
507
  * return {
375
508
  * userCache: new UserCache(session?.userId)
376
509
  * }
377
510
  * })
378
511
  * ```
379
512
  */
380
- export const pikkuSessionServices = (
513
+ export const pikkuWireServices = (
381
514
  func: (
382
515
  services: SingletonServices,
383
- interaction: any,
384
- session: Session | undefined
385
- ) => Promise<RequiredSessionServices>
386
- ) => func
516
+ wire: any
517
+ ) => Promise<RequiredWireServices>
518
+ ): CreateWireServices => func as unknown as CreateWireServices
387
519
 
388
520
  /**
389
521
  * Adds global middleware for a specific tag.
@@ -409,7 +541,7 @@ export const pikkuSessionServices = (
409
541
  * ```
410
542
  */
411
543
  export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
412
- addMiddlewareCore(tag, middleware as any)
544
+ addMiddlewareCore(tag, middleware as any, null)
413
545
  }
414
546
 
415
547
  /**
@@ -436,5 +568,5 @@ export const addMiddleware = (tag: string, middleware: PikkuMiddleware[]) => {
436
568
  * ```
437
569
  */
438
570
  export const addPermission = <In = unknown>(tag: string, permissions: CorePermissionGroup<PikkuPermission<In>> | PikkuPermission<In>[]) => {
439
- addPermissionCore(tag, permissions as any)
571
+ addPermissionCore(tag, permissions as any, null)
440
572
  }