{#each blocks as block, idx}
- {#if block.stepId !== "LOOP"}
+ {#if block.stepId !== ActionStepID.LOOP}
x.stepId !== "LOOP")
+ .filter(x => x.stepId !== ActionStepID.LOOP)
} else if (testResults) {
blocks = testResults.steps || []
}
diff --git a/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte b/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte
index 9543a9c552..eb148534f3 100644
--- a/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte
+++ b/packages/builder/src/components/automation/AutomationPanel/CreateAutomationModal.svelte
@@ -11,6 +11,7 @@
Body,
Icon,
} from "@budibase/bbui"
+ import { TriggerStepID } from "constants/backend/automations"
let name
let selectedTrigger
@@ -35,7 +36,7 @@
)
automationStore.actions.addBlockToAutomation(newBlock)
- if (triggerVal.stepId === "WEBHOOK") {
+ if (triggerVal.stepId === TriggerStepID.WEBHOOK) {
webhookModal.show
}
diff --git a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
index 8b3f32a33f..8b34cf8cd2 100644
--- a/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
+++ b/packages/builder/src/components/automation/SetupPanel/AutomationBlockSetup.svelte
@@ -30,6 +30,7 @@
import { LuceneUtils } from "@budibase/frontend-core"
import { getSchemaForTable } from "builderStore/dataBinding"
import { Utils } from "@budibase/frontend-core"
+ import { TriggerStepID, ActionStepID } from "constants/backend/automations"
export let block
export let testData
@@ -60,7 +61,7 @@
try {
if (isTestModal) {
// Special case for webhook, as it requires a body, but the schema already brings back the body's contents
- if (stepId === "WEBHOOK") {
+ if (stepId === TriggerStepID.WEBHOOK) {
automationStore.actions.addTestDataToAutomation({
body: {
[key]: e.detail,
@@ -101,9 +102,9 @@
// Extract all outputs from all previous steps as available bindins
let bindings = []
for (let idx = 0; idx < blockIdx; idx++) {
- let wasLoopBlock = allSteps[idx]?.stepId === "LOOP"
+ let wasLoopBlock = allSteps[idx]?.stepId === ActionStepID.LOOP
let isLoopBlock =
- allSteps[idx]?.stepId === "LOOP" &&
+ allSteps[idx]?.stepId === ActionStepID.LOOP &&
allSteps.find(x => x.blockToLoop === block.id)
// If the previous block was a loop block, decerement the index so the following
@@ -345,7 +346,7 @@
-{#if stepId === "WEBHOOK"}
+{#if stepId === TriggerStepID.WEBHOOK}
{/if}
diff --git a/packages/builder/src/components/deploy/CreateWebhookDeploymentModal.svelte b/packages/builder/src/components/deploy/CreateWebhookDeploymentModal.svelte
index 19cea6db65..ee6b163a3e 100644
--- a/packages/builder/src/components/deploy/CreateWebhookDeploymentModal.svelte
+++ b/packages/builder/src/components/deploy/CreateWebhookDeploymentModal.svelte
@@ -3,6 +3,7 @@
import { ModalContent } from "@budibase/bbui"
import { onMount } from "svelte"
import WebhookDisplay from "../automation/Shared/WebhookDisplay.svelte"
+ import { TriggerStepID } from "constants/backend/automations"
let webhookUrls = []
@@ -11,7 +12,7 @@
onMount(() => {
webhookUrls = automations.map(automation => {
const trigger = automation.definition.trigger
- if (trigger?.stepId === "WEBHOOK" && trigger.inputs) {
+ if (trigger?.stepId === TriggerStepID.WEBHOOK && trigger.inputs) {
return {
type: "Automation",
name: automation.name,
diff --git a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/TriggerAutomation.svelte b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/TriggerAutomation.svelte
index fa32c88d65..4f661096c5 100644
--- a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/TriggerAutomation.svelte
+++ b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/TriggerAutomation.svelte
@@ -2,6 +2,7 @@
import { Select, Label, Input, Checkbox } from "@budibase/bbui"
import { automationStore } from "builderStore"
import SaveFields from "./SaveFields.svelte"
+ import { TriggerStepID } from "constants/backend/automations"
export let parameters = {}
export let bindings = []
@@ -16,7 +17,7 @@
: AUTOMATION_STATUS.NEW
$: automations = $automationStore.automations
- .filter(a => a.definition.trigger?.stepId === "APP")
+ .filter(a => a.definition.trigger?.stepId === TriggerStepID.APP)
.map(automation => {
const schema = Object.entries(
automation.definition.trigger.inputs.fields || {}
diff --git a/packages/builder/src/constants/backend/automations.js b/packages/builder/src/constants/backend/automations.js
new file mode 100644
index 0000000000..e0cd5b6405
--- /dev/null
+++ b/packages/builder/src/constants/backend/automations.js
@@ -0,0 +1,28 @@
+export const TriggerStepID = {
+ ROW_SAVED: "ROW_SAVED",
+ ROW_UPDATED: "ROW_UPDATED",
+ ROW_DELETED: "ROW_DELETED",
+ WEBHOOK: "WEBHOOK",
+ APP: "APP",
+ CRON: "CRON",
+}
+
+export const ActionStepID = {
+ SEND_EMAIL_SMTP: "SEND_EMAIL_SMTP",
+ CREATE_ROW: "CREATE_ROW",
+ UPDATE_ROW: "UPDATE_ROW",
+ DELETE_ROW: "DELETE_ROW",
+ OUTGOING_WEBHOOK: "OUTGOING_WEBHOOK",
+ EXECUTE_SCRIPT: "EXECUTE_SCRIPT",
+ EXECUTE_QUERY: "EXECUTE_QUERY",
+ SERVER_LOG: "SERVER_LOG",
+ DELAY: "DELAY",
+ FILTER: "FILTER",
+ QUERY_ROWS: "QUERY_ROWS",
+ LOOP: "LOOP",
+ // these used to be lowercase step IDs, maintain for backwards compat
+ discord: "discord",
+ slack: "slack",
+ zapier: "zapier",
+ integromat: "integromat",
+}
diff --git a/packages/server/src/utilities/security.js b/packages/server/src/utilities/security.js
index de5b696553..a0d9c8d57f 100644
--- a/packages/server/src/utilities/security.js
+++ b/packages/server/src/utilities/security.js
@@ -13,6 +13,7 @@ const { DocumentTypes } = require("../db/utils")
const CURRENTLY_SUPPORTED_LEVELS = [
PermissionLevels.WRITE,
PermissionLevels.READ,
+ PermissionLevels.EXECUTE,
]
exports.getPermissionType = resourceId => {