@openinc/parse-server-opendash 1.10.1 → 1.12.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.
- package/dist/functions/_init.js +11 -65
- package/dist/functions/getAdminConfig.js +38 -91
- package/dist/functions/getSchemaForAdmin.js +5 -54
- package/dist/functions/opendash-geo-features.js +13 -58
- package/dist/functions/opendash-geo-google-autocomplete.js +53 -112
- package/dist/functions/opendash-geo-graphhopper-geocode-reverse.js +30 -83
- package/dist/functions/opendash-geo-graphhopper-geocode.js +33 -86
- package/dist/helper/pdf2img.d.ts +12 -0
- package/dist/helper/pdf2img.js +111 -0
- package/dist/hooks/Alarm.d.ts +1 -1
- package/dist/hooks/Alarm.js +29 -95
- package/dist/hooks/AlarmAction.d.ts +1 -1
- package/dist/hooks/AlarmAction.js +9 -64
- package/dist/hooks/AlarmWebhook.d.ts +1 -1
- package/dist/hooks/AlarmWebhook.js +10 -64
- package/dist/hooks/Attachment.d.ts +1 -0
- package/dist/hooks/Attachment.js +18 -0
- package/dist/hooks/BDE_Form.d.ts +1 -1
- package/dist/hooks/BDE_Form.js +57 -114
- package/dist/hooks/BDE_List.d.ts +1 -1
- package/dist/hooks/BDE_List.js +11 -57
- package/dist/hooks/BDE_ListEntry.d.ts +1 -1
- package/dist/hooks/BDE_ListEntry.js +11 -57
- package/dist/hooks/BDE_Page.d.ts +1 -1
- package/dist/hooks/BDE_Page.js +19 -84
- package/dist/hooks/BDE_Result.d.ts +1 -1
- package/dist/hooks/BDE_Result.js +125 -177
- package/dist/hooks/BDE_Unit.d.ts +1 -1
- package/dist/hooks/BDE_Unit.js +11 -57
- package/dist/hooks/Config.d.ts +1 -1
- package/dist/hooks/Config.js +10 -64
- package/dist/hooks/Dashboard.d.ts +1 -1
- package/dist/hooks/Dashboard.js +26 -86
- package/dist/hooks/Group.d.ts +1 -0
- package/dist/hooks/Group.js +18 -0
- package/dist/hooks/Group_UserRelation.d.ts +1 -0
- package/dist/hooks/Group_UserRelation.js +18 -0
- package/dist/hooks/Knowledge_Article.d.ts +1 -0
- package/dist/hooks/Knowledge_Article.js +18 -0
- package/dist/hooks/Knowledge_Category.d.ts +1 -0
- package/dist/hooks/Knowledge_Category.js +18 -0
- package/dist/hooks/Knowledge_Document.d.ts +1 -0
- package/dist/hooks/Knowledge_Document.js +59 -0
- package/dist/hooks/Knowledge_DocumentPage.d.ts +1 -0
- package/dist/hooks/Knowledge_DocumentPage.js +22 -0
- package/dist/hooks/Knowledge_Video.d.ts +1 -0
- package/dist/hooks/Knowledge_Video.js +18 -0
- package/dist/hooks/Language.d.ts +1 -0
- package/dist/hooks/Language.js +18 -0
- package/dist/hooks/Maintenance_Article.d.ts +1 -0
- package/dist/hooks/Maintenance_Article.js +18 -0
- package/dist/hooks/Maintenance_Downtime.d.ts +1 -0
- package/dist/hooks/Maintenance_Downtime.js +18 -0
- package/dist/hooks/Maintenance_Duedate.d.ts +1 -0
- package/dist/hooks/Maintenance_Duedate.js +18 -0
- package/dist/hooks/Maintenance_Frequency.d.ts +1 -0
- package/dist/hooks/Maintenance_Frequency.js +18 -0
- package/dist/hooks/Maintenance_Issuecategory.d.ts +1 -0
- package/dist/hooks/Maintenance_Issuecategory.js +18 -0
- package/dist/hooks/Maintenance_Kanban_State.d.ts +1 -0
- package/dist/hooks/Maintenance_Kanban_State.js +18 -0
- package/dist/hooks/Maintenance_Media.d.ts +1 -0
- package/dist/hooks/Maintenance_Media.js +18 -0
- package/dist/hooks/Maintenance_Priority.d.ts +1 -0
- package/dist/hooks/Maintenance_Priority.js +18 -0
- package/dist/hooks/Maintenance_Restriction.d.ts +1 -0
- package/dist/hooks/Maintenance_Restriction.js +18 -0
- package/dist/hooks/Maintenance_Schedule.d.ts +1 -0
- package/dist/hooks/Maintenance_Schedule.js +18 -0
- package/dist/hooks/Maintenance_Schedule_Step.d.ts +1 -0
- package/dist/hooks/Maintenance_Schedule_Step.js +18 -0
- package/dist/hooks/Maintenance_Ticket.d.ts +1 -0
- package/dist/hooks/Maintenance_Ticket.js +18 -0
- package/dist/hooks/Maintenance_Ticket_Issuecategory.d.ts +1 -0
- package/dist/hooks/Maintenance_Ticket_Issuecategory.js +18 -0
- package/dist/hooks/Maintenance_Ticket_Kanban_State.d.ts +1 -0
- package/dist/hooks/Maintenance_Ticket_Kanban_State.js +18 -0
- package/dist/hooks/Maintenance_Ticket_Source.d.ts +1 -0
- package/dist/hooks/Maintenance_Ticket_Source.js +18 -0
- package/dist/hooks/NavigationGroup.d.ts +1 -1
- package/dist/hooks/NavigationGroup.js +9 -64
- package/dist/hooks/NavigationItem.d.ts +1 -1
- package/dist/hooks/NavigationItem.js +10 -64
- package/dist/hooks/Notification.d.ts +1 -1
- package/dist/hooks/Notification.js +55 -153
- package/dist/hooks/Permission.d.ts +1 -1
- package/dist/hooks/Permission.js +9 -64
- package/dist/hooks/Push.d.ts +1 -1
- package/dist/hooks/Push.js +24 -80
- package/dist/hooks/Report.d.ts +1 -1
- package/dist/hooks/Report.js +10 -64
- package/dist/hooks/Share.d.ts +1 -1
- package/dist/hooks/Share.js +10 -64
- package/dist/hooks/Source.d.ts +1 -1
- package/dist/hooks/Source.js +123 -240
- package/dist/hooks/SourceMeta.d.ts +1 -1
- package/dist/hooks/SourceMeta.js +36 -115
- package/dist/hooks/Tenant.d.ts +1 -1
- package/dist/hooks/Tenant.js +87 -168
- package/dist/hooks/TenantMeta.d.ts +1 -1
- package/dist/hooks/TenantMeta.js +6 -56
- package/dist/hooks/TenantTrustedDomain.d.ts +1 -1
- package/dist/hooks/TenantTrustedDomain.js +6 -56
- package/dist/hooks/UserData.d.ts +1 -1
- package/dist/hooks/UserData.js +10 -64
- package/dist/hooks/WebPush.d.ts +1 -1
- package/dist/hooks/WebPush.js +21 -77
- package/dist/hooks/Widget.d.ts +1 -1
- package/dist/hooks/Widget.js +10 -64
- package/dist/hooks/WidgetPreset.d.ts +1 -0
- package/dist/hooks/WidgetPreset.js +18 -0
- package/dist/hooks/_User.js +102 -208
- package/dist/hooks/_beforeLogin.js +16 -71
- package/dist/hooks/_init.js +15 -78
- package/dist/index.d.ts +4 -0
- package/dist/index.js +239 -487
- package/dist/ow.js +79 -137
- package/dist/types/Alarm.d.ts +25 -5
- package/dist/types/Alarm.js +57 -0
- package/dist/types/AlarmAction.d.ts +29 -7
- package/dist/types/AlarmAction.js +63 -0
- package/dist/types/AlarmWebhook.d.ts +30 -9
- package/dist/types/AlarmWebhook.js +63 -0
- package/dist/types/Attachment.d.ts +21 -0
- package/dist/types/Attachment.js +29 -0
- package/dist/types/BDE_Form.d.ts +14 -3
- package/dist/types/BDE_Form.js +33 -0
- package/dist/types/BDE_List.d.ts +6 -1
- package/dist/types/BDE_List.js +15 -0
- package/dist/types/BDE_ListEntry.d.ts +12 -4
- package/dist/types/BDE_ListEntry.js +27 -0
- package/dist/types/BDE_Page.d.ts +9 -2
- package/dist/types/BDE_Page.js +21 -0
- package/dist/types/BDE_Result.d.ts +11 -2
- package/dist/types/BDE_Result.js +27 -0
- package/dist/types/BDE_Unit.d.ts +14 -3
- package/dist/types/BDE_Unit.js +33 -0
- package/dist/types/Config.d.ts +14 -3
- package/dist/types/Config.js +33 -0
- package/dist/types/Dashboard.d.ts +24 -5
- package/dist/types/Dashboard.js +51 -0
- package/dist/types/Group.d.ts +18 -0
- package/dist/types/Group.js +23 -0
- package/dist/types/Group_UserRelation.d.ts +19 -0
- package/dist/types/Group_UserRelation.js +23 -0
- package/dist/types/Knowledge_Article.d.ts +29 -0
- package/dist/types/Knowledge_Article.js +41 -0
- package/dist/types/Knowledge_Category.d.ts +25 -0
- package/dist/types/Knowledge_Category.js +35 -0
- package/dist/types/Knowledge_Document.d.ts +29 -0
- package/dist/types/Knowledge_Document.js +41 -0
- package/dist/types/Knowledge_DocumentPage.d.ts +27 -0
- package/dist/types/Knowledge_DocumentPage.js +41 -0
- package/dist/types/Knowledge_Video.d.ts +35 -0
- package/dist/types/Knowledge_Video.js +53 -0
- package/dist/types/Language.d.ts +14 -0
- package/dist/types/Language.js +17 -0
- package/dist/types/Maintenance_Article.d.ts +33 -0
- package/dist/types/Maintenance_Article.js +47 -0
- package/dist/types/Maintenance_Downtime.d.ts +26 -0
- package/dist/types/Maintenance_Downtime.js +35 -0
- package/dist/types/Maintenance_Duedate.d.ts +35 -0
- package/dist/types/Maintenance_Duedate.js +53 -0
- package/dist/types/Maintenance_Frequency.d.ts +26 -0
- package/dist/types/Maintenance_Frequency.js +35 -0
- package/dist/types/Maintenance_Issuecategory.d.ts +34 -0
- package/dist/types/Maintenance_Issuecategory.js +53 -0
- package/dist/types/Maintenance_Kanban_State.d.ts +33 -0
- package/dist/types/Maintenance_Kanban_State.js +53 -0
- package/dist/types/Maintenance_Media.d.ts +21 -0
- package/dist/types/Maintenance_Media.js +29 -0
- package/dist/types/Maintenance_Priority.d.ts +26 -0
- package/dist/types/Maintenance_Priority.js +35 -0
- package/dist/types/Maintenance_Restriction.d.ts +26 -0
- package/dist/types/Maintenance_Restriction.js +35 -0
- package/dist/types/Maintenance_Schedule.d.ts +29 -0
- package/dist/types/Maintenance_Schedule.js +41 -0
- package/dist/types/Maintenance_Schedule_Step.d.ts +34 -0
- package/dist/types/Maintenance_Schedule_Step.js +53 -0
- package/dist/types/Maintenance_Ticket.d.ts +25 -0
- package/dist/types/Maintenance_Ticket.js +35 -0
- package/dist/types/Maintenance_Ticket_Issuecategory.d.ts +27 -0
- package/dist/types/Maintenance_Ticket_Issuecategory.js +35 -0
- package/dist/types/Maintenance_Ticket_Kanban_State.d.ts +27 -0
- package/dist/types/Maintenance_Ticket_Kanban_State.js +35 -0
- package/dist/types/Maintenance_Ticket_Source.d.ts +27 -0
- package/dist/types/Maintenance_Ticket_Source.js +35 -0
- package/dist/types/NavigationGroup.d.ts +14 -3
- package/dist/types/NavigationGroup.js +33 -0
- package/dist/types/NavigationItem.d.ts +36 -9
- package/dist/types/NavigationItem.js +81 -0
- package/dist/types/Notification.d.ts +20 -5
- package/dist/types/Notification.js +45 -0
- package/dist/types/Permission.d.ts +9 -2
- package/dist/types/Permission.js +21 -0
- package/dist/types/Push.d.ts +18 -5
- package/dist/types/Push.js +39 -0
- package/dist/types/Report.d.ts +16 -3
- package/dist/types/Report.js +39 -0
- package/dist/types/Share.d.ts +25 -8
- package/dist/types/Share.js +51 -0
- package/dist/types/Source.d.ts +20 -5
- package/dist/types/Source.js +45 -0
- package/dist/types/SourceMeta.d.ts +9 -2
- package/dist/types/SourceMeta.js +21 -0
- package/dist/types/Tenant.d.ts +20 -5
- package/dist/types/Tenant.js +45 -0
- package/dist/types/TenantMeta.d.ts +7 -2
- package/dist/types/TenantMeta.js +15 -0
- package/dist/types/TenantTrustedDomain.d.ts +10 -3
- package/dist/types/TenantTrustedDomain.js +21 -0
- package/dist/types/UserData.d.ts +12 -3
- package/dist/types/UserData.js +27 -0
- package/dist/types/WebPush.d.ts +13 -4
- package/dist/types/WebPush.js +27 -0
- package/dist/types/Widget.d.ts +14 -3
- package/dist/types/Widget.js +33 -0
- package/dist/types/WidgetPreset.d.ts +40 -0
- package/dist/types/WidgetPreset.js +65 -0
- package/dist/types/_Role.d.ts +3 -3
- package/dist/types/_Session.d.ts +5 -5
- package/dist/types/_User.d.ts +11 -9
- package/dist/types/index.d.ts +108 -29
- package/dist/types/index.js +104 -0
- package/package.json +3 -2
- package/schema/Alarm.json +4 -0
- package/schema/AlarmAction.json +5 -0
- package/schema/Attachment.json +44 -0
- package/schema/BDE_Form.json +9 -10
- package/schema/BDE_List.json +7 -9
- package/schema/BDE_ListEntry.json +7 -9
- package/schema/BDE_Page.json +7 -9
- package/schema/BDE_Result.json +7 -9
- package/schema/BDE_Unit.json +9 -8
- package/schema/Dashboard.json +9 -0
- package/schema/Group.json +39 -0
- package/schema/Group_UserRelation.json +40 -0
- package/schema/Knowledge_Article.json +54 -0
- package/schema/Knowledge_Category.json +50 -0
- package/schema/Knowledge_Document.json +54 -0
- package/schema/Knowledge_DocumentPage.json +53 -0
- package/schema/Knowledge_Video.json +62 -0
- package/schema/Language.json +35 -0
- package/schema/Maintenance_Article.json +56 -0
- package/schema/Maintenance_Downtime.json +48 -0
- package/schema/Maintenance_Duedate.json +61 -0
- package/schema/Maintenance_Frequency.json +48 -0
- package/schema/Maintenance_Issuecategory.json +60 -0
- package/schema/Maintenance_Kanban_State.json +60 -0
- package/schema/Maintenance_Media.json +43 -0
- package/schema/Maintenance_Priority.json +48 -0
- package/schema/Maintenance_Restriction.json +48 -0
- package/schema/Maintenance_Schedule.json +53 -0
- package/schema/Maintenance_Schedule_Step.json +60 -0
- package/schema/Maintenance_Ticket.json +47 -0
- package/schema/Maintenance_Ticket_Issuecategory.json +48 -0
- package/schema/Maintenance_Ticket_Kanban_State.json +48 -0
- package/schema/Maintenance_Ticket_Source.json +48 -0
- package/schema/Tenant.json +3 -0
- package/schema/WidgetPreset.json +79 -0
package/dist/index.js
CHANGED
|
@@ -1,267 +1,111 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
4
|
};
|
|
41
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.afterDeleteHook = exports.beforeDeleteHook = exports.afterSaveHook = exports.beforeSaveHook = exports.defaultHandler = exports.immutableField = exports.ensureRole = exports.getEnvBoolean = exports.getEnv = exports.getConfigBoolean = exports.getConfig = exports.requirePermission = exports.hasPermission = exports.init = exports.PREFIX = void 0;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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;
|
|
7
|
+
const web_push_1 = __importDefault(require("web-push"));
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const parse_server_schema_1 = require("@openinc/parse-server-schema");
|
|
10
|
+
const _init_1 = require("./hooks/_init");
|
|
11
|
+
const _init_2 = require("./functions/_init");
|
|
12
|
+
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
|
|
49
13
|
exports.PREFIX = "OD3_";
|
|
50
|
-
|
|
51
|
-
function init(cfg) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return [4 /*yield*/, Parse.Config.get()];
|
|
64
|
-
case 1:
|
|
65
|
-
config = _c.sent();
|
|
66
|
-
exports.PREFIX = config.get("OPENDASH_CLASS_PREFIX") || exports.PREFIX;
|
|
67
|
-
return [4 /*yield*/, (0, parse_server_schema_1.loadConfig)(cfg.configPath)];
|
|
68
|
-
case 2:
|
|
69
|
-
schemaConfig = _c.sent();
|
|
70
|
-
_c.label = 3;
|
|
71
|
-
case 3:
|
|
72
|
-
_c.trys.push([3, 5, , 6]);
|
|
73
|
-
return [4 /*yield*/, (0, parse_server_schema_1.up)(schemaConfig, (0, path_1.resolve)(__dirname, "../schema"), {
|
|
74
|
-
prefix: exports.PREFIX,
|
|
75
|
-
deleteClasses: false,
|
|
76
|
-
deleteFields: false,
|
|
77
|
-
})];
|
|
78
|
-
case 4:
|
|
79
|
-
_c.sent();
|
|
80
|
-
return [3 /*break*/, 6];
|
|
81
|
-
case 5:
|
|
82
|
-
error_1 = _c.sent();
|
|
83
|
-
console.error("Error while updating schema");
|
|
84
|
-
console.error(error_1);
|
|
85
|
-
return [3 /*break*/, 6];
|
|
86
|
-
case 6:
|
|
87
|
-
_b = (_a = Object).fromEntries;
|
|
88
|
-
return [4 /*yield*/, Parse.Schema.all()];
|
|
89
|
-
case 7:
|
|
90
|
-
schema = _b.apply(_a, [(_c.sent()).map(function (schema) { return [schema.className, schema]; })]);
|
|
91
|
-
return [4 /*yield*/, initDefaultRoles()];
|
|
92
|
-
case 8:
|
|
93
|
-
_c.sent();
|
|
94
|
-
return [4 /*yield*/, initWebPush()];
|
|
95
|
-
case 9:
|
|
96
|
-
_c.sent();
|
|
97
|
-
return [4 /*yield*/, (0, _init_1.init)()];
|
|
98
|
-
case 10:
|
|
99
|
-
_c.sent();
|
|
100
|
-
return [4 /*yield*/, (0, _init_2.init)()];
|
|
101
|
-
case 11:
|
|
102
|
-
_c.sent();
|
|
103
|
-
return [2 /*return*/];
|
|
104
|
-
}
|
|
14
|
+
let schema = {};
|
|
15
|
+
async function init(cfg = {}) {
|
|
16
|
+
try {
|
|
17
|
+
const pkg = require("../package.json");
|
|
18
|
+
console.log(`[${pkg.name}] init (v${pkg.version})`);
|
|
19
|
+
}
|
|
20
|
+
catch (error) { }
|
|
21
|
+
const schemaConfig = await (0, parse_server_schema_1.loadConfig)(cfg.configPath);
|
|
22
|
+
try {
|
|
23
|
+
await (0, parse_server_schema_1.up)(schemaConfig, (0, path_1.resolve)(__dirname, "../schema"), {
|
|
24
|
+
prefix: exports.PREFIX,
|
|
25
|
+
deleteClasses: false,
|
|
26
|
+
deleteFields: false,
|
|
105
27
|
});
|
|
106
|
-
}
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error("Error while updating schema");
|
|
31
|
+
console.error(error);
|
|
32
|
+
}
|
|
33
|
+
schema = Object.fromEntries((await Parse.Schema.all()).map((schema) => [schema.className, schema]));
|
|
34
|
+
await initDefaultRoles();
|
|
35
|
+
await initWebPush();
|
|
36
|
+
await (0, _init_1.init)();
|
|
37
|
+
await (0, _init_2.init)();
|
|
107
38
|
}
|
|
108
39
|
exports.init = init;
|
|
109
|
-
function initDefaultRoles() {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
_a.trys.push([0, 8, , 9]);
|
|
116
|
-
return [4 /*yield*/, ensureRole("Admin")];
|
|
117
|
-
case 1:
|
|
118
|
-
_a.sent();
|
|
119
|
-
return [4 /*yield*/, ensureRole("od-user")];
|
|
120
|
-
case 2:
|
|
121
|
-
_a.sent();
|
|
122
|
-
return [4 /*yield*/, ensureRole("od-admin", {
|
|
123
|
-
childRoles: ["Admin"],
|
|
124
|
-
})];
|
|
125
|
-
case 3:
|
|
126
|
-
_a.sent();
|
|
127
|
-
return [4 /*yield*/, ensureRole("od-tenant-user")];
|
|
128
|
-
case 4:
|
|
129
|
-
_a.sent();
|
|
130
|
-
return [4 /*yield*/, ensureRole("od-tenant-verified")];
|
|
131
|
-
case 5:
|
|
132
|
-
_a.sent();
|
|
133
|
-
return [4 /*yield*/, ensureRole("od-tenant-global-visible")];
|
|
134
|
-
case 6:
|
|
135
|
-
_a.sent();
|
|
136
|
-
return [4 /*yield*/, ensureRole("od-tenant-admin")];
|
|
137
|
-
case 7:
|
|
138
|
-
_a.sent();
|
|
139
|
-
return [3 /*break*/, 9];
|
|
140
|
-
case 8:
|
|
141
|
-
error_2 = _a.sent();
|
|
142
|
-
console.error(error_2);
|
|
143
|
-
return [3 /*break*/, 9];
|
|
144
|
-
case 9: return [2 /*return*/];
|
|
145
|
-
}
|
|
40
|
+
async function initDefaultRoles() {
|
|
41
|
+
try {
|
|
42
|
+
await ensureRole("Admin");
|
|
43
|
+
await ensureRole("od-user");
|
|
44
|
+
await ensureRole("od-admin", {
|
|
45
|
+
childRoles: ["Admin"],
|
|
146
46
|
});
|
|
147
|
-
|
|
47
|
+
await ensureRole("od-tenant-user");
|
|
48
|
+
await ensureRole("od-tenant-verified");
|
|
49
|
+
await ensureRole("od-tenant-global-visible");
|
|
50
|
+
await ensureRole("od-tenant-admin");
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error(error);
|
|
54
|
+
}
|
|
148
55
|
}
|
|
149
|
-
function initWebPush() {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
_b = (_a = web_push_1.default).setVapidDetails;
|
|
162
|
-
return [4 /*yield*/, getConfig("WEB_PUSH_HOST")];
|
|
163
|
-
case 2:
|
|
164
|
-
_c = [(_f.sent())];
|
|
165
|
-
return [4 /*yield*/, getConfig("WEB_PUSH_VAPID_PUBLIC_KEY")];
|
|
166
|
-
case 3:
|
|
167
|
-
_c = _c.concat([(_f.sent())]);
|
|
168
|
-
return [4 /*yield*/, getConfig("WEB_PUSH_VAPID_PRIVATE_KEY")];
|
|
169
|
-
case 4:
|
|
170
|
-
_b.apply(_a, _c.concat([(_f.sent())]));
|
|
171
|
-
_e = (_d = web_push_1.default).setGCMAPIKey;
|
|
172
|
-
return [4 /*yield*/, getConfig("WEB_PUSH_FCM_KEY")];
|
|
173
|
-
case 5:
|
|
174
|
-
_e.apply(_d, [(_f.sent())]);
|
|
175
|
-
return [3 /*break*/, 7];
|
|
176
|
-
case 6:
|
|
177
|
-
error_3 = _f.sent();
|
|
178
|
-
console.error(error_3);
|
|
179
|
-
return [3 /*break*/, 7];
|
|
180
|
-
case 7: return [2 /*return*/];
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
});
|
|
56
|
+
async function initWebPush() {
|
|
57
|
+
try {
|
|
58
|
+
if (!(await getConfigBoolean("WEB_PUSH_ENABLED"))) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
web_push_1.default.setVapidDetails((await getConfig("WEB_PUSH_HOST")), (await getConfig("WEB_PUSH_VAPID_PUBLIC_KEY")), (await getConfig("WEB_PUSH_VAPID_PRIVATE_KEY")));
|
|
62
|
+
web_push_1.default.setGCMAPIKey((await getConfig("WEB_PUSH_FCM_KEY")));
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error(error);
|
|
66
|
+
}
|
|
184
67
|
}
|
|
185
|
-
function hasPermission(sessionToken, key) {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
case 0: return [4 /*yield*/, new Parse.Query("".concat(exports.PREFIX, "Permission"))
|
|
191
|
-
.equalTo("key", key)
|
|
192
|
-
.first({ sessionToken: sessionToken })];
|
|
193
|
-
case 1:
|
|
194
|
-
result = _a.sent();
|
|
195
|
-
return [2 /*return*/, !!result];
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
});
|
|
68
|
+
async function hasPermission(sessionToken, key) {
|
|
69
|
+
const result = await new Parse.Query(`${exports.PREFIX}Permission`)
|
|
70
|
+
.equalTo("key", key)
|
|
71
|
+
.first({ sessionToken });
|
|
72
|
+
return !!result;
|
|
199
73
|
}
|
|
200
74
|
exports.hasPermission = hasPermission;
|
|
201
|
-
function requirePermission(request, key, message) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
throw new Parse.Error(119, "Missing Permission: " + (message || key || "Master Key Only"));
|
|
217
|
-
}
|
|
218
|
-
return [4 /*yield*/, hasPermission(sessionToken, key)];
|
|
219
|
-
case 1:
|
|
220
|
-
p = _b.sent();
|
|
221
|
-
if (!p) {
|
|
222
|
-
throw new Parse.Error(119, "Missing Permission: " + (message || key || "Master Key Only"));
|
|
223
|
-
}
|
|
224
|
-
return [2 /*return*/];
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
});
|
|
75
|
+
async function requirePermission(request, key, message) {
|
|
76
|
+
if (request.master) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (!key) {
|
|
80
|
+
throw new Parse.Error(119, "Missing Permission: " + (message || key || "Master Key Only"));
|
|
81
|
+
}
|
|
82
|
+
const sessionToken = request.user?.getSessionToken();
|
|
83
|
+
if (!sessionToken) {
|
|
84
|
+
throw new Parse.Error(119, "Missing Permission: " + (message || key || "Master Key Only"));
|
|
85
|
+
}
|
|
86
|
+
const p = await hasPermission(sessionToken, key);
|
|
87
|
+
if (!p) {
|
|
88
|
+
throw new Parse.Error(119, "Missing Permission: " + (message || key || "Master Key Only"));
|
|
89
|
+
}
|
|
228
90
|
}
|
|
229
91
|
exports.requirePermission = requirePermission;
|
|
230
|
-
function getConfig(key) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
case 0: return [4 /*yield*/, new Parse.Query("".concat(exports.PREFIX, "Config"))
|
|
236
|
-
.equalTo("key", key)
|
|
237
|
-
.first({
|
|
238
|
-
useMasterKey: true,
|
|
239
|
-
})];
|
|
240
|
-
case 1:
|
|
241
|
-
result = _a.sent();
|
|
242
|
-
value = result === null || result === void 0 ? void 0 : result.get("value");
|
|
243
|
-
console.log("[@openinc/parse-server-opendash][Config]", key, value);
|
|
244
|
-
return [2 /*return*/, value || ""];
|
|
245
|
-
}
|
|
246
|
-
});
|
|
92
|
+
async function getConfig(key) {
|
|
93
|
+
const result = await new Parse.Query(`${exports.PREFIX}Config`)
|
|
94
|
+
.equalTo("key", key)
|
|
95
|
+
.first({
|
|
96
|
+
useMasterKey: true,
|
|
247
97
|
});
|
|
98
|
+
const value = result?.get("value");
|
|
99
|
+
console.log("[@openinc/parse-server-opendash][Config]", key, value);
|
|
100
|
+
return value || "";
|
|
248
101
|
}
|
|
249
102
|
exports.getConfig = getConfig;
|
|
250
|
-
function getConfigBoolean(key) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
return
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
case 1:
|
|
257
|
-
value = _a.sent();
|
|
258
|
-
if (!value || value.toLowerCase() === "false" || value === "0") {
|
|
259
|
-
return [2 /*return*/, false];
|
|
260
|
-
}
|
|
261
|
-
return [2 /*return*/, true];
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
});
|
|
103
|
+
async function getConfigBoolean(key) {
|
|
104
|
+
const value = await getConfig(key);
|
|
105
|
+
if (!value || value.toLowerCase() === "false" || value === "0") {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
265
109
|
}
|
|
266
110
|
exports.getConfigBoolean = getConfigBoolean;
|
|
267
111
|
function getEnv(key) {
|
|
@@ -269,288 +113,196 @@ function getEnv(key) {
|
|
|
269
113
|
}
|
|
270
114
|
exports.getEnv = getEnv;
|
|
271
115
|
function getEnvBoolean(key) {
|
|
272
|
-
|
|
116
|
+
const value = getEnv(key);
|
|
273
117
|
if (!value || value.toLowerCase() === "false" || value === "0") {
|
|
274
118
|
return false;
|
|
275
119
|
}
|
|
276
120
|
return true;
|
|
277
121
|
}
|
|
278
122
|
exports.getEnvBoolean = getEnvBoolean;
|
|
279
|
-
function ensureRole(name, options) {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
.first({ useMasterKey: true })];
|
|
293
|
-
case 1:
|
|
294
|
-
role = _b.sent();
|
|
295
|
-
if (!!role) return [3 /*break*/, 3];
|
|
296
|
-
role = new Parse.Role(name, acl);
|
|
297
|
-
role.set("label", label);
|
|
298
|
-
return [4 /*yield*/, role.save(null, {
|
|
299
|
-
useMasterKey: true,
|
|
300
|
-
})];
|
|
301
|
-
case 2:
|
|
302
|
-
_b.sent();
|
|
303
|
-
_b.label = 3;
|
|
304
|
-
case 3:
|
|
305
|
-
changed = false;
|
|
306
|
-
if (role.get("label") !== label) {
|
|
307
|
-
role.set("label", label);
|
|
308
|
-
changed = true;
|
|
309
|
-
}
|
|
310
|
-
if (!(0, fast_deep_equal_1.default)(acl.toJSON(), (_a = role.getACL()) === null || _a === void 0 ? void 0 : _a.toJSON())) {
|
|
311
|
-
role.setACL(acl);
|
|
312
|
-
changed = true;
|
|
313
|
-
}
|
|
314
|
-
if (!(Array.isArray(childRoles) && childRoles.length > 0)) return [3 /*break*/, 8];
|
|
315
|
-
relation = role.getRoles();
|
|
316
|
-
return [4 /*yield*/, relation
|
|
317
|
-
.query()
|
|
318
|
-
.find({ useMasterKey: true })];
|
|
319
|
-
case 4:
|
|
320
|
-
currentChildRoles = _b.sent();
|
|
321
|
-
currentChildRoleNames = currentChildRoles.map(function (role) {
|
|
322
|
-
return role.get("name");
|
|
323
|
-
});
|
|
324
|
-
_i = 0, childRoles_1 = childRoles;
|
|
325
|
-
_b.label = 5;
|
|
326
|
-
case 5:
|
|
327
|
-
if (!(_i < childRoles_1.length)) return [3 /*break*/, 8];
|
|
328
|
-
childRoleName = childRoles_1[_i];
|
|
329
|
-
if (currentChildRoleNames.includes(childRoleName)) {
|
|
330
|
-
return [3 /*break*/, 7];
|
|
331
|
-
}
|
|
332
|
-
return [4 /*yield*/, new Parse.Query(Parse.Role)
|
|
333
|
-
.equalTo("name", childRoleName)
|
|
334
|
-
.find({ useMasterKey: true })];
|
|
335
|
-
case 6:
|
|
336
|
-
childRole = _b.sent();
|
|
337
|
-
relation.add(childRole);
|
|
338
|
-
changed = true;
|
|
339
|
-
_b.label = 7;
|
|
340
|
-
case 7:
|
|
341
|
-
_i++;
|
|
342
|
-
return [3 /*break*/, 5];
|
|
343
|
-
case 8:
|
|
344
|
-
if (!changed) return [3 /*break*/, 10];
|
|
345
|
-
return [4 /*yield*/, role.save(null, { useMasterKey: true })];
|
|
346
|
-
case 9:
|
|
347
|
-
_b.sent();
|
|
348
|
-
_b.label = 10;
|
|
349
|
-
case 10: return [2 /*return*/];
|
|
350
|
-
}
|
|
123
|
+
async function ensureRole(name, options) {
|
|
124
|
+
const label = options?.label || undefined;
|
|
125
|
+
const acl = options?.acl || new Parse.ACL();
|
|
126
|
+
const childRoles = options?.childRoles || undefined;
|
|
127
|
+
console.log(`[@openinc/parse-server-opendash] ensureRole(${name})`, JSON.stringify({ label, acl, childRoles }, null, 2));
|
|
128
|
+
let role = await new Parse.Query(Parse.Role)
|
|
129
|
+
.equalTo("name", name)
|
|
130
|
+
.first({ useMasterKey: true });
|
|
131
|
+
if (!role) {
|
|
132
|
+
role = new Parse.Role(name, acl);
|
|
133
|
+
role.set("label", label);
|
|
134
|
+
await role.save(null, {
|
|
135
|
+
useMasterKey: true,
|
|
351
136
|
});
|
|
352
|
-
}
|
|
137
|
+
}
|
|
138
|
+
let changed = false;
|
|
139
|
+
if (role.get("label") !== label) {
|
|
140
|
+
role.set("label", label);
|
|
141
|
+
changed = true;
|
|
142
|
+
}
|
|
143
|
+
if (!(0, fast_deep_equal_1.default)(acl.toJSON(), role.getACL()?.toJSON())) {
|
|
144
|
+
role.setACL(acl);
|
|
145
|
+
changed = true;
|
|
146
|
+
}
|
|
147
|
+
if (Array.isArray(childRoles) && childRoles.length > 0) {
|
|
148
|
+
const relation = role.getRoles();
|
|
149
|
+
const currentChildRoles = await relation
|
|
150
|
+
.query()
|
|
151
|
+
.find({ useMasterKey: true });
|
|
152
|
+
const currentChildRoleNames = currentChildRoles.map((role) => role.get("name"));
|
|
153
|
+
for (const childRoleName of childRoles) {
|
|
154
|
+
if (currentChildRoleNames.includes(childRoleName)) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const childRole = await new Parse.Query(Parse.Role)
|
|
158
|
+
.equalTo("name", childRoleName)
|
|
159
|
+
.find({ useMasterKey: true });
|
|
160
|
+
relation.add(childRole);
|
|
161
|
+
changed = true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (changed) {
|
|
165
|
+
await role.save(null, { useMasterKey: true });
|
|
166
|
+
}
|
|
353
167
|
}
|
|
354
168
|
exports.ensureRole = ensureRole;
|
|
355
|
-
function immutableField(request, fieldName, permissionName) {
|
|
356
|
-
if (
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
previousValue = JSON.stringify(request.original.get(fieldName));
|
|
366
|
-
nextValue = JSON.stringify(request.object.get(fieldName));
|
|
367
|
-
if ((0, fast_deep_equal_1.default)(previousValue, nextValue)) {
|
|
368
|
-
return [2 /*return*/];
|
|
369
|
-
}
|
|
370
|
-
return [4 /*yield*/, requirePermission(request, permissionName, "You are not allowed to edit the '".concat(fieldName, "' field."))];
|
|
371
|
-
case 1:
|
|
372
|
-
_a.sent();
|
|
373
|
-
return [2 /*return*/];
|
|
374
|
-
}
|
|
375
|
-
});
|
|
376
|
-
});
|
|
169
|
+
async function immutableField(request, fieldName, permissionName = "parse:edit-immutable-fields") {
|
|
170
|
+
if (!request.original || request.master) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const previousValue = JSON.stringify(request.original.get(fieldName));
|
|
174
|
+
const nextValue = JSON.stringify(request.object.get(fieldName));
|
|
175
|
+
if ((0, fast_deep_equal_1.default)(previousValue, nextValue)) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
await requirePermission(request, permissionName, `You are not allowed to edit the '${fieldName}' field.`);
|
|
377
179
|
}
|
|
378
180
|
exports.immutableField = immutableField;
|
|
379
|
-
function defaultHandler(request) {
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
return
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
case 4:
|
|
413
|
-
if (!!request.original) return [3 /*break*/, 6];
|
|
414
|
-
if (userField) {
|
|
415
|
-
request.object.set("user", request.user);
|
|
416
|
-
}
|
|
417
|
-
if (!tenantField) return [3 /*break*/, 6];
|
|
418
|
-
return [4 /*yield*/, ((_c = request.user) === null || _c === void 0 ? void 0 : _c.fetch({
|
|
419
|
-
useMasterKey: true,
|
|
420
|
-
}))];
|
|
421
|
-
case 5:
|
|
422
|
-
user = (_d.sent());
|
|
423
|
-
request.object.set("tenant", user.get("tenant"));
|
|
424
|
-
_d.label = 6;
|
|
425
|
-
case 6: return [2 /*return*/];
|
|
426
|
-
}
|
|
427
|
-
});
|
|
428
|
-
});
|
|
181
|
+
async function defaultHandler(request) {
|
|
182
|
+
const className = request.object.className;
|
|
183
|
+
if (request.master) {
|
|
184
|
+
console.log(`[@openinc/parse-server-opendash] Skipping default beforeSave() handler of ${className} for masterkey`);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (!request.user) {
|
|
188
|
+
throw new Error();
|
|
189
|
+
}
|
|
190
|
+
const currentSchema = schema[className];
|
|
191
|
+
if (!currentSchema) {
|
|
192
|
+
console.warn(`[@openinc/parse-server-opendash] Skipping default beforeSave() handler, no schema found for ${className}`);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const userField = !!currentSchema?.fields?.user;
|
|
196
|
+
const tenantField = !!currentSchema?.fields?.tenant;
|
|
197
|
+
if (userField) {
|
|
198
|
+
await immutableField(request, "user");
|
|
199
|
+
}
|
|
200
|
+
if (tenantField) {
|
|
201
|
+
await immutableField(request, "tenant");
|
|
202
|
+
}
|
|
203
|
+
if (!request.original) {
|
|
204
|
+
if (userField) {
|
|
205
|
+
request.object.set("user", request.user);
|
|
206
|
+
}
|
|
207
|
+
if (tenantField) {
|
|
208
|
+
const user = (await request.user?.fetch({
|
|
209
|
+
useMasterKey: true,
|
|
210
|
+
}));
|
|
211
|
+
request.object.set("tenant", user.get("tenant"));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
429
214
|
}
|
|
430
215
|
exports.defaultHandler = defaultHandler;
|
|
431
|
-
|
|
216
|
+
async function defaultAclHandler(request, options) {
|
|
217
|
+
const className = request.object.className;
|
|
218
|
+
const currentSchema = schema[className];
|
|
219
|
+
if (!currentSchema) {
|
|
220
|
+
console.warn(`[@openinc/parse-server-opendash] Skipping default beforeSave() ACL handler, no schema found for ${className}`);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const userField = !!currentSchema?.fields?.user;
|
|
224
|
+
const tenantField = !!currentSchema?.fields?.tenant;
|
|
225
|
+
if (!options?.allowCustomACL || !request.object.getACL()) {
|
|
226
|
+
request.object.setACL(new Parse.ACL());
|
|
227
|
+
}
|
|
228
|
+
const acl = request.object.getACL();
|
|
229
|
+
acl.setRoleReadAccess("od-admin", true);
|
|
230
|
+
acl.setRoleWriteAccess("od-admin", true);
|
|
231
|
+
if (userField) {
|
|
232
|
+
const user = request.object.get("user");
|
|
233
|
+
if (user) {
|
|
234
|
+
acl.setReadAccess(user.id, true);
|
|
235
|
+
acl.setWriteAccess(user.id, true);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (tenantField) {
|
|
239
|
+
const tenant = request.object.get("tenant");
|
|
240
|
+
if (tenant) {
|
|
241
|
+
acl.setRoleReadAccess(`od-tenant-user-${tenant.id}`, true);
|
|
242
|
+
if (options?.allowTenantUserWrite) {
|
|
243
|
+
acl.setRoleWriteAccess(`od-tenant-user-${tenant.id}`, true);
|
|
244
|
+
}
|
|
245
|
+
acl.setRoleReadAccess(`od-tenant-admin-${tenant.id}`, true);
|
|
246
|
+
acl.setRoleWriteAccess(`od-tenant-admin-${tenant.id}`, true);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
exports.defaultAclHandler = defaultAclHandler;
|
|
251
|
+
const beforeSaveHooks = {};
|
|
432
252
|
function beforeSaveHook(target, callback) {
|
|
433
|
-
|
|
253
|
+
// @ts-ignore
|
|
254
|
+
const className = typeof target === "string" ? target : target.className;
|
|
434
255
|
if (!beforeSaveHooks[className]) {
|
|
435
256
|
beforeSaveHooks[className] = [];
|
|
436
|
-
Parse.Cloud.beforeSave(className, function beforeSaveHookFunction(request) {
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
switch (_b.label) {
|
|
441
|
-
case 0:
|
|
442
|
-
_i = 0, _a = beforeSaveHooks[className];
|
|
443
|
-
_b.label = 1;
|
|
444
|
-
case 1:
|
|
445
|
-
if (!(_i < _a.length)) return [3 /*break*/, 4];
|
|
446
|
-
fn = _a[_i];
|
|
447
|
-
return [4 /*yield*/, fn(request)];
|
|
448
|
-
case 2:
|
|
449
|
-
_b.sent();
|
|
450
|
-
_b.label = 3;
|
|
451
|
-
case 3:
|
|
452
|
-
_i++;
|
|
453
|
-
return [3 /*break*/, 1];
|
|
454
|
-
case 4: return [2 /*return*/];
|
|
455
|
-
}
|
|
456
|
-
});
|
|
457
|
-
});
|
|
257
|
+
Parse.Cloud.beforeSave(className, async function beforeSaveHookFunction(request) {
|
|
258
|
+
for (const fn of beforeSaveHooks[className]) {
|
|
259
|
+
await fn(request);
|
|
260
|
+
}
|
|
458
261
|
});
|
|
459
262
|
}
|
|
460
263
|
beforeSaveHooks[className].push(callback);
|
|
461
264
|
}
|
|
462
265
|
exports.beforeSaveHook = beforeSaveHook;
|
|
463
|
-
|
|
266
|
+
const afterSaveHooks = {};
|
|
464
267
|
function afterSaveHook(target, callback) {
|
|
465
|
-
|
|
268
|
+
// @ts-ignore
|
|
269
|
+
const className = typeof target === "string" ? target : target.className;
|
|
466
270
|
if (!afterSaveHooks[className]) {
|
|
467
271
|
afterSaveHooks[className] = [];
|
|
468
|
-
Parse.Cloud.afterSave(className, function afterSaveHookFunction(request) {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
switch (_b.label) {
|
|
473
|
-
case 0:
|
|
474
|
-
_i = 0, _a = afterSaveHooks[className];
|
|
475
|
-
_b.label = 1;
|
|
476
|
-
case 1:
|
|
477
|
-
if (!(_i < _a.length)) return [3 /*break*/, 4];
|
|
478
|
-
fn = _a[_i];
|
|
479
|
-
return [4 /*yield*/, fn(request)];
|
|
480
|
-
case 2:
|
|
481
|
-
_b.sent();
|
|
482
|
-
_b.label = 3;
|
|
483
|
-
case 3:
|
|
484
|
-
_i++;
|
|
485
|
-
return [3 /*break*/, 1];
|
|
486
|
-
case 4: return [2 /*return*/];
|
|
487
|
-
}
|
|
488
|
-
});
|
|
489
|
-
});
|
|
272
|
+
Parse.Cloud.afterSave(className, async function afterSaveHookFunction(request) {
|
|
273
|
+
for (const fn of afterSaveHooks[className]) {
|
|
274
|
+
await fn(request);
|
|
275
|
+
}
|
|
490
276
|
});
|
|
491
277
|
}
|
|
492
278
|
afterSaveHooks[className].push(callback);
|
|
493
279
|
}
|
|
494
280
|
exports.afterSaveHook = afterSaveHook;
|
|
495
|
-
|
|
281
|
+
const beforeDeleteHooks = {};
|
|
496
282
|
function beforeDeleteHook(target, callback) {
|
|
497
|
-
|
|
283
|
+
// @ts-ignore
|
|
284
|
+
const className = typeof target === "string" ? target : target.className;
|
|
498
285
|
if (!beforeDeleteHooks[className]) {
|
|
499
286
|
beforeDeleteHooks[className] = [];
|
|
500
|
-
Parse.Cloud.beforeDelete(className, function beforeDeleteHookFunction(request) {
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
switch (_b.label) {
|
|
505
|
-
case 0:
|
|
506
|
-
_i = 0, _a = beforeDeleteHooks[className];
|
|
507
|
-
_b.label = 1;
|
|
508
|
-
case 1:
|
|
509
|
-
if (!(_i < _a.length)) return [3 /*break*/, 4];
|
|
510
|
-
fn = _a[_i];
|
|
511
|
-
return [4 /*yield*/, fn(request)];
|
|
512
|
-
case 2:
|
|
513
|
-
_b.sent();
|
|
514
|
-
_b.label = 3;
|
|
515
|
-
case 3:
|
|
516
|
-
_i++;
|
|
517
|
-
return [3 /*break*/, 1];
|
|
518
|
-
case 4: return [2 /*return*/];
|
|
519
|
-
}
|
|
520
|
-
});
|
|
521
|
-
});
|
|
287
|
+
Parse.Cloud.beforeDelete(className, async function beforeDeleteHookFunction(request) {
|
|
288
|
+
for (const fn of beforeDeleteHooks[className]) {
|
|
289
|
+
await fn(request);
|
|
290
|
+
}
|
|
522
291
|
});
|
|
523
292
|
}
|
|
524
293
|
beforeDeleteHooks[className].push(callback);
|
|
525
294
|
}
|
|
526
295
|
exports.beforeDeleteHook = beforeDeleteHook;
|
|
527
|
-
|
|
296
|
+
const afterDeleteHooks = {};
|
|
528
297
|
function afterDeleteHook(target, callback) {
|
|
529
|
-
|
|
298
|
+
// @ts-ignore
|
|
299
|
+
const className = typeof target === "string" ? target : target.className;
|
|
530
300
|
if (!afterDeleteHooks[className]) {
|
|
531
301
|
afterDeleteHooks[className] = [];
|
|
532
|
-
Parse.Cloud.afterDelete(className, function afterDeleteHookFunction(request) {
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
switch (_b.label) {
|
|
537
|
-
case 0:
|
|
538
|
-
_i = 0, _a = afterDeleteHooks[className];
|
|
539
|
-
_b.label = 1;
|
|
540
|
-
case 1:
|
|
541
|
-
if (!(_i < _a.length)) return [3 /*break*/, 4];
|
|
542
|
-
fn = _a[_i];
|
|
543
|
-
return [4 /*yield*/, fn(request)];
|
|
544
|
-
case 2:
|
|
545
|
-
_b.sent();
|
|
546
|
-
_b.label = 3;
|
|
547
|
-
case 3:
|
|
548
|
-
_i++;
|
|
549
|
-
return [3 /*break*/, 1];
|
|
550
|
-
case 4: return [2 /*return*/];
|
|
551
|
-
}
|
|
552
|
-
});
|
|
553
|
-
});
|
|
302
|
+
Parse.Cloud.afterDelete(className, async function afterDeleteHookFunction(request) {
|
|
303
|
+
for (const fn of afterDeleteHooks[className]) {
|
|
304
|
+
await fn(request);
|
|
305
|
+
}
|
|
554
306
|
});
|
|
555
307
|
}
|
|
556
308
|
afterDeleteHooks[className].push(callback);
|