@budibase/server 1.0.123 → 1.0.125
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/builder/assets/index.3d890df7.js +1299 -0
- package/builder/assets/index.89795487.css +6 -0
- package/builder/assets/{vendor.8e34a169.js → vendor.5240f480.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +695 -1678
- package/coverage/coverage-final.json +28 -43
- package/coverage/lcov-report/api/controllers/analytics.js.html +8 -3
- package/coverage/lcov-report/api/controllers/apikeys.js.html +9 -4
- package/coverage/lcov-report/api/controllers/auth.js.html +8 -3
- package/coverage/lcov-report/api/controllers/automation.js.html +8 -3
- package/coverage/lcov-report/api/controllers/backup.js.html +8 -3
- package/coverage/lcov-report/api/controllers/cloud.js.html +8 -3
- package/coverage/lcov-report/api/controllers/component.js.html +8 -3
- package/coverage/lcov-report/api/controllers/datasource.js.html +11 -6
- package/coverage/lcov-report/api/controllers/dev.js.html +8 -3
- package/coverage/lcov-report/api/controllers/index.html +16 -26
- package/coverage/lcov-report/api/controllers/integration.js.html +8 -3
- package/coverage/lcov-report/api/controllers/layout.js.html +8 -3
- package/coverage/lcov-report/api/controllers/metadata.js.html +8 -3
- package/coverage/lcov-report/api/controllers/migrations.js.html +8 -3
- package/coverage/lcov-report/api/controllers/permission.js.html +8 -3
- package/coverage/lcov-report/api/controllers/query/index.html +16 -26
- package/coverage/lcov-report/api/controllers/query/validation.js.html +8 -3
- package/coverage/lcov-report/api/controllers/role.js.html +10 -5
- package/coverage/lcov-report/api/controllers/routing.js.html +9 -4
- package/coverage/lcov-report/api/controllers/row/external.js.html +8 -3
- package/coverage/lcov-report/api/controllers/row/index.html +25 -35
- package/coverage/lcov-report/api/controllers/row/internal.js.html +32 -24
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +21 -16
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -19
- package/coverage/lcov-report/api/controllers/row/utils.js.html +33 -19
- package/coverage/lcov-report/api/controllers/screen.js.html +9 -4
- package/coverage/lcov-report/api/controllers/script.js.html +8 -3
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +55 -50
- package/coverage/lcov-report/api/controllers/table/external.js.html +8 -3
- package/coverage/lcov-report/api/controllers/table/index.html +19 -44
- package/coverage/lcov-report/api/controllers/table/index.js.html +20 -15
- package/coverage/lcov-report/api/controllers/templates.js.html +8 -3
- package/coverage/lcov-report/api/controllers/user.js.html +8 -3
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +8 -3
- package/coverage/lcov-report/api/controllers/view/index.html +8 -3
- package/coverage/lcov-report/api/controllers/view/index.js.html +10 -5
- package/coverage/lcov-report/api/controllers/view/utils.js.html +8 -3
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +8 -3
- package/coverage/lcov-report/api/controllers/webhook.js.html +10 -5
- package/coverage/lcov-report/api/index.html +18 -13
- package/coverage/lcov-report/api/index.js.html +28 -8
- package/coverage/lcov-report/api/routes/analytics.js.html +8 -3
- package/coverage/lcov-report/api/routes/apikeys.js.html +8 -3
- package/coverage/lcov-report/api/routes/auth.js.html +8 -3
- package/coverage/lcov-report/api/routes/automation.js.html +8 -3
- package/coverage/lcov-report/api/routes/backup.js.html +8 -3
- package/coverage/lcov-report/api/routes/cloud.js.html +8 -3
- package/coverage/lcov-report/api/routes/component.js.html +8 -3
- package/coverage/lcov-report/api/routes/datasource.js.html +8 -3
- package/coverage/lcov-report/api/routes/deploy.js.html +8 -3
- package/coverage/lcov-report/api/routes/dev.js.html +9 -4
- package/coverage/lcov-report/api/routes/index.html +13 -68
- package/coverage/lcov-report/api/routes/integration.js.html +8 -3
- package/coverage/lcov-report/api/routes/layout.js.html +8 -3
- package/coverage/lcov-report/api/routes/metadata.js.html +8 -3
- package/coverage/lcov-report/api/routes/migrations.js.html +8 -3
- package/coverage/lcov-report/api/routes/permission.js.html +8 -3
- package/coverage/lcov-report/api/routes/query.js.html +8 -3
- package/coverage/lcov-report/api/routes/role.js.html +8 -3
- package/coverage/lcov-report/api/routes/routing.js.html +8 -3
- package/coverage/lcov-report/api/routes/screen.js.html +8 -3
- package/coverage/lcov-report/api/routes/script.js.html +8 -3
- package/coverage/lcov-report/api/routes/table.js.html +8 -3
- package/coverage/lcov-report/api/routes/templates.js.html +8 -3
- package/coverage/lcov-report/api/routes/user.js.html +8 -3
- package/coverage/lcov-report/api/routes/utils/index.html +8 -3
- package/coverage/lcov-report/api/routes/utils/validators.js.html +8 -3
- package/coverage/lcov-report/api/routes/view.js.html +8 -3
- package/coverage/lcov-report/api/routes/webhook.js.html +8 -3
- package/coverage/lcov-report/automations/actions.js.html +21 -7
- package/coverage/lcov-report/automations/automationUtils.js.html +64 -23
- package/coverage/lcov-report/automations/bullboard.js.html +8 -3
- package/coverage/lcov-report/automations/index.html +27 -37
- package/coverage/lcov-report/automations/index.js.html +8 -3
- package/coverage/lcov-report/automations/steps/bash.js.html +8 -3
- package/coverage/lcov-report/automations/steps/delay.js.html +8 -3
- package/coverage/lcov-report/automations/steps/discord.js.html +8 -3
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +8 -3
- package/coverage/lcov-report/automations/steps/executeScript.js.html +8 -3
- package/coverage/lcov-report/automations/steps/filter.js.html +8 -3
- package/coverage/lcov-report/automations/steps/index.html +31 -41
- package/coverage/lcov-report/automations/steps/integromat.js.html +8 -3
- package/coverage/lcov-report/{api/routes/static.js.html → automations/steps/loop.js.html} +70 -80
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +9 -4
- package/coverage/lcov-report/automations/steps/queryRows.js.html +9 -4
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +8 -3
- package/coverage/lcov-report/automations/steps/serverLog.js.html +8 -3
- package/coverage/lcov-report/automations/steps/slack.js.html +8 -3
- package/coverage/lcov-report/automations/steps/updateRow.js.html +8 -3
- package/coverage/lcov-report/automations/steps/utils.js.html +14 -9
- package/coverage/lcov-report/automations/steps/zapier.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/index.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +8 -3
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +8 -3
- package/coverage/lcov-report/automations/triggers.js.html +16 -11
- package/coverage/lcov-report/block-navigation.js +8 -0
- package/coverage/lcov-report/constants/index.html +12 -7
- package/coverage/lcov-report/constants/index.js.html +55 -32
- package/coverage/lcov-report/constants/layouts.js.html +8 -3
- package/coverage/lcov-report/constants/screens.js.html +8 -3
- package/coverage/lcov-report/db/inMemoryView.js.html +8 -3
- package/coverage/lcov-report/db/index.html +8 -3
- package/coverage/lcov-report/db/index.js.html +9 -4
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +20 -15
- package/coverage/lcov-report/db/linkedRows/index.html +8 -3
- package/coverage/lcov-report/db/linkedRows/index.js.html +22 -17
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +12 -7
- package/coverage/lcov-report/db/newid.js.html +11 -6
- package/coverage/lcov-report/db/utils.js.html +84 -79
- package/coverage/lcov-report/events/AutomationEmitter.js.html +14 -9
- package/coverage/lcov-report/events/index.html +8 -3
- package/coverage/lcov-report/events/index.js.html +9 -4
- package/coverage/lcov-report/events/utils.js.html +18 -13
- package/coverage/lcov-report/index.html +125 -120
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +8 -3
- package/coverage/lcov-report/integrations/tests/index.html +8 -3
- package/coverage/lcov-report/middleware/appInfo.js.html +8 -3
- package/coverage/lcov-report/middleware/builder.js.html +8 -3
- package/coverage/lcov-report/middleware/currentapp.js.html +65 -15
- package/coverage/lcov-report/middleware/index.html +25 -50
- package/coverage/lcov-report/middleware/joi-validator.js.html +9 -4
- package/coverage/lcov-report/middleware/publicApi.js.html +8 -3
- package/coverage/lcov-report/middleware/resourceId.js.html +8 -3
- package/coverage/lcov-report/middleware/selfhost.js.html +9 -4
- package/coverage/lcov-report/middleware/utils.js.html +8 -3
- package/coverage/lcov-report/sorter.js +26 -0
- package/coverage/lcov-report/threads/automation.js.html +581 -90
- package/coverage/lcov-report/threads/index.html +30 -40
- package/coverage/lcov-report/threads/query.js.html +9 -4
- package/coverage/lcov-report/threads/utils.js.html +17 -9
- package/coverage/lcov-report/utilities/bcrypt.js.html +8 -3
- package/coverage/lcov-report/utilities/budibaseDir.js.html +8 -3
- package/coverage/lcov-report/utilities/centralPath.js.html +8 -3
- package/coverage/lcov-report/utilities/csvParser.js.html +10 -5
- package/coverage/lcov-report/utilities/global.js.html +9 -4
- package/coverage/lcov-report/utilities/index.html +8 -3
- package/coverage/lcov-report/utilities/index.js.html +11 -6
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +32 -9
- package/coverage/lcov-report/utilities/queue/index.html +12 -7
- package/coverage/lcov-report/utilities/routing/index.html +8 -3
- package/coverage/lcov-report/utilities/routing/index.js.html +8 -3
- package/coverage/lcov-report/utilities/rowProcessor/index.html +8 -3
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +48 -43
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +18 -13
- package/coverage/lcov-report/utilities/scriptRunner.js.html +8 -3
- package/coverage/lcov-report/utilities/security.js.html +9 -4
- package/coverage/lcov-report/utilities/statusCodes.js.html +8 -3
- package/coverage/lcov-report/utilities/usageQuota/index.html +24 -34
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +44 -39
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +8 -3
- package/coverage/lcov-report/utilities/users.js.html +8 -3
- package/coverage/lcov-report/utilities/workerRequests.js.html +9 -4
- package/coverage/lcov.info +1144 -2875
- package/dist/api/controllers/application.js +145 -73
- package/dist/api/controllers/deploy/index.js +68 -36
- package/dist/api/controllers/public/applications.js +29 -9
- package/dist/api/controllers/public/queries.js +27 -7
- package/dist/api/controllers/public/rows.js +32 -12
- package/dist/api/controllers/public/tables.js +2 -2
- package/dist/api/controllers/public/users.js +8 -8
- package/dist/api/controllers/public/utils.js +1 -1
- package/dist/api/controllers/query/import/index.js +3 -3
- package/dist/api/controllers/query/index.js +57 -44
- package/dist/api/controllers/row/ExternalRequest.js +27 -27
- package/dist/api/controllers/row/index.js +83 -60
- package/dist/api/controllers/row/internal.js +2 -1
- package/dist/api/controllers/row/utils.js +2 -1
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +3 -0
- package/dist/api/controllers/table/bulkFormula.js +2 -1
- package/dist/api/controllers/table/internal.js +41 -35
- package/dist/api/controllers/table/utils.js +271 -229
- package/dist/api/index.js +5 -0
- package/dist/api/routes/application.js +39 -13
- package/dist/api/routes/index.js +61 -56
- package/dist/api/routes/public/index.js +6 -9
- package/dist/api/routes/public/queries.js +1 -1
- package/dist/api/routes/public/rows.js +1 -1
- package/dist/api/routes/public/tables.js +3 -3
- package/dist/api/routes/public/users.js +1 -1
- package/dist/api/routes/row.js +43 -17
- package/dist/api/routes/static.js +40 -13
- package/dist/api/routes/tests/utilities/TestFunctions.js +75 -33
- package/dist/app.js +8 -4
- package/dist/automations/actions.js +3 -0
- package/dist/automations/automationUtils.js +10 -0
- package/dist/automations/steps/createRow.js +12 -12
- package/dist/automations/steps/deleteRow.js +13 -16
- package/dist/automations/steps/loop.js +51 -0
- package/dist/automations/tests/utilities/index.js +13 -11
- package/dist/automations/utils.js +187 -133
- package/dist/constants/index.js +5 -0
- package/dist/definitions/datasource.js +1 -0
- package/dist/environment.js +2 -3
- package/dist/index.js +4 -0
- package/dist/integrations/base/sql.js +2 -2
- package/dist/integrations/base/sqlTable.js +2 -2
- package/dist/integrations/googlesheets.js +1 -1
- package/dist/integrations/index.js +4 -0
- package/dist/integrations/microsoftSqlServer.js +8 -8
- package/dist/integrations/mysql.js +9 -9
- package/dist/integrations/oracle.js +7 -7
- package/dist/integrations/postgres.js +7 -7
- package/dist/integrations/queries/sql.js +2 -2
- package/dist/integrations/redis.js +158 -0
- package/dist/integrations/rest.js +1 -1
- package/dist/middleware/authorized.js +51 -51
- package/dist/middleware/currentapp.js +15 -1
- package/dist/migrations/functions/appUrls.js +1 -1
- package/dist/migrations/functions/developerQuota.js +49 -0
- package/dist/migrations/functions/publishedAppsQuota.js +47 -0
- package/dist/migrations/functions/quotas1.js +6 -2
- package/dist/migrations/functions/usageQuotas/index.js +0 -4
- package/dist/migrations/functions/usageQuotas/syncApps.js +4 -7
- package/dist/migrations/functions/usageQuotas/syncDevelopers.js +24 -0
- package/dist/migrations/functions/usageQuotas/syncPublishedApps.js +26 -0
- package/dist/migrations/functions/usageQuotas/syncRows.js +5 -8
- package/dist/migrations/index.js +17 -1
- package/dist/package.json +14 -8
- package/dist/threads/automation.js +149 -27
- package/dist/threads/index.js +36 -10
- package/dist/threads/utils.js +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/utilities/queue/inMemoryQueue.js +6 -1
- package/nodemon.json +1 -1
- package/package.json +15 -9
- package/scripts/dev/manage.js +2 -0
- package/src/api/controllers/{application.js → application.ts} +118 -51
- package/src/api/controllers/deploy/{index.js → index.ts} +53 -29
- package/src/api/controllers/public/applications.ts +2 -2
- package/src/api/controllers/public/queries.ts +1 -1
- package/src/api/controllers/public/rows.ts +1 -1
- package/src/api/controllers/query/{index.js → index.ts} +51 -48
- package/src/api/controllers/row/ExternalRequest.ts +1 -1
- package/src/api/controllers/row/{index.js → index.ts} +24 -17
- package/src/api/controllers/row/internal.js +2 -1
- package/src/api/controllers/row/utils.js +4 -1
- package/src/api/controllers/static/templates/BudibaseApp.svelte +3 -0
- package/src/api/controllers/table/bulkFormula.js +1 -1
- package/src/api/controllers/table/{internal.js → internal.ts} +30 -26
- package/src/api/controllers/table/{utils.js → utils.ts} +86 -69
- package/src/api/index.js +5 -0
- package/src/api/routes/{application.js → application.ts} +8 -14
- package/src/api/routes/index.ts +60 -0
- package/src/api/routes/public/index.ts +1 -4
- package/src/api/routes/{row.js → row.ts} +7 -15
- package/src/api/routes/{static.js → static.ts} +11 -11
- package/src/api/routes/tests/misc.spec.js +39 -37
- package/src/api/routes/tests/utilities/{TestFunctions.js → TestFunctions.ts} +57 -33
- package/src/app.ts +1 -2
- package/src/automations/actions.js +3 -0
- package/src/automations/automationUtils.js +12 -0
- package/src/automations/steps/{createRow.js → createRow.ts} +9 -15
- package/src/automations/steps/{deleteRow.js → deleteRow.ts} +10 -16
- package/src/automations/steps/loop.js +50 -0
- package/src/automations/tests/automation.spec.js +0 -1
- package/src/automations/tests/{createRow.spec.js → createRow.spec.ts} +4 -15
- package/src/automations/tests/{deleteRow.spec.js → deleteRow.spec.ts} +3 -5
- package/src/automations/tests/utilities/index.js +12 -10
- package/src/automations/{utils.js → utils.ts} +39 -28
- package/src/constants/index.js +6 -0
- package/src/definitions/common.ts +1 -0
- package/src/definitions/datasource.ts +1 -0
- package/src/environment.js +2 -3
- package/src/index.ts +3 -0
- package/src/integrations/index.ts +4 -0
- package/src/integrations/redis.ts +152 -0
- package/src/integrations/tests/redis.spec.js +60 -0
- package/src/middleware/{authorized.js → authorized.ts} +20 -14
- package/src/middleware/currentapp.js +16 -1
- package/src/middleware/tests/currentapp.spec.js +8 -4
- package/src/migrations/functions/developerQuota.ts +15 -0
- package/src/migrations/functions/publishedAppsQuota.ts +13 -0
- package/src/migrations/functions/tests/quotas1.spec.js +0 -2
- package/src/migrations/functions/usageQuotas/index.ts +0 -5
- package/src/migrations/functions/usageQuotas/syncApps.ts +3 -6
- package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
- package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
- package/src/migrations/functions/usageQuotas/syncRows.ts +3 -6
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +34 -0
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +40 -0
- package/src/migrations/index.ts +13 -1
- package/src/threads/automation.js +196 -34
- package/src/threads/{index.js → index.ts} +18 -14
- package/src/threads/utils.js +1 -0
- package/src/utilities/queue/inMemoryQueue.js +7 -1
- package/tsconfig.build.json +10 -0
- package/tsconfig.json +2 -2
- package/builder/assets/index.68a7f4e3.css +0 -6
- package/builder/assets/index.8d4a5b33.js +0 -1291
- package/coverage/lcov-report/api/controllers/application.js.html +0 -1436
- package/coverage/lcov-report/api/controllers/query/index.js.html +0 -713
- package/coverage/lcov-report/api/controllers/row/index.js.html +0 -524
- package/coverage/lcov-report/api/controllers/table/internal.js.html +0 -620
- package/coverage/lcov-report/api/controllers/table/utils.js.html +0 -1331
- package/coverage/lcov-report/api/routes/application.js.html +0 -179
- package/coverage/lcov-report/api/routes/index.js.html +0 -266
- package/coverage/lcov-report/api/routes/row.js.html +0 -908
- package/coverage/lcov-report/automations/steps/createRow.js.html +0 -380
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +0 -347
- package/coverage/lcov-report/automations/utils.js.html +0 -665
- package/coverage/lcov-report/middleware/authorized.js.html +0 -458
- package/coverage/lcov-report/middleware/usageQuota.js.html +0 -572
- package/coverage/lcov-report/threads/index.js.html +0 -296
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +0 -359
- package/dist/middleware/usageQuota.js +0 -154
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utilities/usageQuota/index.js +0 -86
- package/src/api/routes/index.js +0 -62
- package/src/middleware/tests/usageQuota.spec.js +0 -120
- package/src/middleware/usageQuota.js +0 -164
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +0 -41
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +0 -45
- package/src/utilities/tests/usageQuota/usageQuota.spec.js +0 -72
- package/src/utilities/usageQuota/index.js +0 -93
|
@@ -1,4 +1,27 @@
|
|
|
1
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
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,50 +31,60 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
31
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
32
|
});
|
|
10
33
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.runInProd = exports.testAutomation = exports.getDB = exports.checkPermissionsEndpoint = exports.checkBuilderEndpoint = exports.createRequest = exports.clearAllAutomations = exports.clearAllApps = exports.getAllTableRows = void 0;
|
|
36
|
+
const rowController = __importStar(require("../../../controllers/row"));
|
|
37
|
+
const appController = __importStar(require("../../../controllers/application"));
|
|
38
|
+
const utils_1 = require("../../../../db/utils");
|
|
39
|
+
const roles_1 = require("@budibase/backend-core/roles");
|
|
40
|
+
const tenancy_1 = require("@budibase/backend-core/tenancy");
|
|
41
|
+
const structures_1 = require("../../../../tests/utilities/structures");
|
|
42
|
+
const context_1 = require("@budibase/backend-core/context");
|
|
43
|
+
const env = __importStar(require("../../../../environment"));
|
|
44
|
+
class Request {
|
|
45
|
+
constructor(appId, params) {
|
|
46
|
+
this.appId = appId;
|
|
47
|
+
this.params = params;
|
|
48
|
+
this.request = {};
|
|
49
|
+
}
|
|
22
50
|
}
|
|
23
51
|
function runRequest(appId, controlFunc, request) {
|
|
24
|
-
return doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
return (0, context_1.doInAppContext)(appId, () => __awaiter(this, void 0, void 0, function* () {
|
|
25
53
|
return controlFunc(request);
|
|
26
54
|
}));
|
|
27
55
|
}
|
|
28
|
-
|
|
56
|
+
const getAllTableRows = (config) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
57
|
const req = new Request(config.appId, { tableId: config.table._id });
|
|
30
58
|
yield runRequest(config.appId, rowController.fetch, req);
|
|
31
59
|
return req.body;
|
|
32
60
|
});
|
|
33
|
-
exports.
|
|
34
|
-
|
|
35
|
-
yield
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
61
|
+
exports.getAllTableRows = getAllTableRows;
|
|
62
|
+
const clearAllApps = (tenantId = structures_1.TENANT_ID) => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
|
+
yield (0, tenancy_1.doInTenant)(tenantId, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
const req = { query: { status: utils_1.AppStatus.DEV }, user: { tenantId } };
|
|
65
|
+
yield appController.fetch(req);
|
|
66
|
+
const apps = req.body;
|
|
67
|
+
if (!apps || apps.length <= 0) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
for (let app of apps) {
|
|
71
|
+
const { appId } = app;
|
|
72
|
+
const req = new Request(null, { appId });
|
|
73
|
+
yield runRequest(appId, appController.destroy, req);
|
|
74
|
+
}
|
|
75
|
+
}));
|
|
45
76
|
});
|
|
46
|
-
exports.
|
|
77
|
+
exports.clearAllApps = clearAllApps;
|
|
78
|
+
const clearAllAutomations = (config) => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
79
|
const automations = yield config.getAllAutomations();
|
|
48
80
|
for (let auto of automations) {
|
|
49
|
-
yield doInAppContext(config.appId, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
81
|
+
yield (0, context_1.doInAppContext)(config.appId, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
82
|
yield config.deleteAutomation(auto);
|
|
51
83
|
}));
|
|
52
84
|
}
|
|
53
85
|
});
|
|
54
|
-
exports.
|
|
86
|
+
exports.clearAllAutomations = clearAllAutomations;
|
|
87
|
+
const createRequest = (request, method, url, body) => {
|
|
55
88
|
let req;
|
|
56
89
|
if (method === "POST")
|
|
57
90
|
req = request.post(url).send(body);
|
|
@@ -65,7 +98,8 @@ exports.createRequest = (request, method, url, body) => {
|
|
|
65
98
|
req = request.put(url).send(body);
|
|
66
99
|
return req;
|
|
67
100
|
};
|
|
68
|
-
exports.
|
|
101
|
+
exports.createRequest = createRequest;
|
|
102
|
+
const checkBuilderEndpoint = ({ config, method, url, body, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
69
103
|
const headers = yield config.login({
|
|
70
104
|
userId: "us_fail",
|
|
71
105
|
builder: false,
|
|
@@ -76,7 +110,8 @@ exports.checkBuilderEndpoint = ({ config, method, url, body }) => __awaiter(void
|
|
|
76
110
|
.set(headers)
|
|
77
111
|
.expect(403);
|
|
78
112
|
});
|
|
79
|
-
exports.
|
|
113
|
+
exports.checkBuilderEndpoint = checkBuilderEndpoint;
|
|
114
|
+
const checkPermissionsEndpoint = ({ config, method, url, body, passRole, failRole, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
80
115
|
const passHeader = yield config.login({
|
|
81
116
|
roleId: passRole,
|
|
82
117
|
prodApp: true,
|
|
@@ -86,7 +121,7 @@ exports.checkPermissionsEndpoint = ({ config, method, url, body, passRole, failR
|
|
|
86
121
|
.set(passHeader)
|
|
87
122
|
.expect(200);
|
|
88
123
|
let failHeader;
|
|
89
|
-
if (failRole === BUILTIN_ROLE_IDS.PUBLIC) {
|
|
124
|
+
if (failRole === roles_1.BUILTIN_ROLE_IDS.PUBLIC) {
|
|
90
125
|
failHeader = config.publicHeaders({ prodApp: true });
|
|
91
126
|
}
|
|
92
127
|
else {
|
|
@@ -101,7 +136,12 @@ exports.checkPermissionsEndpoint = ({ config, method, url, body, passRole, failR
|
|
|
101
136
|
.set(failHeader)
|
|
102
137
|
.expect(403);
|
|
103
138
|
});
|
|
104
|
-
exports.
|
|
139
|
+
exports.checkPermissionsEndpoint = checkPermissionsEndpoint;
|
|
140
|
+
const getDB = () => {
|
|
141
|
+
return (0, context_1.getAppDB)();
|
|
142
|
+
};
|
|
143
|
+
exports.getDB = getDB;
|
|
144
|
+
const testAutomation = (config, automation) => __awaiter(void 0, void 0, void 0, function* () {
|
|
105
145
|
return runRequest(automation.appId, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
106
146
|
return yield config.request
|
|
107
147
|
.post(`/api/automations/${automation._id}/test`)
|
|
@@ -116,7 +156,8 @@ exports.testAutomation = (config, automation) => __awaiter(void 0, void 0, void
|
|
|
116
156
|
.expect(200);
|
|
117
157
|
}));
|
|
118
158
|
});
|
|
119
|
-
exports.
|
|
159
|
+
exports.testAutomation = testAutomation;
|
|
160
|
+
const runInProd = (func) => __awaiter(void 0, void 0, void 0, function* () {
|
|
120
161
|
const nodeEnv = env.NODE_ENV;
|
|
121
162
|
const workerId = env.JEST_WORKER_ID;
|
|
122
163
|
env._set("NODE_ENV", "PRODUCTION");
|
|
@@ -125,3 +166,4 @@ exports.runInProd = (func) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
125
166
|
env._set("NODE_ENV", nodeEnv);
|
|
126
167
|
env._set("JEST_WORKER_ID", workerId);
|
|
127
168
|
});
|
|
169
|
+
exports.runInProd = runInProd;
|
package/dist/app.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -45,7 +49,7 @@ const automations = require("./automations/index");
|
|
|
45
49
|
const Sentry = require("@sentry/node");
|
|
46
50
|
const fileSystem = require("./utilities/fileSystem");
|
|
47
51
|
const bullboard = require("./automations/bullboard");
|
|
48
|
-
const
|
|
52
|
+
const redis_1 = __importDefault(require("./utilities/redis"));
|
|
49
53
|
const migrations = __importStar(require("./migrations"));
|
|
50
54
|
const app = new Koa();
|
|
51
55
|
// set up top level koa middleware
|
|
@@ -89,14 +93,14 @@ server.on("close", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
89
93
|
if (env.NODE_ENV !== "jest") {
|
|
90
94
|
console.log("Server Closed");
|
|
91
95
|
}
|
|
92
|
-
yield
|
|
96
|
+
yield redis_1.default.shutdown();
|
|
93
97
|
}));
|
|
94
98
|
module.exports = server.listen(env.PORT || 0, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
95
99
|
console.log(`Budibase running on ${JSON.stringify(server.address())}`);
|
|
96
100
|
env._set("PORT", server.address().port);
|
|
97
101
|
eventEmitter.emitPort(env.PORT);
|
|
98
102
|
fileSystem.init();
|
|
99
|
-
yield
|
|
103
|
+
yield redis_1.default.init();
|
|
100
104
|
yield automations.init();
|
|
101
105
|
}));
|
|
102
106
|
const shutdown = () => {
|
|
@@ -23,6 +23,7 @@ const integromat = require("./steps/integromat");
|
|
|
23
23
|
let filter = require("./steps/filter");
|
|
24
24
|
let delay = require("./steps/delay");
|
|
25
25
|
let queryRow = require("./steps/queryRows");
|
|
26
|
+
let loop = require("./steps/loop");
|
|
26
27
|
const env = require("../environment");
|
|
27
28
|
const ACTION_IMPLS = {
|
|
28
29
|
SEND_EMAIL_SMTP: sendSmtpEmail.run,
|
|
@@ -36,6 +37,7 @@ const ACTION_IMPLS = {
|
|
|
36
37
|
DELAY: delay.run,
|
|
37
38
|
FILTER: filter.run,
|
|
38
39
|
QUERY_ROWS: queryRow.run,
|
|
40
|
+
LOOP: loop.run,
|
|
39
41
|
// these used to be lowercase step IDs, maintain for backwards compat
|
|
40
42
|
discord: discord.run,
|
|
41
43
|
slack: slack.run,
|
|
@@ -54,6 +56,7 @@ const ACTION_DEFINITIONS = {
|
|
|
54
56
|
DELAY: delay.definition,
|
|
55
57
|
FILTER: filter.definition,
|
|
56
58
|
QUERY_ROWS: queryRow.definition,
|
|
59
|
+
LOOP: loop.definition,
|
|
57
60
|
// these used to be lowercase step IDs, maintain for backwards compat
|
|
58
61
|
discord: discord.definition,
|
|
59
62
|
slack: slack.definition,
|
|
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
const { getTable } = require("../api/controllers/table/utils");
|
|
12
|
+
const { findHBSBlocks } = require("@budibase/string-templates");
|
|
12
13
|
/**
|
|
13
14
|
* When values are input to the system generally they will be of type string as this is required for template strings.
|
|
14
15
|
* This can generate some odd scenarios as the Schema of the automation requires a number but the builder might supply
|
|
@@ -79,3 +80,12 @@ exports.getError = err => {
|
|
|
79
80
|
}
|
|
80
81
|
return typeof err !== "string" ? err.toString() : err;
|
|
81
82
|
};
|
|
83
|
+
exports.substituteLoopStep = (hbsString, substitute) => {
|
|
84
|
+
let blocks = findHBSBlocks(hbsString);
|
|
85
|
+
for (let block of blocks) {
|
|
86
|
+
let oldBlock = block;
|
|
87
|
+
block = block.replace(/loop/, substitute);
|
|
88
|
+
hbsString = hbsString.replace(new RegExp(oldBlock, "g"), block);
|
|
89
|
+
}
|
|
90
|
+
return hbsString;
|
|
91
|
+
};
|
|
@@ -8,10 +8,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.run = exports.definition = void 0;
|
|
13
|
+
const row_1 = require("../../api/controllers/row");
|
|
14
|
+
const automationUtils_1 = require("../automationUtils");
|
|
15
|
+
const utils_1 = require("./utils");
|
|
15
16
|
exports.definition = {
|
|
16
17
|
name: "Create Row",
|
|
17
18
|
tagline: "Create a {{inputs.enriched.table.name}} row",
|
|
@@ -67,7 +68,7 @@ exports.definition = {
|
|
|
67
68
|
},
|
|
68
69
|
},
|
|
69
70
|
};
|
|
70
|
-
|
|
71
|
+
function run({ inputs, appId, emitter }) {
|
|
71
72
|
return __awaiter(this, void 0, void 0, function* () {
|
|
72
73
|
if (inputs.row == null || inputs.row.tableId == null) {
|
|
73
74
|
return {
|
|
@@ -78,17 +79,15 @@ exports.run = function ({ inputs, appId, emitter }) {
|
|
|
78
79
|
};
|
|
79
80
|
}
|
|
80
81
|
// have to clean up the row, remove the table from it
|
|
81
|
-
const ctx = buildCtx(appId, emitter, {
|
|
82
|
+
const ctx = (0, utils_1.buildCtx)(appId, emitter, {
|
|
82
83
|
body: inputs.row,
|
|
83
84
|
params: {
|
|
84
85
|
tableId: inputs.row.tableId,
|
|
85
86
|
},
|
|
86
87
|
});
|
|
87
88
|
try {
|
|
88
|
-
inputs.row = yield
|
|
89
|
-
yield
|
|
90
|
-
yield rowController.save(ctx);
|
|
91
|
-
yield usage.update(usage.Properties.ROW, 1);
|
|
89
|
+
inputs.row = yield (0, automationUtils_1.cleanUpRow)(inputs.row.tableId, inputs.row);
|
|
90
|
+
yield (0, row_1.save)(ctx);
|
|
92
91
|
return {
|
|
93
92
|
row: inputs.row,
|
|
94
93
|
response: ctx.body,
|
|
@@ -100,8 +99,9 @@ exports.run = function ({ inputs, appId, emitter }) {
|
|
|
100
99
|
catch (err) {
|
|
101
100
|
return {
|
|
102
101
|
success: false,
|
|
103
|
-
response:
|
|
102
|
+
response: (0, automationUtils_1.getError)(err),
|
|
104
103
|
};
|
|
105
104
|
}
|
|
106
105
|
});
|
|
107
|
-
}
|
|
106
|
+
}
|
|
107
|
+
exports.run = run;
|
|
@@ -8,10 +8,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.run = exports.definition = void 0;
|
|
13
|
+
const row_1 = require("../../api/controllers/row");
|
|
14
|
+
const utils_1 = require("./utils");
|
|
15
|
+
const automationUtils_1 = require("../automationUtils");
|
|
15
16
|
exports.definition = {
|
|
16
17
|
description: "Delete a row from your database",
|
|
17
18
|
icon: "TableRowRemoveCenter",
|
|
@@ -33,12 +34,8 @@ exports.definition = {
|
|
|
33
34
|
type: "string",
|
|
34
35
|
title: "Row ID",
|
|
35
36
|
},
|
|
36
|
-
revision: {
|
|
37
|
-
type: "string",
|
|
38
|
-
title: "Row Revision",
|
|
39
|
-
},
|
|
40
37
|
},
|
|
41
|
-
required: ["tableId", "id"
|
|
38
|
+
required: ["tableId", "id"],
|
|
42
39
|
},
|
|
43
40
|
outputs: {
|
|
44
41
|
properties: {
|
|
@@ -60,9 +57,9 @@ exports.definition = {
|
|
|
60
57
|
},
|
|
61
58
|
},
|
|
62
59
|
};
|
|
63
|
-
|
|
60
|
+
function run({ inputs, appId, emitter }) {
|
|
64
61
|
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
-
if (inputs.id == null
|
|
62
|
+
if (inputs.id == null) {
|
|
66
63
|
return {
|
|
67
64
|
success: false,
|
|
68
65
|
response: {
|
|
@@ -70,7 +67,7 @@ exports.run = function ({ inputs, appId, emitter }) {
|
|
|
70
67
|
},
|
|
71
68
|
};
|
|
72
69
|
}
|
|
73
|
-
let ctx = buildCtx(appId, emitter, {
|
|
70
|
+
let ctx = (0, utils_1.buildCtx)(appId, emitter, {
|
|
74
71
|
body: {
|
|
75
72
|
_id: inputs.id,
|
|
76
73
|
_rev: inputs.revision,
|
|
@@ -80,8 +77,7 @@ exports.run = function ({ inputs, appId, emitter }) {
|
|
|
80
77
|
},
|
|
81
78
|
});
|
|
82
79
|
try {
|
|
83
|
-
yield
|
|
84
|
-
yield rowController.destroy(ctx);
|
|
80
|
+
yield (0, row_1.destroy)(ctx);
|
|
85
81
|
return {
|
|
86
82
|
response: ctx.body,
|
|
87
83
|
row: ctx.row,
|
|
@@ -91,8 +87,9 @@ exports.run = function ({ inputs, appId, emitter }) {
|
|
|
91
87
|
catch (err) {
|
|
92
88
|
return {
|
|
93
89
|
success: false,
|
|
94
|
-
response:
|
|
90
|
+
response: (0, automationUtils_1.getError)(err),
|
|
95
91
|
};
|
|
96
92
|
}
|
|
97
93
|
});
|
|
98
|
-
}
|
|
94
|
+
}
|
|
95
|
+
exports.run = run;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.definition = {
|
|
3
|
+
name: "Looping",
|
|
4
|
+
icon: "Reuse",
|
|
5
|
+
tagline: "Loop the block",
|
|
6
|
+
description: "Loop",
|
|
7
|
+
stepId: "LOOP",
|
|
8
|
+
internal: true,
|
|
9
|
+
inputs: {},
|
|
10
|
+
schema: {
|
|
11
|
+
inputs: {
|
|
12
|
+
properties: {
|
|
13
|
+
option: {
|
|
14
|
+
customType: "loopOption",
|
|
15
|
+
title: "Input type",
|
|
16
|
+
},
|
|
17
|
+
binding: {
|
|
18
|
+
type: "string",
|
|
19
|
+
title: "Binding / Value",
|
|
20
|
+
},
|
|
21
|
+
iterations: {
|
|
22
|
+
type: "number",
|
|
23
|
+
title: "Max loop iterations",
|
|
24
|
+
},
|
|
25
|
+
failure: {
|
|
26
|
+
type: "string",
|
|
27
|
+
title: "Failure Condition",
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
required: ["type", "value", "iterations", "failure"],
|
|
31
|
+
},
|
|
32
|
+
outputs: {
|
|
33
|
+
properties: {
|
|
34
|
+
items: {
|
|
35
|
+
customType: "item",
|
|
36
|
+
description: "The item currently being executed",
|
|
37
|
+
},
|
|
38
|
+
success: {
|
|
39
|
+
type: "boolean",
|
|
40
|
+
description: "Whether the message loop was successfully",
|
|
41
|
+
},
|
|
42
|
+
iterations: {
|
|
43
|
+
type: "number",
|
|
44
|
+
descriptions: "The amount of times the block ran",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: ["success", "items", "iterations"],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
type: "LOGIC",
|
|
51
|
+
};
|
|
@@ -9,6 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
const TestConfig = require("../../../tests/utilities/TestConfiguration");
|
|
12
|
+
const { TENANT_ID } = require("../../../tests/utilities/structures");
|
|
13
|
+
const { doInTenant } = require("@budibase/backend-core/tenancy");
|
|
12
14
|
const actions = require("../../actions");
|
|
13
15
|
const emitter = require("../../../events/index");
|
|
14
16
|
const env = require("../../../environment");
|
|
@@ -24,7 +26,6 @@ exports.afterAll = () => {
|
|
|
24
26
|
};
|
|
25
27
|
exports.runInProd = (fn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
28
|
env._set("NODE_ENV", "production");
|
|
27
|
-
env._set("USE_QUOTAS", 1);
|
|
28
29
|
let error;
|
|
29
30
|
try {
|
|
30
31
|
yield fn();
|
|
@@ -33,22 +34,23 @@ exports.runInProd = (fn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
33
34
|
error = err;
|
|
34
35
|
}
|
|
35
36
|
env._set("NODE_ENV", "jest");
|
|
36
|
-
env._set("USE_QUOTAS", null);
|
|
37
37
|
if (error) {
|
|
38
38
|
throw error;
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
41
|
exports.runStep = function runStep(stepId, inputs) {
|
|
42
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
43
|
+
return doInTenant(TENANT_ID, () => __awaiter(this, void 0, void 0, function* () {
|
|
44
|
+
let step = yield actions.getAction(stepId);
|
|
45
|
+
expect(step).toBeDefined();
|
|
46
|
+
return step({
|
|
47
|
+
inputs,
|
|
48
|
+
appId: config ? config.getAppId() : null,
|
|
49
|
+
// don't really need an API key, mocked out usage quota, not being tested here
|
|
50
|
+
apiKey: exports.apiKey,
|
|
51
|
+
emitter,
|
|
52
|
+
});
|
|
53
|
+
}));
|
|
52
54
|
});
|
|
53
55
|
};
|
|
54
56
|
exports.apiKey = "test";
|