@budibase/server 2.6.19-alpha.2 → 2.6.19-alpha.21
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.6c1171e2.js → index.47cc7efc.js} +343 -334
- package/builder/assets/{index.07382a47.css → index.ffb6a106.css} +2 -2
- package/builder/index.html +2 -2
- package/client/manifest.json +5229 -0
- package/dist/automation.js +32364 -0
- package/dist/automation.js.map +7 -0
- package/dist/index.js +44582 -13
- package/dist/index.js.map +7 -0
- package/dist/query.js +24345 -0
- package/dist/query.js.map +7 -0
- package/jest.config.ts +3 -0
- package/nodemon.json +1 -1
- package/package.json +30 -13
- package/pm2.config.js +1 -1
- package/scripts/build.js +48 -0
- package/src/api/controllers/automation.ts +37 -9
- package/src/api/controllers/datasource.ts +16 -0
- package/src/api/controllers/row/internal.ts +1 -1
- package/src/api/controllers/static/index.ts +3 -3
- package/src/api/controllers/table/internal.ts +2 -6
- package/src/api/controllers/table/utils.ts +32 -1
- package/src/api/controllers/webhook.ts +33 -9
- package/src/api/routes/automation.ts +0 -1
- package/src/api/routes/datasource.ts +5 -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/{webhook.spec.js → webhook.spec.ts} +33 -11
- package/src/automations/actions.ts +8 -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 +4 -0
- 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 +4 -0
- package/src/automations/tests/openai.spec.ts +86 -0
- package/src/automations/triggers.ts +3 -2
- package/src/constants/index.ts +17 -16
- package/src/db/inMemoryView.ts +1 -0
- package/src/environment.ts +2 -0
- package/src/integration-test/postgres.spec.ts +47 -4
- package/src/integrations/airtable.ts +3 -1
- package/src/integrations/arangodb.ts +3 -1
- package/src/integrations/base/sqlTable.ts +0 -1
- package/src/integrations/couchdb.ts +3 -1
- package/src/integrations/dynamodb.ts +3 -1
- package/src/integrations/elasticsearch.ts +3 -1
- package/src/integrations/firebase.ts +3 -1
- package/src/integrations/googlesheets.ts +11 -3
- package/src/integrations/microsoftSqlServer.ts +18 -2
- package/src/integrations/mongodb.ts +3 -1
- package/src/integrations/mysql.ts +27 -11
- package/src/integrations/oracle.ts +11 -1
- package/src/integrations/postgres.ts +27 -10
- package/src/integrations/redis.ts +3 -1
- package/src/integrations/s3.ts +3 -1
- package/src/integrations/snowflake.ts +3 -1
- package/src/integrations/tests/googlesheets.spec.ts +41 -9
- package/src/sdk/app/automations/index.ts +2 -0
- package/src/sdk/app/automations/utils.ts +7 -0
- package/src/tests/utilities/TestConfiguration.ts +4 -2
- package/src/tests/utilities/structures.ts +42 -0
- package/src/threads/automation.ts +39 -0
- package/src/utilities/fileSystem/app.ts +1 -1
- package/src/utilities/fileSystem/clientLibrary.ts +8 -3
- package/src/utilities/fileSystem/filesystem.ts +3 -1
- package/tsconfig.build.json +9 -1
- package/tsconfig.json +1 -14
- 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 -337
- 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 -44
- 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 -134
- package/dist/automations/steps/outgoingWebhook.js +0 -166
- package/dist/automations/steps/queryRows.js +0 -216
- 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 -130
- 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 -173
- package/dist/integrations/arangodb.js +0 -119
- 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 -140
- package/dist/integrations/dynamodb.js +0 -210
- package/dist/integrations/elasticsearch.js +0 -201
- package/dist/integrations/firebase.js +0 -189
- package/dist/integrations/googlesheets.js +0 -484
- package/dist/integrations/index.js +0 -138
- package/dist/integrations/microsoftSqlServer.js +0 -289
- package/dist/integrations/mongodb.js +0 -630
- package/dist/integrations/mysql.js +0 -272
- package/dist/integrations/oracle.js +0 -404
- package/dist/integrations/postgres.js +0 -319
- package/dist/integrations/queries/sql.js +0 -84
- package/dist/integrations/redis.js +0 -187
- package/dist/integrations/rest.js +0 -400
- package/dist/integrations/s3.js +0 -256
- package/dist/integrations/snowflake.js +0 -114
- 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 -49
- 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 -173
- 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 -87
- 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 -149
- 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/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
|
@@ -1,450 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.removeStalled = exports.execute = void 0;
|
|
39
|
-
const utils_1 = __importDefault(require("./utils"));
|
|
40
|
-
utils_1.default.threadSetup();
|
|
41
|
-
const utils_2 = require("../automations/utils");
|
|
42
|
-
const actions = __importStar(require("../automations/actions"));
|
|
43
|
-
const automationUtils = __importStar(require("../automations/automationUtils"));
|
|
44
|
-
const AutomationEmitter_1 = __importDefault(require("../events/AutomationEmitter"));
|
|
45
|
-
const utils_3 = require("../db/utils");
|
|
46
|
-
const triggerInfo_1 = require("../automations/triggerInfo");
|
|
47
|
-
const constants_1 = require("../constants");
|
|
48
|
-
const logging_1 = require("../automations/logging");
|
|
49
|
-
const types_1 = require("@budibase/types");
|
|
50
|
-
const backend_core_1 = require("@budibase/backend-core");
|
|
51
|
-
const string_templates_1 = require("@budibase/string-templates");
|
|
52
|
-
const fp_1 = require("lodash/fp");
|
|
53
|
-
const sdkUtils = __importStar(require("../sdk/utils"));
|
|
54
|
-
const environment_1 = __importDefault(require("../environment"));
|
|
55
|
-
const FILTER_STEP_ID = actions.BUILTIN_ACTION_DEFINITIONS.FILTER.stepId;
|
|
56
|
-
const LOOP_STEP_ID = actions.BUILTIN_ACTION_DEFINITIONS.LOOP.stepId;
|
|
57
|
-
const CRON_STEP_ID = triggerInfo_1.definitions.CRON.stepId;
|
|
58
|
-
const STOPPED_STATUS = { success: true, status: types_1.AutomationStatus.STOPPED };
|
|
59
|
-
function getLoopIterations(loopStep, input) {
|
|
60
|
-
const binding = automationUtils.typecastForLooping(loopStep, input);
|
|
61
|
-
if (!binding) {
|
|
62
|
-
return 0;
|
|
63
|
-
}
|
|
64
|
-
if (Array.isArray(binding)) {
|
|
65
|
-
return binding.length;
|
|
66
|
-
}
|
|
67
|
-
if (typeof binding === "string") {
|
|
68
|
-
return automationUtils.stringSplit(binding).length;
|
|
69
|
-
}
|
|
70
|
-
return 0;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* The automation orchestrator is a class responsible for executing automations.
|
|
74
|
-
* It handles the context of the automation and makes sure each step gets the correct
|
|
75
|
-
* inputs and handles any outputs.
|
|
76
|
-
*/
|
|
77
|
-
class Orchestrator {
|
|
78
|
-
constructor(job) {
|
|
79
|
-
let automation = job.data.automation;
|
|
80
|
-
let triggerOutput = job.data.event;
|
|
81
|
-
const metadata = triggerOutput.metadata;
|
|
82
|
-
this._chainCount = metadata ? metadata.automationChainCount : 0;
|
|
83
|
-
this._appId = triggerOutput.appId;
|
|
84
|
-
this._job = job;
|
|
85
|
-
const triggerStepId = automation.definition.trigger.stepId;
|
|
86
|
-
triggerOutput = this.cleanupTriggerOutputs(triggerStepId, triggerOutput);
|
|
87
|
-
// remove from context
|
|
88
|
-
delete triggerOutput.appId;
|
|
89
|
-
delete triggerOutput.metadata;
|
|
90
|
-
// step zero is never used as the template string is zero indexed for customer facing
|
|
91
|
-
this._context = { steps: [{}], trigger: triggerOutput };
|
|
92
|
-
this._automation = automation;
|
|
93
|
-
// create an emitter which has the chain count for this automation run in it, so it can block
|
|
94
|
-
// excessive chaining if required
|
|
95
|
-
this._emitter = new AutomationEmitter_1.default(this._chainCount + 1);
|
|
96
|
-
this.executionOutput = { trigger: {}, steps: [] };
|
|
97
|
-
// setup the execution output
|
|
98
|
-
const triggerId = automation.definition.trigger.id;
|
|
99
|
-
this.updateExecutionOutput(triggerId, triggerStepId, null, triggerOutput);
|
|
100
|
-
}
|
|
101
|
-
cleanupTriggerOutputs(stepId, triggerOutput) {
|
|
102
|
-
if (stepId === CRON_STEP_ID) {
|
|
103
|
-
triggerOutput.timestamp = Date.now();
|
|
104
|
-
}
|
|
105
|
-
return triggerOutput;
|
|
106
|
-
}
|
|
107
|
-
getStepFunctionality(stepId) {
|
|
108
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
-
let step = yield actions.getAction(stepId);
|
|
110
|
-
if (step == null) {
|
|
111
|
-
throw `Cannot find automation step by name ${stepId}`;
|
|
112
|
-
}
|
|
113
|
-
return step;
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
getMetadata() {
|
|
117
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
-
const metadataId = (0, utils_3.generateAutomationMetadataID)(this._automation._id);
|
|
119
|
-
const db = backend_core_1.context.getAppDB();
|
|
120
|
-
let metadata;
|
|
121
|
-
try {
|
|
122
|
-
metadata = yield db.get(metadataId);
|
|
123
|
-
}
|
|
124
|
-
catch (err) {
|
|
125
|
-
metadata = {
|
|
126
|
-
_id: metadataId,
|
|
127
|
-
errorCount: 0,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
return metadata;
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
stopCron(reason) {
|
|
134
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
-
if (!this._job.opts.repeat) {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
backend_core_1.logging.logWarn(`CRON disabled reason=${reason} - ${this._appId}/${this._automation._id}`);
|
|
139
|
-
const automation = this._automation;
|
|
140
|
-
const trigger = automation.definition.trigger;
|
|
141
|
-
yield (0, utils_2.disableCronById)(this._job.id);
|
|
142
|
-
this.updateExecutionOutput(trigger.id, trigger.stepId, {}, {
|
|
143
|
-
status: types_1.AutomationStatus.STOPPED_ERROR,
|
|
144
|
-
success: false,
|
|
145
|
-
});
|
|
146
|
-
yield (0, logging_1.storeLog)(automation, this.executionOutput);
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
checkIfShouldStop(metadata) {
|
|
150
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
151
|
-
if (!metadata.errorCount || !this._job.opts.repeat) {
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
if (metadata.errorCount >= constants_1.MAX_AUTOMATION_RECURRING_ERRORS) {
|
|
155
|
-
yield this.stopCron("errors");
|
|
156
|
-
return true;
|
|
157
|
-
}
|
|
158
|
-
return false;
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
updateMetadata(metadata) {
|
|
162
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
163
|
-
const output = this.executionOutput, automation = this._automation;
|
|
164
|
-
if (!output || !(0, utils_2.isRecurring)(automation)) {
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
const count = metadata.errorCount;
|
|
168
|
-
const isError = (0, utils_2.isErrorInOutput)(output);
|
|
169
|
-
// nothing to do in this scenario, escape
|
|
170
|
-
if (!count && !isError) {
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
if (isError) {
|
|
174
|
-
metadata.errorCount = count ? count + 1 : 1;
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
metadata.errorCount = 0;
|
|
178
|
-
}
|
|
179
|
-
const db = backend_core_1.context.getAppDB();
|
|
180
|
-
try {
|
|
181
|
-
yield db.put(metadata);
|
|
182
|
-
}
|
|
183
|
-
catch (err) {
|
|
184
|
-
backend_core_1.logging.logAlertWithInfo("Failed to write automation metadata", db.name, automation._id, err);
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
updateExecutionOutput(id, stepId, inputs, outputs) {
|
|
189
|
-
const stepObj = { id, stepId, inputs, outputs };
|
|
190
|
-
// replacing trigger when disabling CRON
|
|
191
|
-
if (stepId === CRON_STEP_ID &&
|
|
192
|
-
outputs.status === types_1.AutomationStatus.STOPPED_ERROR) {
|
|
193
|
-
this.executionOutput.trigger = stepObj;
|
|
194
|
-
this.executionOutput.steps = [stepObj];
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
// first entry is always the trigger (constructor)
|
|
198
|
-
if (this.executionOutput.steps.length === 0 ||
|
|
199
|
-
this.executionOutput.trigger.id === id) {
|
|
200
|
-
this.executionOutput.trigger = stepObj;
|
|
201
|
-
}
|
|
202
|
-
this.executionOutput.steps.push(stepObj);
|
|
203
|
-
}
|
|
204
|
-
updateContextAndOutput(loopStepNumber, step, output, result) {
|
|
205
|
-
if (!loopStepNumber) {
|
|
206
|
-
throw new Error("No loop step number provided.");
|
|
207
|
-
}
|
|
208
|
-
this.executionOutput.steps.splice(loopStepNumber, 0, {
|
|
209
|
-
id: step.id,
|
|
210
|
-
stepId: step.stepId,
|
|
211
|
-
outputs: Object.assign(Object.assign({}, output), { success: result.success, status: result.status }),
|
|
212
|
-
inputs: step.inputs,
|
|
213
|
-
});
|
|
214
|
-
this._context.steps.splice(loopStepNumber, 0, Object.assign(Object.assign({}, output), { success: result.success, status: result.status }));
|
|
215
|
-
}
|
|
216
|
-
execute() {
|
|
217
|
-
var _a;
|
|
218
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
219
|
-
// this will retrieve from context created at start of thread
|
|
220
|
-
this._context.env = yield sdkUtils.getEnvironmentVariables();
|
|
221
|
-
let automation = this._automation;
|
|
222
|
-
let stopped = false;
|
|
223
|
-
let loopStep = undefined;
|
|
224
|
-
let stepCount = 0;
|
|
225
|
-
let loopStepNumber = undefined;
|
|
226
|
-
let loopSteps = [];
|
|
227
|
-
let metadata;
|
|
228
|
-
let wasLoopStep = false;
|
|
229
|
-
// check if this is a recurring automation,
|
|
230
|
-
if ((0, utils_3.isProdAppID)(this._appId) && (0, utils_2.isRecurring)(automation)) {
|
|
231
|
-
metadata = yield this.getMetadata();
|
|
232
|
-
const shouldStop = yield this.checkIfShouldStop(metadata);
|
|
233
|
-
if (shouldStop) {
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
for (let step of automation.definition.steps) {
|
|
238
|
-
stepCount++;
|
|
239
|
-
let input, iterations = 1, iterationCount = 0;
|
|
240
|
-
if (step.stepId === LOOP_STEP_ID) {
|
|
241
|
-
loopStep = step;
|
|
242
|
-
loopStepNumber = stepCount;
|
|
243
|
-
continue;
|
|
244
|
-
}
|
|
245
|
-
if (loopStep) {
|
|
246
|
-
input = yield (0, string_templates_1.processObject)(loopStep.inputs, this._context);
|
|
247
|
-
iterations = getLoopIterations(loopStep, input);
|
|
248
|
-
}
|
|
249
|
-
for (let index = 0; index < iterations; index++) {
|
|
250
|
-
let originalStepInput = (0, fp_1.cloneDeep)(step.inputs);
|
|
251
|
-
// Handle if the user has set a max iteration count or if it reaches the max limit set by us
|
|
252
|
-
if (loopStep && input.binding) {
|
|
253
|
-
let newInput = yield (0, string_templates_1.processObject)(loopStep.inputs, (0, fp_1.cloneDeep)(this._context));
|
|
254
|
-
let tempOutput = { items: loopSteps, iterations: iterationCount };
|
|
255
|
-
try {
|
|
256
|
-
newInput.binding = automationUtils.typecastForLooping(loopStep, newInput);
|
|
257
|
-
}
|
|
258
|
-
catch (err) {
|
|
259
|
-
this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
|
|
260
|
-
status: constants_1.AutomationErrors.INCORRECT_TYPE,
|
|
261
|
-
success: false,
|
|
262
|
-
});
|
|
263
|
-
loopSteps = undefined;
|
|
264
|
-
loopStep = undefined;
|
|
265
|
-
break;
|
|
266
|
-
}
|
|
267
|
-
let item = [];
|
|
268
|
-
if (typeof loopStep.inputs.binding === "string" &&
|
|
269
|
-
loopStep.inputs.option === "String") {
|
|
270
|
-
item = automationUtils.stringSplit(newInput.binding);
|
|
271
|
-
}
|
|
272
|
-
else if (Array.isArray(loopStep.inputs.binding)) {
|
|
273
|
-
item = loopStep.inputs.binding;
|
|
274
|
-
}
|
|
275
|
-
this._context.steps[loopStepNumber] = {
|
|
276
|
-
currentItem: item[index],
|
|
277
|
-
};
|
|
278
|
-
// The "Loop" binding in the front end is "fake", so replace it here so the context can understand it
|
|
279
|
-
// Pretty hacky because we need to account for the row object
|
|
280
|
-
for (let [key, value] of Object.entries(originalStepInput)) {
|
|
281
|
-
if (typeof value === "object") {
|
|
282
|
-
for (let [innerKey, innerValue] of Object.entries(originalStepInput[key])) {
|
|
283
|
-
if (typeof innerValue === "string") {
|
|
284
|
-
originalStepInput[key][innerKey] =
|
|
285
|
-
automationUtils.substituteLoopStep(innerValue, `steps.${loopStepNumber}`);
|
|
286
|
-
}
|
|
287
|
-
else if (typeof value === "object") {
|
|
288
|
-
for (let [innerObject, innerValue] of Object.entries(originalStepInput[key][innerKey])) {
|
|
289
|
-
originalStepInput[key][innerKey][innerObject] =
|
|
290
|
-
automationUtils.substituteLoopStep(innerValue, `steps.${loopStepNumber}`);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
if (typeof value === "string") {
|
|
297
|
-
originalStepInput[key] = automationUtils.substituteLoopStep(value, `steps.${loopStepNumber}`);
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
if (index === environment_1.default.AUTOMATION_MAX_ITERATIONS ||
|
|
302
|
-
index === parseInt(loopStep.inputs.iterations)) {
|
|
303
|
-
this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
|
|
304
|
-
status: constants_1.AutomationErrors.MAX_ITERATIONS,
|
|
305
|
-
success: true,
|
|
306
|
-
});
|
|
307
|
-
loopSteps = undefined;
|
|
308
|
-
loopStep = undefined;
|
|
309
|
-
break;
|
|
310
|
-
}
|
|
311
|
-
let isFailure = false;
|
|
312
|
-
const currentItem = (_a = this._context.steps[loopStepNumber]) === null || _a === void 0 ? void 0 : _a.currentItem;
|
|
313
|
-
if (currentItem && typeof currentItem === "object") {
|
|
314
|
-
isFailure = Object.keys(currentItem).some(value => {
|
|
315
|
-
return currentItem[value] === (loopStep === null || loopStep === void 0 ? void 0 : loopStep.inputs.failure);
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
isFailure = currentItem && currentItem === loopStep.inputs.failure;
|
|
320
|
-
}
|
|
321
|
-
if (isFailure) {
|
|
322
|
-
this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
|
|
323
|
-
status: constants_1.AutomationErrors.FAILURE_CONDITION,
|
|
324
|
-
success: false,
|
|
325
|
-
});
|
|
326
|
-
loopSteps = undefined;
|
|
327
|
-
loopStep = undefined;
|
|
328
|
-
break;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
// execution stopped, record state for that
|
|
332
|
-
if (stopped) {
|
|
333
|
-
this.updateExecutionOutput(step.id, step.stepId, {}, STOPPED_STATUS);
|
|
334
|
-
continue;
|
|
335
|
-
}
|
|
336
|
-
// If it's a loop step, we need to manually add the bindings to the context
|
|
337
|
-
let stepFn = yield this.getStepFunctionality(step.stepId);
|
|
338
|
-
let inputs = yield (0, string_templates_1.processObject)(originalStepInput, this._context);
|
|
339
|
-
inputs = automationUtils.cleanInputValues(inputs, step.schema.inputs);
|
|
340
|
-
try {
|
|
341
|
-
// appId is always passed
|
|
342
|
-
const outputs = yield stepFn({
|
|
343
|
-
inputs: inputs,
|
|
344
|
-
appId: this._appId,
|
|
345
|
-
emitter: this._emitter,
|
|
346
|
-
context: this._context,
|
|
347
|
-
});
|
|
348
|
-
this._context.steps[stepCount] = outputs;
|
|
349
|
-
// if filter causes us to stop execution don't break the loop, set a var
|
|
350
|
-
// so that we can finish iterating through the steps and record that it stopped
|
|
351
|
-
if (step.stepId === FILTER_STEP_ID && !outputs.result) {
|
|
352
|
-
stopped = true;
|
|
353
|
-
this.updateExecutionOutput(step.id, step.stepId, step.inputs, Object.assign(Object.assign({}, outputs), STOPPED_STATUS));
|
|
354
|
-
continue;
|
|
355
|
-
}
|
|
356
|
-
if (loopStep && loopSteps) {
|
|
357
|
-
loopSteps.push(outputs);
|
|
358
|
-
}
|
|
359
|
-
else {
|
|
360
|
-
this.updateExecutionOutput(step.id, step.stepId, step.inputs, outputs);
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
catch (err) {
|
|
364
|
-
console.error(`Automation error - ${step.stepId} - ${err}`);
|
|
365
|
-
return err;
|
|
366
|
-
}
|
|
367
|
-
if (loopStep) {
|
|
368
|
-
iterationCount++;
|
|
369
|
-
if (index === iterations - 1) {
|
|
370
|
-
loopStep = undefined;
|
|
371
|
-
this._context.steps.splice(loopStepNumber, 1);
|
|
372
|
-
break;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
if (loopStep && iterations === 0) {
|
|
377
|
-
loopStep = undefined;
|
|
378
|
-
this.executionOutput.steps.splice(loopStepNumber + 1, 0, {
|
|
379
|
-
id: step.id,
|
|
380
|
-
stepId: step.stepId,
|
|
381
|
-
outputs: { status: types_1.AutomationStatus.NO_ITERATIONS, success: true },
|
|
382
|
-
inputs: {},
|
|
383
|
-
});
|
|
384
|
-
this._context.steps.splice(loopStepNumber, 1);
|
|
385
|
-
iterations = 1;
|
|
386
|
-
}
|
|
387
|
-
// Delete the step after the loop step as it's irrelevant, since information is included
|
|
388
|
-
// in the loop step
|
|
389
|
-
if (wasLoopStep && !loopStep) {
|
|
390
|
-
this._context.steps.splice(loopStepNumber + 1, 1);
|
|
391
|
-
wasLoopStep = false;
|
|
392
|
-
}
|
|
393
|
-
if (loopSteps && loopSteps.length) {
|
|
394
|
-
let tempOutput = {
|
|
395
|
-
success: true,
|
|
396
|
-
items: loopSteps,
|
|
397
|
-
iterations: iterationCount,
|
|
398
|
-
};
|
|
399
|
-
this.executionOutput.steps.splice(loopStepNumber + 1, 0, {
|
|
400
|
-
id: step.id,
|
|
401
|
-
stepId: step.stepId,
|
|
402
|
-
outputs: tempOutput,
|
|
403
|
-
inputs: step.inputs,
|
|
404
|
-
});
|
|
405
|
-
this._context.steps[loopStepNumber] = tempOutput;
|
|
406
|
-
wasLoopStep = true;
|
|
407
|
-
loopSteps = [];
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
// store the logs for the automation run
|
|
411
|
-
yield (0, logging_1.storeLog)(this._automation, this.executionOutput);
|
|
412
|
-
if ((0, utils_3.isProdAppID)(this._appId) && (0, utils_2.isRecurring)(automation) && metadata) {
|
|
413
|
-
yield this.updateMetadata(metadata);
|
|
414
|
-
}
|
|
415
|
-
return this.executionOutput;
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
function execute(job, callback) {
|
|
420
|
-
const appId = job.data.event.appId;
|
|
421
|
-
if (!appId) {
|
|
422
|
-
throw new Error("Unable to execute, event doesn't contain app ID.");
|
|
423
|
-
}
|
|
424
|
-
return backend_core_1.context.doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
|
|
425
|
-
const envVars = yield sdkUtils.getEnvironmentVariables();
|
|
426
|
-
// put into automation thread for whole context
|
|
427
|
-
yield backend_core_1.context.doInEnvironmentContext(envVars, () => __awaiter(this, void 0, void 0, function* () {
|
|
428
|
-
const automationOrchestrator = new Orchestrator(job);
|
|
429
|
-
try {
|
|
430
|
-
const response = yield automationOrchestrator.execute();
|
|
431
|
-
callback(null, response);
|
|
432
|
-
}
|
|
433
|
-
catch (err) {
|
|
434
|
-
callback(err);
|
|
435
|
-
}
|
|
436
|
-
}));
|
|
437
|
-
}));
|
|
438
|
-
}
|
|
439
|
-
exports.execute = execute;
|
|
440
|
-
const removeStalled = (job) => __awaiter(void 0, void 0, void 0, function* () {
|
|
441
|
-
const appId = job.data.event.appId;
|
|
442
|
-
if (!appId) {
|
|
443
|
-
throw new Error("Unable to execute, event doesn't contain app ID.");
|
|
444
|
-
}
|
|
445
|
-
yield backend_core_1.context.doInAppContext(appId, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
446
|
-
const automationOrchestrator = new Orchestrator(job);
|
|
447
|
-
yield automationOrchestrator.stopCron("stalled");
|
|
448
|
-
}));
|
|
449
|
-
});
|
|
450
|
-
exports.removeStalled = removeStalled;
|
package/dist/threads/index.js
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.Thread = exports.ThreadType = void 0;
|
|
39
|
-
const worker_farm_1 = __importDefault(require("worker-farm"));
|
|
40
|
-
const environment_1 = __importDefault(require("../environment"));
|
|
41
|
-
exports.ThreadType = {
|
|
42
|
-
QUERY: "query",
|
|
43
|
-
AUTOMATION: "automation",
|
|
44
|
-
};
|
|
45
|
-
function typeToFile(type) {
|
|
46
|
-
let filename = null;
|
|
47
|
-
switch (type) {
|
|
48
|
-
case exports.ThreadType.QUERY:
|
|
49
|
-
filename = "./query";
|
|
50
|
-
break;
|
|
51
|
-
case exports.ThreadType.AUTOMATION:
|
|
52
|
-
filename = "./automation";
|
|
53
|
-
break;
|
|
54
|
-
default:
|
|
55
|
-
throw "Unknown thread type";
|
|
56
|
-
}
|
|
57
|
-
// have to use require here, to make it work with worker-farm
|
|
58
|
-
return require.resolve(filename);
|
|
59
|
-
}
|
|
60
|
-
class Thread {
|
|
61
|
-
constructor(type, opts = { timeoutMs: null, count: 1 }) {
|
|
62
|
-
this.type = type;
|
|
63
|
-
this.count = opts.count ? opts.count : 1;
|
|
64
|
-
this.disableThreading = this.shouldDisableThreading();
|
|
65
|
-
if (!this.disableThreading) {
|
|
66
|
-
const workerOpts = {
|
|
67
|
-
autoStart: true,
|
|
68
|
-
maxConcurrentWorkers: this.count,
|
|
69
|
-
workerOptions: {
|
|
70
|
-
env: Object.assign(Object.assign({}, process.env), { FORKED_PROCESS: "1" }),
|
|
71
|
-
},
|
|
72
|
-
};
|
|
73
|
-
if (opts.timeoutMs) {
|
|
74
|
-
this.timeoutMs = opts.timeoutMs;
|
|
75
|
-
workerOpts.maxCallTime = opts.timeoutMs;
|
|
76
|
-
}
|
|
77
|
-
this.workers = (0, worker_farm_1.default)(workerOpts, typeToFile(type), ["execute"]);
|
|
78
|
-
Thread.workerRefs.push(this.workers);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
shouldDisableThreading() {
|
|
82
|
-
return !!(environment_1.default.isTest() ||
|
|
83
|
-
environment_1.default.DISABLE_THREADING ||
|
|
84
|
-
this.count === 0 ||
|
|
85
|
-
environment_1.default.isInThread());
|
|
86
|
-
}
|
|
87
|
-
run(job) {
|
|
88
|
-
const timeout = this.timeoutMs;
|
|
89
|
-
return new Promise((resolve, reject) => {
|
|
90
|
-
function fire(worker) {
|
|
91
|
-
worker.execute(job, (err, response) => {
|
|
92
|
-
if (err && err.type === "TimeoutError") {
|
|
93
|
-
reject(new Error(`Query response time exceeded ${timeout}ms timeout.`));
|
|
94
|
-
}
|
|
95
|
-
else if (err) {
|
|
96
|
-
reject(err);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
resolve(response);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
// if in test then don't use threading
|
|
104
|
-
if (this.disableThreading) {
|
|
105
|
-
Promise.resolve().then(() => __importStar(require(typeToFile(this.type)))).then((thread) => {
|
|
106
|
-
fire(thread);
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
fire(this.workers);
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
static stopThreads() {
|
|
115
|
-
return new Promise(resolve => {
|
|
116
|
-
if (Thread.workerRefs.length === 0) {
|
|
117
|
-
resolve();
|
|
118
|
-
}
|
|
119
|
-
let count = 0;
|
|
120
|
-
function complete() {
|
|
121
|
-
count++;
|
|
122
|
-
if (count >= Thread.workerRefs.length) {
|
|
123
|
-
resolve();
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
for (let worker of Thread.workerRefs) {
|
|
127
|
-
worker_farm_1.default.end(worker, complete);
|
|
128
|
-
}
|
|
129
|
-
Thread.workerRefs = [];
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
static shutdown() {
|
|
133
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
-
yield Thread.stopThreads();
|
|
135
|
-
console.log("Threads shutdown");
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
exports.Thread = Thread;
|
|
140
|
-
Thread.workerRefs = [];
|