@rudderhq/server 0.7.2 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-runtimes/registry.d.ts.map +1 -1
- package/dist/agent-runtimes/registry.js +0 -2
- package/dist/agent-runtimes/registry.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +1 -5
- package/dist/app.js.map +1 -1
- package/dist/bootstrap/create-http-app.d.ts +1 -2
- package/dist/bootstrap/create-http-app.d.ts.map +1 -1
- package/dist/bootstrap/create-http-app.js +13 -12
- package/dist/bootstrap/create-http-app.js.map +1 -1
- package/dist/bootstrap/register-api-routes.d.ts +1 -2
- package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
- package/dist/bootstrap/register-api-routes.js +20 -4
- package/dist/bootstrap/register-api-routes.js.map +1 -1
- package/dist/middleware/logger.js +2 -2
- package/dist/middleware/logger.js.map +1 -1
- package/dist/middleware/logger.test.js +26 -10
- package/dist/middleware/logger.test.js.map +1 -1
- package/dist/routes/agent-issue-creation.d.ts +25 -0
- package/dist/routes/agent-issue-creation.d.ts.map +1 -0
- package/dist/routes/agent-issue-creation.js +201 -0
- package/dist/routes/agent-issue-creation.js.map +1 -0
- package/dist/routes/app-builder.d.ts +3 -1
- package/dist/routes/app-builder.d.ts.map +1 -1
- package/dist/routes/app-builder.js +31 -11
- package/dist/routes/app-builder.js.map +1 -1
- package/dist/routes/computer.d.ts +30 -0
- package/dist/routes/computer.d.ts.map +1 -0
- package/dist/routes/computer.js +231 -0
- package/dist/routes/computer.js.map +1 -0
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +2 -0
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/instance-settings.d.ts.map +1 -1
- package/dist/routes/instance-settings.js +3 -0
- package/dist/routes/instance-settings.js.map +1 -1
- package/dist/routes/issues.comments-attachments.d.ts.map +1 -1
- package/dist/routes/issues.comments-attachments.js +90 -8
- package/dist/routes/issues.comments-attachments.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +12 -1
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/issues.mutations.d.ts.map +1 -1
- package/dist/routes/issues.mutations.js +85 -33
- package/dist/routes/issues.mutations.js.map +1 -1
- package/dist/routes/managed-mcp-runtime.d.ts.map +1 -1
- package/dist/routes/managed-mcp-runtime.js +109 -7
- package/dist/routes/managed-mcp-runtime.js.map +1 -1
- package/dist/routes/rudder-plugins.d.ts +4 -0
- package/dist/routes/rudder-plugins.d.ts.map +1 -0
- package/dist/routes/rudder-plugins.js +213 -0
- package/dist/routes/rudder-plugins.js.map +1 -0
- package/dist/services/activity-log.d.ts +0 -3
- package/dist/services/activity-log.d.ts.map +1 -1
- package/dist/services/activity-log.js +0 -33
- package/dist/services/activity-log.js.map +1 -1
- package/dist/services/activity.d.ts +3 -3
- package/dist/services/agent-issue-creation.d.ts +344 -0
- package/dist/services/agent-issue-creation.d.ts.map +1 -0
- package/dist/services/agent-issue-creation.js +675 -0
- package/dist/services/agent-issue-creation.js.map +1 -0
- package/dist/services/agent-run-context.d.ts.map +1 -1
- package/dist/services/agent-run-context.js +13 -2
- package/dist/services/agent-run-context.js.map +1 -1
- package/dist/services/app-builder.d.ts.map +1 -1
- package/dist/services/app-builder.js +24 -3
- package/dist/services/app-builder.js.map +1 -1
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.d.ts +1 -1
- package/dist/services/chat-assistant.js +11 -2
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chat-generation-protocol.test.js +2 -2
- package/dist/services/chat-generation-protocol.test.js.map +1 -1
- package/dist/services/chats.d.ts +2 -2
- package/dist/services/computer-broker.d.ts +35 -0
- package/dist/services/computer-broker.d.ts.map +1 -0
- package/dist/services/computer-broker.js +211 -0
- package/dist/services/computer-broker.js.map +1 -0
- package/dist/services/computer-broker.test.d.ts +2 -0
- package/dist/services/computer-broker.test.d.ts.map +1 -0
- package/dist/services/computer-broker.test.js +70 -0
- package/dist/services/computer-broker.test.js.map +1 -0
- package/dist/services/computer-capability.d.ts +13 -0
- package/dist/services/computer-capability.d.ts.map +1 -0
- package/dist/services/computer-capability.js +11 -0
- package/dist/services/computer-capability.js.map +1 -0
- package/dist/services/computer-capability.test.d.ts +2 -0
- package/dist/services/computer-capability.test.d.ts.map +1 -0
- package/dist/services/computer-capability.test.js +27 -0
- package/dist/services/computer-capability.test.js.map +1 -0
- package/dist/services/finance.d.ts +1 -1
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/instance-settings.d.ts.map +1 -1
- package/dist/services/instance-settings.js +15 -2
- package/dist/services/instance-settings.js.map +1 -1
- package/dist/services/integrations/agent-integrations.d.ts +1 -1
- package/dist/services/issues.d.ts +86 -1
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.helpers.d.ts +4 -0
- package/dist/services/issues.helpers.d.ts.map +1 -1
- package/dist/services/issues.helpers.js +28 -6
- package/dist/services/issues.helpers.js.map +1 -1
- package/dist/services/issues.js +207 -127
- package/dist/services/issues.js.map +1 -1
- package/dist/services/knowledge-portability/organization-portability.files.d.ts +1 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +7 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.catalog.js +10 -0
- package/dist/services/knowledge-portability/organization-skills.catalog.js.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.d.ts +1 -0
- package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.js +36 -3
- package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
- package/dist/services/mcp/managed-bindings.d.ts +3 -1
- package/dist/services/mcp/managed-bindings.d.ts.map +1 -1
- package/dist/services/mcp/managed-bindings.js +20 -3
- package/dist/services/mcp/managed-bindings.js.map +1 -1
- package/dist/services/mcp/managed-client.d.ts +15 -0
- package/dist/services/mcp/managed-client.d.ts.map +1 -1
- package/dist/services/mcp/managed-client.js +23 -1
- package/dist/services/mcp/managed-client.js.map +1 -1
- package/dist/services/mcp/managed-client.test.js +73 -9
- package/dist/services/mcp/managed-client.test.js.map +1 -1
- package/dist/services/messenger.d.ts +2 -2
- package/dist/services/messenger.d.ts.map +1 -1
- package/dist/services/messenger.js +126 -49
- package/dist/services/messenger.js.map +1 -1
- package/dist/services/product-analytics.d.ts +1 -1
- package/dist/services/rudder-plugins.d.ts +107 -0
- package/dist/services/rudder-plugins.d.ts.map +1 -0
- package/dist/services/rudder-plugins.js +1746 -0
- package/dist/services/rudder-plugins.js.map +1 -0
- package/dist/services/rudder-plugins.test.d.ts +2 -0
- package/dist/services/rudder-plugins.test.d.ts.map +1 -0
- package/dist/services/rudder-plugins.test.js +191 -0
- package/dist/services/rudder-plugins.test.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.core.d.ts +1 -0
- package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts +53 -0
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +227 -107
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js +23 -2
- package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +14 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.js +31 -0
- package/dist/services/runtime-kernel/heartbeat.terminal.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.js +35 -3
- package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
- package/package.json +18 -18
- package/resources/bundled-skills/app-builder/SKILL.md +39 -9
- package/resources/bundled-skills/app-builder/assets/scaffold/app/globals.css +109 -16
- package/resources/bundled-skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/components.json +20 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/next.config.ts +19 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/package.json +2 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/rudder.app.json +1 -1
- package/resources/bundled-skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
- package/resources/bundled-skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
- package/resources/bundled-skills/app-builder/evals/evals.json +2 -1
- package/resources/bundled-skills/app-builder/references/design-guidelines.md +19 -2
- package/resources/bundled-skills/app-builder/references/rudder-ui-preset.md +73 -0
- package/resources/bundled-skills/app-builder/references/scaffold-contract.md +12 -0
- package/resources/bundled-skills/app-builder/references/verification.md +6 -0
- package/resources/bundled-skills/app-builder/scripts/report-build-status.mjs +83 -0
- package/resources/bundled-skills/rudder-docs/SKILL.md +2 -2
- package/resources/bundled-skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
- package/resources/bundled-skills/rudder-docs/evals/trigger-evals.json +2 -2
- package/resources/bundled-skills/rudder-docs/references/api-reference.md +0 -2
- package/resources/bundled-skills/rudder-docs/references/plugin-authoring.md +38 -114
- package/resources/bundled-skills/rudder-docs/references/source-map.md +2 -0
- package/skills/app-builder/SKILL.md +39 -9
- package/skills/app-builder/assets/scaffold/app/globals.css +109 -16
- package/skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
- package/skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
- package/skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
- package/skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
- package/skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
- package/skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
- package/skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
- package/skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
- package/skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
- package/skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
- package/skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
- package/skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
- package/skills/app-builder/assets/scaffold/components.json +20 -0
- package/skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
- package/skills/app-builder/assets/scaffold/next.config.ts +19 -0
- package/skills/app-builder/assets/scaffold/package.json +2 -1
- package/skills/app-builder/assets/scaffold/rudder.app.json +1 -1
- package/skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
- package/skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
- package/skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
- package/skills/app-builder/evals/evals.json +2 -1
- package/skills/app-builder/references/design-guidelines.md +19 -2
- package/skills/app-builder/references/rudder-ui-preset.md +73 -0
- package/skills/app-builder/references/scaffold-contract.md +12 -0
- package/skills/app-builder/references/verification.md +6 -0
- package/skills/app-builder/scripts/report-build-status.mjs +83 -0
- package/skills/rudder-docs/SKILL.md +2 -2
- package/skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
- package/skills/rudder-docs/evals/trigger-evals.json +2 -2
- package/skills/rudder-docs/references/api-reference.md +0 -2
- package/skills/rudder-docs/references/plugin-authoring.md +38 -114
- package/skills/rudder-docs/references/source-map.md +2 -0
- package/ui-dist/assets/{LibraryLiveSurface-cHCJmmsl.js → LibraryLiveSurface-CoGcDfo0.js} +1 -1
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-BORJvkew.js → abnfDiagram-VRR7QNED-BnPHHNfu.js} +1 -1
- package/ui-dist/assets/{arc-DPUzhx87.js → arc-CAvqQQR_.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-Bz_hY8LM.js → architectureDiagram-ZJ3FMSHR-DDa31YAK.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3-Bq1X3YkP.js → blockDiagram-677ZJIJ3-DDXLU9Ej.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-BawEM9Pc.js → c4Diagram-LMCZKHZV-zEm0rHCp.js} +1 -1
- package/ui-dist/assets/channel-M_3GhwHQ.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-D0D5ZOaA.js → chunk-2Q5K7J3B-y1Rw45sz.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-T90P7lug.js → chunk-32BRIVSS-Cq8cQBba.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-jcAERTgh.js → chunk-5VM5RSS4-CjQA6jGI.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-t9-JXwnR.js → chunk-EX3LRPZG-VVYt7jh3.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-hqgD1saC.js → chunk-JWPE2WC7-BJC3ISop.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN-BsSUoYzd.js → chunk-MOJQB5TN-ClZgTqQk.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-YcdDh2Zn.js → chunk-RYQCIY6F-DRei3pn2.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-ChFyH9Su.js → chunk-V7JOEXUC-BGWrQfpZ.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-BjVK8IyX.js → chunk-VR4S4FIN-BBYT57Lt.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-D-TvO9vT.js → chunk-XXDRQBXY-D7P4SoZB.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-G44FJFnB.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-G44FJFnB.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-DBwhASJG.js → cose-bilkent-JH36ORCC-mJXY7GQo.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-SlCRmwl2.js → cynefin-VYW2F7L2-C-I_lPmH.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-DImV6N_p.js → cynefinDiagram-TSTJHNR4-Bm1S_w7H.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-FH4Wv8Zn.js → dagre-VKFMJZFB-BuPIm1AB.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-CrZvQjId.js → diagram-FQU43EPY-DTBCuV0W.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-B7IGl_T3.js → diagram-G47NLZAW-B4CK8uR2.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-CB4i7H1a.js → diagram-NH7WQ7WH-BkbS0GkL.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-DNyWPYY9.js → diagram-OA4YK3LP-C_mkRe0c.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-BAhxbhpi.js → diagram-WEI45ONY-CHUb3TIJ.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-ClXtQ9qt.js → ebnfDiagram-CCIWWBDH-D_lN4ZOY.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-DGXiMYfn.js → erDiagram-Q63AITRT-CRnDqcsy.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-CdZ-02zc.js → flowDiagram-23GEKE2U-ChELY-8y.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-TxhzNpta.js → ganttDiagram-NO4QXBWP-QIML25-M.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-D6Q_w6wR.js → gitGraphDiagram-IHSO6WYX-TB_AKH8l.js} +1 -1
- package/ui-dist/assets/{graph-CxNmbpl9.js → graph-HKPvyYQ1.js} +1 -1
- package/ui-dist/assets/{index-C12QC1Ex.js → index-Ar0zIwom.js} +1 -1
- package/ui-dist/assets/{index-CW21qWFm.js → index-BeNxgoKd.js} +1 -1
- package/ui-dist/assets/{index-BujwWE3j.js → index-CB-UdrKN.js} +1 -1
- package/ui-dist/assets/{index-Cx6oIZPm.js → index-CfpFS1Tl.js} +555 -581
- package/ui-dist/assets/{index-C_nwI4Yj.js → index-CjIeIR2m.js} +1 -1
- package/ui-dist/assets/{index-Rau2cGm0.js → index-DCgbySwf.js} +1 -1
- package/ui-dist/assets/{index-Do78GymY.js → index-DDMaBNLI.js} +1 -1
- package/ui-dist/assets/{index-DU2LI7f9.js → index-DSZmO4bA.js} +1 -1
- package/ui-dist/assets/{index-BA9tMBhO.js → index-DfzFi2fx.js} +1 -1
- package/ui-dist/assets/{index-BoTz5S-X.js → index-DmEf_U5I.js} +1 -1
- package/ui-dist/assets/{index-kbWUQ1um.js → index-OfGDMJiA.js} +1 -1
- package/ui-dist/assets/{index-AkhgKOxC.js → index-ZzX8P4M5.js} +1 -1
- package/ui-dist/assets/{index-BQ87dGIq.js → index-fDtlbG8Y.js} +1 -1
- package/ui-dist/assets/{index-CXnqg1Oq.js → index-gdvFtffQ.js} +1 -1
- package/ui-dist/assets/index-noipz8bE.css +1 -0
- package/ui-dist/assets/{index-Bxz75ICF.js → index-rnOTiIXd.js} +1 -1
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-CnJd4-Jq.js → infoDiagram-FWYZ7A6U-DUR3sDTd.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-Bq-qc3pD.js → ishikawaDiagram-FXEZZL3T-CcnYT0s0.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-NSmpUGUA.js → journeyDiagram-5HDEW3XC-CqfbG8T1.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-D7pgWtfA.js → kanban-definition-HUTT4EX6-CYwQM9eR.js} +1 -1
- package/ui-dist/assets/{layout-BRuo6LWe.js → layout-B2IlJgLE.js} +1 -1
- package/ui-dist/assets/{linear-CkaWI9Nd.js → linear-CcEPcfbO.js} +1 -1
- package/ui-dist/assets/{map-CgA6tTpZ.js → map-Bmhfvlpu.js} +1 -1
- package/ui-dist/assets/{mermaid.core-DrXOt-P6.js → mermaid.core-T9Q0CuQx.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-D9ImeWBe.js → mindmap-definition-LN4V7U3C-CRjQlwN4.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-Cq-zZ_zz.js → pegDiagram-2B236MQR-DenccdY8.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-FgNgy726.js → pieDiagram-ENE6RG2P-CPiTrJcY.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-BxQbmGmi.js → quadrantDiagram-ABIIQ3AL-fKbvGl_-.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-CrpbkPH2.js → railroadDiagram-RFXS5EU6-D6uOjEmA.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-DQ-65ZW6.js → requirementDiagram-TGXJPOKE-CQIQ387O.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-Bom0lMZm.js → sankeyDiagram-HTMAVEWB-CKrnONJL.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-C1MSDLDj.js → sequenceDiagram-DBY2YBRQ-C3vaOiZO.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-Bn1vxebD.js → sizeCapture-X5ZJPWSS-F39EvxY0.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-GRRQpmzI.js → stateDiagram-2N3HPSRC-Bq2sVFQq.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-B94IPtHC.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-BcOOCZ4q.js → swimlanes-5IMT3BWC-CSrygB7m.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-9WQr2_E9.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-gi6amswh.js → timeline-definition-FHXFAJF6-DSMMlntv.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-B9uqeyQt.js → vennDiagram-L72KCM5P-D5XH96zV.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-BnqWAMiE.js → wardleyDiagram-EHGQE667-BXX2RFsU.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BJXKltIN.js → xychartDiagram-FW5EYKEG-awBW2lwG.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/dist/bootstrap/plugin-host-runtime.d.ts +0 -116
- package/dist/bootstrap/plugin-host-runtime.d.ts.map +0 -1
- package/dist/bootstrap/plugin-host-runtime.js +0 -179
- package/dist/bootstrap/plugin-host-runtime.js.map +0 -1
- package/dist/bundled-plugins/plugin-linear/README.md +0 -22
- package/dist/bundled-plugins/plugin-linear/dist/manifest.js +0 -183
- package/dist/bundled-plugins/plugin-linear/dist/manifest.js.map +0 -7
- package/dist/bundled-plugins/plugin-linear/dist/ui/index.js +0 -1285
- package/dist/bundled-plugins/plugin-linear/dist/ui/index.js.map +0 -7
- package/dist/bundled-plugins/plugin-linear/dist/worker.js +0 -10699
- package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +0 -7
- package/dist/bundled-plugins/plugin-linear/package.json +0 -42
- package/dist/routes/plugin-ui-static.d.ts +0 -70
- package/dist/routes/plugin-ui-static.d.ts.map +0 -1
- package/dist/routes/plugin-ui-static.js +0 -375
- package/dist/routes/plugin-ui-static.js.map +0 -1
- package/dist/routes/plugins.d.ts +0 -120
- package/dist/routes/plugins.d.ts.map +0 -1
- package/dist/routes/plugins.js +0 -1125
- package/dist/routes/plugins.js.map +0 -1
- package/dist/routes/plugins.operations-routes.d.ts +0 -28
- package/dist/routes/plugins.operations-routes.d.ts.map +0 -1
- package/dist/routes/plugins.operations-routes.js +0 -720
- package/dist/routes/plugins.operations-routes.js.map +0 -1
- package/dist/services/plugin-capability-validator.d.ts +0 -108
- package/dist/services/plugin-capability-validator.d.ts.map +0 -1
- package/dist/services/plugin-capability-validator.js +0 -268
- package/dist/services/plugin-capability-validator.js.map +0 -1
- package/dist/services/plugin-config-validator.d.ts +0 -26
- package/dist/services/plugin-config-validator.d.ts.map +0 -1
- package/dist/services/plugin-config-validator.js +0 -41
- package/dist/services/plugin-config-validator.js.map +0 -1
- package/dist/services/plugin-dev-watcher.d.ts +0 -47
- package/dist/services/plugin-dev-watcher.d.ts.map +0 -1
- package/dist/services/plugin-dev-watcher.js +0 -275
- package/dist/services/plugin-dev-watcher.js.map +0 -1
- package/dist/services/plugin-event-bus.d.ts +0 -149
- package/dist/services/plugin-event-bus.d.ts.map +0 -1
- package/dist/services/plugin-event-bus.js +0 -258
- package/dist/services/plugin-event-bus.js.map +0 -1
- package/dist/services/plugin-host-service-cleanup.d.ts +0 -14
- package/dist/services/plugin-host-service-cleanup.d.ts.map +0 -1
- package/dist/services/plugin-host-service-cleanup.js +0 -37
- package/dist/services/plugin-host-service-cleanup.js.map +0 -1
- package/dist/services/plugin-host-services.d.ts +0 -13
- package/dist/services/plugin-host-services.d.ts.map +0 -1
- package/dist/services/plugin-host-services.js +0 -933
- package/dist/services/plugin-host-services.js.map +0 -1
- package/dist/services/plugin-job-coordinator.d.ts +0 -81
- package/dist/services/plugin-job-coordinator.d.ts.map +0 -1
- package/dist/services/plugin-job-coordinator.js +0 -172
- package/dist/services/plugin-job-coordinator.js.map +0 -1
- package/dist/services/plugin-job-scheduler.d.ts +0 -163
- package/dist/services/plugin-job-scheduler.d.ts.map +0 -1
- package/dist/services/plugin-job-scheduler.js +0 -452
- package/dist/services/plugin-job-scheduler.js.map +0 -1
- package/dist/services/plugin-job-store.d.ts +0 -208
- package/dist/services/plugin-job-store.d.ts.map +0 -1
- package/dist/services/plugin-job-store.js +0 -350
- package/dist/services/plugin-job-store.js.map +0 -1
- package/dist/services/plugin-lifecycle.d.ts +0 -240
- package/dist/services/plugin-lifecycle.d.ts.map +0 -1
- package/dist/services/plugin-lifecycle.js +0 -439
- package/dist/services/plugin-lifecycle.js.map +0 -1
- package/dist/services/plugin-loader.core.d.ts +0 -40
- package/dist/services/plugin-loader.core.d.ts.map +0 -1
- package/dist/services/plugin-loader.core.js +0 -879
- package/dist/services/plugin-loader.core.js.map +0 -1
- package/dist/services/plugin-loader.d.ts +0 -30
- package/dist/services/plugin-loader.d.ts.map +0 -1
- package/dist/services/plugin-loader.helpers.d.ts +0 -495
- package/dist/services/plugin-loader.helpers.d.ts.map +0 -1
- package/dist/services/plugin-loader.helpers.js +0 -238
- package/dist/services/plugin-loader.helpers.js.map +0 -1
- package/dist/services/plugin-loader.js +0 -30
- package/dist/services/plugin-loader.js.map +0 -1
- package/dist/services/plugin-loader.worker-paths.d.ts +0 -37
- package/dist/services/plugin-loader.worker-paths.d.ts.map +0 -1
- package/dist/services/plugin-loader.worker-paths.js +0 -62
- package/dist/services/plugin-loader.worker-paths.js.map +0 -1
- package/dist/services/plugin-log-retention.d.ts +0 -20
- package/dist/services/plugin-log-retention.d.ts.map +0 -1
- package/dist/services/plugin-log-retention.js +0 -63
- package/dist/services/plugin-log-retention.js.map +0 -1
- package/dist/services/plugin-manifest-validator.d.ts +0 -90
- package/dist/services/plugin-manifest-validator.d.ts.map +0 -1
- package/dist/services/plugin-manifest-validator.js +0 -72
- package/dist/services/plugin-manifest-validator.js.map +0 -1
- package/dist/services/plugin-registry.d.ts +0 -2542
- package/dist/services/plugin-registry.d.ts.map +0 -1
- package/dist/services/plugin-registry.js +0 -536
- package/dist/services/plugin-registry.js.map +0 -1
- package/dist/services/plugin-runtime-sandbox.d.ts +0 -40
- package/dist/services/plugin-runtime-sandbox.d.ts.map +0 -1
- package/dist/services/plugin-runtime-sandbox.js +0 -154
- package/dist/services/plugin-runtime-sandbox.js.map +0 -1
- package/dist/services/plugin-secrets-handler.d.ts +0 -81
- package/dist/services/plugin-secrets-handler.d.ts.map +0 -1
- package/dist/services/plugin-secrets-handler.js +0 -275
- package/dist/services/plugin-secrets-handler.js.map +0 -1
- package/dist/services/plugin-state-store.d.ts +0 -92
- package/dist/services/plugin-state-store.d.ts.map +0 -1
- package/dist/services/plugin-state-store.js +0 -190
- package/dist/services/plugin-state-store.js.map +0 -1
- package/dist/services/plugin-stream-bus.d.ts +0 -29
- package/dist/services/plugin-stream-bus.d.ts.map +0 -1
- package/dist/services/plugin-stream-bus.js +0 -48
- package/dist/services/plugin-stream-bus.js.map +0 -1
- package/dist/services/plugin-tool-dispatcher.d.ts +0 -180
- package/dist/services/plugin-tool-dispatcher.d.ts.map +0 -1
- package/dist/services/plugin-tool-dispatcher.js +0 -224
- package/dist/services/plugin-tool-dispatcher.js.map +0 -1
- package/dist/services/plugin-tool-registry.d.ts +0 -192
- package/dist/services/plugin-tool-registry.d.ts.map +0 -1
- package/dist/services/plugin-tool-registry.js +0 -224
- package/dist/services/plugin-tool-registry.js.map +0 -1
- package/dist/services/plugin-worker-manager.d.ts +0 -260
- package/dist/services/plugin-worker-manager.d.ts.map +0 -1
- package/dist/services/plugin-worker-manager.js +0 -836
- package/dist/services/plugin-worker-manager.js.map +0 -1
- package/ui-dist/assets/channel-C08AyYJr.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-BIXq6fec.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-BIXq6fec.js +0 -1
- package/ui-dist/assets/index-BmXb0yC1.css +0 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-KvSJhiLM.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-Cr92NnJ4.js +0 -8
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
|
-
import { existsSync } from "node:fs";
|
|
3
|
-
import { readFile } from "node:fs/promises";
|
|
4
|
-
import os from "node:os";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import { fileURLToPath } from "node:url";
|
|
7
|
-
import { promisify } from "node:util";
|
|
8
|
-
export const execFileAsync = promisify(execFile);
|
|
9
|
-
export const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
-
// ---------------------------------------------------------------------------
|
|
11
|
-
// Constants
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
13
|
-
/**
|
|
14
|
-
* Naming convention for npm-published Rudder plugins.
|
|
15
|
-
* Packages matching this pattern are considered Rudder plugins.
|
|
16
|
-
*
|
|
17
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Package Contract
|
|
18
|
-
*/
|
|
19
|
-
export const NPM_PLUGIN_PACKAGE_PREFIX = "rudder-plugin-";
|
|
20
|
-
/**
|
|
21
|
-
* Default local plugin directory. The loader scans this directory for
|
|
22
|
-
* locally-installed plugin packages.
|
|
23
|
-
*
|
|
24
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — On-Disk Layout
|
|
25
|
-
*/
|
|
26
|
-
export const DEFAULT_LOCAL_PLUGIN_DIR = path.join(os.homedir(), ".rudder", "plugins");
|
|
27
|
-
export const DEV_TSX_LOADER_PATH = path.resolve(__dirname, "../../../cli/node_modules/tsx/dist/loader.mjs");
|
|
28
|
-
export function getDeclaredPageRoutePaths(manifest) {
|
|
29
|
-
return (manifest.ui?.slots ?? [])
|
|
30
|
-
.filter((slot) => slot.type === "page" && typeof slot.routePath === "string" && slot.routePath.length > 0)
|
|
31
|
-
.map((slot) => slot.routePath);
|
|
32
|
-
}
|
|
33
|
-
// ---------------------------------------------------------------------------
|
|
34
|
-
// Helpers
|
|
35
|
-
// ---------------------------------------------------------------------------
|
|
36
|
-
/**
|
|
37
|
-
* Check whether a package name matches the Rudder plugin naming convention.
|
|
38
|
-
* Accepts both the "rudder-plugin-" prefix and scoped "@scope/plugin-" packages.
|
|
39
|
-
*
|
|
40
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Package Contract
|
|
41
|
-
*/
|
|
42
|
-
export function isPluginPackageName(name) {
|
|
43
|
-
if (name.startsWith(NPM_PLUGIN_PACKAGE_PREFIX))
|
|
44
|
-
return true;
|
|
45
|
-
// Also accept scoped packages like @acme/plugin-linear or @rudderhq/plugin-*
|
|
46
|
-
if (name.includes("/")) {
|
|
47
|
-
const localPart = name.split("/")[1] ?? "";
|
|
48
|
-
return localPart.startsWith("plugin-");
|
|
49
|
-
}
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Read and parse a package.json from a directory path.
|
|
54
|
-
* Returns null if no package.json exists.
|
|
55
|
-
*/
|
|
56
|
-
export async function readPackageJson(dir) {
|
|
57
|
-
const pkgPath = path.join(dir, "package.json");
|
|
58
|
-
if (!existsSync(pkgPath))
|
|
59
|
-
return null;
|
|
60
|
-
try {
|
|
61
|
-
const raw = await readFile(pkgPath, "utf-8");
|
|
62
|
-
return JSON.parse(raw);
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Resolve the manifest entrypoint from a package.json and package root.
|
|
70
|
-
*
|
|
71
|
-
* Rudder plugin packages define a "rudderPlugin" key in package.json with a
|
|
72
|
-
* "manifest" subkey pointing to the manifest module. This helper resolves the
|
|
73
|
-
* path.
|
|
74
|
-
*
|
|
75
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Package Contract
|
|
76
|
-
*/
|
|
77
|
-
export function resolveManifestPath(packageRoot, pkgJson) {
|
|
78
|
-
const rudderPlugin = pkgJson["rudderPlugin"];
|
|
79
|
-
if (rudderPlugin !== null &&
|
|
80
|
-
typeof rudderPlugin === "object" &&
|
|
81
|
-
!Array.isArray(rudderPlugin)) {
|
|
82
|
-
const manifestRelPath = rudderPlugin["manifest"];
|
|
83
|
-
if (typeof manifestRelPath === "string") {
|
|
84
|
-
// NOTE: the resolved path is returned as-is even if the file does not yet
|
|
85
|
-
// exist on disk (e.g. the package has not been built). Callers MUST guard
|
|
86
|
-
// with existsSync() before passing the path to loadManifestFromPath().
|
|
87
|
-
return path.resolve(packageRoot, manifestRelPath);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// Fallback: look for dist/manifest.js as a convention
|
|
91
|
-
const conventionalPath = path.join(packageRoot, "dist", "manifest.js");
|
|
92
|
-
if (existsSync(conventionalPath)) {
|
|
93
|
-
return conventionalPath;
|
|
94
|
-
}
|
|
95
|
-
// Fallback: look for manifest.js at package root
|
|
96
|
-
const rootManifestPath = path.join(packageRoot, "manifest.js");
|
|
97
|
-
if (existsSync(rootManifestPath)) {
|
|
98
|
-
return rootManifestPath;
|
|
99
|
-
}
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
export function parseSemver(version) {
|
|
103
|
-
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/);
|
|
104
|
-
if (!match)
|
|
105
|
-
return null;
|
|
106
|
-
return {
|
|
107
|
-
major: Number(match[1]),
|
|
108
|
-
minor: Number(match[2]),
|
|
109
|
-
patch: Number(match[3]),
|
|
110
|
-
prerelease: match[4] ? match[4].split(".") : [],
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
export function compareIdentifiers(left, right) {
|
|
114
|
-
const leftIsNumeric = /^\d+$/.test(left);
|
|
115
|
-
const rightIsNumeric = /^\d+$/.test(right);
|
|
116
|
-
if (leftIsNumeric && rightIsNumeric) {
|
|
117
|
-
return Number(left) - Number(right);
|
|
118
|
-
}
|
|
119
|
-
if (leftIsNumeric)
|
|
120
|
-
return -1;
|
|
121
|
-
if (rightIsNumeric)
|
|
122
|
-
return 1;
|
|
123
|
-
return left.localeCompare(right);
|
|
124
|
-
}
|
|
125
|
-
export function compareSemver(left, right) {
|
|
126
|
-
const leftParsed = parseSemver(left);
|
|
127
|
-
const rightParsed = parseSemver(right);
|
|
128
|
-
if (!leftParsed || !rightParsed) {
|
|
129
|
-
throw new Error(`Invalid semver comparison: '${left}' vs '${right}'`);
|
|
130
|
-
}
|
|
131
|
-
const coreOrder = ["major", "minor", "patch"].map((key) => leftParsed[key] - rightParsed[key]).find((delta) => delta !== 0);
|
|
132
|
-
if (coreOrder) {
|
|
133
|
-
return coreOrder;
|
|
134
|
-
}
|
|
135
|
-
if (leftParsed.prerelease.length === 0 && rightParsed.prerelease.length === 0) {
|
|
136
|
-
return 0;
|
|
137
|
-
}
|
|
138
|
-
if (leftParsed.prerelease.length === 0)
|
|
139
|
-
return 1;
|
|
140
|
-
if (rightParsed.prerelease.length === 0)
|
|
141
|
-
return -1;
|
|
142
|
-
const maxLength = Math.max(leftParsed.prerelease.length, rightParsed.prerelease.length);
|
|
143
|
-
for (let index = 0; index < maxLength; index += 1) {
|
|
144
|
-
const leftId = leftParsed.prerelease[index];
|
|
145
|
-
const rightId = rightParsed.prerelease[index];
|
|
146
|
-
if (leftId === undefined)
|
|
147
|
-
return -1;
|
|
148
|
-
if (rightId === undefined)
|
|
149
|
-
return 1;
|
|
150
|
-
const diff = compareIdentifiers(leftId, rightId);
|
|
151
|
-
if (diff !== 0)
|
|
152
|
-
return diff;
|
|
153
|
-
}
|
|
154
|
-
return 0;
|
|
155
|
-
}
|
|
156
|
-
export function getMinimumHostVersion(manifest) {
|
|
157
|
-
return manifest.minimumHostVersion ?? manifest.minimumPaperclipVersion;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Extract UI contribution metadata from a manifest for route serialization.
|
|
161
|
-
*
|
|
162
|
-
* Returns `null` when the plugin does not declare any UI slots or launchers.
|
|
163
|
-
* Launcher declarations are aggregated from both the legacy top-level
|
|
164
|
-
* `launchers` field and the preferred `ui.launchers` field.
|
|
165
|
-
*/
|
|
166
|
-
export function getPluginUiContributionMetadata(manifest) {
|
|
167
|
-
const slots = manifest.ui?.slots ?? [];
|
|
168
|
-
const launchers = [
|
|
169
|
-
...(manifest.launchers ?? []),
|
|
170
|
-
...(manifest.ui?.launchers ?? []),
|
|
171
|
-
];
|
|
172
|
-
if (slots.length === 0 && launchers.length === 0) {
|
|
173
|
-
return null;
|
|
174
|
-
}
|
|
175
|
-
return {
|
|
176
|
-
uiEntryFile: "index.js",
|
|
177
|
-
slots,
|
|
178
|
-
launchers,
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
// ---------------------------------------------------------------------------
|
|
182
|
-
// Factory
|
|
183
|
-
// ---------------------------------------------------------------------------
|
|
184
|
-
/**
|
|
185
|
-
* Create a PluginLoader service.
|
|
186
|
-
*
|
|
187
|
-
* The loader is responsible for plugin discovery, installation, and runtime
|
|
188
|
-
* activation. It reads plugin packages from the local filesystem and npm,
|
|
189
|
-
* validates their manifests, registers them in the database, and — when
|
|
190
|
-
* runtime services are provided — initialises worker processes, event
|
|
191
|
-
* subscriptions, job schedules, webhook endpoints, and agent tools.
|
|
192
|
-
*
|
|
193
|
-
* Usage (discovery & install only):
|
|
194
|
-
* ```ts
|
|
195
|
-
* const loader = pluginLoader(db, { enableLocalFilesystem: true });
|
|
196
|
-
*
|
|
197
|
-
* // Discover all available plugins
|
|
198
|
-
* const result = await loader.discoverAll();
|
|
199
|
-
* for (const plugin of result.discovered) {
|
|
200
|
-
* console.log(plugin.packageName, plugin.manifest?.id);
|
|
201
|
-
* }
|
|
202
|
-
*
|
|
203
|
-
* // Install a specific plugin
|
|
204
|
-
* const discovered = await loader.installPlugin({
|
|
205
|
-
* packageName: "rudder-plugin-linear",
|
|
206
|
-
* version: "^1.0.0",
|
|
207
|
-
* });
|
|
208
|
-
* ```
|
|
209
|
-
*
|
|
210
|
-
* Usage (full runtime activation at server startup):
|
|
211
|
-
* ```ts
|
|
212
|
-
* const loader = pluginLoader(db, loaderOpts, {
|
|
213
|
-
* workerManager,
|
|
214
|
-
* eventBus,
|
|
215
|
-
* jobScheduler,
|
|
216
|
-
* jobStore,
|
|
217
|
-
* toolDispatcher,
|
|
218
|
-
* lifecycleManager,
|
|
219
|
-
* buildHostHandlers: (pluginId, manifest) => ({ ... }),
|
|
220
|
-
* instanceInfo: { instanceId: "inst-1", hostVersion: "1.0.0" },
|
|
221
|
-
* });
|
|
222
|
-
*
|
|
223
|
-
* // Load all ready plugins at startup
|
|
224
|
-
* const loadResult = await loader.loadAll();
|
|
225
|
-
* console.log(`Loaded ${loadResult.succeeded}/${loadResult.total} plugins`);
|
|
226
|
-
*
|
|
227
|
-
* // Load a single plugin after install
|
|
228
|
-
* const singleResult = await loader.loadSingle(pluginId);
|
|
229
|
-
*
|
|
230
|
-
* // Shutdown all plugin workers on server exit
|
|
231
|
-
* await loader.shutdownAll();
|
|
232
|
-
* ```
|
|
233
|
-
*
|
|
234
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — On-Disk Layout
|
|
235
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Install Process
|
|
236
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Process Model
|
|
237
|
-
*/
|
|
238
|
-
//# sourceMappingURL=plugin-loader.helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.helpers.js","sourceRoot":"","sources":["../../src/services/plugin-loader.helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PluginLoader — discovery, installation, and runtime activation of plugins.
|
|
3
|
-
*
|
|
4
|
-
* This service is the entry point for the plugin system's I/O boundary:
|
|
5
|
-
*
|
|
6
|
-
* 1. **Discovery** — Scans the local plugin directory
|
|
7
|
-
* (`~/.rudder/plugins/`) and `node_modules` for packages matching
|
|
8
|
-
* the `rudder-plugin-*` naming convention. Aggregates results with
|
|
9
|
-
* path-based deduplication.
|
|
10
|
-
*
|
|
11
|
-
* 2. **Installation** — `installPlugin()` downloads from npm (or reads a
|
|
12
|
-
* local path), validates the manifest, checks capability consistency,
|
|
13
|
-
* and persists the install record.
|
|
14
|
-
*
|
|
15
|
-
* 3. **Runtime activation** — `activatePlugin()` wires up a loaded plugin
|
|
16
|
-
* with all runtime services: resolves its entrypoint, builds
|
|
17
|
-
* capability-gated host handlers, spawns a worker process, syncs job
|
|
18
|
-
* declarations, registers event subscriptions, and discovers tools.
|
|
19
|
-
*
|
|
20
|
-
* 4. **Shutdown** — `shutdownAll()` gracefully stops all active workers
|
|
21
|
-
* and unregisters runtime hooks.
|
|
22
|
-
*
|
|
23
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Plugin Discovery
|
|
24
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Package Contract
|
|
25
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Process Model
|
|
26
|
-
*/
|
|
27
|
-
export * from "./plugin-loader.core.js";
|
|
28
|
-
export * from "./plugin-loader.helpers.js";
|
|
29
|
-
export * from "./plugin-loader.worker-paths.js";
|
|
30
|
-
//# sourceMappingURL=plugin-loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../../src/services/plugin-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PluginLoader — discovery, installation, and runtime activation of plugins.
|
|
3
|
-
*
|
|
4
|
-
* This service is the entry point for the plugin system's I/O boundary:
|
|
5
|
-
*
|
|
6
|
-
* 1. **Discovery** — Scans the local plugin directory
|
|
7
|
-
* (`~/.rudder/plugins/`) and `node_modules` for packages matching
|
|
8
|
-
* the `rudder-plugin-*` naming convention. Aggregates results with
|
|
9
|
-
* path-based deduplication.
|
|
10
|
-
*
|
|
11
|
-
* 2. **Installation** — `installPlugin()` downloads from npm (or reads a
|
|
12
|
-
* local path), validates the manifest, checks capability consistency,
|
|
13
|
-
* and persists the install record.
|
|
14
|
-
*
|
|
15
|
-
* 3. **Runtime activation** — `activatePlugin()` wires up a loaded plugin
|
|
16
|
-
* with all runtime services: resolves its entrypoint, builds
|
|
17
|
-
* capability-gated host handlers, spawns a worker process, syncs job
|
|
18
|
-
* declarations, registers event subscriptions, and discovers tools.
|
|
19
|
-
*
|
|
20
|
-
* 4. **Shutdown** — `shutdownAll()` gracefully stops all active workers
|
|
21
|
-
* and unregisters runtime hooks.
|
|
22
|
-
*
|
|
23
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Plugin Discovery
|
|
24
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Package Contract
|
|
25
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Process Model
|
|
26
|
-
*/
|
|
27
|
-
import type { PluginRecord } from "@rudderhq/shared";
|
|
28
|
-
export interface PluginPackageResolutionOptions {
|
|
29
|
-
serverPackageRoot?: string;
|
|
30
|
-
}
|
|
31
|
-
export declare function resolvePluginPackageCandidateDirs(localPluginDir: string, packageName: string, packagePath?: string | null, options?: PluginPackageResolutionOptions): string[];
|
|
32
|
-
export declare function resolveWorkerEntrypoint(plugin: PluginRecord & {
|
|
33
|
-
packagePath?: string | null;
|
|
34
|
-
}, localPluginDir: string, options?: PluginPackageResolutionOptions): string;
|
|
35
|
-
export declare function resolveManagedInstallPackageDir(localPluginDir: string, packageName: string): string;
|
|
36
|
-
export declare function isPathInsideDir(candidatePath: string, parentDir: string): boolean;
|
|
37
|
-
//# sourceMappingURL=plugin-loader.worker-paths.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.worker-paths.d.ts","sourceRoot":"","sources":["../../src/services/plugin-loader.worker-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EACV,YAAY,EACb,MAAM,kBAAkB,CAAC;AAO1B,MAAM,WAAW,8BAA8B;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAMD,wBAAgB,iCAAiC,CAC/C,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,OAAO,GAAE,8BAAmC,GAC3C,MAAM,EAAE,CA4BV;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACtD,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,8BAAmC,GAC3C,MAAM,CAmCR;AAED,wBAAgB,+BAA+B,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAKnG;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAKjF"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { __dirname } from "./plugin-loader.helpers.js";
|
|
4
|
-
const SERVER_PACKAGE_ROOT = path.resolve(__dirname, "../..");
|
|
5
|
-
const BUNDLED_PLUGIN_PACKAGE_DIRS = new Map([
|
|
6
|
-
["@rudderhq/plugin-linear", "plugin-linear"],
|
|
7
|
-
]);
|
|
8
|
-
export function resolvePluginPackageCandidateDirs(localPluginDir, packageName, packagePath, options = {}) {
|
|
9
|
-
const candidates = [];
|
|
10
|
-
if (packagePath && existsSync(packagePath)) {
|
|
11
|
-
candidates.push(path.resolve(packagePath));
|
|
12
|
-
}
|
|
13
|
-
if (packageName.startsWith("@")) {
|
|
14
|
-
candidates.push(path.join(localPluginDir, "node_modules", ...packageName.split("/")));
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
candidates.push(path.join(localPluginDir, "node_modules", packageName));
|
|
18
|
-
}
|
|
19
|
-
candidates.push(path.join(localPluginDir, packageName));
|
|
20
|
-
const bundledPluginDirName = BUNDLED_PLUGIN_PACKAGE_DIRS.get(packageName);
|
|
21
|
-
if (bundledPluginDirName) {
|
|
22
|
-
candidates.push(path.join(options.serverPackageRoot ?? SERVER_PACKAGE_ROOT, "dist", "bundled-plugins", bundledPluginDirName));
|
|
23
|
-
}
|
|
24
|
-
return [...new Set(candidates.map((candidate) => path.resolve(candidate)))];
|
|
25
|
-
}
|
|
26
|
-
export function resolveWorkerEntrypoint(plugin, localPluginDir, options = {}) {
|
|
27
|
-
const manifest = plugin.manifestJson;
|
|
28
|
-
const workerRelPath = manifest.entrypoints.worker;
|
|
29
|
-
const packageName = plugin.packageName;
|
|
30
|
-
const checkedEntrypoints = [];
|
|
31
|
-
for (const dir of resolvePluginPackageCandidateDirs(localPluginDir, packageName, plugin.packagePath, options)) {
|
|
32
|
-
const entrypoint = path.resolve(dir, workerRelPath);
|
|
33
|
-
checkedEntrypoints.push(entrypoint);
|
|
34
|
-
// Security: ensure entrypoint is actually inside the directory (prevent path traversal)
|
|
35
|
-
if (!isPathInsideDir(entrypoint, dir)) {
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
if (existsSync(entrypoint)) {
|
|
39
|
-
return entrypoint;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// Fallback: try the worker path as-is (absolute or relative to cwd)
|
|
43
|
-
// ONLY if it's already an absolute path and we trust the manifest (which we've already validated)
|
|
44
|
-
if (path.isAbsolute(workerRelPath) && existsSync(workerRelPath)) {
|
|
45
|
-
return workerRelPath;
|
|
46
|
-
}
|
|
47
|
-
throw new Error(`Worker entrypoint not found for plugin "${plugin.pluginKey}". ` +
|
|
48
|
-
`Checked: ${checkedEntrypoints.join(", ")}`);
|
|
49
|
-
}
|
|
50
|
-
export function resolveManagedInstallPackageDir(localPluginDir, packageName) {
|
|
51
|
-
if (packageName.startsWith("@")) {
|
|
52
|
-
return path.join(localPluginDir, "node_modules", ...packageName.split("/"));
|
|
53
|
-
}
|
|
54
|
-
return path.join(localPluginDir, "node_modules", packageName);
|
|
55
|
-
}
|
|
56
|
-
export function isPathInsideDir(candidatePath, parentDir) {
|
|
57
|
-
const resolvedCandidate = path.resolve(candidatePath);
|
|
58
|
-
const resolvedParent = path.resolve(parentDir);
|
|
59
|
-
const relative = path.relative(resolvedParent, resolvedCandidate);
|
|
60
|
-
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=plugin-loader.worker-paths.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.worker-paths.js","sourceRoot":"","sources":["../../src/services/plugin-loader.worker-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { Db } from "@rudderhq/db";
|
|
2
|
-
/**
|
|
3
|
-
* Delete plugin log rows older than `retentionDays`.
|
|
4
|
-
*
|
|
5
|
-
* Deletes in batches of `DELETE_BATCH_SIZE` to keep transaction sizes
|
|
6
|
-
* bounded and avoid holding locks for extended periods.
|
|
7
|
-
*
|
|
8
|
-
* @returns The total number of rows deleted.
|
|
9
|
-
*/
|
|
10
|
-
export declare function prunePluginLogs(db: Db, retentionDays?: number): Promise<number>;
|
|
11
|
-
/**
|
|
12
|
-
* Start a periodic plugin log cleanup interval.
|
|
13
|
-
*
|
|
14
|
-
* @param db - Database connection
|
|
15
|
-
* @param intervalMs - How often to run (default: 1 hour)
|
|
16
|
-
* @param retentionDays - How many days of logs to keep (default: 7)
|
|
17
|
-
* @returns A cleanup function that stops the interval
|
|
18
|
-
*/
|
|
19
|
-
export declare function startPluginLogRetention(db: Db, intervalMs?: number, retentionDays?: number): () => void;
|
|
20
|
-
//# sourceMappingURL=plugin-log-retention.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-log-retention.d.ts","sourceRoot":"","sources":["../../src/services/plugin-log-retention.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAcvC;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,EAAE,EACN,aAAa,GAAE,MAA+B,GAC7C,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,EAAE,EACN,UAAU,GAAE,MAAwB,EACpC,aAAa,GAAE,MAA+B,GAC7C,MAAM,IAAI,CAaZ"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { pluginLogs } from "@rudderhq/db";
|
|
2
|
-
import { lt } from "drizzle-orm";
|
|
3
|
-
import { logger } from "../middleware/logger.js";
|
|
4
|
-
/** Default retention period: 7 days. */
|
|
5
|
-
const DEFAULT_RETENTION_DAYS = 7;
|
|
6
|
-
/** Maximum rows to delete per sweep to avoid long-running transactions. */
|
|
7
|
-
const DELETE_BATCH_SIZE = 5_000;
|
|
8
|
-
/** Maximum number of batches per sweep to guard against unbounded loops. */
|
|
9
|
-
const MAX_ITERATIONS = 100;
|
|
10
|
-
/**
|
|
11
|
-
* Delete plugin log rows older than `retentionDays`.
|
|
12
|
-
*
|
|
13
|
-
* Deletes in batches of `DELETE_BATCH_SIZE` to keep transaction sizes
|
|
14
|
-
* bounded and avoid holding locks for extended periods.
|
|
15
|
-
*
|
|
16
|
-
* @returns The total number of rows deleted.
|
|
17
|
-
*/
|
|
18
|
-
export async function prunePluginLogs(db, retentionDays = DEFAULT_RETENTION_DAYS) {
|
|
19
|
-
const cutoff = new Date();
|
|
20
|
-
cutoff.setDate(cutoff.getDate() - retentionDays);
|
|
21
|
-
let totalDeleted = 0;
|
|
22
|
-
let iterations = 0;
|
|
23
|
-
// Delete in batches to avoid long-running transactions
|
|
24
|
-
while (iterations < MAX_ITERATIONS) {
|
|
25
|
-
const deleted = await db
|
|
26
|
-
.delete(pluginLogs)
|
|
27
|
-
.where(lt(pluginLogs.createdAt, cutoff))
|
|
28
|
-
.returning({ id: pluginLogs.id })
|
|
29
|
-
.then((rows) => rows.length);
|
|
30
|
-
totalDeleted += deleted;
|
|
31
|
-
iterations++;
|
|
32
|
-
if (deleted < DELETE_BATCH_SIZE)
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
if (iterations >= MAX_ITERATIONS) {
|
|
36
|
-
logger.warn({ totalDeleted, iterations, cutoffDate: cutoff }, "Plugin log retention hit iteration limit; some logs may remain");
|
|
37
|
-
}
|
|
38
|
-
if (totalDeleted > 0) {
|
|
39
|
-
logger.info({ totalDeleted, retentionDays }, "Pruned expired plugin logs");
|
|
40
|
-
}
|
|
41
|
-
return totalDeleted;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Start a periodic plugin log cleanup interval.
|
|
45
|
-
*
|
|
46
|
-
* @param db - Database connection
|
|
47
|
-
* @param intervalMs - How often to run (default: 1 hour)
|
|
48
|
-
* @param retentionDays - How many days of logs to keep (default: 7)
|
|
49
|
-
* @returns A cleanup function that stops the interval
|
|
50
|
-
*/
|
|
51
|
-
export function startPluginLogRetention(db, intervalMs = 60 * 60 * 1_000, retentionDays = DEFAULT_RETENTION_DAYS) {
|
|
52
|
-
const timer = setInterval(() => {
|
|
53
|
-
prunePluginLogs(db, retentionDays).catch((err) => {
|
|
54
|
-
logger.warn({ err }, "Plugin log retention sweep failed");
|
|
55
|
-
});
|
|
56
|
-
}, intervalMs);
|
|
57
|
-
// Run once immediately on startup
|
|
58
|
-
prunePluginLogs(db, retentionDays).catch((err) => {
|
|
59
|
-
logger.warn({ err }, "Initial plugin log retention sweep failed");
|
|
60
|
-
});
|
|
61
|
-
return () => clearInterval(timer);
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=plugin-log-retention.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-log-retention.js","sourceRoot":"","sources":["../../src/services/plugin-log-retention.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,wCAAwC;AACxC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,4EAA4E;AAC5E,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAM,EACN,gBAAwB,sBAAsB;IAE9C,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;IAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;IAEjD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,uDAAuD;IACvD,OAAO,UAAU,GAAG,cAAc,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,EAAE;aACrB,MAAM,CAAC,UAAU,CAAC;aAClB,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;aACvC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;aAChC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/B,YAAY,IAAI,OAAO,CAAC;QACxB,UAAU,EAAE,CAAC;QAEb,IAAI,OAAO,GAAG,iBAAiB;YAAE,MAAM;IACzC,CAAC;IAED,IAAI,UAAU,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CACT,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,EAChD,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,4BAA4B,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,EAAM,EACN,aAAqB,EAAE,GAAG,EAAE,GAAG,KAAK,EACpC,gBAAwB,sBAAsB;IAE9C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,eAAe,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,mCAAmC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,UAAU,CAAC,CAAC;IAEf,kCAAkC;IAClC,eAAe,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,2CAA2C,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PluginManifestValidator — schema validation for plugin manifest files.
|
|
3
|
-
*
|
|
4
|
-
* Uses the shared Zod schema (`pluginManifestV1Schema`) to validate
|
|
5
|
-
* manifest payloads. Provides both a safe `parse()` variant (returns
|
|
6
|
-
* a result union) and a throwing `parseOrThrow()` for HTTP error
|
|
7
|
-
* propagation at install time.
|
|
8
|
-
*
|
|
9
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Plugin Manifest
|
|
10
|
-
* @see packages/shared/src/validators/plugin.ts — Zod schema definition
|
|
11
|
-
*/
|
|
12
|
-
import type { PaperclipPluginManifestV1 } from "@rudderhq/shared";
|
|
13
|
-
/**
|
|
14
|
-
* Successful parse result.
|
|
15
|
-
*/
|
|
16
|
-
export interface ManifestParseSuccess {
|
|
17
|
-
success: true;
|
|
18
|
-
manifest: PaperclipPluginManifestV1;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Failed parse result. `errors` is a human-readable description of what went
|
|
22
|
-
* wrong; `details` is the raw Zod error list for programmatic inspection.
|
|
23
|
-
*/
|
|
24
|
-
export interface ManifestParseFailure {
|
|
25
|
-
success: false;
|
|
26
|
-
errors: string;
|
|
27
|
-
details: Array<{
|
|
28
|
-
path: (string | number)[];
|
|
29
|
-
message: string;
|
|
30
|
-
}>;
|
|
31
|
-
}
|
|
32
|
-
/** Union of parse outcomes. */
|
|
33
|
-
export type ManifestParseResult = ManifestParseSuccess | ManifestParseFailure;
|
|
34
|
-
/**
|
|
35
|
-
* Service for parsing and validating plugin manifests.
|
|
36
|
-
*
|
|
37
|
-
* @see doc/engineering/PLUGIN_RUNTIME_CONTRACT.md — Plugin Manifest
|
|
38
|
-
*/
|
|
39
|
-
export interface PluginManifestValidator {
|
|
40
|
-
/**
|
|
41
|
-
* Try to parse `input` as a plugin manifest.
|
|
42
|
-
*
|
|
43
|
-
* Returns a {@link ManifestParseSuccess} when the input passes all
|
|
44
|
-
* validation rules, or a {@link ManifestParseFailure} with human-readable
|
|
45
|
-
* error messages when it does not.
|
|
46
|
-
*
|
|
47
|
-
* This is the "safe" variant — it never throws.
|
|
48
|
-
*/
|
|
49
|
-
parse(input: unknown): ManifestParseResult;
|
|
50
|
-
/**
|
|
51
|
-
* Parse `input` as a plugin manifest, throwing a 400 HttpError on failure.
|
|
52
|
-
*
|
|
53
|
-
* Use this at install time when an invalid manifest should surface as an
|
|
54
|
-
* HTTP error to the caller.
|
|
55
|
-
*
|
|
56
|
-
* @throws {HttpError} 400 Bad Request if the manifest is invalid.
|
|
57
|
-
*/
|
|
58
|
-
parseOrThrow(input: unknown): PaperclipPluginManifestV1;
|
|
59
|
-
/**
|
|
60
|
-
* Return the list of plugin API versions supported by this host.
|
|
61
|
-
*
|
|
62
|
-
* Callers can use this to present the supported version range to operators
|
|
63
|
-
* or to decide whether a candidate plugin can be installed.
|
|
64
|
-
*/
|
|
65
|
-
getSupportedVersions(): readonly number[];
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Create a {@link PluginManifestValidator}.
|
|
69
|
-
*
|
|
70
|
-
* Usage:
|
|
71
|
-
* ```ts
|
|
72
|
-
* const validator = pluginManifestValidator();
|
|
73
|
-
*
|
|
74
|
-
* // Safe parse — inspect the result
|
|
75
|
-
* const result = validator.parse(rawManifest);
|
|
76
|
-
* if (!result.success) {
|
|
77
|
-
* console.error(result.errors);
|
|
78
|
-
* return;
|
|
79
|
-
* }
|
|
80
|
-
* const manifest = result.manifest;
|
|
81
|
-
*
|
|
82
|
-
* // Throwing parse — use at install time
|
|
83
|
-
* const manifest = validator.parseOrThrow(rawManifest);
|
|
84
|
-
*
|
|
85
|
-
* // Check supported versions
|
|
86
|
-
* const versions = validator.getSupportedVersions(); // [1]
|
|
87
|
-
* ```
|
|
88
|
-
*/
|
|
89
|
-
export declare function pluginManifestValidator(): PluginManifestValidator;
|
|
90
|
-
//# sourceMappingURL=plugin-manifest-validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manifest-validator.d.ts","sourceRoot":"","sources":["../../src/services/plugin-manifest-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAmBlE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,yBAAyB,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,+BAA+B;AAC/B,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAM9E;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE3C;;;;;;;OAOG;IACH,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB,CAAC;IAExD;;;;;OAKG;IACH,oBAAoB,IAAI,SAAS,MAAM,EAAE,CAAC;CAC3C;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,IAAI,uBAAuB,CA4CjE"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { PLUGIN_API_VERSION, pluginManifestV1Schema } from "@rudderhq/shared";
|
|
2
|
-
import { badRequest } from "../errors.js";
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
// Supported manifest API versions
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
/**
|
|
7
|
-
* The set of plugin API versions this host can accept.
|
|
8
|
-
* When a new API version is introduced, add it here. Old versions should be
|
|
9
|
-
* retained until the host drops support for them.
|
|
10
|
-
*/
|
|
11
|
-
const SUPPORTED_VERSIONS = [PLUGIN_API_VERSION];
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
13
|
-
// Factory
|
|
14
|
-
// ---------------------------------------------------------------------------
|
|
15
|
-
/**
|
|
16
|
-
* Create a {@link PluginManifestValidator}.
|
|
17
|
-
*
|
|
18
|
-
* Usage:
|
|
19
|
-
* ```ts
|
|
20
|
-
* const validator = pluginManifestValidator();
|
|
21
|
-
*
|
|
22
|
-
* // Safe parse — inspect the result
|
|
23
|
-
* const result = validator.parse(rawManifest);
|
|
24
|
-
* if (!result.success) {
|
|
25
|
-
* console.error(result.errors);
|
|
26
|
-
* return;
|
|
27
|
-
* }
|
|
28
|
-
* const manifest = result.manifest;
|
|
29
|
-
*
|
|
30
|
-
* // Throwing parse — use at install time
|
|
31
|
-
* const manifest = validator.parseOrThrow(rawManifest);
|
|
32
|
-
*
|
|
33
|
-
* // Check supported versions
|
|
34
|
-
* const versions = validator.getSupportedVersions(); // [1]
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export function pluginManifestValidator() {
|
|
38
|
-
return {
|
|
39
|
-
parse(input) {
|
|
40
|
-
const result = pluginManifestV1Schema.safeParse(input);
|
|
41
|
-
if (result.success) {
|
|
42
|
-
return {
|
|
43
|
-
success: true,
|
|
44
|
-
manifest: result.data,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
const details = result.error.errors.map((issue) => ({
|
|
48
|
-
path: issue.path,
|
|
49
|
-
message: issue.message,
|
|
50
|
-
}));
|
|
51
|
-
const errors = details
|
|
52
|
-
.map(({ path, message }) => path.length > 0 ? `${path.join(".")}: ${message}` : message)
|
|
53
|
-
.join("; ");
|
|
54
|
-
return {
|
|
55
|
-
success: false,
|
|
56
|
-
errors,
|
|
57
|
-
details,
|
|
58
|
-
};
|
|
59
|
-
},
|
|
60
|
-
parseOrThrow(input) {
|
|
61
|
-
const result = this.parse(input);
|
|
62
|
-
if (!result.success) {
|
|
63
|
-
throw badRequest(`Invalid plugin manifest: ${result.errors}`, result.details);
|
|
64
|
-
}
|
|
65
|
-
return result.manifest;
|
|
66
|
-
},
|
|
67
|
-
getSupportedVersions() {
|
|
68
|
-
return SUPPORTED_VERSIONS;
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=plugin-manifest-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manifest-validator.js","sourceRoot":"","sources":["../../src/services/plugin-manifest-validator.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,CAAC,kBAAkB,CAAU,CAAC;AAmEzD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,KAAK,CAAC,KAAc;YAClB,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAEvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,MAAM,CAAC,IAAiC;iBACnD,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClD,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC,CAAC;YAEJ,MAAM,MAAM,GAAG,OAAO;iBACnB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAC5D;iBACA,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM;gBACN,OAAO;aACR,CAAC;QACJ,CAAC;QAED,YAAY,CAAC,KAAc;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEjC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,UAAU,CAAC,4BAA4B,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAChF,CAAC;YAED,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,oBAAoB;YAClB,OAAO,kBAAkB,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC"}
|