@openinc/parse-server-opendash 3.6.0 → 3.6.2

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.
@@ -0,0 +1 @@
1
+ export declare function isFeatureEnabled(feature: string): boolean;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isFeatureEnabled = isFeatureEnabled;
4
+ const __1 = require("..");
5
+ function isFeatureEnabled(feature) {
6
+ const config = __1.ConfigInstance.getInstance();
7
+ switch (feature) {
8
+ case "CORE":
9
+ return config.getBoolean("FEATURE_CORE");
10
+ case "MONITORING":
11
+ return config.getBoolean("FEATURE_MONITORING");
12
+ case "BDE":
13
+ return config.getBoolean("FEATURE_BDE");
14
+ case "GTFS":
15
+ return config.getBoolean("FEATURE_GTFS");
16
+ case "KNOWLEDGE":
17
+ return config.getBoolean("FEATURE_KNOWLEDGE");
18
+ case "MAINTENANCE":
19
+ return config.getBoolean("FEATURE_MAINTENANCE");
20
+ case "DOCUMENTATION":
21
+ return config.getBoolean("FEATURE_DOCUMENTATION");
22
+ case "MIAAS":
23
+ return config.getBoolean("FEATURE_MIAAS");
24
+ default:
25
+ return false;
26
+ }
27
+ }
@@ -2,5 +2,6 @@ export { CommonConfigValue, ConfigBooleanValue, ConfigMap, ConfigValue, } from "
2
2
  export { ConfigState } from "./states/Config";
3
3
  export { default as ConfigInstance } from "./services/ConfigInstance";
4
4
  export { ConfigKeys } from "./types/ConfigKeys";
5
- export { customoptions } from "./helper/customOptions";
6
5
  export { baseoptions } from "./helper/baseOptions";
6
+ export { customoptions } from "./helper/customOptions";
7
+ export { isFeatureEnabled } from "./helper/isFeatureEnabled";
@@ -3,14 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.baseoptions = exports.customoptions = exports.ConfigKeys = exports.ConfigInstance = exports.ConfigState = void 0;
6
+ exports.isFeatureEnabled = exports.customoptions = exports.baseoptions = exports.ConfigKeys = exports.ConfigInstance = exports.ConfigState = void 0;
7
7
  var Config_1 = require("./states/Config");
8
8
  Object.defineProperty(exports, "ConfigState", { enumerable: true, get: function () { return Config_1.ConfigState; } });
9
9
  var ConfigInstance_1 = require("./services/ConfigInstance");
10
10
  Object.defineProperty(exports, "ConfigInstance", { enumerable: true, get: function () { return __importDefault(ConfigInstance_1).default; } });
11
11
  var ConfigKeys_1 = require("./types/ConfigKeys");
12
12
  Object.defineProperty(exports, "ConfigKeys", { enumerable: true, get: function () { return ConfigKeys_1.ConfigKeys; } });
13
- var customOptions_1 = require("./helper/customOptions");
14
- Object.defineProperty(exports, "customoptions", { enumerable: true, get: function () { return customOptions_1.customoptions; } });
15
13
  var baseOptions_1 = require("./helper/baseOptions");
16
14
  Object.defineProperty(exports, "baseoptions", { enumerable: true, get: function () { return baseOptions_1.baseoptions; } });
15
+ var customOptions_1 = require("./helper/customOptions");
16
+ Object.defineProperty(exports, "customoptions", { enumerable: true, get: function () { return customOptions_1.customoptions; } });
17
+ var isFeatureEnabled_1 = require("./helper/isFeatureEnabled");
18
+ Object.defineProperty(exports, "isFeatureEnabled", { enumerable: true, get: function () { return isFeatureEnabled_1.isFeatureEnabled; } });
@@ -2,22 +2,26 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.saveTicketMeta = saveTicketMeta;
4
4
  async function saveTicketMeta(ticket, value, fetchOptions) {
5
- const current = ticket.get("meta")?.fields
6
- ? { fields: [...ticket.get("meta").fields] }
7
- : { fields: [] };
5
+ const currentMeta = ticket.get("meta") ?? {
6
+ fields: [],
7
+ };
8
8
  if (value) {
9
- const newMetaFields = current.fields;
10
- const newRemainingFields = [];
9
+ const updatedMetaFields = currentMeta.fields ?? [];
10
+ const newMetaFields = [];
11
11
  // overriding existing fields
12
12
  for (const field of value.fields) {
13
- const index = newMetaFields.findIndex((v) => v.name === field.name);
13
+ const index = updatedMetaFields.findIndex((v) => v.name === field.name);
14
14
  if (index === -1)
15
- newRemainingFields.push(field);
15
+ newMetaFields.push(field);
16
16
  else
17
- newMetaFields[index].value = field.value;
17
+ updatedMetaFields[index].value = field.value;
18
18
  }
19
- current.fields = [...newMetaFields, ...newRemainingFields];
20
- ticket.set("meta", current);
19
+ currentMeta.fields = [...updatedMetaFields, ...newMetaFields];
20
+ ticket.set("meta", {
21
+ ...currentMeta, // use all existing values
22
+ ...value, // override with new values
23
+ fields: currentMeta.fields, // use the updated fields
24
+ });
21
25
  }
22
26
  return await ticket.save(null, fetchOptions);
23
27
  }
@@ -4,4 +4,10 @@ import { RegisteredPermission } from "..";
4
4
  * @returns all permissions
5
5
  */
6
6
  export declare function getAllPermissions(): RegisteredPermission[];
7
+ /**
8
+ * Entry point for the permission registration process.
9
+ * It retrieves all tenants and registers the permissions for each tenant.
10
+ * It also ensures that the default admin access permissions are set for each tenant.
11
+ * @returns {Promise<void>}
12
+ */
7
13
  export default function initPermissions(): Promise<void>;
@@ -12,6 +12,10 @@ const types_1 = require("../../../types");
12
12
  function getAllPermissions() {
13
13
  const permissions = []; // stores all permissions
14
14
  for (const key in __1.Permissions) {
15
+ // TODO: Check if the feature is enabled, if not, skip it
16
+ // if (!isFeatureEnabled(key.toUpperCase())) {
17
+ // continue;
18
+ // }
15
19
  // iterate over the objects / enums of the Permissions namespace
16
20
  if (Object.prototype.hasOwnProperty.call(__1.Permissions, key)) {
17
21
  const element = __1.Permissions[key]; // get the object / enum
@@ -45,10 +49,15 @@ function createPermission(input) {
45
49
  }
46
50
  /**
47
51
  * Register all permissions in the database, if not already registered.
52
+ * This function checks if a permission with the same key already exists in the database.
53
+ * If it does, it skips the registration process for that permission.
54
+ * If it doesn't, it creates a new Permission object and saves it to the database.
55
+ * @param tenant the tenant to register the permissions for
56
+ * @returns {Promise<void>}
48
57
  */
49
58
  async function registerPermissions(tenant) {
50
59
  console.log("[@openinc/parse-server-opendash] Register all permissions");
51
- return getAllPermissions().map(async (permission) => {
60
+ const allPermissions = getAllPermissions().map(async (permission) => {
52
61
  const [resultError, result] = await (0, catchError_1.catchError)(new Parse.Query(types_1.Permission)
53
62
  .equalTo("key", permission.key)
54
63
  .equalTo("tenant", tenant)
@@ -66,13 +75,14 @@ async function registerPermissions(tenant) {
66
75
  newPermission.set("description", permission.description);
67
76
  await newPermission.save({}, { useMasterKey: true });
68
77
  }
69
- else {
70
- console.log("[@openinc/parse-server-opendash] Permission already exists", permission.key);
71
- }
72
78
  });
79
+ await Promise.all(allPermissions);
80
+ console.log("[@openinc/parse-server-opendash] All permissions registered successfully");
73
81
  }
74
82
  /**
75
83
  * Set read access for all admin roles to admin overview permission
84
+ * @param tenant the tenant to set the permissions for
85
+ * @returns {Promise<void>}
76
86
  */
77
87
  async function ensureDefaultAdminAccess(tenant) {
78
88
  console.log("[@openinc/parse-server-opendash] Ensure default admin access permissions");
@@ -97,13 +107,19 @@ async function ensureDefaultAdminAccess(tenant) {
97
107
  console.log("[@openinc/parse-server-opendash] Permission not found", __1.Permissions.OpenINCStack.adminoverview);
98
108
  }
99
109
  }
110
+ /**
111
+ * Entry point for the permission registration process.
112
+ * It retrieves all tenants and registers the permissions for each tenant.
113
+ * It also ensures that the default admin access permissions are set for each tenant.
114
+ * @returns {Promise<void>}
115
+ */
100
116
  async function initPermissions() {
101
117
  const tenants = await new Parse.Query(types_1.Tenant)
102
118
  .descending("createdAt")
103
119
  .find({ useMasterKey: true });
104
120
  if (tenants) {
105
121
  for await (const tenant of tenants) {
106
- await Promise.all(await registerPermissions(tenant));
122
+ await registerPermissions(tenant);
107
123
  await ensureDefaultAdminAccess(tenant);
108
124
  }
109
125
  }
@@ -4,7 +4,7 @@
4
4
  * Adding new Permissions here requires the server to restart for registering those.
5
5
  */
6
6
  export declare namespace Permissions {
7
- enum OpenService {
7
+ enum Maintenance {
8
8
  ticket = "maintenance:can-create-ticket",
9
9
  schedule = "maintenance:can-create-schedule",
10
10
  message = "maintenance:can-create-message",
@@ -9,22 +9,22 @@ exports.Permissions = void 0;
9
9
  var Permissions;
10
10
  (function (Permissions) {
11
11
  // needs to be exported for getAllPermissions() to work
12
- let OpenService;
13
- (function (OpenService) {
12
+ let Maintenance;
13
+ (function (Maintenance) {
14
14
  // Create
15
- OpenService["ticket"] = "maintenance:can-create-ticket";
16
- OpenService["schedule"] = "maintenance:can-create-schedule";
17
- OpenService["message"] = "maintenance:can-create-message";
18
- OpenService["machinelog_ticket"] = "maintenance:can-create-machinelog-ticket";
19
- OpenService["machinelog_schedule"] = "maintenance:can-create-machinelog-schedule";
20
- OpenService["machinelog_message"] = "maintenance:can-create-machinelog-message";
15
+ Maintenance["ticket"] = "maintenance:can-create-ticket";
16
+ Maintenance["schedule"] = "maintenance:can-create-schedule";
17
+ Maintenance["message"] = "maintenance:can-create-message";
18
+ Maintenance["machinelog_ticket"] = "maintenance:can-create-machinelog-ticket";
19
+ Maintenance["machinelog_schedule"] = "maintenance:can-create-machinelog-schedule";
20
+ Maintenance["machinelog_message"] = "maintenance:can-create-machinelog-message";
21
21
  // Access
22
- OpenService["global"] = "maintenance:can-access-global";
23
- OpenService["monitor"] = "maintenance:can-access-monitor";
24
- OpenService["monitoring"] = "maintenance:can-access-monitoring";
22
+ Maintenance["global"] = "maintenance:can-access-global";
23
+ Maintenance["monitor"] = "maintenance:can-access-monitor";
24
+ Maintenance["monitoring"] = "maintenance:can-access-monitoring";
25
25
  // Update
26
- OpenService["kanban_view"] = "maintenance:can-update-kanban-view";
27
- })(OpenService = Permissions.OpenService || (Permissions.OpenService = {}));
26
+ Maintenance["kanban_view"] = "maintenance:can-update-kanban-view";
27
+ })(Maintenance = Permissions.Maintenance || (Permissions.Maintenance = {}));
28
28
  let OpenINCStack;
29
29
  (function (OpenINCStack) {
30
30
  //Access
package/dist/index.js CHANGED
@@ -539,6 +539,11 @@ async function autoloadCloudCode(path, regex = /^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$
539
539
  .filter((name) => regex.test(name));
540
540
  for (const name of fns) {
541
541
  const { init } = require((0, path_1.join)(path, name));
542
+ if (!init || typeof init !== "function") {
543
+ console.warn(`[@openinc/parse-server-opendash] No init() function found in ${name}.js`);
544
+ continue;
545
+ }
546
+ console.log(`[@openinc/parse-server-opendash] Autoloading ${name}.js`);
542
547
  await init(name).catch((e) => console.error(e));
543
548
  }
544
549
  }
@@ -552,32 +557,10 @@ function getFeatureForClassName(className) {
552
557
  const map = featuremap_json_1.default;
553
558
  return map[className] || "unknown";
554
559
  }
555
- function isFeatureEnabled(feature) {
556
- switch (feature) {
557
- case "CORE":
558
- return config.getBoolean("FEATURE_CORE");
559
- case "MONITORING":
560
- return config.getBoolean("FEATURE_MONITORING");
561
- case "BDE":
562
- return config.getBoolean("FEATURE_BDE");
563
- case "GTFS":
564
- return config.getBoolean("FEATURE_GTFS");
565
- case "KNOWLEDGE":
566
- return config.getBoolean("FEATURE_KNOWLEDGE");
567
- case "MAINTENANCE":
568
- return config.getBoolean("FEATURE_MAINTENANCE");
569
- case "DOCUMENTATION":
570
- return config.getBoolean("FEATURE_DOCUMENTATION");
571
- case "MIAAS":
572
- return config.getBoolean("FEATURE_MIAAS");
573
- default:
574
- return false;
575
- }
576
- }
577
560
  function isClassEnabled(className) {
578
561
  // if (!config.getBoolean("FEATURES_ENABLED")) return true;
579
562
  const feature = getFeatureForClassName(className);
580
- const enabled = isFeatureEnabled(feature);
563
+ const enabled = (0, config_1.isFeatureEnabled)(feature);
581
564
  return enabled;
582
565
  }
583
566
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openinc/parse-server-opendash",
3
- "version": "3.6.0",
3
+ "version": "3.6.2",
4
4
  "description": "Parse Server Cloud Code for open.INC Stack.",
5
5
  "packageManager": "pnpm@10.11.0",
6
6
  "keywords": [
@@ -52,7 +52,7 @@
52
52
  "schema-up": "parse-server-schema up --prefix OD3_ ./schema",
53
53
  "schema-ts": "parse-server-schema typescript --prefix OD3_ --global-sdk ./src/types",
54
54
  "typedoc": "typedoc --plugin typedoc-plugin-markdown --hideBreadcrumbs --out docs src/index.ts",
55
- "predevstart": "./setup_scripts/postStartHook.sh && ./setup_scripts/installDeps.sh",
55
+ "predevstart": "./setup_scripts/installDeps.sh",
56
56
  "devstart": "parse-server ./config.js",
57
57
  "featuremap": "node ./scripts/create-featuremap.js",
58
58
  "hooks": "node ./scripts/create-hooks.js",