@openinc/parse-server-opendash 3.30.0 → 3.31.25

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.
@@ -10,6 +10,7 @@
10
10
  "OD3_BDE_Page": "BDE",
11
11
  "OD3_BDE_Result": "BDE",
12
12
  "OD3_BDE_Unit": "BDE",
13
+ "OD3_Changelog": "CORE",
13
14
  "OD3_Company": "CORE",
14
15
  "OD3_Config": "CORE",
15
16
  "OD3_Contact": "CORE",
@@ -525,4 +525,12 @@ exports.customoptions = {
525
525
  public: false,
526
526
  description: "Application ID for Microsoft authentication. This is the Application (client) ID from the Azure portal.",
527
527
  },
528
+ CHANGELOG_BLACKLIST: {
529
+ env: "OPENINC_PARSE_CHANGELOG_BLACKLIST",
530
+ type: "string",
531
+ required: false,
532
+ secret: false,
533
+ public: false,
534
+ description: "Comma separated list of class names which should be excluded from ChangeLog entries.",
535
+ },
528
536
  };
@@ -3,7 +3,6 @@ export declare namespace ConfigKeys {
3
3
  closedTicketsLifetime = "OPENSERVICE_CLOSED_TICKET_LIFETIME",
4
4
  ticketCreationForm = "OPENSERVICE_CREATE_TICKET_FORM",
5
5
  scheduleMetaFields = "OPENSERVICE_SCHEDULE_META_FIELDS",
6
- sampledataCreated = "OPENSERVICE_SAMPLEDATA_CREATED",
7
6
  createTicketOnSchedule = "OPENSERVICE_CREATE_TICKET_ON_SCHEDULE"
8
7
  }
9
8
  }
@@ -8,7 +8,6 @@ var ConfigKeys;
8
8
  OpenService["closedTicketsLifetime"] = "OPENSERVICE_CLOSED_TICKET_LIFETIME";
9
9
  OpenService["ticketCreationForm"] = "OPENSERVICE_CREATE_TICKET_FORM";
10
10
  OpenService["scheduleMetaFields"] = "OPENSERVICE_SCHEDULE_META_FIELDS";
11
- OpenService["sampledataCreated"] = "OPENSERVICE_SAMPLEDATA_CREATED";
12
11
  OpenService["createTicketOnSchedule"] = "OPENSERVICE_CREATE_TICKET_ON_SCHEDULE";
13
12
  })(OpenService = ConfigKeys.OpenService || (ConfigKeys.OpenService = {}));
14
13
  })(ConfigKeys || (exports.ConfigKeys = ConfigKeys = {}));
@@ -58,6 +58,10 @@ async function assignUsersAndRoles(ticket, assignedTo, fetchOptions, assigningUs
58
58
  user: ticket.get("user"),
59
59
  batchStamp: batchTime,
60
60
  }));
61
+ if (assignedTo.id === assigningUser?.id) {
62
+ // Don't notify the user who created the ticket
63
+ continue;
64
+ }
61
65
  await new types_1.Notification({
62
66
  data: {
63
67
  ticketId: ticket.id,
@@ -91,6 +95,10 @@ async function assignUsersAndRoles(ticket, assignedTo, fetchOptions, assigningUs
91
95
  .query()
92
96
  .find(fetchOptions);
93
97
  for await (const roleUser of roleUsers) {
98
+ if (roleUser.id === assigningUser?.id) {
99
+ // Don't notify the user who created the ticket
100
+ continue;
101
+ }
94
102
  if (userNotifiedIds.includes(roleUser.id))
95
103
  continue;
96
104
  const resipientlanguage = await (0, getUserLanguage_1.getUserLanguage)(roleUser);
@@ -121,6 +129,10 @@ async function assignUsersAndRoles(ticket, assignedTo, fetchOptions, assigningUs
121
129
  await types_1.Maintenance_Ticket_Assignment.saveAll(assignments, fetchOptions);
122
130
  //Set ACLs for assigned users and roles on ticket
123
131
  const acl = new Parse.ACL();
132
+ if (assigningUser) {
133
+ acl.setReadAccess(assigningUser, true);
134
+ acl.setWriteAccess(assigningUser, true);
135
+ }
124
136
  for (const assignedUser of newUsers) {
125
137
  acl.setReadAccess(assignedUser, true);
126
138
  acl.setWriteAccess(assignedUser, true);
@@ -13,7 +13,6 @@ export type SaveValues = {
13
13
  source?: string;
14
14
  issuecategory?: string;
15
15
  priority?: number;
16
- media?: string[];
17
16
  downtime?: number;
18
17
  frequency?: number;
19
18
  restriction?: number;
@@ -1,4 +1,4 @@
1
- import { Maintenance_Downtime, Maintenance_Duedate, Maintenance_Frequency, Maintenance_Issuecategory, Maintenance_Kanban_State, Maintenance_Message, Maintenance_Priority, Maintenance_Project, Maintenance_Restriction, Maintenance_Ticket, Maintenance_Ticket_Material, Source } from "../../../types";
1
+ import { Assets, Maintenance_Downtime, Maintenance_Duedate, Maintenance_Frequency, Maintenance_Issuecategory, Maintenance_Kanban_State, Maintenance_Message, Maintenance_Priority, Maintenance_Project, Maintenance_Restriction, Maintenance_Ticket, Maintenance_Ticket_Material, Source } from "../../../types";
2
2
  export type TicketData = {
3
3
  ticket: Maintenance_Ticket;
4
4
  downtime?: Maintenance_Downtime;
@@ -14,4 +14,5 @@ export type TicketData = {
14
14
  assignedTo?: Array<Parse.User | Parse.Role>;
15
15
  material?: Maintenance_Ticket_Material;
16
16
  project?: Maintenance_Project;
17
+ assets?: Assets[];
17
18
  };
@@ -186,14 +186,6 @@ async function saveTicketData(data, user, overrideFetchOptions) {
186
186
  owticketobj.state = fetchedSavedState;
187
187
  }
188
188
  }
189
- if (data.media && data.media.length > 0) {
190
- try {
191
- await (0, openservice_1.saveMedia)(ticket, data.media, fetchOptions);
192
- }
193
- catch (error) {
194
- console.error(`Error saving media for ticket ${ticket.id}:`, error);
195
- }
196
- }
197
189
  if (data.material) {
198
190
  try {
199
191
  await (0, openservice_1.saveMaterial)(ticket, data.material, fetchOptions);
@@ -108,6 +108,7 @@ async function getTicketData(tickets) {
108
108
  const material = getTicketMaterial(ticket);
109
109
  const project = (0, catchError_1.catchError)(ticket.get("project")?.fetch({ useMasterKey: true }) ??
110
110
  new Promise((res) => res(undefined)));
111
+ const assets = getTicketAssets(ticket);
111
112
  const dataPromises = await Promise.all([
112
113
  downtimes,
113
114
  duedate,
@@ -120,6 +121,7 @@ async function getTicketData(tickets) {
120
121
  messages,
121
122
  material,
122
123
  project,
124
+ assets,
123
125
  ]);
124
126
  return {
125
127
  ticket: ticket,
@@ -136,10 +138,16 @@ async function getTicketData(tickets) {
136
138
  assignedTo: [...assignedusers, ...assignedroles],
137
139
  material: dataPromises[9],
138
140
  project: dataPromises[10]?.[1],
141
+ assets: dataPromises[11],
139
142
  };
140
143
  });
141
144
  return await Promise.all(ticketDataPromises);
142
145
  }
146
+ async function getTicketAssets(ticket) {
147
+ return await new Parse.Query(types_1.Assets)
148
+ .equalTo("context", `ticket-media-${ticket.id}`)
149
+ .find({ useMasterKey: true });
150
+ }
143
151
  /**
144
152
  * Fetches the downtime for a ticket
145
153
  * @param ticket
@@ -7,7 +7,7 @@ async function init() {
7
7
  (0, __1.beforeSaveHook)(types_1.MIAAS_MDSEndpoint, async (request) => {
8
8
  const { object, original, user } = request;
9
9
  await (0, __1.defaultHandler)(request);
10
- await (0, __1.defaultAclHandler)(request);
10
+ await (0, __1.defaultAclHandler)(request, { allowCustomACL: true });
11
11
  // TODO
12
12
  });
13
13
  (0, __1.afterSaveHook)(types_1.MIAAS_MDSEndpoint, async (request) => {
@@ -0,0 +1 @@
1
+ export declare function init(): Promise<void>;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.init = init;
4
+ const __1 = require("..");
5
+ const types_1 = require("../types");
6
+ async function init() {
7
+ const schema = await Parse.Schema.all();
8
+ const blacklistedClasses = [
9
+ "_Session",
10
+ "_Installation",
11
+ ...(process.env.OPENINC_PARSE_CHANGELOG_BLACKLIST || "")
12
+ .split(",")
13
+ .map((c) => c.trim())
14
+ .filter((c) => c.length > 0),
15
+ ];
16
+ console.log(`ChangeLog blacklisted classes: ${blacklistedClasses.join(", ") || "None"}`);
17
+ (0, __1.beforeSaveHook)(types_1.Changelog.className, async (request) => {
18
+ const { object, original, user } = request;
19
+ await (0, __1.defaultHandler)(request);
20
+ await (0, __1.defaultAclHandler)(request);
21
+ if (user && object && object.getACL()) {
22
+ object.getACL().setReadAccess(user.id, true);
23
+ }
24
+ });
25
+ schema.forEach((classSchema) => {
26
+ if (!classSchema.className ||
27
+ classSchema.className === types_1.Changelog.className ||
28
+ classSchema.className === types_1.Permission.className) {
29
+ console.log(`Skipping ChangeLog hook for class ${classSchema.className}`);
30
+ return;
31
+ }
32
+ if (blacklistedClasses.includes(classSchema.className)) {
33
+ console.log(`Class ${classSchema.className} is blacklisted from ChangeLog entries.`);
34
+ return;
35
+ }
36
+ console.log(`Registering ChangeLog hook for class ${classSchema?.className || "CLASSNAME_MISSING"}`);
37
+ (0, __1.beforeDeleteHook)(classSchema.className, async (request) => {
38
+ console.log(`Creating ChangeLog entry for DELETE on class ${classSchema.className} and object ${request.object.id}`);
39
+ try {
40
+ const { object, user, master } = request;
41
+ if (blacklistedClasses.includes(classSchema.className)) {
42
+ console.log(`Skipping ChangeLog entry for class ${classSchema.className} and object ${object.id} due to blacklisted class.`);
43
+ return;
44
+ }
45
+ const changelog = new types_1.Changelog();
46
+ changelog.set("nameOfClass", classSchema.className);
47
+ changelog.set("changedObject", object.id);
48
+ changelog.set("operation", "delete");
49
+ changelog.set("actingUser", user);
50
+ changelog.set("masterkey", master ? true : false);
51
+ changelog.set("context", null);
52
+ changelog.set("value", null);
53
+ changelog.set("original", object ? object.toJSON() : null);
54
+ await changelog.save({}, { useMasterKey: true });
55
+ }
56
+ catch (e) {
57
+ console.error("\n" + "-".repeat(80) + "\n", "Error creating ChangeLog entry for DELETE on class " +
58
+ classSchema.className +
59
+ " and object " +
60
+ (request.object ? request.object.id : "unknown") +
61
+ ":", JSON.stringify(e), "\n" + "-".repeat(80) + "\n");
62
+ }
63
+ });
64
+ (0, __1.afterSaveHook)(classSchema.className, async (request) => {
65
+ console.log(`Creating ChangeLog entry for class ${classSchema.className} and object ${request.object.id}`);
66
+ try {
67
+ const { object, original, user, master, context } = request;
68
+ if (context.skipChangelog ||
69
+ blacklistedClasses.includes(classSchema.className)) {
70
+ console.log(`Skipping ChangeLog entry for class ${classSchema.className} and object ${object.id} due to ${context.skipChangelog ? "context flag" : "blacklisted class"}.`);
71
+ return;
72
+ }
73
+ const changelog = new types_1.Changelog();
74
+ changelog.set("nameOfClass", classSchema.className);
75
+ changelog.set("changedObject", object.id);
76
+ changelog.set("operation", original ? "update" : "create");
77
+ changelog.set("actingUser", user);
78
+ changelog.set("masterkey", master ? true : false);
79
+ changelog.set("context", context ? context : null);
80
+ changelog.set("value", object ? object.toJSON() : null);
81
+ changelog.set("original", original ? original.toJSON() : null);
82
+ await changelog.save({}, { useMasterKey: true });
83
+ }
84
+ catch (e) {
85
+ console.error("\n" + "-".repeat(80) + "\n", "Error creating ChangeLog entry for class " +
86
+ classSchema.className +
87
+ " and object " +
88
+ (request.object ? request.object.id : "unknown") +
89
+ ":", JSON.stringify(e), "\n" + "-".repeat(80) + "\n");
90
+ }
91
+ });
92
+ });
93
+ }
@@ -10,6 +10,7 @@ async function init() {
10
10
  "_beforeLogin",
11
11
  "_User",
12
12
  "_Role",
13
+ "_ChangeLog",
13
14
  ...fs_1.default
14
15
  .readdirSync(__dirname)
15
16
  .filter((filename) => !filename.startsWith("_"))
@@ -0,0 +1,34 @@
1
+ import type { _User } from "./_User";
2
+ export interface ChangelogAttributes {
3
+ id: string;
4
+ changedObject: string;
5
+ createdAt: Date;
6
+ updatedAt: Date;
7
+ context?: any | undefined;
8
+ masterkey: boolean;
9
+ nameOfClass: string;
10
+ operation: string;
11
+ original?: any | undefined;
12
+ actingUser?: _User | undefined;
13
+ value?: any | undefined;
14
+ }
15
+ export declare class Changelog extends Parse.Object<ChangelogAttributes> {
16
+ static className: string;
17
+ constructor(data?: Partial<ChangelogAttributes>);
18
+ get context(): any | undefined;
19
+ set context(value: any | undefined);
20
+ get masterkey(): boolean;
21
+ set masterkey(value: boolean);
22
+ get nameOfClass(): string;
23
+ set nameOfClass(value: string);
24
+ get operation(): string;
25
+ set operation(value: string);
26
+ get original(): any | undefined;
27
+ set original(value: any | undefined);
28
+ get actingUser(): _User | undefined;
29
+ set actingUser(value: _User | undefined);
30
+ get value(): any | undefined;
31
+ set value(value: any | undefined);
32
+ get changedObject(): string;
33
+ set changedObject(value: string);
34
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Changelog = void 0;
4
+ class Changelog extends Parse.Object {
5
+ constructor(data) {
6
+ super("OD3_Changelog", data);
7
+ }
8
+ get context() {
9
+ return super.get("context");
10
+ }
11
+ set context(value) {
12
+ super.set("context", value);
13
+ }
14
+ get masterkey() {
15
+ return super.get("masterkey");
16
+ }
17
+ set masterkey(value) {
18
+ super.set("masterkey", value);
19
+ }
20
+ get nameOfClass() {
21
+ return super.get("nameOfClass");
22
+ }
23
+ set nameOfClass(value) {
24
+ super.set("nameOfClass", value);
25
+ }
26
+ get operation() {
27
+ return super.get("operation");
28
+ }
29
+ set operation(value) {
30
+ super.set("operation", value);
31
+ }
32
+ get original() {
33
+ return super.get("original");
34
+ }
35
+ set original(value) {
36
+ super.set("original", value);
37
+ }
38
+ get actingUser() {
39
+ return super.get("actingUser");
40
+ }
41
+ set actingUser(value) {
42
+ super.set("actingUser", value);
43
+ }
44
+ get value() {
45
+ return super.get("value");
46
+ }
47
+ set value(value) {
48
+ super.set("value", value);
49
+ }
50
+ get changedObject() {
51
+ return super.get("changedObject");
52
+ }
53
+ set changedObject(value) {
54
+ super.set("changedObject", value);
55
+ }
56
+ }
57
+ exports.Changelog = Changelog;
58
+ Changelog.className = "OD3_Changelog";
59
+ Parse.Object.registerSubclass("OD3_Changelog", Changelog);
@@ -20,6 +20,8 @@ export { BDE_Result } from "./BDE_Result";
20
20
  export type { BDE_ResultAttributes } from "./BDE_Result";
21
21
  export { BDE_Unit } from "./BDE_Unit";
22
22
  export type { BDE_UnitAttributes } from "./BDE_Unit";
23
+ export { Changelog } from "./Changelog";
24
+ export type { ChangelogAttributes } from "./Changelog";
23
25
  export { Company } from "./Company";
24
26
  export type { CompanyAttributes } from "./Company";
25
27
  export { Config } from "./Config";
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Maintenance_Downtime = exports.Mail_Groups = exports.MailTemplate = exports.ML_DataSelection = exports.MIAAS_MDSEndpoint = exports.MES_OrderPlan = exports.MES_Order = exports.MES_Article = exports.Log = exports.Language = exports.Knowledge_Video = exports.Knowledge_DocumentPage = exports.Knowledge_Document = exports.Knowledge_ChatMessage = exports.Knowledge_Chat = exports.Knowledge_Category = exports.Knowledge_Article = exports.GTFS_Wheelchair_Boarding = exports.GTFS_Wheelchair_Accessible = exports.GTFS_Trip = exports.GTFS_Stop_Times = exports.GTFS_Stop = exports.GTFS_Route_Type = exports.GTFS_Route = exports.GTFS_Location_Type = exports.GTFS_Level = exports.GTFS_Direction = exports.GTFS_Calendar = exports.GTFS_Bikes_Allowed = exports.GTFS_Agency = exports.Documentation_Document = exports.Documentation_Config = exports.Documentation_Category = exports.Dashboard = exports.Core_Token = exports.Core_Email = exports.Contact = exports.Config = exports.Company = exports.BDE_Unit = exports.BDE_Result = exports.BDE_Page = exports.BDE_ListEntry = exports.BDE_List = exports.BDE_Form = exports.Attachment = exports.Assets = exports.AlarmWebhook = exports.AlarmAction = exports.Alarm = void 0;
4
- exports.UserData = exports.TenantTrustedDomain = exports.TenantMeta = exports.Tenant = exports.SourceMeta = exports.Source = exports.Share = exports.Report = exports.Push = exports.Permission = exports.OWPlcItem = exports.OWPlcDevice = exports.Notification_Setting = exports.Notification = exports.NavigationItem = exports.NavigationGroup = exports.Monitoring_Slideshow = exports.Monitoring_ReportImage = exports.Monitoring_ParseTableSensor = exports.Monitoring_Jobs = exports.Monitoring_DataHierachies = exports.Maintenance_Ticket_Title = exports.Maintenance_Ticket_Source = exports.Maintenance_Ticket_QR_Code = exports.Maintenance_Ticket_Project = exports.Maintenance_Ticket_Material = exports.Maintenance_Ticket_Kanban_State_Current = exports.Maintenance_Ticket_Kanban_State = exports.Maintenance_Ticket_Issuecategory = exports.Maintenance_Ticket_FormConfig = exports.Maintenance_Ticket_Data = exports.Maintenance_Ticket_Assignment = exports.Maintenance_Ticket = exports.Maintenance_Source_File = exports.Maintenance_Schedule_Template = exports.Maintenance_Schedule_Step = exports.Maintenance_Schedule_Execution_Step = exports.Maintenance_Schedule_Execution = exports.Maintenance_Schedule = exports.Maintenance_Restriction = exports.Maintenance_Project = exports.Maintenance_Priority = exports.Maintenance_Order = exports.Maintenance_Message = exports.Maintenance_Media = exports.Maintenance_Kanban_State = exports.Maintenance_Item = exports.Maintenance_Issuecategory = exports.Maintenance_Frequency = exports.Maintenance_Duedate = void 0;
5
- exports.WidgetPreset = exports.Widget = exports.WebPush = exports.VirtualKPI = exports.User_Setting = void 0;
3
+ exports.Mail_Groups = exports.MailTemplate = exports.ML_DataSelection = exports.MIAAS_MDSEndpoint = exports.MES_OrderPlan = exports.MES_Order = exports.MES_Article = exports.Log = exports.Language = exports.Knowledge_Video = exports.Knowledge_DocumentPage = exports.Knowledge_Document = exports.Knowledge_ChatMessage = exports.Knowledge_Chat = exports.Knowledge_Category = exports.Knowledge_Article = exports.GTFS_Wheelchair_Boarding = exports.GTFS_Wheelchair_Accessible = exports.GTFS_Trip = exports.GTFS_Stop_Times = exports.GTFS_Stop = exports.GTFS_Route_Type = exports.GTFS_Route = exports.GTFS_Location_Type = exports.GTFS_Level = exports.GTFS_Direction = exports.GTFS_Calendar = exports.GTFS_Bikes_Allowed = exports.GTFS_Agency = exports.Documentation_Document = exports.Documentation_Config = exports.Documentation_Category = exports.Dashboard = exports.Core_Token = exports.Core_Email = exports.Contact = exports.Config = exports.Company = exports.Changelog = exports.BDE_Unit = exports.BDE_Result = exports.BDE_Page = exports.BDE_ListEntry = exports.BDE_List = exports.BDE_Form = exports.Attachment = exports.Assets = exports.AlarmWebhook = exports.AlarmAction = exports.Alarm = void 0;
4
+ exports.TenantTrustedDomain = exports.TenantMeta = exports.Tenant = exports.SourceMeta = exports.Source = exports.Share = exports.Report = exports.Push = exports.Permission = exports.OWPlcItem = exports.OWPlcDevice = exports.Notification_Setting = exports.Notification = exports.NavigationItem = exports.NavigationGroup = exports.Monitoring_Slideshow = exports.Monitoring_ReportImage = exports.Monitoring_ParseTableSensor = exports.Monitoring_Jobs = exports.Monitoring_DataHierachies = exports.Maintenance_Ticket_Title = exports.Maintenance_Ticket_Source = exports.Maintenance_Ticket_QR_Code = exports.Maintenance_Ticket_Project = exports.Maintenance_Ticket_Material = exports.Maintenance_Ticket_Kanban_State_Current = exports.Maintenance_Ticket_Kanban_State = exports.Maintenance_Ticket_Issuecategory = exports.Maintenance_Ticket_FormConfig = exports.Maintenance_Ticket_Data = exports.Maintenance_Ticket_Assignment = exports.Maintenance_Ticket = exports.Maintenance_Source_File = exports.Maintenance_Schedule_Template = exports.Maintenance_Schedule_Step = exports.Maintenance_Schedule_Execution_Step = exports.Maintenance_Schedule_Execution = exports.Maintenance_Schedule = exports.Maintenance_Restriction = exports.Maintenance_Project = exports.Maintenance_Priority = exports.Maintenance_Order = exports.Maintenance_Message = exports.Maintenance_Media = exports.Maintenance_Kanban_State = exports.Maintenance_Item = exports.Maintenance_Issuecategory = exports.Maintenance_Frequency = exports.Maintenance_Duedate = exports.Maintenance_Downtime = void 0;
5
+ exports.WidgetPreset = exports.Widget = exports.WebPush = exports.VirtualKPI = exports.User_Setting = exports.UserData = void 0;
6
6
  var Alarm_1 = require("./Alarm");
7
7
  Object.defineProperty(exports, "Alarm", { enumerable: true, get: function () { return Alarm_1.Alarm; } });
8
8
  var AlarmAction_1 = require("./AlarmAction");
@@ -25,6 +25,8 @@ var BDE_Result_1 = require("./BDE_Result");
25
25
  Object.defineProperty(exports, "BDE_Result", { enumerable: true, get: function () { return BDE_Result_1.BDE_Result; } });
26
26
  var BDE_Unit_1 = require("./BDE_Unit");
27
27
  Object.defineProperty(exports, "BDE_Unit", { enumerable: true, get: function () { return BDE_Unit_1.BDE_Unit; } });
28
+ var Changelog_1 = require("./Changelog");
29
+ Object.defineProperty(exports, "Changelog", { enumerable: true, get: function () { return Changelog_1.Changelog; } });
28
30
  var Company_1 = require("./Company");
29
31
  Object.defineProperty(exports, "Company", { enumerable: true, get: function () { return Company_1.Company; } });
30
32
  var Config_1 = require("./Config");
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@openinc/parse-server-opendash",
3
- "version": "3.30.0",
3
+ "version": "3.31.25",
4
4
  "description": "Parse Server Cloud Code for open.INC Stack.",
5
- "packageManager": "pnpm@10.20.0",
5
+ "packageManager": "pnpm@10.26.2",
6
6
  "keywords": [
7
7
  "parse",
8
8
  "opendash"
9
9
  ],
10
+ "publishConfig": {
11
+ "access": "public",
12
+ "registry": "https://registry.npmjs.org/"
13
+ },
10
14
  "repository": {
11
15
  "type": "git",
12
16
  "url": "git+https://github.com/open-inc/node-parse-server-opendash.git"
@@ -64,7 +68,7 @@
64
68
  "dependencies": {
65
69
  "@openinc/parse-server-schema": "^3.0.6",
66
70
  "@opentelemetry/api-logs": "^0.208.0",
67
- "@opentelemetry/auto-instrumentations-node": "^0.67.0",
71
+ "@opentelemetry/auto-instrumentations-node": "^0.67.3",
68
72
  "@opentelemetry/exporter-logs-otlp-http": "^0.208.0",
69
73
  "@opentelemetry/exporter-trace-otlp-http": "^0.208.0",
70
74
  "@opentelemetry/resources": "^2.2.0",
@@ -72,21 +76,21 @@
72
76
  "@opentelemetry/sdk-node": "^0.208.0",
73
77
  "@opentelemetry/semantic-conventions": "^1.38.0",
74
78
  "@opentelemetry/winston-transport": "^0.19.0",
75
- "cron": "^4.3.4",
79
+ "cron": "^4.4.0",
76
80
  "dayjs": "^1.11.19",
77
- "fast-equals": "^5.3.3",
78
- "i18next": "^25.6.2",
81
+ "fast-equals": "^5.4.0",
82
+ "i18next": "^25.7.3",
79
83
  "i18next-fs-backend": "^2.6.1",
80
- "jsonwebtoken": "^9.0.2",
84
+ "jsonwebtoken": "^9.0.3",
81
85
  "jwks-rsa": "^3.2.0",
82
- "nodemailer": "^7.0.10",
86
+ "nodemailer": "^7.0.12",
83
87
  "nunjucks": "^3.2.4",
84
- "parse-server": "^8.4.0",
88
+ "parse-server": "^9.1.1",
85
89
  "pdf-img-convert": "2.0.0",
86
90
  "semantic-release": "^25.0.2",
87
91
  "table": "^6.9.0",
88
92
  "web-push": "^3.6.7",
89
- "winston": "^3.18.3"
93
+ "winston": "^3.19.0"
90
94
  },
91
95
  "devDependencies": {
92
96
  "@semantic-release/changelog": "^6.0.3",
@@ -94,10 +98,10 @@
94
98
  "@semantic-release/exec": "^7.1.0",
95
99
  "@semantic-release/git": "^10.0.1",
96
100
  "@semantic-release/github": "^12.0.2",
97
- "@semantic-release/npm": "^13.1.2",
101
+ "@semantic-release/npm": "^13.1.3",
98
102
  "@semantic-release/release-notes-generator": "^14.1.0",
99
103
  "@types/jsonwebtoken": "^9.0.10",
100
- "@types/node": "^24.10.1",
104
+ "@types/node": "^24.10.4",
101
105
  "@types/nodemailer": "^7.0.4",
102
106
  "@types/nunjucks": "^3.2.6",
103
107
  "@types/parse": "^3.0.9",
@@ -106,7 +110,7 @@
106
110
  "concurrently": "^9.2.1",
107
111
  "semantic-release-export-data": "^1.2.0",
108
112
  "ts-node": "^10.9.2",
109
- "typedoc": "^0.28.14",
113
+ "typedoc": "^0.28.15",
110
114
  "typedoc-plugin-markdown": "^4.9.0",
111
115
  "typescript": "^5.9.3"
112
116
  }
@@ -0,0 +1,69 @@
1
+ {
2
+ "fields": {
3
+ "actingUser": {
4
+ "type": "Pointer",
5
+ "targetClass": "_User",
6
+ "required": false
7
+ },
8
+ "masterkey": {
9
+ "type": "Boolean",
10
+ "required": true,
11
+ "default": false
12
+ },
13
+ "context": {
14
+ "type": "Object",
15
+ "required": false
16
+ },
17
+ "nameOfClass": {
18
+ "type": "String",
19
+ "required": true
20
+ },
21
+ "changedObject": {
22
+ "type": "String",
23
+ "required": true
24
+ },
25
+ "operation": {
26
+ "type": "String",
27
+ "required": true
28
+ },
29
+ "value": {
30
+ "type": "Object",
31
+ "required": false
32
+ },
33
+ "original": {
34
+ "type": "Object",
35
+ "required": false
36
+ }
37
+ },
38
+ "classLevelPermissions": {
39
+ "find": {
40
+ "requiresAuthentication": true,
41
+ "role:od-admin": true
42
+ },
43
+ "count": {
44
+ "requiresAuthentication": true,
45
+ "role:od-admin": true
46
+ },
47
+ "get": {
48
+ "requiresAuthentication": true,
49
+ "role:od-admin": true
50
+ },
51
+ "create": {
52
+ "role:od-admin": true
53
+ },
54
+ "update": {
55
+ "requiresAuthentication": true,
56
+ "role:od-admin": true
57
+ },
58
+ "delete": {
59
+ "requiresAuthentication": true,
60
+ "role:od-admin": true
61
+ },
62
+ "addField": {
63
+ "role:od-admin": true
64
+ },
65
+ "protectedFields": {
66
+ "*": []
67
+ }
68
+ }
69
+ }
File without changes
@@ -1,2 +0,0 @@
1
- "use strict";
2
- (async () => { })();