@budibase/backend-core 2.13.51 → 2.13.53
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/dist/index.js +186 -21
- package/dist/index.js.map +4 -4
- package/dist/index.js.meta.json +1 -1
- package/dist/package.json +4 -4
- package/dist/plugins.js.meta.json +1 -1
- package/dist/src/cache/generic.d.ts +16 -6
- package/dist/src/cache/generic.js +12 -10
- package/dist/src/cache/generic.js.map +1 -1
- package/dist/src/cache/passwordReset.d.ts +5 -0
- package/dist/src/cache/passwordReset.js +13 -2
- package/dist/src/cache/passwordReset.js.map +1 -1
- package/dist/src/db/couch/DatabaseImpl.d.ts +2 -1
- package/dist/src/db/couch/DatabaseImpl.js +3 -1
- package/dist/src/db/couch/DatabaseImpl.js.map +1 -1
- package/dist/src/db/db.js +2 -1
- package/dist/src/db/db.js.map +1 -1
- package/dist/src/db/instrumentation.d.ts +27 -0
- package/dist/src/db/instrumentation.js +117 -0
- package/dist/src/db/instrumentation.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/logging/pino/logger.js +6 -0
- package/dist/src/logging/pino/logger.js.map +1 -1
- package/dist/src/security/auth.d.ts +8 -0
- package/dist/src/security/auth.js +22 -0
- package/dist/src/security/auth.js.map +1 -0
- package/dist/src/security/index.d.ts +1 -0
- package/dist/src/security/index.js +18 -0
- package/dist/src/security/index.js.map +1 -0
- package/dist/src/users/db.js +5 -0
- package/dist/src/users/db.js.map +1 -1
- package/dist/tests/core/utilities/structures/users.js +1 -1
- package/dist/tests/core/utilities/structures/users.js.map +1 -1
- package/package.json +4 -4
- package/src/cache/generic.ts +12 -11
- package/src/cache/passwordReset.ts +13 -2
- package/src/db/couch/DatabaseImpl.ts +3 -1
- package/src/db/db.ts +2 -1
- package/src/db/instrumentation.ts +156 -0
- package/src/index.ts +1 -0
- package/src/logging/pino/logger.ts +6 -0
- package/src/security/auth.ts +24 -0
- package/src/security/index.ts +1 -0
- package/src/security/tests/auth.spec.ts +45 -0
- package/src/users/db.ts +8 -1
- package/tests/core/utilities/structures/users.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -2905,6 +2905,123 @@ var init_newid = __esm({
|
|
|
2905
2905
|
}
|
|
2906
2906
|
});
|
|
2907
2907
|
|
|
2908
|
+
// src/db/instrumentation.ts
|
|
2909
|
+
var import_dd_trace, DDInstrumentedDatabase;
|
|
2910
|
+
var init_instrumentation = __esm({
|
|
2911
|
+
"src/db/instrumentation.ts"() {
|
|
2912
|
+
"use strict";
|
|
2913
|
+
import_dd_trace = __toESM(require("dd-trace"));
|
|
2914
|
+
DDInstrumentedDatabase = class {
|
|
2915
|
+
constructor(db) {
|
|
2916
|
+
this.db = db;
|
|
2917
|
+
}
|
|
2918
|
+
get name() {
|
|
2919
|
+
return this.db.name;
|
|
2920
|
+
}
|
|
2921
|
+
exists() {
|
|
2922
|
+
return import_dd_trace.default.trace("db.exists", (span) => {
|
|
2923
|
+
span?.addTags({ db_name: this.name });
|
|
2924
|
+
return this.db.exists();
|
|
2925
|
+
});
|
|
2926
|
+
}
|
|
2927
|
+
checkSetup() {
|
|
2928
|
+
return import_dd_trace.default.trace("db.checkSetup", (span) => {
|
|
2929
|
+
span?.addTags({ db_name: this.name });
|
|
2930
|
+
return this.db.checkSetup();
|
|
2931
|
+
});
|
|
2932
|
+
}
|
|
2933
|
+
get(id) {
|
|
2934
|
+
return import_dd_trace.default.trace("db.get", (span) => {
|
|
2935
|
+
span?.addTags({ db_name: this.name, doc_id: id });
|
|
2936
|
+
return this.db.get(id);
|
|
2937
|
+
});
|
|
2938
|
+
}
|
|
2939
|
+
getMultiple(ids, opts) {
|
|
2940
|
+
return import_dd_trace.default.trace("db.getMultiple", (span) => {
|
|
2941
|
+
span?.addTags({
|
|
2942
|
+
db_name: this.name,
|
|
2943
|
+
num_docs: ids.length,
|
|
2944
|
+
allow_missing: opts?.allowMissing
|
|
2945
|
+
});
|
|
2946
|
+
return this.db.getMultiple(ids, opts);
|
|
2947
|
+
});
|
|
2948
|
+
}
|
|
2949
|
+
remove(id, rev) {
|
|
2950
|
+
return import_dd_trace.default.trace("db.remove", (span) => {
|
|
2951
|
+
span?.addTags({ db_name: this.name, doc_id: id });
|
|
2952
|
+
return this.db.remove(id, rev);
|
|
2953
|
+
});
|
|
2954
|
+
}
|
|
2955
|
+
put(document, opts) {
|
|
2956
|
+
return import_dd_trace.default.trace("db.put", (span) => {
|
|
2957
|
+
span?.addTags({ db_name: this.name, doc_id: document._id });
|
|
2958
|
+
return this.db.put(document, opts);
|
|
2959
|
+
});
|
|
2960
|
+
}
|
|
2961
|
+
bulkDocs(documents) {
|
|
2962
|
+
return import_dd_trace.default.trace("db.bulkDocs", (span) => {
|
|
2963
|
+
span?.addTags({ db_name: this.name, num_docs: documents.length });
|
|
2964
|
+
return this.db.bulkDocs(documents);
|
|
2965
|
+
});
|
|
2966
|
+
}
|
|
2967
|
+
allDocs(params2) {
|
|
2968
|
+
return import_dd_trace.default.trace("db.allDocs", (span) => {
|
|
2969
|
+
span?.addTags({ db_name: this.name });
|
|
2970
|
+
return this.db.allDocs(params2);
|
|
2971
|
+
});
|
|
2972
|
+
}
|
|
2973
|
+
query(viewName, params2) {
|
|
2974
|
+
return import_dd_trace.default.trace("db.query", (span) => {
|
|
2975
|
+
span?.addTags({ db_name: this.name, view_name: viewName });
|
|
2976
|
+
return this.db.query(viewName, params2);
|
|
2977
|
+
});
|
|
2978
|
+
}
|
|
2979
|
+
destroy() {
|
|
2980
|
+
return import_dd_trace.default.trace("db.destroy", (span) => {
|
|
2981
|
+
span?.addTags({ db_name: this.name });
|
|
2982
|
+
return this.db.destroy();
|
|
2983
|
+
});
|
|
2984
|
+
}
|
|
2985
|
+
compact() {
|
|
2986
|
+
return import_dd_trace.default.trace("db.compact", (span) => {
|
|
2987
|
+
span?.addTags({ db_name: this.name });
|
|
2988
|
+
return this.db.compact();
|
|
2989
|
+
});
|
|
2990
|
+
}
|
|
2991
|
+
dump(stream2, opts) {
|
|
2992
|
+
return import_dd_trace.default.trace("db.dump", (span) => {
|
|
2993
|
+
span?.addTags({ db_name: this.name });
|
|
2994
|
+
return this.db.dump(stream2, opts);
|
|
2995
|
+
});
|
|
2996
|
+
}
|
|
2997
|
+
load(...args) {
|
|
2998
|
+
return import_dd_trace.default.trace("db.load", (span) => {
|
|
2999
|
+
span?.addTags({ db_name: this.name });
|
|
3000
|
+
return this.db.load(...args);
|
|
3001
|
+
});
|
|
3002
|
+
}
|
|
3003
|
+
createIndex(...args) {
|
|
3004
|
+
return import_dd_trace.default.trace("db.createIndex", (span) => {
|
|
3005
|
+
span?.addTags({ db_name: this.name });
|
|
3006
|
+
return this.db.createIndex(...args);
|
|
3007
|
+
});
|
|
3008
|
+
}
|
|
3009
|
+
deleteIndex(...args) {
|
|
3010
|
+
return import_dd_trace.default.trace("db.deleteIndex", (span) => {
|
|
3011
|
+
span?.addTags({ db_name: this.name });
|
|
3012
|
+
return this.db.deleteIndex(...args);
|
|
3013
|
+
});
|
|
3014
|
+
}
|
|
3015
|
+
getIndexes(...args) {
|
|
3016
|
+
return import_dd_trace.default.trace("db.getIndexes", (span) => {
|
|
3017
|
+
span?.addTags({ db_name: this.name });
|
|
3018
|
+
return this.db.getIndexes(...args);
|
|
3019
|
+
});
|
|
3020
|
+
}
|
|
3021
|
+
};
|
|
3022
|
+
}
|
|
3023
|
+
});
|
|
3024
|
+
|
|
2908
3025
|
// src/db/couch/DatabaseImpl.ts
|
|
2909
3026
|
function buildNano(couchInfo) {
|
|
2910
3027
|
return (0, import_nano.default)({
|
|
@@ -2918,7 +3035,8 @@ function buildNano(couchInfo) {
|
|
|
2918
3035
|
});
|
|
2919
3036
|
}
|
|
2920
3037
|
function DatabaseWithConnection(dbName, connection, opts) {
|
|
2921
|
-
|
|
3038
|
+
const db = new DatabaseImpl(dbName, opts, connection);
|
|
3039
|
+
return new DDInstrumentedDatabase(db);
|
|
2922
3040
|
}
|
|
2923
3041
|
var import_nano, DatabaseImpl;
|
|
2924
3042
|
var init_DatabaseImpl = __esm({
|
|
@@ -2930,6 +3048,7 @@ var init_DatabaseImpl = __esm({
|
|
|
2930
3048
|
init_utils2();
|
|
2931
3049
|
init_pouchDB();
|
|
2932
3050
|
init_newid();
|
|
3051
|
+
init_instrumentation();
|
|
2933
3052
|
DatabaseImpl = class _DatabaseImpl {
|
|
2934
3053
|
constructor(dbName, opts, connection) {
|
|
2935
3054
|
this.couchInfo = getCouchInfo();
|
|
@@ -3146,7 +3265,7 @@ var init_couch = __esm({
|
|
|
3146
3265
|
|
|
3147
3266
|
// src/db/db.ts
|
|
3148
3267
|
function getDB(dbName, opts) {
|
|
3149
|
-
return new DatabaseImpl(dbName, opts);
|
|
3268
|
+
return new DDInstrumentedDatabase(new DatabaseImpl(dbName, opts));
|
|
3150
3269
|
}
|
|
3151
3270
|
async function doWithDB(dbName, cb, opts) {
|
|
3152
3271
|
const db = getDB(dbName, opts);
|
|
@@ -3167,6 +3286,7 @@ var init_db3 = __esm({
|
|
|
3167
3286
|
"src/db/db.ts"() {
|
|
3168
3287
|
"use strict";
|
|
3169
3288
|
init_couch();
|
|
3289
|
+
init_instrumentation();
|
|
3170
3290
|
}
|
|
3171
3291
|
});
|
|
3172
3292
|
|
|
@@ -5731,7 +5851,7 @@ var init_system2 = __esm({
|
|
|
5731
5851
|
});
|
|
5732
5852
|
|
|
5733
5853
|
// src/logging/pino/logger.ts
|
|
5734
|
-
var import_pino, import_pino_pretty, pinoInstance, isPlainObject2, isError2, isMessage2, getLogParams3, logger;
|
|
5854
|
+
var import_pino, import_pino_pretty, import_dd_trace2, import_ext, pinoInstance, isPlainObject2, isError2, isMessage2, getLogParams3, logger;
|
|
5735
5855
|
var init_logger = __esm({
|
|
5736
5856
|
"src/logging/pino/logger.ts"() {
|
|
5737
5857
|
"use strict";
|
|
@@ -5740,6 +5860,8 @@ var init_logger = __esm({
|
|
|
5740
5860
|
init_environment2();
|
|
5741
5861
|
init_context2();
|
|
5742
5862
|
init_correlation2();
|
|
5863
|
+
import_dd_trace2 = __toESM(require("dd-trace"));
|
|
5864
|
+
import_ext = require("dd-trace/ext");
|
|
5743
5865
|
init_system2();
|
|
5744
5866
|
if (!environment_default.DISABLE_PINO_LOGGER) {
|
|
5745
5867
|
let isPlainObject = function(obj) {
|
|
@@ -5773,6 +5895,10 @@ var init_logger = __esm({
|
|
|
5773
5895
|
identityType: identity?.type,
|
|
5774
5896
|
correlationId: getId()
|
|
5775
5897
|
};
|
|
5898
|
+
const span = import_dd_trace2.default.scope().active();
|
|
5899
|
+
if (span) {
|
|
5900
|
+
import_dd_trace2.default.inject(span.context(), import_ext.formats.LOG, contextObject);
|
|
5901
|
+
}
|
|
5776
5902
|
const mergingObject = {
|
|
5777
5903
|
err: error,
|
|
5778
5904
|
pid: process.pid,
|
|
@@ -6445,6 +6571,7 @@ __export(src_exports, {
|
|
|
6445
6571
|
queue: () => queue_exports,
|
|
6446
6572
|
redis: () => redis_exports,
|
|
6447
6573
|
roles: () => roles_exports,
|
|
6574
|
+
security: () => security_exports,
|
|
6448
6575
|
sessions: () => sessions_exports,
|
|
6449
6576
|
tenancy: () => tenancy,
|
|
6450
6577
|
timers: () => timers_exports,
|
|
@@ -6598,15 +6725,12 @@ var TTL = /* @__PURE__ */ ((TTL2) => {
|
|
|
6598
6725
|
TTL2[TTL2["ONE_DAY"] = 86400] = "ONE_DAY";
|
|
6599
6726
|
return TTL2;
|
|
6600
6727
|
})(TTL || {});
|
|
6601
|
-
|
|
6602
|
-
|
|
6603
|
-
|
|
6604
|
-
var
|
|
6605
|
-
var
|
|
6606
|
-
var
|
|
6607
|
-
var destroy = performExport("delete");
|
|
6608
|
-
var withCache = performExport("withCache");
|
|
6609
|
-
var bustCache = performExport("bustCache");
|
|
6728
|
+
var keys = (...args) => GENERIC.keys(...args);
|
|
6729
|
+
var get2 = (...args) => GENERIC.get(...args);
|
|
6730
|
+
var store = (...args) => GENERIC.store(...args);
|
|
6731
|
+
var destroy = (...args) => GENERIC.delete(...args);
|
|
6732
|
+
var withCache = (...args) => GENERIC.withCache(...args);
|
|
6733
|
+
var bustCache = (...args) => GENERIC.bustCache(...args);
|
|
6610
6734
|
|
|
6611
6735
|
// src/cache/user.ts
|
|
6612
6736
|
var user_exports = {};
|
|
@@ -7065,13 +7189,13 @@ function validEmail(value) {
|
|
|
7065
7189
|
}
|
|
7066
7190
|
|
|
7067
7191
|
// src/utils/Duration.ts
|
|
7068
|
-
var DurationType = /* @__PURE__ */ ((
|
|
7069
|
-
|
|
7070
|
-
|
|
7071
|
-
|
|
7072
|
-
|
|
7073
|
-
|
|
7074
|
-
return
|
|
7192
|
+
var DurationType = /* @__PURE__ */ ((DurationType3) => {
|
|
7193
|
+
DurationType3["MILLISECONDS"] = "milliseconds";
|
|
7194
|
+
DurationType3["SECONDS"] = "seconds";
|
|
7195
|
+
DurationType3["MINUTES"] = "minutes";
|
|
7196
|
+
DurationType3["HOURS"] = "hours";
|
|
7197
|
+
DurationType3["DAYS"] = "days";
|
|
7198
|
+
return DurationType3;
|
|
7075
7199
|
})(DurationType || {});
|
|
7076
7200
|
var conversion = {
|
|
7077
7201
|
milliseconds: 1,
|
|
@@ -10387,6 +10511,35 @@ async function getSession(userId, sessionId) {
|
|
|
10387
10511
|
|
|
10388
10512
|
// src/users/db.ts
|
|
10389
10513
|
init_src();
|
|
10514
|
+
|
|
10515
|
+
// src/security/index.ts
|
|
10516
|
+
var security_exports = {};
|
|
10517
|
+
__export(security_exports, {
|
|
10518
|
+
PASSWORD_MAX_LENGTH: () => PASSWORD_MAX_LENGTH,
|
|
10519
|
+
PASSWORD_MIN_LENGTH: () => PASSWORD_MIN_LENGTH,
|
|
10520
|
+
validatePassword: () => validatePassword
|
|
10521
|
+
});
|
|
10522
|
+
|
|
10523
|
+
// src/security/auth.ts
|
|
10524
|
+
var PASSWORD_MIN_LENGTH = +(process.env.PASSWORD_MIN_LENGTH || 8);
|
|
10525
|
+
var PASSWORD_MAX_LENGTH = +(process.env.PASSWORD_MAX_LENGTH || 512);
|
|
10526
|
+
function validatePassword(password) {
|
|
10527
|
+
if (!password || password.length < PASSWORD_MIN_LENGTH) {
|
|
10528
|
+
return {
|
|
10529
|
+
valid: false,
|
|
10530
|
+
error: `Password invalid. Minimum ${PASSWORD_MIN_LENGTH} characters.`
|
|
10531
|
+
};
|
|
10532
|
+
}
|
|
10533
|
+
if (password.length > PASSWORD_MAX_LENGTH) {
|
|
10534
|
+
return {
|
|
10535
|
+
valid: false,
|
|
10536
|
+
error: `Password invalid. Maximum ${PASSWORD_MAX_LENGTH} characters.`
|
|
10537
|
+
};
|
|
10538
|
+
}
|
|
10539
|
+
return { valid: true };
|
|
10540
|
+
}
|
|
10541
|
+
|
|
10542
|
+
// src/users/db.ts
|
|
10390
10543
|
var bulkDeleteProcessing = async (dbUser) => {
|
|
10391
10544
|
const userId = dbUser._id;
|
|
10392
10545
|
await users_exports2.removeUser(dbUser);
|
|
@@ -10428,6 +10581,10 @@ var UserDB = class _UserDB {
|
|
|
10428
10581
|
if (await _UserDB.isPreventPasswordActions(user, account)) {
|
|
10429
10582
|
throw new HTTPError("Password change is disabled for this user", 400);
|
|
10430
10583
|
}
|
|
10584
|
+
const passwordValidation = validatePassword(password);
|
|
10585
|
+
if (!passwordValidation.valid) {
|
|
10586
|
+
throw new HTTPError(passwordValidation.error, 400);
|
|
10587
|
+
}
|
|
10431
10588
|
hashedPassword = opts.hashPassword ? await hash(password) : password;
|
|
10432
10589
|
} else if (dbUser) {
|
|
10433
10590
|
hashedPassword = dbUser.password;
|
|
@@ -11210,7 +11367,8 @@ var Writethrough = class {
|
|
|
11210
11367
|
var passwordReset_exports = {};
|
|
11211
11368
|
__export(passwordReset_exports, {
|
|
11212
11369
|
createCode: () => createCode2,
|
|
11213
|
-
getCode: () => getCode2
|
|
11370
|
+
getCode: () => getCode2,
|
|
11371
|
+
invalidateCode: () => invalidateCode
|
|
11214
11372
|
});
|
|
11215
11373
|
init_init();
|
|
11216
11374
|
var TTL_SECONDS2 = Duration.fromHours(1).toSeconds();
|
|
@@ -11224,10 +11382,16 @@ async function getCode2(code) {
|
|
|
11224
11382
|
const client = await getPasswordResetClient();
|
|
11225
11383
|
const value = await client.get(code);
|
|
11226
11384
|
if (!value) {
|
|
11227
|
-
throw
|
|
11385
|
+
throw new Error(
|
|
11386
|
+
"Provided information is not valid, cannot reset password - please try again."
|
|
11387
|
+
);
|
|
11228
11388
|
}
|
|
11229
11389
|
return value;
|
|
11230
11390
|
}
|
|
11391
|
+
async function invalidateCode(code) {
|
|
11392
|
+
const client = await getPasswordResetClient();
|
|
11393
|
+
await client.delete(code);
|
|
11394
|
+
}
|
|
11231
11395
|
|
|
11232
11396
|
// src/configs/configs.ts
|
|
11233
11397
|
init_context2();
|
|
@@ -13657,6 +13821,7 @@ var init8 = (opts = {}) => {
|
|
|
13657
13821
|
queue,
|
|
13658
13822
|
redis,
|
|
13659
13823
|
roles,
|
|
13824
|
+
security,
|
|
13660
13825
|
sessions,
|
|
13661
13826
|
tenancy,
|
|
13662
13827
|
timers,
|