@pikku/cli 0.12.96 → 0.12.100
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.
- package/console-app/assets/abnfDiagram-VRR7QNED-Icjp9hnB.js +1 -0
- package/console-app/assets/arc-BfGls--L.js +1 -0
- package/console-app/assets/architecture-TIHT7OUA-C8l7I5Lm.js +1 -0
- package/console-app/assets/architectureDiagram-ZJ3FMSHR-CpnsLBns.js +36 -0
- package/console-app/assets/array-BifhSqXX.js +1 -0
- package/console-app/assets/blockDiagram-677ZJIJ3-ByKRMGSr.js +132 -0
- package/console-app/assets/c4Diagram-LMCZKHZV-CzJSbsUo.js +10 -0
- package/console-app/assets/channel-BgJ-Z0cx.js +1 -0
- package/console-app/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/console-app/assets/chunk-32BRIVSS-D_tc4HCY.js +1 -0
- package/console-app/assets/chunk-52WLFC77-wkQkuUXG.js +10 -0
- package/console-app/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/console-app/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
- package/console-app/assets/chunk-C7G6YPKG-BFW3xG3R.js +1 -0
- package/console-app/assets/chunk-EX3LRPZG-Car090Sw.js +231 -0
- package/console-app/assets/chunk-FWX5IMBZ-c2ud9kQ-.js +2 -0
- package/console-app/assets/chunk-HOUHSVGY-RYmQka5R.js +1 -0
- package/console-app/assets/chunk-ICXQ74PX-C-dqYC_9.js +2 -0
- package/console-app/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/console-app/assets/chunk-KEIR6QF5-DNzq6p3w.js +161 -0
- package/console-app/assets/chunk-MOJQB5TN-Cu3FUWwl.js +88 -0
- package/console-app/assets/chunk-OGEWGWER-Z7f1yArD.js +1 -0
- package/console-app/assets/chunk-PUDLZKDR-Bp68DuRj.js +156 -0
- package/console-app/assets/chunk-Q4XR5HBZ-CdKSYWZ4.js +70 -0
- package/console-app/assets/chunk-RYQCIY6F-9ISCAKm2.js +1 -0
- package/console-app/assets/chunk-V7JOEXUC-2EOc1nQB.js +206 -0
- package/console-app/assets/chunk-VAUOI2AC-DwKsbf70.js +1 -0
- package/console-app/assets/chunk-VR4S4FIN-BPvN0PUm.js +1 -0
- package/console-app/assets/chunk-WYO6CB5R-DOpurCTP.js +127 -0
- package/console-app/assets/chunk-XXDRQBXY-RuYSFsQb.js +1 -0
- package/console-app/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/console-app/assets/chunk-ZGVPDNZ5-Bu2weVOL.js +62 -0
- package/console-app/assets/chunk-ZIRB5QZD-H-kepumB.js +32 -0
- package/console-app/assets/classDiagram-OUVF2IWQ-ohoLCI8g.js +1 -0
- package/console-app/assets/classDiagram-v2-EOCWNBFH-ohoLCI8g.js +1 -0
- package/console-app/assets/cose-bilkent-JH36ORCC-nau-QGCX.js +1 -0
- package/console-app/assets/cynefin-VYW2F7L2-BBw-E7lg.js +1 -0
- package/console-app/assets/cynefinDiagram-TSTJHNR4-BvnMvOvH.js +62 -0
- package/console-app/assets/cytoscape.esm-h6BdjjI9.js +321 -0
- package/console-app/assets/dagre-CXRCoUWR.js +1 -0
- package/console-app/assets/dagre-VKFMJZFB-CHEqPR29.js +4 -0
- package/console-app/assets/defaultLocale-C8Fc0cco.js +1 -0
- package/console-app/assets/diagram-FQU43EPY-JijKRWyb.js +3 -0
- package/console-app/assets/diagram-G47NLZAW-G5UsB31f.js +24 -0
- package/console-app/assets/diagram-NH7WQ7WH-BhuJ6fPu.js +24 -0
- package/console-app/assets/diagram-OA4YK3LP-DaUF-8N4.js +30 -0
- package/console-app/assets/diagram-WEI45ONY-wLsJIhoM.js +41 -0
- package/console-app/assets/dist-fbBkbDNG.js +1 -0
- package/console-app/assets/ebnfDiagram-CCIWWBDH-BZCEa3Dz.js +1 -0
- package/console-app/assets/erDiagram-Q63AITRT-4XoEUtEh.js +85 -0
- package/console-app/assets/eventmodeling-45OFAUF4-DZ7z4YJO.js +1 -0
- package/console-app/assets/flowDiagram-23GEKE2U-rd7-NwZT.js +1 -0
- package/console-app/assets/ganttDiagram-NO4QXBWP-BXU7pfq6.js +292 -0
- package/console-app/assets/gitGraph-TEB2WS4Q-BdMAmvpU.js +1 -0
- package/console-app/assets/gitGraphDiagram-IHSO6WYX-3Hn0zwZR.js +106 -0
- package/console-app/assets/graphlib-B8gBHxth.js +1 -0
- package/console-app/assets/{index-CyYHTGWZ.css → index-BXMjqLQ5.css} +1 -1
- package/console-app/assets/{index-CeQodYfg.js → index-Din2vBeb.js} +153 -165
- package/console-app/assets/info-DKCQHKI2-Dc_oQkp5.js +1 -0
- package/console-app/assets/infoDiagram-FWYZ7A6U-B3v4xCUn.js +2 -0
- package/console-app/assets/init-D6jRqBbL.js +1 -0
- package/console-app/assets/ishikawaDiagram-FXEZZL3T-DzWq9Vtp.js +70 -0
- package/console-app/assets/journeyDiagram-5HDEW3XC-C0buWi_a.js +139 -0
- package/console-app/assets/kanban-definition-HUTT4EX6-DRAN9HhV.js +89 -0
- package/console-app/assets/katex-Vhh-h91d.js +257 -0
- package/console-app/assets/line-UqgRNiAC.js +1 -0
- package/console-app/assets/linear-FTAGuk_3.js +1 -0
- package/console-app/assets/map-DsCK-0Cs.js +1 -0
- package/console-app/assets/mermaid-parser.core-DIHI27FL.js +7 -0
- package/console-app/assets/mermaid.core-D4q8kvcu.js +11 -0
- package/console-app/assets/mindmap-definition-LN4V7U3C-DN-_CNLb.js +96 -0
- package/console-app/assets/ordinal-hYBb2elL.js +1 -0
- package/console-app/assets/packet-7NZHBO7P-8a3PoQAb.js +1 -0
- package/console-app/assets/path-BWPyau1x.js +1 -0
- package/console-app/assets/pegDiagram-2B236MQR-Bh2MhzCN.js +1 -0
- package/console-app/assets/pie-RZYD4A2V-Bi6zbJDl.js +1 -0
- package/console-app/assets/pieDiagram-ENE6RG2P-D2Z0W5UU.js +39 -0
- package/console-app/assets/quadrantDiagram-ABIIQ3AL-DNOKka0p.js +7 -0
- package/console-app/assets/radar-I7S5WNFK-CAxa68Sg.js +1 -0
- package/console-app/assets/railroad-3IZDKUUU-CZb1usP7.js +1 -0
- package/console-app/assets/railroad-abnf-AHOZXSZD-DkQZciri.js +1 -0
- package/console-app/assets/railroad-ebnf-EBAXGLYW-CPBeASA9.js +1 -0
- package/console-app/assets/railroad-peg-LSFZ7HO6-CXEVIZ0g.js +1 -0
- package/console-app/assets/railroadDiagram-RFXS5EU6-B1K2hbTD.js +1 -0
- package/console-app/assets/requirementDiagram-TGXJPOKE-K8wcOO0Q.js +84 -0
- package/console-app/assets/rough.esm-CSKSodPl.js +1 -0
- package/console-app/assets/sankeyDiagram-HTMAVEWB-WBPBkgNx.js +40 -0
- package/console-app/assets/sequenceDiagram-DBY2YBRQ-Dz80qZZv.js +162 -0
- package/console-app/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
- package/console-app/assets/src-CnJCXDL0.js +1 -0
- package/console-app/assets/stateDiagram-2N3HPSRC-DMur7lZf.js +1 -0
- package/console-app/assets/stateDiagram-v2-6OUMAXLB-BDgLCrot.js +1 -0
- package/console-app/assets/swimlanes-5IMT3BWC-BlLdYcPU.js +2 -0
- package/console-app/assets/swimlanesDiagram-G3AALYLV-CZ5rQIcE.js +8 -0
- package/console-app/assets/timeline-definition-FHXFAJF6-CBOit0JY.js +120 -0
- package/console-app/assets/treeView-QDETBFTQ-DM1i1ast.js +1 -0
- package/console-app/assets/treemap-6X3UGDF4-ACrBEfY6.js +1 -0
- package/console-app/assets/vennDiagram-L72KCM5P-BmeFWb5N.js +34 -0
- package/console-app/assets/wardley-OPB4EBWU-BpIbeh58.js +1 -0
- package/console-app/assets/wardleyDiagram-EHGQE667-CxL7Mv7y.js +78 -0
- package/console-app/assets/xychartDiagram-FW5EYKEG-DkV75xT2.js +7 -0
- package/console-app/index.html +2 -2
- package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
- package/dist/.pikku/auth/auth.types.d.ts +1 -1
- package/dist/.pikku/auth/auth.types.js +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-channel.d.ts +11 -2
- package/dist/.pikku/cli/pikku-cli-channel.js +23 -8
- package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-client.gen.js +36 -9
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +2 -2
- package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +7 -8
- package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
- package/dist/.pikku/cli/pikku-cli.gen.js +18 -2
- package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +24 -9
- package/dist/.pikku/function/pikku-function-types.gen.js +2 -2
- package/dist/.pikku/function/pikku-functions-meta.gen.js +2 -2
- package/dist/.pikku/function/pikku-functions-meta.gen.json +48 -39
- package/dist/.pikku/function/pikku-functions.gen.js +3 -3
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap-scenarios.gen.d.ts +1 -1
- package/dist/.pikku/pikku-bootstrap-scenarios.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
- package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
- package/dist/.pikku/pikku-meta-service.gen.js +1 -1
- package/dist/.pikku/pikku-services.gen.d.ts +2 -1
- package/dist/.pikku/pikku-services.gen.js +1 -0
- package/dist/.pikku/pikku-types.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +2 -2
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +2 -2
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +1 -1
- package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js +2 -2
- package/dist/.pikku/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
- package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js +2 -2
- package/dist/.pikku/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
- package/dist/.pikku/scenarios/schemas/register.gen.d.ts +1 -1
- package/dist/.pikku/scenarios/schemas/register.gen.js +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/schemas/register.gen.js +3 -3
- package/dist/.pikku/schemas/schemas/DbResetInput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/{DbSeedInput.schema.json → PikkuVirtualUserFunctionsOutput.schema.json} +1 -1
- package/dist/.pikku/scopes/pikku-personas.gen.js +1 -1
- package/dist/.pikku/scopes/pikku-roles.gen.d.ts +1 -1
- package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
- package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
- package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
- package/dist/.pikku/workflow/meta/allWorkflow.gen.json +20 -14
- package/dist/.pikku/workflow/pikku-personas.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +29 -13
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +2 -2
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
- package/dist/bin/pikku-bin.mjs +2 -2
- package/dist/src/cli.wiring.js +8 -7
- package/dist/src/deploy/analyzer/analyzer.js +0 -6
- package/dist/src/deploy/codegen/per-unit-codegen.js +0 -3
- package/dist/src/deploy/server-entry.js +1 -1
- package/dist/src/fabric/fabric-commands.d.ts +26 -26
- package/dist/src/fabric/functions/add.function.d.ts +1 -1
- package/dist/src/fabric/functions/addon-verify.function.d.ts +1 -1
- package/dist/src/fabric/functions/db-schema.function.d.ts +1 -1
- package/dist/src/fabric/functions/deploy-list.function.d.ts +1 -1
- package/dist/src/fabric/functions/deploy-units.function.d.ts +1 -1
- package/dist/src/fabric/functions/deploy.function.d.ts +2 -2
- package/dist/src/fabric/functions/domains-add.function.d.ts +1 -1
- package/dist/src/fabric/functions/domains-list.function.d.ts +1 -1
- package/dist/src/fabric/functions/domains-remove.function.d.ts +1 -1
- package/dist/src/fabric/functions/errors.function.d.ts +1 -1
- package/dist/src/fabric/functions/init.function.d.ts +1 -1
- package/dist/src/fabric/functions/link.function.d.ts +1 -1
- package/dist/src/fabric/functions/llm-key.function.d.ts +1 -1
- package/dist/src/fabric/functions/login.function.d.ts +1 -1
- package/dist/src/fabric/functions/logs.function.d.ts +1 -1
- package/dist/src/fabric/functions/metrics.function.d.ts +1 -1
- package/dist/src/fabric/functions/publish.function.d.ts +1 -1
- package/dist/src/fabric/functions/rollback.function.d.ts +1 -1
- package/dist/src/fabric/functions/secrets-list.function.d.ts +1 -1
- package/dist/src/fabric/functions/secrets-rotate.function.d.ts +1 -1
- package/dist/src/fabric/functions/secrets-set.function.d.ts +1 -1
- package/dist/src/fabric/functions/smoke.function.d.ts +1 -1
- package/dist/src/fabric/functions/status.function.d.ts +1 -1
- package/dist/src/fabric/functions/trace.function.d.ts +1 -1
- package/dist/src/fabric/functions/validate.function.d.ts +1 -1
- package/dist/src/fabric/functions/validate.function.js +76 -176
- package/dist/src/functions/commands/all.d.ts +1 -1
- package/dist/src/functions/commands/audit.d.ts +1 -1
- package/dist/src/functions/commands/binary.d.ts +1 -1
- package/dist/src/functions/commands/bootstrap.d.ts +1 -1
- package/dist/src/functions/commands/db-audit.d.ts +1 -1
- package/dist/src/functions/commands/db-audit.js +1 -1
- package/dist/src/functions/commands/db-baseline.d.ts +1 -1
- package/dist/src/functions/commands/db-baseline.js +1 -1
- package/dist/src/functions/commands/db-check.d.ts +1 -1
- package/dist/src/functions/commands/db-check.js +6 -5
- package/dist/src/functions/commands/db-codegen.d.ts +1 -1
- package/dist/src/functions/commands/db-codegen.js +1 -1
- package/dist/src/functions/commands/db-export.d.ts +1 -1
- package/dist/src/functions/commands/db-generate.d.ts +1 -1
- package/dist/src/functions/commands/db-generate.js +1 -1
- package/dist/src/functions/commands/db-migrate.d.ts +1 -1
- package/dist/src/functions/commands/db-migrate.js +1 -1
- package/dist/src/functions/commands/db-reset.d.ts +15 -1
- package/dist/src/functions/commands/db-reset.js +18 -6
- package/dist/src/functions/commands/db-shared.d.ts +14 -0
- package/dist/src/functions/commands/deploy-apply.d.ts +1 -1
- package/dist/src/functions/commands/deploy-info.d.ts +1 -1
- package/dist/src/functions/commands/deploy-plan.d.ts +1 -1
- package/dist/src/functions/commands/dev.d.ts +1 -1
- package/dist/src/functions/commands/dev.js +2 -2
- package/dist/src/functions/commands/emails-init.d.ts +1 -1
- package/dist/src/functions/commands/enable.d.ts +8 -8
- package/dist/src/functions/commands/import-n8n.d.ts +1 -1
- package/dist/src/functions/commands/info.d.ts +4 -4
- package/dist/src/functions/commands/knowledge-index.d.ts +1 -1
- package/dist/src/functions/commands/knowledge-validate.d.ts +1 -1
- package/dist/src/functions/commands/login.d.ts +3 -3
- package/dist/src/functions/commands/meta.d.ts +19 -19
- package/dist/src/functions/commands/new-addon.d.ts +1 -1
- package/dist/src/functions/commands/new-addon.js +2 -2
- package/dist/src/functions/commands/new-function.d.ts +1 -1
- package/dist/src/functions/commands/new-middleware.d.ts +1 -1
- package/dist/src/functions/commands/new-permission.d.ts +1 -1
- package/dist/src/functions/commands/new-wiring.d.ts +1 -1
- package/dist/src/functions/commands/persona-sync.d.ts +2 -2
- package/dist/src/functions/commands/persona-sync.js +1 -1
- package/dist/src/functions/commands/persona.d.ts +2 -2
- package/dist/src/functions/commands/persona.js +16 -18
- package/dist/src/functions/commands/pikku-command-bootstrap.d.ts +1 -1
- package/dist/src/functions/commands/pikku-command-summary.d.ts +1 -1
- package/dist/src/functions/commands/roles-audit.d.ts +1 -1
- package/dist/src/functions/commands/roles-prune.d.ts +1 -1
- package/dist/src/functions/commands/scenario-ladder.js +1 -1
- package/dist/src/functions/commands/scenario.d.ts +2 -2
- package/dist/src/functions/commands/scenario.js +40 -11
- package/dist/src/functions/commands/scopes-audit.d.ts +1 -1
- package/dist/src/functions/commands/scopes-prune.d.ts +1 -1
- package/dist/src/functions/commands/scopes-shared.d.ts +4 -0
- package/dist/src/functions/commands/scopes-shared.js +1 -1
- package/dist/src/functions/commands/serve.d.ts +1 -1
- package/dist/src/functions/commands/serve.js +2 -2
- package/dist/src/functions/commands/skills.d.ts +2 -2
- package/dist/src/functions/commands/versions-check.d.ts +1 -1
- package/dist/src/functions/commands/versions-check.js +3 -3
- package/dist/src/functions/commands/versions-init.d.ts +1 -1
- package/dist/src/functions/commands/versions-update.d.ts +1 -1
- package/dist/src/functions/commands/watch.d.ts +1 -1
- package/dist/src/functions/commands/workspace-validate.d.ts +1 -1
- package/dist/src/functions/db/annotation-parser.d.ts +14 -0
- package/dist/src/functions/db/annotation-parser.js +50 -2
- package/dist/src/functions/db/better-auth-schema.js +2 -1
- package/dist/src/functions/db/db-codegen.d.ts +12 -0
- package/dist/src/functions/db/db-codegen.js +149 -16
- package/dist/src/functions/db/local-db.d.ts +87 -6
- package/dist/src/functions/db/local-db.js +202 -35
- package/dist/src/functions/db/sqlite/dev-seed.d.ts +12 -0
- package/dist/src/functions/db/sqlite/dev-seed.js +23 -0
- package/dist/src/functions/db/sqlite/sqlite-runtime-bun.js +1 -1
- package/dist/src/functions/runtimes/fetch/index.d.ts +1 -1
- package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -1
- package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.d.ts +1 -1
- package/dist/src/functions/runtimes/websocket/pikku-command-websocket-typed.d.ts +1 -1
- package/dist/src/functions/validate/bootstrap-checks.d.ts +19 -0
- package/dist/src/functions/validate/bootstrap-checks.js +90 -0
- package/dist/src/functions/validate/persona-checks.d.ts +24 -0
- package/dist/src/functions/validate/persona-checks.js +136 -0
- package/dist/src/functions/validate/scenario-file-checks.d.ts +17 -0
- package/dist/src/functions/validate/scenario-file-checks.js +123 -0
- package/dist/src/functions/validate/shared-checks.d.ts +59 -0
- package/dist/src/functions/validate/shared-checks.js +311 -0
- package/dist/src/functions/validate/workspace-validate.d.ts +1 -2
- package/dist/src/functions/validate/workspace-validate.js +4 -196
- package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.d.ts +1 -1
- package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.d.ts +1 -1
- package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.js +1 -1
- package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.d.ts +1 -1
- package/dist/src/functions/wirings/auth/pikku-command-auth.d.ts +1 -1
- package/dist/src/functions/wirings/auth/serialize-auth-gen.js +16 -1
- package/dist/src/functions/wirings/auth/serialize-auth-types.d.ts +3 -1
- package/dist/src/functions/wirings/auth/serialize-auth-types.js +3 -1
- package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
- package/dist/src/functions/wirings/channels/pikku-channels.js +1 -1
- package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -1
- package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -1
- package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -1
- package/dist/src/functions/wirings/channels/pikku-command-channels.js +1 -1
- package/dist/src/functions/wirings/channels/serialize-typed-channel-map.js +10 -2
- package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -1
- package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +9 -4
- package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +1 -1
- package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -1
- package/dist/src/functions/wirings/cli/pikku-command-cli.js +1 -1
- package/dist/src/functions/wirings/cli/serialize-channel-cli-client.js +32 -10
- package/dist/src/functions/wirings/cli/serialize-channel-cli.js +4 -4
- package/dist/src/functions/wirings/cli/serialize-cli-entrypoint-guard.d.ts +12 -0
- package/dist/src/functions/wirings/cli/serialize-cli-entrypoint-guard.js +28 -0
- package/dist/src/functions/wirings/cli/serialize-local-cli-bootstrap.js +4 -1
- package/dist/src/functions/wirings/console/pikku-command-console-functions.d.ts +1 -1
- package/dist/src/functions/wirings/console/pikku-command-node-types.d.ts +1 -1
- package/dist/src/functions/wirings/console/pikku-command-nodes-meta.d.ts +1 -1
- package/dist/src/functions/wirings/console/serialize-console-functions.js +1 -1
- package/dist/src/functions/wirings/credentials/pikku-command-credentials.d.ts +1 -1
- package/dist/src/functions/wirings/emails/pikku-command-emails.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-addon-types.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-functions.js +1 -1
- package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
- package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
- package/dist/src/functions/wirings/functions/serialize-addon-types.js +1 -1
- package/dist/src/functions/wirings/functions/serialize-function-types.js +37 -9
- package/dist/src/functions/wirings/gateway/pikku-command-gateway.d.ts +1 -1
- package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-command-http-routes.js +1 -1
- package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -1
- package/dist/src/functions/wirings/http/pikku-http-routes.js +1 -1
- package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -1
- package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -1
- package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -1
- package/dist/src/functions/wirings/mcp/pikku-command-mcp.js +1 -1
- package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -1
- package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +3 -3
- package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -1
- package/dist/src/functions/wirings/package/serialize-package.js +1 -1
- package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -1
- package/dist/src/functions/wirings/personas/personas-secrets-file.d.ts +8 -0
- package/dist/src/functions/wirings/personas/personas-secrets-file.js +9 -0
- package/dist/src/functions/wirings/personas/pikku-command-personas.d.ts +1 -1
- package/dist/src/functions/wirings/personas/pikku-command-personas.js +14 -0
- package/dist/src/functions/wirings/personas/serialize-personas-secrets.d.ts +16 -0
- package/dist/src/functions/wirings/personas/serialize-personas-secrets.js +34 -0
- package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -1
- package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -1
- package/dist/src/functions/wirings/queue/serialize-queue-map.js +2 -1
- package/dist/src/functions/wirings/queue/serialize-queue-wrapper.js +2 -1
- package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.d.ts +1 -1
- package/dist/src/functions/wirings/realtime/pikku-command-realtime.d.ts +1 -1
- package/dist/src/functions/wirings/roles/pikku-command-roles.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +3 -3
- package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +1 -1
- package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +1 -1
- package/dist/src/functions/wirings/scenarios/register-scenario-instrumentation.js +1 -1
- package/dist/src/functions/wirings/scenarios/serialize-scenario-meta.js +2 -2
- package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -1
- package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -1
- package/dist/src/functions/wirings/scopes/pikku-command-scopes.d.ts +1 -1
- package/dist/src/functions/wirings/secrets/pikku-command-secrets.d.ts +1 -1
- package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.d.ts +1 -1
- package/dist/src/functions/wirings/triggers/pikku-command-trigger.d.ts +1 -1
- package/dist/src/functions/wirings/triggers/serialize-trigger-meta.js +2 -2
- package/dist/src/functions/wirings/user-admin/pikku-command-user-admin-functions.d.ts +1 -1
- package/dist/src/functions/wirings/variables/pikku-command-variables.d.ts +1 -1
- package/dist/src/functions/wirings/virtual-user/pikku-command-virtual-user-functions.d.ts +1 -0
- package/dist/src/functions/wirings/virtual-user/pikku-command-virtual-user-functions.js +42 -0
- package/dist/src/functions/wirings/virtual-user/serialize-virtual-user-functions.d.ts +28 -0
- package/dist/src/functions/wirings/virtual-user/serialize-virtual-user-functions.js +439 -0
- package/dist/src/functions/wirings/webhook/pikku-command-webhook.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +1 -1
- package/dist/src/functions/wirings/workflow/serialize-scenario-step-map.js +2 -2
- package/dist/src/functions/wirings/workflow/serialize-workflow-meta.js +2 -2
- package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +15 -32
- package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +36 -23
- package/dist/src/functions/workflows/all.workflow.js +49 -16
- package/dist/src/server/bun-server-runner.d.ts +2 -2
- package/dist/src/server/bun-server-runner.js +5 -1
- package/dist/src/services/cli-logger.service.d.ts +28 -16
- package/dist/src/services/cli-logger.service.js +25 -16
- package/dist/src/services.d.ts +1 -1
- package/dist/src/services.js +8 -0
- package/dist/src/utils/file-import-path.js +9 -0
- package/dist/src/utils/pikku-cli-config.js +7 -0
- package/dist/src/utils/resolve-personas.d.ts +4 -9
- package/dist/src/utils/resolve-personas.js +4 -15
- package/dist/src/utils/serialize-meta-ts.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -13
- package/dist/.pikku/schemas/schemas/BootstrapInput.schema.json +0 -1
- package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +0 -1
- package/dist/src/functions/commands/db-seed.d.ts +0 -1
- package/dist/src/functions/commands/db-seed.js +0 -24
- package/dist/src/functions/db/sqlite/seed.d.ts +0 -11
- package/dist/src/functions/db/sqlite/seed.js +0 -22
|
@@ -26,7 +26,7 @@ export const pikkuChannels = pikkuVoidFunc({
|
|
|
26
26
|
const importStatement = supportsImportAttributes
|
|
27
27
|
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
28
28
|
: `import metaData from '${jsonImportPath}'`;
|
|
29
|
-
await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core/
|
|
29
|
+
await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport { ChannelsMeta } from '@pikku/core/channel'\n${importStatement}\npikkuState(null, 'channel', 'meta', metaData as ChannelsMeta)`);
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
middleware: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuChannelTypes: 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
|
+
export declare const pikkuChannelTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuChannelsMap: 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
|
+
export declare const pikkuChannelsMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuCommandChannels: 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>;
|
|
1
|
+
export declare const pikkuCommandChannels: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -41,7 +41,7 @@ export const pikkuCommandChannels = pikkuSessionlessFunc({
|
|
|
41
41
|
const importStatement = supportsImportAttributes
|
|
42
42
|
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
43
43
|
: `import metaData from '${jsonImportPath}'`;
|
|
44
|
-
await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core/
|
|
44
|
+
await writeFileInDir(logger, channelsWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport type { ChannelsMeta } from '@pikku/core/channel'\n${importStatement}\npikkuState(null, 'channel', 'meta', metaData as ChannelsMeta)`);
|
|
45
45
|
return true;
|
|
46
46
|
},
|
|
47
47
|
middleware: [
|
|
@@ -109,15 +109,23 @@ function generateChannels(logger, typesMap, functionsMeta, addonFunctions, chann
|
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* A route or message key that is not a bare identifier has to be quoted to be
|
|
114
|
+
* a legal property name. Channel routes are author-chosen strings and a CLI
|
|
115
|
+
* channel's are command ids, where `app-smoke` and `registry.search` are the
|
|
116
|
+
* norm — unquoted, each one ends the property early and the whole map fails
|
|
117
|
+
* to parse. Quoted only when it has to be, so existing output is unchanged.
|
|
118
|
+
*/
|
|
119
|
+
const propertyKey = (key) => /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : `'${key}'`;
|
|
112
120
|
let routesStr = 'export type ChannelsMap = {\n';
|
|
113
121
|
for (const [channelPath, { routes, message }] of Object.entries(channelsObject)) {
|
|
114
122
|
routesStr += ` readonly '${channelPath}': {\n`;
|
|
115
123
|
// Add `routes` object
|
|
116
124
|
routesStr += ` readonly routes: {\n`;
|
|
117
125
|
for (const [key, methods] of Object.entries(routes)) {
|
|
118
|
-
routesStr += ` readonly ${key}: {\n`;
|
|
126
|
+
routesStr += ` readonly ${propertyKey(key)}: {\n`;
|
|
119
127
|
for (const [method, handler] of Object.entries(methods)) {
|
|
120
|
-
routesStr += ` readonly ${method}: ChannelHandler<${formatTypeArray(handler.inputTypes) || 'void'}, ${formatTypeArray(handler.outputTypes) || 'never'}>,\n`;
|
|
128
|
+
routesStr += ` readonly ${propertyKey(method)}: ChannelHandler<${formatTypeArray(handler.inputTypes) || 'void'}, ${formatTypeArray(handler.outputTypes) || 'never'}>,\n`;
|
|
121
129
|
}
|
|
122
130
|
routesStr += ' },\n';
|
|
123
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuCLIEntry: 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>;
|
|
1
|
+
export declare const pikkuCLIEntry: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -64,15 +64,20 @@ export const pikkuCLIEntry = pikkuSessionlessFunc({
|
|
|
64
64
|
// Generate client code if clientPath is provided
|
|
65
65
|
if (channelClientPath) {
|
|
66
66
|
const channelClientFile = join(config.rootDir, channelClientPath);
|
|
67
|
-
//
|
|
67
|
+
// A renderer for a CLI-over-channel program runs on the client, where
|
|
68
|
+
// there is no service container to resolve from — the only thing the
|
|
69
|
+
// runtime can hand it is a logger. Anything else it destructures
|
|
70
|
+
// would be undefined at runtime, so it fails generation instead.
|
|
68
71
|
const rendererNames = collectRendererNames(programMeta);
|
|
69
72
|
const problematicRenderers = [];
|
|
70
73
|
for (const rendererName of rendererNames) {
|
|
71
74
|
const rendererMeta = visitState.cli.meta.renderers[rendererName];
|
|
72
|
-
|
|
75
|
+
const services = rendererMeta?.services?.services ?? [];
|
|
76
|
+
const unavailable = services.filter((name) => name !== 'logger');
|
|
77
|
+
if (unavailable.length > 0) {
|
|
73
78
|
problematicRenderers.push({
|
|
74
79
|
name: rendererName,
|
|
75
|
-
services:
|
|
80
|
+
services: unavailable,
|
|
76
81
|
});
|
|
77
82
|
}
|
|
78
83
|
}
|
|
@@ -81,7 +86,7 @@ export const pikkuCLIEntry = pikkuSessionlessFunc({
|
|
|
81
86
|
const details = problematicRenderers
|
|
82
87
|
.map((r) => ` - ${r.name} depends on: ${r.services.join(', ')}`)
|
|
83
88
|
.join('\n');
|
|
84
|
-
logger.critical(ErrorCode.CLI_CLIENTSIDE_RENDERER_HAS_SERVICES, `Cannot generate CLI channel client for '${programName}':
|
|
89
|
+
logger.critical(ErrorCode.CLI_CLIENTSIDE_RENDERER_HAS_SERVICES, `Cannot generate CLI channel client for '${programName}': a renderer reached for a service that does not exist on the client\n${details}\n\nRenderers in a CLI-over-channel program run on the client side of the socket, where the only available service is 'logger'.`);
|
|
85
90
|
// Delete existing client file if it exists
|
|
86
91
|
if (existsSync(channelClientFile)) {
|
|
87
92
|
await rm(channelClientFile);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type CLITypesCommandInput = {
|
|
2
2
|
bootstrap?: boolean;
|
|
3
3
|
};
|
|
4
|
-
export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
4
|
+
export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
5
5
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuCLI: 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>;
|
|
1
|
+
export declare const pikkuCLI: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -41,7 +41,7 @@ export const pikkuCLI = pikkuSessionlessFunc({
|
|
|
41
41
|
const importStatement = supportsImportAttributes
|
|
42
42
|
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
43
43
|
: `import metaData from '${jsonImportPath}'`;
|
|
44
|
-
await writeFileInDir(logger, cliWiringMetaFile, `import { pikkuState } from '@pikku/core/
|
|
44
|
+
await writeFileInDir(logger, cliWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport { CLIMeta } from '@pikku/core/cli'\n${importStatement}\npikkuState(null, 'cli', 'meta', metaData as CLIMeta)`);
|
|
45
45
|
return true;
|
|
46
46
|
},
|
|
47
47
|
middleware: [
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
2
|
+
import { DIRECT_EXECUTION_GUARD } from './serialize-cli-entrypoint-guard.js';
|
|
2
3
|
/**
|
|
3
4
|
* Collect all unique renderer names from CLI metadata (populated by inspector)
|
|
4
5
|
*/
|
|
@@ -107,10 +108,11 @@ export function serializeChannelCLIClient(programName, programMeta, clientFile,
|
|
|
107
108
|
? resolveRendererBinding(programMeta.defaultRenderName, renderersMeta)
|
|
108
109
|
: null;
|
|
109
110
|
const defaultRendererCode = defaultRendererBinding
|
|
110
|
-
? `,\n defaultRenderer: ${defaultRendererBinding}
|
|
111
|
+
? `,\n defaultRenderer: ${defaultRendererBinding} as CorePikkuCLIClientRender<any>`
|
|
111
112
|
: '';
|
|
112
113
|
return `
|
|
113
114
|
import { executeRawCLIViaChannel } from '@pikku/core/cli/channel'
|
|
115
|
+
import type { CorePikkuCLIClientRender } from '@pikku/core/cli/channel'
|
|
114
116
|
import type { Capabilities } from '@pikku/core/channel'
|
|
115
117
|
import { CorePikkuWebsocket } from '@pikku/websocket'
|
|
116
118
|
${rendererImports}
|
|
@@ -136,8 +138,12 @@ export async function ${capitalizedName}CLIClient(
|
|
|
136
138
|
// Create Pikku WebSocket wrapper
|
|
137
139
|
const pikkuWS = new CorePikkuWebsocket(ws)
|
|
138
140
|
|
|
139
|
-
//
|
|
140
|
-
|
|
141
|
+
// Renderers are declared against this app's \`SingletonServices\`, but on this
|
|
142
|
+
// side of the socket the only service that exists is a logger. The cast is
|
|
143
|
+
// sound because generation refuses to emit this file at all when a renderer
|
|
144
|
+
// reaches for anything else — see CLI_CLIENTSIDE_RENDERER_HAS_SERVICES. It is
|
|
145
|
+
// localised here so \`executeRawCLIViaChannel\` can keep an honest signature.
|
|
146
|
+
const renderers = ${renderersMap} as Record<string, CorePikkuCLIClientRender<any>>
|
|
141
147
|
|
|
142
148
|
return executeRawCLIViaChannel({
|
|
143
149
|
pikkuWS,
|
|
@@ -151,15 +157,17 @@ export async function ${capitalizedName}CLIClient(
|
|
|
151
157
|
export default ${capitalizedName}CLIClient
|
|
152
158
|
|
|
153
159
|
// For direct execution (if this file is run directly)
|
|
154
|
-
|
|
160
|
+
${DIRECT_EXECUTION_GUARD}
|
|
161
|
+
|
|
162
|
+
if (isDirectExecution) {
|
|
155
163
|
const url = process.env.PIKKU_WS_URL || 'ws://localhost:4002${finalChannelRoute}'
|
|
156
164
|
|
|
157
165
|
// Attach credentials so the channel authenticates like any other pikku client.
|
|
158
166
|
// A machine API key (PIKKU_API_KEY -> x-api-key) takes precedence; otherwise
|
|
159
167
|
// the human session token saved by \`pikku login\` (~/.pikku/session.json ->
|
|
160
|
-
// Authorization: Bearer) is used. This block only runs
|
|
161
|
-
// execution), so reading the session file
|
|
162
|
-
//
|
|
168
|
+
// Authorization: Bearer) is used. This block only runs on a server runtime
|
|
169
|
+
// (direct execution), so reading the session file is safe — a browser could
|
|
170
|
+
// neither reach it nor set custom headers on its WebSocket.
|
|
163
171
|
const headers: Record<string, string> = {}
|
|
164
172
|
if (process.env.PIKKU_API_KEY) {
|
|
165
173
|
headers['x-api-key'] = process.env.PIKKU_API_KEY
|
|
@@ -186,12 +194,26 @@ if (import.meta.url === \`file://\${process.argv[1]}\`) {
|
|
|
186
194
|
}
|
|
187
195
|
const hasAuth = Object.keys(headers).length > 0
|
|
188
196
|
|
|
189
|
-
//
|
|
190
|
-
//
|
|
197
|
+
// Node's global WebSocket reads its second argument as subprotocols and drops
|
|
198
|
+
// custom headers on the floor, so credentials there need the 'ws' module.
|
|
199
|
+
// Bun's honours them natively, and reaching for 'ws' under Bun would load its
|
|
200
|
+
// compatibility shim for nothing. Detected once, the way the CLI picks its
|
|
201
|
+
// dev-server runner.
|
|
202
|
+
const isBun = typeof (globalThis as { Bun?: unknown }).Bun !== 'undefined'
|
|
203
|
+
|
|
204
|
+
// Only the header-carrying Bun call needs the cast: the DOM lib types the
|
|
205
|
+
// second argument as subprotocols, which is what Node implements.
|
|
206
|
+
type WebSocketWithHeaders = new (
|
|
207
|
+
url: string,
|
|
208
|
+
options: { headers: Record<string, string> }
|
|
209
|
+
) => WebSocket
|
|
210
|
+
|
|
191
211
|
let ws: WebSocket
|
|
192
|
-
if (hasAuth || typeof WebSocket === 'undefined') {
|
|
212
|
+
if (!isBun && (hasAuth || typeof WebSocket === 'undefined')) {
|
|
193
213
|
const wsModule = await import('ws')
|
|
194
214
|
ws = new wsModule.default(url, { headers }) as unknown as WebSocket
|
|
215
|
+
} else if (hasAuth) {
|
|
216
|
+
ws = new (WebSocket as unknown as WebSocketWithHeaders)(url, { headers })
|
|
195
217
|
} else {
|
|
196
218
|
ws = new WebSocket(url)
|
|
197
219
|
}
|
|
@@ -61,7 +61,7 @@ import { wireChannel } from '${channelTypesPath}'
|
|
|
61
61
|
import { pikkuMiddleware${hasAddonFuncs ? ', ref' : ''}, pikkuSessionlessFunc } from '${functionTypesPath}'
|
|
62
62
|
import { generateCommandHelp } from '@pikku/core/cli'
|
|
63
63
|
import { handleRawCLI, type RawCLIFrame } from '@pikku/core/cli/channel'
|
|
64
|
-
import { pikkuState } from '@pikku/core/
|
|
64
|
+
import { pikkuState } from '@pikku/core/ecosystem'
|
|
65
65
|
${imports}
|
|
66
66
|
|
|
67
67
|
// Middleware to close the channel after CLI command completes
|
|
@@ -143,7 +143,7 @@ export const cliRaw = pikkuSessionlessFunc<{ args: string[] }, RawCLIFrame>({
|
|
|
143
143
|
},
|
|
144
144
|
})
|
|
145
145
|
|
|
146
|
-
${programMeta.auth
|
|
146
|
+
${programMeta.auth !== false
|
|
147
147
|
? `/**
|
|
148
148
|
* Refuses a connection that arrives without a session.
|
|
149
149
|
*
|
|
@@ -168,8 +168,8 @@ export const cliRequireSession = pikkuSessionlessFunc<void, RawCLIFrame | void>(
|
|
|
168
168
|
wireChannel({
|
|
169
169
|
name: '${finalChannelName}',
|
|
170
170
|
route: '${finalChannelRoute}',
|
|
171
|
-
auth: ${programMeta.auth
|
|
172
|
-
${programMeta.auth
|
|
171
|
+
auth: ${programMeta.auth !== false},
|
|
172
|
+
${programMeta.auth !== false ? ' onConnect: cliRequireSession,\n' : ''} onMessageWiring: {
|
|
173
173
|
command: {
|
|
174
174
|
'__help': {
|
|
175
175
|
func: cliHelp,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The snippet every generated CLI entrypoint uses to decide whether it is being
|
|
3
|
+
* run or merely imported. It declares `isDirectExecution`; the caller writes the
|
|
4
|
+
* `if`.
|
|
5
|
+
*
|
|
6
|
+
* `import.meta.url === \`file://${process.argv[1]}\`` — the shape this replaces —
|
|
7
|
+
* is false for any CLI invoked through a symlinked bin, because Node reports the
|
|
8
|
+
* symlink in argv and the realpath in the URL, so the block never ran for an
|
|
9
|
+
* installed `node_modules/.bin/<name>`. It also fails on paths the URL has to
|
|
10
|
+
* percent-encode, such as one containing a space.
|
|
11
|
+
*/
|
|
12
|
+
export declare const DIRECT_EXECUTION_GUARD = "const isDirectExecution = await (async () => {\n if (typeof import.meta.main === 'boolean') {\n return import.meta.main\n }\n // Node exposes import.meta.main from 24.2; earlier 24.x compares realpaths,\n // which is what it is shorthand for.\n try {\n const { fileURLToPath } = await import('node:url')\n const { realpathSync } = await import('node:fs')\n return (\n process.argv[1] !== undefined &&\n realpathSync(process.argv[1]) === fileURLToPath(import.meta.url)\n )\n } catch {\n return false\n }\n})()";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The snippet every generated CLI entrypoint uses to decide whether it is being
|
|
3
|
+
* run or merely imported. It declares `isDirectExecution`; the caller writes the
|
|
4
|
+
* `if`.
|
|
5
|
+
*
|
|
6
|
+
* `import.meta.url === \`file://${process.argv[1]}\`` — the shape this replaces —
|
|
7
|
+
* is false for any CLI invoked through a symlinked bin, because Node reports the
|
|
8
|
+
* symlink in argv and the realpath in the URL, so the block never ran for an
|
|
9
|
+
* installed `node_modules/.bin/<name>`. It also fails on paths the URL has to
|
|
10
|
+
* percent-encode, such as one containing a space.
|
|
11
|
+
*/
|
|
12
|
+
export const DIRECT_EXECUTION_GUARD = `const isDirectExecution = await (async () => {
|
|
13
|
+
if (typeof import.meta.main === 'boolean') {
|
|
14
|
+
return import.meta.main
|
|
15
|
+
}
|
|
16
|
+
// Node exposes import.meta.main from 24.2; earlier 24.x compares realpaths,
|
|
17
|
+
// which is what it is shorthand for.
|
|
18
|
+
try {
|
|
19
|
+
const { fileURLToPath } = await import('node:url')
|
|
20
|
+
const { realpathSync } = await import('node:fs')
|
|
21
|
+
return (
|
|
22
|
+
process.argv[1] !== undefined &&
|
|
23
|
+
realpathSync(process.argv[1]) === fileURLToPath(import.meta.url)
|
|
24
|
+
)
|
|
25
|
+
} catch {
|
|
26
|
+
return false
|
|
27
|
+
}
|
|
28
|
+
})()`;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
|
|
2
|
+
import { DIRECT_EXECUTION_GUARD } from './serialize-cli-entrypoint-guard.js';
|
|
2
3
|
/**
|
|
3
4
|
* Serializes the local (in-program) CLI bootstrap code
|
|
4
5
|
*/
|
|
@@ -40,7 +41,9 @@ ${wireServicesFactory ? ' createWireServices,' : ''}
|
|
|
40
41
|
export default ${capitalizedName}CLI
|
|
41
42
|
|
|
42
43
|
// For direct execution (if this file is run directly)
|
|
43
|
-
|
|
44
|
+
${DIRECT_EXECUTION_GUARD}
|
|
45
|
+
|
|
46
|
+
if (isDirectExecution) {
|
|
44
47
|
${capitalizedName}CLI(process.argv.slice(2)).catch(error => {
|
|
45
48
|
console.error('Fatal error:', error.message)
|
|
46
49
|
process.exit(1)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuConsoleFunctions: 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>;
|
|
1
|
+
export declare const pikkuConsoleFunctions: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuNodeTypes: 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
|
+
export declare const pikkuNodeTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuNodesMeta: 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>;
|
|
1
|
+
export declare const pikkuNodesMeta: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -115,7 +115,7 @@ export const pikkuConsoleGetSecret = pikkuFunc({
|
|
|
115
115
|
return { exists: false, value: null }
|
|
116
116
|
}
|
|
117
117
|
const value = await secrets.getSecret(secretId)
|
|
118
|
-
return { exists: true, value }
|
|
118
|
+
return { exists: true, value: value.reveal() }
|
|
119
119
|
},
|
|
120
120
|
})
|
|
121
121
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuCredentials: 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
|
+
export declare const pikkuCredentials: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PikkuCLIConfig } from '../../../../types/config.js';
|
|
2
2
|
import type { CLILogger } from '../../../services/cli-logger.service.js';
|
|
3
|
-
export declare const pikkuEmails: 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>;
|
|
3
|
+
export declare const pikkuEmails: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
4
4
|
export declare function generateEmailsArtifacts(logger: CLILogger, config: Pick<PikkuCLIConfig, 'outDir'> & {
|
|
5
5
|
emailTemplatesDir?: string;
|
|
6
6
|
}): Promise<true | undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type AddonTypesCommandInput = {
|
|
2
2
|
bootstrap?: boolean;
|
|
3
3
|
};
|
|
4
|
-
export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
4
|
+
export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
5
5
|
export {};
|
|
@@ -2,6 +2,6 @@ export declare const pikkuFunctionTypesSplit: import("#pikku").PikkuFunctionConf
|
|
|
2
2
|
bootstrap?: boolean;
|
|
3
3
|
}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
|
|
4
4
|
bootstrap?: boolean;
|
|
5
|
-
}, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
|
|
5
|
+
}, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<{
|
|
6
6
|
bootstrap?: boolean;
|
|
7
7
|
}, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -2,6 +2,6 @@ export declare const pikkuFunctionTypes: 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").WiredServices> | import("#pikku").PikkuFunction<{
|
|
5
|
+
}, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<{
|
|
6
6
|
bootstrap?: boolean;
|
|
7
7
|
}, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuFunctions: 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>;
|
|
1
|
+
export declare const pikkuFunctions: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -27,7 +27,7 @@ export const pikkuFunctions = pikkuSessionlessFunc({
|
|
|
27
27
|
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
28
28
|
: `import metaData from '${jsonImportPath}'`;
|
|
29
29
|
const packageName = config.addonName ? `'${config.addonName}'` : 'null';
|
|
30
|
-
await writeFileInDir(logger, functionsMetaFile, `import { pikkuState } from '@pikku/core/
|
|
30
|
+
await writeFileInDir(logger, functionsMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport type { FunctionsMeta } from '@pikku/core'\n${importStatement}\npikkuState(${packageName}, 'function', 'meta', metaData as FunctionsMeta)`);
|
|
31
31
|
// For addon packages, register ALL functions (they'll be invoked by consumers)
|
|
32
32
|
// For main packages, only register functions that are invoked via internal RPCs
|
|
33
33
|
const isAddon = !!config.addonName;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const serializeServicesMap: (allSingletonServices: string[], allWireServices: string[], requiredServices: Set<string>, forceRequiredServices: string[] | undefined, servicesImport: string, wireServicesImport: string, addonRequiredParentServices?: string[], authInjected?: boolean, agentScaffoldEnabled?: boolean) => string;
|
|
2
|
-
export declare const pikkuServices: 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
|
+
export declare const pikkuServices: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuSchemas: 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>;
|
|
1
|
+
export declare const pikkuSchemas: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -53,7 +53,7 @@ export const pikkuAddonConfig = <ExistingServices extends Omit<Partial<Singleton
|
|
|
53
53
|
* { secrets }
|
|
54
54
|
* ) => {
|
|
55
55
|
* const creds = await secrets.getSecret<GithubCredentials>('GITHUB_CREDENTIALS')
|
|
56
|
-
* const github = new GithubService(creds)
|
|
56
|
+
* const github = new GithubService(creds.reveal())
|
|
57
57
|
* return { github }
|
|
58
58
|
* })
|
|
59
59
|
* \`\`\`
|
|
@@ -16,14 +16,14 @@ export const serializeFunctionTypes = (userSessionTypeImport, userSessionTypeNam
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import type { CorePikkuMiddleware, CorePermissionGroup, ListInput, ListOutput, PikkuWire, PickRequired, SecretlessServices, SecretService } from '@pikku/core'
|
|
19
|
-
import type { CorePikkuFunctionConfig, CorePikkuAuth, CorePikkuAuthConfig, CorePikkuPermission } from '@pikku/core/function'
|
|
19
|
+
import type { CorePikkuFunctionConfig, CorePikkuSessionlessFunctionConfig, CorePikkuAuth, CorePikkuAuthConfig, CorePikkuPermission } from '@pikku/core/function'
|
|
20
20
|
import { pikkuAuth as pikkuAuthCore } from '@pikku/core/function'
|
|
21
21
|
import {
|
|
22
22
|
addTagMiddleware as addTagMiddlewareCore,
|
|
23
23
|
addGlobalMiddleware as addGlobalMiddlewareCore,
|
|
24
24
|
addGlobalPermission as addGlobalPermissionCore,
|
|
25
25
|
} from '@pikku/core/middleware'
|
|
26
|
-
import { pikkuState as __pikkuState, CreateWireServices } from '@pikku/core/
|
|
26
|
+
import { pikkuState as __pikkuState, CreateWireServices } from '@pikku/core/ecosystem'
|
|
27
27
|
import type { NodeType } from '@pikku/core/node'
|
|
28
28
|
${scopesImport}
|
|
29
29
|
import type { StandardSchemaV1 } from '@standard-schema/spec'
|
|
@@ -301,18 +301,28 @@ export const pikkuApprovalDescription = <In = unknown, RequiredServices extends
|
|
|
301
301
|
* @template In - The input type
|
|
302
302
|
* @template Out - The output type that the function returns
|
|
303
303
|
* @template RequiredServices - Services required by this function
|
|
304
|
+
* @template ScenarioOut - Types \`scenario.context\`. Only scenarios set it:
|
|
305
|
+
* \`PikkuFunctionScenario\` passes the scenario's own output, and a *hook*
|
|
306
|
+
* passes the output of the scenario it belongs to (it returns void itself).
|
|
307
|
+
*
|
|
308
|
+
* It deliberately does NOT default to \`Out\`. That would make every ordinary
|
|
309
|
+
* function's wire type vary with its return type, and a \`func\` written
|
|
310
|
+
* against the \`PikkuFunction | PikkuFunctionSessionless\` union then loses
|
|
311
|
+
* contextual typing — its parameters fall back to \`any\` and the assignment
|
|
312
|
+
* fails with no hint as to why.
|
|
304
313
|
*/
|
|
305
314
|
export type PikkuFunctionSessionless<
|
|
306
315
|
In = unknown,
|
|
307
316
|
Out = never,
|
|
308
317
|
RequiredWires extends keyof PikkuWire = never,
|
|
309
|
-
RequiredServices extends SecretlessServices<Services> = WiredServices
|
|
318
|
+
RequiredServices extends SecretlessServices<Services> = WiredServices,
|
|
319
|
+
ScenarioOut = unknown
|
|
310
320
|
> = CorePikkuFunctionSessionless<
|
|
311
321
|
In,
|
|
312
322
|
Out,
|
|
313
323
|
RequiredServices,
|
|
314
324
|
Session,
|
|
315
|
-
PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any, TypedWorkflow, unknown, TypedScenario
|
|
325
|
+
PickRequired<PikkuWire<In, Out, false, Session, TypedPikkuRPC, null, any, TypedWorkflow, unknown, TypedScenario<ScenarioOut>, TypedPersonas>, RequiredWires>
|
|
316
326
|
>
|
|
317
327
|
|
|
318
328
|
/**
|
|
@@ -353,11 +363,28 @@ export type PikkuFunctionConfig<
|
|
|
353
363
|
In = unknown,
|
|
354
364
|
Out = unknown,
|
|
355
365
|
RequiredWires extends keyof PikkuWire = never,
|
|
356
|
-
|
|
366
|
+
// \`any\` in the ScenarioOut slot, not \`unknown\`: a scenario body types its
|
|
367
|
+
// context as its own output, and a constraint pinned to one context type
|
|
368
|
+
// would refuse it. \`ScenarioContext<any>\` collapses to \`any\`, so the
|
|
369
|
+
// constraint stays open on that axis alone.
|
|
370
|
+
PikkuFunc extends PikkuFunction<In, Out, RequiredWires, any> | PikkuFunctionSessionless<In, Out, RequiredWires, any, any> = PikkuFunction<In, Out, RequiredWires> | PikkuFunctionSessionless<In, Out, RequiredWires>,
|
|
357
371
|
InputSchema extends StandardSchemaV1 | undefined = undefined,
|
|
358
372
|
OutputSchema extends StandardSchemaV1 | undefined = undefined
|
|
359
373
|
> = CorePikkuFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema, ScopeId>
|
|
360
374
|
|
|
375
|
+
/**
|
|
376
|
+
* {@link PikkuFunctionConfig} for a function that runs without a session.
|
|
377
|
+
* Has no \`scopes\`: an anonymous caller holds none, so none can ever be met.
|
|
378
|
+
*/
|
|
379
|
+
export type PikkuFunctionSessionlessConfig<
|
|
380
|
+
In = unknown,
|
|
381
|
+
Out = unknown,
|
|
382
|
+
RequiredWires extends keyof PikkuWire = never,
|
|
383
|
+
PikkuFunc extends PikkuFunctionSessionless<In, Out, RequiredWires, any> = PikkuFunctionSessionless<In, Out, RequiredWires>,
|
|
384
|
+
InputSchema extends StandardSchemaV1 | undefined = undefined,
|
|
385
|
+
OutputSchema extends StandardSchemaV1 | undefined = undefined
|
|
386
|
+
> = CorePikkuSessionlessFunctionConfig<PikkuFunc, PikkuPermission<In>, PikkuMiddleware, InputSchema, OutputSchema>
|
|
387
|
+
|
|
361
388
|
/**
|
|
362
389
|
* Configuration object for Pikku functions with Zod schema validation.
|
|
363
390
|
* Use this when you want to define input/output schemas using Zod.
|
|
@@ -479,7 +506,8 @@ export const pikkuListFunc = <
|
|
|
479
506
|
*/
|
|
480
507
|
/**
|
|
481
508
|
* Schema-overload variant for pikkuSessionlessFunc. Derived from
|
|
482
|
-
*
|
|
509
|
+
* CorePikkuSessionlessFunctionConfig to stay in sync with the generic-typed
|
|
510
|
+
* config — so it has no \`scopes\` either.
|
|
483
511
|
*/
|
|
484
512
|
export type PikkuFunctionSessionlessConfigWithSchema<
|
|
485
513
|
InputSchema extends StandardSchemaV1 | undefined = undefined,
|
|
@@ -487,7 +515,7 @@ export type PikkuFunctionSessionlessConfigWithSchema<
|
|
|
487
515
|
RequiredWires extends keyof PikkuWire = never,
|
|
488
516
|
RequiredServices extends SecretlessServices<Services> = WiredServices
|
|
489
517
|
> = Omit<
|
|
490
|
-
|
|
518
|
+
CorePikkuSessionlessFunctionConfig<
|
|
491
519
|
PikkuFunctionSessionless<SchemaInferred<InputSchema>, SchemaInferred<OutputSchema>, RequiredWires, RequiredServices>
|
|
492
520
|
>,
|
|
493
521
|
'func' | 'input' | 'output' | 'permissions' | 'approvalDescription'
|
|
@@ -542,7 +570,7 @@ export function pikkuSessionlessFunc<
|
|
|
542
570
|
export function pikkuSessionlessFunc<In, Out = unknown, RequiredServices extends SecretlessServices<Services> = WiredServices>(
|
|
543
571
|
func:
|
|
544
572
|
| PikkuFunctionSessionless<In, Out, 'session' | 'rpc', RequiredServices>
|
|
545
|
-
|
|
|
573
|
+
| PikkuFunctionSessionlessConfig<In, Out, 'session' | 'rpc', PikkuFunctionSessionless<In, Out, 'session' | 'rpc', RequiredServices>>
|
|
546
574
|
): PikkuFunctionConfig<In, Out, 'session' | 'rpc'>
|
|
547
575
|
export function pikkuSessionlessFunc(func: any) {
|
|
548
576
|
return typeof func === 'function' ? { func } : func
|
|
@@ -567,7 +595,7 @@ export function pikkuSessionlessFunc(func: any) {
|
|
|
567
595
|
export const pikkuVoidFunc = (
|
|
568
596
|
func:
|
|
569
597
|
| PikkuFunctionSessionless<void, void, 'session' | 'rpc'>
|
|
570
|
-
|
|
|
598
|
+
| PikkuFunctionSessionlessConfig<void, void, 'session' | 'rpc'>
|
|
571
599
|
) => {
|
|
572
600
|
return typeof func === 'function' ? { func } : func
|
|
573
601
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuGateway: 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>;
|
|
1
|
+
export declare const pikkuGateway: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuGraphWirings: 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>;
|
|
1
|
+
export declare const pikkuGraphWirings: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuHTTPMap: 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
|
+
export declare const pikkuHTTPMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuCommandHTTP: 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>;
|
|
1
|
+
export declare const pikkuCommandHTTP: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -42,7 +42,7 @@ export const pikkuCommandHTTP = pikkuSessionlessFunc({
|
|
|
42
42
|
const importStatement = supportsImportAttributes
|
|
43
43
|
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
44
44
|
: `import metaData from '${jsonImportPath}'`;
|
|
45
|
-
await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core/
|
|
45
|
+
await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport type { HTTPWiringsMeta } from '@pikku/core/http'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
|
|
46
46
|
return true;
|
|
47
47
|
},
|
|
48
48
|
middleware: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuHTTPTypes: 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
|
+
export declare const pikkuHTTPTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuOpenAPI: 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
|
+
export declare const pikkuOpenAPI: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const pikkuHTTP: 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>;
|
|
1
|
+
export declare const pikkuHTTP: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices, unknown> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
|
|
@@ -18,7 +18,7 @@ export const pikkuHTTP = pikkuSessionlessFunc({
|
|
|
18
18
|
const importStatement = supportsImportAttributes
|
|
19
19
|
? `import metaData from '${jsonImportPath}' with { type: 'json' }`
|
|
20
20
|
: `import metaData from '${jsonImportPath}'`;
|
|
21
|
-
await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core/
|
|
21
|
+
await writeFileInDir(logger, httpWiringMetaFile, `import { pikkuState } from '@pikku/core/ecosystem'\nimport type { HTTPWiringsMeta } from '@pikku/core/http'\n${importStatement}\npikkuState(null, 'http', 'meta', metaData as HTTPWiringsMeta)`);
|
|
22
22
|
return true;
|
|
23
23
|
},
|
|
24
24
|
middleware: [
|