@openinc/parse-server-opendash 1.10.2 → 1.11.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/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 -96
- 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 +18 -0
- package/dist/hooks/Knowledge_DocumentPage.d.ts +1 -0
- package/dist/hooks/Knowledge_DocumentPage.js +18 -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 +241 -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 +2 -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,113 @@
|
|
|
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
|
-
|
|
64
|
-
|
|
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 config = await Parse.Config.get();
|
|
22
|
+
exports.PREFIX = config.get("OPENDASH_CLASS_PREFIX") || exports.PREFIX;
|
|
23
|
+
const schemaConfig = await (0, parse_server_schema_1.loadConfig)(cfg.configPath);
|
|
24
|
+
try {
|
|
25
|
+
await (0, parse_server_schema_1.up)(schemaConfig, (0, path_1.resolve)(__dirname, "../schema"), {
|
|
26
|
+
prefix: exports.PREFIX,
|
|
27
|
+
deleteClasses: false,
|
|
28
|
+
deleteFields: false,
|
|
105
29
|
});
|
|
106
|
-
}
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error("Error while updating schema");
|
|
33
|
+
console.error(error);
|
|
34
|
+
}
|
|
35
|
+
schema = Object.fromEntries((await Parse.Schema.all()).map((schema) => [schema.className, schema]));
|
|
36
|
+
await initDefaultRoles();
|
|
37
|
+
await initWebPush();
|
|
38
|
+
await (0, _init_1.init)();
|
|
39
|
+
await (0, _init_2.init)();
|
|
107
40
|
}
|
|
108
41
|
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
|
-
}
|
|
42
|
+
async function initDefaultRoles() {
|
|
43
|
+
try {
|
|
44
|
+
await ensureRole("Admin");
|
|
45
|
+
await ensureRole("od-user");
|
|
46
|
+
await ensureRole("od-admin", {
|
|
47
|
+
childRoles: ["Admin"],
|
|
146
48
|
});
|
|
147
|
-
|
|
49
|
+
await ensureRole("od-tenant-user");
|
|
50
|
+
await ensureRole("od-tenant-verified");
|
|
51
|
+
await ensureRole("od-tenant-global-visible");
|
|
52
|
+
await ensureRole("od-tenant-admin");
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error(error);
|
|
56
|
+
}
|
|
148
57
|
}
|
|
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
|
-
});
|
|
58
|
+
async function initWebPush() {
|
|
59
|
+
try {
|
|
60
|
+
if (!(await getConfigBoolean("WEB_PUSH_ENABLED"))) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
web_push_1.default.setVapidDetails((await getConfig("WEB_PUSH_HOST")), (await getConfig("WEB_PUSH_VAPID_PUBLIC_KEY")), (await getConfig("WEB_PUSH_VAPID_PRIVATE_KEY")));
|
|
64
|
+
web_push_1.default.setGCMAPIKey((await getConfig("WEB_PUSH_FCM_KEY")));
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error(error);
|
|
68
|
+
}
|
|
184
69
|
}
|
|
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
|
-
});
|
|
70
|
+
async function hasPermission(sessionToken, key) {
|
|
71
|
+
const result = await new Parse.Query(`${exports.PREFIX}Permission`)
|
|
72
|
+
.equalTo("key", key)
|
|
73
|
+
.first({ sessionToken });
|
|
74
|
+
return !!result;
|
|
199
75
|
}
|
|
200
76
|
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
|
-
});
|
|
77
|
+
async function requirePermission(request, key, message) {
|
|
78
|
+
if (request.master) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (!key) {
|
|
82
|
+
throw new Parse.Error(119, "Missing Permission: " + (message || key || "Master Key Only"));
|
|
83
|
+
}
|
|
84
|
+
const sessionToken = request.user?.getSessionToken();
|
|
85
|
+
if (!sessionToken) {
|
|
86
|
+
throw new Parse.Error(119, "Missing Permission: " + (message || key || "Master Key Only"));
|
|
87
|
+
}
|
|
88
|
+
const p = await hasPermission(sessionToken, key);
|
|
89
|
+
if (!p) {
|
|
90
|
+
throw new Parse.Error(119, "Missing Permission: " + (message || key || "Master Key Only"));
|
|
91
|
+
}
|
|
228
92
|
}
|
|
229
93
|
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
|
-
});
|
|
94
|
+
async function getConfig(key) {
|
|
95
|
+
const result = await new Parse.Query(`${exports.PREFIX}Config`)
|
|
96
|
+
.equalTo("key", key)
|
|
97
|
+
.first({
|
|
98
|
+
useMasterKey: true,
|
|
247
99
|
});
|
|
100
|
+
const value = result?.get("value");
|
|
101
|
+
console.log("[@openinc/parse-server-opendash][Config]", key, value);
|
|
102
|
+
return value || "";
|
|
248
103
|
}
|
|
249
104
|
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
|
-
});
|
|
105
|
+
async function getConfigBoolean(key) {
|
|
106
|
+
const value = await getConfig(key);
|
|
107
|
+
if (!value || value.toLowerCase() === "false" || value === "0") {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
return true;
|
|
265
111
|
}
|
|
266
112
|
exports.getConfigBoolean = getConfigBoolean;
|
|
267
113
|
function getEnv(key) {
|
|
@@ -269,288 +115,196 @@ function getEnv(key) {
|
|
|
269
115
|
}
|
|
270
116
|
exports.getEnv = getEnv;
|
|
271
117
|
function getEnvBoolean(key) {
|
|
272
|
-
|
|
118
|
+
const value = getEnv(key);
|
|
273
119
|
if (!value || value.toLowerCase() === "false" || value === "0") {
|
|
274
120
|
return false;
|
|
275
121
|
}
|
|
276
122
|
return true;
|
|
277
123
|
}
|
|
278
124
|
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
|
-
}
|
|
125
|
+
async function ensureRole(name, options) {
|
|
126
|
+
const label = options?.label || undefined;
|
|
127
|
+
const acl = options?.acl || new Parse.ACL();
|
|
128
|
+
const childRoles = options?.childRoles || undefined;
|
|
129
|
+
console.log(`[@openinc/parse-server-opendash] ensureRole(${name})`, JSON.stringify({ label, acl, childRoles }, null, 2));
|
|
130
|
+
let role = await new Parse.Query(Parse.Role)
|
|
131
|
+
.equalTo("name", name)
|
|
132
|
+
.first({ useMasterKey: true });
|
|
133
|
+
if (!role) {
|
|
134
|
+
role = new Parse.Role(name, acl);
|
|
135
|
+
role.set("label", label);
|
|
136
|
+
await role.save(null, {
|
|
137
|
+
useMasterKey: true,
|
|
351
138
|
});
|
|
352
|
-
}
|
|
139
|
+
}
|
|
140
|
+
let changed = false;
|
|
141
|
+
if (role.get("label") !== label) {
|
|
142
|
+
role.set("label", label);
|
|
143
|
+
changed = true;
|
|
144
|
+
}
|
|
145
|
+
if (!(0, fast_deep_equal_1.default)(acl.toJSON(), role.getACL()?.toJSON())) {
|
|
146
|
+
role.setACL(acl);
|
|
147
|
+
changed = true;
|
|
148
|
+
}
|
|
149
|
+
if (Array.isArray(childRoles) && childRoles.length > 0) {
|
|
150
|
+
const relation = role.getRoles();
|
|
151
|
+
const currentChildRoles = await relation
|
|
152
|
+
.query()
|
|
153
|
+
.find({ useMasterKey: true });
|
|
154
|
+
const currentChildRoleNames = currentChildRoles.map((role) => role.get("name"));
|
|
155
|
+
for (const childRoleName of childRoles) {
|
|
156
|
+
if (currentChildRoleNames.includes(childRoleName)) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const childRole = await new Parse.Query(Parse.Role)
|
|
160
|
+
.equalTo("name", childRoleName)
|
|
161
|
+
.find({ useMasterKey: true });
|
|
162
|
+
relation.add(childRole);
|
|
163
|
+
changed = true;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (changed) {
|
|
167
|
+
await role.save(null, { useMasterKey: true });
|
|
168
|
+
}
|
|
353
169
|
}
|
|
354
170
|
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
|
-
});
|
|
171
|
+
async function immutableField(request, fieldName, permissionName = "parse:edit-immutable-fields") {
|
|
172
|
+
if (!request.original || request.master) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const previousValue = JSON.stringify(request.original.get(fieldName));
|
|
176
|
+
const nextValue = JSON.stringify(request.object.get(fieldName));
|
|
177
|
+
if ((0, fast_deep_equal_1.default)(previousValue, nextValue)) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
await requirePermission(request, permissionName, `You are not allowed to edit the '${fieldName}' field.`);
|
|
377
181
|
}
|
|
378
182
|
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
|
-
});
|
|
183
|
+
async function defaultHandler(request) {
|
|
184
|
+
const className = request.object.className;
|
|
185
|
+
if (request.master) {
|
|
186
|
+
console.log(`[@openinc/parse-server-opendash] Skipping default beforeSave() handler of ${className} for masterkey`);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (!request.user) {
|
|
190
|
+
throw new Error();
|
|
191
|
+
}
|
|
192
|
+
const currentSchema = schema[className];
|
|
193
|
+
if (!currentSchema) {
|
|
194
|
+
console.warn(`[@openinc/parse-server-opendash] Skipping default beforeSave() handler, no schema found for ${className}`);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const userField = !!currentSchema?.fields?.user;
|
|
198
|
+
const tenantField = !!currentSchema?.fields?.tenant;
|
|
199
|
+
if (userField) {
|
|
200
|
+
await immutableField(request, "user");
|
|
201
|
+
}
|
|
202
|
+
if (tenantField) {
|
|
203
|
+
await immutableField(request, "tenant");
|
|
204
|
+
}
|
|
205
|
+
if (!request.original) {
|
|
206
|
+
if (userField) {
|
|
207
|
+
request.object.set("user", request.user);
|
|
208
|
+
}
|
|
209
|
+
if (tenantField) {
|
|
210
|
+
const user = (await request.user?.fetch({
|
|
211
|
+
useMasterKey: true,
|
|
212
|
+
}));
|
|
213
|
+
request.object.set("tenant", user.get("tenant"));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
429
216
|
}
|
|
430
217
|
exports.defaultHandler = defaultHandler;
|
|
431
|
-
|
|
218
|
+
async function defaultAclHandler(request, options) {
|
|
219
|
+
const className = request.object.className;
|
|
220
|
+
const currentSchema = schema[className];
|
|
221
|
+
if (!currentSchema) {
|
|
222
|
+
console.warn(`[@openinc/parse-server-opendash] Skipping default beforeSave() ACL handler, no schema found for ${className}`);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const userField = !!currentSchema?.fields?.user;
|
|
226
|
+
const tenantField = !!currentSchema?.fields?.tenant;
|
|
227
|
+
if (!options?.allowCustomACL || !request.object.getACL()) {
|
|
228
|
+
request.object.setACL(new Parse.ACL());
|
|
229
|
+
}
|
|
230
|
+
const acl = request.object.getACL();
|
|
231
|
+
acl.setRoleReadAccess("od-admin", true);
|
|
232
|
+
acl.setRoleWriteAccess("od-admin", true);
|
|
233
|
+
if (userField) {
|
|
234
|
+
const user = request.object.get("user");
|
|
235
|
+
if (user) {
|
|
236
|
+
acl.setReadAccess(user.id, true);
|
|
237
|
+
acl.setWriteAccess(user.id, true);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (tenantField) {
|
|
241
|
+
const tenant = request.object.get("tenant");
|
|
242
|
+
if (tenant) {
|
|
243
|
+
acl.setRoleReadAccess(`od-tenant-user-${tenant.id}`, true);
|
|
244
|
+
if (options?.allowTenantUserWrite) {
|
|
245
|
+
acl.setRoleWriteAccess(`od-tenant-user-${tenant.id}`, true);
|
|
246
|
+
}
|
|
247
|
+
acl.setRoleReadAccess(`od-tenant-admin-${tenant.id}`, true);
|
|
248
|
+
acl.setRoleWriteAccess(`od-tenant-admin-${tenant.id}`, true);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.defaultAclHandler = defaultAclHandler;
|
|
253
|
+
const beforeSaveHooks = {};
|
|
432
254
|
function beforeSaveHook(target, callback) {
|
|
433
|
-
|
|
255
|
+
// @ts-ignore
|
|
256
|
+
const className = typeof target === "string" ? target : target.className;
|
|
434
257
|
if (!beforeSaveHooks[className]) {
|
|
435
258
|
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
|
-
});
|
|
259
|
+
Parse.Cloud.beforeSave(className, async function beforeSaveHookFunction(request) {
|
|
260
|
+
for (const fn of beforeSaveHooks[className]) {
|
|
261
|
+
await fn(request);
|
|
262
|
+
}
|
|
458
263
|
});
|
|
459
264
|
}
|
|
460
265
|
beforeSaveHooks[className].push(callback);
|
|
461
266
|
}
|
|
462
267
|
exports.beforeSaveHook = beforeSaveHook;
|
|
463
|
-
|
|
268
|
+
const afterSaveHooks = {};
|
|
464
269
|
function afterSaveHook(target, callback) {
|
|
465
|
-
|
|
270
|
+
// @ts-ignore
|
|
271
|
+
const className = typeof target === "string" ? target : target.className;
|
|
466
272
|
if (!afterSaveHooks[className]) {
|
|
467
273
|
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
|
-
});
|
|
274
|
+
Parse.Cloud.afterSave(className, async function afterSaveHookFunction(request) {
|
|
275
|
+
for (const fn of afterSaveHooks[className]) {
|
|
276
|
+
await fn(request);
|
|
277
|
+
}
|
|
490
278
|
});
|
|
491
279
|
}
|
|
492
280
|
afterSaveHooks[className].push(callback);
|
|
493
281
|
}
|
|
494
282
|
exports.afterSaveHook = afterSaveHook;
|
|
495
|
-
|
|
283
|
+
const beforeDeleteHooks = {};
|
|
496
284
|
function beforeDeleteHook(target, callback) {
|
|
497
|
-
|
|
285
|
+
// @ts-ignore
|
|
286
|
+
const className = typeof target === "string" ? target : target.className;
|
|
498
287
|
if (!beforeDeleteHooks[className]) {
|
|
499
288
|
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
|
-
});
|
|
289
|
+
Parse.Cloud.beforeDelete(className, async function beforeDeleteHookFunction(request) {
|
|
290
|
+
for (const fn of beforeDeleteHooks[className]) {
|
|
291
|
+
await fn(request);
|
|
292
|
+
}
|
|
522
293
|
});
|
|
523
294
|
}
|
|
524
295
|
beforeDeleteHooks[className].push(callback);
|
|
525
296
|
}
|
|
526
297
|
exports.beforeDeleteHook = beforeDeleteHook;
|
|
527
|
-
|
|
298
|
+
const afterDeleteHooks = {};
|
|
528
299
|
function afterDeleteHook(target, callback) {
|
|
529
|
-
|
|
300
|
+
// @ts-ignore
|
|
301
|
+
const className = typeof target === "string" ? target : target.className;
|
|
530
302
|
if (!afterDeleteHooks[className]) {
|
|
531
303
|
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
|
-
});
|
|
304
|
+
Parse.Cloud.afterDelete(className, async function afterDeleteHookFunction(request) {
|
|
305
|
+
for (const fn of afterDeleteHooks[className]) {
|
|
306
|
+
await fn(request);
|
|
307
|
+
}
|
|
554
308
|
});
|
|
555
309
|
}
|
|
556
310
|
afterDeleteHooks[className].push(callback);
|