@pikku/cli 0.12.83 → 0.12.86

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 (274) hide show
  1. package/console-app/assets/index-CSzCJzBb.css +1 -0
  2. package/console-app/assets/{index-CN_U0k_D.js → index-Cr3_cO3Z.js} +161 -150
  3. package/console-app/index.html +2 -2
  4. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +3 -2
  5. package/dist/.pikku/{http/pikku-http-wirings.gen.d.ts → auth/auth.types.d.ts} +1 -1
  6. package/dist/.pikku/auth/auth.types.js +5 -0
  7. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  8. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  9. package/dist/.pikku/cli/pikku-cli-channel.d.ts +4 -4
  10. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  11. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  12. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  13. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
  14. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
  15. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.json +4 -0
  16. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  17. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  18. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  19. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +4 -0
  20. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  21. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  22. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  23. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  24. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  25. package/dist/.pikku/function/pikku-function-types.gen.d.ts +24 -14
  26. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  27. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  28. package/dist/.pikku/function/pikku-functions-meta.gen.json +45 -36
  29. package/dist/.pikku/function/pikku-functions.gen.js +3 -3
  30. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  31. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  32. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  33. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  34. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -5
  35. package/dist/.pikku/pikku-bootstrap.gen.js +1 -5
  36. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  37. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  38. package/dist/.pikku/pikku-services.gen.d.ts +2 -1
  39. package/dist/.pikku/pikku-services.gen.js +1 -0
  40. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  41. package/dist/.pikku/pikku-types.gen.js +1 -1
  42. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  43. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  44. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  45. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +2 -2
  46. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  47. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  48. package/dist/.pikku/schemas/register.gen.js +3 -7
  49. package/dist/.pikku/schemas/schemas/FabricLoginInput.schema.json +1 -1
  50. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  51. package/dist/.pikku/schemas/schemas/PikkuUserAdminFunctionsOutput.schema.json +1 -0
  52. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
  53. package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
  54. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
  55. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  56. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  57. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  58. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  59. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  60. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  61. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  62. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  63. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  64. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  65. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +9 -3
  66. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +8 -2
  67. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  68. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  69. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  70. package/dist/bin/pikku-bin.mjs +2 -2
  71. package/dist/src/fabric/fabric-commands.d.ts +56 -53
  72. package/dist/src/fabric/fabric-commands.js +4 -0
  73. package/dist/src/fabric/functions/add.function.d.ts +2 -2
  74. package/dist/src/fabric/functions/addon-verify.function.d.ts +2 -2
  75. package/dist/src/fabric/functions/db-schema.function.d.ts +2 -2
  76. package/dist/src/fabric/functions/deploy-list.function.d.ts +2 -2
  77. package/dist/src/fabric/functions/deploy-units.function.d.ts +2 -2
  78. package/dist/src/fabric/functions/deploy.function.d.ts +4 -4
  79. package/dist/src/fabric/functions/domains-add.function.d.ts +2 -2
  80. package/dist/src/fabric/functions/domains-list.function.d.ts +2 -2
  81. package/dist/src/fabric/functions/domains-remove.function.d.ts +2 -2
  82. package/dist/src/fabric/functions/errors.function.d.ts +2 -2
  83. package/dist/src/fabric/functions/init.function.d.ts +2 -2
  84. package/dist/src/fabric/functions/link.function.d.ts +2 -2
  85. package/dist/src/fabric/functions/llm-key.function.d.ts +6 -6
  86. package/dist/src/fabric/functions/login.function.d.ts +6 -2
  87. package/dist/src/fabric/functions/login.function.js +45 -4
  88. package/dist/src/fabric/functions/logs.function.d.ts +2 -2
  89. package/dist/src/fabric/functions/metrics.function.d.ts +2 -2
  90. package/dist/src/fabric/functions/publish.function.d.ts +2 -2
  91. package/dist/src/fabric/functions/rollback.function.d.ts +2 -2
  92. package/dist/src/fabric/functions/secrets-list.function.d.ts +2 -2
  93. package/dist/src/fabric/functions/secrets-set.function.d.ts +2 -2
  94. package/dist/src/fabric/functions/smoke.function.d.ts +2 -2
  95. package/dist/src/fabric/functions/status.function.d.ts +2 -2
  96. package/dist/src/fabric/functions/trace.function.d.ts +2 -2
  97. package/dist/src/fabric/functions/validate.function.d.ts +2 -2
  98. package/dist/src/functions/commands/all.d.ts +1 -1
  99. package/dist/src/functions/commands/audit.d.ts +1 -1
  100. package/dist/src/functions/commands/binary.d.ts +2 -2
  101. package/dist/src/functions/commands/bootstrap.d.ts +1 -1
  102. package/dist/src/functions/commands/db-audit.d.ts +1 -1
  103. package/dist/src/functions/commands/db-generate.d.ts +1 -1
  104. package/dist/src/functions/commands/db-migrate.d.ts +1 -1
  105. package/dist/src/functions/commands/db-reset.d.ts +1 -1
  106. package/dist/src/functions/commands/db-seed.d.ts +1 -1
  107. package/dist/src/functions/commands/deploy-apply.d.ts +2 -2
  108. package/dist/src/functions/commands/deploy-info.d.ts +1 -1
  109. package/dist/src/functions/commands/deploy-plan.d.ts +2 -2
  110. package/dist/src/functions/commands/dev.d.ts +2 -2
  111. package/dist/src/functions/commands/emails-init.d.ts +1 -1
  112. package/dist/src/functions/commands/enable.d.ts +8 -8
  113. package/dist/src/functions/commands/import-n8n.d.ts +2 -2
  114. package/dist/src/functions/commands/info.d.ts +4 -4
  115. package/dist/src/functions/commands/login.d.ts +5 -5
  116. package/dist/src/functions/commands/meta.d.ts +25 -25
  117. package/dist/src/functions/commands/new-addon.d.ts +13 -2
  118. package/dist/src/functions/commands/new-addon.js +38 -4
  119. package/dist/src/functions/commands/new-function.d.ts +2 -2
  120. package/dist/src/functions/commands/new-middleware.d.ts +2 -2
  121. package/dist/src/functions/commands/new-permission.d.ts +2 -2
  122. package/dist/src/functions/commands/new-wiring.d.ts +2 -2
  123. package/dist/src/functions/commands/pikku-command-bootstrap.d.ts +1 -1
  124. package/dist/src/functions/commands/pikku-command-summary.d.ts +1 -1
  125. package/dist/src/functions/commands/scenario.d.ts +3 -3
  126. package/dist/src/functions/commands/scopes-audit.d.ts +1 -1
  127. package/dist/src/functions/commands/scopes-prune.d.ts +2 -2
  128. package/dist/src/functions/commands/serve.d.ts +2 -2
  129. package/dist/src/functions/commands/skills.d.ts +4 -4
  130. package/dist/src/functions/commands/versions-check.d.ts +1 -1
  131. package/dist/src/functions/commands/versions-init.d.ts +2 -2
  132. package/dist/src/functions/commands/versions-update.d.ts +1 -1
  133. package/dist/src/functions/commands/watch.d.ts +2 -2
  134. package/dist/src/functions/commands/workspace-validate.d.ts +2 -2
  135. package/dist/src/functions/runtimes/fetch/index.d.ts +1 -1
  136. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -1
  137. package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.d.ts +1 -1
  138. package/dist/src/functions/runtimes/websocket/pikku-command-websocket-typed.d.ts +1 -1
  139. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.d.ts +1 -1
  140. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.js +3 -2
  141. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.d.ts +1 -1
  142. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.d.ts +1 -1
  143. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.js +6 -2
  144. package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.d.ts +1 -1
  145. package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.js +3 -2
  146. package/dist/src/functions/wirings/ai-agent/serialize-public-agent.d.ts +5 -1
  147. package/dist/src/functions/wirings/ai-agent/serialize-public-agent.js +112 -40
  148. package/dist/src/functions/wirings/auth/pikku-command-auth.d.ts +2 -2
  149. package/dist/src/functions/wirings/auth/pikku-command-auth.js +4 -0
  150. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
  151. package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -1
  152. package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -1
  153. package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -1
  154. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -1
  155. package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +1 -1
  156. package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -1
  157. package/dist/src/functions/wirings/console/pikku-command-console-functions.d.ts +1 -1
  158. package/dist/src/functions/wirings/console/pikku-command-console-functions.js +6 -2
  159. package/dist/src/functions/wirings/console/pikku-command-node-types.d.ts +1 -1
  160. package/dist/src/functions/wirings/console/pikku-command-nodes-meta.d.ts +1 -1
  161. package/dist/src/functions/wirings/console/serialize-console-functions.d.ts +5 -1
  162. package/dist/src/functions/wirings/console/serialize-console-functions.js +55 -23
  163. package/dist/src/functions/wirings/credentials/pikku-command-credentials.d.ts +1 -1
  164. package/dist/src/functions/wirings/emails/pikku-command-emails.d.ts +1 -1
  165. package/dist/src/functions/wirings/functions/pikku-command-addon-types.d.ts +1 -1
  166. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +2 -2
  167. package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +2 -2
  168. package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -1
  169. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +2 -2
  170. package/dist/src/functions/wirings/functions/pikku-command-services.js +9 -2
  171. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  172. package/dist/src/functions/wirings/functions/schemas.js +10 -1
  173. package/dist/src/functions/wirings/functions/serialize-function-types.js +23 -12
  174. package/dist/src/functions/wirings/gateway/pikku-command-gateway.d.ts +1 -1
  175. package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.d.ts +1 -1
  176. package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.js +2 -0
  177. package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -1
  178. package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -1
  179. package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -1
  180. package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -1
  181. package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -1
  182. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -1
  183. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -1
  184. package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -1
  185. package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -1
  186. package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +3 -3
  187. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -1
  188. package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -1
  189. package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -1
  190. package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -1
  191. package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -1
  192. package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -1
  193. package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -1
  194. package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -1
  195. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.d.ts +1 -1
  196. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.js +8 -2
  197. package/dist/src/functions/wirings/realtime/pikku-command-realtime.d.ts +1 -1
  198. package/dist/src/functions/wirings/realtime/serialize-events-scaffold.d.ts +5 -4
  199. package/dist/src/functions/wirings/realtime/serialize-events-scaffold.js +17 -7
  200. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -1
  201. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.js +6 -2
  202. package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -1
  203. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -1
  204. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.js +6 -2
  205. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -1
  206. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +3 -3
  207. package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +1 -1
  208. package/dist/src/functions/wirings/rpc/serialize-public-rpc.d.ts +5 -1
  209. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +16 -5
  210. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.d.ts +5 -1
  211. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +16 -5
  212. package/dist/src/functions/wirings/scenarios/pikku-command-scenario-functions.d.ts +1 -1
  213. package/dist/src/functions/wirings/scenarios/pikku-command-scenario-functions.js +8 -2
  214. package/dist/src/functions/wirings/scenarios/serialize-scenario-functions.d.ts +5 -1
  215. package/dist/src/functions/wirings/scenarios/serialize-scenario-functions.js +22 -16
  216. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -1
  217. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -1
  218. package/dist/src/functions/wirings/scopes/pikku-command-scopes.d.ts +2 -2
  219. package/dist/src/functions/wirings/secrets/pikku-command-secrets.d.ts +1 -1
  220. package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.d.ts +2 -2
  221. package/dist/src/functions/wirings/triggers/pikku-command-trigger.d.ts +1 -1
  222. package/dist/src/functions/wirings/user-admin/pikku-command-user-admin-functions.d.ts +1 -0
  223. package/dist/src/functions/wirings/user-admin/pikku-command-user-admin-functions.js +49 -0
  224. package/dist/src/functions/wirings/user-admin/serialize-user-admin-functions.d.ts +24 -0
  225. package/dist/src/functions/wirings/user-admin/serialize-user-admin-functions.js +283 -0
  226. package/dist/src/functions/wirings/variables/pikku-command-variables.d.ts +1 -1
  227. package/dist/src/functions/wirings/webhook/pikku-command-webhook.d.ts +1 -1
  228. package/dist/src/functions/wirings/webhook/pikku-command-webhook.js +6 -2
  229. package/dist/src/functions/wirings/webhook/serialize-webhook.d.ts +5 -8
  230. package/dist/src/functions/wirings/webhook/serialize-webhook.js +19 -12
  231. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.d.ts +1 -1
  232. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.js +8 -2
  233. package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +1 -1
  234. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +2 -1
  235. package/dist/src/functions/wirings/workflow/serialize-workflow-routes.d.ts +5 -1
  236. package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +61 -31
  237. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +1 -1
  238. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +8 -2
  239. package/dist/src/functions/workflows/all.workflow.js +8 -0
  240. package/dist/src/utils/pikku-cli-config.js +40 -10
  241. package/dist/src/utils/remove-legacy-scaffold-file.d.ts +3 -0
  242. package/dist/src/utils/remove-legacy-scaffold-file.js +43 -0
  243. package/dist/src/utils/serialize-schemas.js +57 -2
  244. package/dist/tsconfig.tsbuildinfo +1 -1
  245. package/package.json +6 -6
  246. package/skills/pikku-addon/SKILL.md +1 -0
  247. package/skills/pikku-ai-agent/SKILL.md +5 -4
  248. package/skills/pikku-ai-vercel/SKILL.md +1 -0
  249. package/skills/pikku-better-auth/SKILL.md +57 -0
  250. package/skills/pikku-concepts/SKILL.md +1 -1
  251. package/skills/pikku-concepts/references/concept-mapping.md +11 -9
  252. package/skills/pikku-emails/SKILL.md +1 -0
  253. package/skills/pikku-fabric-debug/SKILL.md +112 -0
  254. package/skills/pikku-permissions/SKILL.md +8 -8
  255. package/skills/pikku-react/SKILL.md +32 -3
  256. package/skills/pikku-react-query/SKILL.md +38 -1
  257. package/skills/pikku-realtime/SKILL.md +1 -1
  258. package/skills/pikku-security/SKILL.md +3 -3
  259. package/skills/pikku-services/SKILL.md +34 -0
  260. package/skills/pikku-template-clone/SKILL.md +1 -0
  261. package/cli.schema.json +0 -1
  262. package/console-app/assets/index-CpHRlBt-.css +0 -1
  263. package/dist/.pikku/http/pikku-http-wirings-meta.gen.d.ts +0 -1
  264. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +0 -6
  265. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +0 -26
  266. package/dist/.pikku/http/pikku-http-wirings.gen.js +0 -5
  267. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.d.ts +0 -1
  268. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +0 -6
  269. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +0 -10
  270. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +0 -4
  271. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +0 -5
  272. package/dist/.pikku/schemas/schemas/RemoteRPCHandlerInput.schema.json +0 -1
  273. package/dist/src/scaffold/rpc-remote.gen.d.ts +0 -10
  274. package/dist/src/scaffold/rpc-remote.gen.js +0 -27
@@ -1,6 +1,10 @@
1
+ export interface ScenarioGenOutput {
2
+ schemas: string;
3
+ functions: string;
4
+ }
1
5
  /**
2
6
  * Generate the scenario instrumentation functions (`pikku scenario` coverage
3
7
  * snapshots and stub-call inspection) into the project scaffold, so scenario
4
8
  * runs work against any server without requiring the console addon.
5
9
  */
6
- export declare const serializeScenarioFunctions: (pathToPikkuTypes: string, requireAuth?: boolean) => string;
10
+ export declare const serializeScenarioFunctions: (pathToPikkuTypes: string, requireAuth?: boolean) => ScenarioGenOutput;
@@ -5,7 +5,19 @@
5
5
  */
6
6
  export const serializeScenarioFunctions = (pathToPikkuTypes, requireAuth = true) => {
7
7
  const authFlag = requireAuth ? 'true' : 'false';
8
- return `/**
8
+ const schemas = `/**
9
+ * Auto-generated scenario instrumentation schemas
10
+ * Do not edit manually - regenerate with 'npx pikku'
11
+ */
12
+ import { z } from 'zod'
13
+
14
+ export const StubCallsQuery = z.object({
15
+ service: z.string().optional(),
16
+ })
17
+
18
+ export const Enabled = z.object({ enabled: z.boolean() })
19
+ `;
20
+ const functions = `/**
9
21
  * Auto-generated scenario instrumentation functions
10
22
  * Do not edit manually - regenerate with 'npx pikku'
11
23
  */
@@ -16,14 +28,10 @@ import {
16
28
  getStubTracker,
17
29
  isTestRun,
18
30
  type CoverageFunctionMeta,
19
- type FunctionCoverageReport,
20
- type StubCall,
21
31
  } from '@pikku/core/services'
32
+ import { StubCallsQuery, Enabled } from './scenarios.schemas.gen.js'
22
33
 
23
- export const pikkuScenarioTakeLiveCoverage = pikkuFunc<
24
- null,
25
- FunctionCoverageReport | null
26
- >({
34
+ export const pikkuScenarioTakeLiveCoverage = pikkuFunc({
27
35
  tags: ['pikku'],
28
36
  title: 'Take Live Coverage',
29
37
  description:
@@ -50,16 +58,14 @@ export const pikkuScenarioTakeLiveCoverage = pikkuFunc<
50
58
  },
51
59
  })
52
60
 
53
- export const pikkuScenarioResetLiveCoverage = pikkuFunc<
54
- null,
55
- { enabled: boolean }
56
- >({
61
+ export const pikkuScenarioResetLiveCoverage = pikkuFunc({
57
62
  tags: ['pikku'],
58
63
  title: 'Reset Live Coverage',
59
64
  description:
60
65
  'Clears V8 precise-coverage call counts so the next takeLiveCoverage snapshot is attributable to a single scenario run. Reports enabled: false when the server was not started with coverage enabled.',
61
66
  expose: true,
62
67
  auth: ${authFlag},
68
+ output: Enabled,
63
69
  func: async ({ coverageService }) => {
64
70
  if (!coverageService) return { enabled: false }
65
71
  await coverageService.reset()
@@ -67,32 +73,32 @@ export const pikkuScenarioResetLiveCoverage = pikkuFunc<
67
73
  },
68
74
  })
69
75
 
70
- export const pikkuScenarioResetStubs = pikkuFunc<null, { enabled: boolean }>({
76
+ export const pikkuScenarioResetStubs = pikkuFunc({
71
77
  tags: ['pikku'],
72
78
  title: 'Reset Stubs',
73
79
  description:
74
80
  'Clears recorded stub calls so the next getStubCalls result is attributable to a single scenario run. Reports enabled: false when the server was not started in test mode.',
75
81
  expose: true,
76
82
  auth: ${authFlag},
83
+ output: Enabled,
77
84
  func: async () => {
78
85
  getStubTracker().reset()
79
86
  return { enabled: isTestRun() }
80
87
  },
81
88
  })
82
89
 
83
- export const pikkuScenarioGetStubCalls = pikkuFunc<
84
- { service?: string },
85
- StubCall[]
86
- >({
90
+ export const pikkuScenarioGetStubCalls = pikkuFunc({
87
91
  tags: ['pikku'],
88
92
  title: 'Get Stub Calls',
89
93
  description:
90
94
  'Returns calls recorded against stubbed/spied services (via the stub()/spy() core utils). Empty unless the server records service calls (pikku dev --test).',
91
95
  expose: true,
92
96
  auth: ${authFlag},
97
+ input: StubCallsQuery,
93
98
  func: async (_services, data) => {
94
99
  return getStubTracker().getCalls(data?.service ?? undefined)
95
100
  },
96
101
  })
97
102
  `;
103
+ return { schemas, functions };
98
104
  };
@@ -1 +1 @@
1
- export declare const pikkuSchedulerTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuSchedulerTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuScheduler: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuScheduler: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -2,6 +2,6 @@ export declare const pikkuScopes: import("#pikku").PikkuFunctionConfig<{
2
2
  bootstrap?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  bootstrap?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  bootstrap?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuSecrets: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuSecrets: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -2,6 +2,6 @@ export declare const pikkuTriggerTypes: import("#pikku").PikkuFunctionConfig<{
2
2
  bootstrap?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  bootstrap?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  bootstrap?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuTrigger: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuTrigger: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -0,0 +1 @@
1
+ export declare const pikkuUserAdminFunctions: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -0,0 +1,49 @@
1
+ import { pikkuSessionlessFunc } from '#pikku';
2
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
3
+ import { writeFileInDir } from '../../../utils/file-writer.js';
4
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ import { serializeUserAdminFunctions } from './serialize-user-admin-functions.js';
6
+ export const pikkuUserAdminFunctions = pikkuSessionlessFunc({
7
+ func: async ({ logger, config, getInspectorState }) => {
8
+ if (!config.scaffold?.userAdmin ||
9
+ !config.userAdminFunctionsFile ||
10
+ !config.userAdminSchemasFile) {
11
+ logger.debug({
12
+ message: 'Skipping user admin scaffold (set scaffold.userAdmin in pikku.config.json to enable).',
13
+ type: 'skip',
14
+ });
15
+ return false;
16
+ }
17
+ const { definition } = (await getInspectorState()).auth;
18
+ // These functions are thin wrappers over better-auth's admin() endpoints.
19
+ // Without that plugin the endpoints do not exist, so the scaffold would
20
+ // generate four RPCs that throw on every call and four scopes that grant
21
+ // nothing. Fail the codegen instead of shipping that.
22
+ if (!definition) {
23
+ throw new Error(`"scaffold.userAdmin" is enabled but no pikkuBetterAuth(...) was found in the project.\n` +
24
+ `User management wraps better-auth's admin() endpoints, so there is nothing to wrap.\n` +
25
+ `Fix: set up Better Auth before scaffolding user management, or remove ` +
26
+ `"scaffold.userAdmin" from pikku.config.json.`);
27
+ }
28
+ if (!definition.plugins.includes('admin')) {
29
+ throw new Error(`"scaffold.userAdmin" is enabled but better-auth is configured without the admin() plugin.\n` +
30
+ `Ban, delete, session-revocation and set-password are implemented by that plugin — without it ` +
31
+ `the generated functions would fail on every call.\n` +
32
+ `Fix: add admin() to the plugins array in ${definition.sourceFile}:\n` +
33
+ ` import { admin } from 'better-auth/plugins'\n` +
34
+ ` betterAuth({ plugins: [admin()] })\n` +
35
+ `Then re-run codegen. Or remove "scaffold.userAdmin" from pikku.config.json.`);
36
+ }
37
+ const pathToPikkuTypes = getFileImportRelativePath(config.userAdminFunctionsFile, config.typesDeclarationFile, config.packageMappings);
38
+ const { schemas, functions } = serializeUserAdminFunctions(pathToPikkuTypes, config.scaffold.userAdmin === 'auth');
39
+ await writeFileInDir(logger, config.userAdminSchemasFile, schemas);
40
+ await writeFileInDir(logger, config.userAdminFunctionsFile, functions);
41
+ return true;
42
+ },
43
+ middleware: [
44
+ logCommandInfoAndTime({
45
+ commandStart: 'Generating user management functions',
46
+ commandEnd: 'Generated user management functions',
47
+ }),
48
+ ],
49
+ });
@@ -0,0 +1,24 @@
1
+ export interface UserAdminGenOutput {
2
+ schemas: string;
3
+ functions: string;
4
+ }
5
+ /**
6
+ * Generate the user-management functions into the project scaffold: the
7
+ * directory read plus the writes that wrap better-auth's `admin()` endpoints.
8
+ *
9
+ * Scaffolded rather than shipped in an addon because managing users is ordinary
10
+ * application behaviour: an app should not have to install the console — which
11
+ * exists to be served alongside a running dev server — just to list or ban its
12
+ * own users. The console UI calls these same functions when it is present.
13
+ *
14
+ * Each function is gated on its own `admin:users:*` scope. The writes are only
15
+ * meaningful where `admin()` is wired, which is why this file is generated only
16
+ * in that case.
17
+ *
18
+ * Emitted as two files. The schemas are zod, and the inspector reads a zod
19
+ * schema by importing the module that declares it — which it cannot do for the
20
+ * functions file, whose relative pikku-types import per-unit deploy codegen
21
+ * rewrites. Keeping the schemas in a sibling module that imports nothing but
22
+ * zod sidesteps that entirely.
23
+ */
24
+ export declare const serializeUserAdminFunctions: (pathToPikkuTypes: string, requireAuth?: boolean) => UserAdminGenOutput;
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Generate the user-management functions into the project scaffold: the
3
+ * directory read plus the writes that wrap better-auth's `admin()` endpoints.
4
+ *
5
+ * Scaffolded rather than shipped in an addon because managing users is ordinary
6
+ * application behaviour: an app should not have to install the console — which
7
+ * exists to be served alongside a running dev server — just to list or ban its
8
+ * own users. The console UI calls these same functions when it is present.
9
+ *
10
+ * Each function is gated on its own `admin:users:*` scope. The writes are only
11
+ * meaningful where `admin()` is wired, which is why this file is generated only
12
+ * in that case.
13
+ *
14
+ * Emitted as two files. The schemas are zod, and the inspector reads a zod
15
+ * schema by importing the module that declares it — which it cannot do for the
16
+ * functions file, whose relative pikku-types import per-unit deploy codegen
17
+ * rewrites. Keeping the schemas in a sibling module that imports nothing but
18
+ * zod sidesteps that entirely.
19
+ */
20
+ export const serializeUserAdminFunctions = (pathToPikkuTypes, requireAuth = true) => {
21
+ const authFlag = requireAuth ? 'true' : 'false';
22
+ const schemas = `/**
23
+ * Auto-generated user management schemas
24
+ * Do not edit manually - regenerate with 'npx pikku'
25
+ */
26
+ import { z } from 'zod'
27
+
28
+ /**
29
+ * A user, as the directory sees one. Ban state is optional because those
30
+ * columns belong to better-auth's \`admin()\` plugin: a host without it reports
31
+ * no ban state at all, which a client can render as "unknown" rather than as a
32
+ * misleading "not banned".
33
+ */
34
+ export const User = z.object({
35
+ id: z.string(),
36
+ email: z.string(),
37
+ name: z.string().optional(),
38
+ image: z.string().optional(),
39
+ createdAt: z.string().optional(),
40
+ banned: z.boolean().optional(),
41
+ banReason: z.string().optional(),
42
+ banExpires: z.string().optional(),
43
+ })
44
+
45
+ export const ListUsersInput = z.object({
46
+ search: z.string().optional(),
47
+ limit: z.number().int().positive().optional(),
48
+ })
49
+
50
+ export const ListUsersOutput = z.object({
51
+ users: z.array(User),
52
+ })
53
+
54
+ export const CreateUserInput = z.object({
55
+ email: z.string(),
56
+ password: z.string(),
57
+ name: z.string().optional(),
58
+ })
59
+
60
+ export const CreateUserOutput = z.object({
61
+ userId: z.string(),
62
+ })
63
+
64
+ /** Every write targets one user by id. */
65
+ export const UserRef = z.object({
66
+ userId: z.string(),
67
+ })
68
+
69
+ export const SetUserBannedInput = z.object({
70
+ userId: z.string(),
71
+ banned: z.boolean(),
72
+ reason: z.string().optional(),
73
+ expiresInSeconds: z.number().int().positive().optional(),
74
+ })
75
+
76
+ export const SetUserPasswordInput = z.object({
77
+ userId: z.string(),
78
+ newPassword: z.string(),
79
+ })
80
+
81
+ export const Success = z.object({
82
+ success: z.boolean(),
83
+ })
84
+ `;
85
+ const functions = `/**
86
+ * Auto-generated user management functions
87
+ * Do not edit manually - regenerate with 'npx pikku'
88
+ */
89
+ import { pikkuFunc, wireScope } from '${pathToPikkuTypes}'
90
+ import { callAdminApi } from '@pikku/better-auth'
91
+ import {
92
+ CreateUserInput,
93
+ CreateUserOutput,
94
+ ListUsersInput,
95
+ ListUsersOutput,
96
+ SetUserBannedInput,
97
+ SetUserPasswordInput,
98
+ Success,
99
+ UserRef,
100
+ } from './user-admin.schemas.gen.js'
101
+
102
+ // pikku requires every declaration of a shared scope root to be identical, so
103
+ // this is the whole \`admin\` tree — not just the leaves gated below. It must stay
104
+ // byte-identical to ADMIN_SCOPE_TREE in @pikku/better-auth and to the copy in
105
+ // @pikku/addon-console, or codegen fails with conflicting declarations.
106
+ wireScope({
107
+ admin: {
108
+ displayName: 'Administration',
109
+ description: 'Capabilities that act on the application as a whole',
110
+ scopes: {
111
+ impersonate: { description: 'Act as another user' },
112
+ credentials: {
113
+ description: 'Application-wide credentials',
114
+ scopes: {
115
+ link: { description: 'Bind a shared credential for every user' },
116
+ },
117
+ },
118
+ users: {
119
+ description: 'The user directory',
120
+ scopes: {
121
+ list: { description: 'List and search users' },
122
+ create: { description: 'Create users out of band' },
123
+ ban: { description: 'Ban and unban users' },
124
+ remove: { description: 'Delete users and all their data' },
125
+ sessions: { description: "Revoke a user's sessions" },
126
+ password: { description: "Set a user's password" },
127
+ },
128
+ },
129
+ },
130
+ },
131
+ })
132
+
133
+ /**
134
+ * Synthetic principals — the platform credential owner, fabric service users
135
+ * and agent actors — are not people, so they never belong in a directory a
136
+ * human picks from.
137
+ */
138
+ const isPerson = (row: any) =>
139
+ row.fabric !== true && row.actor !== true && row.id !== 'pikku-platform'
140
+
141
+ export const pikkuAdminListUsers = pikkuFunc({
142
+ tags: ['pikku'],
143
+ title: 'List Users',
144
+ description:
145
+ 'Lists and searches the user directory, read through the auth adapter rather than an admin endpoint so it works on any database better-auth supports.',
146
+ expose: true,
147
+ auth: ${authFlag},
148
+ scopes: ['admin:users:list'],
149
+ input: ListUsersInput,
150
+ output: ListUsersOutput,
151
+ func: async ({ auth }, { search, limit }) => {
152
+ const ctx = await (await auth()).$context
153
+ const rows = (await ctx.adapter.findMany({
154
+ model: 'user',
155
+ limit: limit ?? 200,
156
+ where: search
157
+ ? [{ field: 'email', operator: 'contains', value: search }]
158
+ : undefined,
159
+ })) as any[]
160
+
161
+ return {
162
+ users: rows.filter(isPerson).map((row) => ({
163
+ id: row.id,
164
+ email: row.email,
165
+ name: row.name ?? undefined,
166
+ image: row.image ?? undefined,
167
+ createdAt: row.createdAt
168
+ ? new Date(row.createdAt).toISOString()
169
+ : undefined,
170
+ banned: typeof row.banned === 'boolean' ? row.banned : undefined,
171
+ banReason: row.banReason ?? undefined,
172
+ banExpires: row.banExpires
173
+ ? new Date(row.banExpires).toISOString()
174
+ : undefined,
175
+ })),
176
+ }
177
+ },
178
+ })
179
+
180
+ export const pikkuAdminCreateUser = pikkuFunc({
181
+ tags: ['pikku'],
182
+ title: 'Create User',
183
+ description:
184
+ 'Creates a user directly, for provisioning an account out of band rather than through your sign-up flow. better-auth enforces the configured password bounds and rejects a duplicate email.',
185
+ expose: true,
186
+ auth: ${authFlag},
187
+ scopes: ['admin:users:create'],
188
+ input: CreateUserInput,
189
+ output: CreateUserOutput,
190
+ func: async ({ auth }, { email, password, name }, { http }) => {
191
+ const created: any = await callAdminApi(auth, http, (api, headers) =>
192
+ api.createUser!({
193
+ body: { email, password, name: name ?? email },
194
+ headers,
195
+ })
196
+ )
197
+ return { userId: created?.user?.id ?? created?.id }
198
+ },
199
+ })
200
+
201
+ export const pikkuAdminSetUserBanned = pikkuFunc({
202
+ tags: ['pikku'],
203
+ title: 'Ban or Unban User',
204
+ description:
205
+ 'Bans a user — revoking their sessions and blocking sign-in — or lifts an existing ban. An expiry lets the ban lapse on its own; without one it holds until it is lifted.',
206
+ expose: true,
207
+ auth: ${authFlag},
208
+ scopes: ['admin:users:ban'],
209
+ input: SetUserBannedInput,
210
+ output: Success,
211
+ func: async (
212
+ { auth },
213
+ { userId, banned, reason, expiresInSeconds },
214
+ { http }
215
+ ) => {
216
+ await callAdminApi(auth, http, (api, headers) =>
217
+ banned
218
+ ? api.banUser!({
219
+ body: { userId, banReason: reason, banExpiresIn: expiresInSeconds },
220
+ headers,
221
+ })
222
+ : api.unbanUser!({ body: { userId }, headers })
223
+ )
224
+ return { success: true }
225
+ },
226
+ })
227
+
228
+ export const pikkuAdminRemoveUser = pikkuFunc({
229
+ tags: ['pikku'],
230
+ title: 'Remove User',
231
+ description:
232
+ 'Permanently deletes a user along with their sessions and linked accounts. Cannot be undone.',
233
+ expose: true,
234
+ auth: ${authFlag},
235
+ scopes: ['admin:users:remove'],
236
+ input: UserRef,
237
+ output: Success,
238
+ func: async ({ auth }, { userId }, { http }) => {
239
+ await callAdminApi(auth, http, (api, headers) =>
240
+ api.removeUser!({ body: { userId }, headers })
241
+ )
242
+ return { success: true }
243
+ },
244
+ })
245
+
246
+ export const pikkuAdminRevokeUserSessions = pikkuFunc({
247
+ tags: ['pikku'],
248
+ title: 'Revoke User Sessions',
249
+ description:
250
+ 'Signs a user out of every device by deleting all of their sessions. They keep their account and can sign in again.',
251
+ expose: true,
252
+ auth: ${authFlag},
253
+ scopes: ['admin:users:sessions'],
254
+ input: UserRef,
255
+ output: Success,
256
+ func: async ({ auth }, { userId }, { http }) => {
257
+ await callAdminApi(auth, http, (api, headers) =>
258
+ api.revokeUserSessions!({ body: { userId }, headers })
259
+ )
260
+ return { success: true }
261
+ },
262
+ })
263
+
264
+ export const pikkuAdminSetUserPassword = pikkuFunc({
265
+ tags: ['pikku'],
266
+ title: "Set User's Password",
267
+ description:
268
+ 'Sets a user password out of band, for when they cannot complete a reset themselves. better-auth enforces the configured length bounds.',
269
+ expose: true,
270
+ auth: ${authFlag},
271
+ scopes: ['admin:users:password'],
272
+ input: SetUserPasswordInput,
273
+ output: Success,
274
+ func: async ({ auth }, { userId, newPassword }, { http }) => {
275
+ await callAdminApi(auth, http, (api, headers) =>
276
+ api.setUserPassword!({ body: { userId, newPassword }, headers })
277
+ )
278
+ return { success: true }
279
+ },
280
+ })
281
+ `;
282
+ return { schemas, functions };
283
+ };
@@ -1 +1 @@
1
- export declare const pikkuVariables: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuVariables: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuWebhook: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuWebhook: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -2,6 +2,7 @@ import { pikkuSessionlessFunc } from '#pikku';
2
2
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js';
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ import { removeLegacyScaffoldFile } from '../../../utils/remove-legacy-scaffold-file.js';
5
6
  import { serializeWebhook } from './serialize-webhook.js';
6
7
  export const pikkuWebhook = pikkuSessionlessFunc({
7
8
  func: async ({ logger, config, variables }) => {
@@ -9,9 +10,12 @@ export const pikkuWebhook = pikkuSessionlessFunc({
9
10
  if (deployCodegenFlag === '1') {
10
11
  return false;
11
12
  }
12
- if (config.webhookWorkersFile) {
13
+ if (config.webhookWorkersFile && config.webhookSchemasFile) {
13
14
  const pathToPikkuTypes = getFileImportRelativePath(config.webhookWorkersFile, config.typesDeclarationFile, config.packageMappings);
14
- await writeFileInDir(logger, config.webhookWorkersFile, serializeWebhook(pathToPikkuTypes));
15
+ const { schemas, functions } = serializeWebhook(pathToPikkuTypes);
16
+ await writeFileInDir(logger, config.webhookSchemasFile, schemas);
17
+ await writeFileInDir(logger, config.webhookWorkersFile, functions);
18
+ await removeLegacyScaffoldFile(config.webhookWorkersFile);
15
19
  return true;
16
20
  }
17
21
  return false;
@@ -1,14 +1,11 @@
1
+ export interface WebhookGenOutput {
2
+ schemas: string;
3
+ functions: string;
4
+ }
1
5
  /**
2
6
  * Generate the outgoing webhook delivery queue worker.
3
7
  *
4
- * The payload type is an inline TS literal (not zod): the inspector imports a
5
- * zod schema's declaring module at codegen time, and the wiring file's
6
- * pikku-types import can go stale between deploy per-unit codegen runs, which
7
- * would fail schema generation before the wiring gets rewritten. TS-based
8
- * schema generation goes through the type checker instead, so it never
9
- * imports this file.
10
- *
11
8
  * The handler is inlined: it is wired exactly once, so a named export would
12
9
  * only be indirection.
13
10
  */
14
- export declare const serializeWebhook: (pathToPikkuTypes: string) => string;
11
+ export declare const serializeWebhook: (pathToPikkuTypes: string) => WebhookGenOutput;
@@ -1,34 +1,41 @@
1
1
  /**
2
2
  * Generate the outgoing webhook delivery queue worker.
3
3
  *
4
- * The payload type is an inline TS literal (not zod): the inspector imports a
5
- * zod schema's declaring module at codegen time, and the wiring file's
6
- * pikku-types import can go stale between deploy per-unit codegen runs, which
7
- * would fail schema generation before the wiring gets rewritten. TS-based
8
- * schema generation goes through the type checker instead, so it never
9
- * imports this file.
10
- *
11
4
  * The handler is inlined: it is wired exactly once, so a named export would
12
5
  * only be indirection.
13
6
  */
14
7
  export const serializeWebhook = (pathToPikkuTypes) => {
15
- return `/**
8
+ const schemas = `/**
9
+ * Auto-generated outgoing webhook delivery schemas
10
+ * Do not edit manually - regenerate with 'npx pikku'
11
+ */
12
+ import { z } from 'zod'
13
+
14
+ export const WebhookDelivery = z.object({
15
+ url: z.string(),
16
+ event: z.string().optional(),
17
+ body: z.string(),
18
+ headers: z.record(z.string(), z.string()),
19
+ deliveryId: z.string().optional(),
20
+ })
21
+ `;
22
+ const functions = `/**
16
23
  * Auto-generated outgoing webhook delivery queue worker
17
24
  * Do not edit manually - regenerate with 'npx pikku'
18
25
  */
19
26
  import { pikkuSessionlessFunc, wireQueueWorker } from '${pathToPikkuTypes}'
20
27
  import { pikkuWebhookWorkerFunc } from '@pikku/core/services'
28
+ import { WebhookDelivery } from './webhook.schemas.gen.js'
21
29
 
22
30
  wireQueueWorker({
23
31
  name: 'pikku-outgoing-webhooks',
24
32
  tags: ['pikku'],
25
- func: pikkuSessionlessFunc<
26
- { url: string, event?: string, body: string, headers: Record<string, string>, deliveryId?: string },
27
- void
28
- >({
33
+ func: pikkuSessionlessFunc({
29
34
  tags: ['pikku'],
35
+ input: WebhookDelivery,
30
36
  func: async (services, data) => pikkuWebhookWorkerFunc(services, data),
31
37
  }),
32
38
  })
33
39
  `;
40
+ return { schemas, functions };
34
41
  };
@@ -1 +1 @@
1
- export declare const pikkuWorkflowRoutes: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuWorkflowRoutes: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -2,12 +2,18 @@ import { pikkuSessionlessFunc } from '#pikku';
2
2
  import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js';
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ import { removeLegacyScaffoldFile } from '../../../utils/remove-legacy-scaffold-file.js';
5
6
  import { serializeWorkflowRoutes } from './serialize-workflow-routes.js';
6
7
  export const pikkuWorkflowRoutes = pikkuSessionlessFunc({
7
8
  func: async ({ logger, config }) => {
8
- if (config.scaffold?.workflow && config.workflowRoutesFile) {
9
+ if (config.scaffold?.workflow &&
10
+ config.workflowRoutesFile &&
11
+ config.workflowRoutesSchemasFile) {
9
12
  const pathToPikkuTypes = getFileImportRelativePath(config.workflowRoutesFile, config.typesDeclarationFile, config.packageMappings);
10
- await writeFileInDir(logger, config.workflowRoutesFile, serializeWorkflowRoutes(pathToPikkuTypes, config.scaffold?.workflow === 'auth'));
13
+ const { schemas, functions } = serializeWorkflowRoutes(pathToPikkuTypes, config.scaffold?.workflow === 'auth');
14
+ await writeFileInDir(logger, config.workflowRoutesSchemasFile, schemas);
15
+ await writeFileInDir(logger, config.workflowRoutesFile, functions);
16
+ await removeLegacyScaffoldFile(config.workflowRoutesFile);
11
17
  return true;
12
18
  }
13
19
  return false;
@@ -1,5 +1,5 @@
1
1
  type WorkflowCommandInput = {
2
2
  bootstrap?: boolean;
3
3
  };
4
- export declare const pikkuWorkflow: import("#pikku").PikkuFunctionConfig<WorkflowCommandInput, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<WorkflowCommandInput, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<WorkflowCommandInput, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
4
+ export declare const pikkuWorkflow: import("#pikku").PikkuFunctionConfig<WorkflowCommandInput, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<WorkflowCommandInput, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<WorkflowCommandInput, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
5
5
  export {};