@budibase/server 1.0.95 → 1.0.98-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/builder/assets/{index.7c8961b4.css → index.0b7cf958.css} +1 -1
- package/builder/assets/index.55c226d0.js +1292 -0
- package/builder/assets/{vendor.a7c6ad0a.js → vendor.8e34a169.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +274 -273
- package/coverage/coverage-final.json +18 -18
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +2 -2
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +4 -4
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +1 -1
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +2 -2
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +10 -10
- package/coverage/lcov-report/api/controllers/row/index.js.html +20 -20
- package/coverage/lcov-report/api/controllers/row/internal.js.html +47 -35
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +6 -6
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- package/coverage/lcov-report/api/index.html +15 -15
- package/coverage/lcov-report/api/index.js.html +15 -27
- package/coverage/lcov-report/api/routes/analytics.js.html +3 -3
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +3 -6
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +3 -3
- package/coverage/lcov-report/automations/utils.js.html +1 -1
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +1 -1
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/client.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +10 -10
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +7 -7
- package/coverage/lcov-report/db/newid.js.html +2 -2
- package/coverage/lcov-report/db/utils.js.html +4 -4
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +25 -25
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/authorized.js.html +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +15 -12
- package/coverage/lcov-report/middleware/index.html +11 -11
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/publicApi.js.html +3 -3
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +1 -1
- package/coverage/lcov-report/threads/automation.js.html +1 -1
- package/coverage/lcov-report/threads/index.html +1 -1
- package/coverage/lcov-report/threads/index.js.html +1 -1
- package/coverage/lcov-report/threads/query.js.html +1 -1
- package/coverage/lcov-report/threads/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +1 -1
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +24 -24
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +8 -8
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +1 -1
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +415 -416
- package/dist/api/controllers/auth.js +1 -1
- package/dist/api/controllers/public/rows.js +2 -2
- package/dist/api/controllers/query/import/index.js +2 -1
- package/dist/api/controllers/query/import/sources/base/index.js +12 -1
- package/dist/api/controllers/query/import/sources/curl.js +2 -2
- package/dist/api/controllers/query/import/sources/openapi3.js +174 -0
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +253 -0
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +1225 -0
- package/dist/api/controllers/row/internal.js +2 -1
- package/dist/api/controllers/static/index.js +2 -15
- package/dist/api/controllers/table/external.js +3 -3
- package/dist/api/index.js +3 -6
- package/dist/api/routes/analytics.js +2 -2
- package/dist/api/routes/static.js +1 -2
- package/dist/db/views/staticViews.js +2 -0
- package/dist/definitions/datasource.js +1 -0
- package/dist/integrations/base/sql.js +16 -9
- package/dist/integrations/dynamodb.js +3 -1
- package/dist/integrations/firebase.js +192 -0
- package/dist/integrations/index.js +3 -0
- package/dist/integrations/rest.js +2 -1
- package/dist/middleware/currentapp.js +7 -6
- package/dist/middleware/publicApi.js +2 -2
- package/dist/package.json +7 -8
- package/dist/tests/utilities/TestConfiguration.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -9
- package/scripts/dev/manage.js +2 -1
- package/src/api/controllers/auth.js +1 -1
- package/src/api/controllers/public/rows.ts +2 -4
- package/src/api/controllers/query/import/index.ts +2 -1
- package/src/api/controllers/query/import/sources/base/index.ts +12 -2
- package/src/api/controllers/query/import/sources/curl.ts +2 -2
- package/src/api/controllers/query/import/sources/openapi3.ts +205 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +253 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.yaml +153 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +1225 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.yaml +804 -0
- package/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js +240 -0
- package/src/api/controllers/query/import/tests/index.spec.js +43 -0
- package/src/api/controllers/row/internal.js +5 -1
- package/src/api/controllers/static/index.js +2 -18
- package/src/api/controllers/table/external.js +3 -3
- package/src/api/index.js +3 -7
- package/src/api/routes/analytics.js +2 -2
- package/src/api/routes/static.js +1 -2
- package/src/api/routes/tests/misc.spec.js +2 -2
- package/src/db/views/staticViews.js +2 -0
- package/src/definitions/datasource.ts +1 -0
- package/src/definitions/openapi.ts +472 -472
- package/src/integrations/base/sql.ts +14 -9
- package/src/integrations/dynamodb.ts +3 -1
- package/src/integrations/firebase.ts +205 -0
- package/src/integrations/index.ts +3 -0
- package/src/integrations/rest.ts +2 -1
- package/src/integrations/tests/sql.spec.js +51 -0
- package/src/middleware/currentapp.js +7 -6
- package/src/middleware/publicApi.js +2 -2
- package/src/middleware/tests/authorized.spec.js +1 -3
- package/src/middleware/tests/currentapp.spec.js +4 -4
- package/src/tests/utilities/TestConfiguration.js +1 -1
- package/.eslintrc +0 -13
- package/builder/assets/index.3544c466.js +0 -1291
|
@@ -91,7 +91,8 @@ exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
91
91
|
const isUserTable = tableId === InternalTables.USER_METADATA;
|
|
92
92
|
let oldRow;
|
|
93
93
|
try {
|
|
94
|
-
|
|
94
|
+
let dbTable = yield db.get(tableId);
|
|
95
|
+
oldRow = yield outputProcessing(dbTable, yield findRow(ctx, tableId, inputs._id));
|
|
95
96
|
}
|
|
96
97
|
catch (err) {
|
|
97
98
|
if (isUserTable) {
|
|
@@ -14,14 +14,13 @@ const { resolve, join } = require("../../../utilities/centralPath");
|
|
|
14
14
|
const uuid = require("uuid");
|
|
15
15
|
const { ObjectStoreBuckets } = require("../../../constants");
|
|
16
16
|
const { processString } = require("@budibase/string-templates");
|
|
17
|
-
const { getAllApps } = require("@budibase/backend-core/db");
|
|
18
17
|
const { loadHandlebarsFile, NODE_MODULES_PATH, TOP_LEVEL_PATH, } = require("../../../utilities/fileSystem");
|
|
19
18
|
const env = require("../../../environment");
|
|
20
19
|
const { clientLibraryPath } = require("../../../utilities");
|
|
21
20
|
const { upload } = require("../../../utilities/fileSystem");
|
|
22
21
|
const { attachmentsRelativeURL } = require("../../../utilities");
|
|
23
22
|
const { DocumentTypes } = require("../../../db/utils");
|
|
24
|
-
const { getAppDB,
|
|
23
|
+
const { getAppDB, getAppId } = require("@budibase/backend-core/context");
|
|
25
24
|
const AWS = require("aws-sdk");
|
|
26
25
|
const AWS_REGION = env.AWS_REGION ? env.AWS_REGION : "eu-west-1";
|
|
27
26
|
function prepareUpload({ s3Key, bucket, metadata, file }) {
|
|
@@ -43,18 +42,6 @@ function prepareUpload({ s3Key, bucket, metadata, file }) {
|
|
|
43
42
|
};
|
|
44
43
|
});
|
|
45
44
|
}
|
|
46
|
-
function getAppIdFromUrl(ctx) {
|
|
47
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
// the "appId" component of the URL can be the id or the custom url
|
|
49
|
-
let possibleAppUrl = `/${encodeURI(ctx.params.appId).toLowerCase()}`;
|
|
50
|
-
// search prod apps for a url that matches, exclude dev where id is always used
|
|
51
|
-
const apps = yield getAllApps({ dev: false });
|
|
52
|
-
const app = apps.filter(a => a.url && a.url.toLowerCase() === possibleAppUrl)[0];
|
|
53
|
-
const appId = app && app.appId ? app.appId : ctx.params.appId;
|
|
54
|
-
updateAppId(appId);
|
|
55
|
-
return appId;
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
45
|
exports.serveBuilder = function (ctx) {
|
|
59
46
|
return __awaiter(this, void 0, void 0, function* () {
|
|
60
47
|
let builderPath = resolve(TOP_LEVEL_PATH, "builder");
|
|
@@ -81,10 +68,10 @@ exports.uploadFile = function (ctx) {
|
|
|
81
68
|
};
|
|
82
69
|
exports.serveApp = function (ctx) {
|
|
83
70
|
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
-
let appId = yield getAppIdFromUrl(ctx);
|
|
85
71
|
const App = require("./templates/BudibaseApp.svelte").default;
|
|
86
72
|
const db = getAppDB({ skip_setup: true });
|
|
87
73
|
const appInfo = yield db.get(DocumentTypes.APP_METADATA);
|
|
74
|
+
let appId = getAppId();
|
|
88
75
|
const { head, html, css } = App.render({
|
|
89
76
|
title: appInfo.name,
|
|
90
77
|
production: env.isProd(),
|
|
@@ -97,8 +97,8 @@ function generateManyLinkSchema(datasource, column, table, relatedTable) {
|
|
|
97
97
|
},
|
|
98
98
|
};
|
|
99
99
|
column.through = junctionTable._id;
|
|
100
|
-
column.throughFrom =
|
|
101
|
-
column.throughTo =
|
|
100
|
+
column.throughFrom = relatedPrimary;
|
|
101
|
+
column.throughTo = primary;
|
|
102
102
|
column.fieldName = relatedPrimary;
|
|
103
103
|
return junctionTable;
|
|
104
104
|
}
|
|
@@ -123,7 +123,7 @@ function generateRelatedSchema(linkColumn, table, relatedTable, columnName) {
|
|
|
123
123
|
// is many to many
|
|
124
124
|
else {
|
|
125
125
|
// don't need to copy through, already got it
|
|
126
|
-
relatedSchema.fieldName = linkColumn.
|
|
126
|
+
relatedSchema.fieldName = linkColumn.throughTo;
|
|
127
127
|
relatedSchema.throughTo = linkColumn.throughFrom;
|
|
128
128
|
relatedSchema.throughFrom = linkColumn.throughTo;
|
|
129
129
|
}
|
package/dist/api/index.js
CHANGED
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
const Router = require("@koa/router");
|
|
12
|
-
const { buildAuthMiddleware, auditLog, buildTenancyMiddleware,
|
|
12
|
+
const { buildAuthMiddleware, auditLog, buildTenancyMiddleware, } = require("@budibase/backend-core/auth");
|
|
13
13
|
const currentApp = require("../middleware/currentapp");
|
|
14
14
|
const compress = require("koa-compress");
|
|
15
15
|
const zlib = require("zlib");
|
|
@@ -17,6 +17,8 @@ const { mainRoutes, staticRoutes, publicRoutes } = require("./routes");
|
|
|
17
17
|
const pkg = require("../../package.json");
|
|
18
18
|
const env = require("../environment");
|
|
19
19
|
const router = new Router();
|
|
20
|
+
router.get("/health", ctx => (ctx.status = 200));
|
|
21
|
+
router.get("/version", ctx => (ctx.body = pkg.version));
|
|
20
22
|
router
|
|
21
23
|
.use(compress({
|
|
22
24
|
threshold: 2048,
|
|
@@ -35,8 +37,6 @@ router
|
|
|
35
37
|
};
|
|
36
38
|
yield next();
|
|
37
39
|
}))
|
|
38
|
-
.use("/health", ctx => (ctx.status = 200))
|
|
39
|
-
.use("/version", ctx => (ctx.body = pkg.version))
|
|
40
40
|
// re-direct before any middlewares occur
|
|
41
41
|
.redirect("/", "/builder")
|
|
42
42
|
.use(buildAuthMiddleware(null, {
|
|
@@ -49,8 +49,6 @@ router
|
|
|
49
49
|
noTenancyRequired: true,
|
|
50
50
|
}))
|
|
51
51
|
.use(currentApp)
|
|
52
|
-
// this middleware will try to use the app ID to determine the tenancy
|
|
53
|
-
.use(buildAppTenancyMiddleware())
|
|
54
52
|
.use(auditLog);
|
|
55
53
|
// error handling middleware
|
|
56
54
|
router.use((ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -70,7 +68,6 @@ router.use((ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
70
68
|
}
|
|
71
69
|
}
|
|
72
70
|
}));
|
|
73
|
-
router.get("/health", ctx => (ctx.status = 200));
|
|
74
71
|
// authenticated routes
|
|
75
72
|
for (let route of mainRoutes) {
|
|
76
73
|
router.use(route.routes());
|
|
@@ -3,6 +3,6 @@ const Router = require("@koa/router");
|
|
|
3
3
|
const controller = require("../controllers/analytics");
|
|
4
4
|
const router = Router();
|
|
5
5
|
router
|
|
6
|
-
.get("/api/
|
|
7
|
-
.post("/api/
|
|
6
|
+
.get("/api/bbtel", controller.isEnabled)
|
|
7
|
+
.post("/api/bbtel/ping", controller.endUserPing);
|
|
8
8
|
module.exports = router;
|
|
@@ -42,7 +42,6 @@ router
|
|
|
42
42
|
.get("/builder/:file*", controller.serveBuilder)
|
|
43
43
|
.post("/api/attachments/process", authorized(BUILDER), controller.uploadFile)
|
|
44
44
|
.post("/api/attachments/:tableId/upload", paramResource("tableId"), authorized(PermissionTypes.TABLE, PermissionLevels.WRITE), controller.uploadFile)
|
|
45
|
-
|
|
46
|
-
.get("/:appId/:path*", controller.serveApp)
|
|
45
|
+
.get("/app/:appUrl/:path*", controller.serveApp)
|
|
47
46
|
.post("/api/attachments/:datasourceId/url", authorized(PermissionTypes.TABLE, PermissionLevels.READ), controller.getSignedUploadURL);
|
|
48
47
|
module.exports = router;
|
|
@@ -36,6 +36,7 @@ exports.createLinkView = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
36
36
|
if (doc.type === "link") {
|
|
37
37
|
let doc1 = doc.doc1;
|
|
38
38
|
let doc2 = doc.doc2;
|
|
39
|
+
// eslint-disable-next-line no-undef
|
|
39
40
|
emit([doc1.tableId, doc1.rowId], {
|
|
40
41
|
id: doc2.rowId,
|
|
41
42
|
thisId: doc1.rowId,
|
|
@@ -43,6 +44,7 @@ exports.createLinkView = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
43
44
|
});
|
|
44
45
|
// if linking to same table can't emit twice
|
|
45
46
|
if (doc1.tableId !== doc2.tableId) {
|
|
47
|
+
// eslint-disable-next-line no-undef
|
|
46
48
|
emit([doc2.tableId, doc2.rowId], {
|
|
47
49
|
id: doc1.rowId,
|
|
48
50
|
thisId: doc2.rowId,
|
|
@@ -50,6 +50,7 @@ var SourceNames;
|
|
|
50
50
|
SourceNames["REST"] = "REST";
|
|
51
51
|
SourceNames["ORACLE"] = "ORACLE";
|
|
52
52
|
SourceNames["GOOGLE_SHEETS"] = "GOOGLE_SHEETS";
|
|
53
|
+
SourceNames["FIREBASE"] = "FIREBASE";
|
|
53
54
|
})(SourceNames = exports.SourceNames || (exports.SourceNames = {}));
|
|
54
55
|
var IncludeRelationships;
|
|
55
56
|
(function (IncludeRelationships) {
|
|
@@ -34,11 +34,8 @@ function parse(input) {
|
|
|
34
34
|
if (typeof input !== "string") {
|
|
35
35
|
return input;
|
|
36
36
|
}
|
|
37
|
-
if (input === MAX_ISO_DATE) {
|
|
38
|
-
return
|
|
39
|
-
}
|
|
40
|
-
if (input === MIN_ISO_DATE) {
|
|
41
|
-
return new Date(-8640000000000000);
|
|
37
|
+
if (input === MAX_ISO_DATE || input === MIN_ISO_DATE) {
|
|
38
|
+
return null;
|
|
42
39
|
}
|
|
43
40
|
if (utils_1.isIsoDateString(input)) {
|
|
44
41
|
return new Date(input);
|
|
@@ -127,11 +124,21 @@ class InternalBuilder {
|
|
|
127
124
|
}
|
|
128
125
|
if (filters.range) {
|
|
129
126
|
iterate(filters.range, (key, value) => {
|
|
130
|
-
if (
|
|
131
|
-
|
|
127
|
+
if (value.low && value.high) {
|
|
128
|
+
// Use a between operator if we have 2 valid range values
|
|
129
|
+
const fnc = allOr ? "orWhereBetween" : "whereBetween";
|
|
130
|
+
query = query[fnc](key, [value.low, value.high]);
|
|
131
|
+
}
|
|
132
|
+
else if (value.low) {
|
|
133
|
+
// Use just a single greater than operator if we only have a low
|
|
134
|
+
const fnc = allOr ? "orWhere" : "where";
|
|
135
|
+
query = query[fnc](key, ">", value.low);
|
|
136
|
+
}
|
|
137
|
+
else if (value.high) {
|
|
138
|
+
// Use just a single less than operator if we only have a high
|
|
139
|
+
const fnc = allOr ? "orWhere" : "where";
|
|
140
|
+
query = query[fnc](key, "<", value.high);
|
|
132
141
|
}
|
|
133
|
-
const fnc = allOr ? "orWhereBetween" : "whereBetween";
|
|
134
|
-
query = query[fnc](key, [value.low, value.high]);
|
|
135
142
|
});
|
|
136
143
|
}
|
|
137
144
|
if (filters.equal) {
|
|
@@ -124,7 +124,9 @@ var DynamoModule;
|
|
|
124
124
|
class DynamoDBIntegration {
|
|
125
125
|
constructor(config) {
|
|
126
126
|
this.config = config;
|
|
127
|
-
this.
|
|
127
|
+
if (!this.config.endpoint) {
|
|
128
|
+
this.connect();
|
|
129
|
+
}
|
|
128
130
|
let options = {
|
|
129
131
|
correctClockSkew: true,
|
|
130
132
|
endpoint: config.endpoint ? config.endpoint : undefined,
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const datasource_1 = require("../definitions/datasource");
|
|
13
|
+
const firestore_1 = require("@google-cloud/firestore");
|
|
14
|
+
var Firebase;
|
|
15
|
+
(function (Firebase) {
|
|
16
|
+
const SCHEMA = {
|
|
17
|
+
docs: "https://firebase.google.com/docs/firestore/quickstart",
|
|
18
|
+
friendlyName: "Firestore",
|
|
19
|
+
description: "Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.",
|
|
20
|
+
datasource: {
|
|
21
|
+
email: {
|
|
22
|
+
type: datasource_1.DatasourceFieldTypes.STRING,
|
|
23
|
+
required: true,
|
|
24
|
+
},
|
|
25
|
+
privateKey: {
|
|
26
|
+
type: datasource_1.DatasourceFieldTypes.STRING,
|
|
27
|
+
required: true,
|
|
28
|
+
},
|
|
29
|
+
projectId: {
|
|
30
|
+
type: datasource_1.DatasourceFieldTypes.STRING,
|
|
31
|
+
required: true,
|
|
32
|
+
},
|
|
33
|
+
serviceAccount: {
|
|
34
|
+
type: datasource_1.DatasourceFieldTypes.JSON,
|
|
35
|
+
required: false,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
query: {
|
|
39
|
+
create: {
|
|
40
|
+
type: datasource_1.QueryTypes.JSON,
|
|
41
|
+
},
|
|
42
|
+
read: {
|
|
43
|
+
type: datasource_1.QueryTypes.JSON,
|
|
44
|
+
},
|
|
45
|
+
update: {
|
|
46
|
+
type: datasource_1.QueryTypes.JSON,
|
|
47
|
+
},
|
|
48
|
+
delete: {
|
|
49
|
+
type: datasource_1.QueryTypes.JSON,
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
extra: {
|
|
53
|
+
collection: {
|
|
54
|
+
displayName: "Collection",
|
|
55
|
+
type: datasource_1.DatasourceFieldTypes.STRING,
|
|
56
|
+
required: true,
|
|
57
|
+
},
|
|
58
|
+
filterField: {
|
|
59
|
+
displayName: "Filter field",
|
|
60
|
+
type: datasource_1.DatasourceFieldTypes.STRING,
|
|
61
|
+
required: false,
|
|
62
|
+
},
|
|
63
|
+
filter: {
|
|
64
|
+
displayName: "Filter comparison",
|
|
65
|
+
type: datasource_1.DatasourceFieldTypes.LIST,
|
|
66
|
+
required: false,
|
|
67
|
+
data: {
|
|
68
|
+
read: [
|
|
69
|
+
"==",
|
|
70
|
+
"<",
|
|
71
|
+
"<=",
|
|
72
|
+
"==",
|
|
73
|
+
"!=",
|
|
74
|
+
">=",
|
|
75
|
+
">",
|
|
76
|
+
"array-contains",
|
|
77
|
+
"in",
|
|
78
|
+
"not-in",
|
|
79
|
+
"array-contains-any",
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
filterValue: {
|
|
84
|
+
displayName: "Filter value",
|
|
85
|
+
type: datasource_1.DatasourceFieldTypes.STRING,
|
|
86
|
+
required: false,
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
class FirebaseIntegration {
|
|
91
|
+
constructor(config) {
|
|
92
|
+
this.config = config;
|
|
93
|
+
if (config.serviceAccount) {
|
|
94
|
+
const serviceAccount = JSON.parse(config.serviceAccount);
|
|
95
|
+
this.db = new firestore_1.Firestore({
|
|
96
|
+
projectId: serviceAccount.project_id,
|
|
97
|
+
credentials: {
|
|
98
|
+
client_email: serviceAccount.client_email,
|
|
99
|
+
private_key: serviceAccount.private_key,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.db = new firestore_1.Firestore({
|
|
105
|
+
projectId: config.projectId,
|
|
106
|
+
credentials: {
|
|
107
|
+
client_email: config.email,
|
|
108
|
+
private_key: config.privateKey,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
create(query) {
|
|
114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
try {
|
|
116
|
+
const documentReference = this.db
|
|
117
|
+
.collection(query.extra.collection)
|
|
118
|
+
.doc();
|
|
119
|
+
yield documentReference.set(Object.assign(Object.assign({}, query.json), { id: documentReference.id }));
|
|
120
|
+
const snapshot = yield documentReference.get();
|
|
121
|
+
return snapshot.data();
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
console.error("Error writing to Firestore", err);
|
|
125
|
+
throw err;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
read(query) {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
try {
|
|
132
|
+
let snapshot;
|
|
133
|
+
const collectionRef = this.db.collection(query.extra.collection);
|
|
134
|
+
if (query.extra.filterField &&
|
|
135
|
+
query.extra.filter &&
|
|
136
|
+
query.extra.filterValue) {
|
|
137
|
+
snapshot = yield collectionRef
|
|
138
|
+
.where(query.extra.filterField, query.extra.filter, query.extra.filterValue)
|
|
139
|
+
.get();
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
snapshot = yield collectionRef.get();
|
|
143
|
+
}
|
|
144
|
+
const result = [];
|
|
145
|
+
snapshot.forEach(doc => result.push(doc.data()));
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
console.error("Error querying Firestore", err);
|
|
150
|
+
throw err;
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
update(query) {
|
|
155
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
156
|
+
try {
|
|
157
|
+
yield this.db
|
|
158
|
+
.collection(query.extra.collection)
|
|
159
|
+
.doc(query.json.id)
|
|
160
|
+
.update(query.json);
|
|
161
|
+
return (yield this.db
|
|
162
|
+
.collection(query.extra.collection)
|
|
163
|
+
.doc(query.json.id)
|
|
164
|
+
.get()).data();
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
console.error("Error writing to firebase", err);
|
|
168
|
+
throw err;
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
delete(query) {
|
|
173
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
174
|
+
try {
|
|
175
|
+
yield this.db
|
|
176
|
+
.collection(query.extra.collection)
|
|
177
|
+
.doc(query.json.id)
|
|
178
|
+
.delete();
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
console.error("Error writing to mongodb", err);
|
|
183
|
+
throw err;
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
module.exports = {
|
|
189
|
+
schema: SCHEMA,
|
|
190
|
+
integration: FirebaseIntegration,
|
|
191
|
+
};
|
|
192
|
+
})(Firebase || (Firebase = {}));
|
|
@@ -11,6 +11,7 @@ const mysql = require("./mysql");
|
|
|
11
11
|
const arangodb = require("./arangodb");
|
|
12
12
|
const rest = require("./rest");
|
|
13
13
|
const googlesheets = require("./googlesheets");
|
|
14
|
+
const firebase = require("./firebase");
|
|
14
15
|
const { SourceNames } = require("../definitions/datasource");
|
|
15
16
|
const environment = require("../environment");
|
|
16
17
|
const DEFINITIONS = {
|
|
@@ -25,6 +26,7 @@ const DEFINITIONS = {
|
|
|
25
26
|
[SourceNames.MYSQL]: mysql.schema,
|
|
26
27
|
[SourceNames.ARANGODB]: arangodb.schema,
|
|
27
28
|
[SourceNames.REST]: rest.schema,
|
|
29
|
+
[SourceNames.FIREBASE]: firebase.schema,
|
|
28
30
|
};
|
|
29
31
|
const INTEGRATIONS = {
|
|
30
32
|
[SourceNames.POSTGRES]: postgres.integration,
|
|
@@ -38,6 +40,7 @@ const INTEGRATIONS = {
|
|
|
38
40
|
[SourceNames.MYSQL]: mysql.integration,
|
|
39
41
|
[SourceNames.ARANGODB]: arangodb.integration,
|
|
40
42
|
[SourceNames.REST]: rest.integration,
|
|
43
|
+
[SourceNames.FIREBASE]: firebase.integration,
|
|
41
44
|
};
|
|
42
45
|
// optionally add oracle integration if the oracle binary can be installed
|
|
43
46
|
if (!(process.arch === "arm64" && process.platform === "darwin")) {
|
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const datasource_1 = require("../definitions/datasource");
|
|
13
|
+
const lodash_1 = require("lodash");
|
|
13
14
|
const BodyTypes = {
|
|
14
15
|
NONE: "none",
|
|
15
16
|
FORM_DATA: "form",
|
|
@@ -148,7 +149,7 @@ var RestModule;
|
|
|
148
149
|
// Check if a pagination cursor exists in the response
|
|
149
150
|
let nextCursor = null;
|
|
150
151
|
if (pagination === null || pagination === void 0 ? void 0 : pagination.responseParam) {
|
|
151
|
-
nextCursor = data
|
|
152
|
+
nextCursor = lodash_1.get(data, pagination.responseParam);
|
|
152
153
|
}
|
|
153
154
|
return {
|
|
154
155
|
data,
|
|
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
const {
|
|
11
|
+
const { getAppIdFromCtx, setCookie, getCookie, clearCookie, } = require("@budibase/backend-core/utils");
|
|
12
12
|
const { Cookies } = require("@budibase/backend-core/constants");
|
|
13
13
|
const { getRole } = require("@budibase/backend-core/roles");
|
|
14
14
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles");
|
|
@@ -21,7 +21,7 @@ const { isWebhookEndpoint } = require("./utils");
|
|
|
21
21
|
const { doInAppContext } = require("@budibase/backend-core/context");
|
|
22
22
|
module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
23
|
// try to get the appID from the request
|
|
24
|
-
let requestAppId =
|
|
24
|
+
let requestAppId = yield getAppIdFromCtx(ctx);
|
|
25
25
|
// get app cookie if it exists
|
|
26
26
|
let appCookie = null;
|
|
27
27
|
try {
|
|
@@ -70,19 +70,20 @@ module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
70
70
|
return next();
|
|
71
71
|
}
|
|
72
72
|
return doInAppContext(appId, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
|
-
let
|
|
73
|
+
let skipCookie = false;
|
|
74
74
|
// if the user not in the right tenant then make sure they have no permissions
|
|
75
75
|
// need to judge this only based on the request app ID,
|
|
76
76
|
if (env.MULTI_TENANCY &&
|
|
77
77
|
ctx.user &&
|
|
78
78
|
requestAppId &&
|
|
79
|
-
!isUserInAppTenant(requestAppId)) {
|
|
79
|
+
!isUserInAppTenant(requestAppId, ctx.user)) {
|
|
80
80
|
// don't error, simply remove the users rights (they are a public user)
|
|
81
81
|
delete ctx.user.builder;
|
|
82
82
|
delete ctx.user.admin;
|
|
83
83
|
delete ctx.user.roles;
|
|
84
|
+
ctx.isAuthenticated = false;
|
|
84
85
|
roleId = BUILTIN_ROLE_IDS.PUBLIC;
|
|
85
|
-
|
|
86
|
+
skipCookie = true;
|
|
86
87
|
}
|
|
87
88
|
ctx.appId = appId;
|
|
88
89
|
if (roleId) {
|
|
@@ -96,7 +97,7 @@ module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
96
97
|
if ((requestAppId !== appId ||
|
|
97
98
|
appCookie == null ||
|
|
98
99
|
appCookie.appId !== requestAppId) &&
|
|
99
|
-
!
|
|
100
|
+
!skipCookie) {
|
|
100
101
|
setCookie(ctx, { appId }, Cookies.CurrentApp);
|
|
101
102
|
}
|
|
102
103
|
return next();
|
|
@@ -9,10 +9,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
const { Headers } = require("@budibase/backend-core/constants");
|
|
12
|
-
const {
|
|
12
|
+
const { getAppIdFromCtx } = require("@budibase/backend-core/utils");
|
|
13
13
|
module.exports = function ({ requiresAppId } = {}) {
|
|
14
14
|
return (ctx, next) => __awaiter(this, void 0, void 0, function* () {
|
|
15
|
-
const appId =
|
|
15
|
+
const appId = yield getAppIdFromCtx(ctx);
|
|
16
16
|
if (requiresAppId && !appId) {
|
|
17
17
|
ctx.throw(400, `Invalid app ID provided, please check the ${Headers.APP_ID} header.`);
|
|
18
18
|
}
|
package/dist/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.97",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -21,10 +21,7 @@
|
|
|
21
21
|
"dev:stack:down": "node scripts/dev/manage.js down",
|
|
22
22
|
"dev:stack:nuke": "node scripts/dev/manage.js nuke",
|
|
23
23
|
"dev:builder": "yarn run dev:stack:up && nodemon",
|
|
24
|
-
"format": "prettier --config ../../.prettierrc.json 'src/**/*.ts' --write",
|
|
25
24
|
"specs": "node specs/generate.js && openapi-typescript specs/openapi.yaml --output src/definitions/openapi.ts",
|
|
26
|
-
"lint": "eslint --fix src/",
|
|
27
|
-
"lint:fix": "yarn run format && yarn run lint",
|
|
28
25
|
"initialise": "node scripts/initialise.js",
|
|
29
26
|
"env:multi:enable": "node scripts/multiTenancy.js enable",
|
|
30
27
|
"env:multi:disable": "node scripts/multiTenancy.js disable",
|
|
@@ -71,12 +68,13 @@
|
|
|
71
68
|
"license": "GPL-3.0",
|
|
72
69
|
"dependencies": {
|
|
73
70
|
"@apidevtools/swagger-parser": "^10.0.3",
|
|
74
|
-
"@budibase/backend-core": "^1.0.
|
|
75
|
-
"@budibase/client": "^1.0.
|
|
76
|
-
"@budibase/string-templates": "^1.0.
|
|
71
|
+
"@budibase/backend-core": "^1.0.97",
|
|
72
|
+
"@budibase/client": "^1.0.97",
|
|
73
|
+
"@budibase/string-templates": "^1.0.97",
|
|
77
74
|
"@bull-board/api": "^3.7.0",
|
|
78
75
|
"@bull-board/koa": "^3.7.0",
|
|
79
76
|
"@elastic/elasticsearch": "7.10.0",
|
|
77
|
+
"@google-cloud/firestore": "^5.0.2",
|
|
80
78
|
"@koa/router": "8.0.0",
|
|
81
79
|
"@sendgrid/mail": "7.1.1",
|
|
82
80
|
"@sentry/node": "^6.0.0",
|
|
@@ -148,15 +146,16 @@
|
|
|
148
146
|
"@types/jest": "^26.0.23",
|
|
149
147
|
"@types/koa": "^2.13.3",
|
|
150
148
|
"@types/koa-router": "^7.4.2",
|
|
149
|
+
"@types/lodash": "4.14.180",
|
|
151
150
|
"@types/node": "^15.12.4",
|
|
152
151
|
"@types/oracledb": "^5.2.1",
|
|
153
152
|
"@types/redis": "^4.0.11",
|
|
154
|
-
"@typescript-eslint/parser": "4.28.0",
|
|
155
153
|
"apidoc": "^0.50.2",
|
|
156
154
|
"babel-jest": "^27.0.2",
|
|
157
155
|
"copyfiles": "^2.4.1",
|
|
158
156
|
"docker-compose": "^0.23.6",
|
|
159
157
|
"eslint": "^6.8.0",
|
|
158
|
+
"is-wsl": "^2.2.0",
|
|
160
159
|
"jest": "^27.0.5",
|
|
161
160
|
"jest-openapi": "^0.14.2",
|
|
162
161
|
"nodemon": "^2.0.4",
|
|
@@ -75,7 +75,7 @@ class TestConfiguration {
|
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
// check if already in a context
|
|
78
|
-
if (context.getAppId() == null) {
|
|
78
|
+
if (context.getAppId() == null && this.appId !== null) {
|
|
79
79
|
return context.doInAppContext(this.appId, () => __awaiter(this, void 0, void 0, function* () {
|
|
80
80
|
return run();
|
|
81
81
|
}));
|