@openinc/parse-server-opendash 1.12.0 → 1.13.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 (63) hide show
  1. package/dist/hooks/Group.js +39 -1
  2. package/dist/hooks/Knowledge_Document.js +1 -0
  3. package/dist/hooks/Maintenance_Issuecategory.js +4 -1
  4. package/dist/hooks/{Group_UserRelation.d.ts → Maintenance_Schedule_Execution.d.ts} +0 -0
  5. package/dist/hooks/{Group_UserRelation.js → Maintenance_Schedule_Execution.js} +2 -2
  6. package/dist/hooks/Maintenance_Schedule_Execution_Step.d.ts +1 -0
  7. package/dist/hooks/Maintenance_Schedule_Execution_Step.js +18 -0
  8. package/dist/hooks/Maintenance_Ticket_Kanban_State.js +4 -1
  9. package/dist/hooks/Permission.js +4 -0
  10. package/dist/hooks/Tenant.js +0 -13
  11. package/dist/hooks/_User.js +19 -33
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.js +21 -3
  14. package/dist/types/BDE_Unit.d.ts +2 -3
  15. package/dist/types/BDE_Unit.js +1 -4
  16. package/dist/types/Group.d.ts +12 -0
  17. package/dist/types/Group.js +21 -0
  18. package/dist/types/Knowledge_DocumentPage.d.ts +4 -0
  19. package/dist/types/Knowledge_DocumentPage.js +6 -0
  20. package/dist/types/Maintenance_Article.d.ts +5 -6
  21. package/dist/types/Maintenance_Article.js +7 -10
  22. package/dist/types/Maintenance_Duedate.d.ts +3 -3
  23. package/dist/types/Maintenance_Issuecategory.d.ts +2 -3
  24. package/dist/types/Maintenance_Issuecategory.js +1 -4
  25. package/dist/types/Maintenance_Schedule.d.ts +5 -3
  26. package/dist/types/Maintenance_Schedule.js +7 -4
  27. package/dist/types/Maintenance_Schedule_Execution.d.ts +35 -0
  28. package/dist/types/Maintenance_Schedule_Execution.js +50 -0
  29. package/dist/types/Maintenance_Schedule_Execution_Step.d.ts +40 -0
  30. package/dist/types/Maintenance_Schedule_Execution_Step.js +65 -0
  31. package/dist/types/Maintenance_Ticket.d.ts +3 -3
  32. package/dist/types/Maintenance_Ticket.js +6 -6
  33. package/dist/types/Maintenance_Ticket_Issuecategory.d.ts +3 -3
  34. package/dist/types/Maintenance_Ticket_Issuecategory.js +6 -6
  35. package/dist/types/Maintenance_Ticket_Kanban_State.d.ts +3 -3
  36. package/dist/types/Maintenance_Ticket_Kanban_State.js +6 -6
  37. package/dist/types/Maintenance_Ticket_Source.d.ts +3 -3
  38. package/dist/types/Maintenance_Ticket_Source.js +6 -6
  39. package/dist/types/Source.d.ts +2 -3
  40. package/dist/types/Source.js +1 -4
  41. package/dist/types/Tenant.d.ts +0 -3
  42. package/dist/types/Tenant.js +0 -6
  43. package/dist/types/_Role.d.ts +2 -2
  44. package/dist/types/_User.d.ts +0 -3
  45. package/dist/types/index.d.ts +4 -2
  46. package/dist/types/index.js +6 -4
  47. package/package.json +1 -1
  48. package/schema/Group.json +20 -0
  49. package/schema/Knowledge_DocumentPage.json +5 -0
  50. package/schema/Maintenance_Article.json +5 -5
  51. package/schema/Maintenance_Duedate.json +5 -5
  52. package/schema/Maintenance_Schedule.json +5 -0
  53. package/schema/Maintenance_Schedule_Execution.json +60 -0
  54. package/schema/Maintenance_Schedule_Execution_Step.json +66 -0
  55. package/schema/Maintenance_Schedule_Step.json +7 -9
  56. package/schema/Maintenance_Ticket.json +5 -5
  57. package/schema/Maintenance_Ticket_Issuecategory.json +5 -5
  58. package/schema/Maintenance_Ticket_Kanban_State.json +5 -5
  59. package/schema/Maintenance_Ticket_Source.json +4 -4
  60. package/schema/Tenant.json +0 -5
  61. package/dist/types/Group_UserRelation.d.ts +0 -19
  62. package/dist/types/Group_UserRelation.js +0 -23
  63. package/schema/Group_UserRelation.json +0 -40
@@ -12,7 +12,45 @@ async function init() {
12
12
  });
13
13
  (0, __1.afterSaveHook)(types_1.Group, async (request) => {
14
14
  const { object, original, user } = request;
15
- // TODO
15
+ await (0, __1.ensureRole)(`od-group-user-${object.id}`, {
16
+ label: object.get("label"),
17
+ acl: new Parse.ACL({
18
+ ...(object.roleIsVisible && {
19
+ [`role:od-group-user-${object.id}`]: {
20
+ read: true,
21
+ },
22
+ }),
23
+ ...(object.tenant &&
24
+ object.roleIsVisible &&
25
+ object.roleIsVisibleForTenant && {
26
+ [`role:od-tenant-user-${object.tenant.id}`]: {
27
+ read: true,
28
+ },
29
+ }),
30
+ }),
31
+ });
32
+ const role = (await new Parse.Query(Parse.Role)
33
+ .equalTo("name", `od-group-user-${object.id}`)
34
+ .first({ useMasterKey: true }));
35
+ const groupUsers = await object.users
36
+ .query()
37
+ .limit(1000000)
38
+ .find({ useMasterKey: true });
39
+ const roleUsers = await role
40
+ .getUsers()
41
+ .query()
42
+ .limit(1000000)
43
+ .find({ useMasterKey: true });
44
+ for (const user of roleUsers) {
45
+ role.getUsers().remove(user);
46
+ }
47
+ for (const user of groupUsers) {
48
+ role.getUsers().add(user);
49
+ }
50
+ role.save(null, { useMasterKey: true });
51
+ if (object.usersSeeEachOther || original?.usersSeeEachOther) {
52
+ await Parse.Object.saveAll(groupUsers, { useMasterKey: true });
53
+ }
16
54
  });
17
55
  }
18
56
  exports.init = init;
@@ -35,6 +35,7 @@ async function init() {
35
35
  const base64 = images[i];
36
36
  const image = new Parse.File(name, { base64 }, "image/png");
37
37
  const pageObject = new types_1.Knowledge_DocumentPage({
38
+ tenant: object.tenant,
38
39
  document: object,
39
40
  page,
40
41
  image,
@@ -7,7 +7,10 @@ async function init() {
7
7
  (0, __1.beforeSaveHook)(types_1.Maintenance_Issuecategory, 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, {
11
+ allowTenantUserWrite: true,
12
+ });
13
+ (0, __1.requirePermission)(request, "maintenance:can-update-issuecategory", "Permission denied.");
11
14
  // TODO
12
15
  });
13
16
  (0, __1.afterSaveHook)(types_1.Maintenance_Issuecategory, async (request) => {
@@ -4,13 +4,13 @@ exports.init = void 0;
4
4
  const __1 = require("..");
5
5
  const types_1 = require("../types");
6
6
  async function init() {
7
- (0, __1.beforeSaveHook)(types_1.Group_UserRelation, async (request) => {
7
+ (0, __1.beforeSaveHook)(types_1.Maintenance_Schedule_Execution, async (request) => {
8
8
  const { object, original, user } = request;
9
9
  await (0, __1.defaultHandler)(request);
10
10
  await (0, __1.defaultAclHandler)(request);
11
11
  // TODO
12
12
  });
13
- (0, __1.afterSaveHook)(types_1.Group_UserRelation, async (request) => {
13
+ (0, __1.afterSaveHook)(types_1.Maintenance_Schedule_Execution, async (request) => {
14
14
  const { object, original, user } = request;
15
15
  // TODO
16
16
  });
@@ -0,0 +1 @@
1
+ export declare function init(): Promise<void>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.init = void 0;
4
+ const __1 = require("..");
5
+ const types_1 = require("../types");
6
+ async function init() {
7
+ (0, __1.beforeSaveHook)(types_1.Maintenance_Schedule_Execution_Step, async (request) => {
8
+ const { object, original, user } = request;
9
+ await (0, __1.defaultHandler)(request);
10
+ await (0, __1.defaultAclHandler)(request);
11
+ // TODO
12
+ });
13
+ (0, __1.afterSaveHook)(types_1.Maintenance_Schedule_Execution_Step, async (request) => {
14
+ const { object, original, user } = request;
15
+ // TODO
16
+ });
17
+ }
18
+ exports.init = init;
@@ -7,7 +7,10 @@ async function init() {
7
7
  (0, __1.beforeSaveHook)(types_1.Maintenance_Ticket_Kanban_State, 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, {
11
+ allowTenantUserWrite: true,
12
+ });
13
+ (0, __1.requirePermission)(request, "maintenance:can-update-kanbanstate", "Permission denied.");
11
14
  // TODO
12
15
  });
13
16
  (0, __1.afterSaveHook)(types_1.Maintenance_Ticket_Kanban_State, async (request) => {
@@ -7,6 +7,10 @@ async function init() {
7
7
  (0, __1.beforeSaveHook)(types_1.Permission, async (request) => {
8
8
  const { object, original, user } = request;
9
9
  await (0, __1.defaultHandler)(request);
10
+ await (0, __1.defaultAclHandler)(request, {
11
+ allowCustomACL: true,
12
+ denyTenantUserRead: true,
13
+ });
10
14
  });
11
15
  (0, __1.afterSaveHook)(types_1.Permission, async ({ object, original, user }) => {
12
16
  // TODO
@@ -78,19 +78,6 @@ async function init() {
78
78
  },
79
79
  });
80
80
  }
81
- if (original &&
82
- object.get("interactWithOtherTenants") !==
83
- original.get("interactWithOtherTenants")) {
84
- const users = await new Parse.Query(Parse.User)
85
- .equalTo("tenant", object)
86
- .limit(1000000)
87
- .find({ useMasterKey: true });
88
- for (const user of users) {
89
- user.set("tenantGlobal", object.get("interactWithOtherTenants"));
90
- user.set("tenantChanged", true);
91
- }
92
- await Parse.Object.saveAll(users, { useMasterKey: true });
93
- }
94
81
  });
95
82
  }
96
83
  exports.init = init;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = void 0;
4
4
  const __1 = require("..");
5
+ const types_1 = require("../types");
5
6
  async function init() {
6
7
  (0, __1.beforeSaveHook)(Parse.User, async (request) => {
7
8
  const user = request.object;
@@ -25,10 +26,6 @@ async function init() {
25
26
  }
26
27
  }
27
28
  }
28
- user.set("tenantGlobal", !!tenant && !!user.get("tenantGlobal"));
29
- if (tenant && request.original?.get("tenant")?.id !== tenant?.id) {
30
- user.set("tenantGlobal", !!tenant.get("interactWithOtherTenants"));
31
- }
32
29
  user.set("tenantAdmin", !!user.get("tenantVerified") && !!user.get("tenantAdmin"));
33
30
  user.set("tenantChanged", !!user.get("tenantChanged"));
34
31
  if (user.get("tenantChanged")) {
@@ -39,17 +36,24 @@ async function init() {
39
36
  // @ts-ignore
40
37
  request.context.tenantChanged = true;
41
38
  }
39
+ // fetch user groups
40
+ const groups = await new Parse.Query(types_1.Group)
41
+ .equalTo("users", user)
42
+ .equalTo("usersSeeEachOther", true)
43
+ .limit(1000000)
44
+ .find({ useMasterKey: true });
42
45
  user.setACL(new Parse.ACL({
43
46
  ...(tenantId && {
44
47
  [`role:od-tenant-user-${tenantId}`]: { read: true },
45
48
  [`role:od-tenant-admin-${tenantId}`]: { read: true, write: true },
46
49
  }),
47
- ...(user.get("tenantGlobal") && {
48
- "role:od-tenant-global-visible": { read: true },
49
- }),
50
50
  ...(user.id && {
51
51
  [user.id]: { read: true },
52
52
  }),
53
+ ...Object.fromEntries(groups.map((group) => [
54
+ "role:od-group-user-" + group.id,
55
+ { read: true },
56
+ ])),
53
57
  "role:od-admin": { read: true, write: true },
54
58
  }));
55
59
  });
@@ -69,42 +73,24 @@ async function init() {
69
73
  const wasAdmin = !!original?.get("tenantAdmin");
70
74
  const isVerified = isTenant && !!object.get("tenantVerified");
71
75
  const wasVerified = wasTenant && !!object.get("tenantVerified");
72
- const isGlobal = isVerified && !!object.get("tenantGlobal");
73
76
  const changedTenant = isTenant !== wasTenant || tenantId !== prevTenantId;
74
77
  const changedAdmin = isAdmin !== wasAdmin;
75
78
  const changedVerified = isVerified !== wasVerified;
76
79
  const changedContext = !!request.context?.tenantChanged;
77
80
  if (changedTenant || changedAdmin || changedVerified || changedContext) {
78
- await userRole(object, `od-user`, isTenant);
79
- await userRole(object, `od-tenant-user`, isTenant);
80
- await userRole(object, `od-tenant-verified`, isVerified);
81
- await userRole(object, `od-tenant-admin`, isAdmin);
82
- await userRole(object, `od-tenant-global-visible`, isGlobal);
81
+ await (0, __1.ensureUserRole)(object, `od-user`, isTenant);
82
+ await (0, __1.ensureUserRole)(object, `od-tenant-user`, isTenant);
83
+ await (0, __1.ensureUserRole)(object, `od-tenant-verified`, isVerified);
84
+ await (0, __1.ensureUserRole)(object, `od-tenant-admin`, isAdmin);
83
85
  if (tenantId) {
84
- await userRole(object, `od-tenant-user-${tenantId}`, true);
85
- await userRole(object, `od-tenant-admin-${tenantId}`, isAdmin);
86
+ await (0, __1.ensureUserRole)(object, `od-tenant-user-${tenantId}`, true);
87
+ await (0, __1.ensureUserRole)(object, `od-tenant-admin-${tenantId}`, isAdmin);
86
88
  }
87
89
  if (wasTenant && tenantId !== prevTenantId) {
88
- await userRole(object, `od-tenant-user-${prevTenantId}`, false);
89
- await userRole(object, `od-tenant-admin-${prevTenantId}`, false);
90
+ await (0, __1.ensureUserRole)(object, `od-tenant-user-${prevTenantId}`, false);
91
+ await (0, __1.ensureUserRole)(object, `od-tenant-admin-${prevTenantId}`, false);
90
92
  }
91
93
  }
92
94
  });
93
95
  }
94
96
  exports.init = init;
95
- async function userRole(user, roleName, add = false) {
96
- const role = await new Parse.Query(Parse.Role)
97
- .equalTo("name", roleName)
98
- .first({ useMasterKey: true });
99
- if (role) {
100
- const relation = role.relation("users");
101
- if (add) {
102
- relation.add(user);
103
- }
104
- else {
105
- relation.remove(user);
106
- }
107
- await role.save(null, { useMasterKey: true });
108
- console.log("userRole", user.get("username"), roleName, add);
109
- }
110
- }
package/dist/index.d.ts CHANGED
@@ -18,11 +18,13 @@ export declare function ensureRole(name: string, options?: {
18
18
  acl?: Parse.ACL;
19
19
  childRoles?: string[];
20
20
  }): Promise<void>;
21
+ export declare function ensureUserRole(user: Parse.User, roleName: string, add?: boolean): Promise<void>;
21
22
  export declare function immutableField(request: Parse.Cloud.BeforeSaveRequest, fieldName: string, permissionName?: string | null): Promise<void>;
22
23
  export declare function defaultHandler(request: Parse.Cloud.BeforeSaveRequest): Promise<void>;
23
24
  export declare function defaultAclHandler(request: Parse.Cloud.BeforeSaveRequest, options?: {
24
25
  allowCustomACL?: boolean;
25
26
  allowTenantUserWrite?: boolean;
27
+ denyTenantUserRead?: boolean;
26
28
  }): Promise<void>;
27
29
  declare type beforeSaveHookType<T extends Parse.Object<Parse.Attributes>> = (request: ParseCloud.BeforeSaveRequest<T>) => Promise<void>;
28
30
  export declare function beforeSaveHook<T extends Parse.Object<Parse.Attributes>>(target: string | {
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ 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.afterDeleteHook = exports.beforeDeleteHook = exports.afterSaveHook = exports.beforeSaveHook = exports.defaultAclHandler = exports.defaultHandler = exports.immutableField = exports.ensureRole = exports.getEnvBoolean = exports.getEnv = exports.getConfigBoolean = exports.getConfig = exports.requirePermission = exports.hasPermission = exports.init = exports.PREFIX = void 0;
6
+ exports.afterDeleteHook = exports.beforeDeleteHook = exports.afterSaveHook = exports.beforeSaveHook = exports.defaultAclHandler = exports.defaultHandler = exports.immutableField = exports.ensureUserRole = exports.ensureRole = exports.getEnvBoolean = exports.getEnv = exports.getConfigBoolean = exports.getConfig = exports.requirePermission = exports.hasPermission = exports.init = exports.PREFIX = void 0;
7
7
  const web_push_1 = __importDefault(require("web-push"));
8
8
  const path_1 = require("path");
9
9
  const parse_server_schema_1 = require("@openinc/parse-server-schema");
@@ -46,7 +46,6 @@ async function initDefaultRoles() {
46
46
  });
47
47
  await ensureRole("od-tenant-user");
48
48
  await ensureRole("od-tenant-verified");
49
- await ensureRole("od-tenant-global-visible");
50
49
  await ensureRole("od-tenant-admin");
51
50
  }
52
51
  catch (error) {
@@ -166,6 +165,23 @@ async function ensureRole(name, options) {
166
165
  }
167
166
  }
168
167
  exports.ensureRole = ensureRole;
168
+ async function ensureUserRole(user, roleName, add = false) {
169
+ const role = await new Parse.Query(Parse.Role)
170
+ .equalTo("name", roleName)
171
+ .first({ useMasterKey: true });
172
+ if (role) {
173
+ const relation = role.relation("users");
174
+ if (add) {
175
+ relation.add(user);
176
+ }
177
+ else {
178
+ relation.remove(user);
179
+ }
180
+ await role.save(null, { useMasterKey: true });
181
+ console.log("userRole", user.get("username"), roleName, add);
182
+ }
183
+ }
184
+ exports.ensureUserRole = ensureUserRole;
169
185
  async function immutableField(request, fieldName, permissionName = "parse:edit-immutable-fields") {
170
186
  if (!request.original || request.master) {
171
187
  return;
@@ -238,7 +254,9 @@ async function defaultAclHandler(request, options) {
238
254
  if (tenantField) {
239
255
  const tenant = request.object.get("tenant");
240
256
  if (tenant) {
241
- acl.setRoleReadAccess(`od-tenant-user-${tenant.id}`, true);
257
+ if (!options?.denyTenantUserRead) {
258
+ acl.setRoleReadAccess(`od-tenant-user-${tenant.id}`, true);
259
+ }
242
260
  if (options?.allowTenantUserWrite) {
243
261
  acl.setRoleWriteAccess(`od-tenant-user-${tenant.id}`, true);
244
262
  }
@@ -5,7 +5,7 @@ export interface BDE_UnitAttributes {
5
5
  objectId: string;
6
6
  createdAt: Date;
7
7
  updatedAt: Date;
8
- forms?: Parse.Relation<BDE_Form>;
8
+ forms: Parse.Relation<BDE_Unit, BDE_Form>;
9
9
  image?: Parse.File;
10
10
  name?: string;
11
11
  source?: string;
@@ -13,8 +13,7 @@ export interface BDE_UnitAttributes {
13
13
  export declare class BDE_Unit extends Parse.Object<BDE_UnitAttributes> {
14
14
  static className: string;
15
15
  constructor(data?: Partial<BDE_UnitAttributes>);
16
- get forms(): Parse.Relation<BDE_Form> | undefined;
17
- set forms(value: Parse.Relation<BDE_Form> | undefined);
16
+ get forms(): Parse.Relation<BDE_Unit, BDE_Form>;
18
17
  get image(): Parse.File | undefined;
19
18
  set image(value: Parse.File | undefined);
20
19
  get name(): string | undefined;
@@ -6,10 +6,7 @@ class BDE_Unit extends Parse.Object {
6
6
  super("OD3_BDE_Unit", data);
7
7
  }
8
8
  get forms() {
9
- return super.get("forms");
10
- }
11
- set forms(value) {
12
- super.set("forms", value);
9
+ return super.relation("forms");
13
10
  }
14
11
  get image() {
15
12
  return super.get("image");
@@ -1,18 +1,30 @@
1
1
  /// <reference types="parse" />
2
2
  import type { Tenant } from "./Tenant";
3
+ import type { _User } from "./_User";
3
4
  export interface GroupAttributes {
4
5
  id: string;
5
6
  objectId: string;
6
7
  createdAt: Date;
7
8
  updatedAt: Date;
8
9
  label: string;
10
+ roleIsVisible: boolean;
11
+ roleIsVisibleForTenant: boolean;
9
12
  tenant?: Tenant;
13
+ users: Parse.Relation<Group, _User>;
14
+ usersSeeEachOther: boolean;
10
15
  }
11
16
  export declare class Group extends Parse.Object<GroupAttributes> {
12
17
  static className: string;
13
18
  constructor(data?: Partial<GroupAttributes>);
14
19
  get label(): string;
15
20
  set label(value: string);
21
+ get roleIsVisible(): boolean;
22
+ set roleIsVisible(value: boolean);
23
+ get roleIsVisibleForTenant(): boolean;
24
+ set roleIsVisibleForTenant(value: boolean);
16
25
  get tenant(): Tenant | undefined;
17
26
  set tenant(value: Tenant | undefined);
27
+ get users(): Parse.Relation<Group, _User>;
28
+ get usersSeeEachOther(): boolean;
29
+ set usersSeeEachOther(value: boolean);
18
30
  }
@@ -11,12 +11,33 @@ class Group extends Parse.Object {
11
11
  set label(value) {
12
12
  super.set("label", value);
13
13
  }
14
+ get roleIsVisible() {
15
+ return super.get("roleIsVisible");
16
+ }
17
+ set roleIsVisible(value) {
18
+ super.set("roleIsVisible", value);
19
+ }
20
+ get roleIsVisibleForTenant() {
21
+ return super.get("roleIsVisibleForTenant");
22
+ }
23
+ set roleIsVisibleForTenant(value) {
24
+ super.set("roleIsVisibleForTenant", value);
25
+ }
14
26
  get tenant() {
15
27
  return super.get("tenant");
16
28
  }
17
29
  set tenant(value) {
18
30
  super.set("tenant", value);
19
31
  }
32
+ get users() {
33
+ return super.relation("users");
34
+ }
35
+ get usersSeeEachOther() {
36
+ return super.get("usersSeeEachOther");
37
+ }
38
+ set usersSeeEachOther(value) {
39
+ super.set("usersSeeEachOther", value);
40
+ }
20
41
  }
21
42
  exports.Group = Group;
22
43
  Group.className = "OD3_Group";
@@ -1,5 +1,6 @@
1
1
  /// <reference types="parse" />
2
2
  import type { Knowledge_Document } from "./Knowledge_Document";
3
+ import type { Tenant } from "./Tenant";
3
4
  export interface Knowledge_DocumentPageAttributes {
4
5
  id: string;
5
6
  objectId: string;
@@ -10,6 +11,7 @@ export interface Knowledge_DocumentPageAttributes {
10
11
  image: Parse.File;
11
12
  label: string;
12
13
  page: number;
14
+ tenant: Tenant;
13
15
  }
14
16
  export declare class Knowledge_DocumentPage extends Parse.Object<Knowledge_DocumentPageAttributes> {
15
17
  static className: string;
@@ -24,4 +26,6 @@ export declare class Knowledge_DocumentPage extends Parse.Object<Knowledge_Docum
24
26
  set label(value: string);
25
27
  get page(): number;
26
28
  set page(value: number);
29
+ get tenant(): Tenant;
30
+ set tenant(value: Tenant);
27
31
  }
@@ -35,6 +35,12 @@ class Knowledge_DocumentPage extends Parse.Object {
35
35
  set page(value) {
36
36
  super.set("page", value);
37
37
  }
38
+ get tenant() {
39
+ return super.get("tenant");
40
+ }
41
+ set tenant(value) {
42
+ super.set("tenant", value);
43
+ }
38
44
  }
39
45
  exports.Knowledge_DocumentPage = Knowledge_DocumentPage;
40
46
  Knowledge_DocumentPage.className = "OD3_Knowledge_DocumentPage";
@@ -8,26 +8,25 @@ export interface Maintenance_ArticleAttributes {
8
8
  objectId: string;
9
9
  createdAt: Date;
10
10
  updatedAt: Date;
11
- author?: _User;
12
11
  body?: string;
13
- media?: Parse.Relation<Maintenance_Media>;
12
+ media: Parse.Relation<Maintenance_Article, Maintenance_Media>;
14
13
  subject?: string;
15
14
  tenant?: Tenant;
16
15
  ticket: Maintenance_Ticket;
16
+ user?: _User;
17
17
  }
18
18
  export declare class Maintenance_Article extends Parse.Object<Maintenance_ArticleAttributes> {
19
19
  static className: string;
20
20
  constructor(data?: Partial<Maintenance_ArticleAttributes>);
21
- get author(): _User | undefined;
22
- set author(value: _User | undefined);
23
21
  get body(): string | undefined;
24
22
  set body(value: string | undefined);
25
- get media(): Parse.Relation<Maintenance_Media> | undefined;
26
- set media(value: Parse.Relation<Maintenance_Media> | undefined);
23
+ get media(): Parse.Relation<Maintenance_Article, Maintenance_Media>;
27
24
  get subject(): string | undefined;
28
25
  set subject(value: string | undefined);
29
26
  get tenant(): Tenant | undefined;
30
27
  set tenant(value: Tenant | undefined);
31
28
  get ticket(): Maintenance_Ticket;
32
29
  set ticket(value: Maintenance_Ticket);
30
+ get user(): _User | undefined;
31
+ set user(value: _User | undefined);
33
32
  }
@@ -5,12 +5,6 @@ class Maintenance_Article extends Parse.Object {
5
5
  constructor(data) {
6
6
  super("OD3_Maintenance_Article", data);
7
7
  }
8
- get author() {
9
- return super.get("author");
10
- }
11
- set author(value) {
12
- super.set("author", value);
13
- }
14
8
  get body() {
15
9
  return super.get("body");
16
10
  }
@@ -18,10 +12,7 @@ class Maintenance_Article extends Parse.Object {
18
12
  super.set("body", value);
19
13
  }
20
14
  get media() {
21
- return super.get("media");
22
- }
23
- set media(value) {
24
- super.set("media", value);
15
+ return super.relation("media");
25
16
  }
26
17
  get subject() {
27
18
  return super.get("subject");
@@ -41,6 +32,12 @@ class Maintenance_Article extends Parse.Object {
41
32
  set ticket(value) {
42
33
  super.set("ticket", value);
43
34
  }
35
+ get user() {
36
+ return super.get("user");
37
+ }
38
+ set user(value) {
39
+ super.set("user", value);
40
+ }
44
41
  }
45
42
  exports.Maintenance_Article = Maintenance_Article;
46
43
  Maintenance_Article.className = "OD3_Maintenance_Article";
@@ -12,7 +12,7 @@ export interface Maintenance_DuedateAttributes {
12
12
  start: Date;
13
13
  startformat: string;
14
14
  tenant?: Tenant;
15
- ticket?: Maintenance_Ticket;
15
+ ticket: Maintenance_Ticket;
16
16
  user?: _User;
17
17
  }
18
18
  export declare class Maintenance_Duedate extends Parse.Object<Maintenance_DuedateAttributes> {
@@ -28,8 +28,8 @@ export declare class Maintenance_Duedate extends Parse.Object<Maintenance_Duedat
28
28
  set startformat(value: string);
29
29
  get tenant(): Tenant | undefined;
30
30
  set tenant(value: Tenant | undefined);
31
- get ticket(): Maintenance_Ticket | undefined;
32
- set ticket(value: Maintenance_Ticket | undefined);
31
+ get ticket(): Maintenance_Ticket;
32
+ set ticket(value: Maintenance_Ticket);
33
33
  get user(): _User | undefined;
34
34
  set user(value: _User | undefined);
35
35
  }
@@ -11,7 +11,7 @@ export interface Maintenance_IssuecategoryAttributes {
11
11
  issuecode?: string;
12
12
  name: string;
13
13
  parent?: Maintenance_Issuecategory;
14
- source?: Parse.Relation<Source>;
14
+ source: Parse.Relation<Maintenance_Issuecategory, Source>;
15
15
  tenant?: Tenant;
16
16
  }
17
17
  export declare class Maintenance_Issuecategory extends Parse.Object<Maintenance_IssuecategoryAttributes> {
@@ -27,8 +27,7 @@ export declare class Maintenance_Issuecategory extends Parse.Object<Maintenance_
27
27
  set name(value: string);
28
28
  get parent(): Maintenance_Issuecategory | undefined;
29
29
  set parent(value: Maintenance_Issuecategory | undefined);
30
- get source(): Parse.Relation<Source> | undefined;
31
- set source(value: Parse.Relation<Source> | undefined);
30
+ get source(): Parse.Relation<Maintenance_Issuecategory, Source>;
32
31
  get tenant(): Tenant | undefined;
33
32
  set tenant(value: Tenant | undefined);
34
33
  }
@@ -36,10 +36,7 @@ class Maintenance_Issuecategory extends Parse.Object {
36
36
  super.set("parent", value);
37
37
  }
38
38
  get source() {
39
- return super.get("source");
40
- }
41
- set source(value) {
42
- super.set("source", value);
39
+ return super.relation("source");
43
40
  }
44
41
  get tenant() {
45
42
  return super.get("tenant");
@@ -8,7 +8,8 @@ export interface Maintenance_ScheduleAttributes {
8
8
  createdAt: Date;
9
9
  updatedAt: Date;
10
10
  description?: string;
11
- media?: Parse.Relation<Maintenance_Media>;
11
+ enabled: boolean;
12
+ media: Parse.Relation<Maintenance_Schedule, Maintenance_Media>;
12
13
  source: Source;
13
14
  tenant?: Tenant;
14
15
  title: string;
@@ -18,8 +19,9 @@ export declare class Maintenance_Schedule extends Parse.Object<Maintenance_Sched
18
19
  constructor(data?: Partial<Maintenance_ScheduleAttributes>);
19
20
  get description(): string | undefined;
20
21
  set description(value: string | undefined);
21
- get media(): Parse.Relation<Maintenance_Media> | undefined;
22
- set media(value: Parse.Relation<Maintenance_Media> | undefined);
22
+ get enabled(): boolean;
23
+ set enabled(value: boolean);
24
+ get media(): Parse.Relation<Maintenance_Schedule, Maintenance_Media>;
23
25
  get source(): Source;
24
26
  set source(value: Source);
25
27
  get tenant(): Tenant | undefined;
@@ -11,11 +11,14 @@ class Maintenance_Schedule extends Parse.Object {
11
11
  set description(value) {
12
12
  super.set("description", value);
13
13
  }
14
- get media() {
15
- return super.get("media");
14
+ get enabled() {
15
+ return super.get("enabled");
16
+ }
17
+ set enabled(value) {
18
+ super.set("enabled", value);
16
19
  }
17
- set media(value) {
18
- super.set("media", value);
20
+ get media() {
21
+ return super.relation("media");
19
22
  }
20
23
  get source() {
21
24
  return super.get("source");
@@ -0,0 +1,35 @@
1
+ /// <reference types="parse" />
2
+ import type { Maintenance_Media } from "./Maintenance_Media";
3
+ import type { Source } from "./Source";
4
+ import type { Tenant } from "./Tenant";
5
+ import type { _User } from "./_User";
6
+ export interface Maintenance_Schedule_ExecutionAttributes {
7
+ id: string;
8
+ objectId: string;
9
+ createdAt: Date;
10
+ updatedAt: Date;
11
+ description?: string;
12
+ finishedAt?: Date;
13
+ media: Parse.Relation<Maintenance_Schedule_Execution, Maintenance_Media>;
14
+ source?: Source;
15
+ tenant?: Tenant;
16
+ title?: string;
17
+ user: _User;
18
+ }
19
+ export declare class Maintenance_Schedule_Execution extends Parse.Object<Maintenance_Schedule_ExecutionAttributes> {
20
+ static className: string;
21
+ constructor(data?: Partial<Maintenance_Schedule_ExecutionAttributes>);
22
+ get description(): string | undefined;
23
+ set description(value: string | undefined);
24
+ get finishedAt(): Date | undefined;
25
+ set finishedAt(value: Date | undefined);
26
+ get media(): Parse.Relation<Maintenance_Schedule_Execution, Maintenance_Media>;
27
+ get source(): Source | undefined;
28
+ set source(value: Source | undefined);
29
+ get tenant(): Tenant | undefined;
30
+ set tenant(value: Tenant | undefined);
31
+ get title(): string | undefined;
32
+ set title(value: string | undefined);
33
+ get user(): _User;
34
+ set user(value: _User);
35
+ }