@budibase/backend-core 2.11.44 → 2.12.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/dist/index.js CHANGED
@@ -9983,7 +9983,8 @@ var UserDB = class _UserDB {
9983
9983
  }
9984
9984
  }
9985
9985
  const change = dbUser ? 0 : 1;
9986
- return _UserDB.quotas.addUsers(change, async () => {
9986
+ const creatorsChange = isCreator2(dbUser) !== isCreator2(user) ? 1 : 0;
9987
+ return _UserDB.quotas.addUsers(change, creatorsChange, async () => {
9987
9988
  await validateUniqueUser(email, tenantId);
9988
9989
  let builtUser = await _UserDB.buildUser(user, opts, tenantId, dbUser);
9989
9990
  if (opts.currentUserId && opts.currentUserId === dbUser?._id) {
@@ -10027,6 +10028,7 @@ var UserDB = class _UserDB {
10027
10028
  const tenantId = getTenantId();
10028
10029
  let usersToSave = [];
10029
10030
  let newUsers = [];
10031
+ let newCreators = [];
10030
10032
  const emails = newUsersRequested.map((user) => user.email);
10031
10033
  const existingEmails = await searchExistingEmails(emails);
10032
10034
  const unsuccessful = [];
@@ -10042,49 +10044,56 @@ var UserDB = class _UserDB {
10042
10044
  }
10043
10045
  newUser.userGroups = groups;
10044
10046
  newUsers.push(newUser);
10047
+ if (isCreator2(newUser)) {
10048
+ newCreators.push(newUser);
10049
+ }
10045
10050
  }
10046
10051
  const account = await getAccountByTenantId(tenantId);
10047
- return _UserDB.quotas.addUsers(newUsers.length, async () => {
10048
- newUsers.forEach((user) => {
10049
- usersToSave.push(
10050
- _UserDB.buildUser(
10051
- user,
10052
- {
10053
- hashPassword: true,
10054
- requirePassword: user.requirePassword
10055
- },
10056
- tenantId,
10057
- void 0,
10058
- // no dbUser
10059
- account
10060
- )
10061
- );
10062
- });
10063
- const usersToBulkSave = await Promise.all(usersToSave);
10064
- await bulkUpdateGlobalUsers(usersToBulkSave);
10065
- for (const user of usersToBulkSave) {
10066
- await users_exports.addUser(tenantId, user._id, user.email);
10067
- await handleSaveEvents(user, void 0);
10068
- }
10069
- const saved = usersToBulkSave.map((user) => {
10052
+ return _UserDB.quotas.addUsers(
10053
+ newUsers.length,
10054
+ newCreators.length,
10055
+ async () => {
10056
+ newUsers.forEach((user) => {
10057
+ usersToSave.push(
10058
+ _UserDB.buildUser(
10059
+ user,
10060
+ {
10061
+ hashPassword: true,
10062
+ requirePassword: user.requirePassword
10063
+ },
10064
+ tenantId,
10065
+ void 0,
10066
+ // no dbUser
10067
+ account
10068
+ )
10069
+ );
10070
+ });
10071
+ const usersToBulkSave = await Promise.all(usersToSave);
10072
+ await bulkUpdateGlobalUsers(usersToBulkSave);
10073
+ for (const user of usersToBulkSave) {
10074
+ await users_exports.addUser(tenantId, user._id, user.email);
10075
+ await handleSaveEvents(user, void 0);
10076
+ }
10077
+ const saved = usersToBulkSave.map((user) => {
10078
+ return {
10079
+ _id: user._id,
10080
+ email: user.email
10081
+ };
10082
+ });
10083
+ if (Array.isArray(saved) && groups) {
10084
+ const groupPromises = [];
10085
+ const createdUserIds = saved.map((user) => user._id);
10086
+ for (let groupId of groups) {
10087
+ groupPromises.push(_UserDB.groups.addUsers(groupId, createdUserIds));
10088
+ }
10089
+ await Promise.all(groupPromises);
10090
+ }
10070
10091
  return {
10071
- _id: user._id,
10072
- email: user.email
10092
+ successful: saved,
10093
+ unsuccessful
10073
10094
  };
10074
- });
10075
- if (Array.isArray(saved) && groups) {
10076
- const groupPromises = [];
10077
- const createdUserIds = saved.map((user) => user._id);
10078
- for (let groupId of groups) {
10079
- groupPromises.push(_UserDB.groups.addUsers(groupId, createdUserIds));
10080
- }
10081
- await Promise.all(groupPromises);
10082
10095
  }
10083
- return {
10084
- successful: saved,
10085
- unsuccessful
10086
- };
10087
- });
10096
+ );
10088
10097
  }
10089
10098
  static async bulkDelete(userIds) {
10090
10099
  const db = getGlobalDB();
@@ -10115,10 +10124,11 @@ var UserDB = class _UserDB {
10115
10124
  _deleted: true
10116
10125
  }));
10117
10126
  const dbResponse = await bulkUpdateGlobalUsers(toDelete);
10118
- await _UserDB.quotas.removeUsers(toDelete.length);
10127
+ const creatorsToDelete = usersToDelete.filter(isCreator2);
10119
10128
  for (let user of usersToDelete) {
10120
10129
  await bulkDeleteProcessing(user);
10121
10130
  }
10131
+ await _UserDB.quotas.removeUsers(toDelete.length, creatorsToDelete.length);
10122
10132
  const userIndex = {};
10123
10133
  usersToDelete.reduce((prev, current) => {
10124
10134
  prev[current._id] = current;
@@ -10155,7 +10165,8 @@ var UserDB = class _UserDB {
10155
10165
  }
10156
10166
  await users_exports.removeUser(dbUser);
10157
10167
  await db.remove(userId, dbUser._rev);
10158
- await _UserDB.quotas.removeUsers(1);
10168
+ const creatorsToDelete = isCreator2(dbUser) ? 1 : 0;
10169
+ await _UserDB.quotas.removeUsers(1, creatorsToDelete);
10159
10170
  await handleDeleteEvents(dbUser);
10160
10171
  await user_exports.invalidateUser(userId);
10161
10172
  await invalidateSessions(userId, { reason: "deletion" });
@@ -10361,8 +10372,8 @@ var Writethrough = class {
10361
10372
  this.db = db;
10362
10373
  this.writeRateMs = writeRateMs;
10363
10374
  }
10364
- async put(doc) {
10365
- return put(this.db, doc, this.writeRateMs);
10375
+ async put(doc, writeRateMs = this.writeRateMs) {
10376
+ return put(this.db, doc, writeRateMs);
10366
10377
  }
10367
10378
  async get(id) {
10368
10379
  return get3(this.db, id);
@@ -10978,7 +10989,9 @@ async function roleToNumber(id) {
10978
10989
  if (isBuiltin(id)) {
10979
10990
  return builtinRoleToNumber(id);
10980
10991
  }
10981
- const hierarchy = await getUserRoleHierarchy(id);
10992
+ const hierarchy = await getUserRoleHierarchy(id, {
10993
+ defaultPublic: true
10994
+ });
10982
10995
  for (let role of hierarchy) {
10983
10996
  if (isBuiltin(role?.inherits)) {
10984
10997
  return builtinRoleToNumber(role.inherits) + 1;
@@ -11022,11 +11035,11 @@ async function getRole(roleId, opts) {
11022
11035
  }
11023
11036
  return role;
11024
11037
  }
11025
- async function getAllUserRoles(userRoleId) {
11038
+ async function getAllUserRoles(userRoleId, opts) {
11026
11039
  if (userRoleId === BUILTIN_IDS.ADMIN) {
11027
11040
  return getAllRoles();
11028
11041
  }
11029
- let currentRole = await getRole(userRoleId);
11042
+ let currentRole = await getRole(userRoleId, opts);
11030
11043
  let roles = currentRole ? [currentRole] : [];
11031
11044
  let roleIds = [userRoleId];
11032
11045
  while (currentRole && currentRole.inherits && roleIds.indexOf(currentRole.inherits) === -1) {
@@ -11042,8 +11055,8 @@ async function getUserRoleIdHierarchy(userRoleId) {
11042
11055
  const roles = await getUserRoleHierarchy(userRoleId);
11043
11056
  return roles.map((role) => role._id);
11044
11057
  }
11045
- async function getUserRoleHierarchy(userRoleId) {
11046
- return getAllUserRoles(userRoleId);
11058
+ async function getUserRoleHierarchy(userRoleId, opts) {
11059
+ return getAllUserRoles(userRoleId, opts);
11047
11060
  }
11048
11061
  function checkForRoleResourceArray(rolePerms, resourceId) {
11049
11062
  if (rolePerms && !Array.isArray(rolePerms[resourceId])) {