@budibase/server 2.6.22 → 2.6.24-alpha.0
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/.dockerignore +7 -6
- package/Dockerfile +16 -8
- package/builder/assets/index.50121870.js +1869 -0
- package/builder/assets/index.a86e2071.css +6 -0
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32576 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +45065 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24462 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +6 -3
- package/nodemon.json +8 -4
- package/package.json +35 -16
- package/pm2.config.js +1 -1
- package/scripts/build.js +48 -0
- package/src/api/controllers/application.ts +21 -22
- package/src/api/controllers/automation.ts +37 -9
- package/src/api/controllers/datasource.ts +114 -49
- package/src/api/controllers/deploy/index.ts +1 -0
- package/src/api/controllers/integration.ts +3 -3
- package/src/api/controllers/plugin/index.ts +1 -1
- package/src/api/controllers/row/external.ts +39 -15
- package/src/api/controllers/row/index.ts +18 -24
- package/src/api/controllers/row/internal.ts +1 -1
- package/src/api/controllers/row/staticFormula.ts +6 -1
- package/src/api/controllers/row/utils.ts +12 -0
- package/src/api/controllers/static/index.ts +3 -3
- package/src/api/controllers/table/index.ts +3 -0
- package/src/api/controllers/table/internal.ts +2 -6
- package/src/api/controllers/table/utils.ts +32 -1
- package/src/api/controllers/view/index.ts +5 -5
- package/src/api/controllers/webhook.ts +33 -9
- package/src/api/routes/application.ts +5 -0
- package/src/api/routes/automation.ts +0 -1
- package/src/api/routes/datasource.ts +10 -0
- package/src/api/routes/static.ts +3 -1
- package/src/api/routes/tests/{automation.spec.js → automation.spec.ts} +106 -31
- package/src/api/routes/tests/datasource.spec.ts +1 -1
- package/src/api/routes/tests/view.spec.js +4 -3
- package/src/api/routes/tests/{webhook.spec.js → webhook.spec.ts} +33 -11
- package/src/app.ts +0 -1
- package/src/automations/actions.ts +8 -0
- package/src/automations/logging/index.ts +21 -0
- package/src/automations/steps/bash.ts +4 -0
- package/src/automations/steps/collect.ts +58 -0
- package/src/automations/steps/createRow.ts +4 -0
- package/src/automations/steps/delay.ts +1 -0
- package/src/automations/steps/deleteRow.ts +4 -0
- package/src/automations/steps/discord.ts +4 -0
- package/src/automations/steps/executeQuery.ts +4 -0
- package/src/automations/steps/executeScript.ts +4 -0
- package/src/automations/steps/filter.ts +1 -0
- package/src/automations/steps/loop.ts +1 -0
- package/src/automations/steps/make.ts +22 -1
- package/src/automations/steps/openai.ts +106 -0
- package/src/automations/steps/outgoingWebhook.ts +4 -0
- package/src/automations/steps/queryRows.ts +4 -0
- package/src/automations/steps/sendSmtpEmail.ts +4 -0
- package/src/automations/steps/serverLog.ts +4 -0
- package/src/automations/steps/slack.ts +4 -0
- package/src/automations/steps/updateRow.ts +4 -0
- package/src/automations/steps/zapier.ts +22 -1
- package/src/automations/tests/make.spec.ts +54 -0
- package/src/automations/tests/openai.spec.ts +86 -0
- package/src/automations/tests/zapier.spec.ts +56 -0
- package/src/automations/triggers.ts +3 -2
- package/src/constants/index.ts +17 -16
- package/src/db/dynamoClient.ts +1 -1
- package/src/db/inMemoryView.ts +1 -0
- package/src/db/linkedRows/index.ts +5 -3
- package/src/environment.ts +3 -0
- package/src/integration-test/postgres.spec.ts +47 -5
- package/src/integrations/airtable.ts +33 -4
- package/src/integrations/arangodb.ts +20 -2
- package/src/integrations/base/sqlTable.ts +0 -1
- package/src/integrations/couchdb.ts +20 -4
- package/src/integrations/dynamodb.ts +36 -5
- package/src/integrations/elasticsearch.ts +18 -1
- package/src/integrations/firebase.ts +17 -0
- package/src/integrations/googlesheets.ts +66 -5
- package/src/integrations/index.ts +12 -7
- package/src/integrations/microsoftSqlServer.ts +33 -1
- package/src/integrations/mongodb.ts +18 -0
- package/src/integrations/mysql.ts +53 -26
- package/src/integrations/oracle.ts +38 -6
- package/src/integrations/postgres.ts +47 -12
- package/src/integrations/redis.ts +35 -4
- package/src/integrations/s3.ts +21 -3
- package/src/integrations/snowflake.ts +25 -1
- package/src/integrations/tests/googlesheets.spec.ts +41 -9
- package/src/middleware/builder.ts +26 -18
- package/src/migrations/functions/backfill/app/queries.ts +1 -1
- package/src/sdk/app/automations/index.ts +2 -0
- package/src/sdk/app/automations/utils.ts +7 -0
- package/src/sdk/app/datasources/datasources.ts +7 -1
- package/src/sdk/plugins/plugins.ts +1 -1
- package/src/startup.ts +2 -0
- package/src/tests/utilities/TestConfiguration.ts +4 -2
- package/src/tests/utilities/structures.ts +42 -0
- package/src/threads/automation.ts +91 -23
- package/src/threads/index.ts +9 -3
- package/src/threads/utils.ts +2 -0
- package/src/utilities/fileSystem/app.ts +14 -4
- package/src/utilities/fileSystem/clientLibrary.ts +8 -3
- package/src/utilities/fileSystem/filesystem.ts +3 -1
- package/src/utilities/redis.ts +25 -3
- package/src/utilities/rowProcessor/index.ts +4 -1
- package/src/utilities/rowProcessor/map.ts +1 -1
- package/src/websockets/builder.ts +95 -0
- package/src/websockets/client.ts +2 -2
- package/src/websockets/grid.ts +44 -44
- package/src/websockets/index.ts +13 -6
- package/src/websockets/websocket.ts +211 -7
- package/tsconfig.build.json +9 -1
- package/tsconfig.json +1 -14
- package/builder/assets/index.86c992bf.css +0 -6
- package/builder/assets/index.c16c35ca.js +0 -1794
- package/dist/api/controllers/analytics.js +0 -46
- package/dist/api/controllers/apikeys.js +0 -72
- package/dist/api/controllers/application.js +0 -574
- package/dist/api/controllers/auth.js +0 -80
- package/dist/api/controllers/automation.js +0 -303
- package/dist/api/controllers/backup.js +0 -37
- package/dist/api/controllers/component.js +0 -59
- package/dist/api/controllers/datasource.js +0 -306
- package/dist/api/controllers/deploy/Deployment.js +0 -53
- package/dist/api/controllers/deploy/index.js +0 -198
- package/dist/api/controllers/dev.js +0 -146
- package/dist/api/controllers/integration.js +0 -28
- package/dist/api/controllers/layout.js +0 -49
- package/dist/api/controllers/metadata.js +0 -63
- package/dist/api/controllers/migrations.js +0 -29
- package/dist/api/controllers/ops.js +0 -40
- package/dist/api/controllers/permission.js +0 -162
- package/dist/api/controllers/plugin/file.js +0 -24
- package/dist/api/controllers/plugin/github.js +0 -69
- package/dist/api/controllers/plugin/index.js +0 -112
- package/dist/api/controllers/plugin/npm.js +0 -58
- package/dist/api/controllers/plugin/uploaders.js +0 -11
- package/dist/api/controllers/plugin/url.js +0 -24
- package/dist/api/controllers/plugin/utils.js +0 -27
- package/dist/api/controllers/public/applications.js +0 -146
- package/dist/api/controllers/public/mapping/applications.js +0 -29
- package/dist/api/controllers/public/mapping/index.js +0 -11
- package/dist/api/controllers/public/mapping/queries.js +0 -36
- package/dist/api/controllers/public/mapping/rows.js +0 -24
- package/dist/api/controllers/public/mapping/tables.js +0 -23
- package/dist/api/controllers/public/mapping/types.js +0 -2
- package/dist/api/controllers/public/mapping/users.js +0 -29
- package/dist/api/controllers/public/metrics.js +0 -113
- package/dist/api/controllers/public/queries.js +0 -58
- package/dist/api/controllers/public/rows.js +0 -120
- package/dist/api/controllers/public/tables.js +0 -95
- package/dist/api/controllers/public/users.js +0 -93
- package/dist/api/controllers/public/utils.js +0 -56
- package/dist/api/controllers/query/import/index.js +0 -87
- package/dist/api/controllers/query/import/sources/base/index.js +0 -75
- package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
- package/dist/api/controllers/query/import/sources/curl.js +0 -99
- package/dist/api/controllers/query/import/sources/openapi2.js +0 -145
- package/dist/api/controllers/query/import/sources/openapi3.js +0 -177
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
- package/dist/api/controllers/query/index.js +0 -299
- package/dist/api/controllers/query/validation.js +0 -53
- package/dist/api/controllers/role.js +0 -109
- package/dist/api/controllers/routing.js +0 -105
- package/dist/api/controllers/row/ExternalRequest.js +0 -683
- package/dist/api/controllers/row/external.js +0 -339
- package/dist/api/controllers/row/index.js +0 -203
- package/dist/api/controllers/row/internal.js +0 -509
- package/dist/api/controllers/row/internalSearch.js +0 -28
- package/dist/api/controllers/row/staticFormula.js +0 -165
- package/dist/api/controllers/row/utils.js +0 -183
- package/dist/api/controllers/screen.js +0 -110
- package/dist/api/controllers/script.js +0 -30
- package/dist/api/controllers/static/index.js +0 -268
- package/dist/api/controllers/table/bulkFormula.js +0 -173
- package/dist/api/controllers/table/external.js +0 -279
- package/dist/api/controllers/table/index.js +0 -179
- package/dist/api/controllers/table/internal.js +0 -197
- package/dist/api/controllers/table/utils.js +0 -379
- package/dist/api/controllers/templates.js +0 -56
- package/dist/api/controllers/user.js +0 -124
- package/dist/api/controllers/view/exporters.js +0 -46
- package/dist/api/controllers/view/index.js +0 -193
- package/dist/api/controllers/view/utils.js +0 -177
- package/dist/api/controllers/view/viewBuilder.js +0 -158
- package/dist/api/controllers/webhook.js +0 -134
- package/dist/api/index.js +0 -55
- package/dist/api/routes/analytics.js +0 -34
- package/dist/api/routes/apikeys.js +0 -37
- package/dist/api/routes/application.js +0 -48
- package/dist/api/routes/auth.js +0 -33
- package/dist/api/routes/automation.js +0 -50
- package/dist/api/routes/backup.js +0 -35
- package/dist/api/routes/component.js +0 -35
- package/dist/api/routes/datasource.js +0 -43
- package/dist/api/routes/deploy.js +0 -37
- package/dist/api/routes/dev.js +0 -49
- package/dist/api/routes/index.js +0 -75
- package/dist/api/routes/integration.js +0 -37
- package/dist/api/routes/layout.js +0 -37
- package/dist/api/routes/metadata.js +0 -40
- package/dist/api/routes/migrations.js +0 -36
- package/dist/api/routes/ops.js +0 -52
- package/dist/api/routes/permission.js +0 -44
- package/dist/api/routes/plugin.js +0 -39
- package/dist/api/routes/public/applications.js +0 -174
- package/dist/api/routes/public/index.js +0 -140
- package/dist/api/routes/public/metrics.js +0 -30
- package/dist/api/routes/public/middleware/mapper.js +0 -97
- package/dist/api/routes/public/queries.js +0 -72
- package/dist/api/routes/public/rows.js +0 -158
- package/dist/api/routes/public/tables.js +0 -152
- package/dist/api/routes/public/users.js +0 -135
- package/dist/api/routes/public/utils/Endpoint.js +0 -36
- package/dist/api/routes/query.js +0 -47
- package/dist/api/routes/role.js +0 -40
- package/dist/api/routes/routing.js +0 -39
- package/dist/api/routes/row.js +0 -239
- package/dist/api/routes/screen.js +0 -39
- package/dist/api/routes/script.js +0 -35
- package/dist/api/routes/static.js +0 -80
- package/dist/api/routes/table.js +0 -163
- package/dist/api/routes/templates.js +0 -37
- package/dist/api/routes/user.js +0 -43
- package/dist/api/routes/utils/validators.js +0 -238
- package/dist/api/routes/view.js +0 -42
- package/dist/api/routes/webhook.js +0 -43
- package/dist/app.js +0 -132
- package/dist/automations/actions.js +0 -137
- package/dist/automations/automationUtils.js +0 -173
- package/dist/automations/bullboard.js +0 -71
- package/dist/automations/index.js +0 -43
- package/dist/automations/logging/index.js +0 -53
- package/dist/automations/steps/bash.js +0 -111
- package/dist/automations/steps/createRow.js +0 -108
- package/dist/automations/steps/delay.js +0 -53
- package/dist/automations/steps/deleteRow.js +0 -96
- package/dist/automations/steps/discord.js +0 -116
- package/dist/automations/steps/executeQuery.js +0 -134
- package/dist/automations/steps/executeScript.js +0 -106
- package/dist/automations/steps/filter.js +0 -112
- package/dist/automations/steps/loop.js +0 -54
- package/dist/automations/steps/make.js +0 -120
- package/dist/automations/steps/outgoingWebhook.js +0 -166
- package/dist/automations/steps/queryRows.js +0 -220
- package/dist/automations/steps/sendSmtpEmail.js +0 -115
- package/dist/automations/steps/serverLog.js +0 -65
- package/dist/automations/steps/slack.js +0 -98
- package/dist/automations/steps/updateRow.js +0 -144
- package/dist/automations/steps/utils.js +0 -56
- package/dist/automations/steps/zapier.js +0 -117
- package/dist/automations/triggerInfo/app.js +0 -36
- package/dist/automations/triggerInfo/cron.js +0 -35
- package/dist/automations/triggerInfo/index.js +0 -40
- package/dist/automations/triggerInfo/rowDeleted.js +0 -36
- package/dist/automations/triggerInfo/rowSaved.js +0 -44
- package/dist/automations/triggerInfo/rowUpdated.js +0 -44
- package/dist/automations/triggerInfo/webhook.js +0 -40
- package/dist/automations/triggers.js +0 -181
- package/dist/automations/utils.js +0 -275
- package/dist/constants/definitions.js +0 -2
- package/dist/constants/index.js +0 -181
- package/dist/constants/layouts.js +0 -148
- package/dist/constants/screens.js +0 -51
- package/dist/db/defaultData/datasource_bb_default.js +0 -574
- package/dist/db/defaultData/employeeImport.js +0 -155
- package/dist/db/defaultData/expensesImport.js +0 -117
- package/dist/db/defaultData/inventoryImport.js +0 -109
- package/dist/db/defaultData/jobsImport.js +0 -152
- package/dist/db/dynamoClient.js +0 -124
- package/dist/db/inMemoryView.js +0 -62
- package/dist/db/index.js +0 -43
- package/dist/db/linkedRows/LinkController.js +0 -392
- package/dist/db/linkedRows/LinkDocument.js +0 -33
- package/dist/db/linkedRows/index.js +0 -206
- package/dist/db/linkedRows/linkUtils.js +0 -131
- package/dist/db/newid.js +0 -7
- package/dist/db/utils.js +0 -248
- package/dist/db/views/staticViews.js +0 -144
- package/dist/ddApm.js +0 -11
- package/dist/definitions/automations.js +0 -8
- package/dist/definitions/common.js +0 -2
- package/dist/definitions/datasource.js +0 -7
- package/dist/definitions/openapi.js +0 -6
- package/dist/environment.js +0 -109
- package/dist/events/AutomationEmitter.js +0 -53
- package/dist/events/BudibaseEmitter.js +0 -25
- package/dist/events/docUpdates/index.js +0 -17
- package/dist/events/docUpdates/processors.js +0 -18
- package/dist/events/docUpdates/syncUsers.js +0 -49
- package/dist/events/index.js +0 -11
- package/dist/events/utils.js +0 -43
- package/dist/integrations/airtable.js +0 -147
- package/dist/integrations/arangodb.js +0 -103
- package/dist/integrations/base/query.js +0 -32
- package/dist/integrations/base/sql.js +0 -600
- package/dist/integrations/base/sqlTable.js +0 -167
- package/dist/integrations/base/types.js +0 -2
- package/dist/integrations/couchdb.js +0 -125
- package/dist/integrations/dynamodb.js +0 -194
- package/dist/integrations/elasticsearch.js +0 -186
- package/dist/integrations/firebase.js +0 -174
- package/dist/integrations/googlesheets.js +0 -455
- package/dist/integrations/index.js +0 -135
- package/dist/integrations/microsoftSqlServer.js +0 -273
- package/dist/integrations/mongodb.js +0 -614
- package/dist/integrations/mysql.js +0 -256
- package/dist/integrations/oracle.js +0 -375
- package/dist/integrations/postgres.js +0 -300
- package/dist/integrations/queries/sql.js +0 -84
- package/dist/integrations/redis.js +0 -168
- package/dist/integrations/rest.js +0 -400
- package/dist/integrations/s3.js +0 -237
- package/dist/integrations/snowflake.js +0 -99
- package/dist/integrations/utils.js +0 -295
- package/dist/middleware/appInfo.js +0 -22
- package/dist/middleware/authorized.js +0 -112
- package/dist/middleware/builder.js +0 -93
- package/dist/middleware/currentapp.js +0 -103
- package/dist/middleware/joi-validator.js +0 -43
- package/dist/middleware/publicApi.js +0 -25
- package/dist/middleware/resourceId.js +0 -59
- package/dist/middleware/selfhost.js +0 -24
- package/dist/middleware/utils.js +0 -8
- package/dist/migrations/functions/appUrls.js +0 -42
- package/dist/migrations/functions/backfill/app/automations.js +0 -31
- package/dist/migrations/functions/backfill/app/datasources.js +0 -28
- package/dist/migrations/functions/backfill/app/layouts.js +0 -33
- package/dist/migrations/functions/backfill/app/queries.js +0 -50
- package/dist/migrations/functions/backfill/app/roles.js +0 -28
- package/dist/migrations/functions/backfill/app/screens.js +0 -28
- package/dist/migrations/functions/backfill/app/tables.js +0 -37
- package/dist/migrations/functions/backfill/app.js +0 -176
- package/dist/migrations/functions/backfill/global/configs.js +0 -67
- package/dist/migrations/functions/backfill/global/quotas.js +0 -60
- package/dist/migrations/functions/backfill/global/users.js +0 -50
- package/dist/migrations/functions/backfill/global.js +0 -205
- package/dist/migrations/functions/backfill/index.js +0 -32
- package/dist/migrations/functions/backfill/installation.js +0 -80
- package/dist/migrations/functions/syncQuotas.js +0 -52
- package/dist/migrations/functions/tableSettings.js +0 -130
- package/dist/migrations/functions/usageQuotas/index.js +0 -16
- package/dist/migrations/functions/usageQuotas/syncApps.js +0 -24
- package/dist/migrations/functions/usageQuotas/syncPlugins.js +0 -23
- package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
- package/dist/migrations/functions/usageQuotas/syncUsers.js +0 -21
- package/dist/migrations/functions/userEmailViewCasing.js +0 -24
- package/dist/migrations/index.js +0 -111
- package/dist/migrations/tests/helpers.js +0 -72
- package/dist/migrations/tests/structures.js +0 -37
- package/dist/sdk/app/applications/index.js +0 -28
- package/dist/sdk/app/applications/sync.js +0 -164
- package/dist/sdk/app/applications/utils.js +0 -21
- package/dist/sdk/app/automations/index.js +0 -29
- package/dist/sdk/app/automations/webhook.js +0 -54
- package/dist/sdk/app/backups/constants.js +0 -6
- package/dist/sdk/app/backups/exports.js +0 -160
- package/dist/sdk/app/backups/imports.js +0 -170
- package/dist/sdk/app/backups/index.js +0 -29
- package/dist/sdk/app/backups/statistics.js +0 -73
- package/dist/sdk/app/datasources/datasources.js +0 -166
- package/dist/sdk/app/datasources/index.js +0 -27
- package/dist/sdk/app/queries/index.js +0 -27
- package/dist/sdk/app/queries/queries.js +0 -60
- package/dist/sdk/app/rows/attachments.js +0 -61
- package/dist/sdk/app/rows/index.js +0 -28
- package/dist/sdk/app/rows/rows.js +0 -30
- package/dist/sdk/app/tables/index.js +0 -65
- package/dist/sdk/index.js +0 -27
- package/dist/sdk/plugins/index.js +0 -27
- package/dist/sdk/plugins/plugins.js +0 -53
- package/dist/sdk/users/index.js +0 -27
- package/dist/sdk/users/utils.js +0 -94
- package/dist/sdk/utils/index.js +0 -29
- package/dist/startup.js +0 -158
- package/dist/threads/automation.js +0 -450
- package/dist/threads/definitions.js +0 -2
- package/dist/threads/index.js +0 -140
- package/dist/threads/query.js +0 -265
- package/dist/threads/utils.js +0 -120
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/utilities/appDirectoryTemplate/package.json +0 -10
- package/dist/utilities/budibaseDir.js +0 -5
- package/dist/utilities/centralPath.js +0 -27
- package/dist/utilities/csv.js +0 -33
- package/dist/utilities/fileSystem/app.js +0 -88
- package/dist/utilities/fileSystem/clientLibrary.js +0 -138
- package/dist/utilities/fileSystem/filesystem.js +0 -180
- package/dist/utilities/fileSystem/index.js +0 -21
- package/dist/utilities/fileSystem/plugin.js +0 -76
- package/dist/utilities/fileSystem/processor.js +0 -34
- package/dist/utilities/fileSystem/template.js +0 -47
- package/dist/utilities/global.js +0 -146
- package/dist/utilities/index.js +0 -143
- package/dist/utilities/redis.js +0 -117
- package/dist/utilities/retry.js +0 -30
- package/dist/utilities/routing/index.js +0 -39
- package/dist/utilities/rowProcessor/index.js +0 -282
- package/dist/utilities/rowProcessor/map.js +0 -116
- package/dist/utilities/rowProcessor/utils.js +0 -87
- package/dist/utilities/schema.js +0 -112
- package/dist/utilities/scriptRunner.js +0 -26
- package/dist/utilities/security.js +0 -57
- package/dist/utilities/statusCodes.js +0 -9
- package/dist/utilities/usageQuota/rows.js +0 -88
- package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
- package/dist/utilities/users.js +0 -57
- package/dist/utilities/workerRequests.js +0 -171
- package/dist/watch.js +0 -53
- package/dist/websockets/client.js +0 -14
- package/dist/websockets/grid.js +0 -60
- package/dist/websockets/index.js +0 -17
- package/dist/websockets/websocket.js +0 -78
- package/src/automations/tests/zapier.spec.js +0 -27
- /package/dist/{api/controllers/static/templates/BudibaseApp.svelte → BudibaseApp-Y5NZEDTC.svelte} +0 -0
- /package/dist/{api/controllers/static/templates/app.hbs → app.hbs} +0 -0
- /package/dist/{api/controllers/static/templates/preview.hbs → preview.hbs} +0 -0
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AutomationStepInput,
|
|
7
7
|
AutomationStepType,
|
|
8
8
|
AutomationIOType,
|
|
9
|
+
AutomationFeature,
|
|
9
10
|
} from "@budibase/types"
|
|
10
11
|
|
|
11
12
|
export const definition: AutomationStepSchema = {
|
|
@@ -18,6 +19,9 @@ export const definition: AutomationStepSchema = {
|
|
|
18
19
|
stepId: AutomationActionStepId.integromat,
|
|
19
20
|
type: AutomationStepType.ACTION,
|
|
20
21
|
internal: false,
|
|
22
|
+
features: {
|
|
23
|
+
[AutomationFeature.LOOPING]: true,
|
|
24
|
+
},
|
|
21
25
|
inputs: {},
|
|
22
26
|
schema: {
|
|
23
27
|
inputs: {
|
|
@@ -26,6 +30,10 @@ export const definition: AutomationStepSchema = {
|
|
|
26
30
|
type: AutomationIOType.STRING,
|
|
27
31
|
title: "Webhook URL",
|
|
28
32
|
},
|
|
33
|
+
body: {
|
|
34
|
+
type: AutomationIOType.JSON,
|
|
35
|
+
title: "Payload",
|
|
36
|
+
},
|
|
29
37
|
value1: {
|
|
30
38
|
type: AutomationIOType.STRING,
|
|
31
39
|
title: "Input Value 1",
|
|
@@ -70,7 +78,19 @@ export const definition: AutomationStepSchema = {
|
|
|
70
78
|
}
|
|
71
79
|
|
|
72
80
|
export async function run({ inputs }: AutomationStepInput) {
|
|
73
|
-
|
|
81
|
+
//TODO - Remove deprecated values 1,2,3,4,5 after November 2023
|
|
82
|
+
const { url, value1, value2, value3, value4, value5, body } = inputs
|
|
83
|
+
|
|
84
|
+
let payload = {}
|
|
85
|
+
try {
|
|
86
|
+
payload = body?.value ? JSON.parse(body?.value) : {}
|
|
87
|
+
} catch (err) {
|
|
88
|
+
return {
|
|
89
|
+
httpStatus: 400,
|
|
90
|
+
response: "Invalid payload JSON",
|
|
91
|
+
success: false,
|
|
92
|
+
}
|
|
93
|
+
}
|
|
74
94
|
|
|
75
95
|
if (!url?.trim()?.length) {
|
|
76
96
|
return {
|
|
@@ -89,6 +109,7 @@ export async function run({ inputs }: AutomationStepInput) {
|
|
|
89
109
|
value3,
|
|
90
110
|
value4,
|
|
91
111
|
value5,
|
|
112
|
+
...payload,
|
|
92
113
|
}),
|
|
93
114
|
headers: {
|
|
94
115
|
"Content-Type": "application/json",
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Configuration, OpenAIApi } from "openai"
|
|
2
|
+
import {
|
|
3
|
+
AutomationActionStepId,
|
|
4
|
+
AutomationStepSchema,
|
|
5
|
+
AutomationStepInput,
|
|
6
|
+
AutomationStepType,
|
|
7
|
+
AutomationIOType,
|
|
8
|
+
} from "@budibase/types"
|
|
9
|
+
import * as automationUtils from "../automationUtils"
|
|
10
|
+
import environment from "../../environment"
|
|
11
|
+
|
|
12
|
+
enum Model {
|
|
13
|
+
GPT_35_TURBO = "gpt-3.5-turbo",
|
|
14
|
+
// will only work with api keys that have access to the GPT4 API
|
|
15
|
+
GPT_4 = "gpt-4",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const definition: AutomationStepSchema = {
|
|
19
|
+
name: "OpenAI",
|
|
20
|
+
tagline: "Send prompts to ChatGPT",
|
|
21
|
+
icon: "Algorithm",
|
|
22
|
+
description: "Interact with the OpenAI ChatGPT API.",
|
|
23
|
+
type: AutomationStepType.ACTION,
|
|
24
|
+
internal: true,
|
|
25
|
+
features: {},
|
|
26
|
+
stepId: AutomationActionStepId.OPENAI,
|
|
27
|
+
inputs: {
|
|
28
|
+
prompt: "",
|
|
29
|
+
},
|
|
30
|
+
schema: {
|
|
31
|
+
inputs: {
|
|
32
|
+
properties: {
|
|
33
|
+
prompt: {
|
|
34
|
+
type: AutomationIOType.STRING,
|
|
35
|
+
title: "Prompt",
|
|
36
|
+
},
|
|
37
|
+
model: {
|
|
38
|
+
type: AutomationIOType.STRING,
|
|
39
|
+
title: "Model",
|
|
40
|
+
enum: Object.values(Model),
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
required: ["prompt", "model"],
|
|
44
|
+
},
|
|
45
|
+
outputs: {
|
|
46
|
+
properties: {
|
|
47
|
+
success: {
|
|
48
|
+
type: AutomationIOType.BOOLEAN,
|
|
49
|
+
description: "Whether the action was successful",
|
|
50
|
+
},
|
|
51
|
+
response: {
|
|
52
|
+
type: AutomationIOType.STRING,
|
|
53
|
+
description: "What was output",
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
required: ["success", "response"],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export async function run({ inputs, context }: AutomationStepInput) {
|
|
62
|
+
if (!environment.OPENAI_API_KEY) {
|
|
63
|
+
return {
|
|
64
|
+
success: false,
|
|
65
|
+
response:
|
|
66
|
+
"OpenAI API Key not configured - please add the OPENAI_API_KEY environment variable.",
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (inputs.prompt == null) {
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
response: "Budibase OpenAI Automation Failed: No prompt supplied",
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
const configuration = new Configuration({
|
|
79
|
+
apiKey: environment.OPENAI_API_KEY,
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
const openai = new OpenAIApi(configuration)
|
|
83
|
+
|
|
84
|
+
const completion = await openai.createChatCompletion({
|
|
85
|
+
model: inputs.model,
|
|
86
|
+
messages: [
|
|
87
|
+
{
|
|
88
|
+
role: "user",
|
|
89
|
+
content: inputs.prompt,
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
const response = completion?.data?.choices[0]?.message?.content
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
response,
|
|
98
|
+
success: true,
|
|
99
|
+
}
|
|
100
|
+
} catch (err) {
|
|
101
|
+
return {
|
|
102
|
+
success: false,
|
|
103
|
+
response: automationUtils.getError(err),
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -4,6 +4,7 @@ import * as automationUtils from "../automationUtils"
|
|
|
4
4
|
import {
|
|
5
5
|
AutomationActionStepId,
|
|
6
6
|
AutomationCustomIOType,
|
|
7
|
+
AutomationFeature,
|
|
7
8
|
AutomationIOType,
|
|
8
9
|
AutomationStepInput,
|
|
9
10
|
AutomationStepSchema,
|
|
@@ -32,6 +33,9 @@ export const definition: AutomationStepSchema = {
|
|
|
32
33
|
description: "Send a request of specified method to a URL",
|
|
33
34
|
type: AutomationStepType.ACTION,
|
|
34
35
|
internal: true,
|
|
36
|
+
features: {
|
|
37
|
+
[AutomationFeature.LOOPING]: true,
|
|
38
|
+
},
|
|
35
39
|
stepId: AutomationActionStepId.OUTGOING_WEBHOOK,
|
|
36
40
|
inputs: {
|
|
37
41
|
requestMethod: "POST",
|
|
@@ -6,6 +6,7 @@ import * as automationUtils from "../automationUtils"
|
|
|
6
6
|
import {
|
|
7
7
|
AutomationActionStepId,
|
|
8
8
|
AutomationCustomIOType,
|
|
9
|
+
AutomationFeature,
|
|
9
10
|
AutomationIOType,
|
|
10
11
|
AutomationStepInput,
|
|
11
12
|
AutomationStepSchema,
|
|
@@ -43,6 +44,9 @@ export const definition: AutomationStepSchema = {
|
|
|
43
44
|
type: AutomationStepType.ACTION,
|
|
44
45
|
stepId: AutomationActionStepId.QUERY_ROWS,
|
|
45
46
|
internal: true,
|
|
47
|
+
features: {
|
|
48
|
+
[AutomationFeature.LOOPING]: true,
|
|
49
|
+
},
|
|
46
50
|
inputs: {},
|
|
47
51
|
schema: {
|
|
48
52
|
inputs: {
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AutomationStepInput,
|
|
7
7
|
AutomationStepType,
|
|
8
8
|
AutomationIOType,
|
|
9
|
+
AutomationFeature,
|
|
9
10
|
} from "@budibase/types"
|
|
10
11
|
|
|
11
12
|
export const definition: AutomationStepSchema = {
|
|
@@ -15,6 +16,9 @@ export const definition: AutomationStepSchema = {
|
|
|
15
16
|
name: "Send Email (SMTP)",
|
|
16
17
|
type: AutomationStepType.ACTION,
|
|
17
18
|
internal: true,
|
|
19
|
+
features: {
|
|
20
|
+
[AutomationFeature.LOOPING]: true,
|
|
21
|
+
},
|
|
18
22
|
stepId: AutomationActionStepId.SEND_EMAIL_SMTP,
|
|
19
23
|
inputs: {},
|
|
20
24
|
schema: {
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
AutomationStepInput,
|
|
5
5
|
AutomationStepType,
|
|
6
6
|
AutomationIOType,
|
|
7
|
+
AutomationFeature,
|
|
7
8
|
} from "@budibase/types"
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -19,6 +20,9 @@ export const definition: AutomationStepSchema = {
|
|
|
19
20
|
description: "Logs the given text to the server (using console.log)",
|
|
20
21
|
type: AutomationStepType.ACTION,
|
|
21
22
|
internal: true,
|
|
23
|
+
features: {
|
|
24
|
+
[AutomationFeature.LOOPING]: true,
|
|
25
|
+
},
|
|
22
26
|
stepId: AutomationActionStepId.SERVER_LOG,
|
|
23
27
|
inputs: {
|
|
24
28
|
text: "",
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AutomationStepInput,
|
|
7
7
|
AutomationStepType,
|
|
8
8
|
AutomationIOType,
|
|
9
|
+
AutomationFeature,
|
|
9
10
|
} from "@budibase/types"
|
|
10
11
|
|
|
11
12
|
export const definition: AutomationStepSchema = {
|
|
@@ -16,6 +17,9 @@ export const definition: AutomationStepSchema = {
|
|
|
16
17
|
stepId: AutomationActionStepId.slack,
|
|
17
18
|
type: AutomationStepType.ACTION,
|
|
18
19
|
internal: false,
|
|
20
|
+
features: {
|
|
21
|
+
[AutomationFeature.LOOPING]: true,
|
|
22
|
+
},
|
|
19
23
|
inputs: {},
|
|
20
24
|
schema: {
|
|
21
25
|
inputs: {
|
|
@@ -4,6 +4,7 @@ import { buildCtx } from "./utils"
|
|
|
4
4
|
import {
|
|
5
5
|
AutomationActionStepId,
|
|
6
6
|
AutomationCustomIOType,
|
|
7
|
+
AutomationFeature,
|
|
7
8
|
AutomationIOType,
|
|
8
9
|
AutomationStepInput,
|
|
9
10
|
AutomationStepSchema,
|
|
@@ -17,6 +18,9 @@ export const definition: AutomationStepSchema = {
|
|
|
17
18
|
description: "Update a row in your database",
|
|
18
19
|
type: AutomationStepType.ACTION,
|
|
19
20
|
internal: true,
|
|
21
|
+
features: {
|
|
22
|
+
[AutomationFeature.LOOPING]: true,
|
|
23
|
+
},
|
|
20
24
|
stepId: AutomationActionStepId.UPDATE_ROW,
|
|
21
25
|
inputs: {},
|
|
22
26
|
schema: {
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AutomationStepInput,
|
|
7
7
|
AutomationStepType,
|
|
8
8
|
AutomationIOType,
|
|
9
|
+
AutomationFeature,
|
|
9
10
|
} from "@budibase/types"
|
|
10
11
|
|
|
11
12
|
export const definition: AutomationStepSchema = {
|
|
@@ -13,6 +14,9 @@ export const definition: AutomationStepSchema = {
|
|
|
13
14
|
stepId: AutomationActionStepId.zapier,
|
|
14
15
|
type: AutomationStepType.ACTION,
|
|
15
16
|
internal: false,
|
|
17
|
+
features: {
|
|
18
|
+
[AutomationFeature.LOOPING]: true,
|
|
19
|
+
},
|
|
16
20
|
description: "Trigger a Zapier Zap via webhooks",
|
|
17
21
|
tagline: "Trigger a Zapier Zap",
|
|
18
22
|
icon: "ri-flashlight-line",
|
|
@@ -24,6 +28,10 @@ export const definition: AutomationStepSchema = {
|
|
|
24
28
|
type: AutomationIOType.STRING,
|
|
25
29
|
title: "Webhook URL",
|
|
26
30
|
},
|
|
31
|
+
body: {
|
|
32
|
+
type: AutomationIOType.JSON,
|
|
33
|
+
title: "Payload",
|
|
34
|
+
},
|
|
27
35
|
value1: {
|
|
28
36
|
type: AutomationIOType.STRING,
|
|
29
37
|
title: "Payload Value 1",
|
|
@@ -63,7 +71,19 @@ export const definition: AutomationStepSchema = {
|
|
|
63
71
|
}
|
|
64
72
|
|
|
65
73
|
export async function run({ inputs }: AutomationStepInput) {
|
|
66
|
-
|
|
74
|
+
//TODO - Remove deprecated values 1,2,3,4,5 after November 2023
|
|
75
|
+
const { url, value1, value2, value3, value4, value5, body } = inputs
|
|
76
|
+
|
|
77
|
+
let payload = {}
|
|
78
|
+
try {
|
|
79
|
+
payload = body?.value ? JSON.parse(body?.value) : {}
|
|
80
|
+
} catch (err) {
|
|
81
|
+
return {
|
|
82
|
+
httpStatus: 400,
|
|
83
|
+
response: "Invalid payload JSON",
|
|
84
|
+
success: false,
|
|
85
|
+
}
|
|
86
|
+
}
|
|
67
87
|
|
|
68
88
|
if (!url?.trim()?.length) {
|
|
69
89
|
return {
|
|
@@ -85,6 +105,7 @@ export async function run({ inputs }: AutomationStepInput) {
|
|
|
85
105
|
value3,
|
|
86
106
|
value4,
|
|
87
107
|
value5,
|
|
108
|
+
...payload,
|
|
88
109
|
}),
|
|
89
110
|
headers: {
|
|
90
111
|
"Content-Type": "application/json",
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { getConfig, afterAll, runStep, actions } from "./utilities"
|
|
2
|
+
|
|
3
|
+
describe("test the outgoing webhook action", () => {
|
|
4
|
+
let config = getConfig()
|
|
5
|
+
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
await config.init()
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
afterAll()
|
|
11
|
+
|
|
12
|
+
it("should be able to run the action", async () => {
|
|
13
|
+
const res = await runStep(actions.integromat.stepId, {
|
|
14
|
+
value1: "test",
|
|
15
|
+
url: "http://www.test.com",
|
|
16
|
+
})
|
|
17
|
+
expect(res.response.url).toEqual("http://www.test.com")
|
|
18
|
+
expect(res.response.method).toEqual("post")
|
|
19
|
+
expect(res.success).toEqual(true)
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
it("should add the payload props when a JSON string is provided", async () => {
|
|
23
|
+
const payload = `{"value1":1,"value2":2,"value3":3,"value4":4,"value5":5,"name":"Adam","age":9}`
|
|
24
|
+
const res = await runStep(actions.integromat.stepId, {
|
|
25
|
+
value1: "ONE",
|
|
26
|
+
value2: "TWO",
|
|
27
|
+
value3: "THREE",
|
|
28
|
+
value4: "FOUR",
|
|
29
|
+
value5: "FIVE",
|
|
30
|
+
body: {
|
|
31
|
+
value: payload,
|
|
32
|
+
},
|
|
33
|
+
url: "http://www.test.com",
|
|
34
|
+
})
|
|
35
|
+
expect(res.response.url).toEqual("http://www.test.com")
|
|
36
|
+
expect(res.response.method).toEqual("post")
|
|
37
|
+
expect(res.response.body).toEqual(payload)
|
|
38
|
+
expect(res.success).toEqual(true)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it("should return a 400 if the JSON payload string is malformed", async () => {
|
|
42
|
+
const payload = `{ value1 1 }`
|
|
43
|
+
const res = await runStep(actions.integromat.stepId, {
|
|
44
|
+
value1: "ONE",
|
|
45
|
+
body: {
|
|
46
|
+
value: payload,
|
|
47
|
+
},
|
|
48
|
+
url: "http://www.test.com",
|
|
49
|
+
})
|
|
50
|
+
expect(res.httpStatus).toEqual(400)
|
|
51
|
+
expect(res.response).toEqual("Invalid payload JSON")
|
|
52
|
+
expect(res.success).toEqual(false)
|
|
53
|
+
})
|
|
54
|
+
})
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const setup = require("./utilities")
|
|
2
|
+
import environment from "../../environment"
|
|
3
|
+
import openai from "openai"
|
|
4
|
+
|
|
5
|
+
jest.mock(
|
|
6
|
+
"openai",
|
|
7
|
+
jest.fn(() => ({
|
|
8
|
+
Configuration: jest.fn(),
|
|
9
|
+
OpenAIApi: jest.fn(() => ({
|
|
10
|
+
createChatCompletion: jest.fn(() => ({
|
|
11
|
+
data: {
|
|
12
|
+
choices: [
|
|
13
|
+
{
|
|
14
|
+
message: {
|
|
15
|
+
content: "This is a test",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
})),
|
|
21
|
+
})),
|
|
22
|
+
}))
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
const OPENAI_PROMPT = "What is the meaning of life?"
|
|
26
|
+
|
|
27
|
+
describe("test the openai action", () => {
|
|
28
|
+
let config = setup.getConfig()
|
|
29
|
+
|
|
30
|
+
beforeAll(async () => {
|
|
31
|
+
await config.init()
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
environment.OPENAI_API_KEY = "abc123"
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
afterAll(setup.afterAll)
|
|
39
|
+
|
|
40
|
+
it("should present the correct error message when the OPENAI_API_KEY variable isn't set", async () => {
|
|
41
|
+
delete environment.OPENAI_API_KEY
|
|
42
|
+
|
|
43
|
+
let res = await setup.runStep("OPENAI", {
|
|
44
|
+
prompt: OPENAI_PROMPT,
|
|
45
|
+
})
|
|
46
|
+
expect(res.response).toEqual(
|
|
47
|
+
"OpenAI API Key not configured - please add the OPENAI_API_KEY environment variable."
|
|
48
|
+
)
|
|
49
|
+
expect(res.success).toBeFalsy()
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
it("should be able to receive a response from ChatGPT given a prompt", async () => {
|
|
53
|
+
const res = await setup.runStep("OPENAI", {
|
|
54
|
+
prompt: OPENAI_PROMPT,
|
|
55
|
+
})
|
|
56
|
+
expect(res.response).toEqual("This is a test")
|
|
57
|
+
expect(res.success).toBeTruthy()
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
it("should present the correct error message when a prompt is not provided", async () => {
|
|
61
|
+
const res = await setup.runStep("OPENAI", {
|
|
62
|
+
prompt: null,
|
|
63
|
+
})
|
|
64
|
+
expect(res.response).toEqual(
|
|
65
|
+
"Budibase OpenAI Automation Failed: No prompt supplied"
|
|
66
|
+
)
|
|
67
|
+
expect(res.success).toBeFalsy()
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it("should present the correct error message when an error is thrown from the createChatCompletion call", async () => {
|
|
71
|
+
openai.OpenAIApi.mockImplementation(() => ({
|
|
72
|
+
createChatCompletion: jest.fn(() => {
|
|
73
|
+
throw new Error("An error occurred while calling createChatCompletion")
|
|
74
|
+
}),
|
|
75
|
+
}))
|
|
76
|
+
|
|
77
|
+
const res = await setup.runStep("OPENAI", {
|
|
78
|
+
prompt: OPENAI_PROMPT,
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
expect(res.response).toEqual(
|
|
82
|
+
"Error: An error occurred while calling createChatCompletion"
|
|
83
|
+
)
|
|
84
|
+
expect(res.success).toBeFalsy()
|
|
85
|
+
})
|
|
86
|
+
})
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { getConfig, afterAll, runStep, actions } from "./utilities"
|
|
2
|
+
|
|
3
|
+
describe("test the outgoing webhook action", () => {
|
|
4
|
+
let config = getConfig()
|
|
5
|
+
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
await config.init()
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
afterAll()
|
|
11
|
+
|
|
12
|
+
it("should be able to run the action", async () => {
|
|
13
|
+
const res = await runStep(actions.zapier.stepId, {
|
|
14
|
+
value1: "test",
|
|
15
|
+
url: "http://www.test.com",
|
|
16
|
+
})
|
|
17
|
+
expect(res.response.url).toEqual("http://www.test.com")
|
|
18
|
+
expect(res.response.method).toEqual("post")
|
|
19
|
+
expect(res.success).toEqual(true)
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
it("should add the payload props when a JSON string is provided", async () => {
|
|
23
|
+
const payload = `{ "value1": 1, "value2": 2, "value3": 3, "value4": 4, "value5": 5, "name": "Adam", "age": 9 }`
|
|
24
|
+
const res = await runStep(actions.zapier.stepId, {
|
|
25
|
+
value1: "ONE",
|
|
26
|
+
value2: "TWO",
|
|
27
|
+
value3: "THREE",
|
|
28
|
+
value4: "FOUR",
|
|
29
|
+
value5: "FIVE",
|
|
30
|
+
body: {
|
|
31
|
+
value: payload,
|
|
32
|
+
},
|
|
33
|
+
url: "http://www.test.com",
|
|
34
|
+
})
|
|
35
|
+
expect(res.response.url).toEqual("http://www.test.com")
|
|
36
|
+
expect(res.response.method).toEqual("post")
|
|
37
|
+
expect(res.response.body).toEqual(
|
|
38
|
+
`{"platform":"budibase","value1":1,"value2":2,"value3":3,"value4":4,"value5":5,"name":"Adam","age":9}`
|
|
39
|
+
)
|
|
40
|
+
expect(res.success).toEqual(true)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it("should return a 400 if the JSON payload string is malformed", async () => {
|
|
44
|
+
const payload = `{ value1 1 }`
|
|
45
|
+
const res = await runStep(actions.zapier.stepId, {
|
|
46
|
+
value1: "ONE",
|
|
47
|
+
body: {
|
|
48
|
+
value: payload,
|
|
49
|
+
},
|
|
50
|
+
url: "http://www.test.com",
|
|
51
|
+
})
|
|
52
|
+
expect(res.httpStatus).toEqual(400)
|
|
53
|
+
expect(res.response).toEqual("Invalid payload JSON")
|
|
54
|
+
expect(res.success).toEqual(false)
|
|
55
|
+
})
|
|
56
|
+
})
|
|
@@ -10,6 +10,7 @@ import * as utils from "./utils"
|
|
|
10
10
|
import env from "../environment"
|
|
11
11
|
import { context, db as dbCore } from "@budibase/backend-core"
|
|
12
12
|
import { Automation, Row, AutomationData, AutomationJob } from "@budibase/types"
|
|
13
|
+
import { executeSynchronously } from "../threads/automation"
|
|
13
14
|
|
|
14
15
|
export const TRIGGER_DEFINITIONS = definitions
|
|
15
16
|
const JOB_OPTS = {
|
|
@@ -91,7 +92,7 @@ emitter.on("row:delete", async function (event) {
|
|
|
91
92
|
|
|
92
93
|
export async function externalTrigger(
|
|
93
94
|
automation: Automation,
|
|
94
|
-
params: { fields: Record<string, any
|
|
95
|
+
params: { fields: Record<string, any>; timeout?: number },
|
|
95
96
|
{ getResponses }: { getResponses?: boolean } = {}
|
|
96
97
|
) {
|
|
97
98
|
if (
|
|
@@ -118,7 +119,7 @@ export async function externalTrigger(
|
|
|
118
119
|
automation,
|
|
119
120
|
}
|
|
120
121
|
const job = { data } as AutomationJob
|
|
121
|
-
return
|
|
122
|
+
return executeSynchronously(job)
|
|
122
123
|
} else {
|
|
123
124
|
return automationQueue.add(data, JOB_OPTS)
|
|
124
125
|
}
|
package/src/constants/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { objectStore, roles, constants } from "@budibase/backend-core"
|
|
2
|
+
import { FieldType as FieldTypes } from "@budibase/types"
|
|
2
3
|
export { FieldType as FieldTypes, RelationshipTypes } from "@budibase/types"
|
|
3
4
|
|
|
4
5
|
export enum FilterTypes {
|
|
@@ -24,14 +25,14 @@ export const NoEmptyFilterStrings = [
|
|
|
24
25
|
]
|
|
25
26
|
|
|
26
27
|
export const CanSwitchTypes = [
|
|
27
|
-
[
|
|
28
|
+
[FieldTypes.JSON, FieldTypes.ARRAY],
|
|
28
29
|
[
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
FieldTypes.STRING,
|
|
31
|
+
FieldTypes.OPTIONS,
|
|
32
|
+
FieldTypes.LONGFORM,
|
|
33
|
+
FieldTypes.BARCODEQR,
|
|
33
34
|
],
|
|
34
|
-
[
|
|
35
|
+
[FieldTypes.BOOLEAN, FieldTypes.NUMBER],
|
|
35
36
|
]
|
|
36
37
|
|
|
37
38
|
export const SwitchableTypes = CanSwitchTypes.reduce((prev, current) =>
|
|
@@ -77,9 +78,9 @@ export const USERS_TABLE_SCHEMA = {
|
|
|
77
78
|
// TODO: ADMIN PANEL - when implemented this doesn't need to be carried out
|
|
78
79
|
schema: {
|
|
79
80
|
email: {
|
|
80
|
-
type:
|
|
81
|
+
type: FieldTypes.STRING,
|
|
81
82
|
constraints: {
|
|
82
|
-
type:
|
|
83
|
+
type: FieldTypes.STRING,
|
|
83
84
|
email: true,
|
|
84
85
|
length: {
|
|
85
86
|
maximum: "",
|
|
@@ -92,27 +93,27 @@ export const USERS_TABLE_SCHEMA = {
|
|
|
92
93
|
firstName: {
|
|
93
94
|
name: "firstName",
|
|
94
95
|
fieldName: "firstName",
|
|
95
|
-
type:
|
|
96
|
+
type: FieldTypes.STRING,
|
|
96
97
|
constraints: {
|
|
97
|
-
type:
|
|
98
|
+
type: FieldTypes.STRING,
|
|
98
99
|
presence: false,
|
|
99
100
|
},
|
|
100
101
|
},
|
|
101
102
|
lastName: {
|
|
102
103
|
name: "lastName",
|
|
103
104
|
fieldName: "lastName",
|
|
104
|
-
type:
|
|
105
|
+
type: FieldTypes.STRING,
|
|
105
106
|
constraints: {
|
|
106
|
-
type:
|
|
107
|
+
type: FieldTypes.STRING,
|
|
107
108
|
presence: false,
|
|
108
109
|
},
|
|
109
110
|
},
|
|
110
111
|
roleId: {
|
|
111
112
|
fieldName: "roleId",
|
|
112
113
|
name: "roleId",
|
|
113
|
-
type:
|
|
114
|
+
type: FieldTypes.OPTIONS,
|
|
114
115
|
constraints: {
|
|
115
|
-
type:
|
|
116
|
+
type: FieldTypes.STRING,
|
|
116
117
|
presence: false,
|
|
117
118
|
inclusion: Object.values(roles.BUILTIN_ROLE_IDS),
|
|
118
119
|
},
|
|
@@ -120,9 +121,9 @@ export const USERS_TABLE_SCHEMA = {
|
|
|
120
121
|
status: {
|
|
121
122
|
fieldName: "status",
|
|
122
123
|
name: "status",
|
|
123
|
-
type:
|
|
124
|
+
type: FieldTypes.OPTIONS,
|
|
124
125
|
constraints: {
|
|
125
|
-
type:
|
|
126
|
+
type: FieldTypes.STRING,
|
|
126
127
|
presence: false,
|
|
127
128
|
inclusion: Object.values(constants.UserStatus),
|
|
128
129
|
},
|
package/src/db/dynamoClient.ts
CHANGED
|
@@ -140,7 +140,7 @@ export function init(endpoint: string) {
|
|
|
140
140
|
docClient = new AWS.DynamoDB.DocumentClient(docClientParams)
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
if (!env.isProd()) {
|
|
143
|
+
if (!env.isProd() && !env.isJest()) {
|
|
144
144
|
env._set("AWS_ACCESS_KEY_ID", "KEY_ID")
|
|
145
145
|
env._set("AWS_SECRET_ACCESS_KEY", "SECRET_KEY")
|
|
146
146
|
init("http://localhost:8333")
|
package/src/db/inMemoryView.ts
CHANGED
|
@@ -25,6 +25,7 @@ export async function runView(
|
|
|
25
25
|
}))
|
|
26
26
|
)
|
|
27
27
|
let fn = (doc: Document, emit: any) => emit(doc._id)
|
|
28
|
+
// BUDI-7060 -> indirect eval call appears to cause issues in cloud
|
|
28
29
|
eval("fn = " + view?.map?.replace("function (doc)", "function (doc, emit)"))
|
|
29
30
|
const queryFns: any = {
|
|
30
31
|
meta: view.meta,
|
|
@@ -189,11 +189,13 @@ export async function attachFullLinkedDocs(table: Table, rows: Row[]) {
|
|
|
189
189
|
*/
|
|
190
190
|
export async function squashLinksToPrimaryDisplay(
|
|
191
191
|
table: Table,
|
|
192
|
-
enriched: Row[]
|
|
192
|
+
enriched: Row[] | Row
|
|
193
193
|
) {
|
|
194
194
|
// will populate this as we find them
|
|
195
195
|
const linkedTables = [table]
|
|
196
|
-
|
|
196
|
+
const isArray = Array.isArray(enriched)
|
|
197
|
+
let enrichedArray = !isArray ? [enriched] : enriched
|
|
198
|
+
for (let row of enrichedArray) {
|
|
197
199
|
// this only fetches the table if its not already in array
|
|
198
200
|
const rowTable = await getLinkedTable(row.tableId!, linkedTables)
|
|
199
201
|
for (let [column, schema] of Object.entries(rowTable?.schema || {})) {
|
|
@@ -213,5 +215,5 @@ export async function squashLinksToPrimaryDisplay(
|
|
|
213
215
|
row[column] = newLinks
|
|
214
216
|
}
|
|
215
217
|
}
|
|
216
|
-
return
|
|
218
|
+
return isArray ? enrichedArray : enrichedArray[0]
|
|
217
219
|
}
|