@openinc/parse-server-opendash 3.31.26 → 3.32.1

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 (205) hide show
  1. package/dist/features/cloudcode/classes/CloudCodeClass.d.ts +10 -0
  2. package/dist/features/cloudcode/classes/CloudCodeClass.js +24 -0
  3. package/dist/features/cloudcode/helper/checkCloudCodeFunction.d.ts +7 -0
  4. package/dist/features/cloudcode/helper/checkCloudCodeFunction.js +14 -0
  5. package/dist/features/cloudcode/index.d.ts +3 -0
  6. package/dist/features/cloudcode/index.js +11 -0
  7. package/dist/features/cloudcode/services/loadCloudCode.d.ts +9 -0
  8. package/dist/features/cloudcode/services/loadCloudCode.js +44 -0
  9. package/dist/features/cloudcode/types/CloudCodeFunction.d.ts +7 -0
  10. package/dist/features/cloudcode/types/CloudCodeFunction.js +2 -0
  11. package/dist/features/config/helper/getConfig.d.ts +18 -0
  12. package/dist/features/config/helper/getConfig.js +36 -0
  13. package/dist/features/config/index.d.ts +1 -0
  14. package/dist/features/config/index.js +4 -1
  15. package/dist/features/permissions/helper/ensurePermission.d.ts +10 -0
  16. package/dist/features/permissions/helper/ensurePermission.js +34 -0
  17. package/dist/features/permissions/helper/hasPermission.d.ts +7 -0
  18. package/dist/features/permissions/helper/hasPermission.js +16 -0
  19. package/dist/features/permissions/helper/requirePermission.d.ts +13 -0
  20. package/dist/features/permissions/helper/requirePermission.js +28 -0
  21. package/dist/features/permissions/index.d.ts +3 -0
  22. package/dist/features/permissions/index.js +7 -1
  23. package/dist/features/schema/classes/SchemaClass.d.ts +9 -0
  24. package/dist/features/schema/classes/SchemaClass.js +24 -0
  25. package/dist/features/schema/helper/defaultHandler.d.ts +33 -0
  26. package/dist/features/schema/helper/defaultHandler.js +106 -0
  27. package/dist/features/schema/helper/ensureRole.d.ts +17 -0
  28. package/dist/features/schema/helper/ensureRole.js +68 -0
  29. package/dist/features/schema/helper/ensureUserRole.d.ts +7 -0
  30. package/dist/features/schema/helper/ensureUserRole.js +25 -0
  31. package/dist/features/schema/helper/immutableField.d.ts +16 -0
  32. package/dist/features/schema/helper/immutableField.js +26 -0
  33. package/dist/features/schema/helper/isClassEnabled.d.ts +1 -0
  34. package/dist/features/schema/helper/isClassEnabled.js +18 -0
  35. package/dist/features/schema/index.d.ts +12 -0
  36. package/dist/features/schema/index.js +41 -0
  37. package/dist/features/schema/services/afterDeleteHook.d.ts +13 -0
  38. package/dist/features/schema/services/afterDeleteHook.js +28 -0
  39. package/dist/features/schema/services/afterSaveHook.d.ts +12 -0
  40. package/dist/features/schema/services/afterSaveHook.js +27 -0
  41. package/dist/features/schema/services/beforeDeleteHook.d.ts +11 -0
  42. package/dist/features/schema/services/beforeDeleteHook.js +26 -0
  43. package/dist/features/schema/services/beforeSaveHook.d.ts +12 -0
  44. package/dist/features/schema/services/beforeSaveHook.js +27 -0
  45. package/dist/features/schema/services/initDefaultData.d.ts +1 -0
  46. package/dist/features/schema/services/initDefaultData.js +45 -0
  47. package/dist/features/schema/services/initDefaultRoles.d.ts +1 -0
  48. package/dist/features/schema/services/initDefaultRoles.js +16 -0
  49. package/dist/features/schema/services/initSchema.d.ts +1 -0
  50. package/dist/features/schema/services/initSchema.js +32 -0
  51. package/dist/features/schema/types/hookTypes.d.ts +13 -0
  52. package/dist/features/schema/types/hookTypes.js +2 -0
  53. package/dist/features/webpush/index.d.ts +1 -0
  54. package/dist/features/webpush/index.js +5 -0
  55. package/dist/features/webpush/services/initWebPush.d.ts +1 -0
  56. package/dist/features/webpush/services/initWebPush.js +20 -0
  57. package/dist/functions/getSchemaForAdmin.js +2 -2
  58. package/dist/hooks/Alarm.js +4 -4
  59. package/dist/hooks/AlarmAction.js +4 -4
  60. package/dist/hooks/AlarmWebhook.js +4 -4
  61. package/dist/hooks/Assets.js +15 -12
  62. package/dist/hooks/Attachment.js +5 -5
  63. package/dist/hooks/BDE_Form.js +3 -3
  64. package/dist/hooks/BDE_List.js +3 -3
  65. package/dist/hooks/BDE_ListEntry.js +3 -3
  66. package/dist/hooks/BDE_Page.js +4 -4
  67. package/dist/hooks/BDE_Result.js +3 -3
  68. package/dist/hooks/BDE_Unit.js +3 -3
  69. package/dist/hooks/Company.js +5 -5
  70. package/dist/hooks/Config.js +4 -4
  71. package/dist/hooks/Config_open_service.js +4 -4
  72. package/dist/hooks/Contact.js +5 -5
  73. package/dist/hooks/Core_Email.js +2 -2
  74. package/dist/hooks/Core_Token.js +2 -2
  75. package/dist/hooks/Dashboard.js +4 -4
  76. package/dist/hooks/Documentation_Category.js +5 -5
  77. package/dist/hooks/Documentation_Config.js +6 -6
  78. package/dist/hooks/Documentation_Document.js +5 -5
  79. package/dist/hooks/GTFS_Agency.js +5 -5
  80. package/dist/hooks/GTFS_Bikes_Allowed.js +5 -5
  81. package/dist/hooks/GTFS_Calendar.js +5 -5
  82. package/dist/hooks/GTFS_Direction.js +5 -5
  83. package/dist/hooks/GTFS_Level.js +5 -5
  84. package/dist/hooks/GTFS_Location_Type.js +5 -5
  85. package/dist/hooks/GTFS_Route.js +5 -5
  86. package/dist/hooks/GTFS_Route_Type.js +5 -5
  87. package/dist/hooks/GTFS_Stop.js +5 -5
  88. package/dist/hooks/GTFS_Stop_Times.js +5 -5
  89. package/dist/hooks/GTFS_Trip.js +5 -5
  90. package/dist/hooks/GTFS_Wheelchair_Accessible.js +5 -5
  91. package/dist/hooks/GTFS_Wheelchair_Boarding.js +5 -5
  92. package/dist/hooks/Knowledge_Article.js +5 -5
  93. package/dist/hooks/Knowledge_Category.js +5 -5
  94. package/dist/hooks/Knowledge_Chat.js +5 -5
  95. package/dist/hooks/Knowledge_ChatMessage.js +5 -5
  96. package/dist/hooks/Knowledge_Document.js +7 -7
  97. package/dist/hooks/Knowledge_DocumentPage.js +6 -6
  98. package/dist/hooks/Knowledge_Video.js +5 -5
  99. package/dist/hooks/Language.js +5 -5
  100. package/dist/hooks/Log.js +5 -5
  101. package/dist/hooks/MES_Article.js +5 -5
  102. package/dist/hooks/MES_Order.js +5 -5
  103. package/dist/hooks/MES_OrderPlan.js +5 -5
  104. package/dist/hooks/MIAAS_MDSEndpoint.js +5 -5
  105. package/dist/hooks/ML_DataSelection.js +5 -5
  106. package/dist/hooks/MailTemplate.js +5 -5
  107. package/dist/hooks/Maintenance_Downtime.js +5 -5
  108. package/dist/hooks/Maintenance_Duedate.js +5 -5
  109. package/dist/hooks/Maintenance_Frequency.js +5 -5
  110. package/dist/hooks/Maintenance_Issuecategory.js +5 -5
  111. package/dist/hooks/Maintenance_Item.js +5 -5
  112. package/dist/hooks/Maintenance_Kanban_State.js +5 -5
  113. package/dist/hooks/Maintenance_Media.js +5 -5
  114. package/dist/hooks/Maintenance_Message.js +5 -5
  115. package/dist/hooks/Maintenance_Order.js +5 -5
  116. package/dist/hooks/Maintenance_Priority.js +5 -5
  117. package/dist/hooks/Maintenance_Project.js +5 -5
  118. package/dist/hooks/Maintenance_Restriction.js +5 -5
  119. package/dist/hooks/Maintenance_Schedule.js +6 -6
  120. package/dist/hooks/Maintenance_Schedule_Execution.js +5 -5
  121. package/dist/hooks/Maintenance_Schedule_Execution_Step.js +5 -5
  122. package/dist/hooks/Maintenance_Schedule_Step.js +5 -5
  123. package/dist/hooks/Maintenance_Schedule_Template.js +7 -7
  124. package/dist/hooks/Maintenance_Source_File.js +5 -5
  125. package/dist/hooks/Maintenance_Ticket.js +5 -5
  126. package/dist/hooks/Maintenance_Ticket_Assignment.js +5 -5
  127. package/dist/hooks/Maintenance_Ticket_FormConfig.js +5 -5
  128. package/dist/hooks/Maintenance_Ticket_Issuecategory.js +5 -5
  129. package/dist/hooks/Maintenance_Ticket_Kanban_State.js +7 -6
  130. package/dist/hooks/Maintenance_Ticket_Kanban_State_Current.js +5 -5
  131. package/dist/hooks/Maintenance_Ticket_Material.js +5 -5
  132. package/dist/hooks/Maintenance_Ticket_Project.js +5 -5
  133. package/dist/hooks/Maintenance_Ticket_QR_Code.js +5 -5
  134. package/dist/hooks/Maintenance_Ticket_Source.js +5 -5
  135. package/dist/hooks/Maintenance_Ticket_Title.js +5 -5
  136. package/dist/hooks/Monitoring_DataHierachies.js +5 -5
  137. package/dist/hooks/Monitoring_Jobs.js +5 -5
  138. package/dist/hooks/Monitoring_ParseTableSensor.js +5 -5
  139. package/dist/hooks/Monitoring_ReportImage.js +5 -5
  140. package/dist/hooks/Monitoring_Slideshow.js +4 -4
  141. package/dist/hooks/NavigationGroup.js +4 -4
  142. package/dist/hooks/NavigationItem.js +4 -4
  143. package/dist/hooks/Notification.js +6 -6
  144. package/dist/hooks/Notification_Setting.js +5 -5
  145. package/dist/hooks/OWPlcDevice.js +3 -3
  146. package/dist/hooks/OWPlcItem.js +3 -3
  147. package/dist/hooks/Permission.js +5 -5
  148. package/dist/hooks/Push.js +4 -4
  149. package/dist/hooks/Report.js +4 -4
  150. package/dist/hooks/Share.js +4 -4
  151. package/dist/hooks/Source.js +9 -8
  152. package/dist/hooks/SourceMeta.js +4 -4
  153. package/dist/hooks/Tenant.js +7 -7
  154. package/dist/hooks/TenantMeta.js +5 -5
  155. package/dist/hooks/TenantTrustedDomain.js +4 -4
  156. package/dist/hooks/UserData.js +4 -4
  157. package/dist/hooks/User_Setting.js +5 -5
  158. package/dist/hooks/VirtualKPI.js +5 -5
  159. package/dist/hooks/WebPush.js +5 -5
  160. package/dist/hooks/Widget.js +4 -4
  161. package/dist/hooks/WidgetPreset.js +6 -5
  162. package/dist/hooks/_ChangeLog.js +6 -6
  163. package/dist/hooks/_Role.js +2 -2
  164. package/dist/hooks/_User.js +13 -13
  165. package/dist/index.d.ts +4 -186
  166. package/dist/index.js +29 -553
  167. package/dist/types/Documentation_Category.d.ts +1 -1
  168. package/dist/types/Documentation_Document.d.ts +1 -1
  169. package/dist/types/EMS_ChargePoint.d.ts +51 -0
  170. package/dist/types/EMS_ChargePoint.js +89 -0
  171. package/dist/types/Maintenance_Schedule.d.ts +2 -2
  172. package/dist/types/Maintenance_Ticket_Data.d.ts +6 -7
  173. package/dist/types/Notification.d.ts +3 -0
  174. package/dist/types/Notification.js +6 -0
  175. package/dist/types/RAG_Data.d.ts +50 -0
  176. package/dist/types/RAG_Data.js +89 -0
  177. package/dist/types/RAG_Interview.d.ts +23 -0
  178. package/dist/types/RAG_Interview.js +35 -0
  179. package/dist/types/RAG_Meta.d.ts +23 -0
  180. package/dist/types/RAG_Meta.js +35 -0
  181. package/dist/types/RAG_Prompts.d.ts +31 -0
  182. package/dist/types/RAG_Prompts.js +53 -0
  183. package/dist/types/RAG_Questions.d.ts +16 -0
  184. package/dist/types/RAG_Questions.js +23 -0
  185. package/dist/types/RAG_Request.d.ts +23 -0
  186. package/dist/types/RAG_Request.js +35 -0
  187. package/dist/types/Spreadsheet_Workbook.d.ts +34 -0
  188. package/dist/types/Spreadsheet_Workbook.js +53 -0
  189. package/dist/types/index.d.ts +22 -3
  190. package/dist/types/index.js +19 -3
  191. package/package.json +3 -2
  192. package/schema/Documentation_Category.json +6 -15
  193. package/schema/Documentation_Document.json +8 -20
  194. package/schema/EMS_ChargePoint.json +80 -0
  195. package/schema/Knowledge_Chat.json +3 -0
  196. package/schema/Maintenance_Schedule.json +1 -1
  197. package/schema/Maintenance_Ticket_Data.json +1 -1
  198. package/schema/Notification.json +5 -0
  199. package/schema/RAG_Data.json +94 -0
  200. package/schema/RAG_Interview.json +54 -0
  201. package/schema/RAG_Meta.json +54 -0
  202. package/schema/RAG_Prompts.json +57 -0
  203. package/schema/RAG_Questions.json +42 -0
  204. package/schema/RAG_Request.json +53 -0
  205. package/schema/Spreadsheet_Workbook.json +73 -0
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureUserRole = ensureUserRole;
4
+ /**
5
+ * Ensures that a user has a specific role.
6
+ * @param user The user to assign the role to.
7
+ * @param roleName The name of the role.
8
+ * @param add Specifies whether to add or remove the user from the role. Default is false (remove).
9
+ */
10
+ async function ensureUserRole(user, roleName, add = false) {
11
+ const role = await new Parse.Query(Parse.Role)
12
+ .equalTo("name", roleName)
13
+ .first({ useMasterKey: true });
14
+ if (role) {
15
+ const relation = role.relation("users");
16
+ if (add) {
17
+ relation.add(user);
18
+ }
19
+ else {
20
+ relation.remove(user);
21
+ }
22
+ await role.save(null, { useMasterKey: true });
23
+ console.log("userRole", user.get("username"), roleName, add);
24
+ }
25
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Checks if a field is immutable and throws an error if an attempt is made to edit it in a beforeSave hook.
3
+ *
4
+ * This will not throw an error if the request is made with the master key.
5
+ *
6
+ * @param request - The request object containing the original and object Parse objects, master flag, and session token.
7
+ * @param fieldName - The name of the field to check for immutability.
8
+ * @param permissionName - The name of the permission required to edit the field. Defaults to "parse:edit-immutable-fields".
9
+ * @returns Promise<void>
10
+ */
11
+ export declare function immutableField(request: {
12
+ original?: Parse.Object;
13
+ object: Parse.Object;
14
+ master?: boolean;
15
+ sessionToken: string | undefined;
16
+ }, fieldName: string, permissionName?: string | null): Promise<void>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.immutableField = immutableField;
4
+ const permissions_1 = require("../../permissions");
5
+ const fast_equals_1 = require("fast-equals");
6
+ /**
7
+ * Checks if a field is immutable and throws an error if an attempt is made to edit it in a beforeSave hook.
8
+ *
9
+ * This will not throw an error if the request is made with the master key.
10
+ *
11
+ * @param request - The request object containing the original and object Parse objects, master flag, and session token.
12
+ * @param fieldName - The name of the field to check for immutability.
13
+ * @param permissionName - The name of the permission required to edit the field. Defaults to "parse:edit-immutable-fields".
14
+ * @returns Promise<void>
15
+ */
16
+ async function immutableField(request, fieldName, permissionName = "parse:edit-immutable-fields") {
17
+ if (!request.original || request.master) {
18
+ return;
19
+ }
20
+ const previousValue = JSON.stringify(request.original.get(fieldName));
21
+ const nextValue = JSON.stringify(request.object.get(fieldName));
22
+ if ((0, fast_equals_1.deepEqual)(previousValue, nextValue)) {
23
+ return;
24
+ }
25
+ await (0, permissions_1.requirePermission)(request, permissionName, `You are not allowed to edit the '${fieldName}' field.`);
26
+ }
@@ -0,0 +1 @@
1
+ export declare function isClassEnabled(className: string): boolean;
@@ -0,0 +1,18 @@
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.isClassEnabled = isClassEnabled;
7
+ const config_1 = require("../../config");
8
+ const featuremap_json_1 = __importDefault(require("../../../featuremap.json"));
9
+ function getFeatureForClassName(className) {
10
+ const map = featuremap_json_1.default;
11
+ return map[className] || "unknown";
12
+ }
13
+ function isClassEnabled(className) {
14
+ // if (!config.getBoolean("FEATURES_ENABLED")) return true;
15
+ const feature = getFeatureForClassName(className);
16
+ const enabled = (0, config_1.isFeatureEnabled)(feature);
17
+ return enabled;
18
+ }
@@ -0,0 +1,12 @@
1
+ export { afterDeleteHook } from "./services/afterDeleteHook";
2
+ export { beforeDeleteHook } from "./services/beforeDeleteHook";
3
+ export { afterSaveHook } from "./services/afterSaveHook";
4
+ export { beforeSaveHook } from "./services/beforeSaveHook";
5
+ export * from "./types/hookTypes";
6
+ export { immutableField } from "./helper/immutableField";
7
+ export { defaultHandler, defaultAclHandler } from "./helper/defaultHandler";
8
+ export { initSchema } from "./services/initSchema";
9
+ export { ensureUserRole } from "./helper/ensureUserRole";
10
+ export { ensureRole } from "./helper/ensureRole";
11
+ export { initDefaultRoles } from "./services/initDefaultRoles";
12
+ export { initDefaultData } from "./services/initDefaultData";
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.initDefaultData = exports.initDefaultRoles = exports.ensureRole = exports.ensureUserRole = exports.initSchema = exports.defaultAclHandler = exports.defaultHandler = exports.immutableField = exports.beforeSaveHook = exports.afterSaveHook = exports.beforeDeleteHook = exports.afterDeleteHook = void 0;
18
+ var afterDeleteHook_1 = require("./services/afterDeleteHook");
19
+ Object.defineProperty(exports, "afterDeleteHook", { enumerable: true, get: function () { return afterDeleteHook_1.afterDeleteHook; } });
20
+ var beforeDeleteHook_1 = require("./services/beforeDeleteHook");
21
+ Object.defineProperty(exports, "beforeDeleteHook", { enumerable: true, get: function () { return beforeDeleteHook_1.beforeDeleteHook; } });
22
+ var afterSaveHook_1 = require("./services/afterSaveHook");
23
+ Object.defineProperty(exports, "afterSaveHook", { enumerable: true, get: function () { return afterSaveHook_1.afterSaveHook; } });
24
+ var beforeSaveHook_1 = require("./services/beforeSaveHook");
25
+ Object.defineProperty(exports, "beforeSaveHook", { enumerable: true, get: function () { return beforeSaveHook_1.beforeSaveHook; } });
26
+ __exportStar(require("./types/hookTypes"), exports);
27
+ var immutableField_1 = require("./helper/immutableField");
28
+ Object.defineProperty(exports, "immutableField", { enumerable: true, get: function () { return immutableField_1.immutableField; } });
29
+ var defaultHandler_1 = require("./helper/defaultHandler");
30
+ Object.defineProperty(exports, "defaultHandler", { enumerable: true, get: function () { return defaultHandler_1.defaultHandler; } });
31
+ Object.defineProperty(exports, "defaultAclHandler", { enumerable: true, get: function () { return defaultHandler_1.defaultAclHandler; } });
32
+ var initSchema_1 = require("./services/initSchema");
33
+ Object.defineProperty(exports, "initSchema", { enumerable: true, get: function () { return initSchema_1.initSchema; } });
34
+ var ensureUserRole_1 = require("./helper/ensureUserRole");
35
+ Object.defineProperty(exports, "ensureUserRole", { enumerable: true, get: function () { return ensureUserRole_1.ensureUserRole; } });
36
+ var ensureRole_1 = require("./helper/ensureRole");
37
+ Object.defineProperty(exports, "ensureRole", { enumerable: true, get: function () { return ensureRole_1.ensureRole; } });
38
+ var initDefaultRoles_1 = require("./services/initDefaultRoles");
39
+ Object.defineProperty(exports, "initDefaultRoles", { enumerable: true, get: function () { return initDefaultRoles_1.initDefaultRoles; } });
40
+ var initDefaultData_1 = require("./services/initDefaultData");
41
+ Object.defineProperty(exports, "initDefaultData", { enumerable: true, get: function () { return initDefaultData_1.initDefaultData; } });
@@ -0,0 +1,13 @@
1
+ import { afterDeleteHookType } from "..";
2
+ export declare const afterDeleteHooks: Record<string, afterDeleteHookType<any>[]>;
3
+ /**
4
+ * Registers a afterDelete hook for a Parse class. In comparison to Parse.Cloud.afterDelete(), this function allows multiple beforeSave hooks to be registered for the same class.
5
+ *
6
+ * @template T - The type of the Parse.Object.
7
+ * @param {string | { new (): T }} target - The name of the Parse class or the class itself.
8
+ * @param {afterDeleteHookType<T>} callback - The callback function to be executed after a delete operation.
9
+ * @returns {void}
10
+ */
11
+ export declare function afterDeleteHook<T extends Parse.Object<Parse.Attributes>>(target: string | {
12
+ new (): T;
13
+ }, callback: afterDeleteHookType<T>): void;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.afterDeleteHooks = void 0;
4
+ exports.afterDeleteHook = afterDeleteHook;
5
+ exports.afterDeleteHooks = {};
6
+ /**
7
+ * Registers a afterDelete hook for a Parse class. In comparison to Parse.Cloud.afterDelete(), this function allows multiple beforeSave hooks to be registered for the same class.
8
+ *
9
+ * @template T - The type of the Parse.Object.
10
+ * @param {string | { new (): T }} target - The name of the Parse class or the class itself.
11
+ * @param {afterDeleteHookType<T>} callback - The callback function to be executed after a delete operation.
12
+ * @returns {void}
13
+ */
14
+ function afterDeleteHook(target, callback) {
15
+ // @ts-ignore
16
+ const className = typeof target === "string" ? target : target.className;
17
+ if (!exports.afterDeleteHooks[className]) {
18
+ exports.afterDeleteHooks[className] = [];
19
+ Parse.Cloud.afterDelete(className, async function afterDeleteHookFunction(request) {
20
+ const sessionToken = request.user?.getSessionToken();
21
+ const newRequest = { ...request, sessionToken };
22
+ for (const fn of exports.afterDeleteHooks[className]) {
23
+ await fn(newRequest);
24
+ }
25
+ });
26
+ }
27
+ exports.afterDeleteHooks[className].push(callback);
28
+ }
@@ -0,0 +1,12 @@
1
+ import { afterSaveHookType } from "..";
2
+ /**
3
+ * Registers a afterSave hook for a Parse class. In comparison to Parse.Cloud.afterSave(), this function allows multiple beforeSave hooks to be registered for the same class.
4
+ *
5
+ * @template T - The type of the Parse.Object.
6
+ * @param {string | { new (): T }} target - The name of the Parse class or the class itself.
7
+ * @param {afterSaveHookType<T>} callback - The callback function to be executed after saving the object.
8
+ * @returns {void}
9
+ */
10
+ export declare function afterSaveHook<T extends Parse.Object<Parse.Attributes>>(target: string | {
11
+ new (): T;
12
+ }, callback: afterSaveHookType<T>): void;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.afterSaveHook = afterSaveHook;
4
+ const afterSaveHooks = {};
5
+ /**
6
+ * Registers a afterSave hook for a Parse class. In comparison to Parse.Cloud.afterSave(), this function allows multiple beforeSave hooks to be registered for the same class.
7
+ *
8
+ * @template T - The type of the Parse.Object.
9
+ * @param {string | { new (): T }} target - The name of the Parse class or the class itself.
10
+ * @param {afterSaveHookType<T>} callback - The callback function to be executed after saving the object.
11
+ * @returns {void}
12
+ */
13
+ function afterSaveHook(target, callback) {
14
+ // @ts-ignore
15
+ const className = typeof target === "string" ? target : target.className;
16
+ if (!afterSaveHooks[className]) {
17
+ afterSaveHooks[className] = [];
18
+ Parse.Cloud.afterSave(className, async function afterSaveHookFunction(request) {
19
+ const sessionToken = request.user?.getSessionToken();
20
+ const newRequest = { ...request, sessionToken };
21
+ for (const fn of afterSaveHooks[className]) {
22
+ await fn(newRequest);
23
+ }
24
+ });
25
+ }
26
+ afterSaveHooks[className].push(callback);
27
+ }
@@ -0,0 +1,11 @@
1
+ import { beforeDeleteHookType } from "..";
2
+ /**
3
+ * Registers a beforeDelete hook for a Parse class. In comparison to Parse.Cloud.beforeDelete(), this function allows multiple beforeSave hooks to be registered for the same class.
4
+ *
5
+ * @template T - The type of the Parse.Object.
6
+ * @param {string | { new (): T }} target - The name of the Parse class or the class itself.
7
+ * @param {beforeDeleteHookType<T>} callback - The callback function to be executed before deleting an object.
8
+ */
9
+ export declare function beforeDeleteHook<T extends Parse.Object<Parse.Attributes>>(target: string | {
10
+ new (): T;
11
+ }, callback: beforeDeleteHookType<T>): void;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.beforeDeleteHook = beforeDeleteHook;
4
+ const beforeDeleteHooks = {};
5
+ /**
6
+ * Registers a beforeDelete hook for a Parse class. In comparison to Parse.Cloud.beforeDelete(), this function allows multiple beforeSave hooks to be registered for the same class.
7
+ *
8
+ * @template T - The type of the Parse.Object.
9
+ * @param {string | { new (): T }} target - The name of the Parse class or the class itself.
10
+ * @param {beforeDeleteHookType<T>} callback - The callback function to be executed before deleting an object.
11
+ */
12
+ function beforeDeleteHook(target, callback) {
13
+ // @ts-ignore
14
+ const className = typeof target === "string" ? target : target.className;
15
+ if (!beforeDeleteHooks[className]) {
16
+ beforeDeleteHooks[className] = [];
17
+ Parse.Cloud.beforeDelete(className, async function beforeDeleteHookFunction(request) {
18
+ const sessionToken = request.user?.getSessionToken();
19
+ const newRequest = { ...request, sessionToken };
20
+ for (const fn of beforeDeleteHooks[className]) {
21
+ await fn(newRequest);
22
+ }
23
+ });
24
+ }
25
+ beforeDeleteHooks[className].push(callback);
26
+ }
@@ -0,0 +1,12 @@
1
+ import { beforeSaveHookType } from "..";
2
+ /**
3
+ * Registers a beforeSave hook for a Parse class. In comparison to Parse.Cloud.beforeSave(), this function allows multiple beforeSave hooks to be registered for the same class.
4
+ *
5
+ * @template T - The type of the Parse.Object.
6
+ * @param {string | { new (): T }} target - The name of the Parse class or the class itself.
7
+ * @param {beforeSaveHookType<T>} callback - The callback function to be executed before saving the object.
8
+ * @returns {void}
9
+ */
10
+ export declare function beforeSaveHook<T extends Parse.Object<Parse.Attributes>>(target: string | {
11
+ new (): T;
12
+ }, callback: beforeSaveHookType<T>): void;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.beforeSaveHook = beforeSaveHook;
4
+ const beforeSaveHooks = {};
5
+ /**
6
+ * Registers a beforeSave hook for a Parse class. In comparison to Parse.Cloud.beforeSave(), this function allows multiple beforeSave hooks to be registered for the same class.
7
+ *
8
+ * @template T - The type of the Parse.Object.
9
+ * @param {string | { new (): T }} target - The name of the Parse class or the class itself.
10
+ * @param {beforeSaveHookType<T>} callback - The callback function to be executed before saving the object.
11
+ * @returns {void}
12
+ */
13
+ function beforeSaveHook(target, callback) {
14
+ // @ts-ignore
15
+ const className = typeof target === "string" ? target : target.className;
16
+ if (!beforeSaveHooks[className]) {
17
+ beforeSaveHooks[className] = [];
18
+ Parse.Cloud.beforeSave(className, async function beforeSaveHookFunction(request) {
19
+ const sessionToken = request.user?.getSessionToken();
20
+ const newRequest = { ...request, sessionToken };
21
+ for (const fn of beforeSaveHooks[className]) {
22
+ await fn(newRequest);
23
+ }
24
+ });
25
+ }
26
+ beforeSaveHooks[className].push(callback);
27
+ }
@@ -0,0 +1 @@
1
+ export declare function initDefaultData(): Promise<null | undefined>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initDefaultData = initDefaultData;
4
+ const createRandomPassword_1 = require("../../../helper/createRandomPassword");
5
+ const types_1 = require("../../../types");
6
+ const permissions_1 = require("../../permissions");
7
+ async function initDefaultData() {
8
+ try {
9
+ const permissions = [await (0, permissions_1.ensurePermission)("parse-admin")];
10
+ const tenantCount = await new Parse.Query(types_1.Tenant).count({
11
+ useMasterKey: true,
12
+ });
13
+ if (tenantCount > 0) {
14
+ return null;
15
+ }
16
+ const tenant = new types_1.Tenant({
17
+ label: "Default Tenant",
18
+ });
19
+ await tenant.save(null, { useMasterKey: true });
20
+ const password = await (0, createRandomPassword_1.createRandomPassword)();
21
+ const user = new Parse.User({
22
+ name: "Default User",
23
+ username: "openinc",
24
+ password: password,
25
+ email: "noreply@openinc.de",
26
+ emailVerified: true,
27
+ tenant,
28
+ tenantVerified: true,
29
+ tenantAdmin: true,
30
+ });
31
+ await user.save(null, { useMasterKey: true });
32
+ for (const permission of permissions) {
33
+ permission.getACL()?.setReadAccess(user, true);
34
+ await permission.save(null, { useMasterKey: true });
35
+ }
36
+ console.log("Default User and Tenant created.");
37
+ console.log("Username: " + user.get("username"));
38
+ console.log("Password: " + password);
39
+ console.log("User: " + user.id);
40
+ console.log("Tenant: " + tenant.id);
41
+ }
42
+ catch (error) {
43
+ console.error(error);
44
+ }
45
+ }
@@ -0,0 +1 @@
1
+ export declare function initDefaultRoles(): Promise<void>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initDefaultRoles = initDefaultRoles;
4
+ const __1 = require("..");
5
+ async function initDefaultRoles() {
6
+ try {
7
+ await (0, __1.ensureRole)("od-user");
8
+ await (0, __1.ensureRole)("od-admin");
9
+ await (0, __1.ensureRole)("od-tenant-user");
10
+ await (0, __1.ensureRole)("od-tenant-verified");
11
+ await (0, __1.ensureRole)("od-tenant-admin");
12
+ }
13
+ catch (error) {
14
+ console.error(error);
15
+ }
16
+ }
@@ -0,0 +1 @@
1
+ export declare function initSchema(): Promise<void>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initSchema = initSchema;
4
+ const parse_server_schema_1 = require("@openinc/parse-server-schema");
5
+ const path_1 = require("path");
6
+ const config_1 = require("../../config");
7
+ const isClassEnabled_1 = require("../helper/isClassEnabled");
8
+ const SchemaClass_1 = require("../classes/SchemaClass");
9
+ const PREFIX = "OD3_";
10
+ const schemaHandler = SchemaClass_1.SchemaClass.getInstance();
11
+ async function initSchema() {
12
+ const config = config_1.ConfigInstance.getInstance();
13
+ await (0, parse_server_schema_1.loadConfig)();
14
+ try {
15
+ await (0, parse_server_schema_1.up)((0, path_1.resolve)(__dirname, "../../../../schema"), {
16
+ prefix: PREFIX,
17
+ deleteClasses: config.getBoolean("FORCE_SCHEMA"),
18
+ deleteFields: config.getBoolean("FORCE_SCHEMA"),
19
+ deleteNonEmptyClass: config.getBoolean("FORCE_DELETE_CLASS"),
20
+ filter: (className) => (0, isClassEnabled_1.isClassEnabled)(className),
21
+ });
22
+ schemaHandler.setSchema(Object.fromEntries((await Parse.Schema.all()).map((schema) => [
23
+ schema.className,
24
+ schema,
25
+ ])));
26
+ }
27
+ catch (error) {
28
+ console.error("Error while updating schema");
29
+ console.error(error);
30
+ process.exit(1);
31
+ }
32
+ }
@@ -0,0 +1,13 @@
1
+ import type { Cloud as ParseCloud } from "parse";
2
+ export type beforeSaveHookType<T extends Parse.Object<Parse.Attributes>> = (request: ParseCloud.BeforeSaveRequest<T> & {
3
+ sessionToken: string | undefined;
4
+ }) => Promise<void>;
5
+ export type afterSaveHookType<T extends Parse.Object<Parse.Attributes>> = (request: ParseCloud.AfterSaveRequest<T> & {
6
+ sessionToken: string | undefined;
7
+ }) => Promise<void>;
8
+ export type beforeDeleteHookType<T extends Parse.Object<Parse.Attributes>> = (request: ParseCloud.BeforeDeleteRequest<T> & {
9
+ sessionToken: string | undefined;
10
+ }) => Promise<void>;
11
+ export type afterDeleteHookType<T extends Parse.Object<Parse.Attributes>> = (request: ParseCloud.AfterDeleteRequest<T> & {
12
+ sessionToken: string | undefined;
13
+ }) => Promise<void>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export { initWebPush } from "./services/initWebPush";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initWebPush = void 0;
4
+ var initWebPush_1 = require("./services/initWebPush");
5
+ Object.defineProperty(exports, "initWebPush", { enumerable: true, get: function () { return initWebPush_1.initWebPush; } });
@@ -0,0 +1 @@
1
+ export declare function initWebPush(): Promise<void>;
@@ -0,0 +1,20 @@
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.initWebPush = initWebPush;
7
+ const config_1 = require("../../config");
8
+ const web_push_1 = __importDefault(require("web-push"));
9
+ async function initWebPush() {
10
+ try {
11
+ if (config_1.ConfigInstance.getInstance().getBoolean("WEB_PUSH_ENABLED")) {
12
+ web_push_1.default.setVapidDetails(config_1.ConfigInstance.getInstance().get("WEB_PUSH_HOST"), config_1.ConfigInstance.getInstance().get("WEB_PUSH_VAPID_PUBLIC_KEY"), config_1.ConfigInstance.getInstance().get("WEB_PUSH_VAPID_PRIVATE_KEY"));
13
+ web_push_1.default.setGCMAPIKey(config_1.ConfigInstance.getInstance().get("WEB_PUSH_FCM_KEY"));
14
+ }
15
+ }
16
+ catch (error) {
17
+ console.error(error);
18
+ process.exit(1);
19
+ }
20
+ }
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
- const __1 = require("..");
4
+ const permissions_1 = require("../features/permissions");
5
5
  async function init(name) {
6
6
  Parse.Cloud.define(name, async (request) => {
7
- await (0, __1.requirePermission)({
7
+ await (0, permissions_1.requirePermission)({
8
8
  sessionToken: request.user?.getSessionToken(),
9
9
  master: request.master,
10
10
  }, "parse-admin", "You are not allowed to fetch the schema");
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
- const __1 = require("..");
4
+ const schema_1 = require("../features/schema");
5
5
  const config_1 = require("../features/config");
6
6
  const types_1 = require("../types");
7
7
  async function init() {
8
- (0, __1.beforeSaveHook)(types_1.Alarm, async (request) => {
8
+ (0, schema_1.beforeSaveHook)(types_1.Alarm, async (request) => {
9
9
  const { object, original, user } = request;
10
- await (0, __1.defaultHandler)(request);
10
+ await (0, schema_1.defaultHandler)(request);
11
11
  // TODO
12
12
  });
13
- (0, __1.afterSaveHook)(types_1.Alarm, async ({ object, original, user }) => {
13
+ (0, schema_1.afterSaveHook)(types_1.Alarm, async ({ object, original, user }) => {
14
14
  if (config_1.ConfigInstance.getInstance().getBoolean("OPENWARE")) {
15
15
  const username = user?.get("username");
16
16
  const baseurl = config_1.ConfigInstance.getInstance().get("OPENWARE_BASEURL");
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
- const __1 = require("..");
4
+ const schema_1 = require("../features/schema");
5
5
  const types_1 = require("../types");
6
6
  async function init() {
7
- (0, __1.beforeSaveHook)(types_1.AlarmAction, async (request) => {
7
+ (0, schema_1.beforeSaveHook)(types_1.AlarmAction, async (request) => {
8
8
  const { object, original, user } = request;
9
- await (0, __1.defaultHandler)(request);
9
+ await (0, schema_1.defaultHandler)(request);
10
10
  });
11
- (0, __1.afterSaveHook)(types_1.AlarmAction, async ({ object, original, user }) => {
11
+ (0, schema_1.afterSaveHook)(types_1.AlarmAction, async ({ object, original, user }) => {
12
12
  // TODO
13
13
  });
14
14
  }
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
- const __1 = require("..");
4
+ const schema_1 = require("../features/schema");
5
5
  const types_1 = require("../types");
6
6
  async function init() {
7
- (0, __1.beforeSaveHook)(types_1.AlarmWebhook, async (request) => {
7
+ (0, schema_1.beforeSaveHook)(types_1.AlarmWebhook, async (request) => {
8
8
  const { object, original, user } = request;
9
- await (0, __1.defaultHandler)(request);
9
+ await (0, schema_1.defaultHandler)(request);
10
10
  // TODO
11
11
  });
12
- (0, __1.afterSaveHook)(types_1.AlarmWebhook, async ({ object, original, user }) => {
12
+ (0, schema_1.afterSaveHook)(types_1.AlarmWebhook, async ({ object, original, user }) => {
13
13
  // TODO
14
14
  });
15
15
  }
@@ -1,24 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
- const __1 = require("..");
4
+ const schema_1 = require("../features/schema");
5
5
  const types_1 = require("../types");
6
6
  async function init() {
7
- (0, __1.beforeSaveHook)(types_1.Assets, async (request) => {
7
+ (0, schema_1.beforeSaveHook)(types_1.Assets, async (request) => {
8
8
  const { object, original, user } = request;
9
- await (0, __1.defaultHandler)(request);
10
- await (0, __1.defaultAclHandler)(request);
11
- // TODO
9
+ await (0, schema_1.defaultHandler)(request);
10
+ await (0, schema_1.defaultAclHandler)(request);
12
11
  });
13
- (0, __1.afterSaveHook)(types_1.Assets, async (request) => {
12
+ (0, schema_1.afterSaveHook)(types_1.Assets, async (request) => {
14
13
  const { object, original, user } = request;
15
- // TODO
16
14
  });
17
- (0, __1.beforeDeleteHook)(types_1.Assets, async (request) => {
15
+ (0, schema_1.beforeDeleteHook)(types_1.Assets, async (request) => {
18
16
  const { object } = request;
19
- const objWithFile = await object.fetchWithInclude("file", {
20
- useMasterKey: true,
21
- });
22
- await objWithFile?.get("file")?.destroy({ useMasterKey: true });
17
+ try {
18
+ const objWithFile = await object.fetchWithInclude("file", {
19
+ useMasterKey: true,
20
+ });
21
+ await objWithFile?.get("file")?.destroy({ useMasterKey: true });
22
+ }
23
+ catch (error) {
24
+ console.error("[@openinc/parse-server-opendash] Error deleting associated file. Asset will be deleted but the file may remain orphaned.", error);
25
+ }
23
26
  });
24
27
  }
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
- const __1 = require("..");
4
+ const schema_1 = require("../features/schema");
5
5
  const types_1 = require("../types");
6
6
  async function init() {
7
- (0, __1.beforeSaveHook)(types_1.Attachment, async (request) => {
7
+ (0, schema_1.beforeSaveHook)(types_1.Attachment, async (request) => {
8
8
  const { object, original, user } = request;
9
- await (0, __1.defaultHandler)(request);
10
- await (0, __1.defaultAclHandler)(request);
9
+ await (0, schema_1.defaultHandler)(request);
10
+ await (0, schema_1.defaultAclHandler)(request);
11
11
  // TODO
12
12
  });
13
- (0, __1.afterSaveHook)(types_1.Attachment, async (request) => {
13
+ (0, schema_1.afterSaveHook)(types_1.Attachment, async (request) => {
14
14
  const { object, original, user } = request;
15
15
  // TODO
16
16
  });