@dxos/plugin-automation 0.8.4-main.8360d9e660 → 0.8.4-main.8baae0fced
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/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/neutral/AutomationPanel-GQCS4EPU.mjs +11 -0
- package/dist/lib/neutral/AutomationPlugin.mjs +10 -0
- package/dist/lib/{browser/cli/index.mjs → neutral/AutomationPlugin.node.mjs} +126 -130
- package/dist/lib/neutral/AutomationPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/AutomationPlugin.workerd.mjs +23 -0
- package/dist/lib/neutral/AutomationPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/AutomationSettings-F6AZQV74.mjs +31 -0
- package/dist/lib/neutral/AutomationSettings-F6AZQV74.mjs.map +7 -0
- package/dist/lib/neutral/FunctionsContainer-2ETGQQR2.mjs +38 -0
- package/dist/lib/neutral/FunctionsContainer-2ETGQQR2.mjs.map +7 -0
- package/dist/lib/{browser/chunk-75XLBFAG.mjs → neutral/FunctionsPanel-SVRKRUXZ.mjs} +22 -22
- package/dist/lib/neutral/FunctionsPanel-SVRKRUXZ.mjs.map +7 -0
- package/dist/lib/{browser/chunk-FUVAC5EC.mjs → neutral/FunctionsRegistry-7ITCFJCW.mjs} +24 -25
- package/dist/lib/neutral/FunctionsRegistry-7ITCFJCW.mjs.map +7 -0
- package/dist/lib/neutral/TriggerSettings-XCHIZPOR.mjs +9 -0
- package/dist/lib/neutral/app-graph-builder-4QOUKY5L.mjs +75 -0
- package/dist/lib/neutral/app-graph-builder-4QOUKY5L.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +15 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/node.mjs +13 -0
- package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
- package/dist/lib/neutral/chunk-2JP77CMN.mjs +42 -0
- package/dist/lib/neutral/chunk-2JP77CMN.mjs.map +7 -0
- package/dist/lib/{browser/chunk-EL64ZPPN.mjs → neutral/chunk-4ETZEEYR.mjs} +7 -3
- package/dist/lib/neutral/chunk-4ETZEEYR.mjs.map +7 -0
- package/dist/lib/{browser/chunk-O23LHDEX.mjs → neutral/chunk-EIIPEUUP.mjs} +60 -26
- package/dist/lib/neutral/chunk-EIIPEUUP.mjs.map +7 -0
- package/dist/lib/neutral/chunk-HRUXURVS.mjs +12 -0
- package/dist/lib/neutral/chunk-HRUXURVS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/{browser/chunk-BWEKRPFJ.mjs → neutral/chunk-K3C5ZTZA.mjs} +29 -38
- package/dist/lib/neutral/chunk-K3C5ZTZA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VCWVO3JE.mjs +8 -0
- package/dist/lib/neutral/chunk-VCWVO3JE.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VRGWNUVV.mjs +36 -0
- package/dist/lib/neutral/chunk-VRGWNUVV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YA2ZTSOH.mjs +73 -0
- package/dist/lib/neutral/chunk-YA2ZTSOH.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +16 -0
- package/dist/lib/neutral/containers/index.mjs +13 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/create-trigger-from-template-XAJWHKO2.mjs +68 -0
- package/dist/lib/neutral/create-trigger-from-template-XAJWHKO2.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +47 -0
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +16 -0
- package/dist/lib/neutral/layer-specs-XLG75KLY.mjs +161 -0
- package/dist/lib/neutral/layer-specs-XLG75KLY.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +8 -0
- package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs +13 -0
- package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-3OGMAMKV.mjs +57 -0
- package/dist/lib/neutral/react-surface-3OGMAMKV.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +8 -0
- package/dist/lib/neutral/translations.mjs +47 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +12 -0
- package/dist/types/src/AutomationPlugin.d.ts +1 -0
- package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
- package/dist/types/src/{cli/plugin.d.ts → AutomationPlugin.node.d.ts} +2 -1
- package/dist/types/src/AutomationPlugin.node.d.ts.map +1 -0
- package/dist/types/src/AutomationPlugin.test.d.ts +2 -0
- package/dist/types/src/AutomationPlugin.test.d.ts.map +1 -0
- package/dist/types/src/AutomationPlugin.workerd.d.ts +4 -0
- package/dist/types/src/AutomationPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +6 -4
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/layer-specs.d.ts +5 -0
- package/dist/types/src/capabilities/layer-specs.d.ts.map +1 -0
- package/dist/types/src/capabilities/node.d.ts +6 -0
- package/dist/types/src/capabilities/node.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/commands/index.d.ts.map +1 -0
- package/dist/types/src/{cli/commands → commands}/trigger/create/index.d.ts +6 -6
- package/dist/types/src/commands/trigger/create/index.d.ts.map +1 -0
- package/dist/types/src/{cli/commands → commands}/trigger/create/queue.d.ts +1 -1
- package/dist/types/src/commands/trigger/create/queue.d.ts.map +1 -0
- package/dist/types/src/{cli/commands → commands}/trigger/create/subscription.d.ts +1 -1
- package/dist/types/src/commands/trigger/create/subscription.d.ts.map +1 -0
- package/dist/types/src/{cli/commands → commands}/trigger/create/timer.d.ts +1 -1
- package/dist/types/src/commands/trigger/create/timer.d.ts.map +1 -0
- package/dist/types/src/{cli/commands → commands}/trigger/index.d.ts +7 -7
- package/dist/types/src/commands/trigger/index.d.ts.map +1 -0
- package/dist/types/src/{cli/commands → commands}/trigger/list.d.ts +1 -1
- package/dist/types/src/commands/trigger/list.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/options.d.ts.map +1 -0
- package/dist/types/src/{cli/commands → commands}/trigger/remove.d.ts +1 -1
- package/dist/types/src/commands/trigger/remove.d.ts.map +1 -0
- package/dist/types/src/{cli/commands → commands}/trigger/update/index.d.ts +5 -5
- package/dist/types/src/commands/trigger/update/index.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/update/queue.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/update/subscription.d.ts.map +1 -0
- package/dist/types/src/commands/trigger/update/timer.d.ts.map +1 -0
- package/dist/types/src/{cli/commands → commands}/trigger/util.d.ts +4 -4
- package/dist/types/src/commands/trigger/util.d.ts.map +1 -0
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +32 -32
- package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/AutomationPanel/index.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsPanel/index.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -1
- package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +6 -6
- package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +4 -4
- package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +95 -93
- package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
- package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts +3 -1
- package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts.map +1 -1
- package/dist/types/src/containers/AutomationSettings/index.d.ts +1 -2
- package/dist/types/src/containers/AutomationSettings/index.d.ts.map +1 -1
- package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts +2 -4
- package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts.map +1 -1
- package/dist/types/src/containers/FunctionsContainer/index.d.ts +1 -2
- package/dist/types/src/containers/FunctionsContainer/index.d.ts.map +1 -1
- package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts +3 -3
- package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +0 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +1 -1
- package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/create-trigger-from-template.d.ts +5 -0
- package/dist/types/src/operations/create-trigger-from-template.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/testing/test-functions.d.ts +78 -76
- package/dist/types/src/testing/test-functions.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +2 -0
- package/dist/types/src/testing.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +32 -33
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/AutomationOperation.d.ts +19 -0
- package/dist/types/src/types/AutomationOperation.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +7 -28
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +125 -68
- package/src/AutomationPlugin.node.ts +28 -0
- package/src/AutomationPlugin.test.ts +27 -0
- package/src/AutomationPlugin.tsx +12 -11
- package/src/AutomationPlugin.workerd.ts +18 -0
- package/src/capabilities/app-graph-builder.ts +66 -0
- package/src/capabilities/index.ts +10 -4
- package/src/capabilities/layer-specs.ts +231 -0
- package/src/capabilities/node.ts +13 -0
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +17 -15
- package/src/{cli/commands → commands}/trigger/create/queue.ts +7 -10
- package/src/{cli/commands → commands}/trigger/create/subscription.ts +8 -11
- package/src/{cli/commands → commands}/trigger/create/timer.ts +4 -7
- package/src/{cli/commands → commands}/trigger/list.ts +7 -4
- package/src/{cli/commands → commands}/trigger/remove.ts +2 -3
- package/src/{cli/commands → commands}/trigger/update/queue.ts +19 -20
- package/src/{cli/commands → commands}/trigger/update/subscription.ts +15 -15
- package/src/{cli/commands → commands}/trigger/update/timer.ts +16 -16
- package/src/{cli/commands → commands}/trigger/util.ts +25 -17
- package/src/components/AutomationPanel/AutomationPanel.stories.tsx +12 -5
- package/src/components/AutomationPanel/AutomationPanel.tsx +89 -47
- package/src/components/FunctionsPanel/FunctionsPanel.tsx +33 -25
- package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +32 -23
- package/src/components/TriggerEditor/FunctionInputEditor.tsx +4 -4
- package/src/components/TriggerEditor/SpecSelector.tsx +17 -13
- package/src/components/TriggerEditor/TriggerEditor.stories.tsx +19 -13
- package/src/components/TriggerEditor/TriggerEditor.tsx +13 -17
- package/src/containers/AutomationSettings/AutomationSettings.tsx +11 -7
- package/src/containers/AutomationSettings/index.ts +1 -3
- package/src/containers/FunctionsContainer/FunctionsContainer.tsx +11 -11
- package/src/containers/FunctionsContainer/index.ts +1 -3
- package/src/containers/TriggerSettings/TriggerSettings.tsx +32 -10
- package/src/hooks/index.ts +1 -1
- package/src/hooks/useTriggerRuntimeControls.ts +13 -8
- package/src/index.ts +0 -4
- package/src/meta.ts +3 -1
- package/src/operations/create-trigger-from-template.ts +71 -0
- package/src/operations/index.ts +7 -0
- package/src/plugin.ts +11 -0
- package/src/testing/test-functions.ts +6 -3
- package/src/testing.ts +7 -0
- package/src/translations.ts +38 -39
- package/src/types/AutomationOperation.ts +30 -0
- package/src/types/index.ts +2 -2
- package/src/types/schema.ts +2 -23
- package/dist/lib/browser/AutomationPanel-IGLIQY2N.mjs +0 -11
- package/dist/lib/browser/AutomationSettings-XGJGVBDD.mjs +0 -37
- package/dist/lib/browser/AutomationSettings-XGJGVBDD.mjs.map +0 -7
- package/dist/lib/browser/FunctionsContainer-R4ZMYSFJ.mjs +0 -43
- package/dist/lib/browser/FunctionsContainer-R4ZMYSFJ.mjs.map +0 -7
- package/dist/lib/browser/FunctionsPanel-NMA4RYJL.mjs +0 -10
- package/dist/lib/browser/FunctionsRegistry-TMKAEG5E.mjs +0 -10
- package/dist/lib/browser/TriggerSettings-GW5OEM2G.mjs +0 -11
- package/dist/lib/browser/app-graph-builder-74ILZP25.mjs +0 -83
- package/dist/lib/browser/app-graph-builder-74ILZP25.mjs.map +0 -7
- package/dist/lib/browser/chunk-5WMYSXEH.mjs +0 -83
- package/dist/lib/browser/chunk-5WMYSXEH.mjs.map +0 -7
- package/dist/lib/browser/chunk-75XLBFAG.mjs.map +0 -7
- package/dist/lib/browser/chunk-BWEKRPFJ.mjs.map +0 -7
- package/dist/lib/browser/chunk-EL64ZPPN.mjs.map +0 -7
- package/dist/lib/browser/chunk-FUVAC5EC.mjs.map +0 -7
- package/dist/lib/browser/chunk-LHJEQVX5.mjs +0 -8
- package/dist/lib/browser/chunk-LHJEQVX5.mjs.map +0 -7
- package/dist/lib/browser/chunk-O23LHDEX.mjs.map +0 -7
- package/dist/lib/browser/chunk-PUYY7B5F.mjs +0 -31
- package/dist/lib/browser/chunk-PUYY7B5F.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZBEMNWNY.mjs +0 -93
- package/dist/lib/browser/chunk-ZBEMNWNY.mjs.map +0 -7
- package/dist/lib/browser/cli/index.mjs.map +0 -7
- package/dist/lib/browser/compute-runtime-I3I2BIRE.mjs +0 -130
- package/dist/lib/browser/compute-runtime-I3I2BIRE.mjs.map +0 -7
- package/dist/lib/browser/hooks/index.mjs +0 -13
- package/dist/lib/browser/index.mjs +0 -123
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/operation-resolver-NGN4BEWN.mjs +0 -84
- package/dist/lib/browser/operation-resolver-NGN4BEWN.mjs.map +0 -7
- package/dist/lib/browser/react-surface-SXDIM3RM.mjs +0 -65
- package/dist/lib/browser/react-surface-SXDIM3RM.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -14
- package/dist/lib/node-esm/AutomationPanel-O2BCQA7P.mjs +0 -12
- package/dist/lib/node-esm/AutomationSettings-W52ZO2XI.mjs +0 -38
- package/dist/lib/node-esm/AutomationSettings-W52ZO2XI.mjs.map +0 -7
- package/dist/lib/node-esm/FunctionsContainer-GYRPQZM7.mjs +0 -44
- package/dist/lib/node-esm/FunctionsContainer-GYRPQZM7.mjs.map +0 -7
- package/dist/lib/node-esm/FunctionsPanel-DCXXLSVP.mjs +0 -11
- package/dist/lib/node-esm/FunctionsRegistry-7WCHC64E.mjs +0 -11
- package/dist/lib/node-esm/FunctionsRegistry-7WCHC64E.mjs.map +0 -7
- package/dist/lib/node-esm/TriggerSettings-2GKFPECW.mjs +0 -12
- package/dist/lib/node-esm/TriggerSettings-2GKFPECW.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-VDXPOWCH.mjs +0 -84
- package/dist/lib/node-esm/app-graph-builder-VDXPOWCH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6JVB3IHW.mjs +0 -97
- package/dist/lib/node-esm/chunk-6JVB3IHW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BNWZ2NNI.mjs +0 -32
- package/dist/lib/node-esm/chunk-BNWZ2NNI.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FPXVLTEY.mjs +0 -270
- package/dist/lib/node-esm/chunk-FPXVLTEY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-K7T2MVB7.mjs +0 -98
- package/dist/lib/node-esm/chunk-K7T2MVB7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-Q5JSKD6Z.mjs +0 -295
- package/dist/lib/node-esm/chunk-Q5JSKD6Z.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-V3VUE2NR.mjs +0 -10
- package/dist/lib/node-esm/chunk-V3VUE2NR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-WC5AT7B3.mjs +0 -19
- package/dist/lib/node-esm/chunk-WC5AT7B3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XCFO2IXT.mjs +0 -84
- package/dist/lib/node-esm/chunk-XCFO2IXT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XQO3HK62.mjs +0 -94
- package/dist/lib/node-esm/chunk-XQO3HK62.mjs.map +0 -7
- package/dist/lib/node-esm/cli/index.mjs +0 -1116
- package/dist/lib/node-esm/cli/index.mjs.map +0 -7
- package/dist/lib/node-esm/compute-runtime-7HCSIYFG.mjs +0 -131
- package/dist/lib/node-esm/compute-runtime-7HCSIYFG.mjs.map +0 -7
- package/dist/lib/node-esm/hooks/index.mjs +0 -14
- package/dist/lib/node-esm/index.mjs +0 -124
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/operation-resolver-ANGACQZG.mjs +0 -85
- package/dist/lib/node-esm/operation-resolver-ANGACQZG.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-QVLVDEVW.mjs +0 -66
- package/dist/lib/node-esm/react-surface-QVLVDEVW.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -15
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts +0 -6
- package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts.map +0 -1
- package/dist/types/src/capabilities/compute-runtime/index.d.ts +0 -3
- package/dist/types/src/capabilities/compute-runtime/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
- package/dist/types/src/cli/commands/index.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/create/index.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/create/queue.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/create/subscription.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/create/timer.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/index.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/list.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/options.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/remove.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/update/index.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/update/queue.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/update/subscription.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/update/timer.d.ts.map +0 -1
- package/dist/types/src/cli/commands/trigger/util.d.ts.map +0 -1
- package/dist/types/src/cli/index.d.ts +0 -2
- package/dist/types/src/cli/index.d.ts.map +0 -1
- package/dist/types/src/cli/plugin.d.ts.map +0 -1
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +0 -12
- package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -23
- package/dist/types/src/types/capabilities.d.ts.map +0 -1
- package/dist/types/src/types/events.d.ts +0 -5
- package/dist/types/src/types/events.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +0 -73
- package/src/capabilities/app-graph-builder/index.ts +0 -7
- package/src/capabilities/compute-runtime/compute-runtime.ts +0 -155
- package/src/capabilities/compute-runtime/index.ts +0 -7
- package/src/capabilities/operation-resolver/index.ts +0 -7
- package/src/capabilities/operation-resolver/operation-resolver.ts +0 -80
- package/src/capabilities/react-surface/index.ts +0 -7
- package/src/cli/index.ts +0 -5
- package/src/cli/plugin.ts +0 -24
- package/src/hooks/useComputeRuntimeCallback.ts +0 -67
- package/src/types/capabilities.ts +0 -45
- package/src/types/events.ts +0 -11
- /package/dist/lib/{browser/AutomationPanel-IGLIQY2N.mjs.map → neutral/AutomationPanel-GQCS4EPU.mjs.map} +0 -0
- /package/dist/lib/{browser/FunctionsPanel-NMA4RYJL.mjs.map → neutral/AutomationPlugin.mjs.map} +0 -0
- /package/dist/lib/{browser/FunctionsRegistry-TMKAEG5E.mjs.map → neutral/TriggerSettings-XCHIZPOR.mjs.map} +0 -0
- /package/dist/lib/{browser/TriggerSettings-GW5OEM2G.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{browser/hooks → neutral/components}/index.mjs.map +0 -0
- /package/dist/lib/{browser/types → neutral}/index.mjs.map +0 -0
- /package/dist/lib/{node-esm/AutomationPanel-O2BCQA7P.mjs.map → neutral/meta.mjs.map} +0 -0
- /package/dist/lib/{node-esm/hooks → neutral/operations}/index.mjs.map +0 -0
- /package/dist/lib/{node-esm/FunctionsPanel-DCXXLSVP.mjs.map → neutral/testing.mjs.map} +0 -0
- /package/dist/lib/{node-esm → neutral}/types/index.mjs.map +0 -0
- /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
- /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
- /package/dist/types/src/{cli/commands → commands}/index.d.ts +0 -0
- /package/dist/types/src/{cli/commands → commands}/trigger/options.d.ts +0 -0
- /package/dist/types/src/{cli/commands → commands}/trigger/update/queue.d.ts +0 -0
- /package/dist/types/src/{cli/commands → commands}/trigger/update/subscription.d.ts +0 -0
- /package/dist/types/src/{cli/commands → commands}/trigger/update/timer.d.ts +0 -0
- /package/src/{cli/commands → commands}/index.ts +0 -0
- /package/src/{cli/commands → commands}/trigger/create/index.ts +0 -0
- /package/src/{cli/commands → commands}/trigger/index.ts +0 -0
- /package/src/{cli/commands → commands}/trigger/options.ts +0 -0
- /package/src/{cli/commands → commands}/trigger/update/index.ts +0 -0
|
@@ -13,8 +13,8 @@ import * as Option from 'effect/Option';
|
|
|
13
13
|
import { CommandConfig } from '@dxos/cli-util';
|
|
14
14
|
import { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';
|
|
15
15
|
import { Common } from '@dxos/cli-util';
|
|
16
|
+
import { Operation, Trigger } from '@dxos/compute';
|
|
16
17
|
import { DXN, Database, Filter, JsonSchema, Obj, Query, Ref } from '@dxos/echo';
|
|
17
|
-
import { Function, Trigger } from '@dxos/functions';
|
|
18
18
|
|
|
19
19
|
import { Deep, Delay, Enabled, Input, TriggerId, Typename } from '../options';
|
|
20
20
|
import { printTrigger, promptForSchemaInput, selectFunction, selectTrigger } from '../util';
|
|
@@ -61,7 +61,7 @@ export const subscription = Command.make(
|
|
|
61
61
|
).pipe(
|
|
62
62
|
Command.withDescription('Update a subscription trigger.'),
|
|
63
63
|
Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),
|
|
64
|
-
Command.provideEffectDiscard(() => withTypes(
|
|
64
|
+
Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),
|
|
65
65
|
);
|
|
66
66
|
|
|
67
67
|
/**
|
|
@@ -95,10 +95,10 @@ const extractCurrentTypename = (spec: Trigger.SubscriptionSpec | undefined): Opt
|
|
|
95
95
|
* @returns The current function (either original or newly assigned)
|
|
96
96
|
*/
|
|
97
97
|
const updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionIdOption: Option.Option<string>) {
|
|
98
|
-
let currentFn:
|
|
98
|
+
let currentFn: Operation.PersistentOperation | undefined = trigger.function
|
|
99
99
|
? yield* Database.load(trigger.function) as any
|
|
100
100
|
: undefined;
|
|
101
|
-
if (currentFn && !Obj.instanceOf(
|
|
101
|
+
if (currentFn && !Obj.instanceOf(Operation.PersistentOperation, currentFn)) {
|
|
102
102
|
currentFn = undefined;
|
|
103
103
|
}
|
|
104
104
|
const currentFunctionName = currentFn ? (currentFn.name ?? currentFn.id) : undefined;
|
|
@@ -115,13 +115,13 @@ const updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionId
|
|
|
115
115
|
onNone: () => selectFunction(),
|
|
116
116
|
onSome: (id) => Effect.succeed(id),
|
|
117
117
|
});
|
|
118
|
-
const functions = yield* Database.runQuery(Filter.type(
|
|
118
|
+
const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));
|
|
119
119
|
const foundFn = functions.find((fn) => fn.id === functionId);
|
|
120
|
-
if (!foundFn || !Obj.instanceOf(
|
|
120
|
+
if (!foundFn || !Obj.instanceOf(Operation.PersistentOperation, foundFn)) {
|
|
121
121
|
return yield* Effect.fail(new Error(`Function not found: ${functionId}`));
|
|
122
122
|
}
|
|
123
|
-
Obj.
|
|
124
|
-
|
|
123
|
+
Obj.update(trigger, (trigger) => {
|
|
124
|
+
trigger.function = Ref.make(foundFn);
|
|
125
125
|
});
|
|
126
126
|
currentFn = foundFn;
|
|
127
127
|
}
|
|
@@ -210,8 +210,8 @@ const updateSpec = Effect.fn(function* (
|
|
|
210
210
|
subscriptionOptions.delay = delayOptionValue.value;
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
-
Obj.
|
|
214
|
-
const spec =
|
|
213
|
+
Obj.update(trigger, (trigger) => {
|
|
214
|
+
const spec = trigger.spec;
|
|
215
215
|
if (spec?.kind === 'subscription') {
|
|
216
216
|
// Cast needed because QueryAST types are deeply readonly but spec.query expects mutable.
|
|
217
217
|
spec.query = { ast: queryAst } as NonNullable<typeof spec.query>;
|
|
@@ -227,7 +227,7 @@ const updateSpec = Effect.fn(function* (
|
|
|
227
227
|
*/
|
|
228
228
|
const updateInput = Effect.fn(function* (
|
|
229
229
|
trigger: Trigger.Trigger,
|
|
230
|
-
fn:
|
|
230
|
+
fn: Operation.PersistentOperation,
|
|
231
231
|
inputOption: Option.Option<Record<string, any>>,
|
|
232
232
|
) {
|
|
233
233
|
const currentInput = trigger.input as Record<string, any> | undefined;
|
|
@@ -249,8 +249,8 @@ const updateInput = Effect.fn(function* (
|
|
|
249
249
|
promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined, currentInput),
|
|
250
250
|
onSome: (value) => Effect.succeed(value as Record<string, any>),
|
|
251
251
|
});
|
|
252
|
-
Obj.
|
|
253
|
-
|
|
252
|
+
Obj.update(trigger, (trigger) => {
|
|
253
|
+
trigger.input = inputObj;
|
|
254
254
|
});
|
|
255
255
|
}
|
|
256
256
|
});
|
|
@@ -272,7 +272,7 @@ const updateEnabled = Effect.fn(function* (
|
|
|
272
272
|
}).pipe(Prompt.run),
|
|
273
273
|
onSome: () => Effect.succeed(enabled),
|
|
274
274
|
});
|
|
275
|
-
Obj.
|
|
276
|
-
|
|
275
|
+
Obj.update(trigger, (trigger) => {
|
|
276
|
+
trigger.enabled = enabledValue;
|
|
277
277
|
});
|
|
278
278
|
});
|
|
@@ -12,8 +12,8 @@ import * as Option from 'effect/Option';
|
|
|
12
12
|
import { CommandConfig } from '@dxos/cli-util';
|
|
13
13
|
import { flushAndSync, print, spaceLayer, withTypes } from '@dxos/cli-util';
|
|
14
14
|
import { Common } from '@dxos/cli-util';
|
|
15
|
+
import { Operation, Trigger } from '@dxos/compute';
|
|
15
16
|
import { DXN, Database, Filter, JsonSchema, Obj, Ref } from '@dxos/echo';
|
|
16
|
-
import { Function, Trigger } from '@dxos/functions';
|
|
17
17
|
|
|
18
18
|
import { Cron, Enabled, Input, TriggerId } from '../options';
|
|
19
19
|
import { printTrigger, promptForSchemaInput, selectFunction, selectTrigger } from '../util';
|
|
@@ -58,7 +58,7 @@ export const timer = Command.make(
|
|
|
58
58
|
).pipe(
|
|
59
59
|
Command.withDescription('Update a timer trigger.'),
|
|
60
60
|
Command.provide(({ spaceId }) => spaceLayer(spaceId, true)),
|
|
61
|
-
Command.provideEffectDiscard(() => withTypes(
|
|
61
|
+
Command.provideEffectDiscard(() => withTypes(Operation.PersistentOperation, Trigger.Trigger)),
|
|
62
62
|
);
|
|
63
63
|
|
|
64
64
|
/**
|
|
@@ -67,10 +67,10 @@ export const timer = Command.make(
|
|
|
67
67
|
* @returns The current function (either original or newly assigned)
|
|
68
68
|
*/
|
|
69
69
|
const updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionIdOption: Option.Option<string>) {
|
|
70
|
-
let currentFn:
|
|
70
|
+
let currentFn: Operation.PersistentOperation | undefined = trigger.function
|
|
71
71
|
? yield* Database.load(trigger.function) as any
|
|
72
72
|
: undefined;
|
|
73
|
-
if (currentFn && !Obj.instanceOf(
|
|
73
|
+
if (currentFn && !Obj.instanceOf(Operation.PersistentOperation, currentFn)) {
|
|
74
74
|
currentFn = undefined;
|
|
75
75
|
}
|
|
76
76
|
const currentFunctionName = currentFn ? (currentFn.name ?? currentFn.id) : undefined;
|
|
@@ -87,13 +87,13 @@ const updateFunction = Effect.fn(function* (trigger: Trigger.Trigger, functionId
|
|
|
87
87
|
onNone: () => selectFunction(),
|
|
88
88
|
onSome: (id) => Effect.succeed(id),
|
|
89
89
|
});
|
|
90
|
-
const functions = yield* Database.runQuery(Filter.type(
|
|
90
|
+
const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));
|
|
91
91
|
const foundFn = functions.find((fn) => fn.id === functionId);
|
|
92
|
-
if (!foundFn || !Obj.instanceOf(
|
|
92
|
+
if (!foundFn || !Obj.instanceOf(Operation.PersistentOperation, foundFn)) {
|
|
93
93
|
return yield* Effect.fail(new Error(`Function not found: ${functionId}`));
|
|
94
94
|
}
|
|
95
|
-
Obj.
|
|
96
|
-
|
|
95
|
+
Obj.update(trigger, (trigger) => {
|
|
96
|
+
trigger.function = Ref.make(foundFn);
|
|
97
97
|
});
|
|
98
98
|
currentFn = foundFn;
|
|
99
99
|
}
|
|
@@ -128,9 +128,9 @@ const updateCron = Effect.fn(function* (trigger: Trigger.Trigger, cronOption: Op
|
|
|
128
128
|
}).pipe(Prompt.run),
|
|
129
129
|
onSome: (value) => Effect.succeed(value),
|
|
130
130
|
});
|
|
131
|
-
Obj.
|
|
132
|
-
if (
|
|
133
|
-
|
|
131
|
+
Obj.update(trigger, (trigger) => {
|
|
132
|
+
if (trigger.spec?.kind === 'timer') {
|
|
133
|
+
trigger.spec.cron = cron;
|
|
134
134
|
}
|
|
135
135
|
});
|
|
136
136
|
}
|
|
@@ -142,7 +142,7 @@ const updateCron = Effect.fn(function* (trigger: Trigger.Trigger, cronOption: Op
|
|
|
142
142
|
*/
|
|
143
143
|
const updateInput = Effect.fn(function* (
|
|
144
144
|
trigger: Trigger.Trigger,
|
|
145
|
-
fn:
|
|
145
|
+
fn: Operation.PersistentOperation,
|
|
146
146
|
inputOption: Option.Option<Record<string, any>>,
|
|
147
147
|
) {
|
|
148
148
|
const currentInput = trigger.input as Record<string, any> | undefined;
|
|
@@ -164,8 +164,8 @@ const updateInput = Effect.fn(function* (
|
|
|
164
164
|
promptForSchemaInput(fn.inputSchema ? JsonSchema.toEffectSchema(fn.inputSchema) : undefined, currentInput),
|
|
165
165
|
onSome: (value) => Effect.succeed(value as Record<string, any>),
|
|
166
166
|
});
|
|
167
|
-
Obj.
|
|
168
|
-
|
|
167
|
+
Obj.update(trigger, (trigger) => {
|
|
168
|
+
trigger.input = inputObj;
|
|
169
169
|
});
|
|
170
170
|
}
|
|
171
171
|
});
|
|
@@ -187,7 +187,7 @@ const updateEnabled = Effect.fn(function* (
|
|
|
187
187
|
}).pipe(Prompt.run),
|
|
188
188
|
onSome: () => Effect.succeed(enabled),
|
|
189
189
|
});
|
|
190
|
-
Obj.
|
|
191
|
-
|
|
190
|
+
Obj.update(trigger, (trigger) => {
|
|
191
|
+
trigger.enabled = enabledValue;
|
|
192
192
|
});
|
|
193
193
|
});
|
|
@@ -12,9 +12,9 @@ import type * as Schema from 'effect/Schema';
|
|
|
12
12
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
13
13
|
|
|
14
14
|
import { FormBuilder } from '@dxos/cli-util';
|
|
15
|
-
import {
|
|
15
|
+
import { Operation, Trigger } from '@dxos/compute';
|
|
16
|
+
import { Annotation, Database, Entity, Feed, Filter, Obj, Query, Ref, Type } from '@dxos/echo';
|
|
16
17
|
import { getProperties } from '@dxos/effect';
|
|
17
|
-
import { Function, Trigger } from '@dxos/functions';
|
|
18
18
|
import { FeedAnnotation } from '@dxos/schema';
|
|
19
19
|
|
|
20
20
|
export type TriggerRemoteStatus = 'available' | 'not available' | 'n/a';
|
|
@@ -60,7 +60,10 @@ export const printTrigger = Effect.fn(function* (trigger: Trigger.Trigger, remot
|
|
|
60
60
|
fn,
|
|
61
61
|
FormBuilder.nest(
|
|
62
62
|
'function',
|
|
63
|
-
FormBuilder.make().pipe(
|
|
63
|
+
FormBuilder.make().pipe(
|
|
64
|
+
FormBuilder.set('key', Obj.getMeta(fn as Operation.PersistentOperation).key),
|
|
65
|
+
FormBuilder.set('dxn', Obj.getDXN(fn as Obj.Unknown).toString()),
|
|
66
|
+
),
|
|
64
67
|
),
|
|
65
68
|
),
|
|
66
69
|
FormBuilder.nestedOption('spec', Option.fromNullable(trigger.spec).pipe(Option.map(printSpec))),
|
|
@@ -272,7 +275,7 @@ export const promptForSchemaInput = Effect.fn(function* (
|
|
|
272
275
|
* Queries the database for functions and prompts the user to select one.
|
|
273
276
|
*/
|
|
274
277
|
export const selectFunction = Effect.fn(function* () {
|
|
275
|
-
const functions = yield* Database.runQuery(Filter.type(
|
|
278
|
+
const functions = yield* Database.runQuery(Filter.type(Operation.PersistentOperation));
|
|
276
279
|
|
|
277
280
|
if (functions.length === 0) {
|
|
278
281
|
return yield* Effect.fail(new Error('No functions available'));
|
|
@@ -280,7 +283,7 @@ export const selectFunction = Effect.fn(function* () {
|
|
|
280
283
|
|
|
281
284
|
const selected = yield* Prompt.select({
|
|
282
285
|
message: 'Select a function:',
|
|
283
|
-
choices: functions.map((fn:
|
|
286
|
+
choices: functions.map((fn: Operation.PersistentOperation) => ({
|
|
284
287
|
title: fn.name ?? fn.id,
|
|
285
288
|
value: fn.id,
|
|
286
289
|
description: fn.description,
|
|
@@ -296,7 +299,9 @@ export const selectFunction = Effect.fn(function* () {
|
|
|
296
299
|
* Queries the database for triggers and prompts the user to select one.
|
|
297
300
|
*/
|
|
298
301
|
export const selectTrigger = Effect.fn(function* (kind?: Trigger.Kind) {
|
|
299
|
-
const triggers = yield* Database.runQuery(
|
|
302
|
+
const triggers = yield* Database.runQuery(
|
|
303
|
+
Query.select(Filter.type(Trigger.Trigger)).debugLabel('cli.trigger.selectTrigger'),
|
|
304
|
+
);
|
|
300
305
|
const filteredTriggers = kind ? triggers.filter((trigger) => trigger.spec?.kind === kind) : triggers;
|
|
301
306
|
|
|
302
307
|
if (filteredTriggers.length === 0) {
|
|
@@ -307,7 +312,10 @@ export const selectTrigger = Effect.fn(function* (kind?: Trigger.Kind) {
|
|
|
307
312
|
filteredTriggers.map((trigger) =>
|
|
308
313
|
Effect.gen(function* () {
|
|
309
314
|
const fn = trigger.function ? yield* Database.load(trigger.function) : undefined;
|
|
310
|
-
const functionName =
|
|
315
|
+
const functionName =
|
|
316
|
+
fn && Obj.instanceOf(Operation.PersistentOperation, fn)
|
|
317
|
+
? (fn.name ?? Obj.getMeta(fn).key ?? fn.id)
|
|
318
|
+
: undefined;
|
|
311
319
|
const title = functionName ?? trigger.id;
|
|
312
320
|
const description = `${trigger.enabled ? 'enabled' : 'disabled'} - ${trigger.spec?.kind ?? 'unknown'}`;
|
|
313
321
|
|
|
@@ -329,11 +337,11 @@ export const selectTrigger = Effect.fn(function* (kind?: Trigger.Kind) {
|
|
|
329
337
|
});
|
|
330
338
|
|
|
331
339
|
/**
|
|
332
|
-
* Selects a
|
|
340
|
+
* Selects a feed interactively from available feeds in the database.
|
|
333
341
|
* Queries schemas with FeedAnnotation, then queries objects of those types,
|
|
334
342
|
* and extracts queue DXNs from the objects' feed properties.
|
|
335
343
|
*/
|
|
336
|
-
export const
|
|
344
|
+
export const selectFeed = Effect.fn(function* () {
|
|
337
345
|
// Query schema registry for schemas with FeedAnnotation.
|
|
338
346
|
const schemas = yield* Database.runSchemaQuery({ location: ['database', 'runtime'] });
|
|
339
347
|
|
|
@@ -347,8 +355,8 @@ export const selectQueue = Effect.fn(function* () {
|
|
|
347
355
|
return yield* Effect.fail(new Error('No schemas with Feed annotation found'));
|
|
348
356
|
}
|
|
349
357
|
|
|
350
|
-
// Collect all objects with
|
|
351
|
-
const
|
|
358
|
+
// Collect all objects with feeds.
|
|
359
|
+
const feedChoices: Array<{ title: string; value: string; description?: string }> = [];
|
|
352
360
|
|
|
353
361
|
// Process each feed schema, loading the Feed object to extract queue DXN.
|
|
354
362
|
for (const schema of feedSchemas) {
|
|
@@ -368,30 +376,30 @@ export const selectQueue = Effect.fn(function* () {
|
|
|
368
376
|
continue;
|
|
369
377
|
}
|
|
370
378
|
|
|
371
|
-
const
|
|
372
|
-
if (!
|
|
379
|
+
const feedDXN = Feed.getQueueDxn(feedObj);
|
|
380
|
+
if (!feedDXN) {
|
|
373
381
|
continue;
|
|
374
382
|
}
|
|
375
383
|
|
|
376
384
|
const label = Obj.getLabel(obj) ?? obj.id;
|
|
377
385
|
const description = Obj.getTypename(obj);
|
|
378
386
|
|
|
379
|
-
|
|
387
|
+
feedChoices.push({
|
|
380
388
|
title: label,
|
|
381
|
-
value:
|
|
389
|
+
value: feedDXN.toString(),
|
|
382
390
|
description,
|
|
383
391
|
});
|
|
384
392
|
}
|
|
385
393
|
}).pipe(Effect.catchAll(() => Effect.void));
|
|
386
394
|
}
|
|
387
395
|
|
|
388
|
-
if (
|
|
396
|
+
if (feedChoices.length === 0) {
|
|
389
397
|
return yield* Effect.fail(new Error('No objects with queue properties found'));
|
|
390
398
|
}
|
|
391
399
|
|
|
392
400
|
const selected = yield* Prompt.select({
|
|
393
401
|
message: 'Select a queue:',
|
|
394
|
-
choices:
|
|
402
|
+
choices: feedChoices,
|
|
395
403
|
});
|
|
396
404
|
|
|
397
405
|
return String(selected);
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { Operation, Trigger } from '@dxos/compute';
|
|
9
|
+
import { Obj } from '@dxos/echo';
|
|
9
10
|
import { useSpaces } from '@dxos/react-client/echo';
|
|
10
11
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
11
12
|
import { withTheme } from '@dxos/react-ui/testing';
|
|
12
13
|
|
|
13
|
-
import { functions } from '
|
|
14
|
-
import { translations } from '
|
|
14
|
+
import { functions } from '#testing';
|
|
15
|
+
import { translations } from '#translations';
|
|
15
16
|
|
|
16
17
|
import { AutomationPanel } from './AutomationPanel';
|
|
17
18
|
|
|
@@ -35,10 +36,16 @@ const meta = {
|
|
|
35
36
|
withClientProvider({
|
|
36
37
|
createIdentity: true,
|
|
37
38
|
createSpace: true,
|
|
38
|
-
types: [
|
|
39
|
+
types: [Operation.PersistentOperation, Trigger.Trigger],
|
|
39
40
|
onCreateSpace: ({ space }) => {
|
|
40
41
|
for (const fn of functions) {
|
|
41
|
-
|
|
42
|
+
const { key, version, ...data } = fn;
|
|
43
|
+
space.db.add(
|
|
44
|
+
Obj.make(Operation.PersistentOperation, {
|
|
45
|
+
[Obj.Meta]: { key, version: version ?? '0.1.0' },
|
|
46
|
+
...data,
|
|
47
|
+
}),
|
|
48
|
+
);
|
|
42
49
|
}
|
|
43
50
|
},
|
|
44
51
|
}),
|
|
@@ -3,16 +3,21 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import * as Array from 'effect/Array';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
6
7
|
import * as EFn from 'effect/Function';
|
|
7
8
|
import * as Match from 'effect/Match';
|
|
8
9
|
import * as Schema from 'effect/Schema';
|
|
9
10
|
import React, { useCallback, useMemo, useState } from 'react';
|
|
10
11
|
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { useProcessManagerRuntime } from '@dxos/app-framework/ui';
|
|
13
|
+
import { useTypeOptions } from '@dxos/app-toolkit/ui';
|
|
14
|
+
import { type ComputeEnvironment } from '@dxos/client-protocol';
|
|
15
|
+
import { Operation, Script, ServiceResolver, Trigger, TriggerEvent } from '@dxos/compute';
|
|
16
|
+
import { Context } from '@dxos/context';
|
|
17
|
+
import { Filter, Obj, Query, Tag } from '@dxos/echo';
|
|
18
|
+
import { KEY_QUEUE_CURSOR, TriggerDispatcher } from '@dxos/functions-runtime';
|
|
14
19
|
import { FunctionsServiceClient } from '@dxos/functions-runtime/edge';
|
|
15
|
-
import {
|
|
20
|
+
import { log } from '@dxos/log';
|
|
16
21
|
import { type Client, useClient } from '@dxos/react-client';
|
|
17
22
|
import { type Space, useObject, useQuery } from '@dxos/react-client/echo';
|
|
18
23
|
import { Clipboard, IconButton, type IconButtonProps, Input, Separator, useTranslation } from '@dxos/react-ui';
|
|
@@ -22,7 +27,8 @@ import { Pipeline } from '@dxos/types';
|
|
|
22
27
|
import { ghostHover, mx } from '@dxos/ui-theme';
|
|
23
28
|
import { isNonNullable } from '@dxos/util';
|
|
24
29
|
|
|
25
|
-
import { meta } from '
|
|
30
|
+
import { meta } from '#meta';
|
|
31
|
+
|
|
26
32
|
import { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';
|
|
27
33
|
|
|
28
34
|
const grid = 'grid grid-cols-[40px_1fr_32px_32px] min-h-[2.5rem]';
|
|
@@ -38,15 +44,21 @@ export type AutomationPanelProps = {
|
|
|
38
44
|
export const AutomationPanel = ({ space, object, initialTrigger, onDone }: AutomationPanelProps) => {
|
|
39
45
|
const { t } = useTranslation(meta.id);
|
|
40
46
|
const client = useClient();
|
|
47
|
+
const processManagerRuntime = useProcessManagerRuntime();
|
|
48
|
+
const [properties] = useObject(space.properties);
|
|
49
|
+
const computeEnvironment = properties.computeEnvironment ?? 'local';
|
|
41
50
|
const functionsServiceClient = useMemo(() => FunctionsServiceClient.fromClient(client), [client]);
|
|
42
|
-
const functions = useQuery(space.db, Filter.type(
|
|
43
|
-
const triggers = useQuery(
|
|
51
|
+
const functions = useQuery(space.db, Filter.type(Operation.PersistentOperation));
|
|
52
|
+
const triggers = useQuery(
|
|
53
|
+
space.db,
|
|
54
|
+
Query.select(Filter.type(Trigger.Trigger)).debugLabel('plugin-automation.AutomationPanel'),
|
|
55
|
+
);
|
|
44
56
|
const filteredTriggers = useMemo(() => {
|
|
45
57
|
return object ? triggers.filter(triggerMatch(object)) : triggers;
|
|
46
58
|
}, [object, triggers]);
|
|
47
59
|
const tags = useQuery(space.db, Filter.type(Tag.Tag));
|
|
48
60
|
const types = useTypeOptions({
|
|
49
|
-
space,
|
|
61
|
+
db: space.db,
|
|
50
62
|
annotation: {
|
|
51
63
|
location: ['database', 'runtime'],
|
|
52
64
|
kind: ['user'],
|
|
@@ -74,8 +86,8 @@ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: Autom
|
|
|
74
86
|
|
|
75
87
|
const handleSave: TriggerEditorProps['onSave'] = (trigger) => {
|
|
76
88
|
if (selected) {
|
|
77
|
-
Obj.
|
|
78
|
-
Object.assign(
|
|
89
|
+
Obj.update(selected, (selected) => {
|
|
90
|
+
Object.assign(selected, trigger);
|
|
79
91
|
});
|
|
80
92
|
} else {
|
|
81
93
|
space.db.add(Trigger.make(trigger));
|
|
@@ -92,19 +104,44 @@ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: Autom
|
|
|
92
104
|
};
|
|
93
105
|
|
|
94
106
|
const handleForceRunTrigger = async (trigger: Trigger.Trigger) => {
|
|
95
|
-
|
|
107
|
+
if (computeEnvironment === 'disabled') {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (computeEnvironment === 'local') {
|
|
112
|
+
try {
|
|
113
|
+
await processManagerRuntime.runPromise(
|
|
114
|
+
Effect.gen(function* () {
|
|
115
|
+
const dispatcher = yield* TriggerDispatcher;
|
|
116
|
+
yield* dispatcher.invokeTrigger({
|
|
117
|
+
trigger,
|
|
118
|
+
event: { tick: Date.now() } satisfies TriggerEvent.TimerEvent,
|
|
119
|
+
});
|
|
120
|
+
}).pipe(Effect.provide(ServiceResolver.provide({ space: space.id }, TriggerDispatcher))),
|
|
121
|
+
);
|
|
122
|
+
} catch (error) {
|
|
123
|
+
log.catch(error);
|
|
124
|
+
}
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
try {
|
|
129
|
+
await functionsServiceClient.forceRunCronTrigger(Context.default(), space.id, trigger.id);
|
|
130
|
+
} catch (error) {
|
|
131
|
+
log.catch(error);
|
|
132
|
+
}
|
|
96
133
|
};
|
|
97
134
|
|
|
98
135
|
const handleResetCursor = async (trigger: Trigger.Trigger) => {
|
|
99
|
-
Obj.
|
|
100
|
-
Obj.deleteKeys(
|
|
136
|
+
Obj.update(trigger, (trigger) => {
|
|
137
|
+
Obj.deleteKeys(trigger, KEY_QUEUE_CURSOR);
|
|
101
138
|
});
|
|
102
139
|
await space.db.flush({ indexes: true });
|
|
103
140
|
};
|
|
104
141
|
|
|
105
142
|
if (trigger) {
|
|
106
143
|
return (
|
|
107
|
-
<Settings.Item title={t('trigger
|
|
144
|
+
<Settings.Item title={t('trigger-editor.title')} description={t('trigger-editor.description')}>
|
|
108
145
|
<TriggerEditor
|
|
109
146
|
db={space.db}
|
|
110
147
|
trigger={trigger}
|
|
@@ -119,47 +156,52 @@ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: Autom
|
|
|
119
156
|
}
|
|
120
157
|
|
|
121
158
|
return (
|
|
122
|
-
<Settings.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
159
|
+
<Settings.Panel>
|
|
160
|
+
<Clipboard.Provider>
|
|
161
|
+
{filteredTriggers.length > 0 && (
|
|
162
|
+
<List.Root<Trigger.Trigger>
|
|
163
|
+
items={filteredTriggers}
|
|
164
|
+
isItem={Schema.is(Trigger.Trigger)}
|
|
165
|
+
getId={(field) => field.id}
|
|
166
|
+
>
|
|
167
|
+
{({ items: filteredTriggers }) => (
|
|
168
|
+
<div role='list' className='flex flex-col w-full'>
|
|
169
|
+
{filteredTriggers?.map((trigger) => (
|
|
170
|
+
<TriggerListItem
|
|
171
|
+
key={trigger.id}
|
|
172
|
+
trigger={trigger}
|
|
173
|
+
functions={functions}
|
|
174
|
+
computeEnvironment={computeEnvironment}
|
|
175
|
+
onSelect={handleSelect}
|
|
176
|
+
onDelete={handleDelete}
|
|
177
|
+
onResetCursor={handleResetCursor}
|
|
178
|
+
onForceRun={handleForceRunTrigger}
|
|
179
|
+
/>
|
|
180
|
+
))}
|
|
181
|
+
</div>
|
|
182
|
+
)}
|
|
183
|
+
</List.Root>
|
|
184
|
+
)}
|
|
185
|
+
|
|
186
|
+
{filteredTriggers.length > 0 && <Separator classNames='my-4' />}
|
|
187
|
+
<IconButton icon='ph--plus--regular' label={t('new-trigger.label')} onClick={handleAdd} />
|
|
188
|
+
</Clipboard.Provider>
|
|
189
|
+
</Settings.Panel>
|
|
150
190
|
);
|
|
151
191
|
};
|
|
152
192
|
|
|
153
193
|
const TriggerListItem = ({
|
|
154
194
|
trigger,
|
|
155
195
|
functions,
|
|
196
|
+
computeEnvironment,
|
|
156
197
|
onSelect,
|
|
157
198
|
onDelete,
|
|
158
199
|
onResetCursor,
|
|
159
200
|
onForceRun,
|
|
160
201
|
}: {
|
|
161
202
|
trigger: Trigger.Trigger;
|
|
162
|
-
functions:
|
|
203
|
+
functions: Operation.PersistentOperation[];
|
|
204
|
+
computeEnvironment: ComputeEnvironment;
|
|
163
205
|
onSelect?: (trigger: Trigger.Trigger) => void;
|
|
164
206
|
onDelete?: (trigger: Trigger.Trigger) => void;
|
|
165
207
|
onResetCursor?: (trigger: Trigger.Trigger) => void;
|
|
@@ -197,7 +239,7 @@ const TriggerListItem = ({
|
|
|
197
239
|
const actionProps = useMemo<IconButtonProps | undefined>(() => {
|
|
198
240
|
if (trigger.spec?.kind === 'timer' && onForceRun) {
|
|
199
241
|
return {
|
|
200
|
-
disabled: !enabled ||
|
|
242
|
+
disabled: !enabled || computeEnvironment === 'disabled',
|
|
201
243
|
icon: 'ph--play--regular',
|
|
202
244
|
label: 'Force run',
|
|
203
245
|
onClick: handleForceRun,
|
|
@@ -212,7 +254,7 @@ const TriggerListItem = ({
|
|
|
212
254
|
onClick: handleResetCursor,
|
|
213
255
|
};
|
|
214
256
|
}
|
|
215
|
-
}, [enabled, trigger.spec?.kind, handleForceRun]);
|
|
257
|
+
}, [computeEnvironment, enabled, trigger.spec?.kind, handleForceRun, onResetCursor]);
|
|
216
258
|
|
|
217
259
|
return (
|
|
218
260
|
<List.Item<Obj.Snapshot<Trigger.Trigger>>
|
|
@@ -268,7 +310,7 @@ const getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {
|
|
|
268
310
|
return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
|
|
269
311
|
};
|
|
270
312
|
|
|
271
|
-
const getFunctionName = (functions:
|
|
313
|
+
const getFunctionName = (functions: Operation.PersistentOperation[], trigger: Trigger.Trigger) => {
|
|
272
314
|
// TODO(wittjosiah): Truncation should be done in the UI.
|
|
273
315
|
// Warning that the List component is currently a can of worms.
|
|
274
316
|
const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;
|
|
@@ -278,7 +320,7 @@ const getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigge
|
|
|
278
320
|
|
|
279
321
|
const scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {
|
|
280
322
|
const fn = trigger.function?.target;
|
|
281
|
-
if (!Obj.instanceOf(
|
|
323
|
+
if (!Obj.instanceOf(Operation.PersistentOperation, fn)) {
|
|
282
324
|
return false;
|
|
283
325
|
}
|
|
284
326
|
|