@budibase/server 2.7.18 → 2.7.20-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.d9b46807.css → index.2e9069f3.css} +1 -1
- package/builder/assets/{index.8b4ed657.js → index.6b48215f.js} +370 -370
- package/builder/index.html +6 -6
- package/dist/automation.js +405 -179
- package/dist/automation.js.map +3 -3
- package/dist/index.js +516 -282
- package/dist/index.js.map +3 -3
- package/dist/query.js +301 -141
- package/dist/query.js.map +3 -3
- package/package.json +11 -11
- package/src/api/controllers/backup.ts +22 -8
- package/src/api/controllers/datasource.ts +41 -24
- package/src/api/controllers/role.ts +5 -5
- package/src/api/controllers/routing.ts +3 -3
- package/src/api/routes/backup.ts +1 -1
- package/src/api/routes/tests/backup.spec.ts +18 -2
- package/src/automations/steps/sendSmtpEmail.ts +55 -4
- package/src/automations/tests/sendSmtpEmail.spec.ts +74 -0
- package/src/events/docUpdates/syncUsers.ts +4 -0
- package/src/integrations/googlesheets.ts +35 -18
- package/src/integrations/mongodb.ts +4 -2
- package/src/integrations/postgres.ts +2 -1
- package/src/middleware/currentapp.ts +1 -1
- package/src/sdk/app/backups/exports.ts +33 -5
- package/src/sdk/app/backups/imports.ts +21 -1
- package/src/sdk/app/datasources/datasources.ts +1 -0
- package/src/utilities/workerRequests.ts +20 -9
- package/src/automations/tests/sendSmtpEmail.spec.js +0 -71
package/dist/index.js
CHANGED
|
@@ -838,6 +838,7 @@ var init_automation2 = __esm({
|
|
|
838
838
|
AutomationIOType2["NUMBER"] = "number";
|
|
839
839
|
AutomationIOType2["ARRAY"] = "array";
|
|
840
840
|
AutomationIOType2["JSON"] = "json";
|
|
841
|
+
AutomationIOType2["DATE"] = "date";
|
|
841
842
|
return AutomationIOType2;
|
|
842
843
|
})(AutomationIOType || {});
|
|
843
844
|
AutomationCustomIOType = /* @__PURE__ */ ((AutomationCustomIOType2) => {
|
|
@@ -5400,11 +5401,11 @@ function makeCacheItem(doc2, lastWrite = null) {
|
|
|
5400
5401
|
return { doc: doc2, lastWrite: lastWrite || Date.now() };
|
|
5401
5402
|
}
|
|
5402
5403
|
async function put(db2, doc2, writeRateMs = DEFAULT_WRITE_RATE_MS) {
|
|
5403
|
-
const
|
|
5404
|
+
const cache3 = await getCache();
|
|
5404
5405
|
const key = doc2._id;
|
|
5405
5406
|
let cacheItem;
|
|
5406
5407
|
if (key) {
|
|
5407
|
-
cacheItem = await
|
|
5408
|
+
cacheItem = await cache3.get(makeCacheKey(db2, key));
|
|
5408
5409
|
}
|
|
5409
5410
|
const updateDb = !cacheItem || cacheItem.lastWrite < Date.now() - writeRateMs;
|
|
5410
5411
|
let output = doc2;
|
|
@@ -5442,30 +5443,30 @@ async function put(db2, doc2, writeRateMs = DEFAULT_WRITE_RATE_MS) {
|
|
|
5442
5443
|
}
|
|
5443
5444
|
cacheItem = makeCacheItem(output, updateDb ? null : cacheItem == null ? void 0 : cacheItem.lastWrite);
|
|
5444
5445
|
if (output._id) {
|
|
5445
|
-
await
|
|
5446
|
+
await cache3.store(makeCacheKey(db2, output._id), cacheItem);
|
|
5446
5447
|
}
|
|
5447
5448
|
return { ok: true, id: output._id, rev: output._rev };
|
|
5448
5449
|
}
|
|
5449
5450
|
async function get2(db2, id) {
|
|
5450
|
-
const
|
|
5451
|
+
const cache3 = await getCache();
|
|
5451
5452
|
const cacheKey = makeCacheKey(db2, id);
|
|
5452
|
-
let cacheItem = await
|
|
5453
|
+
let cacheItem = await cache3.get(cacheKey);
|
|
5453
5454
|
if (!cacheItem) {
|
|
5454
5455
|
const doc2 = await db2.get(id);
|
|
5455
5456
|
cacheItem = makeCacheItem(doc2);
|
|
5456
|
-
await
|
|
5457
|
+
await cache3.store(cacheKey, cacheItem);
|
|
5457
5458
|
}
|
|
5458
5459
|
return cacheItem.doc;
|
|
5459
5460
|
}
|
|
5460
5461
|
async function remove(db2, docOrId, rev2) {
|
|
5461
|
-
const
|
|
5462
|
+
const cache3 = await getCache();
|
|
5462
5463
|
if (!docOrId) {
|
|
5463
5464
|
throw new Error("No ID/Rev provided.");
|
|
5464
5465
|
}
|
|
5465
5466
|
const id = typeof docOrId === "string" ? docOrId : docOrId._id;
|
|
5466
5467
|
rev2 = typeof docOrId === "string" ? rev2 : docOrId._rev;
|
|
5467
5468
|
try {
|
|
5468
|
-
await
|
|
5469
|
+
await cache3.delete(makeCacheKey(db2, id));
|
|
5469
5470
|
} finally {
|
|
5470
5471
|
await db2.remove(id, rev2);
|
|
5471
5472
|
}
|
|
@@ -9307,7 +9308,7 @@ function lowerBuiltinRoleID(roleId1, roleId2) {
|
|
|
9307
9308
|
}
|
|
9308
9309
|
return builtinRoleToNumber(roleId1) > builtinRoleToNumber(roleId2) ? roleId2 : roleId1;
|
|
9309
9310
|
}
|
|
9310
|
-
async function getRole(roleId) {
|
|
9311
|
+
async function getRole(roleId, opts) {
|
|
9311
9312
|
if (!roleId) {
|
|
9312
9313
|
return void 0;
|
|
9313
9314
|
}
|
|
@@ -9323,6 +9324,9 @@ async function getRole(roleId) {
|
|
|
9323
9324
|
role = Object.assign(role, dbRole);
|
|
9324
9325
|
role._id = getExternalRoleID(role._id);
|
|
9325
9326
|
} catch (err) {
|
|
9327
|
+
if (!isBuiltin(roleId) && (opts == null ? void 0 : opts.defaultPublic)) {
|
|
9328
|
+
return cloneDeep2(BUILTIN_ROLES.PUBLIC);
|
|
9329
|
+
}
|
|
9326
9330
|
if (Object.keys(role).length === 0) {
|
|
9327
9331
|
throw err;
|
|
9328
9332
|
}
|
|
@@ -10063,8 +10067,8 @@ async function preAuth(passport2, ctx, next) {
|
|
|
10063
10067
|
callbackUrl,
|
|
10064
10068
|
ssoSaveUserNoOp
|
|
10065
10069
|
);
|
|
10066
|
-
if (!ctx.query.appId
|
|
10067
|
-
ctx.throw(400, "appId
|
|
10070
|
+
if (!ctx.query.appId) {
|
|
10071
|
+
ctx.throw(400, "appId query param not present.");
|
|
10068
10072
|
}
|
|
10069
10073
|
return passport2.authenticate(strategy, {
|
|
10070
10074
|
scope: ["profile", "email", "https://www.googleapis.com/auth/spreadsheets"],
|
|
@@ -10084,7 +10088,7 @@ async function postAuth(passport2, ctx, next) {
|
|
|
10084
10088
|
clientSecret: config.clientSecret,
|
|
10085
10089
|
callbackURL: callbackUrl
|
|
10086
10090
|
},
|
|
10087
|
-
(accessToken, refreshToken,
|
|
10091
|
+
(accessToken, refreshToken, _profile, done) => {
|
|
10088
10092
|
clearCookie(ctx, "budibase:datasourceauth" /* DatasourceAuth */);
|
|
10089
10093
|
done(null, { accessToken, refreshToken });
|
|
10090
10094
|
}
|
|
@@ -10092,22 +10096,14 @@ async function postAuth(passport2, ctx, next) {
|
|
|
10092
10096
|
{ successRedirect: "/", failureRedirect: "/error" },
|
|
10093
10097
|
async (err, tokens) => {
|
|
10094
10098
|
const baseUrl = `/builder/app/${authStateCookie.appId}/data`;
|
|
10095
|
-
|
|
10096
|
-
|
|
10097
|
-
|
|
10098
|
-
|
|
10099
|
-
|
|
10100
|
-
if (err2.status === 404) {
|
|
10101
|
-
ctx.redirect(baseUrl);
|
|
10102
|
-
}
|
|
10103
|
-
}
|
|
10104
|
-
if (!datasource2.config) {
|
|
10105
|
-
datasource2.config = {};
|
|
10099
|
+
const id = newid();
|
|
10100
|
+
await store(
|
|
10101
|
+
`datasource:creation:${authStateCookie.appId}:google:${id}`,
|
|
10102
|
+
{
|
|
10103
|
+
tokens
|
|
10106
10104
|
}
|
|
10107
|
-
|
|
10108
|
-
|
|
10109
|
-
ctx.redirect(`${baseUrl}/datasource/${authStateCookie.datasourceId}`);
|
|
10110
|
-
});
|
|
10105
|
+
);
|
|
10106
|
+
ctx.redirect(`${baseUrl}/new?continue_google_setup=${id}`);
|
|
10111
10107
|
}
|
|
10112
10108
|
)(ctx, next);
|
|
10113
10109
|
}
|
|
@@ -10116,9 +10112,9 @@ var init_google2 = __esm({
|
|
|
10116
10112
|
"../backend-core/src/middleware/passport/datasource/google.ts"() {
|
|
10117
10113
|
init_google();
|
|
10118
10114
|
init_constants2();
|
|
10119
|
-
init_utils5();
|
|
10120
|
-
init_db5();
|
|
10121
10115
|
init_configs3();
|
|
10116
|
+
init_cache();
|
|
10117
|
+
init_utils5();
|
|
10122
10118
|
init_sso2();
|
|
10123
10119
|
GoogleStrategy2 = require("passport-google-oauth").OAuth2Strategy;
|
|
10124
10120
|
}
|
|
@@ -10168,7 +10164,9 @@ var encryption_exports = {};
|
|
|
10168
10164
|
__export(encryption_exports, {
|
|
10169
10165
|
SecretOption: () => SecretOption,
|
|
10170
10166
|
decrypt: () => decrypt,
|
|
10167
|
+
decryptFile: () => decryptFile,
|
|
10171
10168
|
encrypt: () => encrypt,
|
|
10169
|
+
encryptFile: () => encryptFile,
|
|
10172
10170
|
getSecret: () => getSecret
|
|
10173
10171
|
});
|
|
10174
10172
|
function getSecret(secretOption) {
|
|
@@ -10189,11 +10187,11 @@ function getSecret(secretOption) {
|
|
|
10189
10187
|
}
|
|
10190
10188
|
return secret;
|
|
10191
10189
|
}
|
|
10192
|
-
function stretchString(
|
|
10193
|
-
return import_crypto.default.pbkdf2Sync(
|
|
10190
|
+
function stretchString(secret, salt) {
|
|
10191
|
+
return import_crypto.default.pbkdf2Sync(secret, salt, ITERATIONS, STRETCH_LENGTH, "sha512");
|
|
10194
10192
|
}
|
|
10195
10193
|
function encrypt(input, secretOption = "api" /* API */) {
|
|
10196
|
-
const salt = import_crypto.default.randomBytes(
|
|
10194
|
+
const salt = import_crypto.default.randomBytes(SALT_LENGTH);
|
|
10197
10195
|
const stretched = stretchString(getSecret(secretOption), salt);
|
|
10198
10196
|
const cipher = import_crypto.default.createCipheriv(ALGO, stretched, salt);
|
|
10199
10197
|
const base = cipher.update(input);
|
|
@@ -10210,16 +10208,101 @@ function decrypt(input, secretOption = "api" /* API */) {
|
|
|
10210
10208
|
const final = decipher.final();
|
|
10211
10209
|
return Buffer.concat([base, final]).toString();
|
|
10212
10210
|
}
|
|
10213
|
-
|
|
10211
|
+
async function encryptFile({ dir, filename }, secret) {
|
|
10212
|
+
const outputFileName = `${filename}.enc`;
|
|
10213
|
+
const filePath = (0, import_path.join)(dir, filename);
|
|
10214
|
+
const inputFile = import_fs2.default.createReadStream(filePath);
|
|
10215
|
+
const outputFile = import_fs2.default.createWriteStream((0, import_path.join)(dir, outputFileName));
|
|
10216
|
+
const salt = import_crypto.default.randomBytes(SALT_LENGTH);
|
|
10217
|
+
const iv = import_crypto.default.randomBytes(IV_LENGTH);
|
|
10218
|
+
const stretched = stretchString(secret, salt);
|
|
10219
|
+
const cipher = import_crypto.default.createCipheriv(ALGO, stretched, iv);
|
|
10220
|
+
outputFile.write(salt);
|
|
10221
|
+
outputFile.write(iv);
|
|
10222
|
+
inputFile.pipe(import_zlib.default.createGzip()).pipe(cipher).pipe(outputFile);
|
|
10223
|
+
return new Promise((r) => {
|
|
10224
|
+
outputFile.on("finish", () => {
|
|
10225
|
+
r({
|
|
10226
|
+
filename: outputFileName,
|
|
10227
|
+
dir
|
|
10228
|
+
});
|
|
10229
|
+
});
|
|
10230
|
+
});
|
|
10231
|
+
}
|
|
10232
|
+
async function getSaltAndIV(path5) {
|
|
10233
|
+
const fileStream = import_fs2.default.createReadStream(path5);
|
|
10234
|
+
const salt = await readBytes(fileStream, SALT_LENGTH);
|
|
10235
|
+
const iv = await readBytes(fileStream, IV_LENGTH);
|
|
10236
|
+
fileStream.close();
|
|
10237
|
+
return { salt, iv };
|
|
10238
|
+
}
|
|
10239
|
+
async function decryptFile(inputPath, outputPath, secret) {
|
|
10240
|
+
const { salt, iv } = await getSaltAndIV(inputPath);
|
|
10241
|
+
const inputFile = import_fs2.default.createReadStream(inputPath, {
|
|
10242
|
+
start: SALT_LENGTH + IV_LENGTH
|
|
10243
|
+
});
|
|
10244
|
+
const outputFile = import_fs2.default.createWriteStream(outputPath);
|
|
10245
|
+
const stretched = stretchString(secret, salt);
|
|
10246
|
+
const decipher = import_crypto.default.createDecipheriv(ALGO, stretched, iv);
|
|
10247
|
+
const unzip = import_zlib.default.createGunzip();
|
|
10248
|
+
inputFile.pipe(decipher).pipe(unzip).pipe(outputFile);
|
|
10249
|
+
return new Promise((res, rej) => {
|
|
10250
|
+
outputFile.on("finish", () => {
|
|
10251
|
+
outputFile.close();
|
|
10252
|
+
res();
|
|
10253
|
+
});
|
|
10254
|
+
inputFile.on("error", (e) => {
|
|
10255
|
+
outputFile.close();
|
|
10256
|
+
rej(e);
|
|
10257
|
+
});
|
|
10258
|
+
decipher.on("error", (e) => {
|
|
10259
|
+
outputFile.close();
|
|
10260
|
+
rej(e);
|
|
10261
|
+
});
|
|
10262
|
+
unzip.on("error", (e) => {
|
|
10263
|
+
outputFile.close();
|
|
10264
|
+
rej(e);
|
|
10265
|
+
});
|
|
10266
|
+
outputFile.on("error", (e) => {
|
|
10267
|
+
outputFile.close();
|
|
10268
|
+
rej(e);
|
|
10269
|
+
});
|
|
10270
|
+
});
|
|
10271
|
+
}
|
|
10272
|
+
function readBytes(stream3, length) {
|
|
10273
|
+
return new Promise((resolve3, reject) => {
|
|
10274
|
+
let bytesRead = 0;
|
|
10275
|
+
const data2 = [];
|
|
10276
|
+
stream3.on("readable", () => {
|
|
10277
|
+
let chunk;
|
|
10278
|
+
while ((chunk = stream3.read(length - bytesRead)) !== null) {
|
|
10279
|
+
data2.push(chunk);
|
|
10280
|
+
bytesRead += chunk.length;
|
|
10281
|
+
}
|
|
10282
|
+
resolve3(Buffer.concat(data2));
|
|
10283
|
+
});
|
|
10284
|
+
stream3.on("end", () => {
|
|
10285
|
+
reject(new Error("Insufficient data in the stream."));
|
|
10286
|
+
});
|
|
10287
|
+
stream3.on("error", (error2) => {
|
|
10288
|
+
reject(error2);
|
|
10289
|
+
});
|
|
10290
|
+
});
|
|
10291
|
+
}
|
|
10292
|
+
var import_crypto, import_fs2, import_zlib, import_path, ALGO, SEPARATOR3, ITERATIONS, STRETCH_LENGTH, SALT_LENGTH, IV_LENGTH, SecretOption;
|
|
10214
10293
|
var init_encryption = __esm({
|
|
10215
10294
|
"../backend-core/src/security/encryption.ts"() {
|
|
10216
10295
|
import_crypto = __toESM(require("crypto"));
|
|
10296
|
+
import_fs2 = __toESM(require("fs"));
|
|
10297
|
+
import_zlib = __toESM(require("zlib"));
|
|
10217
10298
|
init_environment2();
|
|
10299
|
+
import_path = require("path");
|
|
10218
10300
|
ALGO = "aes-256-ctr";
|
|
10219
10301
|
SEPARATOR3 = "-";
|
|
10220
10302
|
ITERATIONS = 1e4;
|
|
10221
|
-
RANDOM_BYTES = 16;
|
|
10222
10303
|
STRETCH_LENGTH = 32;
|
|
10304
|
+
SALT_LENGTH = 16;
|
|
10305
|
+
IV_LENGTH = 16;
|
|
10223
10306
|
SecretOption = /* @__PURE__ */ ((SecretOption2) => {
|
|
10224
10307
|
SecretOption2["API"] = "api";
|
|
10225
10308
|
SecretOption2["ENCRYPTION"] = "encryption";
|
|
@@ -11130,12 +11213,12 @@ var init_plugin4 = __esm({
|
|
|
11130
11213
|
function budibaseTempDir() {
|
|
11131
11214
|
return bbTmp;
|
|
11132
11215
|
}
|
|
11133
|
-
var
|
|
11216
|
+
var import_path2, import_os, import_fs3, ObjectStoreBuckets, bbTmp;
|
|
11134
11217
|
var init_utils8 = __esm({
|
|
11135
11218
|
"../backend-core/src/objectStore/utils.ts"() {
|
|
11136
|
-
|
|
11219
|
+
import_path2 = require("path");
|
|
11137
11220
|
import_os = require("os");
|
|
11138
|
-
|
|
11221
|
+
import_fs3 = __toESM(require("fs"));
|
|
11139
11222
|
init_environment2();
|
|
11140
11223
|
ObjectStoreBuckets = {
|
|
11141
11224
|
BACKUPS: environment_default.BACKUPS_BUCKET_NAME,
|
|
@@ -11144,9 +11227,9 @@ var init_utils8 = __esm({
|
|
|
11144
11227
|
GLOBAL: environment_default.GLOBAL_BUCKET_NAME,
|
|
11145
11228
|
PLUGINS: environment_default.PLUGIN_BUCKET_NAME
|
|
11146
11229
|
};
|
|
11147
|
-
bbTmp = (0,
|
|
11148
|
-
if (!
|
|
11149
|
-
|
|
11230
|
+
bbTmp = (0, import_path2.join)((0, import_os.tmpdir)(), ".budibase");
|
|
11231
|
+
if (!import_fs3.default.existsSync(bbTmp)) {
|
|
11232
|
+
import_fs3.default.mkdirSync(bbTmp);
|
|
11150
11233
|
}
|
|
11151
11234
|
}
|
|
11152
11235
|
});
|
|
@@ -11158,17 +11241,17 @@ function sanitizeKey(input) {
|
|
|
11158
11241
|
function sanitizeBucket(input) {
|
|
11159
11242
|
return input.replace(new RegExp(APP_DEV_PREFIX, "g"), APP_PREFIX);
|
|
11160
11243
|
}
|
|
11161
|
-
var import_aws_sdk, import_stream, import_node_fetch6, import_tar_fs,
|
|
11244
|
+
var import_aws_sdk, import_stream, import_node_fetch6, import_tar_fs, import_zlib2, import_util, import_path3, import_fs4, import_uuid3, sanitize, streamPipeline, STATE, CONTENT_TYPE_MAP, STRING_CONTENT_TYPES, ObjectStore, makeSureBucketExists, upload, streamUpload, retrieve, listAllObjects, getPresignedUrl, retrieveToTmp, retrieveDirectory, deleteFile, deleteFiles, deleteFolder, uploadDirectory, downloadTarballDirect, downloadTarball;
|
|
11162
11245
|
var init_objectStore = __esm({
|
|
11163
11246
|
"../backend-core/src/objectStore/objectStore.ts"() {
|
|
11164
11247
|
import_aws_sdk = __toESM(require("aws-sdk"));
|
|
11165
11248
|
import_stream = __toESM(require("stream"));
|
|
11166
11249
|
import_node_fetch6 = __toESM(require("node-fetch"));
|
|
11167
11250
|
import_tar_fs = __toESM(require("tar-fs"));
|
|
11168
|
-
|
|
11251
|
+
import_zlib2 = __toESM(require("zlib"));
|
|
11169
11252
|
import_util = require("util");
|
|
11170
|
-
|
|
11171
|
-
|
|
11253
|
+
import_path3 = require("path");
|
|
11254
|
+
import_fs4 = __toESM(require("fs"));
|
|
11172
11255
|
init_environment2();
|
|
11173
11256
|
init_utils8();
|
|
11174
11257
|
import_uuid3 = require("uuid");
|
|
@@ -11247,7 +11330,7 @@ var init_objectStore = __esm({
|
|
|
11247
11330
|
metadata: metadata2
|
|
11248
11331
|
}) => {
|
|
11249
11332
|
const extension = filename.split(".").pop();
|
|
11250
|
-
const fileBytes =
|
|
11333
|
+
const fileBytes = import_fs4.default.readFileSync(path5);
|
|
11251
11334
|
const objectStore = ObjectStore(bucketName);
|
|
11252
11335
|
await makeSureBucketExists(objectStore, bucketName);
|
|
11253
11336
|
let contentType = type;
|
|
@@ -11349,13 +11432,13 @@ var init_objectStore = __esm({
|
|
|
11349
11432
|
bucketName = sanitizeBucket(bucketName);
|
|
11350
11433
|
filepath = sanitizeKey(filepath);
|
|
11351
11434
|
const data2 = await retrieve(bucketName, filepath);
|
|
11352
|
-
const outputPath = (0,
|
|
11353
|
-
|
|
11435
|
+
const outputPath = (0, import_path3.join)(budibaseTempDir(), (0, import_uuid3.v4)());
|
|
11436
|
+
import_fs4.default.writeFileSync(outputPath, data2);
|
|
11354
11437
|
return outputPath;
|
|
11355
11438
|
};
|
|
11356
11439
|
retrieveDirectory = async (bucketName, path5) => {
|
|
11357
|
-
let writePath = (0,
|
|
11358
|
-
|
|
11440
|
+
let writePath = (0, import_path3.join)(budibaseTempDir(), (0, import_uuid3.v4)());
|
|
11441
|
+
import_fs4.default.mkdirSync(writePath);
|
|
11359
11442
|
const objects = await listAllObjects(bucketName, path5);
|
|
11360
11443
|
let fullObjects = await Promise.all(
|
|
11361
11444
|
objects.map((obj) => retrieve(bucketName, obj.Key))
|
|
@@ -11367,9 +11450,9 @@ var init_objectStore = __esm({
|
|
|
11367
11450
|
const possiblePath = filename.split("/");
|
|
11368
11451
|
if (possiblePath.length > 1) {
|
|
11369
11452
|
const dirs = possiblePath.slice(0, possiblePath.length - 1);
|
|
11370
|
-
|
|
11453
|
+
import_fs4.default.mkdirSync((0, import_path3.join)(writePath, ...dirs), { recursive: true });
|
|
11371
11454
|
}
|
|
11372
|
-
|
|
11455
|
+
import_fs4.default.writeFileSync((0, import_path3.join)(writePath, ...possiblePath), data2);
|
|
11373
11456
|
}
|
|
11374
11457
|
return writePath;
|
|
11375
11458
|
};
|
|
@@ -11423,14 +11506,14 @@ var init_objectStore = __esm({
|
|
|
11423
11506
|
uploadDirectory = async (bucketName, localPath, bucketPath2) => {
|
|
11424
11507
|
bucketName = sanitizeBucket(bucketName);
|
|
11425
11508
|
let uploads = [];
|
|
11426
|
-
const files2 =
|
|
11509
|
+
const files2 = import_fs4.default.readdirSync(localPath, { withFileTypes: true });
|
|
11427
11510
|
for (let file of files2) {
|
|
11428
|
-
const path5 = sanitizeKey((0,
|
|
11429
|
-
const local = (0,
|
|
11511
|
+
const path5 = sanitizeKey((0, import_path3.join)(bucketPath2, file.name));
|
|
11512
|
+
const local = (0, import_path3.join)(localPath, file.name);
|
|
11430
11513
|
if (file.isDirectory()) {
|
|
11431
11514
|
uploads.push(uploadDirectory(bucketName, local, path5));
|
|
11432
11515
|
} else {
|
|
11433
|
-
uploads.push(streamUpload(bucketName, path5,
|
|
11516
|
+
uploads.push(streamUpload(bucketName, path5, import_fs4.default.createReadStream(local)));
|
|
11434
11517
|
}
|
|
11435
11518
|
}
|
|
11436
11519
|
await Promise.all(uploads);
|
|
@@ -11442,7 +11525,7 @@ var init_objectStore = __esm({
|
|
|
11442
11525
|
if (!response2.ok) {
|
|
11443
11526
|
throw new Error(`unexpected response ${response2.statusText}`);
|
|
11444
11527
|
}
|
|
11445
|
-
await streamPipeline(response2.body,
|
|
11528
|
+
await streamPipeline(response2.body, import_zlib2.default.createUnzip(), import_tar_fs.default.extract(path5));
|
|
11446
11529
|
};
|
|
11447
11530
|
downloadTarball = async (url, bucketName, path5) => {
|
|
11448
11531
|
bucketName = sanitizeBucket(bucketName);
|
|
@@ -11451,8 +11534,8 @@ var init_objectStore = __esm({
|
|
|
11451
11534
|
if (!response2.ok) {
|
|
11452
11535
|
throw new Error(`unexpected response ${response2.statusText}`);
|
|
11453
11536
|
}
|
|
11454
|
-
const tmpPath = (0,
|
|
11455
|
-
await streamPipeline(response2.body,
|
|
11537
|
+
const tmpPath = (0, import_path3.join)(budibaseTempDir(), path5);
|
|
11538
|
+
await streamPipeline(response2.body, import_zlib2.default.createUnzip(), import_tar_fs.default.extract(tmpPath));
|
|
11456
11539
|
if (!environment_default.isTest() && environment_default.SELF_HOSTED) {
|
|
11457
11540
|
await uploadDirectory(bucketName, tmpPath, path5);
|
|
11458
11541
|
}
|
|
@@ -12034,16 +12117,16 @@ var init_constants4 = __esm({
|
|
|
12034
12117
|
});
|
|
12035
12118
|
|
|
12036
12119
|
// src/utilities/centralPath.ts
|
|
12037
|
-
function
|
|
12038
|
-
return
|
|
12120
|
+
function join4(...args) {
|
|
12121
|
+
return import_path4.default.join(...args);
|
|
12039
12122
|
}
|
|
12040
12123
|
function resolve(...args) {
|
|
12041
|
-
return
|
|
12124
|
+
return import_path4.default.resolve(...args);
|
|
12042
12125
|
}
|
|
12043
|
-
var
|
|
12126
|
+
var import_path4;
|
|
12044
12127
|
var init_centralPath = __esm({
|
|
12045
12128
|
"src/utilities/centralPath.ts"() {
|
|
12046
|
-
|
|
12129
|
+
import_path4 = __toESM(require("path"));
|
|
12047
12130
|
}
|
|
12048
12131
|
});
|
|
12049
12132
|
|
|
@@ -12065,14 +12148,14 @@ function parseIntSafe(number) {
|
|
|
12065
12148
|
return parseInt(number);
|
|
12066
12149
|
}
|
|
12067
12150
|
}
|
|
12068
|
-
var
|
|
12151
|
+
var import_path5, LOADED2, environment2, environment_default2;
|
|
12069
12152
|
var init_environment3 = __esm({
|
|
12070
12153
|
"src/environment.ts"() {
|
|
12071
|
-
|
|
12154
|
+
import_path5 = require("path");
|
|
12072
12155
|
LOADED2 = false;
|
|
12073
12156
|
if (!LOADED2 && isDev2() && !isTest2()) {
|
|
12074
12157
|
require("dotenv").config({
|
|
12075
|
-
path: (0,
|
|
12158
|
+
path: (0, import_path5.join)(__dirname, "..", ".env")
|
|
12076
12159
|
});
|
|
12077
12160
|
LOADED2 = true;
|
|
12078
12161
|
}
|
|
@@ -12156,22 +12239,22 @@ var init_environment3 = __esm({
|
|
|
12156
12239
|
});
|
|
12157
12240
|
|
|
12158
12241
|
// src/utilities/fileSystem/filesystem.ts
|
|
12159
|
-
var
|
|
12242
|
+
var import_fs5, import_path6, import_tar, uuid2, TOP_LEVEL_PATH, init9, checkDevelopmentEnvironment, loadHandlebarsFile, apiFileReturn, streamFile, createTempFolder, extractTarball, findFileRec, deleteFolderFileSystem;
|
|
12160
12243
|
var init_filesystem = __esm({
|
|
12161
12244
|
"src/utilities/fileSystem/filesystem.ts"() {
|
|
12162
|
-
|
|
12245
|
+
import_fs5 = __toESM(require("fs"));
|
|
12163
12246
|
init_budibaseDir();
|
|
12164
|
-
|
|
12247
|
+
import_path6 = require("path");
|
|
12165
12248
|
init_environment3();
|
|
12166
12249
|
import_tar = __toESM(require("tar"));
|
|
12167
12250
|
init_environment3();
|
|
12168
12251
|
uuid2 = require("uuid/v4");
|
|
12169
|
-
TOP_LEVEL_PATH = environment_default2.TOP_LEVEL_PATH || (0,
|
|
12252
|
+
TOP_LEVEL_PATH = environment_default2.TOP_LEVEL_PATH || (0, import_path6.resolve)((0, import_path6.join)(__dirname, "..", "..", ".."));
|
|
12170
12253
|
init9 = () => {
|
|
12171
12254
|
const tempDir = budibaseTempDir2();
|
|
12172
|
-
if (!
|
|
12255
|
+
if (!import_fs5.default.existsSync(tempDir)) {
|
|
12173
12256
|
try {
|
|
12174
|
-
|
|
12257
|
+
import_fs5.default.mkdirSync(tempDir);
|
|
12175
12258
|
} catch (err) {
|
|
12176
12259
|
if (!err || err.code !== "EEXIST") {
|
|
12177
12260
|
throw err;
|
|
@@ -12183,11 +12266,11 @@ var init_filesystem = __esm({
|
|
|
12183
12266
|
if (!environment_default2.isDev() || environment_default2.isTest()) {
|
|
12184
12267
|
return;
|
|
12185
12268
|
}
|
|
12186
|
-
if (!
|
|
12187
|
-
|
|
12269
|
+
if (!import_fs5.default.existsSync(budibaseTempDir2())) {
|
|
12270
|
+
import_fs5.default.mkdirSync(budibaseTempDir2());
|
|
12188
12271
|
}
|
|
12189
12272
|
let error2;
|
|
12190
|
-
if (!
|
|
12273
|
+
if (!import_fs5.default.existsSync((0, import_path6.join)(process.cwd(), ".env"))) {
|
|
12191
12274
|
error2 = "Must run via yarn once to generate environment.";
|
|
12192
12275
|
}
|
|
12193
12276
|
if (error2) {
|
|
@@ -12196,23 +12279,23 @@ var init_filesystem = __esm({
|
|
|
12196
12279
|
}
|
|
12197
12280
|
};
|
|
12198
12281
|
loadHandlebarsFile = (path5) => {
|
|
12199
|
-
return
|
|
12282
|
+
return import_fs5.default.readFileSync(path5, "utf8");
|
|
12200
12283
|
};
|
|
12201
12284
|
apiFileReturn = (contents) => {
|
|
12202
|
-
const path5 = (0,
|
|
12203
|
-
|
|
12204
|
-
return
|
|
12285
|
+
const path5 = (0, import_path6.join)(budibaseTempDir2(), uuid2());
|
|
12286
|
+
import_fs5.default.writeFileSync(path5, contents);
|
|
12287
|
+
return import_fs5.default.createReadStream(path5);
|
|
12205
12288
|
};
|
|
12206
12289
|
streamFile = (path5) => {
|
|
12207
|
-
return
|
|
12290
|
+
return import_fs5.default.createReadStream(path5);
|
|
12208
12291
|
};
|
|
12209
12292
|
createTempFolder = (item) => {
|
|
12210
|
-
const path5 = (0,
|
|
12293
|
+
const path5 = (0, import_path6.join)(budibaseTempDir2(), item);
|
|
12211
12294
|
try {
|
|
12212
|
-
if (
|
|
12213
|
-
|
|
12295
|
+
if (import_fs5.default.existsSync(path5)) {
|
|
12296
|
+
import_fs5.default.rmSync(path5, { recursive: true, force: true });
|
|
12214
12297
|
}
|
|
12215
|
-
|
|
12298
|
+
import_fs5.default.mkdirSync(path5);
|
|
12216
12299
|
} catch (err) {
|
|
12217
12300
|
throw new Error(`Path cannot be created: ${err.message}`);
|
|
12218
12301
|
}
|
|
@@ -12225,13 +12308,13 @@ var init_filesystem = __esm({
|
|
|
12225
12308
|
});
|
|
12226
12309
|
};
|
|
12227
12310
|
findFileRec = (startPath, filter2) => {
|
|
12228
|
-
if (!
|
|
12311
|
+
if (!import_fs5.default.existsSync(startPath)) {
|
|
12229
12312
|
return;
|
|
12230
12313
|
}
|
|
12231
|
-
const files2 =
|
|
12314
|
+
const files2 = import_fs5.default.readdirSync(startPath);
|
|
12232
12315
|
for (let i = 0, len = files2.length; i < len; i++) {
|
|
12233
|
-
const filename = (0,
|
|
12234
|
-
const stat =
|
|
12316
|
+
const filename = (0, import_path6.join)(startPath, files2[i]);
|
|
12317
|
+
const stat = import_fs5.default.lstatSync(filename);
|
|
12235
12318
|
if (stat.isDirectory()) {
|
|
12236
12319
|
return findFileRec(filename, filter2);
|
|
12237
12320
|
} else if (filename.endsWith(filter2)) {
|
|
@@ -12240,10 +12323,10 @@ var init_filesystem = __esm({
|
|
|
12240
12323
|
}
|
|
12241
12324
|
};
|
|
12242
12325
|
deleteFolderFileSystem = (path5) => {
|
|
12243
|
-
if (!
|
|
12326
|
+
if (!import_fs5.default.existsSync(path5)) {
|
|
12244
12327
|
return;
|
|
12245
12328
|
}
|
|
12246
|
-
|
|
12329
|
+
import_fs5.default.rmSync(path5, { recursive: true, force: true });
|
|
12247
12330
|
};
|
|
12248
12331
|
}
|
|
12249
12332
|
});
|
|
@@ -12257,12 +12340,12 @@ async function backupClientLibrary(appId) {
|
|
|
12257
12340
|
try {
|
|
12258
12341
|
tmpManifestPath = await objectStore_exports2.retrieveToTmp(
|
|
12259
12342
|
ObjectStoreBuckets2.APPS,
|
|
12260
|
-
(0,
|
|
12343
|
+
(0, import_path7.join)(appId, "manifest.json")
|
|
12261
12344
|
);
|
|
12262
12345
|
} catch (error2) {
|
|
12263
12346
|
tmpManifestPath = await objectStore_exports2.retrieveToTmp(
|
|
12264
12347
|
ObjectStoreBuckets2.APPS,
|
|
12265
|
-
(0,
|
|
12348
|
+
(0, import_path7.join)(
|
|
12266
12349
|
appId,
|
|
12267
12350
|
"node_modules",
|
|
12268
12351
|
"budibase",
|
|
@@ -12274,17 +12357,17 @@ async function backupClientLibrary(appId) {
|
|
|
12274
12357
|
}
|
|
12275
12358
|
const tmpClientPath = await objectStore_exports2.retrieveToTmp(
|
|
12276
12359
|
ObjectStoreBuckets2.APPS,
|
|
12277
|
-
(0,
|
|
12360
|
+
(0, import_path7.join)(appId, "budibase-client.js")
|
|
12278
12361
|
);
|
|
12279
12362
|
const manifestUpload = objectStore_exports2.upload({
|
|
12280
12363
|
bucket: ObjectStoreBuckets2.APPS,
|
|
12281
|
-
filename: (0,
|
|
12364
|
+
filename: (0, import_path7.join)(appId, "manifest.json.bak"),
|
|
12282
12365
|
path: tmpManifestPath,
|
|
12283
12366
|
type: "application/json"
|
|
12284
12367
|
});
|
|
12285
12368
|
const clientUpload = objectStore_exports2.upload({
|
|
12286
12369
|
bucket: ObjectStoreBuckets2.APPS,
|
|
12287
|
-
filename: (0,
|
|
12370
|
+
filename: (0, import_path7.join)(appId, "budibase-client.js.bak"),
|
|
12288
12371
|
path: tmpClientPath,
|
|
12289
12372
|
type: "application/javascript"
|
|
12290
12373
|
});
|
|
@@ -12294,7 +12377,7 @@ async function updateClientLibrary(appId) {
|
|
|
12294
12377
|
let manifest, client3;
|
|
12295
12378
|
if (environment_default2.isDev()) {
|
|
12296
12379
|
const clientPath = devClientLibPath();
|
|
12297
|
-
manifest = (0,
|
|
12380
|
+
manifest = (0, import_path7.join)(import_path7.default.dirname(import_path7.default.dirname(clientPath)), "manifest.json");
|
|
12298
12381
|
client3 = clientPath;
|
|
12299
12382
|
} else {
|
|
12300
12383
|
manifest = resolve(TOP_LEVEL_PATH, "client", "manifest.json");
|
|
@@ -12302,16 +12385,16 @@ async function updateClientLibrary(appId) {
|
|
|
12302
12385
|
}
|
|
12303
12386
|
const manifestUpload = objectStore_exports2.streamUpload(
|
|
12304
12387
|
ObjectStoreBuckets2.APPS,
|
|
12305
|
-
(0,
|
|
12306
|
-
|
|
12388
|
+
(0, import_path7.join)(appId, "manifest.json"),
|
|
12389
|
+
import_fs6.default.createReadStream(manifest),
|
|
12307
12390
|
{
|
|
12308
12391
|
ContentType: "application/json"
|
|
12309
12392
|
}
|
|
12310
12393
|
);
|
|
12311
12394
|
const clientUpload = objectStore_exports2.streamUpload(
|
|
12312
12395
|
ObjectStoreBuckets2.APPS,
|
|
12313
|
-
(0,
|
|
12314
|
-
|
|
12396
|
+
(0, import_path7.join)(appId, "budibase-client.js"),
|
|
12397
|
+
import_fs6.default.createReadStream(client3),
|
|
12315
12398
|
{
|
|
12316
12399
|
ContentType: "application/javascript"
|
|
12317
12400
|
}
|
|
@@ -12321,32 +12404,32 @@ async function updateClientLibrary(appId) {
|
|
|
12321
12404
|
async function revertClientLibrary(appId) {
|
|
12322
12405
|
const tmpManifestPath = await objectStore_exports2.retrieveToTmp(
|
|
12323
12406
|
ObjectStoreBuckets2.APPS,
|
|
12324
|
-
(0,
|
|
12407
|
+
(0, import_path7.join)(appId, "manifest.json.bak")
|
|
12325
12408
|
);
|
|
12326
12409
|
const tmpClientPath = await objectStore_exports2.retrieveToTmp(
|
|
12327
12410
|
ObjectStoreBuckets2.APPS,
|
|
12328
|
-
(0,
|
|
12411
|
+
(0, import_path7.join)(appId, "budibase-client.js.bak")
|
|
12329
12412
|
);
|
|
12330
12413
|
const manifestUpload = objectStore_exports2.upload({
|
|
12331
12414
|
bucket: ObjectStoreBuckets2.APPS,
|
|
12332
|
-
filename: (0,
|
|
12415
|
+
filename: (0, import_path7.join)(appId, "manifest.json"),
|
|
12333
12416
|
path: tmpManifestPath,
|
|
12334
12417
|
type: "application/json"
|
|
12335
12418
|
});
|
|
12336
12419
|
const clientUpload = objectStore_exports2.upload({
|
|
12337
12420
|
bucket: ObjectStoreBuckets2.APPS,
|
|
12338
|
-
filename: (0,
|
|
12421
|
+
filename: (0, import_path7.join)(appId, "budibase-client.js"),
|
|
12339
12422
|
path: tmpClientPath,
|
|
12340
12423
|
type: "application/javascript"
|
|
12341
12424
|
});
|
|
12342
12425
|
await Promise.all([manifestUpload, clientUpload]);
|
|
12343
12426
|
}
|
|
12344
|
-
var
|
|
12427
|
+
var import_path7, import_fs6;
|
|
12345
12428
|
var init_clientLibrary = __esm({
|
|
12346
12429
|
"src/utilities/fileSystem/clientLibrary.ts"() {
|
|
12347
|
-
|
|
12430
|
+
import_path7 = __toESM(require("path"));
|
|
12348
12431
|
init_constants4();
|
|
12349
|
-
|
|
12432
|
+
import_fs6 = __toESM(require("fs"));
|
|
12350
12433
|
init_src2();
|
|
12351
12434
|
init_centralPath();
|
|
12352
12435
|
init_environment3();
|
|
@@ -12355,18 +12438,18 @@ var init_clientLibrary = __esm({
|
|
|
12355
12438
|
});
|
|
12356
12439
|
|
|
12357
12440
|
// src/utilities/fileSystem/app.ts
|
|
12358
|
-
var
|
|
12441
|
+
var import_fs7, import_path8, NODE_MODULES_PATH, createApp, deleteApp, getComponentLibraryManifest;
|
|
12359
12442
|
var init_app7 = __esm({
|
|
12360
12443
|
"src/utilities/fileSystem/app.ts"() {
|
|
12361
12444
|
init_budibaseDir();
|
|
12362
|
-
|
|
12363
|
-
|
|
12445
|
+
import_fs7 = __toESM(require("fs"));
|
|
12446
|
+
import_path8 = require("path");
|
|
12364
12447
|
init_constants4();
|
|
12365
12448
|
init_clientLibrary();
|
|
12366
12449
|
init_environment3();
|
|
12367
12450
|
init_src2();
|
|
12368
12451
|
init_filesystem();
|
|
12369
|
-
NODE_MODULES_PATH = (0,
|
|
12452
|
+
NODE_MODULES_PATH = (0, import_path8.join)(TOP_LEVEL_PATH, "node_modules");
|
|
12370
12453
|
createApp = async (appId) => {
|
|
12371
12454
|
await updateClientLibrary(appId);
|
|
12372
12455
|
};
|
|
@@ -12378,11 +12461,11 @@ var init_app7 = __esm({
|
|
|
12378
12461
|
const filename = "manifest.json";
|
|
12379
12462
|
if (environment_default2.isDev() || environment_default2.isTest()) {
|
|
12380
12463
|
const paths = [
|
|
12381
|
-
(0,
|
|
12382
|
-
(0,
|
|
12464
|
+
(0, import_path8.join)(TOP_LEVEL_PATH, "packages/client", filename),
|
|
12465
|
+
(0, import_path8.join)(process.cwd(), "client", filename)
|
|
12383
12466
|
];
|
|
12384
12467
|
for (let path6 of paths) {
|
|
12385
|
-
if (
|
|
12468
|
+
if (import_fs7.default.existsSync(path6)) {
|
|
12386
12469
|
delete require.cache[require.resolve(path6)];
|
|
12387
12470
|
return require(path6);
|
|
12388
12471
|
}
|
|
@@ -12397,14 +12480,14 @@ var init_app7 = __esm({
|
|
|
12397
12480
|
let resp;
|
|
12398
12481
|
let path5;
|
|
12399
12482
|
try {
|
|
12400
|
-
path5 = (0,
|
|
12483
|
+
path5 = (0, import_path8.join)(appId, filename);
|
|
12401
12484
|
resp = await objectStore_exports2.retrieve(ObjectStoreBuckets2.APPS, path5);
|
|
12402
12485
|
} catch (error2) {
|
|
12403
12486
|
console.error(
|
|
12404
12487
|
`component-manifest-objectstore=failed appId=${appId} path=${path5}`,
|
|
12405
12488
|
error2
|
|
12406
12489
|
);
|
|
12407
|
-
path5 = (0,
|
|
12490
|
+
path5 = (0, import_path8.join)(appId, "node_modules", library, "package", filename);
|
|
12408
12491
|
resp = await objectStore_exports2.retrieve(ObjectStoreBuckets2.APPS, path5);
|
|
12409
12492
|
}
|
|
12410
12493
|
if (typeof resp !== "string") {
|
|
@@ -12419,19 +12502,19 @@ var init_app7 = __esm({
|
|
|
12419
12502
|
async function getPluginImpl(path5, plugin) {
|
|
12420
12503
|
var _a2;
|
|
12421
12504
|
const hash3 = (_a2 = plugin.schema) == null ? void 0 : _a2.hash;
|
|
12422
|
-
if (!
|
|
12423
|
-
|
|
12505
|
+
if (!import_fs8.default.existsSync(path5)) {
|
|
12506
|
+
import_fs8.default.mkdirSync(path5);
|
|
12424
12507
|
}
|
|
12425
|
-
const filename = (0,
|
|
12508
|
+
const filename = (0, import_path9.join)(path5, plugin.name);
|
|
12426
12509
|
const metadataName = `${filename}.bbmetadata`;
|
|
12427
|
-
if (
|
|
12428
|
-
const currentHash =
|
|
12510
|
+
if (import_fs8.default.existsSync(filename)) {
|
|
12511
|
+
const currentHash = import_fs8.default.readFileSync(metadataName, "utf8");
|
|
12429
12512
|
if (currentHash === hash3) {
|
|
12430
12513
|
return require(filename);
|
|
12431
12514
|
} else {
|
|
12432
12515
|
console.log(`Updating plugin: ${plugin.name}`);
|
|
12433
12516
|
delete require.cache[require.resolve(filename)];
|
|
12434
|
-
|
|
12517
|
+
import_fs8.default.unlinkSync(filename);
|
|
12435
12518
|
}
|
|
12436
12519
|
}
|
|
12437
12520
|
const pluginKey = objectStore_exports2.getPluginJSKey(plugin);
|
|
@@ -12439,24 +12522,24 @@ async function getPluginImpl(path5, plugin) {
|
|
|
12439
12522
|
objectStore_exports2.ObjectStoreBuckets.PLUGINS,
|
|
12440
12523
|
pluginKey
|
|
12441
12524
|
);
|
|
12442
|
-
|
|
12443
|
-
|
|
12525
|
+
import_fs8.default.writeFileSync(filename, pluginJs);
|
|
12526
|
+
import_fs8.default.writeFileSync(metadataName, hash3);
|
|
12444
12527
|
return require(filename);
|
|
12445
12528
|
}
|
|
12446
|
-
var
|
|
12529
|
+
var import_fs8, import_path9, DATASOURCE_PATH, AUTOMATION_PATH, getPluginMetadata, getDatasourcePlugin, getAutomationPlugin;
|
|
12447
12530
|
var init_plugin5 = __esm({
|
|
12448
12531
|
"src/utilities/fileSystem/plugin.ts"() {
|
|
12449
12532
|
init_budibaseDir();
|
|
12450
|
-
|
|
12451
|
-
|
|
12533
|
+
import_fs8 = __toESM(require("fs"));
|
|
12534
|
+
import_path9 = require("path");
|
|
12452
12535
|
init_src2();
|
|
12453
|
-
DATASOURCE_PATH = (0,
|
|
12454
|
-
AUTOMATION_PATH = (0,
|
|
12536
|
+
DATASOURCE_PATH = (0, import_path9.join)(budibaseTempDir2(), "datasource");
|
|
12537
|
+
AUTOMATION_PATH = (0, import_path9.join)(budibaseTempDir2(), "automation");
|
|
12455
12538
|
getPluginMetadata = async (path5) => {
|
|
12456
12539
|
let metadata2 = {};
|
|
12457
12540
|
try {
|
|
12458
|
-
const pkg2 =
|
|
12459
|
-
const schema =
|
|
12541
|
+
const pkg2 = import_fs8.default.readFileSync((0, import_path9.join)(path5, "package.json"), "utf8");
|
|
12542
|
+
const schema = import_fs8.default.readFileSync((0, import_path9.join)(path5, "schema.json"), "utf8");
|
|
12460
12543
|
metadata2.schema = JSON.parse(schema);
|
|
12461
12544
|
metadata2.package = JSON.parse(pkg2);
|
|
12462
12545
|
if (!metadata2.package.name || !metadata2.package.version || !metadata2.package.description) {
|
|
@@ -13724,21 +13807,21 @@ __export(version_exports, {
|
|
|
13724
13807
|
getLicenseVersion: () => getLicenseVersion,
|
|
13725
13808
|
getProVersion: () => getProVersion
|
|
13726
13809
|
});
|
|
13727
|
-
var
|
|
13810
|
+
var import_fs9, import_path10, getLicenseVersion, getProVersion;
|
|
13728
13811
|
var init_version2 = __esm({
|
|
13729
13812
|
"../pro/packages/pro/src/constants/version.ts"() {
|
|
13730
13813
|
init_src2();
|
|
13731
|
-
|
|
13732
|
-
|
|
13814
|
+
import_fs9 = __toESM(require("fs"));
|
|
13815
|
+
import_path10 = __toESM(require("path"));
|
|
13733
13816
|
getLicenseVersion = () => {
|
|
13734
13817
|
if (environment_default.isDev()) {
|
|
13735
13818
|
const DEV_VER_FILENAME = "dev-version.txt";
|
|
13736
|
-
const verFile =
|
|
13737
|
-
if (
|
|
13738
|
-
return
|
|
13819
|
+
const verFile = import_path10.default.join(objectStore_exports2.budibaseTempDir(), DEV_VER_FILENAME);
|
|
13820
|
+
if (import_fs9.default.existsSync(verFile)) {
|
|
13821
|
+
return import_fs9.default.readFileSync(verFile, "utf8");
|
|
13739
13822
|
} else {
|
|
13740
13823
|
const devVer = utils_exports2.newid();
|
|
13741
|
-
|
|
13824
|
+
import_fs9.default.writeFileSync(verFile, devVer);
|
|
13742
13825
|
return devVer;
|
|
13743
13826
|
}
|
|
13744
13827
|
} else {
|
|
@@ -14184,31 +14267,31 @@ function getOfflineLicense() {
|
|
|
14184
14267
|
}
|
|
14185
14268
|
}
|
|
14186
14269
|
function getOfflineLicenseFromDisk() {
|
|
14187
|
-
if (
|
|
14188
|
-
const token =
|
|
14270
|
+
if (import_fs10.default.existsSync(LICENSE_FILE_PATH)) {
|
|
14271
|
+
const token = import_fs10.default.readFileSync(LICENSE_FILE_PATH, { encoding: "utf-8" });
|
|
14189
14272
|
return import_jsonwebtoken.default.verify(token, PUBLIC_KEY, { algorithms: ["RS256"] });
|
|
14190
14273
|
}
|
|
14191
14274
|
}
|
|
14192
14275
|
function writeOfflineLicenseToDisk(signedLicense) {
|
|
14193
|
-
|
|
14276
|
+
import_fs10.default.writeFileSync(LICENSE_FILE_PATH, signedLicense, { encoding: "utf-8" });
|
|
14194
14277
|
}
|
|
14195
14278
|
function deleteOfflineLicense() {
|
|
14196
|
-
|
|
14279
|
+
import_fs10.default.rmSync(LICENSE_FILE_PATH, { force: true });
|
|
14197
14280
|
}
|
|
14198
|
-
var
|
|
14281
|
+
var import_fs10, import_path11, import_os2, import_jsonwebtoken, SUB_DIRECTORY, DIRECTORY, OFFLINE_LICENSE_FILE, LICENSE_FILE_PATH, PUBLIC_KEY;
|
|
14199
14282
|
var init_offline = __esm({
|
|
14200
14283
|
"../pro/packages/pro/src/sdk/licensing/licenses/offline.ts"() {
|
|
14201
|
-
|
|
14202
|
-
|
|
14284
|
+
import_fs10 = __toESM(require("fs"));
|
|
14285
|
+
import_path11 = require("path");
|
|
14203
14286
|
import_os2 = require("os");
|
|
14204
14287
|
import_jsonwebtoken = __toESM(require("jsonwebtoken"));
|
|
14205
14288
|
init_src2();
|
|
14206
14289
|
SUB_DIRECTORY = environment_default.isTest() ? ".budibase-test" : ".budibase";
|
|
14207
|
-
DIRECTORY = (0,
|
|
14290
|
+
DIRECTORY = (0, import_path11.join)((0, import_os2.tmpdir)(), SUB_DIRECTORY);
|
|
14208
14291
|
OFFLINE_LICENSE_FILE = "offline_license.txt";
|
|
14209
|
-
LICENSE_FILE_PATH = (0,
|
|
14210
|
-
if (!
|
|
14211
|
-
|
|
14292
|
+
LICENSE_FILE_PATH = (0, import_path11.join)(DIRECTORY, OFFLINE_LICENSE_FILE);
|
|
14293
|
+
if (!import_fs10.default.existsSync(DIRECTORY)) {
|
|
14294
|
+
import_fs10.default.mkdirSync(DIRECTORY);
|
|
14212
14295
|
}
|
|
14213
14296
|
PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv\nXtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1\nl2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C\n8suunQP5bEScqEY2kclqzSf8e6xqMzPUg3mL/pNa1iEv7TuLbU9nJfgR36l0WmZY\n94fWnSaT8OSXSqcxsaByf06gfS3HAoTJNc7eqz1Hf9fUORQGPUAnFK8cT3SfdA36\nd/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR\nmwIDAQAB\n-----END PUBLIC KEY-----\n";
|
|
14214
14297
|
}
|
|
@@ -15665,13 +15748,13 @@ var init_groups6 = __esm({
|
|
|
15665
15748
|
|
|
15666
15749
|
// ../pro/packages/pro/src/utilities/fileSystem.ts
|
|
15667
15750
|
function loadJSFile(directory2, name2) {
|
|
15668
|
-
return
|
|
15751
|
+
return import_fs11.default.readFileSync((0, import_path12.join)(directory2, name2), "utf8");
|
|
15669
15752
|
}
|
|
15670
|
-
var
|
|
15753
|
+
var import_fs11, import_path12;
|
|
15671
15754
|
var init_fileSystem2 = __esm({
|
|
15672
15755
|
"../pro/packages/pro/src/utilities/fileSystem.ts"() {
|
|
15673
|
-
|
|
15674
|
-
|
|
15756
|
+
import_fs11 = __toESM(require("fs"));
|
|
15757
|
+
import_path12 = require("path");
|
|
15675
15758
|
}
|
|
15676
15759
|
});
|
|
15677
15760
|
|
|
@@ -18638,8 +18721,8 @@ async function runBackup(trigger3, tenantId, appId, opts) {
|
|
|
18638
18721
|
}
|
|
18639
18722
|
});
|
|
18640
18723
|
await updateMetadata2("complete" /* COMPLETE */, { filename, contents });
|
|
18641
|
-
if (
|
|
18642
|
-
|
|
18724
|
+
if (import_fs12.default.existsSync(tarPath)) {
|
|
18725
|
+
import_fs12.default.rmSync(tarPath);
|
|
18643
18726
|
}
|
|
18644
18727
|
} catch (err) {
|
|
18645
18728
|
logging_exports.logAlert("App backup error", err);
|
|
@@ -18697,14 +18780,14 @@ async function exportProcessor(job, opts) {
|
|
|
18697
18780
|
});
|
|
18698
18781
|
});
|
|
18699
18782
|
}
|
|
18700
|
-
var
|
|
18783
|
+
var import_fs12;
|
|
18701
18784
|
var init_processing = __esm({
|
|
18702
18785
|
"../pro/packages/pro/src/sdk/backups/processing.ts"() {
|
|
18703
18786
|
init_src2();
|
|
18704
18787
|
init_backup5();
|
|
18705
18788
|
init_src();
|
|
18706
18789
|
init_queue4();
|
|
18707
|
-
|
|
18790
|
+
import_fs12 = __toESM(require("fs"));
|
|
18708
18791
|
}
|
|
18709
18792
|
});
|
|
18710
18793
|
|
|
@@ -19387,15 +19470,15 @@ async function downloadBackup(ctx) {
|
|
|
19387
19470
|
const backupId = ctx.params.backupId;
|
|
19388
19471
|
const { metadata: metadata2, path: path5 } = await backups_default.downloadAppBackup(backupId);
|
|
19389
19472
|
ctx.attachment(`backup-${metadata2.timestamp}.tar.gz`);
|
|
19390
|
-
ctx.body =
|
|
19473
|
+
ctx.body = import_fs13.default.createReadStream(path5);
|
|
19391
19474
|
}
|
|
19392
|
-
var
|
|
19475
|
+
var import_fs13;
|
|
19393
19476
|
var init_backups3 = __esm({
|
|
19394
19477
|
"../pro/packages/pro/src/api/controllers/apps/backups.ts"() {
|
|
19395
19478
|
init_src();
|
|
19396
19479
|
init_sdk2();
|
|
19397
19480
|
init_src2();
|
|
19398
|
-
|
|
19481
|
+
import_fs13 = __toESM(require("fs"));
|
|
19399
19482
|
}
|
|
19400
19483
|
});
|
|
19401
19484
|
|
|
@@ -20034,11 +20117,39 @@ var init_filters = __esm({
|
|
|
20034
20117
|
// ../shared-core/src/utils.ts
|
|
20035
20118
|
var utils_exports5 = {};
|
|
20036
20119
|
__export(utils_exports5, {
|
|
20120
|
+
parallelForeach: () => parallelForeach,
|
|
20037
20121
|
unreachable: () => unreachable
|
|
20038
20122
|
});
|
|
20039
20123
|
function unreachable(value, message = `No such case in exhaustive switch: ${value}`) {
|
|
20040
20124
|
throw new Error(message);
|
|
20041
20125
|
}
|
|
20126
|
+
async function parallelForeach(items, task, maxConcurrency) {
|
|
20127
|
+
const promises = [];
|
|
20128
|
+
let index2 = 0;
|
|
20129
|
+
const processItem = async (item) => {
|
|
20130
|
+
try {
|
|
20131
|
+
await task(item);
|
|
20132
|
+
} finally {
|
|
20133
|
+
processNext();
|
|
20134
|
+
}
|
|
20135
|
+
};
|
|
20136
|
+
const processNext = () => {
|
|
20137
|
+
if (index2 >= items.length) {
|
|
20138
|
+
return;
|
|
20139
|
+
}
|
|
20140
|
+
const item = items[index2];
|
|
20141
|
+
index2++;
|
|
20142
|
+
const promise = processItem(item);
|
|
20143
|
+
promises.push(promise);
|
|
20144
|
+
if (promises.length >= maxConcurrency) {
|
|
20145
|
+
Promise.race(promises).then(processNext);
|
|
20146
|
+
} else {
|
|
20147
|
+
processNext();
|
|
20148
|
+
}
|
|
20149
|
+
};
|
|
20150
|
+
processNext();
|
|
20151
|
+
await Promise.all(promises);
|
|
20152
|
+
}
|
|
20042
20153
|
var init_utils13 = __esm({
|
|
20043
20154
|
"../shared-core/src/utils.ts"() {
|
|
20044
20155
|
}
|
|
@@ -20632,7 +20743,7 @@ var init_currentapp = __esm({
|
|
|
20632
20743
|
userId,
|
|
20633
20744
|
globalId,
|
|
20634
20745
|
roleId,
|
|
20635
|
-
role: await roles_exports.getRole(roleId)
|
|
20746
|
+
role: await roles_exports.getRole(roleId, { defaultPublic: true })
|
|
20636
20747
|
};
|
|
20637
20748
|
}
|
|
20638
20749
|
return next();
|
|
@@ -24283,13 +24394,6 @@ function convertBookmark(bookmark) {
|
|
|
24283
24394
|
}
|
|
24284
24395
|
return bookmark;
|
|
24285
24396
|
}
|
|
24286
|
-
function isQsTrue(param) {
|
|
24287
|
-
if (typeof param === "string") {
|
|
24288
|
-
return param.toLowerCase() === "true";
|
|
24289
|
-
} else {
|
|
24290
|
-
return param === true;
|
|
24291
|
-
}
|
|
24292
|
-
}
|
|
24293
24397
|
var import_stream2, Readable, isDev3, NUMBER_REGEX;
|
|
24294
24398
|
var init_utilities2 = __esm({
|
|
24295
24399
|
"src/utilities/index.ts"() {
|
|
@@ -24343,7 +24447,16 @@ async function checkResponse(response2, errorMsg, { ctx } = {}) {
|
|
|
24343
24447
|
}
|
|
24344
24448
|
return response2.json();
|
|
24345
24449
|
}
|
|
24346
|
-
async function sendSmtpEmail(
|
|
24450
|
+
async function sendSmtpEmail({
|
|
24451
|
+
to,
|
|
24452
|
+
from,
|
|
24453
|
+
subject,
|
|
24454
|
+
contents,
|
|
24455
|
+
cc,
|
|
24456
|
+
bcc,
|
|
24457
|
+
automation,
|
|
24458
|
+
invite
|
|
24459
|
+
}) {
|
|
24347
24460
|
const response2 = await (0, import_node_fetch8.default)(
|
|
24348
24461
|
checkSlashesInUrl2(environment_default2.WORKER_URL + `/api/global/email/send`),
|
|
24349
24462
|
request(void 0, {
|
|
@@ -24356,7 +24469,8 @@ async function sendSmtpEmail(to, from, subject, contents, cc, bcc, automation) {
|
|
|
24356
24469
|
cc,
|
|
24357
24470
|
bcc,
|
|
24358
24471
|
purpose: "custom",
|
|
24359
|
-
automation
|
|
24472
|
+
automation,
|
|
24473
|
+
invite
|
|
24360
24474
|
}
|
|
24361
24475
|
})
|
|
24362
24476
|
);
|
|
@@ -24849,22 +24963,22 @@ function threadSetup() {
|
|
|
24849
24963
|
init10();
|
|
24850
24964
|
}
|
|
24851
24965
|
async function checkCacheForDynamicVariable(queryId, variable) {
|
|
24852
|
-
const
|
|
24853
|
-
return
|
|
24966
|
+
const cache3 = await getClient3();
|
|
24967
|
+
return cache3.get(makeVariableKey(queryId, variable));
|
|
24854
24968
|
}
|
|
24855
24969
|
async function invalidateDynamicVariables(cachedVars) {
|
|
24856
|
-
const
|
|
24970
|
+
const cache3 = await getClient3();
|
|
24857
24971
|
let promises = [];
|
|
24858
24972
|
for (let variable of cachedVars) {
|
|
24859
24973
|
promises.push(
|
|
24860
|
-
|
|
24974
|
+
cache3.delete(makeVariableKey(variable.queryId, variable.name))
|
|
24861
24975
|
);
|
|
24862
24976
|
}
|
|
24863
24977
|
await Promise.all(promises);
|
|
24864
24978
|
}
|
|
24865
24979
|
async function storeDynamicVariable(queryId, variable, value) {
|
|
24866
|
-
const
|
|
24867
|
-
await
|
|
24980
|
+
const cache3 = await getClient3();
|
|
24981
|
+
await cache3.store(
|
|
24868
24982
|
makeVariableKey(queryId, variable),
|
|
24869
24983
|
value,
|
|
24870
24984
|
VARIABLE_TTL_SECONDS
|
|
@@ -24924,13 +25038,14 @@ __export(exports_exports, {
|
|
|
24924
25038
|
streamExportApp: () => streamExportApp
|
|
24925
25039
|
});
|
|
24926
25040
|
function tarFilesToTmp(tmpDir, files2) {
|
|
24927
|
-
const
|
|
24928
|
-
|
|
25041
|
+
const fileName = `${uuid3()}.tar.gz`;
|
|
25042
|
+
const exportFile = (0, import_path13.join)(budibaseTempDir2(), fileName);
|
|
25043
|
+
import_tar2.default.create(
|
|
24929
25044
|
{
|
|
24930
25045
|
sync: true,
|
|
24931
25046
|
gzip: true,
|
|
24932
25047
|
file: exportFile,
|
|
24933
|
-
|
|
25048
|
+
noDirRecurse: false,
|
|
24934
25049
|
cwd: tmpDir
|
|
24935
25050
|
},
|
|
24936
25051
|
files2
|
|
@@ -24947,7 +25062,7 @@ async function exportDB(dbName, opts = {}) {
|
|
|
24947
25062
|
return db_exports.doWithDB(dbName, async (db2) => {
|
|
24948
25063
|
if (opts == null ? void 0 : opts.exportPath) {
|
|
24949
25064
|
const path5 = opts == null ? void 0 : opts.exportPath;
|
|
24950
|
-
const writeStream =
|
|
25065
|
+
const writeStream = import_fs14.default.createWriteStream(path5);
|
|
24951
25066
|
await db2.dump(writeStream, exportOpts);
|
|
24952
25067
|
return path5;
|
|
24953
25068
|
} else {
|
|
@@ -24980,9 +25095,9 @@ async function exportApp(appId, config) {
|
|
|
24980
25095
|
for (let path5 of STATIC_APP_FILES) {
|
|
24981
25096
|
const contents = await objectStore_exports2.retrieve(
|
|
24982
25097
|
ObjectStoreBuckets2.APPS,
|
|
24983
|
-
(0,
|
|
25098
|
+
(0, import_path13.join)(appPath, path5)
|
|
24984
25099
|
);
|
|
24985
|
-
|
|
25100
|
+
import_fs14.default.writeFileSync((0, import_path13.join)(tmpPath, path5), contents);
|
|
24986
25101
|
}
|
|
24987
25102
|
} else {
|
|
24988
25103
|
tmpPath = await objectStore_exports2.retrieveDirectory(
|
|
@@ -24991,37 +25106,52 @@ async function exportApp(appId, config) {
|
|
|
24991
25106
|
);
|
|
24992
25107
|
}
|
|
24993
25108
|
}
|
|
24994
|
-
const downloadedPath = (0,
|
|
24995
|
-
if (
|
|
24996
|
-
const allFiles =
|
|
25109
|
+
const downloadedPath = (0, import_path13.join)(tmpPath, appPath);
|
|
25110
|
+
if (import_fs14.default.existsSync(downloadedPath)) {
|
|
25111
|
+
const allFiles = import_fs14.default.readdirSync(downloadedPath);
|
|
24997
25112
|
for (let file of allFiles) {
|
|
24998
|
-
const path5 = (0,
|
|
24999
|
-
|
|
25113
|
+
const path5 = (0, import_path13.join)(downloadedPath, file);
|
|
25114
|
+
import_fs14.default.renameSync(path5, (0, import_path13.join)(downloadedPath, "..", file));
|
|
25000
25115
|
}
|
|
25001
|
-
|
|
25116
|
+
import_fs14.default.rmdirSync(downloadedPath);
|
|
25002
25117
|
}
|
|
25003
|
-
const dbPath = (0,
|
|
25118
|
+
const dbPath = (0, import_path13.join)(tmpPath, DB_EXPORT_FILE);
|
|
25004
25119
|
await exportDB(appId, {
|
|
25005
25120
|
filter: defineFilter(config == null ? void 0 : config.excludeRows, config == null ? void 0 : config.excludeLogs),
|
|
25006
25121
|
exportPath: dbPath
|
|
25007
25122
|
});
|
|
25123
|
+
if (config == null ? void 0 : config.encryptPassword) {
|
|
25124
|
+
for (let file of import_fs14.default.readdirSync(tmpPath)) {
|
|
25125
|
+
const path5 = (0, import_path13.join)(tmpPath, file);
|
|
25126
|
+
await encryption_exports.encryptFile(
|
|
25127
|
+
{ dir: tmpPath, filename: file },
|
|
25128
|
+
config.encryptPassword
|
|
25129
|
+
);
|
|
25130
|
+
import_fs14.default.rmSync(path5);
|
|
25131
|
+
}
|
|
25132
|
+
}
|
|
25008
25133
|
if (config == null ? void 0 : config.tar) {
|
|
25009
|
-
const tarPath = tarFilesToTmp(tmpPath,
|
|
25010
|
-
|
|
25134
|
+
const tarPath = tarFilesToTmp(tmpPath, import_fs14.default.readdirSync(tmpPath));
|
|
25135
|
+
import_fs14.default.rmSync(tmpPath, { recursive: true, force: true });
|
|
25011
25136
|
return tarPath;
|
|
25012
25137
|
} else {
|
|
25013
25138
|
return tmpPath;
|
|
25014
25139
|
}
|
|
25015
25140
|
}
|
|
25016
|
-
async function streamExportApp(
|
|
25141
|
+
async function streamExportApp({
|
|
25142
|
+
appId,
|
|
25143
|
+
excludeRows,
|
|
25144
|
+
encryptPassword
|
|
25145
|
+
}) {
|
|
25017
25146
|
const tmpPath = await exportApp(appId, {
|
|
25018
25147
|
excludeRows,
|
|
25019
25148
|
excludeLogs: true,
|
|
25020
|
-
tar: true
|
|
25149
|
+
tar: true,
|
|
25150
|
+
encryptPassword
|
|
25021
25151
|
});
|
|
25022
25152
|
return streamFile(tmpPath);
|
|
25023
25153
|
}
|
|
25024
|
-
var
|
|
25154
|
+
var import_fs14, import_path13, import_tar2, uuid3, MemoryStream2;
|
|
25025
25155
|
var init_exports2 = __esm({
|
|
25026
25156
|
"src/sdk/app/backups/exports.ts"() {
|
|
25027
25157
|
init_src2();
|
|
@@ -25030,11 +25160,11 @@ var init_exports2 = __esm({
|
|
|
25030
25160
|
init_constants4();
|
|
25031
25161
|
init_utils9();
|
|
25032
25162
|
init_constants7();
|
|
25033
|
-
|
|
25034
|
-
|
|
25163
|
+
import_fs14 = __toESM(require("fs"));
|
|
25164
|
+
import_path13 = require("path");
|
|
25035
25165
|
init_environment3();
|
|
25166
|
+
import_tar2 = __toESM(require("tar"));
|
|
25036
25167
|
uuid3 = require("uuid/v4");
|
|
25037
|
-
tar3 = require("tar");
|
|
25038
25168
|
MemoryStream2 = require("memorystream");
|
|
25039
25169
|
}
|
|
25040
25170
|
});
|
|
@@ -25111,16 +25241,16 @@ async function getTemplateStream(template) {
|
|
|
25111
25241
|
throw new Error("Cannot import a non-text based file.");
|
|
25112
25242
|
}
|
|
25113
25243
|
if (template.file) {
|
|
25114
|
-
return
|
|
25244
|
+
return import_fs15.default.createReadStream(template.file.path);
|
|
25115
25245
|
} else if (template.key) {
|
|
25116
25246
|
const [type, name2] = template.key.split("/");
|
|
25117
25247
|
const tmpPath = await downloadTemplate(type, name2);
|
|
25118
|
-
return
|
|
25248
|
+
return import_fs15.default.createReadStream((0, import_path14.join)(tmpPath, name2, "db", "dump.txt"));
|
|
25119
25249
|
}
|
|
25120
25250
|
}
|
|
25121
25251
|
function untarFile(file) {
|
|
25122
|
-
const tmpPath = (0,
|
|
25123
|
-
|
|
25252
|
+
const tmpPath = (0, import_path14.join)(budibaseTempDir2(), uuid4());
|
|
25253
|
+
import_fs15.default.mkdirSync(tmpPath);
|
|
25124
25254
|
tar4.extract({
|
|
25125
25255
|
sync: true,
|
|
25126
25256
|
cwd: tmpPath,
|
|
@@ -25128,31 +25258,49 @@ function untarFile(file) {
|
|
|
25128
25258
|
});
|
|
25129
25259
|
return tmpPath;
|
|
25130
25260
|
}
|
|
25261
|
+
async function decryptFiles(path5, password) {
|
|
25262
|
+
try {
|
|
25263
|
+
for (let file of import_fs15.default.readdirSync(path5)) {
|
|
25264
|
+
const inputPath = (0, import_path14.join)(path5, file);
|
|
25265
|
+
const outputPath = inputPath.replace(/\.enc$/, "");
|
|
25266
|
+
await encryption_exports.decryptFile(inputPath, outputPath, password);
|
|
25267
|
+
import_fs15.default.rmSync(inputPath);
|
|
25268
|
+
}
|
|
25269
|
+
} catch (err) {
|
|
25270
|
+
if (err.message === "incorrect header check") {
|
|
25271
|
+
throw new Error("File cannot be imported");
|
|
25272
|
+
}
|
|
25273
|
+
throw err;
|
|
25274
|
+
}
|
|
25275
|
+
}
|
|
25131
25276
|
function getGlobalDBFile(tmpPath) {
|
|
25132
|
-
return
|
|
25277
|
+
return import_fs15.default.readFileSync((0, import_path14.join)(tmpPath, GLOBAL_DB_EXPORT_FILE), "utf8");
|
|
25133
25278
|
}
|
|
25134
25279
|
function getListOfAppsInMulti(tmpPath) {
|
|
25135
|
-
return
|
|
25280
|
+
return import_fs15.default.readdirSync(tmpPath).filter((dir) => dir !== GLOBAL_DB_EXPORT_FILE);
|
|
25136
25281
|
}
|
|
25137
25282
|
async function importApp(appId, db2, template) {
|
|
25138
25283
|
var _a2, _b2;
|
|
25139
25284
|
let prodAppId = db_exports.getProdAppID(appId);
|
|
25140
25285
|
let dbStream;
|
|
25141
25286
|
const isTar = template.file && ((_b2 = (_a2 = template == null ? void 0 : template.file) == null ? void 0 : _a2.type) == null ? void 0 : _b2.endsWith("gzip"));
|
|
25142
|
-
const isDirectory = template.file &&
|
|
25287
|
+
const isDirectory = template.file && import_fs15.default.lstatSync(template.file.path).isDirectory();
|
|
25143
25288
|
if (template.file && (isTar || isDirectory)) {
|
|
25144
25289
|
const tmpPath = isTar ? untarFile(template.file) : template.file.path;
|
|
25145
|
-
|
|
25290
|
+
if (isTar && template.file.password) {
|
|
25291
|
+
await decryptFiles(tmpPath, template.file.password);
|
|
25292
|
+
}
|
|
25293
|
+
const contents = import_fs15.default.readdirSync(tmpPath);
|
|
25146
25294
|
if (contents.length) {
|
|
25147
25295
|
let promises = [];
|
|
25148
25296
|
let excludedFiles = [GLOBAL_DB_EXPORT_FILE, DB_EXPORT_FILE];
|
|
25149
25297
|
for (let filename of contents) {
|
|
25150
|
-
const path5 = (0,
|
|
25298
|
+
const path5 = (0, import_path14.join)(tmpPath, filename);
|
|
25151
25299
|
if (excludedFiles.includes(filename)) {
|
|
25152
25300
|
continue;
|
|
25153
25301
|
}
|
|
25154
|
-
filename = (0,
|
|
25155
|
-
if (
|
|
25302
|
+
filename = (0, import_path14.join)(prodAppId, filename);
|
|
25303
|
+
if (import_fs15.default.lstatSync(path5).isDirectory()) {
|
|
25156
25304
|
promises.push(
|
|
25157
25305
|
objectStore_exports2.uploadDirectory(ObjectStoreBuckets2.APPS, path5, filename)
|
|
25158
25306
|
);
|
|
@@ -25168,7 +25316,7 @@ async function importApp(appId, db2, template) {
|
|
|
25168
25316
|
}
|
|
25169
25317
|
await Promise.all(promises);
|
|
25170
25318
|
}
|
|
25171
|
-
dbStream =
|
|
25319
|
+
dbStream = import_fs15.default.createReadStream((0, import_path14.join)(tmpPath, DB_EXPORT_FILE));
|
|
25172
25320
|
} else {
|
|
25173
25321
|
dbStream = await getTemplateStream(template);
|
|
25174
25322
|
}
|
|
@@ -25180,7 +25328,7 @@ async function importApp(appId, db2, template) {
|
|
|
25180
25328
|
await updateAutomations(prodAppId, db2);
|
|
25181
25329
|
return ok;
|
|
25182
25330
|
}
|
|
25183
|
-
var
|
|
25331
|
+
var import_path14, import_fs15, uuid4, tar4;
|
|
25184
25332
|
var init_imports = __esm({
|
|
25185
25333
|
"src/sdk/app/backups/imports.ts"() {
|
|
25186
25334
|
init_src2();
|
|
@@ -25189,8 +25337,8 @@ var init_imports = __esm({
|
|
|
25189
25337
|
init_constants7();
|
|
25190
25338
|
init_fileSystem();
|
|
25191
25339
|
init_constants4();
|
|
25192
|
-
|
|
25193
|
-
|
|
25340
|
+
import_path14 = require("path");
|
|
25341
|
+
import_fs15 = __toESM(require("fs"));
|
|
25194
25342
|
init_sdk3();
|
|
25195
25343
|
init_src();
|
|
25196
25344
|
uuid4 = require("uuid/v4");
|
|
@@ -26497,7 +26645,8 @@ var init_postgres = __esm({
|
|
|
26497
26645
|
try {
|
|
26498
26646
|
await this.openConnection();
|
|
26499
26647
|
const columnsResponse = await this.client.query(this.COLUMNS_SQL);
|
|
26500
|
-
|
|
26648
|
+
const names = columnsResponse.rows.map((row2) => row2.table_name);
|
|
26649
|
+
return [...new Set(names)];
|
|
26501
26650
|
} finally {
|
|
26502
26651
|
await this.closeConnection();
|
|
26503
26652
|
}
|
|
@@ -27126,6 +27275,8 @@ var init_mongodb = __esm({
|
|
|
27126
27275
|
response2.connected = true;
|
|
27127
27276
|
} catch (e) {
|
|
27128
27277
|
response2.error = e.message;
|
|
27278
|
+
} finally {
|
|
27279
|
+
await this.client.close();
|
|
27129
27280
|
}
|
|
27130
27281
|
return response2;
|
|
27131
27282
|
}
|
|
@@ -29057,6 +29208,16 @@ var init_rest = __esm({
|
|
|
29057
29208
|
});
|
|
29058
29209
|
|
|
29059
29210
|
// src/integrations/googlesheets.ts
|
|
29211
|
+
async function setupCreationAuth(datasouce) {
|
|
29212
|
+
if (datasouce.continueSetupId) {
|
|
29213
|
+
const appId = context_exports.getAppId();
|
|
29214
|
+
const tokens = await cache_exports.get(
|
|
29215
|
+
`datasource:creation:${appId}:google:${datasouce.continueSetupId}`
|
|
29216
|
+
);
|
|
29217
|
+
datasouce.auth = tokens.tokens;
|
|
29218
|
+
delete datasouce.continueSetupId;
|
|
29219
|
+
}
|
|
29220
|
+
}
|
|
29060
29221
|
var import_google_auth_library, import_google_spreadsheet, import_node_fetch10, ALLOWED_TYPES, SCHEMA12, GoogleSheetsIntegration, googlesheets_default;
|
|
29061
29222
|
var init_googlesheets = __esm({
|
|
29062
29223
|
"src/integrations/googlesheets.ts"() {
|
|
@@ -29094,7 +29255,7 @@ var init_googlesheets = __esm({
|
|
|
29094
29255
|
},
|
|
29095
29256
|
datasource: {
|
|
29096
29257
|
spreadsheetId: {
|
|
29097
|
-
display: "
|
|
29258
|
+
display: "Spreadsheet URL",
|
|
29098
29259
|
type: "string" /* STRING */,
|
|
29099
29260
|
required: true
|
|
29100
29261
|
}
|
|
@@ -29215,6 +29376,7 @@ var init_googlesheets = __esm({
|
|
|
29215
29376
|
async connect() {
|
|
29216
29377
|
var _a2;
|
|
29217
29378
|
try {
|
|
29379
|
+
await setupCreationAuth(this.config);
|
|
29218
29380
|
let googleConfig = await configs_exports.getGoogleDatasourceConfig();
|
|
29219
29381
|
if (!googleConfig) {
|
|
29220
29382
|
throw new HTTPError("Google config not found", 400);
|
|
@@ -29265,21 +29427,22 @@ var init_googlesheets = __esm({
|
|
|
29265
29427
|
return table2;
|
|
29266
29428
|
}
|
|
29267
29429
|
async buildSchema(datasourceId, entities) {
|
|
29268
|
-
if (!this.config.auth) {
|
|
29269
|
-
return;
|
|
29270
|
-
}
|
|
29271
29430
|
await this.connect();
|
|
29272
29431
|
const sheets = this.client.sheetsByIndex;
|
|
29273
29432
|
const tables = {};
|
|
29274
|
-
|
|
29275
|
-
|
|
29276
|
-
|
|
29277
|
-
|
|
29278
|
-
sheet.title
|
|
29279
|
-
sheet.
|
|
29280
|
-
|
|
29281
|
-
|
|
29282
|
-
|
|
29433
|
+
await utils_exports5.parallelForeach(
|
|
29434
|
+
sheets,
|
|
29435
|
+
async (sheet) => {
|
|
29436
|
+
await sheet.getRows({ limit: 0, offset: 0 });
|
|
29437
|
+
const id = buildExternalTableId(datasourceId, sheet.title);
|
|
29438
|
+
tables[sheet.title] = this.getTableSchema(
|
|
29439
|
+
sheet.title,
|
|
29440
|
+
sheet.headerValues,
|
|
29441
|
+
id
|
|
29442
|
+
);
|
|
29443
|
+
},
|
|
29444
|
+
10
|
|
29445
|
+
);
|
|
29283
29446
|
const final = finaliseExternalTables(tables, entities);
|
|
29284
29447
|
this.tables = final.tables;
|
|
29285
29448
|
this.schemaErrors = final.errors;
|
|
@@ -32071,21 +32234,41 @@ var init_automationUtils = __esm({
|
|
|
32071
32234
|
|
|
32072
32235
|
// src/automations/steps/sendSmtpEmail.ts
|
|
32073
32236
|
async function run3({ inputs }) {
|
|
32074
|
-
let {
|
|
32237
|
+
let {
|
|
32238
|
+
to,
|
|
32239
|
+
from,
|
|
32240
|
+
subject,
|
|
32241
|
+
contents,
|
|
32242
|
+
cc,
|
|
32243
|
+
bcc,
|
|
32244
|
+
addInvite,
|
|
32245
|
+
startTime,
|
|
32246
|
+
endTime,
|
|
32247
|
+
summary,
|
|
32248
|
+
location,
|
|
32249
|
+
url
|
|
32250
|
+
} = inputs;
|
|
32075
32251
|
if (!contents) {
|
|
32076
32252
|
contents = "<h1>No content</h1>";
|
|
32077
32253
|
}
|
|
32078
32254
|
to = to || void 0;
|
|
32079
32255
|
try {
|
|
32080
|
-
let response2 = await sendSmtpEmail(
|
|
32256
|
+
let response2 = await sendSmtpEmail({
|
|
32081
32257
|
to,
|
|
32082
32258
|
from,
|
|
32083
32259
|
subject,
|
|
32084
32260
|
contents,
|
|
32085
32261
|
cc,
|
|
32086
32262
|
bcc,
|
|
32087
|
-
true
|
|
32088
|
-
|
|
32263
|
+
automation: true,
|
|
32264
|
+
invite: addInvite ? {
|
|
32265
|
+
startTime,
|
|
32266
|
+
endTime,
|
|
32267
|
+
summary,
|
|
32268
|
+
location,
|
|
32269
|
+
url
|
|
32270
|
+
} : void 0
|
|
32271
|
+
});
|
|
32089
32272
|
return {
|
|
32090
32273
|
success: true,
|
|
32091
32274
|
response: response2
|
|
@@ -32141,6 +32324,35 @@ var init_sendSmtpEmail = __esm({
|
|
|
32141
32324
|
contents: {
|
|
32142
32325
|
type: "string" /* STRING */,
|
|
32143
32326
|
title: "HTML Contents"
|
|
32327
|
+
},
|
|
32328
|
+
addInvite: {
|
|
32329
|
+
type: "boolean" /* BOOLEAN */,
|
|
32330
|
+
title: "Add calendar invite"
|
|
32331
|
+
},
|
|
32332
|
+
startTime: {
|
|
32333
|
+
type: "date" /* DATE */,
|
|
32334
|
+
title: "Start Time",
|
|
32335
|
+
dependsOn: "addInvite"
|
|
32336
|
+
},
|
|
32337
|
+
endTime: {
|
|
32338
|
+
type: "date" /* DATE */,
|
|
32339
|
+
title: "End Time",
|
|
32340
|
+
dependsOn: "addInvite"
|
|
32341
|
+
},
|
|
32342
|
+
summary: {
|
|
32343
|
+
type: "string" /* STRING */,
|
|
32344
|
+
title: "Meeting Summary",
|
|
32345
|
+
dependsOn: "addInvite"
|
|
32346
|
+
},
|
|
32347
|
+
location: {
|
|
32348
|
+
type: "string" /* STRING */,
|
|
32349
|
+
title: "Location",
|
|
32350
|
+
dependsOn: "addInvite"
|
|
32351
|
+
},
|
|
32352
|
+
url: {
|
|
32353
|
+
type: "string" /* STRING */,
|
|
32354
|
+
title: "URL",
|
|
32355
|
+
dependsOn: "addInvite"
|
|
32144
32356
|
}
|
|
32145
32357
|
},
|
|
32146
32358
|
required: ["to", "from", "subject", "contents"]
|
|
@@ -34651,6 +34863,19 @@ async function buildSchemaHelper(datasource2) {
|
|
|
34651
34863
|
}
|
|
34652
34864
|
return { tables: connector.tables, error: error2 };
|
|
34653
34865
|
}
|
|
34866
|
+
async function buildFilteredSchema(datasource2, filter2) {
|
|
34867
|
+
let { tables, error: error2 } = await buildSchemaHelper(datasource2);
|
|
34868
|
+
let finalTables = tables;
|
|
34869
|
+
if (filter2) {
|
|
34870
|
+
finalTables = {};
|
|
34871
|
+
for (let key in tables) {
|
|
34872
|
+
if (filter2.some((filter3) => filter3.toLowerCase() === key.toLowerCase())) {
|
|
34873
|
+
finalTables[key] = tables[key];
|
|
34874
|
+
}
|
|
34875
|
+
}
|
|
34876
|
+
}
|
|
34877
|
+
return { tables: finalTables, error: error2 };
|
|
34878
|
+
}
|
|
34654
34879
|
async function fetch22(ctx) {
|
|
34655
34880
|
const db2 = context_exports.getAppDB();
|
|
34656
34881
|
const internalTables = await db2.allDocs(
|
|
@@ -34705,37 +34930,24 @@ async function information(ctx) {
|
|
|
34705
34930
|
}
|
|
34706
34931
|
const tableNames = await connector.getTableNames();
|
|
34707
34932
|
ctx.body = {
|
|
34708
|
-
tableNames
|
|
34933
|
+
tableNames: tableNames.sort()
|
|
34709
34934
|
};
|
|
34710
34935
|
}
|
|
34711
34936
|
async function buildSchemaFromDb(ctx) {
|
|
34712
34937
|
const db2 = context_exports.getAppDB();
|
|
34713
|
-
const datasource2 = await sdk_default.datasources.get(ctx.params.datasourceId);
|
|
34714
34938
|
const tablesFilter = ctx.request.body.tablesFilter;
|
|
34715
|
-
|
|
34716
|
-
|
|
34717
|
-
|
|
34718
|
-
datasource2.entities = {};
|
|
34719
|
-
}
|
|
34720
|
-
for (let key in tables) {
|
|
34721
|
-
if (tablesFilter.some(
|
|
34722
|
-
(filter2) => filter2.toLowerCase() === key.toLowerCase()
|
|
34723
|
-
)) {
|
|
34724
|
-
datasource2.entities[key] = tables[key];
|
|
34725
|
-
}
|
|
34726
|
-
}
|
|
34727
|
-
} else {
|
|
34728
|
-
datasource2.entities = tables;
|
|
34729
|
-
}
|
|
34939
|
+
const datasource2 = await sdk_default.datasources.get(ctx.params.datasourceId);
|
|
34940
|
+
const { tables, error: error2 } = await buildFilteredSchema(datasource2, tablesFilter);
|
|
34941
|
+
datasource2.entities = tables;
|
|
34730
34942
|
setDefaultDisplayColumns(datasource2);
|
|
34731
34943
|
const dbResp = await db2.put(datasource2);
|
|
34732
34944
|
datasource2._rev = dbResp.rev;
|
|
34733
34945
|
const cleanedDatasource = await sdk_default.datasources.removeSecretSingle(datasource2);
|
|
34734
|
-
const
|
|
34946
|
+
const res = { datasource: cleanedDatasource };
|
|
34735
34947
|
if (error2) {
|
|
34736
|
-
|
|
34948
|
+
res.error = error2;
|
|
34737
34949
|
}
|
|
34738
|
-
ctx.body =
|
|
34950
|
+
ctx.body = res;
|
|
34739
34951
|
}
|
|
34740
34952
|
function setDefaultDisplayColumns(datasource2) {
|
|
34741
34953
|
for (let entity of Object.values(datasource2.entities || {})) {
|
|
@@ -34809,6 +35021,7 @@ async function save13(ctx) {
|
|
|
34809
35021
|
const db2 = context_exports.getAppDB();
|
|
34810
35022
|
const plus = ctx.request.body.datasource.plus;
|
|
34811
35023
|
const fetchSchema = ctx.request.body.fetchSchema;
|
|
35024
|
+
const tablesFilter = ctx.request.body.tablesFilter;
|
|
34812
35025
|
const datasource2 = {
|
|
34813
35026
|
_id: generateDatasourceID({ plus }),
|
|
34814
35027
|
...ctx.request.body.datasource,
|
|
@@ -34816,11 +35029,17 @@ async function save13(ctx) {
|
|
|
34816
35029
|
};
|
|
34817
35030
|
let schemaError = null;
|
|
34818
35031
|
if (fetchSchema) {
|
|
34819
|
-
const { tables, error: error2 } = await
|
|
35032
|
+
const { tables, error: error2 } = await buildFilteredSchema(
|
|
35033
|
+
datasource2,
|
|
35034
|
+
tablesFilter
|
|
35035
|
+
);
|
|
34820
35036
|
schemaError = error2;
|
|
34821
35037
|
datasource2.entities = tables;
|
|
34822
35038
|
setDefaultDisplayColumns(datasource2);
|
|
34823
35039
|
}
|
|
35040
|
+
if (preSaveAction[datasource2.source]) {
|
|
35041
|
+
await preSaveAction[datasource2.source](datasource2);
|
|
35042
|
+
}
|
|
34824
35043
|
const dbResp = await db2.put(datasource2);
|
|
34825
35044
|
await events_exports.datasource.created(datasource2);
|
|
34826
35045
|
datasource2._rev = dbResp.rev;
|
|
@@ -34899,6 +35118,7 @@ async function query(ctx) {
|
|
|
34899
35118
|
ctx.throw(400, err);
|
|
34900
35119
|
}
|
|
34901
35120
|
}
|
|
35121
|
+
var preSaveAction;
|
|
34902
35122
|
var init_datasource5 = __esm({
|
|
34903
35123
|
"src/api/controllers/datasource.ts"() {
|
|
34904
35124
|
init_utils9();
|
|
@@ -34908,8 +35128,15 @@ var init_datasource5 = __esm({
|
|
|
34908
35128
|
init_utils24();
|
|
34909
35129
|
init_utils18();
|
|
34910
35130
|
init_src2();
|
|
35131
|
+
init_src();
|
|
34911
35132
|
init_sdk3();
|
|
34912
35133
|
init_websockets();
|
|
35134
|
+
init_googlesheets();
|
|
35135
|
+
preSaveAction = {
|
|
35136
|
+
["GOOGLE_SHEETS" /* GOOGLE_SHEETS */]: async (datasource2) => {
|
|
35137
|
+
await setupCreationAuth(datasource2.config);
|
|
35138
|
+
}
|
|
35139
|
+
};
|
|
34913
35140
|
}
|
|
34914
35141
|
});
|
|
34915
35142
|
|
|
@@ -37753,6 +37980,8 @@ function process2(updateCb) {
|
|
|
37753
37980
|
} catch (err) {
|
|
37754
37981
|
if ((err == null ? void 0 : err.status) === 404) {
|
|
37755
37982
|
return;
|
|
37983
|
+
} else if ((err == null ? void 0 : err.status) === 409) {
|
|
37984
|
+
return;
|
|
37756
37985
|
} else {
|
|
37757
37986
|
logging_exports.logAlert("Failed to perform user/group app sync", err);
|
|
37758
37987
|
}
|
|
@@ -41634,17 +41863,23 @@ var init_query6 = __esm({
|
|
|
41634
41863
|
|
|
41635
41864
|
// src/api/controllers/backup.ts
|
|
41636
41865
|
async function exportAppDump(ctx) {
|
|
41637
|
-
|
|
41866
|
+
const { appId } = ctx.query;
|
|
41867
|
+
const { excludeRows, encryptPassword } = ctx.request.body;
|
|
41868
|
+
const [app2] = await db_exports.getAppsByIDs([appId]);
|
|
41869
|
+
const appName = app2.name;
|
|
41638
41870
|
ctx.req.setTimeout(0);
|
|
41639
|
-
const
|
|
41640
|
-
|
|
41641
|
-
const backupIdentifier = `${appName}-export-${(/* @__PURE__ */ new Date()).getTime()}.tar.gz`;
|
|
41871
|
+
const extension = encryptPassword ? "enc.tar.gz" : "tar.gz";
|
|
41872
|
+
const backupIdentifier = `${appName}-export-${(/* @__PURE__ */ new Date()).getTime()}.${extension}`;
|
|
41642
41873
|
ctx.attachment(backupIdentifier);
|
|
41643
|
-
ctx.body = await sdk_default.backups.streamExportApp(
|
|
41874
|
+
ctx.body = await sdk_default.backups.streamExportApp({
|
|
41875
|
+
appId,
|
|
41876
|
+
excludeRows,
|
|
41877
|
+
encryptPassword
|
|
41878
|
+
});
|
|
41644
41879
|
await context_exports.doInAppContext(appId, async () => {
|
|
41645
41880
|
const appDb = context_exports.getAppDB();
|
|
41646
|
-
const
|
|
41647
|
-
await events_exports.app.exported(
|
|
41881
|
+
const app3 = await appDb.get(DocumentType2.APP_METADATA);
|
|
41882
|
+
await events_exports.app.exported(app3);
|
|
41648
41883
|
});
|
|
41649
41884
|
}
|
|
41650
41885
|
var init_backup6 = __esm({
|
|
@@ -41652,7 +41887,6 @@ var init_backup6 = __esm({
|
|
|
41652
41887
|
init_sdk3();
|
|
41653
41888
|
init_src2();
|
|
41654
41889
|
init_utils9();
|
|
41655
|
-
init_utilities2();
|
|
41656
41890
|
}
|
|
41657
41891
|
});
|
|
41658
41892
|
|
|
@@ -41665,7 +41899,7 @@ var init_backup7 = __esm({
|
|
|
41665
41899
|
init_authorized();
|
|
41666
41900
|
init_src2();
|
|
41667
41901
|
router28 = new import_router28.default();
|
|
41668
|
-
router28.
|
|
41902
|
+
router28.post(
|
|
41669
41903
|
"/api/backups/export",
|
|
41670
41904
|
authorized_default(permissions_exports.BUILDER),
|
|
41671
41905
|
exportAppDump
|
|
@@ -43097,18 +43331,18 @@ async function npmUpload(url, name2, headers = {}) {
|
|
|
43097
43331
|
}
|
|
43098
43332
|
try {
|
|
43099
43333
|
await extractTarball(tarballPluginFile, path5);
|
|
43100
|
-
deleteFolderFileSystem((0,
|
|
43334
|
+
deleteFolderFileSystem((0, import_path15.join)(path5, "package"));
|
|
43101
43335
|
} catch (err) {
|
|
43102
43336
|
throw new Error(err);
|
|
43103
43337
|
}
|
|
43104
43338
|
return await getPluginMetadata(path5);
|
|
43105
43339
|
}
|
|
43106
|
-
var import_node_fetch20,
|
|
43340
|
+
var import_node_fetch20, import_path15;
|
|
43107
43341
|
var init_npm = __esm({
|
|
43108
43342
|
"src/api/controllers/plugin/npm.ts"() {
|
|
43109
43343
|
init_fileSystem();
|
|
43110
43344
|
import_node_fetch20 = __toESM(require("node-fetch"));
|
|
43111
|
-
|
|
43345
|
+
import_path15 = require("path");
|
|
43112
43346
|
init_utils28();
|
|
43113
43347
|
}
|
|
43114
43348
|
});
|
|
@@ -43316,7 +43550,7 @@ async function prepareUpload({ s3Key, bucket, metadata: metadata2, file }) {
|
|
|
43316
43550
|
key: response2.Key
|
|
43317
43551
|
};
|
|
43318
43552
|
}
|
|
43319
|
-
var import_string_templates10, import_aws_sdk4,
|
|
43553
|
+
var import_string_templates10, import_aws_sdk4, import_fs16, uuid5, send2, toggleBetaUiFeature, serveBuilder, uploadFile, deleteObjects, serveApp, serveBuilderPreview, serveClientLibrary, getSignedUploadURL;
|
|
43320
43554
|
var init_static = __esm({
|
|
43321
43555
|
"src/api/controllers/static/index.ts"() {
|
|
43322
43556
|
init_centralPath();
|
|
@@ -43327,7 +43561,7 @@ var init_static = __esm({
|
|
|
43327
43561
|
init_utils9();
|
|
43328
43562
|
init_src2();
|
|
43329
43563
|
import_aws_sdk4 = __toESM(require("aws-sdk"));
|
|
43330
|
-
|
|
43564
|
+
import_fs16 = __toESM(require("fs"));
|
|
43331
43565
|
init_sdk3();
|
|
43332
43566
|
init_src4();
|
|
43333
43567
|
require("svelte/register");
|
|
@@ -43342,9 +43576,9 @@ var init_static = __esm({
|
|
|
43342
43576
|
};
|
|
43343
43577
|
return;
|
|
43344
43578
|
}
|
|
43345
|
-
let builderPath =
|
|
43346
|
-
if (!
|
|
43347
|
-
|
|
43579
|
+
let builderPath = join4(TOP_LEVEL_PATH, "new_design_ui");
|
|
43580
|
+
if (!import_fs16.default.existsSync(builderPath)) {
|
|
43581
|
+
import_fs16.default.mkdirSync(builderPath);
|
|
43348
43582
|
}
|
|
43349
43583
|
await objectStore_exports2.downloadTarballDirect(
|
|
43350
43584
|
"https://cdn.budi.live/beta:design_ui/new_ui.tar.gz",
|
|
@@ -43356,7 +43590,7 @@ var init_static = __esm({
|
|
|
43356
43590
|
};
|
|
43357
43591
|
};
|
|
43358
43592
|
serveBuilder = async function(ctx) {
|
|
43359
|
-
const builderPath =
|
|
43593
|
+
const builderPath = join4(TOP_LEVEL_PATH, "builder");
|
|
43360
43594
|
await send2(ctx, ctx.file, { root: builderPath });
|
|
43361
43595
|
};
|
|
43362
43596
|
uploadFile = async function(ctx) {
|
|
@@ -43445,7 +43679,7 @@ var init_static = __esm({
|
|
|
43445
43679
|
};
|
|
43446
43680
|
serveClientLibrary = async function(ctx) {
|
|
43447
43681
|
return send2(ctx, "budibase-client.js", {
|
|
43448
|
-
root:
|
|
43682
|
+
root: join4(NODE_MODULES_PATH, "@budibase", "client", "dist")
|
|
43449
43683
|
});
|
|
43450
43684
|
};
|
|
43451
43685
|
getSignedUploadURL = async function(ctx) {
|
|
@@ -44765,13 +44999,13 @@ var init_routes = __esm({
|
|
|
44765
44999
|
});
|
|
44766
45000
|
|
|
44767
45001
|
// src/api/index.ts
|
|
44768
|
-
var import_router35,
|
|
45002
|
+
var import_router35, import_zlib3, compress, router35;
|
|
44769
45003
|
var init_api8 = __esm({
|
|
44770
45004
|
"src/api/index.ts"() {
|
|
44771
45005
|
import_router35 = __toESM(require("@koa/router"));
|
|
44772
45006
|
init_src2();
|
|
44773
45007
|
init_currentapp();
|
|
44774
|
-
|
|
45008
|
+
import_zlib3 = __toESM(require("zlib"));
|
|
44775
45009
|
init_routes();
|
|
44776
45010
|
init_src4();
|
|
44777
45011
|
init_public();
|
|
@@ -44784,10 +45018,10 @@ var init_api8 = __esm({
|
|
|
44784
45018
|
compress({
|
|
44785
45019
|
threshold: 2048,
|
|
44786
45020
|
gzip: {
|
|
44787
|
-
flush:
|
|
45021
|
+
flush: import_zlib3.default.constants.Z_SYNC_FLUSH
|
|
44788
45022
|
},
|
|
44789
45023
|
deflate: {
|
|
44790
|
-
flush:
|
|
45024
|
+
flush: import_zlib3.default.constants.Z_SYNC_FLUSH
|
|
44791
45025
|
},
|
|
44792
45026
|
br: false
|
|
44793
45027
|
})
|
|
@@ -44833,7 +45067,7 @@ var init_automations8 = __esm({
|
|
|
44833
45067
|
|
|
44834
45068
|
// src/watch.ts
|
|
44835
45069
|
function watch() {
|
|
44836
|
-
const watchPath =
|
|
45070
|
+
const watchPath = import_path16.default.join(environment_default2.PLUGINS_DIR, "./**/*.tar.gz");
|
|
44837
45071
|
import_chokidar.default.watch(watchPath, {
|
|
44838
45072
|
ignored: "**/node_modules",
|
|
44839
45073
|
awaitWriteFinish: {
|
|
@@ -44843,7 +45077,7 @@ function watch() {
|
|
|
44843
45077
|
usePolling: true,
|
|
44844
45078
|
interval: 250
|
|
44845
45079
|
}).on("all", async (event, path5) => {
|
|
44846
|
-
if (!(path5 == null ? void 0 : path5.endsWith(".tar.gz")) || !
|
|
45080
|
+
if (!(path5 == null ? void 0 : path5.endsWith(".tar.gz")) || !import_fs17.default.existsSync(path5)) {
|
|
44847
45081
|
return;
|
|
44848
45082
|
}
|
|
44849
45083
|
await tenancy.doInTenant(constants_exports.DEFAULT_TENANT_ID, async () => {
|
|
@@ -44859,13 +45093,13 @@ function watch() {
|
|
|
44859
45093
|
});
|
|
44860
45094
|
});
|
|
44861
45095
|
}
|
|
44862
|
-
var
|
|
45096
|
+
var import_path16, import_chokidar, import_fs17;
|
|
44863
45097
|
var init_watch = __esm({
|
|
44864
45098
|
"src/watch.ts"() {
|
|
44865
|
-
|
|
45099
|
+
import_path16 = __toESM(require("path"));
|
|
44866
45100
|
init_environment3();
|
|
44867
45101
|
import_chokidar = __toESM(require("chokidar"));
|
|
44868
|
-
|
|
45102
|
+
import_fs17 = __toESM(require("fs"));
|
|
44869
45103
|
init_src2();
|
|
44870
45104
|
init_plugins5();
|
|
44871
45105
|
}
|
|
@@ -44921,7 +45155,7 @@ async function startup(app2, server2) {
|
|
|
44921
45155
|
shutdown9(server2);
|
|
44922
45156
|
}
|
|
44923
45157
|
}
|
|
44924
|
-
if (environment_default2.SELF_HOSTED && !environment_default2.MULTI_TENANCY && environment_default2.PLUGINS_DIR &&
|
|
45158
|
+
if (environment_default2.SELF_HOSTED && !environment_default2.MULTI_TENANCY && environment_default2.PLUGINS_DIR && import_fs18.default.existsSync(environment_default2.PLUGINS_DIR)) {
|
|
44925
45159
|
watch();
|
|
44926
45160
|
}
|
|
44927
45161
|
await installation_exports.checkInstallVersion();
|
|
@@ -44956,14 +45190,14 @@ async function startup(app2, server2) {
|
|
|
44956
45190
|
}
|
|
44957
45191
|
}
|
|
44958
45192
|
}
|
|
44959
|
-
var
|
|
45193
|
+
var import_fs18, STARTUP_RAN;
|
|
44960
45194
|
var init_startup = __esm({
|
|
44961
45195
|
"src/startup.ts"() {
|
|
44962
45196
|
init_environment3();
|
|
44963
45197
|
init_redis4();
|
|
44964
45198
|
init_workerRequests();
|
|
44965
45199
|
init_src2();
|
|
44966
|
-
|
|
45200
|
+
import_fs18 = __toESM(require("fs"));
|
|
44967
45201
|
init_watch();
|
|
44968
45202
|
init_automations8();
|
|
44969
45203
|
init_fileSystem();
|