@budibase/pro 3.2.20 → 3.2.22

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
@@ -5744,7 +5744,7 @@ var src_exports = {};
5744
5744
  __export(src_exports, {
5745
5745
  Method: () => Method,
5746
5746
  ai: () => ai_exports2,
5747
- api: () => api_exports2,
5747
+ api: () => api_exports,
5748
5748
  auditLogs: () => auditLogs_exports3,
5749
5749
  automations: () => automations_exports,
5750
5750
  backups: () => backups_default,
@@ -8775,65 +8775,12 @@ var removeCustomAIConfigs = async (count) => {
8775
8775
  var users_exports = {};
8776
8776
  __export(users_exports, {
8777
8777
  addAppBuilder: () => addAppBuilder2,
8778
- createActivity: () => createActivity2,
8779
8778
  db: () => db3,
8780
8779
  removeAppBuilder: () => removeAppBuilder2
8781
8780
  });
8782
8781
 
8783
- // src/sdk/api/api.ts
8784
- var import_backend_core25 = require("@budibase/backend-core");
8785
- var api2 = new api_default(import_backend_core25.env.ACCOUNT_PORTAL_URL);
8786
- var createActivity = async (userId, data) => {
8787
- const response = await send(
8788
- (options) => api2.post(`/api/users/${userId}/activity`, options),
8789
- {
8790
- body: data
8791
- }
8792
- );
8793
- if (!response) {
8794
- return;
8795
- }
8796
- if (response.status !== 201) {
8797
- const text = await response.text();
8798
- const message = `Error creating account user activity: ${text}`;
8799
- import_backend_core25.logging.logAlert(message);
8800
- throw new Error(message);
8801
- }
8802
- return response.json();
8803
- };
8804
- var send = async (requestFn, baseOptions) => {
8805
- const headers = await authorizationHeaders();
8806
- const options = {
8807
- ...baseOptions,
8808
- headers: {
8809
- ...baseOptions.headers,
8810
- ...headers
8811
- }
8812
- };
8813
- return requestFn(options);
8814
- };
8815
- var authorizationHeaders = async () => {
8816
- if (import_backend_core25.env.SELF_HOSTED) {
8817
- const licenseInfo = await licenseInfo_exports.get();
8818
- if (licenseInfo.licenseKey) {
8819
- const licenseKey = licenseInfo.licenseKey;
8820
- return {
8821
- [import_backend_core25.constants.Header.LICENSE_KEY]: licenseKey
8822
- };
8823
- } else {
8824
- return {};
8825
- }
8826
- } else {
8827
- const tenantId = import_backend_core25.tenancy.getTenantId();
8828
- return {
8829
- [import_backend_core25.constants.Header.API_KEY]: import_backend_core25.env.ACCOUNT_PORTAL_API_KEY,
8830
- [import_backend_core25.constants.Header.TENANT_ID]: tenantId
8831
- };
8832
- }
8833
- };
8834
-
8835
8782
  // src/sdk/users/users.ts
8836
- var import_backend_core28 = require("@budibase/backend-core");
8783
+ var import_backend_core27 = require("@budibase/backend-core");
8837
8784
 
8838
8785
  // src/sdk/groups/index.ts
8839
8786
  var groups_exports2 = {};
@@ -8856,11 +8803,11 @@ __export(groups_exports2, {
8856
8803
  });
8857
8804
 
8858
8805
  // src/sdk/groups/groups.ts
8859
- var import_backend_core27 = require("@budibase/backend-core");
8806
+ var import_backend_core26 = require("@budibase/backend-core");
8860
8807
 
8861
8808
  // src/api/errors.ts
8862
- var import_backend_core26 = require("@budibase/backend-core");
8863
- var GroupNameUnavailableError = class extends import_backend_core26.HTTPError {
8809
+ var import_backend_core25 = require("@budibase/backend-core");
8810
+ var GroupNameUnavailableError = class extends import_backend_core25.HTTPError {
8864
8811
  constructor(groupName) {
8865
8812
  super(`Group name "${groupName}" is unavailable`, 409);
8866
8813
  }
@@ -8872,7 +8819,7 @@ async function findHighestRole(groups, appId) {
8872
8819
  let potentialRoles = [];
8873
8820
  for (let group of groups) {
8874
8821
  if (group.roles) {
8875
- const role = group.roles[import_backend_core27.db.getProdAppID(appId)];
8822
+ const role = group.roles[import_backend_core26.db.getProdAppID(appId)];
8876
8823
  if (role) {
8877
8824
  potentialRoles.push(role);
8878
8825
  }
@@ -8881,7 +8828,7 @@ async function findHighestRole(groups, appId) {
8881
8828
  const allRoleNumbersArr = await Promise.all(
8882
8829
  potentialRoles.map(async (roleId) => {
8883
8830
  return {
8884
- [roleId]: await import_backend_core27.roles.roleToNumber(roleId)
8831
+ [roleId]: await import_backend_core26.roles.roleToNumber(roleId)
8885
8832
  };
8886
8833
  })
8887
8834
  );
@@ -8900,7 +8847,7 @@ async function findHighestRole(groups, appId) {
8900
8847
  }
8901
8848
  return highestGroupRole;
8902
8849
  } catch (error) {
8903
- import_backend_core27.logging.logAlert(
8850
+ import_backend_core26.logging.logAlert(
8904
8851
  `Error finding higest role for ${groups.length} on app ${appId}`,
8905
8852
  error
8906
8853
  );
@@ -8922,7 +8869,7 @@ async function getGroupBuilderAppIds(user, opts) {
8922
8869
  return [];
8923
8870
  }
8924
8871
  const groups = await groupList(user.userGroups, opts?.groups);
8925
- const prodAppId = opts?.appId ? import_backend_core27.db.getProdAppID(opts?.appId) : null;
8872
+ const prodAppId = opts?.appId ? import_backend_core26.db.getProdAppID(opts?.appId) : null;
8926
8873
  let appIds = [];
8927
8874
  for (let group of groups) {
8928
8875
  const groupApps = group.builder?.apps;
@@ -8939,7 +8886,7 @@ async function getGroupRoleId(user, appId, opts) {
8939
8886
  return null;
8940
8887
  }
8941
8888
  let groups = await groupList(user.userGroups, opts?.groups);
8942
- const prodAppId = import_backend_core27.db.getProdAppID(appId);
8889
+ const prodAppId = import_backend_core26.db.getProdAppID(appId);
8943
8890
  if (user.roles?.[prodAppId]) {
8944
8891
  return user.roles[prodAppId];
8945
8892
  }
@@ -8965,7 +8912,7 @@ async function enrichUserRolesFromGroups(user) {
8965
8912
  }
8966
8913
  allGroupAppIds = [...new Set(allGroupAppIds)];
8967
8914
  for (let appId of allGroupAppIds) {
8968
- await import_backend_core27.context.doInAppContext(appId, async () => {
8915
+ await import_backend_core26.context.doInAppContext(appId, async () => {
8969
8916
  if (user.roles[appId]) {
8970
8917
  return;
8971
8918
  }
@@ -9004,11 +8951,11 @@ async function getCreatorsCountInGroup(group) {
9004
8951
  if (!usersInGroup.length) {
9005
8952
  return 0;
9006
8953
  }
9007
- const globalDb = import_backend_core27.tenancy.getGlobalDB();
8954
+ const globalDb = import_backend_core26.tenancy.getGlobalDB();
9008
8955
  const users7 = await Promise.all(
9009
8956
  usersInGroup.map((user) => globalDb.get(user._id))
9010
8957
  );
9011
- const creatorsInGroup = await Promise.all(users7.map(import_backend_core27.userUtils.isCreator));
8958
+ const creatorsInGroup = await Promise.all(users7.map(import_backend_core26.userUtils.isCreator));
9012
8959
  return creatorsInGroup.filter((x) => !!x).length;
9013
8960
  }
9014
8961
  async function save3(group) {
@@ -9019,13 +8966,13 @@ async function save3(group) {
9019
8966
  if (!group._id) {
9020
8967
  group._id = groups_exports.generateUserGroupID();
9021
8968
  await guardNameAvailability(group.name);
9022
- eventPromises.push(import_backend_core27.events.group.created(group));
8969
+ eventPromises.push(import_backend_core26.events.group.created(group));
9023
8970
  } else {
9024
8971
  const oldGroup = await groups_exports.get(group._id);
9025
8972
  if (oldGroup.name !== group.name) {
9026
8973
  await guardNameAvailability(group.name);
9027
8974
  }
9028
- eventPromises.push(import_backend_core27.events.group.updated(group));
8975
+ eventPromises.push(import_backend_core26.events.group.updated(group));
9029
8976
  if (JSON.stringify(oldGroup.roles) !== JSON.stringify(group.roles)) {
9030
8977
  const usersCountInGroup = oldGroup.users?.length || 0;
9031
8978
  let creatorsCountBeforeSave = 0;
@@ -9033,13 +8980,13 @@ async function save3(group) {
9033
8980
  creatorsCountBeforeSave = await getCreatorsCountInGroup(oldGroup);
9034
8981
  }
9035
8982
  if (Object.values(group.roles).includes(
9036
- import_backend_core27.roles.BUILTIN_ROLE_IDS.ADMIN
8983
+ import_backend_core26.roles.BUILTIN_ROLE_IDS.ADMIN
9037
8984
  )) {
9038
8985
  newCreators = usersCountInGroup - creatorsCountBeforeSave;
9039
8986
  } else {
9040
8987
  newCreators = -usersCountInGroup;
9041
8988
  }
9042
- eventPromises.push(import_backend_core27.events.group.permissionsEdited(group));
8989
+ eventPromises.push(import_backend_core26.events.group.permissionsEdited(group));
9043
8990
  }
9044
8991
  }
9045
8992
  await Promise.all(eventPromises);
@@ -9070,12 +9017,12 @@ async function remove(groupId, revision) {
9070
9017
  throw new Error("Group not found");
9071
9018
  }
9072
9019
  const isAdminGroup = Object.values(group.roles || {}).includes(
9073
- import_backend_core27.roles.BUILTIN_ROLE_IDS.ADMIN
9020
+ import_backend_core26.roles.BUILTIN_ROLE_IDS.ADMIN
9074
9021
  );
9075
9022
  let recalculateCreatorsQuotasFn = () => {
9076
9023
  };
9077
9024
  if (isAdminGroup) {
9078
- const globalDb = import_backend_core27.tenancy.getGlobalDB();
9025
+ const globalDb = import_backend_core26.tenancy.getGlobalDB();
9079
9026
  const usersInGroup = await groups_exports.getGroupUsers(groupId);
9080
9027
  const users7 = await Promise.all(
9081
9028
  usersInGroup.map((user) => {
@@ -9087,7 +9034,7 @@ async function remove(groupId, revision) {
9087
9034
  userGroups: user.userGroups.filter((grp) => grp !== groupId)
9088
9035
  }));
9089
9036
  const creatorsEval = await Promise.all(
9090
- usersWithoutGroup.map(import_backend_core27.userUtils.isCreator)
9037
+ usersWithoutGroup.map(import_backend_core26.userUtils.isCreator)
9091
9038
  );
9092
9039
  const creatorsCount = creatorsEval.filter((x) => !!x).length;
9093
9040
  const creatorsToRemove = usersInGroup.length - creatorsCount;
@@ -9096,14 +9043,14 @@ async function remove(groupId, revision) {
9096
9043
  }
9097
9044
  }
9098
9045
  let resp = await groups_exports.destroy(groupId, revision);
9099
- await import_backend_core27.events.group.deleted(group);
9046
+ await import_backend_core26.events.group.deleted(group);
9100
9047
  await removeGroup();
9101
9048
  await recalculateCreatorsQuotasFn();
9102
9049
  return resp;
9103
9050
  }
9104
9051
  async function addUsers2(groupId, userIds) {
9105
9052
  const group = await groups_exports.get(groupId);
9106
- const users7 = await import_backend_core27.users.bulkGetGlobalUsersById(userIds);
9053
+ const users7 = await import_backend_core26.users.bulkGetGlobalUsersById(userIds);
9107
9054
  let toUpdate = [];
9108
9055
  for (let user of users7) {
9109
9056
  if (!user.userGroups) {
@@ -9120,12 +9067,12 @@ async function addUsers2(groupId, userIds) {
9120
9067
  ...user,
9121
9068
  userGroups: [...user?.userGroups || [], groupId]
9122
9069
  }));
9123
- await import_backend_core27.users.bulkUpdateGlobalUsers(updatedUsers);
9070
+ await import_backend_core26.users.bulkUpdateGlobalUsers(updatedUsers);
9124
9071
  const isAdminGroup = Object.values(group.roles || {}).includes(
9125
- import_backend_core27.roles.BUILTIN_ROLE_IDS.ADMIN
9072
+ import_backend_core26.roles.BUILTIN_ROLE_IDS.ADMIN
9126
9073
  );
9127
9074
  if (isAdminGroup) {
9128
- const creatorsEval = await Promise.all(toUpdate.map(import_backend_core27.userUtils.isCreator));
9075
+ const creatorsEval = await Promise.all(toUpdate.map(import_backend_core26.userUtils.isCreator));
9129
9076
  const creatorsCount = creatorsEval.filter((x) => !!x).length;
9130
9077
  const creatorsToAdd = toUpdate.length - creatorsCount;
9131
9078
  if (creatorsToAdd) {
@@ -9134,15 +9081,15 @@ async function addUsers2(groupId, userIds) {
9134
9081
  }
9135
9082
  let promises = [];
9136
9083
  for (let userId of userIds) {
9137
- promises.push(import_backend_core27.cache.user.invalidateUser(userId));
9084
+ promises.push(import_backend_core26.cache.user.invalidateUser(userId));
9138
9085
  }
9139
9086
  await Promise.all(promises);
9140
- await import_backend_core27.events.group.usersAdded(updatedUsers.length, group);
9087
+ await import_backend_core26.events.group.usersAdded(updatedUsers.length, group);
9141
9088
  return updatedUsers;
9142
9089
  }
9143
9090
  async function removeUsers2(groupId, userIds) {
9144
9091
  const group = await groups_exports.get(groupId);
9145
- const users7 = await import_backend_core27.users.bulkGetGlobalUsersById(userIds);
9092
+ const users7 = await import_backend_core26.users.bulkGetGlobalUsersById(userIds);
9146
9093
  let toUpdate = [];
9147
9094
  for (let user of users7) {
9148
9095
  if (!user.userGroups || !user.userGroups.includes(groupId)) {
@@ -9152,12 +9099,12 @@ async function removeUsers2(groupId, userIds) {
9152
9099
  user.userGroups.splice(idx, 1);
9153
9100
  toUpdate.push(user);
9154
9101
  }
9155
- await import_backend_core27.users.bulkUpdateGlobalUsers(toUpdate);
9102
+ await import_backend_core26.users.bulkUpdateGlobalUsers(toUpdate);
9156
9103
  const isAdminGroup = Object.values(group.roles || {}).includes(
9157
- import_backend_core27.roles.BUILTIN_ROLE_IDS.ADMIN
9104
+ import_backend_core26.roles.BUILTIN_ROLE_IDS.ADMIN
9158
9105
  );
9159
9106
  if (isAdminGroup) {
9160
- const creatorsEval = await Promise.all(toUpdate.map(import_backend_core27.userUtils.isCreator));
9107
+ const creatorsEval = await Promise.all(toUpdate.map(import_backend_core26.userUtils.isCreator));
9161
9108
  const creatorsCount = creatorsEval.filter((x) => !!x).length;
9162
9109
  const creatorsToRemove = toUpdate.length - creatorsCount;
9163
9110
  if (creatorsToRemove) {
@@ -9166,11 +9113,11 @@ async function removeUsers2(groupId, userIds) {
9166
9113
  }
9167
9114
  let promises = [];
9168
9115
  for (let userId of userIds) {
9169
- promises.push(import_backend_core27.cache.user.invalidateUser(userId));
9116
+ promises.push(import_backend_core26.cache.user.invalidateUser(userId));
9170
9117
  }
9171
9118
  await Promise.all(promises);
9172
9119
  if (toUpdate.length) {
9173
- await import_backend_core27.events.group.usersDeleted(toUpdate.length, group);
9120
+ await import_backend_core26.events.group.usersDeleted(toUpdate.length, group);
9174
9121
  }
9175
9122
  return toUpdate;
9176
9123
  }
@@ -9207,7 +9154,7 @@ async function addAppBuilder(groupId, appId) {
9207
9154
  if (!await isAppBuildersEnabled()) {
9208
9155
  throw new Error("Feature not enabled, please check license");
9209
9156
  }
9210
- const prodAppId = import_backend_core27.db.getProdAppID(appId);
9157
+ const prodAppId = import_backend_core26.db.getProdAppID(appId);
9211
9158
  const group = await get4(groupId);
9212
9159
  group.builder ??= { apps: [] };
9213
9160
  if (!group.builder.apps.includes(appId)) {
@@ -9219,7 +9166,7 @@ async function removeAppBuilder(groupId, appId) {
9219
9166
  if (!await isAppBuildersEnabled()) {
9220
9167
  throw new Error("Feature not enabled, please check license");
9221
9168
  }
9222
- const prodAppId = import_backend_core27.db.getProdAppID(appId);
9169
+ const prodAppId = import_backend_core26.db.getProdAppID(appId);
9223
9170
  const group = await get4(groupId);
9224
9171
  if (group.builder?.apps.includes(appId)) {
9225
9172
  group.builder.apps = group.builder.apps.filter((id) => id !== prodAppId);
@@ -9228,10 +9175,10 @@ async function removeAppBuilder(groupId, appId) {
9228
9175
  }
9229
9176
  async function adjustGroupCreatorsQuotas() {
9230
9177
  if (!await isUserGroupsEnabled()) {
9231
- const globalDb = import_backend_core27.tenancy.getGlobalDB();
9178
+ const globalDb = import_backend_core26.tenancy.getGlobalDB();
9232
9179
  const groups = await fetch3() || [];
9233
9180
  const adminGroups = groups.filter(
9234
- (group) => Object.values(group?.roles || {}).includes(import_backend_core27.roles.BUILTIN_ROLE_IDS.ADMIN)
9181
+ (group) => Object.values(group?.roles || {}).includes(import_backend_core26.roles.BUILTIN_ROLE_IDS.ADMIN)
9235
9182
  );
9236
9183
  for (let group of adminGroups) {
9237
9184
  const usersInGroup = await groups_exports.getGroupUsers(group._id);
@@ -9245,7 +9192,7 @@ async function adjustGroupCreatorsQuotas() {
9245
9192
  userGroups: user.userGroups.filter((grp) => grp !== group._id)
9246
9193
  }));
9247
9194
  const creatorsEval = await Promise.all(
9248
- usersWithoutGroup.map(import_backend_core27.userUtils.isCreator)
9195
+ usersWithoutGroup.map(import_backend_core26.userUtils.isCreator)
9249
9196
  );
9250
9197
  const creatorsCount = creatorsEval.filter((x) => !!x).length;
9251
9198
  const creatorsToRemove = usersInGroup.length - creatorsCount;
@@ -9258,25 +9205,19 @@ async function adjustGroupCreatorsQuotas() {
9258
9205
  }
9259
9206
 
9260
9207
  // src/sdk/users/users.ts
9261
- import_backend_core28.users.UserDB.init(quotas_exports5, groups_exports2, features_exports2);
9262
- var db3 = import_backend_core28.users.UserDB;
9263
- var createActivity2 = async (userId) => {
9264
- const data = {
9265
- timestamp: Date.now()
9266
- };
9267
- return createActivity(userId, data);
9268
- };
9208
+ import_backend_core27.users.UserDB.init(quotas_exports5, groups_exports2, features_exports2);
9209
+ var db3 = import_backend_core27.users.UserDB;
9269
9210
  async function addAppBuilder2(user, appId) {
9270
9211
  if (!await isAppBuildersEnabled()) {
9271
9212
  throw new Error("Feature not enabled, please check license");
9272
9213
  }
9273
- await import_backend_core28.users.addAppBuilder(user, appId);
9214
+ await import_backend_core27.users.addAppBuilder(user, appId);
9274
9215
  }
9275
9216
  async function removeAppBuilder2(user, appId) {
9276
9217
  if (!await isAppBuildersEnabled()) {
9277
9218
  throw new Error("Feature not enabled, please check license");
9278
9219
  }
9279
- await import_backend_core28.users.removeAppBuilder(user, appId);
9220
+ await import_backend_core27.users.removeAppBuilder(user, appId);
9280
9221
  }
9281
9222
 
9282
9223
  // src/sdk/automations/index.ts
@@ -9293,14 +9234,14 @@ __export(logging_exports, {
9293
9234
  storeLog: () => storeLog
9294
9235
  });
9295
9236
  var import_types25 = require("@budibase/types");
9296
- var import_backend_core31 = require("@budibase/backend-core");
9237
+ var import_backend_core30 = require("@budibase/backend-core");
9297
9238
 
9298
9239
  // src/db/automations.ts
9299
9240
  var import_types24 = require("@budibase/types");
9300
- var import_backend_core30 = require("@budibase/backend-core");
9241
+ var import_backend_core29 = require("@budibase/backend-core");
9301
9242
 
9302
9243
  // src/utilities/delay.ts
9303
- var import_backend_core29 = require("@budibase/backend-core");
9244
+ var import_backend_core28 = require("@budibase/backend-core");
9304
9245
  async function backOff(fn, errMsg) {
9305
9246
  let error;
9306
9247
  let attempts = 5, success = false, response, first = true;
@@ -9318,7 +9259,7 @@ async function backOff(fn, errMsg) {
9318
9259
  }
9319
9260
  }
9320
9261
  if (!success) {
9321
- import_backend_core29.logging.logWarn(`Failed to backoff: ${errMsg}`, error);
9262
+ import_backend_core28.logging.logWarn(`Failed to backoff: ${errMsg}`, error);
9322
9263
  }
9323
9264
  return response;
9324
9265
  }
@@ -9331,7 +9272,7 @@ var {
9331
9272
  AutomationViewMode: AutomationViewMode2,
9332
9273
  ViewName: ViewName3,
9333
9274
  getQueryIndex
9334
- } = import_backend_core30.db;
9275
+ } = import_backend_core29.db;
9335
9276
  var EARLIEST_DATE = (/* @__PURE__ */ new Date(0)).toISOString();
9336
9277
  var EXPIRED_LIMIT = 100;
9337
9278
  var oldestLogDate = async () => {
@@ -9384,9 +9325,9 @@ function generateAutomationLogID(isoDate, status2, automationId) {
9384
9325
  return `${DocumentType4.AUTOMATION_LOG}${SEPARATOR4}${isoDate}${SEPARATOR4}${automationId}${SEPARATOR4}${status2}`;
9385
9326
  }
9386
9327
  async function getAllLogs(startDate, endDate, opts = { docs: true }) {
9387
- let db4 = import_backend_core30.context.getProdAppDB();
9328
+ let db4 = import_backend_core29.context.getProdAppDB();
9388
9329
  if (!await db4.exists()) {
9389
- db4 = import_backend_core30.context.getDevAppDB();
9330
+ db4 = import_backend_core29.context.getDevAppDB();
9390
9331
  }
9391
9332
  const optional = { status: opts.status };
9392
9333
  const limit = opts?.limit ? opts.limit : opts?.paginate ? GENERIC_PAGE_SIZE + 1 : void 0;
@@ -9404,9 +9345,9 @@ async function getAllLogs(startDate, endDate, opts = { docs: true }) {
9404
9345
  });
9405
9346
  }
9406
9347
  async function getLogsByView(startDate, endDate, viewParams = {}) {
9407
- let db4 = import_backend_core30.context.getProdAppDB();
9348
+ let db4 = import_backend_core29.context.getProdAppDB();
9408
9349
  if (!await db4.exists()) {
9409
- db4 = import_backend_core30.context.getDevAppDB();
9350
+ db4 = import_backend_core29.context.getDevAppDB();
9410
9351
  }
9411
9352
  let response;
9412
9353
  try {
@@ -9436,7 +9377,7 @@ async function getLogsByView(startDate, endDate, viewParams = {}) {
9436
9377
  return pagination(response, { paginate: true, pageSize: GENERIC_PAGE_SIZE });
9437
9378
  }
9438
9379
  async function writeLog(automation, results) {
9439
- const db4 = import_backend_core30.context.getProdAppDB();
9380
+ const db4 = import_backend_core29.context.getProdAppDB();
9440
9381
  const automationId = automation._id;
9441
9382
  const name2 = automation.name;
9442
9383
  const status2 = getStatus(results);
@@ -9455,12 +9396,12 @@ async function writeLog(automation, results) {
9455
9396
  return id;
9456
9397
  }
9457
9398
  async function updateAppMetadataWithErrors(logIds, { clearing } = { clearing: false }) {
9458
- const db4 = import_backend_core30.context.getProdAppDB();
9399
+ const db4 = import_backend_core29.context.getProdAppDB();
9459
9400
  await backOff(async () => {
9460
- const metadata2 = await db4.get(import_backend_core30.db.DocumentType.APP_METADATA);
9401
+ const metadata2 = await db4.get(import_backend_core29.db.DocumentType.APP_METADATA);
9461
9402
  for (let logId of logIds) {
9462
- const parts = logId.split(import_backend_core30.db.SEPARATOR);
9463
- const autoId = `${parts[parts.length - 3]}${import_backend_core30.db.SEPARATOR}${parts[parts.length - 2]}`;
9403
+ const parts = logId.split(import_backend_core29.db.SEPARATOR);
9404
+ const autoId = `${parts[parts.length - 3]}${import_backend_core29.db.SEPARATOR}${parts[parts.length - 2]}`;
9464
9405
  let errors = {};
9465
9406
  if (metadata2.automationErrors) {
9466
9407
  errors = metadata2.automationErrors;
@@ -9480,7 +9421,7 @@ async function updateAppMetadataWithErrors(logIds, { clearing } = { clearing: fa
9480
9421
  metadata2.automationErrors = errors;
9481
9422
  }
9482
9423
  await db4.put(metadata2);
9483
- await import_backend_core30.cache.app.invalidateAppMetadata(metadata2.appId, metadata2);
9424
+ await import_backend_core29.cache.app.invalidateAppMetadata(metadata2.appId, metadata2);
9484
9425
  }, "Failed to update app metadata with automation log error");
9485
9426
  }
9486
9427
  async function getExpiredLogs() {
@@ -9496,7 +9437,7 @@ async function getExpiredLogs() {
9496
9437
  }
9497
9438
  }
9498
9439
  async function clearOldHistory() {
9499
- const db4 = import_backend_core30.context.getProdAppDB();
9440
+ const db4 = import_backend_core29.context.getProdAppDB();
9500
9441
  try {
9501
9442
  const expired = await getExpiredLogs();
9502
9443
  if (!expired.data || expired.data.length === 0) {
@@ -9508,7 +9449,7 @@ async function clearOldHistory() {
9508
9449
  _deleted: true
9509
9450
  }));
9510
9451
  const errorLogIds = expired.data.filter((doc2) => {
9511
- const parts = doc2.id.split(import_backend_core30.db.SEPARATOR);
9452
+ const parts = doc2.id.split(import_backend_core29.db.SEPARATOR);
9512
9453
  const status2 = parts[parts.length - 1];
9513
9454
  return status2 === import_types24.AutomationStatus.ERROR;
9514
9455
  }).map((doc2) => doc2.id);
@@ -9517,7 +9458,7 @@ async function clearOldHistory() {
9517
9458
  await updateAppMetadataWithErrors(errorLogIds, { clearing: true });
9518
9459
  }
9519
9460
  } catch (err) {
9520
- import_backend_core30.logging.logAlert(
9461
+ import_backend_core29.logging.logAlert(
9521
9462
  `Failed to cleanup automation log history - Database "${db4.name}"`,
9522
9463
  err
9523
9464
  );
@@ -9559,7 +9500,7 @@ async function logSearch(options) {
9559
9500
  );
9560
9501
  }
9561
9502
  async function storeLog(automation, results) {
9562
- if (!import_backend_core31.db.isProdAppID(import_backend_core31.context.getAppId())) {
9503
+ if (!import_backend_core30.db.isProdAppID(import_backend_core30.context.getAppId())) {
9563
9504
  return;
9564
9505
  }
9565
9506
  const status2 = getStatus(results);
@@ -9578,7 +9519,7 @@ __export(plugins_exports, {
9578
9519
  storePlugin: () => storePlugin
9579
9520
  });
9580
9521
  var import_types26 = require("@budibase/types");
9581
- var import_backend_core32 = require("@budibase/backend-core");
9522
+ var import_backend_core31 = require("@budibase/backend-core");
9582
9523
 
9583
9524
  // src/utilities/fileSystem.ts
9584
9525
  var import_fs3 = __toESM(require("fs"));
@@ -9589,11 +9530,11 @@ function loadJSFile(directory2, name2) {
9589
9530
 
9590
9531
  // src/sdk/plugins/index.ts
9591
9532
  async function storePlugin(metadata, directory, source) {
9592
- const db = import_backend_core32.tenancy.getGlobalDB();
9533
+ const db = import_backend_core31.tenancy.getGlobalDB();
9593
9534
  const version = metadata.package.version, name = metadata.package.name, description = metadata.package.description, hash = metadata.schema.hash;
9594
- const bucketPath = import_backend_core32.objectStore.getPluginS3Dir(name);
9595
- const files = await import_backend_core32.objectStore.uploadDirectory(
9596
- import_backend_core32.objectStore.ObjectStoreBuckets.PLUGINS,
9535
+ const bucketPath = import_backend_core31.objectStore.getPluginS3Dir(name);
9536
+ const files = await import_backend_core31.objectStore.uploadDirectory(
9537
+ import_backend_core31.objectStore.ObjectStoreBuckets.PLUGINS,
9597
9538
  directory,
9598
9539
  bucketPath
9599
9540
  );
@@ -9612,7 +9553,7 @@ async function storePlugin(metadata, directory, source) {
9612
9553
  }
9613
9554
  }
9614
9555
  const iconFileName = iconFile ? iconFile.name : null;
9615
- const pluginId = import_backend_core32.db.generatePluginID(name);
9556
+ const pluginId = import_backend_core31.db.generatePluginID(name);
9616
9557
  let rev;
9617
9558
  try {
9618
9559
  const existing = await db.get(pluginId);
@@ -9640,7 +9581,7 @@ async function storePlugin(metadata, directory, source) {
9640
9581
  }
9641
9582
  const write = async () => {
9642
9583
  const response = await db.put(doc);
9643
- await import_backend_core32.events.plugin.imported(doc);
9584
+ await import_backend_core31.events.plugin.imported(doc);
9644
9585
  return {
9645
9586
  ...doc,
9646
9587
  _rev: response.rev
@@ -9653,16 +9594,16 @@ async function storePlugin(metadata, directory, source) {
9653
9594
  }
9654
9595
  }
9655
9596
  async function deletePlugin(pluginId2) {
9656
- const db4 = import_backend_core32.tenancy.getGlobalDB();
9597
+ const db4 = import_backend_core31.tenancy.getGlobalDB();
9657
9598
  try {
9658
9599
  const plugin = await db4.get(pluginId2);
9659
- const bucketPath2 = import_backend_core32.objectStore.getPluginS3Dir(plugin.name);
9660
- await import_backend_core32.objectStore.deleteFolder(
9661
- import_backend_core32.objectStore.ObjectStoreBuckets.PLUGINS,
9600
+ const bucketPath2 = import_backend_core31.objectStore.getPluginS3Dir(plugin.name);
9601
+ await import_backend_core31.objectStore.deleteFolder(
9602
+ import_backend_core31.objectStore.ObjectStoreBuckets.PLUGINS,
9662
9603
  bucketPath2
9663
9604
  );
9664
9605
  await db4.remove(pluginId2, plugin._rev);
9665
- await import_backend_core32.events.plugin.deleted(plugin);
9606
+ await import_backend_core31.events.plugin.deleted(plugin);
9666
9607
  await removePlugin();
9667
9608
  } catch (err) {
9668
9609
  const errMsg = err?.message ? err?.message : err;
@@ -9670,14 +9611,14 @@ async function deletePlugin(pluginId2) {
9670
9611
  }
9671
9612
  }
9672
9613
  async function checkPluginQuotas() {
9673
- const db4 = import_backend_core32.tenancy.getGlobalDB();
9614
+ const db4 = import_backend_core31.tenancy.getGlobalDB();
9674
9615
  try {
9675
- const allPlugins = await db4.allDocs(import_backend_core32.db.getPluginParams());
9616
+ const allPlugins = await db4.allDocs(import_backend_core31.db.getPluginParams());
9676
9617
  const pluginCount = allPlugins.rows.length;
9677
9618
  console.log(`Syncing plugin count: ${pluginCount}`);
9678
9619
  await updatePluginCount(pluginCount);
9679
9620
  } catch (err) {
9680
- import_backend_core32.logging.logAlert("Unable to retrieve plugins for quota check", err);
9621
+ import_backend_core31.logging.logAlert("Unable to retrieve plugins for quota check", err);
9681
9622
  }
9682
9623
  }
9683
9624
 
@@ -9694,9 +9635,9 @@ __export(environmentVariables_exports2, {
9694
9635
 
9695
9636
  // src/sdk/environmentVariables/environmentVariables.ts
9696
9637
  var import_types27 = require("@budibase/types");
9697
- var import_backend_core33 = require("@budibase/backend-core");
9638
+ var import_backend_core32 = require("@budibase/backend-core");
9698
9639
  function isEncryptionKeyAvailable() {
9699
- return !!import_backend_core33.env.ENCRYPTION_KEY;
9640
+ return !!import_backend_core32.env.ENCRYPTION_KEY;
9700
9641
  }
9701
9642
  async function fetch4() {
9702
9643
  const doc2 = await environmentVariables_exports.get();
@@ -9764,10 +9705,10 @@ __export(auditLogs_exports3, {
9764
9705
  var import_types30 = require("@budibase/types");
9765
9706
 
9766
9707
  // src/db/auditLogs.ts
9767
- var import_backend_core34 = require("@budibase/backend-core");
9708
+ var import_backend_core33 = require("@budibase/backend-core");
9768
9709
  var import_types28 = require("@budibase/types");
9769
9710
  var MemoryStream = require("memorystream");
9770
- var builder = new import_backend_core34.sql.Sql(import_types28.SqlClient.SQL_LITE);
9711
+ var builder = new import_backend_core33.sql.Sql(import_types28.SqlClient.SQL_LITE);
9771
9712
  async function getAuditLogSqlQuery(filters, bookmark, limit) {
9772
9713
  const request = {
9773
9714
  operation: import_types28.Operation.READ,
@@ -9795,7 +9736,7 @@ async function getAuditLogSqlQuery(filters, bookmark, limit) {
9795
9736
  return { sql: query.sql, bindings: query.bindings };
9796
9737
  }
9797
9738
  function generateAuditLogID(timestamp) {
9798
- return `${import_backend_core34.DocumentType.AUDIT_LOG}${import_backend_core34.SEPARATOR}${timestamp}${import_backend_core34.SEPARATOR}${import_backend_core34.utils.newid()}`;
9739
+ return `${import_backend_core33.DocumentType.AUDIT_LOG}${import_backend_core33.SEPARATOR}${timestamp}${import_backend_core33.SEPARATOR}${import_backend_core33.utils.newid()}`;
9799
9740
  }
9800
9741
  async function save4(doc2) {
9801
9742
  if (!doc2._id) {
@@ -9805,21 +9746,21 @@ async function save4(doc2) {
9805
9746
  doc2.type = import_types28.AUDIT_LOG_TYPE;
9806
9747
  }
9807
9748
  try {
9808
- const db4 = import_backend_core34.context.getAuditLogsDB();
9749
+ const db4 = import_backend_core33.context.getAuditLogsDB();
9809
9750
  const response = await db4.put(doc2);
9810
9751
  return {
9811
9752
  ...doc2,
9812
9753
  _rev: response.rev
9813
9754
  };
9814
9755
  } catch (err) {
9815
- import_backend_core34.logging.logAlert("Failed to write audit log", err);
9756
+ import_backend_core33.logging.logAlert("Failed to write audit log", err);
9816
9757
  }
9817
9758
  }
9818
9759
  async function searchSQL(filters, bookmark, opts) {
9819
9760
  if (!bookmark) {
9820
9761
  bookmark = 1;
9821
9762
  }
9822
- const db4 = import_backend_core34.context.getAuditLogsDB();
9763
+ const db4 = import_backend_core33.context.getAuditLogsDB();
9823
9764
  try {
9824
9765
  const limit = GENERIC_PAGE_SIZE + 1;
9825
9766
  const mainQuery = await getAuditLogSqlQuery(filters, bookmark, limit);
@@ -9851,9 +9792,9 @@ async function searchSQL(filters, bookmark, opts) {
9851
9792
  }
9852
9793
  }
9853
9794
  async function migrate() {
9854
- const db4 = import_backend_core34.context.getAuditLogsDB();
9795
+ const db4 = import_backend_core33.context.getAuditLogsDB();
9855
9796
  const auditLogs = (await db4.allDocs(
9856
- import_backend_core34.db.getDocParams(import_backend_core34.DocumentType.AUDIT_LOG, null, {
9797
+ import_backend_core33.db.getDocParams(import_backend_core33.DocumentType.AUDIT_LOG, null, {
9857
9798
  include_docs: true
9858
9799
  })
9859
9800
  )).rows.map((row) => row.doc);
@@ -9864,12 +9805,12 @@ async function migrate() {
9864
9805
  await db4.bulkDocs(updatedLogs);
9865
9806
  }
9866
9807
  function dump(params) {
9867
- const db4 = import_backend_core34.context.getAuditLogsDB();
9808
+ const db4 = import_backend_core33.context.getAuditLogsDB();
9868
9809
  const stream = new MemoryStream();
9869
9810
  const promise = db4.dump(stream, {
9870
9811
  filter: (doc2) => {
9871
9812
  const auditLog = doc2;
9872
- if (!auditLog._id?.startsWith(import_backend_core34.DocumentType.AUDIT_LOG)) {
9813
+ if (!auditLog._id?.startsWith(import_backend_core33.DocumentType.AUDIT_LOG)) {
9873
9814
  return false;
9874
9815
  }
9875
9816
  let allMatched = true;
@@ -9910,14 +9851,14 @@ function dump(params) {
9910
9851
  }
9911
9852
 
9912
9853
  // src/sdk/auditLogs/auditLogs.ts
9913
- var import_backend_core36 = require("@budibase/backend-core");
9854
+ var import_backend_core35 = require("@budibase/backend-core");
9914
9855
 
9915
9856
  // src/sdk/auditLogs/utils.ts
9916
9857
  var import_types29 = require("@budibase/types");
9917
9858
  var import_string_templates = require("@budibase/string-templates");
9918
- var import_backend_core35 = require("@budibase/backend-core");
9919
- var MIN_DATE = import_backend_core35.constants.MIN_VALID_DATE.toISOString();
9920
- var MAX_DATE2 = import_backend_core35.constants.MAX_VALID_DATE.toISOString();
9859
+ var import_backend_core34 = require("@budibase/backend-core");
9860
+ var MIN_DATE = import_backend_core34.constants.MIN_VALID_DATE.toISOString();
9861
+ var MAX_DATE2 = import_backend_core34.constants.MAX_VALID_DATE.toISOString();
9921
9862
  function fillDates(params) {
9922
9863
  if (params.startDate || params.endDate) {
9923
9864
  params.startDate = params.startDate || MIN_DATE;
@@ -9927,7 +9868,7 @@ function fillDates(params) {
9927
9868
  }
9928
9869
  async function getSearchFilters(params) {
9929
9870
  if (Array.isArray(params.appIds)) {
9930
- params.appIds = params.appIds.map((appId) => import_backend_core35.db.getProdAppID(appId));
9871
+ params.appIds = params.appIds.map((appId) => import_backend_core34.db.getProdAppID(appId));
9931
9872
  }
9932
9873
  const filter2 = {};
9933
9874
  function addStringParams(key, params2) {
@@ -10005,7 +9946,7 @@ function getEventFriendlyName(event, metadata2) {
10005
9946
 
10006
9947
  // src/sdk/auditLogs/auditLogs.ts
10007
9948
  async function write2(event, metadata2, opts) {
10008
- if (!await isAuditLogsEnabled() || !import_backend_core36.utils.isAudited(event)) {
9949
+ if (!await isAuditLogsEnabled() || !import_backend_core35.utils.isAudited(event)) {
10009
9950
  return;
10010
9951
  }
10011
9952
  const friendly = getEventFriendlyName(event, metadata2);
@@ -10026,18 +9967,18 @@ async function write2(event, metadata2, opts) {
10026
9967
  const fallback = {};
10027
9968
  try {
10028
9969
  if (opts?.appId) {
10029
- doc2.appId = import_backend_core36.db.getProdAppID(opts.appId);
10030
- const appMetadata = await import_backend_core36.cache.app.getAppMetadata(opts.appId);
9970
+ doc2.appId = import_backend_core35.db.getProdAppID(opts.appId);
9971
+ const appMetadata = await import_backend_core35.cache.app.getAppMetadata(opts.appId);
10031
9972
  if ("name" in appMetadata) {
10032
9973
  fallback.appName = appMetadata.name;
10033
9974
  }
10034
9975
  }
10035
9976
  if (opts?.userId) {
10036
- const user = await import_backend_core36.users.getById(opts?.userId);
9977
+ const user = await import_backend_core35.users.getById(opts?.userId);
10037
9978
  fallback.email = user.email;
10038
9979
  }
10039
9980
  } catch (err) {
10040
- import_backend_core36.logging.logAlert(
9981
+ import_backend_core35.logging.logAlert(
10041
9982
  "Failed to retrieve fallback information for audit log",
10042
9983
  err
10043
9984
  );
@@ -10049,17 +9990,17 @@ async function enrich(logs) {
10049
9990
  const allUserIds = logs.map((log) => log.userId);
10050
9991
  const hasAppIdLogs = logs.filter((log) => log.appId);
10051
9992
  const allAppIds = hasAppIdLogs.map(
10052
- (log) => import_backend_core36.db.getDevAppID(log.appId)
9993
+ (log) => import_backend_core35.db.getDevAppID(log.appId)
10053
9994
  );
10054
- const userList = await import_backend_core36.users.bulkGetGlobalUsersById(
9995
+ const userList = await import_backend_core35.users.bulkGetGlobalUsersById(
10055
9996
  [...new Set(allUserIds)],
10056
9997
  { cleanup: true }
10057
9998
  );
10058
- const appList = await import_backend_core36.db.getAppsByIDs([...new Set(allAppIds)]);
9999
+ const appList = await import_backend_core35.db.getAppsByIDs([...new Set(allAppIds)]);
10059
10000
  let enriched = [];
10060
10001
  for (let log of logs) {
10061
10002
  const user = userList.find((user2) => user2?._id === log.userId);
10062
- const app = appList.find((app2) => import_backend_core36.db.isSameAppID(app2?.appId, log.appId));
10003
+ const app = appList.find((app2) => import_backend_core35.db.isSameAppID(app2?.appId, log.appId));
10063
10004
  const enrichedLog = {
10064
10005
  event: log.event,
10065
10006
  timestamp: log.timestamp,
@@ -10144,7 +10085,7 @@ __export(roles_exports, {
10144
10085
  assign: () => assign,
10145
10086
  unAssign: () => unAssign
10146
10087
  });
10147
- var import_backend_core37 = require("@budibase/backend-core");
10088
+ var import_backend_core36 = require("@budibase/backend-core");
10148
10089
  async function assign(userIds, opts) {
10149
10090
  if (!await isExpandedPublicApiEnabled()) {
10150
10091
  throw new Error("Unable to assign roles - license required.");
@@ -10152,11 +10093,11 @@ async function assign(userIds, opts) {
10152
10093
  const users7 = await db3.bulkGet(userIds);
10153
10094
  for (let user of users7) {
10154
10095
  if (opts.role && opts.role.roleId) {
10155
- const prodAppId = import_backend_core37.db.getProdAppID(opts.role.appId);
10096
+ const prodAppId = import_backend_core36.db.getProdAppID(opts.role.appId);
10156
10097
  user.roles[prodAppId] = opts.role.roleId;
10157
10098
  }
10158
10099
  if (opts.appBuilder) {
10159
- const prodAppId = import_backend_core37.db.getProdAppID(opts.appBuilder.appId);
10100
+ const prodAppId = import_backend_core36.db.getProdAppID(opts.appBuilder.appId);
10160
10101
  const existing = user.builder?.apps || [];
10161
10102
  user.builder = {
10162
10103
  apps: existing.concat([prodAppId])
@@ -10183,13 +10124,13 @@ async function unAssign(userIds, opts) {
10183
10124
  const users7 = await db3.bulkGet(userIds);
10184
10125
  for (let user of users7) {
10185
10126
  if (opts.role) {
10186
- const prodAppId = import_backend_core37.db.getProdAppID(opts.role?.appId);
10127
+ const prodAppId = import_backend_core36.db.getProdAppID(opts.role?.appId);
10187
10128
  if (user.roles[prodAppId] === opts.role.roleId) {
10188
10129
  delete user.roles[prodAppId];
10189
10130
  }
10190
10131
  }
10191
10132
  if (opts.appBuilder && user.builder?.apps) {
10192
- const prodAppId = import_backend_core37.db.getProdAppID(opts.appBuilder.appId);
10133
+ const prodAppId = import_backend_core36.db.getProdAppID(opts.appBuilder.appId);
10193
10134
  user.builder.apps = user.builder.apps.filter((appId) => appId !== prodAppId);
10194
10135
  }
10195
10136
  if (opts.builder && user.builder) {
@@ -10207,7 +10148,7 @@ __export(applications_exports, {
10207
10148
  buildExportFn: () => buildExportFn,
10208
10149
  buildImportFn: () => buildImportFn
10209
10150
  });
10210
- var import_backend_core38 = require("@budibase/backend-core");
10151
+ var import_backend_core37 = require("@budibase/backend-core");
10211
10152
  function buildImportFn(importFn) {
10212
10153
  return async (ctx, next) => {
10213
10154
  if (!await isExpandedPublicApiEnabled()) {
@@ -10216,7 +10157,7 @@ function buildImportFn(importFn) {
10216
10157
  if (!ctx.request.files?.appExport) {
10217
10158
  ctx.throw(400, "Must provide app export file for import.");
10218
10159
  }
10219
- await import_backend_core38.context.doInAppContext(ctx.params.appId, async () => {
10160
+ await import_backend_core37.context.doInAppContext(ctx.params.appId, async () => {
10220
10161
  await importFn(ctx);
10221
10162
  ctx.body = void 0;
10222
10163
  ctx.status = 204;
@@ -10230,7 +10171,7 @@ function buildExportFn(exportFn) {
10230
10171
  ctx.throw(403, "Endpoint unavailable, license required.");
10231
10172
  }
10232
10173
  const { encryptPassword, excludeRows } = ctx.request.body;
10233
- await import_backend_core38.context.doInAppContext(ctx.params.appId, async () => {
10174
+ await import_backend_core37.context.doInAppContext(ctx.params.appId, async () => {
10234
10175
  ctx.request.body = {
10235
10176
  encryptPassword,
10236
10177
  excludeRows
@@ -10243,15 +10184,15 @@ function buildExportFn(exportFn) {
10243
10184
  }
10244
10185
 
10245
10186
  // src/sdk/backups/backup.ts
10246
- var import_backend_core40 = require("@budibase/backend-core");
10187
+ var import_backend_core39 = require("@budibase/backend-core");
10247
10188
  var import_types31 = require("@budibase/types");
10248
10189
 
10249
10190
  // src/sdk/backups/queue.ts
10250
- var import_backend_core39 = require("@budibase/backend-core");
10191
+ var import_backend_core38 = require("@budibase/backend-core");
10251
10192
  var backupQueue;
10252
10193
  function init2() {
10253
- backupQueue = import_backend_core39.queue.createQueue(
10254
- import_backend_core39.queue.JobQueue.APP_BACKUP,
10194
+ backupQueue = import_backend_core38.queue.createQueue(
10195
+ import_backend_core38.queue.JobQueue.APP_BACKUP,
10255
10196
  {
10256
10197
  maxStalledCount: 3,
10257
10198
  jobOptions: {
@@ -10319,8 +10260,8 @@ async function updateAppBackup(backupId, backupName) {
10319
10260
  async function deleteAppBackup(backupId) {
10320
10261
  const metadata2 = await backups_exports.getAppBackupMetadata(backupId);
10321
10262
  if (metadata2.filename) {
10322
- await import_backend_core40.objectStore.deleteFile(
10323
- import_backend_core40.objectStore.ObjectStoreBuckets.BACKUPS,
10263
+ await import_backend_core39.objectStore.deleteFile(
10264
+ import_backend_core39.objectStore.ObjectStoreBuckets.BACKUPS,
10324
10265
  metadata2.filename
10325
10266
  );
10326
10267
  }
@@ -10334,15 +10275,15 @@ async function getBackupDownloadStream(backupId) {
10334
10275
  if (!metadata2.filename) {
10335
10276
  throw new Error("Backup incomplete - cannot download.");
10336
10277
  }
10337
- const stream = await import_backend_core40.objectStore.getReadStream(
10338
- import_backend_core40.objectStore.ObjectStoreBuckets.BACKUPS,
10278
+ const stream = await import_backend_core39.objectStore.getReadStream(
10279
+ import_backend_core39.objectStore.ObjectStoreBuckets.BACKUPS,
10339
10280
  metadata2.filename
10340
10281
  );
10341
10282
  return { metadata: metadata2, stream };
10342
10283
  }
10343
10284
  async function downloadAppBackup(backupId) {
10344
10285
  const { stream } = await getBackupDownloadStream(backupId);
10345
- const path2 = (0, import_path4.join)(import_backend_core40.objectStore.budibaseTempDir(), import_backend_core40.utils.newid());
10286
+ const path2 = (0, import_path4.join)(import_backend_core39.objectStore.budibaseTempDir(), import_backend_core39.utils.newid());
10346
10287
  const writeStream = import_fs4.default.createWriteStream(path2);
10347
10288
  return new Promise((resolve, reject) => {
10348
10289
  stream.on("error", reject);
@@ -10377,7 +10318,7 @@ async function triggerAppBackup(appId, trigger, opts = {}) {
10377
10318
  ...opts
10378
10319
  }
10379
10320
  });
10380
- await import_backend_core40.events.backup.appBackupTriggered(
10321
+ await import_backend_core39.events.backup.appBackupTriggered(
10381
10322
  appId,
10382
10323
  backup.id,
10383
10324
  import_types31.AppBackupType.BACKUP,
@@ -10437,7 +10378,7 @@ var processing_exports = {};
10437
10378
  __export(processing_exports, {
10438
10379
  init: () => init3
10439
10380
  });
10440
- var import_backend_core41 = require("@budibase/backend-core");
10381
+ var import_backend_core40 = require("@budibase/backend-core");
10441
10382
  var import_types32 = require("@budibase/types");
10442
10383
  var import_fs5 = __toESM(require("fs"));
10443
10384
  async function init3(opts) {
@@ -10450,7 +10391,7 @@ async function init3(opts) {
10450
10391
  return importProcessor(job, opts);
10451
10392
  }
10452
10393
  } catch (err) {
10453
- import_backend_core41.logging.logAlert(
10394
+ import_backend_core40.logging.logAlert(
10454
10395
  `Failed to perform backup for app ID: ${data.appId}`,
10455
10396
  err
10456
10397
  );
@@ -10458,11 +10399,11 @@ async function init3(opts) {
10458
10399
  });
10459
10400
  }
10460
10401
  async function removeExistingApp(devId) {
10461
- const devDb = import_backend_core41.db.getDB(devId, { skip_setup: true });
10402
+ const devDb = import_backend_core40.db.getDB(devId, { skip_setup: true });
10462
10403
  await devDb.destroy();
10463
10404
  }
10464
10405
  async function runBackup(trigger, tenantId, appId, opts) {
10465
- const devAppId = import_backend_core41.db.getDevAppID(appId), prodAppId = import_backend_core41.db.getProdAppID(appId);
10406
+ const devAppId = import_backend_core40.db.getDevAppID(appId), prodAppId = import_backend_core40.db.getProdAppID(appId);
10466
10407
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
10467
10408
  const updateMetadata = async (status2, updateOpts) => {
10468
10409
  if (opts?.doc) {
@@ -10492,9 +10433,9 @@ async function runBackup(trigger, tenantId, appId, opts) {
10492
10433
  const tarPath = await opts.processing.exportAppFn(devAppId, { tar: true });
10493
10434
  const contents = await opts.processing.statsFn(devAppId);
10494
10435
  let filename = `${prodAppId}/backup-${timestamp}.tar.gz`;
10495
- const bucket = import_backend_core41.objectStore.ObjectStoreBuckets.BACKUPS;
10436
+ const bucket = import_backend_core40.objectStore.ObjectStoreBuckets.BACKUPS;
10496
10437
  const fileStream = import_fs5.default.createReadStream(tarPath);
10497
- await import_backend_core41.objectStore.streamUpload({
10438
+ await import_backend_core40.objectStore.streamUpload({
10498
10439
  bucket,
10499
10440
  filename,
10500
10441
  stream: fileStream,
@@ -10513,16 +10454,16 @@ async function runBackup(trigger, tenantId, appId, opts) {
10513
10454
  import_fs5.default.rmSync(tarPath);
10514
10455
  }
10515
10456
  } catch (err) {
10516
- import_backend_core41.logging.logAlert("App backup error", err);
10457
+ import_backend_core40.logging.logAlert("App backup error", err);
10517
10458
  await updateMetadata(import_types32.AppBackupStatus.FAILED);
10518
10459
  }
10519
10460
  }
10520
10461
  async function importProcessor(job, opts) {
10521
10462
  const data = job.data;
10522
10463
  const appId = data.appId, backupId = data.import.backupId, nameForBackup = data.import.nameForBackup, createdBy = data.import.createdBy;
10523
- const tenantId = import_backend_core41.tenancy.getTenantIDFromAppID(appId);
10524
- return import_backend_core41.tenancy.doInTenant(tenantId, async () => {
10525
- const devAppId = import_backend_core41.db.getDevAppID(appId);
10464
+ const tenantId = import_backend_core40.tenancy.getTenantIDFromAppID(appId);
10465
+ return import_backend_core40.tenancy.doInTenant(tenantId, async () => {
10466
+ const devAppId = import_backend_core40.db.getDevAppID(appId);
10526
10467
  const { rev: rev2 } = await backup_default.updateRestoreStatus(
10527
10468
  data.docId,
10528
10469
  data.docRev,
@@ -10537,7 +10478,7 @@ async function importProcessor(job, opts) {
10537
10478
  await removeExistingApp(devAppId);
10538
10479
  let status2 = import_types32.AppBackupStatus.COMPLETE;
10539
10480
  try {
10540
- await opts.importAppFn(devAppId, import_backend_core41.db.getDB(devAppId), {
10481
+ await opts.importAppFn(devAppId, import_backend_core40.db.getDB(devAppId), {
10541
10482
  file: {
10542
10483
  type: "application/gzip",
10543
10484
  path: path2
@@ -10545,7 +10486,7 @@ async function importProcessor(job, opts) {
10545
10486
  key: path2
10546
10487
  });
10547
10488
  } catch (err) {
10548
- import_backend_core41.logging.logAlert("App restore error", err);
10489
+ import_backend_core40.logging.logAlert("App restore error", err);
10549
10490
  status2 = import_types32.AppBackupStatus.FAILED;
10550
10491
  }
10551
10492
  await backup_default.updateRestoreStatus(data.docId, rev2, status2);
@@ -10557,8 +10498,8 @@ async function importProcessor(job, opts) {
10557
10498
  async function exportProcessor(job, opts) {
10558
10499
  const data = job.data;
10559
10500
  const appId = data.appId, trigger = data.export.trigger, name2 = data.export.name;
10560
- const tenantId = import_backend_core41.tenancy.getTenantIDFromAppID(appId);
10561
- await import_backend_core41.tenancy.doInTenant(tenantId, async () => {
10501
+ const tenantId = import_backend_core40.tenancy.getTenantIDFromAppID(appId);
10502
+ await import_backend_core40.tenancy.doInTenant(tenantId, async () => {
10562
10503
  try {
10563
10504
  const { rev: rev2 } = await backup_default.updateBackupStatus(
10564
10505
  data.docId,
@@ -10570,7 +10511,7 @@ async function exportProcessor(job, opts) {
10570
10511
  name: name2
10571
10512
  });
10572
10513
  } catch (err) {
10573
- import_backend_core41.logging.logAlert("App backup error", err);
10514
+ import_backend_core40.logging.logAlert("App backup error", err);
10574
10515
  }
10575
10516
  });
10576
10517
  }
@@ -10604,12 +10545,12 @@ __export(users_exports3, {
10604
10545
  update: () => update3
10605
10546
  });
10606
10547
  var import_merge2 = __toESM(require_merge2());
10607
- var import_backend_core42 = require("@budibase/backend-core");
10548
+ var import_backend_core41 = require("@budibase/backend-core");
10608
10549
  var import_types33 = require("@budibase/types");
10609
10550
  async function get5(params) {
10610
- const db4 = import_backend_core42.tenancy.getGlobalDB();
10611
- const builder2 = new import_backend_core42.db.QueryBuilder(db4.name, import_types33.SearchIndex.USER);
10612
- builder2.setIndexBuilder(import_backend_core42.db.searchIndexes.createUserIndex);
10551
+ const db4 = import_backend_core41.tenancy.getGlobalDB();
10552
+ const builder2 = new import_backend_core41.db.QueryBuilder(db4.name, import_types33.SearchIndex.USER);
10553
+ builder2.setIndexBuilder(import_backend_core41.db.searchIndexes.createUserIndex);
10613
10554
  builder2.setLimit(params.pageSize);
10614
10555
  builder2.addEqual("scimInfo.isSync", true);
10615
10556
  for (const [key, value] of Object.entries(params.filters?.equal ?? {})) {
@@ -10624,13 +10565,13 @@ async function get5(params) {
10624
10565
  };
10625
10566
  }
10626
10567
  async function find(id) {
10627
- return await import_backend_core42.users.getById(id);
10568
+ return await import_backend_core41.users.getById(id);
10628
10569
  }
10629
10570
  async function create(user) {
10630
10571
  const existingUser = await db3.getUserByEmail(user.email);
10631
10572
  if (existingUser) {
10632
10573
  if (existingUser.scimInfo?.isSync) {
10633
- throw new import_backend_core42.HTTPError(`User is already synched`, 409);
10574
+ throw new import_backend_core41.HTTPError(`User is already synched`, 409);
10634
10575
  }
10635
10576
  user = {
10636
10577
  ...existingUser,
@@ -10659,7 +10600,7 @@ __export(groups_exports3, {
10659
10600
  create: () => create2
10660
10601
  });
10661
10602
  var import_merge3 = __toESM(require_merge2());
10662
- var import_backend_core43 = require("@budibase/backend-core");
10603
+ var import_backend_core42 = require("@budibase/backend-core");
10663
10604
  async function create2(data) {
10664
10605
  const existingGroup = await getByName(data.name);
10665
10606
  let groupId;
@@ -10668,7 +10609,7 @@ async function create2(data) {
10668
10609
  groupId = createdGroup.id;
10669
10610
  } else {
10670
10611
  if (existingGroup.scimInfo?.isSync) {
10671
- throw new import_backend_core43.HTTPError(`Group is already synched`, 409);
10612
+ throw new import_backend_core42.HTTPError(`Group is already synched`, 409);
10672
10613
  }
10673
10614
  groupId = existingGroup._id;
10674
10615
  if (existingGroup.users) {
@@ -10692,16 +10633,16 @@ __export(logger_exports, {
10692
10633
  logResponse: () => logResponse
10693
10634
  });
10694
10635
  var import_dayjs = __toESM(require_dayjs_min());
10695
- var import_backend_core44 = require("@budibase/backend-core");
10696
- var { DocWritethrough } = import_backend_core44.cache.docWritethrough;
10636
+ var import_backend_core43 = require("@budibase/backend-core");
10637
+ var { DocWritethrough } = import_backend_core43.cache.docWritethrough;
10697
10638
  function getLogDocId() {
10698
- return `${import_backend_core44.db.DocumentType.SCIM_LOG}${import_backend_core44.db.SEPARATOR}${(0, import_dayjs.default)().format(
10639
+ return `${import_backend_core43.db.DocumentType.SCIM_LOG}${import_backend_core43.db.SEPARATOR}${(0, import_dayjs.default)().format(
10699
10640
  "YYYYMMDD"
10700
10641
  )}`;
10701
10642
  }
10702
10643
  var getDB2 = async () => {
10703
- const dbName = import_backend_core44.context.getScimDBName();
10704
- return new DocWritethrough(import_backend_core44.db.getDB(dbName), getLogDocId());
10644
+ const dbName = import_backend_core43.context.getScimDBName();
10645
+ return new DocWritethrough(import_backend_core43.db.getDB(dbName), getLogDocId());
10705
10646
  };
10706
10647
  async function logRequest(request) {
10707
10648
  const logId = Date.now().toString();
@@ -10737,7 +10678,7 @@ __export(middleware_exports, {
10737
10678
  });
10738
10679
 
10739
10680
  // src/middleware/licensing.ts
10740
- var import_backend_core45 = require("@budibase/backend-core");
10681
+ var import_backend_core44 = require("@budibase/backend-core");
10741
10682
  var import_types34 = require("@budibase/types");
10742
10683
  var licensing = (opts = {
10743
10684
  checkUsersLimit: true
@@ -10745,7 +10686,7 @@ var licensing = (opts = {
10745
10686
  return async (ctx, next) => {
10746
10687
  const licensingCheck = opts.licensingCheck ? opts.licensingCheck : () => !!ctx.user;
10747
10688
  if (licensingCheck(ctx)) {
10748
- if (import_backend_core45.env.SELF_HOSTED && import_backend_core45.env.DEFAULT_LICENSE) {
10689
+ if (import_backend_core44.env.SELF_HOSTED && import_backend_core44.env.DEFAULT_LICENSE) {
10749
10690
  ctx.user.license = SELF_FREE_LICENSE;
10750
10691
  return next();
10751
10692
  }
@@ -10753,7 +10694,7 @@ var licensing = (opts = {
10753
10694
  populateLicense: opts.populateLicense,
10754
10695
  populateFreeLicense: opts.populateFreeLicense
10755
10696
  });
10756
- if (opts.checkUsersLimit && (import_backend_core45.utils.isServingApp(ctx) || import_backend_core45.utils.isServingBuilder(ctx) || import_backend_core45.utils.isServingBuilderPreview(ctx) || import_backend_core45.utils.isPublicApiRequest(ctx))) {
10697
+ if (opts.checkUsersLimit && (import_backend_core44.utils.isServingApp(ctx) || import_backend_core44.utils.isServingBuilder(ctx) || import_backend_core44.utils.isServingBuilderPreview(ctx) || import_backend_core44.utils.isPublicApiRequest(ctx))) {
10757
10698
  await quotas_exports5.usageLimitIsExceeded(
10758
10699
  import_types34.StaticQuotaName.USERS,
10759
10700
  import_types34.QuotaUsageType.STATIC
@@ -10785,17 +10726,17 @@ var requireFeatures = (...featureFlags) => {
10785
10726
  };
10786
10727
 
10787
10728
  // src/middleware/doInScimContext.ts
10788
- var import_backend_core46 = require("@budibase/backend-core");
10729
+ var import_backend_core45 = require("@budibase/backend-core");
10789
10730
  var doInScimContext = async (ctx, next) => {
10790
10731
  let logId;
10791
- if (!import_backend_core46.env.DISABLE_SCIM_CALLS) {
10732
+ if (!import_backend_core45.env.DISABLE_SCIM_CALLS) {
10792
10733
  logId = await logger_exports.logRequest({
10793
10734
  // koa response stringify only returns status, message and header
10794
10735
  ...ctx.request.toJSON(),
10795
10736
  body: ctx.request.body
10796
10737
  });
10797
10738
  }
10798
- return await import_backend_core46.context.doInScimContext(async () => {
10739
+ return await import_backend_core45.context.doInScimContext(async () => {
10799
10740
  const result = await next();
10800
10741
  if (logId) {
10801
10742
  await logger_exports.logResponse(logId, {
@@ -10815,8 +10756,8 @@ var requireSCIM = async (ctx, next) => {
10815
10756
  };
10816
10757
 
10817
10758
  // src/middleware/scimSyncResourceRestricted.ts
10818
- var import_backend_core47 = require("@budibase/backend-core");
10819
- var scimUserOnly = (paramId) => scimSyncChecks(import_backend_core47.users.getById, paramId, true);
10759
+ var import_backend_core46 = require("@budibase/backend-core");
10760
+ var scimUserOnly = (paramId) => scimSyncChecks(import_backend_core46.users.getById, paramId, true);
10820
10761
  var scimGroupOnly = (paramId) => scimSyncChecks(groups_exports.get, paramId, true);
10821
10762
  var internalGroupOnly = (paramId) => scimSyncChecks(groups_exports.get, paramId, false);
10822
10763
  function scimSyncChecks(getter, paramId, scimRequired) {
@@ -10834,8 +10775,8 @@ function scimSyncChecks(getter, paramId, scimRequired) {
10834
10775
  }
10835
10776
 
10836
10777
  // src/api/index.ts
10837
- var api_exports2 = {};
10838
- __export(api_exports2, {
10778
+ var api_exports = {};
10779
+ __export(api_exports, {
10839
10780
  ai: () => ai_default,
10840
10781
  appBackups: () => backups_default2,
10841
10782
  auditLogs: () => auditLogs_default,
@@ -10852,7 +10793,7 @@ __export(ai_exports2, {
10852
10793
  });
10853
10794
 
10854
10795
  // src/ai/LargeLanguageModel.ts
10855
- var import_backend_core48 = require("@budibase/backend-core");
10796
+ var import_backend_core47 = require("@budibase/backend-core");
10856
10797
  var import_types35 = require("@budibase/types");
10857
10798
  var import_shared_core = require("@budibase/shared-core");
10858
10799
 
@@ -10991,7 +10932,7 @@ var LargeLanguageModel = class _LargeLanguageModel {
10991
10932
  }
10992
10933
  }
10993
10934
  async init() {
10994
- let aiConfig = await import_backend_core48.configs.getAIConfig();
10935
+ let aiConfig = await import_backend_core47.configs.getAIConfig();
10995
10936
  const bbAIEnabled = await isBudibaseAIEnabled();
10996
10937
  if (!aiConfig && !bbAIEnabled) {
10997
10938
  throw Error("AI config must be defined to use Budibase AI LLM features");
@@ -11075,12 +11016,12 @@ async function generateCronExpression2(ctx) {
11075
11016
  // src/api/routes/ai/index.ts
11076
11017
  var import_types36 = require("@budibase/types");
11077
11018
  var import_router = __toESM(require("@koa/router"));
11078
- var import_backend_core49 = require("@budibase/backend-core");
11019
+ var import_backend_core48 = require("@budibase/backend-core");
11079
11020
  var router = new import_router.default();
11080
11021
  router.post(
11081
11022
  "/api/ai/cron",
11082
11023
  feature_exports.requireFeature(import_types36.Feature.BUDIBASE_AI),
11083
- import_backend_core49.auth.builderOrAdmin,
11024
+ import_backend_core48.auth.builderOrAdmin,
11084
11025
  generateCronExpression2
11085
11026
  );
11086
11027
  var ai_default = router;
@@ -11181,10 +11122,10 @@ async function removeAppBuilder3(ctx) {
11181
11122
  var import_router2 = __toESM(require("@koa/router"));
11182
11123
  var import_joi = __toESM(require("joi"));
11183
11124
  var import_types37 = require("@budibase/types");
11184
- var import_backend_core50 = require("@budibase/backend-core");
11125
+ var import_backend_core49 = require("@budibase/backend-core");
11185
11126
  var router2 = new import_router2.default();
11186
11127
  function buildGroupSaveValidation() {
11187
- return import_backend_core50.auth.joiValidator.body(
11128
+ return import_backend_core49.auth.joiValidator.body(
11188
11129
  import_joi.default.object({
11189
11130
  _id: import_joi.default.string().optional(),
11190
11131
  _rev: import_joi.default.string().optional(),
@@ -11202,7 +11143,7 @@ function buildGroupSaveValidation() {
11202
11143
  }
11203
11144
  router2.post(
11204
11145
  "/api/global/groups",
11205
- import_backend_core50.auth.adminOnly,
11146
+ import_backend_core49.auth.adminOnly,
11206
11147
  feature_exports.requireFeature(import_types37.Feature.USER_GROUPS),
11207
11148
  buildGroupSaveValidation(),
11208
11149
  save5
@@ -11213,38 +11154,38 @@ router2.post(
11213
11154
  ).delete(
11214
11155
  "/api/global/groups/:groupId/:rev",
11215
11156
  feature_exports.requireFeature(import_types37.Feature.USER_GROUPS),
11216
- import_backend_core50.auth.adminOnly,
11157
+ import_backend_core49.auth.adminOnly,
11217
11158
  internalGroupOnly("groupId"),
11218
11159
  destroy3
11219
11160
  ).get(
11220
11161
  "/api/global/groups/:groupId",
11221
11162
  feature_exports.requireFeature(import_types37.Feature.USER_GROUPS),
11222
- import_backend_core50.auth.adminOnly,
11163
+ import_backend_core49.auth.adminOnly,
11223
11164
  find2
11224
11165
  ).get(
11225
11166
  "/api/global/groups/:groupId/users",
11226
11167
  feature_exports.requireFeature(import_types37.Feature.USER_GROUPS),
11227
- import_backend_core50.auth.builderOrAdmin,
11168
+ import_backend_core49.auth.builderOrAdmin,
11228
11169
  searchUsers
11229
11170
  ).post(
11230
11171
  "/api/global/groups/:groupId/users",
11231
- import_backend_core50.auth.adminOnly,
11172
+ import_backend_core49.auth.adminOnly,
11232
11173
  feature_exports.requireFeature(import_types37.Feature.USER_GROUPS),
11233
11174
  internalGroupOnly("groupId"),
11234
11175
  updateGroupUsers
11235
11176
  ).post(
11236
11177
  "/api/global/groups/:groupId/apps",
11237
- import_backend_core50.auth.builderOrAdmin,
11178
+ import_backend_core49.auth.builderOrAdmin,
11238
11179
  feature_exports.requireFeature(import_types37.Feature.USER_GROUPS),
11239
11180
  updateGroupApps2
11240
11181
  ).post(
11241
11182
  "/api/global/groups/:groupId/app/:appId/builder",
11242
- import_backend_core50.auth.builderOrAdmin,
11183
+ import_backend_core49.auth.builderOrAdmin,
11243
11184
  feature_exports.requireFeatures(import_types37.Feature.USER_GROUPS, import_types37.Feature.APP_BUILDERS),
11244
11185
  addAppBuilder3
11245
11186
  ).delete(
11246
11187
  "/api/global/groups/:groupId/app/:appId/builder",
11247
- import_backend_core50.auth.builderOrAdmin,
11188
+ import_backend_core49.auth.builderOrAdmin,
11248
11189
  feature_exports.requireFeatures(import_types37.Feature.USER_GROUPS, import_types37.Feature.APP_BUILDERS),
11249
11190
  removeAppBuilder3
11250
11191
  );
@@ -11252,7 +11193,7 @@ var groups_default = router2;
11252
11193
 
11253
11194
  // src/api/controllers/global/environmentVariables.ts
11254
11195
  var import_types38 = require("@budibase/types");
11255
- var import_backend_core51 = require("@budibase/backend-core");
11196
+ var import_backend_core50 = require("@budibase/backend-core");
11256
11197
  async function status(ctx) {
11257
11198
  ctx.body = {
11258
11199
  encryptionKeyAvailable: environmentVariables_exports2.isEncryptionKeyAvailable()
@@ -11270,7 +11211,7 @@ async function create3(ctx) {
11270
11211
  if (production !== development) {
11271
11212
  environments.push(import_types38.AppEnvironment.DEVELOPMENT);
11272
11213
  }
11273
- await import_backend_core51.events.environmentVariable.created(name2, environments);
11214
+ await import_backend_core50.events.environmentVariable.created(name2, environments);
11274
11215
  ctx.status = 200;
11275
11216
  }
11276
11217
  async function update4(ctx) {
@@ -11282,17 +11223,17 @@ async function update4(ctx) {
11282
11223
  async function destroy4(ctx) {
11283
11224
  const varName = ctx.params.varName;
11284
11225
  await environmentVariables_exports2.remove(varName);
11285
- await import_backend_core51.events.environmentVariable.deleted(varName);
11226
+ await import_backend_core50.events.environmentVariable.deleted(varName);
11286
11227
  ctx.status = 200;
11287
11228
  }
11288
11229
 
11289
11230
  // src/api/routes/global/environmentVariables.ts
11290
- var import_backend_core52 = require("@budibase/backend-core");
11231
+ var import_backend_core51 = require("@budibase/backend-core");
11291
11232
  var import_router3 = __toESM(require("@koa/router"));
11292
11233
  var import_joi2 = __toESM(require("joi"));
11293
11234
  var router3 = new import_router3.default();
11294
11235
  function buildEnvVarUpdateValidator() {
11295
- return import_backend_core52.auth.joiValidator.body(
11236
+ return import_backend_core51.auth.joiValidator.body(
11296
11237
  import_joi2.default.object({
11297
11238
  name: import_joi2.default.string().optional(),
11298
11239
  production: import_joi2.default.string().required(),
@@ -11300,35 +11241,35 @@ function buildEnvVarUpdateValidator() {
11300
11241
  })
11301
11242
  );
11302
11243
  }
11303
- router3.get("/api/env/variables/status", import_backend_core52.auth.builderOrAdmin, status).get("/api/env/variables", import_backend_core52.auth.builderOrAdmin, fetch7).post(
11244
+ router3.get("/api/env/variables/status", import_backend_core51.auth.builderOrAdmin, status).get("/api/env/variables", import_backend_core51.auth.builderOrAdmin, fetch7).post(
11304
11245
  "/api/env/variables",
11305
- import_backend_core52.auth.builderOrAdmin,
11246
+ import_backend_core51.auth.builderOrAdmin,
11306
11247
  buildEnvVarUpdateValidator(),
11307
11248
  create3
11308
11249
  ).patch(
11309
11250
  "/api/env/variables/:varName",
11310
- import_backend_core52.auth.builderOrAdmin,
11251
+ import_backend_core51.auth.builderOrAdmin,
11311
11252
  buildEnvVarUpdateValidator(),
11312
11253
  update4
11313
11254
  ).delete(
11314
11255
  "/api/env/variables/:varName",
11315
- import_backend_core52.auth.builderOrAdmin,
11256
+ import_backend_core51.auth.builderOrAdmin,
11316
11257
  destroy4
11317
11258
  );
11318
11259
  var environmentVariables_default = router3;
11319
11260
 
11320
11261
  // src/api/controllers/global/auditLogs.ts
11321
- var import_backend_core53 = require("@budibase/backend-core");
11262
+ var import_backend_core52 = require("@budibase/backend-core");
11322
11263
  async function search(ctx) {
11323
11264
  const search2 = ctx.request.body;
11324
11265
  const fetched = await auditLogs_exports3.fetch(search2);
11325
- await import_backend_core53.events.auditLog.filtered(search2);
11266
+ await import_backend_core52.events.auditLog.filtered(search2);
11326
11267
  ctx.body = fetched;
11327
11268
  }
11328
11269
  async function download2(ctx) {
11329
11270
  const search2 = ctx.request.body;
11330
11271
  const { stream } = auditLogs_exports3.download(search2);
11331
- await import_backend_core53.events.auditLog.downloaded(search2);
11272
+ await import_backend_core52.events.auditLog.downloaded(search2);
11332
11273
  ctx.attachment(`audit-logs-${Date.now()}.log`);
11333
11274
  ctx.body = stream;
11334
11275
  }
@@ -11340,11 +11281,11 @@ async function definitions2(ctx) {
11340
11281
 
11341
11282
  // src/api/routes/global/auditLogs.ts
11342
11283
  var import_types39 = require("@budibase/types");
11343
- var import_backend_core54 = require("@budibase/backend-core");
11284
+ var import_backend_core53 = require("@budibase/backend-core");
11344
11285
  var import_router4 = __toESM(require("@koa/router"));
11345
11286
  var import_joi3 = __toESM(require("joi"));
11346
11287
  function buildAuditLogSearchValidator() {
11347
- return import_backend_core54.auth.joiValidator.body(
11288
+ return import_backend_core53.auth.joiValidator.body(
11348
11289
  import_joi3.default.object({
11349
11290
  userIds: import_joi3.default.array().items(import_joi3.default.string()).optional(),
11350
11291
  appIds: import_joi3.default.array().items(import_joi3.default.string()).optional(),
@@ -11359,26 +11300,26 @@ function buildAuditLogSearchValidator() {
11359
11300
  var router4 = new import_router4.default();
11360
11301
  router4.post(
11361
11302
  "/api/global/auditlogs/search",
11362
- import_backend_core54.auth.adminOnly,
11303
+ import_backend_core53.auth.adminOnly,
11363
11304
  buildAuditLogSearchValidator(),
11364
11305
  search
11365
11306
  ).get(
11366
11307
  "/api/global/auditlogs/download",
11367
- import_backend_core54.auth.adminOnly,
11308
+ import_backend_core53.auth.adminOnly,
11368
11309
  // convert query string param to body
11369
- import_backend_core54.middleware.querystringToBody,
11310
+ import_backend_core53.middleware.querystringToBody,
11370
11311
  buildAuditLogSearchValidator(),
11371
11312
  download2
11372
11313
  ).get(
11373
11314
  "/api/global/auditlogs/definitions",
11374
- import_backend_core54.auth.adminOnly,
11315
+ import_backend_core53.auth.adminOnly,
11375
11316
  definitions2
11376
11317
  );
11377
11318
  var auditLogs_default = router4;
11378
11319
 
11379
11320
  // src/api/controllers/apps/backups.ts
11380
11321
  var import_types40 = require("@budibase/types");
11381
- var import_backend_core55 = require("@budibase/backend-core");
11322
+ var import_backend_core54 = require("@budibase/backend-core");
11382
11323
  async function checkAppID(ctx, appId) {
11383
11324
  if (!await utils_exports2.appExists(appId)) {
11384
11325
  ctx.throw(400, `Provided app ID: ${appId} - is invalid.`);
@@ -11419,7 +11360,7 @@ async function importBackup(ctx) {
11419
11360
  if (!response) {
11420
11361
  ctx.throw(500, "Unable to start restore.");
11421
11362
  }
11422
- await import_backend_core55.events.backup.appBackupRestored(response.metadata);
11363
+ await import_backend_core54.events.backup.appBackupRestored(response.metadata);
11423
11364
  ctx.body = {
11424
11365
  restoredId: response?.restoreId,
11425
11366
  message: "Restore triggered - process starting."
@@ -11469,10 +11410,10 @@ async function downloadBackup(ctx) {
11469
11410
  var import_router5 = __toESM(require("@koa/router"));
11470
11411
  var import_joi4 = __toESM(require("joi"));
11471
11412
  var import_types41 = require("@budibase/types");
11472
- var import_backend_core56 = require("@budibase/backend-core");
11413
+ var import_backend_core55 = require("@budibase/backend-core");
11473
11414
  var router5 = new import_router5.default();
11474
11415
  function validateBackupSearch() {
11475
- return import_backend_core56.auth.joiValidator.body(
11416
+ return import_backend_core55.auth.joiValidator.body(
11476
11417
  import_joi4.default.object({
11477
11418
  trigger: import_joi4.default.string().valid(...Object.values(import_types41.AppBackupTrigger)),
11478
11419
  type: import_joi4.default.string().valid(...Object.values(import_types41.AppBackupType)),
@@ -11482,26 +11423,26 @@ function validateBackupSearch() {
11482
11423
  })
11483
11424
  );
11484
11425
  }
11485
- router5.post("/api/apps/:appId/backups", import_backend_core56.auth.builderOrAdmin, manualBackup).post(
11426
+ router5.post("/api/apps/:appId/backups", import_backend_core55.auth.builderOrAdmin, manualBackup).post(
11486
11427
  "/api/apps/:appId/backups/search",
11487
- import_backend_core56.auth.builderOrAdmin,
11428
+ import_backend_core55.auth.builderOrAdmin,
11488
11429
  validateBackupSearch(),
11489
11430
  fetchBackups
11490
11431
  ).get(
11491
11432
  "/api/apps/:appId/backups/:backupId/file",
11492
- import_backend_core56.auth.builderOrAdmin,
11433
+ import_backend_core55.auth.builderOrAdmin,
11493
11434
  downloadBackup
11494
11435
  ).patch(
11495
11436
  "/api/apps/:appId/backups/:backupId",
11496
- import_backend_core56.auth.builderOrAdmin,
11437
+ import_backend_core55.auth.builderOrAdmin,
11497
11438
  updateBackup
11498
11439
  ).delete(
11499
11440
  "/api/apps/:appId/backups/:backupId",
11500
- import_backend_core56.auth.builderOrAdmin,
11441
+ import_backend_core55.auth.builderOrAdmin,
11501
11442
  deleteBackup
11502
11443
  ).post(
11503
11444
  "/api/apps/:appId/backups/:backupId/import",
11504
- import_backend_core56.auth.builderOrAdmin,
11445
+ import_backend_core55.auth.builderOrAdmin,
11505
11446
  importBackup
11506
11447
  );
11507
11448
  var backups_default2 = router5;
@@ -11511,7 +11452,7 @@ var import_router6 = __toESM(require("@koa/router"));
11511
11452
 
11512
11453
  // src/api/controllers/global/scim/users.ts
11513
11454
  var import_scim_patch = require("scim-patch");
11514
- var import_backend_core57 = require("@budibase/backend-core");
11455
+ var import_backend_core56 = require("@budibase/backend-core");
11515
11456
  function tryGetQueryAsNumber(ctx, name2) {
11516
11457
  const value = ctx.request.query[name2];
11517
11458
  if (value === void 0) {
@@ -11549,7 +11490,7 @@ var create4 = async (ctx) => {
11549
11490
  const user = await users_exports3.create(userToCreate);
11550
11491
  ctx.body = mappers_exports.user.toScimUserResponse(user);
11551
11492
  } catch (e) {
11552
- if (e instanceof import_backend_core57.EmailUnavailableError) {
11493
+ if (e instanceof import_backend_core56.EmailUnavailableError) {
11553
11494
  ctx.throw(409, "Email already in use");
11554
11495
  }
11555
11496
  throw e;
@@ -11758,11 +11699,11 @@ var scim_default = router6;
11758
11699
  var import_router7 = __toESM(require("@koa/router"));
11759
11700
 
11760
11701
  // src/api/controllers/global/users.ts
11761
- var import_backend_core58 = require("@budibase/backend-core");
11702
+ var import_backend_core57 = require("@budibase/backend-core");
11762
11703
  async function addAppBuilder4(ctx) {
11763
11704
  const { userId, appId } = ctx.params;
11764
11705
  const user = await users_exports.db.getUser(userId);
11765
- if (import_backend_core58.users.isGlobalBuilder(user)) {
11706
+ if (import_backend_core57.users.isGlobalBuilder(user)) {
11766
11707
  ctx.body = { message: "User already admin - no permissions updated." };
11767
11708
  return;
11768
11709
  }
@@ -11772,7 +11713,7 @@ async function addAppBuilder4(ctx) {
11772
11713
  async function removeAppBuilder4(ctx) {
11773
11714
  const { userId, appId } = ctx.params;
11774
11715
  const user = await users_exports.db.getUser(userId);
11775
- if (import_backend_core58.users.isGlobalBuilder(user)) {
11716
+ if (import_backend_core57.users.isGlobalBuilder(user)) {
11776
11717
  ctx.body = { message: "User already admin - no permissions removed." };
11777
11718
  return;
11778
11719
  }
@@ -11782,16 +11723,16 @@ async function removeAppBuilder4(ctx) {
11782
11723
 
11783
11724
  // src/api/routes/global/users.ts
11784
11725
  var import_types43 = require("@budibase/types");
11785
- var import_backend_core59 = require("@budibase/backend-core");
11726
+ var import_backend_core58 = require("@budibase/backend-core");
11786
11727
  var router7 = new import_router7.default();
11787
11728
  router7.post(
11788
11729
  "/api/global/users/:userId/app/:appId/builder",
11789
- import_backend_core59.auth.builderOrAdmin,
11730
+ import_backend_core58.auth.builderOrAdmin,
11790
11731
  feature_exports.requireFeatures(import_types43.Feature.APP_BUILDERS),
11791
11732
  addAppBuilder4
11792
11733
  ).delete(
11793
11734
  "/api/global/users/:userId/app/:appId/builder",
11794
- import_backend_core59.auth.builderOrAdmin,
11735
+ import_backend_core58.auth.builderOrAdmin,
11795
11736
  feature_exports.requireFeatures(import_types43.Feature.APP_BUILDERS),
11796
11737
  removeAppBuilder4
11797
11738
  );
@@ -11813,7 +11754,7 @@ __export(users_exports6, {
11813
11754
  });
11814
11755
  var import_types44 = require("@budibase/types");
11815
11756
  var import_scim2_parse_filter2 = require("scim2-parse-filter");
11816
- var import_backend_core60 = require("@budibase/backend-core");
11757
+ var import_backend_core59 = require("@budibase/backend-core");
11817
11758
  var import_shared_core3 = require("@budibase/shared-core");
11818
11759
  var { unreachable } = import_shared_core3.utils;
11819
11760
  var toScimUserResponse = (user) => {
@@ -11842,7 +11783,7 @@ var isScimUserResponse = (user) => {
11842
11783
  return !!user?.id;
11843
11784
  };
11844
11785
  function tryGetEmail(user) {
11845
- if (import_backend_core60.utils.validEmail(user.userName)) {
11786
+ if (import_backend_core59.utils.validEmail(user.userName)) {
11846
11787
  return user.userName;
11847
11788
  }
11848
11789
  if (!user.emails) {