@openinc/parse-server-opendash 2.4.104 → 3.0.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.
Files changed (127) hide show
  1. package/dist/featuremap.json +5 -4
  2. package/dist/features/config/helper/baseOptions.d.ts +2 -0
  3. package/dist/features/config/helper/baseOptions.js +50 -0
  4. package/dist/features/config/helper/customOptions.d.ts +2 -0
  5. package/dist/{config.js → features/config/helper/customOptions.js} +2 -4
  6. package/dist/features/config/index.d.ts +6 -0
  7. package/dist/features/config/index.js +16 -0
  8. package/dist/features/config/services/ConfigInstance.d.ts +5 -0
  9. package/dist/features/config/services/ConfigInstance.js +13 -0
  10. package/dist/features/config/states/Config.d.ts +20 -0
  11. package/dist/{helper → features/config/states}/Config.js +86 -52
  12. package/dist/features/config/types/configTypes.d.ts +35 -0
  13. package/dist/features/cron/index.d.ts +1 -0
  14. package/dist/features/notifications/index.d.ts +4 -0
  15. package/dist/features/notifications/index.js +13 -0
  16. package/dist/features/notifications/services/registerNotification.d.ts +7 -0
  17. package/dist/features/notifications/services/registerNotification.js +80 -0
  18. package/dist/features/notifications/states/NotificationClass.d.ts +12 -0
  19. package/dist/features/notifications/states/NotificationClass.js +21 -0
  20. package/dist/features/notifications/types/NotificationTypes.d.ts +11 -0
  21. package/dist/features/notifications/types/NotificationTypes.js +2 -0
  22. package/dist/features/openservice/index.d.ts +2 -0
  23. package/dist/features/openservice/index.js +5 -0
  24. package/dist/{helper/TranslationKeys.d.ts → features/openservice/types/OpenserviceTranslationKeys.d.ts} +1 -1
  25. package/dist/{helper/TranslationKeys.js → features/openservice/types/OpenserviceTranslationKeys.js} +5 -5
  26. package/dist/{helper → features/openservice/types}/TicketData.d.ts +1 -1
  27. package/dist/features/openservice/types/TicketData.js +2 -0
  28. package/dist/features/openware/helper/getToken.d.ts +1 -0
  29. package/dist/features/openware/helper/getToken.js +25 -0
  30. package/dist/features/openware/index.d.ts +7 -0
  31. package/dist/features/openware/index.js +7 -0
  32. package/dist/features/openware/services/publishDataItem.d.ts +2 -0
  33. package/dist/{ow.js → features/openware/services/publishDataItem.js} +5 -23
  34. package/dist/features/openware/types/DataItemInterface.d.ts +10 -0
  35. package/dist/features/openware/types/DataItemInterface.js +2 -0
  36. package/dist/features/openware/types/DataItemValueInterface.d.ts +4 -0
  37. package/dist/features/openware/types/DataItemValueInterface.js +2 -0
  38. package/dist/features/openware/types/DataItemValueTypeInterface.d.ts +6 -0
  39. package/dist/features/openware/types/DataItemValueTypeInterface.js +2 -0
  40. package/dist/features/openware/types/DataItemValueTypeTypeField.d.ts +1 -0
  41. package/dist/features/openware/types/DataItemValueTypeTypeField.js +2 -0
  42. package/dist/{app_types → features/openware/types}/OpenWareTicketObject.d.ts +1 -1
  43. package/dist/features/openware/types/OpenWareTicketObject.js +2 -0
  44. package/dist/features/permissions/index.d.ts +4 -0
  45. package/dist/features/permissions/index.js +13 -0
  46. package/dist/features/permissions/services/registerPermissions.d.ts +7 -0
  47. package/dist/features/permissions/services/registerPermissions.js +80 -0
  48. package/dist/{helper/registerPermissions.d.ts → features/permissions/states/PermissionClass.d.ts} +2 -12
  49. package/dist/features/permissions/states/PermissionClass.js +21 -0
  50. package/dist/features/permissions/types/PermissionTypes.d.ts +11 -0
  51. package/dist/features/permissions/types/PermissionTypes.js +2 -0
  52. package/dist/functions/opendash-geo-features.js +5 -5
  53. package/dist/functions/openinc-auth-signup.js +6 -5
  54. package/dist/functions/openinc-auth.common.js +3 -3
  55. package/dist/functions/openinc-config.js +2 -2
  56. package/dist/functions/openinc-geo-google.common.d.ts +1 -1
  57. package/dist/functions/openinc-geo-google.common.js +3 -4
  58. package/dist/functions/openinc-geo-graphhopper.common.d.ts +1 -1
  59. package/dist/functions/openinc-geo-graphhopper.common.js +4 -4
  60. package/dist/functions/openinc-openservice-save-ticket-data.js +45 -7
  61. package/dist/hooks/Alarm.js +3 -3
  62. package/dist/hooks/BDE_Result.js +2 -2
  63. package/dist/hooks/Core_Email.js +10 -10
  64. package/dist/hooks/MES_Order.js +7 -7
  65. package/dist/hooks/ML_DataSelection.d.ts +1 -0
  66. package/dist/hooks/ML_DataSelection.js +17 -0
  67. package/dist/hooks/Maintenance_Downtime.js +5 -5
  68. package/dist/hooks/Maintenance_Duedate.js +5 -5
  69. package/dist/hooks/Maintenance_Frequency.js +5 -5
  70. package/dist/hooks/Maintenance_Message.js +29 -29
  71. package/dist/hooks/Maintenance_Priority.js +5 -5
  72. package/dist/hooks/Maintenance_Restriction.js +5 -5
  73. package/dist/hooks/Maintenance_Schedule_Execution.js +3 -3
  74. package/dist/hooks/Maintenance_Ticket.js +1 -1
  75. package/dist/hooks/Maintenance_Ticket_FormConfig.d.ts +1 -0
  76. package/dist/hooks/Maintenance_Ticket_FormConfig.js +34 -0
  77. package/dist/hooks/Maintenance_Ticket_Issuecategory.js +5 -5
  78. package/dist/hooks/Maintenance_Ticket_Kanban_State.js +5 -5
  79. package/dist/hooks/Maintenance_Ticket_Material.js +5 -5
  80. package/dist/hooks/Maintenance_Ticket_Project.js +5 -5
  81. package/dist/hooks/Maintenance_Ticket_Source.js +5 -5
  82. package/dist/hooks/Maintenance_Ticket_Title.js +5 -5
  83. package/dist/hooks/Notification.js +4 -4
  84. package/dist/hooks/Notification_Setting.js +0 -38
  85. package/dist/hooks/OWPlcDevice.d.ts +1 -0
  86. package/dist/hooks/OWPlcDevice.js +17 -0
  87. package/dist/hooks/OWPlcItem.d.ts +1 -0
  88. package/dist/hooks/OWPlcItem.js +17 -0
  89. package/dist/hooks/_User.js +2 -2
  90. package/dist/hooks/_beforeLogin.js +3 -3
  91. package/dist/index.js +23 -56
  92. package/dist/jobs/open_service_notifyOnSchedule.js +4 -4
  93. package/dist/types/Maintenance_Project.d.ts +3 -0
  94. package/dist/types/Maintenance_Project.js +6 -0
  95. package/dist/types/Maintenance_Schedule_Step.d.ts +3 -17
  96. package/dist/types/Maintenance_Ticket_FormConfig.d.ts +19 -0
  97. package/dist/types/Maintenance_Ticket_FormConfig.js +26 -0
  98. package/dist/types/OWPlcDevice.d.ts +28 -0
  99. package/dist/types/OWPlcDevice.js +47 -0
  100. package/dist/types/OWPlcItem.d.ts +42 -0
  101. package/dist/types/OWPlcItem.js +71 -0
  102. package/dist/types/index.d.ts +6 -0
  103. package/dist/types/index.js +8 -1
  104. package/package.json +33 -11
  105. package/schema/Maintenance_Project.json +5 -0
  106. package/schema/Maintenance_Ticket_FormConfig.json +44 -0
  107. package/schema/OWPlcItem.json +2 -2
  108. package/dist/app_types/index.d.ts +0 -5
  109. package/dist/app_types/index.js +0 -9
  110. package/dist/config.d.ts +0 -2
  111. package/dist/helper/Config.d.ts +0 -33
  112. package/dist/helper/pdf2img.d.ts +0 -15
  113. package/dist/helper/pdf2img.js +0 -157
  114. package/dist/helper/registerNotification.d.ts +0 -25
  115. package/dist/helper/registerNotification.js +0 -61
  116. package/dist/helper/registerPermissions.js +0 -58
  117. package/dist/ow.d.ts +0 -21
  118. package/dist/{app_types → features/config/types}/ConfigKeys.d.ts +0 -0
  119. package/dist/{app_types → features/config/types}/ConfigKeys.js +0 -0
  120. package/dist/{app_types/CRON_Types.js → features/config/types/configTypes.js} +0 -0
  121. package/dist/{app_types/OpenWareTicketObject.js → features/cron/index.js} +0 -0
  122. package/dist/{app_types → features/cron/types}/CRON_Types.d.ts +0 -0
  123. package/dist/{helper/TicketData.js → features/cron/types/CRON_Types.js} +0 -0
  124. package/dist/{app_types → features/notifications/types}/Notifications.d.ts +0 -0
  125. package/dist/{app_types → features/notifications/types}/Notifications.js +2 -2
  126. /package/dist/{app_types → features/permissions/types}/Permissions.d.ts +0 -0
  127. /package/dist/{app_types → features/permissions/types}/Permissions.js +0 -0
@@ -0,0 +1,2 @@
1
+ import { DataItemInterface } from "..";
2
+ export declare function publishDataItem(dataItem: DataItemInterface, usermail?: string, update?: boolean): Promise<void>;
@@ -3,41 +3,23 @@ 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.getToken = getToken;
7
6
  exports.publishDataItem = publishDataItem;
8
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
9
7
  const node_fetch_1 = __importDefault(require("node-fetch"));
10
- const config_1 = require("./config");
8
+ const __1 = require("..");
9
+ const config_1 = require("../../config");
11
10
  const LOG_PREFIX = "[@openinc/parse-server-opendash][open.WARE] ";
12
- async function getToken(usermail) {
13
- const JWT_EMAIL = usermail || config_1.config.get("OPENWARE_JWT_ADMIN_EMAIL");
14
- const JWT_SECRET = config_1.config.get("OPENWARE_JWT_SECRET");
15
- const JWT_ISS = config_1.config.get("OPENWARE_JWT_ISS");
16
- const JWT_TOKEN = config_1.config.get("OPENWARE_JWT_TOKEN");
17
- if (JWT_EMAIL && JWT_SECRET && JWT_ISS) {
18
- return jsonwebtoken_1.default.sign({ usermail: JWT_EMAIL }, JWT_SECRET, {
19
- algorithm: "HS256",
20
- issuer: JWT_ISS,
21
- noTimestamp: true,
22
- });
23
- }
24
- if (JWT_TOKEN) {
25
- return JWT_TOKEN;
26
- }
27
- return null;
28
- }
29
11
  async function publishDataItem(dataItem, usermail, update) {
30
- const active = config_1.config.getBoolean("OPENWARE");
12
+ const active = config_1.ConfigInstance.getInstance().getBoolean("OPENWARE");
31
13
  if (!active) {
32
14
  return console.log(LOG_PREFIX +
33
15
  "OPENWARE = false => Sending Data to open.WARE is not available.");
34
16
  }
35
- const token = await getToken(usermail);
17
+ const token = await (0, __1.getToken)(usermail);
36
18
  if (!token) {
37
19
  return console.log(LOG_PREFIX +
38
20
  "OPENWARE_JWT_TOKEN OR _JWT_SECERT/_ADMIN_EMAIL/_ISS = undefined => Sending Data to open.WARE is not available.");
39
21
  }
40
- const baseurl = config_1.config.get("OPENWARE_BASEURL");
22
+ const baseurl = config_1.ConfigInstance.getInstance().get("OPENWARE_BASEURL");
41
23
  if (!baseurl) {
42
24
  return console.log(LOG_PREFIX +
43
25
  "OPENWARE_BASEURL = undefined => Sending Data to open.WARE is not available.");
@@ -0,0 +1,10 @@
1
+ import { DataItemValueInterface, DataItemValueTypeInterface } from "..";
2
+ export interface DataItemInterface {
3
+ id: string;
4
+ name: string;
5
+ source: string;
6
+ reference?: string;
7
+ meta: Record<string, any>;
8
+ valueTypes: DataItemValueTypeInterface[];
9
+ values: DataItemValueInterface[];
10
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export interface DataItemValueInterface {
2
+ date: number;
3
+ value: any[];
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { DataItemValueTypeTypeField } from "..";
2
+ export interface DataItemValueTypeInterface {
3
+ unit: string;
4
+ name: string;
5
+ type: DataItemValueTypeTypeField;
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export type DataItemValueTypeTypeField = "Number" | "String" | "Boolean" | "Geo" | "Object";
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,4 +1,4 @@
1
- import { Maintenance_Downtime, Maintenance_Frequency, Maintenance_Priority, Maintenance_Restriction, Maintenance_Ticket, Maintenance_Ticket_Issuecategory, Maintenance_Ticket_Kanban_State, Maintenance_Ticket_Source } from "../types";
1
+ import { Maintenance_Downtime, Maintenance_Frequency, Maintenance_Priority, Maintenance_Restriction, Maintenance_Ticket, Maintenance_Ticket_Issuecategory, Maintenance_Ticket_Kanban_State, Maintenance_Ticket_Source } from "../../../types";
2
2
  export type OpenWareTicketObject = {
3
3
  ticket: Maintenance_Ticket;
4
4
  priority: Maintenance_Priority | Number;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export { FunctionKeys, PermissionInterface, PermissionMap, } from "./types/PermissionTypes";
2
+ export { Permissions } from "./types/Permissions";
3
+ export { RegisteredPermission } from "./states/PermissionClass";
4
+ export { getAllPermissions, default as initPermissions, } from "./services/registerPermissions";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initPermissions = exports.getAllPermissions = exports.RegisteredPermission = exports.Permissions = void 0;
7
+ var Permissions_1 = require("./types/Permissions");
8
+ Object.defineProperty(exports, "Permissions", { enumerable: true, get: function () { return Permissions_1.Permissions; } });
9
+ var PermissionClass_1 = require("./states/PermissionClass");
10
+ Object.defineProperty(exports, "RegisteredPermission", { enumerable: true, get: function () { return PermissionClass_1.RegisteredPermission; } });
11
+ var registerPermissions_1 = require("./services/registerPermissions");
12
+ Object.defineProperty(exports, "getAllPermissions", { enumerable: true, get: function () { return registerPermissions_1.getAllPermissions; } });
13
+ Object.defineProperty(exports, "initPermissions", { enumerable: true, get: function () { return __importDefault(registerPermissions_1).default; } });
@@ -0,0 +1,7 @@
1
+ import { RegisteredPermission } from "..";
2
+ /**
3
+ * Returns all permissions defined in types/Permissions.ts as an array of Permission objects.
4
+ * @returns all permissions
5
+ */
6
+ export declare function getAllPermissions(): RegisteredPermission[];
7
+ export default function initPermissions(): Promise<void>;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAllPermissions = getAllPermissions;
4
+ exports.default = initPermissions;
5
+ const __1 = require("..");
6
+ const types_1 = require("../../../types");
7
+ /**
8
+ * Returns all permissions defined in types/Permissions.ts as an array of Permission objects.
9
+ * @returns all permissions
10
+ */
11
+ function getAllPermissions() {
12
+ const permissions = []; // stores all permissions
13
+ for (const key in __1.Permissions) {
14
+ // iterate over the objects / enums of the Permissions namespace
15
+ if (Object.prototype.hasOwnProperty.call(__1.Permissions, key)) {
16
+ const element = __1.Permissions[key]; // get the object / enum
17
+ const createdPermissions = createPermission(element); // create Permission objects recursively
18
+ permissions.push(...createdPermissions);
19
+ }
20
+ }
21
+ return permissions;
22
+ }
23
+ /**
24
+ * Recursively creates Permission objects from the input object.
25
+ * @param input a string from an enum or an enum itself
26
+ * @returns an array of Permission objects
27
+ */
28
+ function createPermission(input) {
29
+ const permissions = []; // all permission objects created from the input
30
+ if (typeof input === "string") {
31
+ // if the input is a string, create a Permission object from it
32
+ permissions.push(new __1.RegisteredPermission(input, input + ".label", input + ".description"));
33
+ }
34
+ else {
35
+ // if the input is an object, iterate over its keys and create Permission objects from the values
36
+ for (const key in input) {
37
+ if (Object.prototype.hasOwnProperty.call(input, key)) {
38
+ const element = input[key];
39
+ permissions.push(...createPermission(element));
40
+ }
41
+ }
42
+ }
43
+ return permissions;
44
+ }
45
+ /**
46
+ * Register all permissions in the database, if not already registered.
47
+ */
48
+ async function registerPermissions(tenant) {
49
+ console.log("[@openinc/parse-server-opendash] Register all permissions");
50
+ getAllPermissions().forEach((permission) => {
51
+ new Parse.Query(types_1.Permission)
52
+ .equalTo("key", permission.key)
53
+ .equalTo("tenant", tenant)
54
+ .first({ useMasterKey: true })
55
+ .then((result) => {
56
+ if (!result) {
57
+ console.log("[@openinc/parse-server-opendash] Create permission", permission.key);
58
+ const newPermission = new types_1.Permission();
59
+ newPermission.set("key", permission.key);
60
+ newPermission.set("label", permission.label);
61
+ newPermission.set("tenant", tenant);
62
+ newPermission.set("description", permission.description);
63
+ newPermission.save({}, { useMasterKey: true });
64
+ }
65
+ else {
66
+ console.log("[@openinc/parse-server-opendash] Permission already exists", permission.key);
67
+ }
68
+ });
69
+ });
70
+ }
71
+ async function initPermissions() {
72
+ const tenants = await new Parse.Query(types_1.Tenant)
73
+ .descending("createdAt")
74
+ .find({ useMasterKey: true });
75
+ if (tenants) {
76
+ for await (const tenant of tenants) {
77
+ await registerPermissions(tenant);
78
+ }
79
+ }
80
+ }
@@ -1,16 +1,7 @@
1
+ import { FunctionKeys, PermissionInterface } from "..";
1
2
  /**
2
- * Returns all permissions from the OpenService plugin defined in types/config.ts as an array of Permission objects.
3
- * @returns all permissions from the OpenService plugin
3
+ * Class for all permissions in parse server.
4
4
  */
5
- export declare function getAllPermissions(): RegisteredPermission[];
6
- interface PermissionInterface {
7
- label: string;
8
- description: string;
9
- key: string;
10
- }
11
- type FunctionKeys<T> = {
12
- [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
13
- }[keyof T];
14
5
  export declare class RegisteredPermission implements PermissionInterface {
15
6
  key: string;
16
7
  label: string;
@@ -19,4 +10,3 @@ export declare class RegisteredPermission implements PermissionInterface {
19
10
  get<T extends Exclude<keyof RegisteredPermission, FunctionKeys<RegisteredPermission>>>(attribute: T): (typeof this)[T];
20
11
  set<T extends Exclude<keyof RegisteredPermission, FunctionKeys<RegisteredPermission>>>(attribute: T, value: (typeof this)[T]): this;
21
12
  }
22
- export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RegisteredPermission = void 0;
4
+ /**
5
+ * Class for all permissions in parse server.
6
+ */
7
+ class RegisteredPermission {
8
+ constructor(key, label, description) {
9
+ this.key = key;
10
+ this.label = label;
11
+ this.description = description;
12
+ }
13
+ get(attribute) {
14
+ return this[attribute];
15
+ }
16
+ set(attribute, value) {
17
+ this[attribute] = value;
18
+ return this;
19
+ }
20
+ }
21
+ exports.RegisteredPermission = RegisteredPermission;
@@ -0,0 +1,11 @@
1
+ export interface PermissionInterface {
2
+ label: string;
3
+ description: string;
4
+ key: string;
5
+ }
6
+ export type FunctionKeys<T> = {
7
+ [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
8
+ }[keyof T];
9
+ export interface PermissionMap {
10
+ [key: string]: any;
11
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
- const config_1 = require("../config");
4
+ const config_1 = require("../features/config");
5
5
  async function init(name) {
6
6
  Parse.Cloud.define(name, async (request) => {
7
- const style = config_1.config.get("GEO_VECTOR_STYLE");
8
- const GoK = config_1.config.get("GEO_GOOGLE_API_KEY");
9
- const GHH = config_1.config.get("GEO_GRAPHHOPPER_HOST");
10
- const GHK = config_1.config.get("GEO_GRAPHHOPPER_API_KEY");
7
+ const style = config_1.ConfigInstance.getInstance().get("GEO_VECTOR_STYLE");
8
+ const GoK = config_1.ConfigInstance.getInstance().get("GEO_GOOGLE_API_KEY");
9
+ const GHH = config_1.ConfigInstance.getInstance().get("GEO_GRAPHHOPPER_HOST");
10
+ const GHK = config_1.ConfigInstance.getInstance().get("GEO_GRAPHHOPPER_API_KEY");
11
11
  return {
12
12
  "vector-style": style,
13
13
  "opendash-geo-google-autocomplete": !!GoK,
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
- const config_1 = require("../config");
4
+ const config_1 = require("../features/config");
5
5
  const transformLogin_1 = require("../helper/transformLogin");
6
6
  const types_1 = require("../types");
7
7
  async function init(name) {
@@ -30,7 +30,8 @@ async function init(name) {
30
30
  user.setPassword(password);
31
31
  user.set("name", name);
32
32
  user.set("tenant", tenantRef);
33
- if (username && config_1.config.getBoolean("AUTH_ALLOW_USERNAME")) {
33
+ if (username &&
34
+ config_1.ConfigInstance.getInstance().getBoolean("AUTH_ALLOW_USERNAME")) {
34
35
  user.setUsername(username);
35
36
  }
36
37
  else {
@@ -55,7 +56,7 @@ async function init(name) {
55
56
  type: String,
56
57
  },
57
58
  tenant: {
58
- required: config_1.config.getBoolean("AUTH_SIGNUP_REQUIRE_TENANT"),
59
+ required: config_1.ConfigInstance.getInstance().getBoolean("AUTH_SIGNUP_REQUIRE_TENANT"),
59
60
  type: String,
60
61
  },
61
62
  email: {
@@ -66,7 +67,7 @@ async function init(name) {
66
67
  required: true,
67
68
  type: String,
68
69
  options: (value) => {
69
- const minLength = config_1.config.getNumber("AUTH_PASSWORD_MIN_LENGTH");
70
+ const minLength = config_1.ConfigInstance.getInstance().getNumber("AUTH_PASSWORD_MIN_LENGTH");
70
71
  return value.length >= minLength;
71
72
  },
72
73
  },
@@ -79,7 +80,7 @@ async function init(name) {
79
80
  type: String,
80
81
  },
81
82
  tosAccepted: {
82
- required: !!config_1.config.get("APP_TOS_URL"),
83
+ required: !!config_1.ConfigInstance.getInstance().get("APP_TOS_URL"),
83
84
  type: Boolean,
84
85
  options: (value) => value === true,
85
86
  },
@@ -6,7 +6,7 @@ exports.consumeToken = consumeToken;
6
6
  exports.isExpired = isExpired;
7
7
  exports.createSessionToken = createSessionToken;
8
8
  const crypto_1 = require("crypto");
9
- const config_1 = require("../config");
9
+ const config_1 = require("../features/config");
10
10
  const types_1 = require("../types");
11
11
  async function createToken(type, userId, url) {
12
12
  const key = (0, crypto_1.randomUUID)();
@@ -22,10 +22,10 @@ async function createToken(type, userId, url) {
22
22
  return { token: token.key, url: token.url };
23
23
  }
24
24
  function createUrl(url, token) {
25
- if (!config_1.config.getBoolean("ENFORCE_APP_URL")) {
25
+ if (!config_1.ConfigInstance.getInstance().getBoolean("ENFORCE_APP_URL")) {
26
26
  return url.replace("{{token}}", token);
27
27
  }
28
- const appUrl = new URL(config_1.config.get("APP_URL"));
28
+ const appUrl = new URL(config_1.ConfigInstance.getInstance().get("APP_URL"));
29
29
  const providedUrl = new URL(url.replace("{{token}}", token));
30
30
  providedUrl.protocol = appUrl.protocol;
31
31
  providedUrl.host = appUrl.host;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
- const config_1 = require("../config");
4
+ const config_1 = require("../features/config");
5
5
  const types_1 = require("../types");
6
6
  async function init(name) {
7
7
  Parse.Cloud.define(name, async (request) => {
@@ -39,7 +39,7 @@ async function init(name) {
39
39
  userId,
40
40
  roles,
41
41
  schema,
42
- config: config_1.config.export(),
42
+ config: config_1.ConfigInstance.getInstance().export(),
43
43
  tenants: await getTenants(),
44
44
  };
45
45
  });
@@ -1,2 +1,2 @@
1
1
  export declare function getGoogleApiKey(): string;
2
- export declare function get(path: string, params: Record<string, string>): Promise<any>;
2
+ export declare function get<T = any>(path: string, params: Record<string, string>): Promise<T>;
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getGoogleApiKey = getGoogleApiKey;
7
7
  exports.get = get;
8
8
  const node_fetch_1 = __importDefault(require("node-fetch"));
9
- const config_1 = require("../config");
10
9
  const url_1 = require("url");
10
+ const config_1 = require("../features/config");
11
11
  function getGoogleApiKey() {
12
- const API_KEY = config_1.config.get("GEO_GOOGLE_API_KEY");
12
+ const API_KEY = config_1.ConfigInstance.getInstance().get("GEO_GOOGLE_API_KEY");
13
13
  if (!API_KEY) {
14
14
  throw new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, `Feature not enabled [GEO_GOOGLE_API_KEY-1]`);
15
15
  }
@@ -24,10 +24,9 @@ async function get(path, params) {
24
24
  qs.set(key, value);
25
25
  }
26
26
  const url = "https://maps.googleapis.com" + path + "?" + qs.toString();
27
- console.log(url);
28
27
  const response = await (0, node_fetch_1.default)(url);
29
28
  if (!response.ok) {
30
29
  throw new Error("Bad Statuscode");
31
30
  }
32
- return await response.json();
31
+ return (await response.json());
33
32
  }
@@ -1,2 +1,2 @@
1
- export declare function get(path: string, params: Record<string, string>, qs2?: string): Promise<any>;
1
+ export declare function get<T = any>(path: string, params: Record<string, string>, qs2?: string): Promise<T>;
2
2
  export declare function getGeoCodingResult(hits: any): any;
@@ -6,13 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.get = get;
7
7
  exports.getGeoCodingResult = getGeoCodingResult;
8
8
  const node_fetch_1 = __importDefault(require("node-fetch"));
9
- const config_1 = require("../config");
9
+ const config_1 = require("../features/config");
10
10
  async function get(path, params, qs2 = "") {
11
- const GRAPHHOPPER_HOST = config_1.config.get("GEO_GRAPHHOPPER_HOST");
11
+ const GRAPHHOPPER_HOST = config_1.ConfigInstance.getInstance().get("GEO_GRAPHHOPPER_HOST");
12
12
  if (!GRAPHHOPPER_HOST) {
13
13
  throw new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, `Feature not enabled [GEO_GRAPHHOPPER-1]`);
14
14
  }
15
- const GRAPHHOPPER_API_KEY = config_1.config.get("GEO_GRAPHHOPPER_API_KEY");
15
+ const GRAPHHOPPER_API_KEY = config_1.ConfigInstance.getInstance().get("GEO_GRAPHHOPPER_API_KEY");
16
16
  if (!GRAPHHOPPER_API_KEY) {
17
17
  throw new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, `Feature not enabled [GEO_GRAPHHOPPER-2]`);
18
18
  }
@@ -28,7 +28,7 @@ async function get(path, params, qs2 = "") {
28
28
  if (!response.ok) {
29
29
  throw new Error("Bad Statuscode");
30
30
  }
31
- return await response.json();
31
+ return (await response.json());
32
32
  }
33
33
  function getGeoCodingResult(hits) {
34
34
  return hits.map((hit) => ({
@@ -4,9 +4,10 @@ exports.getUsername = getUsername;
4
4
  exports.init = init;
5
5
  exports.saveTicketData = saveTicketData;
6
6
  const parse_1 = require("parse");
7
+ const openware_1 = require("../features/openware");
7
8
  const catchError_1 = require("../helper/catchError");
8
- const ow_1 = require("../ow");
9
9
  const types_1 = require("../types");
10
+ const openinc_openservice_ticket_data_1 = require("./openinc-openservice-ticket-data");
10
11
  function getUsername(user) {
11
12
  if (!user)
12
13
  return "System";
@@ -318,7 +319,7 @@ async function publishToOpenWare(owticketobj, ticket, source) {
318
319
  };
319
320
  console.log("Publishing ticket to openware: ", dataitem, "with values", JSON.stringify(dataitem.values));
320
321
  try {
321
- await (0, ow_1.publishDataItem)(dataitem, ticket.get("user")?.get("email"), true);
322
+ await (0, openware_1.publishDataItem)(dataitem, ticket.get("user")?.get("email"), true);
322
323
  }
323
324
  catch (error) {
324
325
  console.error("Error publishing ticket to openware", error);
@@ -437,6 +438,22 @@ async function assignUsersAndRoles(ticket, assignedTo, fetchOptions, assigningUs
437
438
  }
438
439
  }
439
440
  await types_1.Maintenance_Ticket_Assignment.saveAll(assignments, fetchOptions);
441
+ //Set ACLs for assigned users and roles on ticket
442
+ const acl = new Parse.ACL();
443
+ for (const assignedUser of newUsers) {
444
+ acl.setReadAccess(assignedUser, true);
445
+ acl.setWriteAccess(assignedUser, true);
446
+ }
447
+ // get the parent roles of the assigned roles
448
+ const rolesWithParents = await addParentRoles(newRoles);
449
+ // remove duplicates from the array
450
+ const distinctRolesWithParents = (0, openinc_openservice_ticket_data_1.arrayToDistinct)(rolesWithParents, (obj) => obj.id);
451
+ for (const assignedRole of distinctRolesWithParents) {
452
+ acl.setRoleReadAccess(assignedRole, true);
453
+ acl.setRoleWriteAccess(assignedRole, true);
454
+ }
455
+ ticket.setACL(acl);
456
+ await ticket.save(null, fetchOptions);
440
457
  // SAVE ASSIGNMENT MESSAGE
441
458
  // set the content for the message
442
459
  let content = "maintenance:ticket.eventlist.OD3_Maintenance_Ticket_Assignment.none";
@@ -472,6 +489,18 @@ async function assignUsersAndRoles(ticket, assignedTo, fetchOptions, assigningUs
472
489
  }).save(null, fetchOptions);
473
490
  await ticket.save(null, fetchOptions);
474
491
  }
492
+ async function addParentRoles(roles) {
493
+ for (const role of roles) {
494
+ const roleQuery = new Parse.Query(parse_1.Role).equalTo("objectId", role.id);
495
+ const parentRoles = await new Parse.Query(parse_1.Role)
496
+ .matchesQuery("roles", roleQuery)
497
+ .find();
498
+ if (parentRoles.length > 0) {
499
+ roles.push(...(await addParentRoles(parentRoles)));
500
+ }
501
+ }
502
+ return roles;
503
+ }
475
504
  async function saveTicketTitle(ticket, fetchOptions) {
476
505
  const ticketTitle = await new Parse.Query(types_1.Maintenance_Ticket_Title)
477
506
  .descending("createdAt")
@@ -628,9 +657,16 @@ async function saveMaterial(ticket, material, fetchOptions) {
628
657
  await materialObject.save(null, fetchOptions);
629
658
  }
630
659
  async function saveTicketProject(ticket, project, fetchOptions) {
631
- const projectObj = await new Parse.Query(types_1.Maintenance_Project).get(project, fetchOptions);
632
- if (!projectObj)
633
- throw new Error("Project not found");
660
+ // check if ticket already has a project assigned
661
+ // if so, remove the ticket from the old project
662
+ const prevProject = await ticket.get("project")?.fetch(fetchOptions);
663
+ if (prevProject && prevProject.id !== project) {
664
+ prevProject.relation("tickets").remove(ticket);
665
+ prevProject.save(null, fetchOptions);
666
+ }
667
+ const projectObj = await new Parse.Query(types_1.Maintenance_Project)
668
+ .equalTo("objectId", project)
669
+ .first(fetchOptions);
634
670
  const ticketProjectObject = new types_1.Maintenance_Ticket_Project({
635
671
  ticket,
636
672
  project: projectObj,
@@ -640,8 +676,10 @@ async function saveTicketProject(ticket, project, fetchOptions) {
640
676
  await ticketProjectObject.save(null, fetchOptions);
641
677
  ticket.set("project", projectObj);
642
678
  await ticket.save(null, fetchOptions);
643
- projectObj.relation("tickets").add(ticket);
644
- await projectObj.save(null, fetchOptions);
679
+ if (projectObj) {
680
+ projectObj.relation("tickets").add(ticket);
681
+ await projectObj.save(null, fetchOptions);
682
+ }
645
683
  }
646
684
  async function saveDefaultIssueCategory(ticket, fetchOptions) {
647
685
  const catchAll = await new Parse.Query(types_1.Maintenance_Issuecategory)
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.init = init;
7
7
  const node_fetch_1 = __importDefault(require("node-fetch"));
8
8
  const __1 = require("..");
9
- const config_1 = require("../config");
9
+ const config_1 = require("../features/config");
10
10
  const types_1 = require("../types");
11
11
  async function init() {
12
12
  (0, __1.beforeSaveHook)(types_1.Alarm, async (request) => {
@@ -15,9 +15,9 @@ async function init() {
15
15
  // TODO
16
16
  });
17
17
  (0, __1.afterSaveHook)(types_1.Alarm, async ({ object, original, user }) => {
18
- if (config_1.config.getBoolean("OPENWARE")) {
18
+ if (config_1.ConfigInstance.getInstance().getBoolean("OPENWARE")) {
19
19
  const username = user?.get("username");
20
- const baseurl = config_1.config.get("OPENWARE_BASEURL");
20
+ const baseurl = config_1.ConfigInstance.getInstance().get("OPENWARE_BASEURL");
21
21
  const headers = {
22
22
  "content-type": "application/json",
23
23
  "od-session": user?.getSessionToken() || "",
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
4
  const __1 = require("..");
5
- const ow_1 = require("../ow");
5
+ const openware_1 = require("../features/openware");
6
6
  const types_1 = require("../types");
7
7
  async function init() {
8
8
  (0, __1.beforeSaveHook)(types_1.BDE_Result, async (request) => {
@@ -114,7 +114,7 @@ async function init() {
114
114
  type: "String",
115
115
  });
116
116
  }
117
- await (0, ow_1.publishDataItem)({
117
+ await (0, openware_1.publishDataItem)({
118
118
  id: data.form?.RID || data.formID,
119
119
  source: data.source.source || data.source,
120
120
  reference: data.reference !== null ? data.reference : undefined,
@@ -12,25 +12,25 @@ const nodemailer_1 = __importDefault(require("nodemailer"));
12
12
  const nunjucks_1 = __importDefault(require("nunjucks"));
13
13
  const path_1 = require("path");
14
14
  const __1 = require("..");
15
- const config_1 = require("../config");
15
+ const config_1 = require("../features/config");
16
16
  const types_1 = require("../types");
17
17
  let emailTemplateDir = "";
18
18
  let transport = undefined;
19
19
  async function initEmailTransport() {
20
20
  try {
21
- if (config_1.config.getBoolean("SMTP_ENABLED")) {
21
+ if (config_1.ConfigInstance.getInstance().getBoolean("SMTP_ENABLED")) {
22
22
  transport = nodemailer_1.default.createTransport({
23
- host: config_1.config.get("SMTP_HOST"),
24
- port: config_1.config.getNumber("SMTP_PORT"),
25
- secure: config_1.config.getBoolean("SMTP_SECURE"),
26
- ignoreTLS: config_1.config.getBoolean("SMTP_IGNORE_TLS"),
23
+ host: config_1.ConfigInstance.getInstance().get("SMTP_HOST"),
24
+ port: config_1.ConfigInstance.getInstance().getNumber("SMTP_PORT"),
25
+ secure: config_1.ConfigInstance.getInstance().getBoolean("SMTP_SECURE"),
26
+ ignoreTLS: config_1.ConfigInstance.getInstance().getBoolean("SMTP_IGNORE_TLS"),
27
27
  auth: {
28
- user: config_1.config.get("SMTP_USER"),
29
- pass: config_1.config.get("SMTP_PASS"),
28
+ user: config_1.ConfigInstance.getInstance().get("SMTP_USER"),
29
+ pass: config_1.ConfigInstance.getInstance().get("SMTP_PASS"),
30
30
  },
31
31
  });
32
32
  await transport.verify();
33
- emailTemplateDir = (0, path_1.resolve)(process.cwd(), config_1.config.get("EMAIL_TEMPLATE_DIR"));
33
+ emailTemplateDir = (0, path_1.resolve)(process.cwd(), config_1.ConfigInstance.getInstance().get("EMAIL_TEMPLATE_DIR"));
34
34
  nunjucks_1.default.configure(emailTemplateDir, { autoescape: true });
35
35
  }
36
36
  }
@@ -96,7 +96,7 @@ async function init() {
96
96
  try {
97
97
  const response = await transport.sendMail({
98
98
  ...object.payload,
99
- from: config_1.config.get("SMTP_FROM"),
99
+ from: config_1.ConfigInstance.getInstance().get("SMTP_FROM"),
100
100
  });
101
101
  object.response = response;
102
102
  object.sent = true;