@oneuptime/common 10.2.1 → 10.2.3
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/Models/DatabaseModels/Index.ts +6 -0
- package/Models/DatabaseModels/ProjectOidc.ts +705 -0
- package/Models/DatabaseModels/UserNotificationRule.ts +49 -0
- package/Models/DatabaseModels/UserNotificationSetting.ts +17 -0
- package/Models/DatabaseModels/UserOnCallLogTimeline.ts +48 -0
- package/Models/DatabaseModels/UserWebhook.ts +290 -0
- package/Models/DatabaseModels/WebhookLog.ts +992 -0
- package/Server/API/ProjectOIDC.ts +73 -0
- package/Server/API/UserWebhookAPI.ts +159 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1778514515756-MigrationName.ts +259 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +139 -26
- package/Server/Services/ProjectOidcService.ts +10 -0
- package/Server/Services/UserNotificationRuleService.ts +213 -1
- package/Server/Services/UserNotificationSettingService.ts +95 -0
- package/Server/Services/UserWebhookService.ts +208 -0
- package/Server/Services/WebhookLogService.ts +15 -0
- package/Server/Services/WebhookService.ts +126 -0
- package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +155 -0
- package/Types/Permission.ts +54 -0
- package/Types/Webhook/WebhookMessage.ts +8 -0
- package/Types/WebhookStatus.ts +6 -0
- package/UI/Components/Calendar/Calendar.css +257 -0
- package/UI/Components/Calendar/Calendar.tsx +22 -11
- package/build/dist/Models/DatabaseModels/Index.js +6 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOidc.js +727 -0
- package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationRule.js +49 -0
- package/build/dist/Models/DatabaseModels/UserNotificationRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationSetting.js +19 -0
- package/build/dist/Models/DatabaseModels/UserNotificationSetting.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +48 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebhook.js +307 -0
- package/build/dist/Models/DatabaseModels/UserWebhook.js.map +1 -0
- package/build/dist/Models/DatabaseModels/WebhookLog.js +1021 -0
- package/build/dist/Models/DatabaseModels/WebhookLog.js.map +1 -0
- package/build/dist/Server/API/ProjectOIDC.js +45 -0
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -0
- package/build/dist/Server/API/UserWebhookAPI.js +99 -0
- package/build/dist/Server/API/UserWebhookAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778514515756-MigrationName.js +94 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778514515756-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +106 -17
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/ProjectOidcService.js +9 -0
- package/build/dist/Server/Services/ProjectOidcService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js +178 -21
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +84 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserWebhookService.js +190 -0
- package/build/dist/Server/Services/UserWebhookService.js.map +1 -0
- package/build/dist/Server/Services/WebhookLogService.js +13 -0
- package/build/dist/Server/Services/WebhookLogService.js.map +1 -0
- package/build/dist/Server/Services/WebhookService.js +92 -0
- package/build/dist/Server/Services/WebhookService.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +86 -0
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -0
- package/build/dist/Types/Permission.js +50 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Webhook/WebhookMessage.js +2 -0
- package/build/dist/Types/Webhook/WebhookMessage.js.map +1 -0
- package/build/dist/Types/WebhookStatus.js +7 -0
- package/build/dist/Types/WebhookStatus.js.map +1 -0
- package/build/dist/UI/Components/Calendar/Calendar.js +12 -10
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import DatabaseService from "./DatabaseService";
|
|
11
|
+
import UserNotificationRuleService from "./UserNotificationRuleService";
|
|
12
|
+
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
13
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
14
|
+
import Model from "../../Models/DatabaseModels/UserWebhook";
|
|
15
|
+
import URL from "../../Types/API/URL";
|
|
16
|
+
import logger from "../Utils/Logger";
|
|
17
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
18
|
+
export class Service extends DatabaseService {
|
|
19
|
+
constructor() {
|
|
20
|
+
super(Model);
|
|
21
|
+
}
|
|
22
|
+
async onBeforeCreate(createBy) {
|
|
23
|
+
if (!createBy.data.webhookUrl) {
|
|
24
|
+
throw new BadDataException("Webhook URL is required");
|
|
25
|
+
}
|
|
26
|
+
if (!createBy.data.name) {
|
|
27
|
+
throw new BadDataException("Webhook name is required");
|
|
28
|
+
}
|
|
29
|
+
this.validateWebhookUrl(createBy.data.webhookUrl);
|
|
30
|
+
return {
|
|
31
|
+
createBy,
|
|
32
|
+
carryForward: null,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async onCreateSuccess(_onCreate, createdItem) {
|
|
36
|
+
/* Webhooks skip verification, so default on-call rules are seeded at create time. */
|
|
37
|
+
if (createdItem.projectId && createdItem.userId && createdItem.id) {
|
|
38
|
+
try {
|
|
39
|
+
await UserNotificationRuleService.addDefaultNotificationRulesForVerifiedMethod({
|
|
40
|
+
projectId: createdItem.projectId,
|
|
41
|
+
userId: createdItem.userId,
|
|
42
|
+
notificationMethod: {
|
|
43
|
+
userWebhookId: createdItem.id,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
logger.error(err);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return createdItem;
|
|
52
|
+
}
|
|
53
|
+
async onBeforeDelete(deleteBy) {
|
|
54
|
+
const itemsToDelete = await this.findBy({
|
|
55
|
+
query: deleteBy.query,
|
|
56
|
+
select: {
|
|
57
|
+
_id: true,
|
|
58
|
+
projectId: true,
|
|
59
|
+
},
|
|
60
|
+
skip: 0,
|
|
61
|
+
limit: LIMIT_MAX,
|
|
62
|
+
props: {
|
|
63
|
+
isRoot: true,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
for (const item of itemsToDelete) {
|
|
67
|
+
await UserNotificationRuleService.deleteBy({
|
|
68
|
+
query: {
|
|
69
|
+
userWebhookId: item.id,
|
|
70
|
+
projectId: item.projectId,
|
|
71
|
+
},
|
|
72
|
+
limit: LIMIT_MAX,
|
|
73
|
+
skip: 0,
|
|
74
|
+
props: {
|
|
75
|
+
isRoot: true,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
deleteBy,
|
|
81
|
+
carryForward: null,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
validateWebhookUrl(rawUrl) {
|
|
85
|
+
let parsed;
|
|
86
|
+
try {
|
|
87
|
+
parsed = URL.fromString(rawUrl);
|
|
88
|
+
}
|
|
89
|
+
catch (_a) {
|
|
90
|
+
throw new BadDataException("Webhook URL is not a valid URL");
|
|
91
|
+
}
|
|
92
|
+
const protocolValue = parsed.protocol.toString().toLowerCase();
|
|
93
|
+
if (protocolValue !== "http://" && protocolValue !== "https://") {
|
|
94
|
+
throw new BadDataException("Webhook URL must use http or https protocol.");
|
|
95
|
+
}
|
|
96
|
+
const hostname = parsed.hostname.hostname.toLowerCase();
|
|
97
|
+
if (!hostname) {
|
|
98
|
+
throw new BadDataException("Webhook URL must include a host.");
|
|
99
|
+
}
|
|
100
|
+
if (isBlockedHostnameLiteral(hostname)) {
|
|
101
|
+
throw new BadDataException("Webhook URL points to a private, loopback, or link-local address and is not allowed.");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
__decorate([
|
|
106
|
+
CaptureSpan(),
|
|
107
|
+
__metadata("design:type", Function),
|
|
108
|
+
__metadata("design:paramtypes", [Object]),
|
|
109
|
+
__metadata("design:returntype", Promise)
|
|
110
|
+
], Service.prototype, "onBeforeCreate", null);
|
|
111
|
+
__decorate([
|
|
112
|
+
CaptureSpan(),
|
|
113
|
+
__metadata("design:type", Function),
|
|
114
|
+
__metadata("design:paramtypes", [Object, Model]),
|
|
115
|
+
__metadata("design:returntype", Promise)
|
|
116
|
+
], Service.prototype, "onCreateSuccess", null);
|
|
117
|
+
__decorate([
|
|
118
|
+
CaptureSpan(),
|
|
119
|
+
__metadata("design:type", Function),
|
|
120
|
+
__metadata("design:paramtypes", [Object]),
|
|
121
|
+
__metadata("design:returntype", Promise)
|
|
122
|
+
], Service.prototype, "onBeforeDelete", null);
|
|
123
|
+
function isBlockedHostnameLiteral(hostname) {
|
|
124
|
+
if (hostname === "localhost" ||
|
|
125
|
+
hostname.endsWith(".localhost") ||
|
|
126
|
+
hostname === "metadata.google.internal") {
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
// IPv4 literal check
|
|
130
|
+
const ipv4Match = hostname.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
|
|
131
|
+
if (ipv4Match) {
|
|
132
|
+
const octets = [
|
|
133
|
+
Number(ipv4Match[1]),
|
|
134
|
+
Number(ipv4Match[2]),
|
|
135
|
+
Number(ipv4Match[3]),
|
|
136
|
+
Number(ipv4Match[4]),
|
|
137
|
+
];
|
|
138
|
+
if (octets.some((o) => {
|
|
139
|
+
return o < 0 || o > 255;
|
|
140
|
+
})) {
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
// 0.0.0.0/8
|
|
144
|
+
if (octets[0] === 0) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
// 127.0.0.0/8 loopback
|
|
148
|
+
if (octets[0] === 127) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
// 10.0.0.0/8
|
|
152
|
+
if (octets[0] === 10) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
// 172.16.0.0/12
|
|
156
|
+
if (octets[0] === 172 && (octets[1] & 0xf0) === 16) {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
// 192.168.0.0/16
|
|
160
|
+
if (octets[0] === 192 && octets[1] === 168) {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
// 169.254.0.0/16 link-local (incl. cloud metadata)
|
|
164
|
+
if (octets[0] === 169 && octets[1] === 254) {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
// 100.64.0.0/10 carrier-grade NAT
|
|
168
|
+
if (octets[0] === 100 && (octets[1] & 0xc0) === 64) {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
// IPv6 literal — block loopback, link-local, unique-local
|
|
174
|
+
if (hostname.includes(":")) {
|
|
175
|
+
const stripped = hostname.replace(/^\[|\]$/g, "");
|
|
176
|
+
if (stripped === "::1" || stripped === "::") {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
if (stripped.startsWith("fe80:") || stripped.startsWith("fe80::")) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
if (IPV6_UNIQUE_LOCAL_REGEX.test(stripped)) {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
const IPV6_UNIQUE_LOCAL_REGEX = /^f[cd][0-9a-f]{2}:/;
|
|
189
|
+
export default new Service();
|
|
190
|
+
//# sourceMappingURL=UserWebhookService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserWebhookService.js","sourceRoot":"","sources":["../../../../Server/Services/UserWebhookService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
2
|
+
import DatabaseService from "./DatabaseService";
|
|
3
|
+
import Model from "../../Models/DatabaseModels/WebhookLog";
|
|
4
|
+
export class Service extends DatabaseService {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(Model);
|
|
7
|
+
if (IsBillingEnabled) {
|
|
8
|
+
this.hardDeleteItemsOlderThanInDays("createdAt", 3);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export default new Service();
|
|
13
|
+
//# sourceMappingURL=WebhookLogService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebhookLogService.js","sourceRoot":"","sources":["../../../../Server/Services/WebhookLogService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,wCAAwC,CAAC;AAE3D,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;QAEb,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { AppApiHostname } from "../EnvironmentConfig";
|
|
11
|
+
import ClusterKeyAuthorization from "../Middleware/ClusterKeyAuthorization";
|
|
12
|
+
import BaseService from "./BaseService";
|
|
13
|
+
import Protocol from "../../Types/API/Protocol";
|
|
14
|
+
import Route from "../../Types/API/Route";
|
|
15
|
+
import URL from "../../Types/API/URL";
|
|
16
|
+
import API from "../../Utils/API";
|
|
17
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
18
|
+
export class WebhookService extends BaseService {
|
|
19
|
+
constructor() {
|
|
20
|
+
super();
|
|
21
|
+
}
|
|
22
|
+
async sendWebhook(message, options = {}) {
|
|
23
|
+
const body = {
|
|
24
|
+
url: message.url,
|
|
25
|
+
eventType: message.eventType,
|
|
26
|
+
payload: message.payload,
|
|
27
|
+
};
|
|
28
|
+
if (message.secret) {
|
|
29
|
+
body["secret"] = message.secret;
|
|
30
|
+
}
|
|
31
|
+
if (options.projectId) {
|
|
32
|
+
body["projectId"] = options.projectId.toString();
|
|
33
|
+
}
|
|
34
|
+
if (options.userOnCallLogTimelineId) {
|
|
35
|
+
body["userOnCallLogTimelineId"] =
|
|
36
|
+
options.userOnCallLogTimelineId.toString();
|
|
37
|
+
}
|
|
38
|
+
if (options.incidentId) {
|
|
39
|
+
body["incidentId"] = options.incidentId.toString();
|
|
40
|
+
}
|
|
41
|
+
if (options.alertId) {
|
|
42
|
+
body["alertId"] = options.alertId.toString();
|
|
43
|
+
}
|
|
44
|
+
if (options.monitorId) {
|
|
45
|
+
body["monitorId"] = options.monitorId.toString();
|
|
46
|
+
}
|
|
47
|
+
if (options.scheduledMaintenanceId) {
|
|
48
|
+
body["scheduledMaintenanceId"] =
|
|
49
|
+
options.scheduledMaintenanceId.toString();
|
|
50
|
+
}
|
|
51
|
+
if (options.statusPageId) {
|
|
52
|
+
body["statusPageId"] = options.statusPageId.toString();
|
|
53
|
+
}
|
|
54
|
+
if (options.statusPageAnnouncementId) {
|
|
55
|
+
body["statusPageAnnouncementId"] =
|
|
56
|
+
options.statusPageAnnouncementId.toString();
|
|
57
|
+
}
|
|
58
|
+
if (options.userId) {
|
|
59
|
+
body["userId"] = options.userId.toString();
|
|
60
|
+
}
|
|
61
|
+
if (options.onCallPolicyId) {
|
|
62
|
+
body["onCallPolicyId"] = options.onCallPolicyId.toString();
|
|
63
|
+
}
|
|
64
|
+
if (options.onCallPolicyEscalationRuleId) {
|
|
65
|
+
body["onCallPolicyEscalationRuleId"] =
|
|
66
|
+
options.onCallPolicyEscalationRuleId.toString();
|
|
67
|
+
}
|
|
68
|
+
if (options.onCallDutyPolicyExecutionLogTimelineId) {
|
|
69
|
+
body["onCallDutyPolicyExecutionLogTimelineId"] =
|
|
70
|
+
options.onCallDutyPolicyExecutionLogTimelineId.toString();
|
|
71
|
+
}
|
|
72
|
+
if (options.onCallScheduleId) {
|
|
73
|
+
body["onCallScheduleId"] = options.onCallScheduleId.toString();
|
|
74
|
+
}
|
|
75
|
+
if (options.teamId) {
|
|
76
|
+
body["teamId"] = options.teamId.toString();
|
|
77
|
+
}
|
|
78
|
+
return await API.post({
|
|
79
|
+
url: new URL(Protocol.HTTP, AppApiHostname, new Route("/api/notification/webhook/send")),
|
|
80
|
+
data: body,
|
|
81
|
+
headers: Object.assign({}, ClusterKeyAuthorization.getClusterKeyHeaders()),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
__decorate([
|
|
86
|
+
CaptureSpan(),
|
|
87
|
+
__metadata("design:type", Function),
|
|
88
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
89
|
+
__metadata("design:returntype", Promise)
|
|
90
|
+
], WebhookService.prototype, "sendWebhook", null);
|
|
91
|
+
export default new WebhookService();
|
|
92
|
+
//# sourceMappingURL=WebhookService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebhookService.js","sourceRoot":"","sources":["../../../../Server/Services/WebhookService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import OneUptimeDate from "../Date";
|
|
2
|
+
/*
|
|
3
|
+
* CalendarEvent extends JSONObject so it accepts string-indexed metadata.
|
|
4
|
+
* We attach the override info under a known key so downstream consumers can
|
|
5
|
+
* detect and render the substitution distinctly.
|
|
6
|
+
*/
|
|
7
|
+
export const OVERRIDE_META_KEY = "_override";
|
|
8
|
+
export default class UserOverrideUtil {
|
|
9
|
+
/**
|
|
10
|
+
* Returns true when this override should be applied on top of the schedule
|
|
11
|
+
* events. Global overrides always apply; policy-scoped overrides apply to
|
|
12
|
+
* any schedule, since a schedule's calendar shows coverage information for
|
|
13
|
+
* every user who could potentially be paged through it.
|
|
14
|
+
*/
|
|
15
|
+
static isOverrideApplicable(_override) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
static applyOverridesToEvents(data) {
|
|
19
|
+
const applicable = data.overrides.filter(UserOverrideUtil.isOverrideApplicable);
|
|
20
|
+
if (applicable.length === 0) {
|
|
21
|
+
return data.events;
|
|
22
|
+
}
|
|
23
|
+
let working = data.events;
|
|
24
|
+
for (const override of applicable) {
|
|
25
|
+
const next = [];
|
|
26
|
+
for (const event of working) {
|
|
27
|
+
next.push(...UserOverrideUtil.splitEventByOverride(event, override));
|
|
28
|
+
}
|
|
29
|
+
working = next;
|
|
30
|
+
}
|
|
31
|
+
return UserOverrideUtil.reassignEventIds(working);
|
|
32
|
+
}
|
|
33
|
+
static splitEventByOverride(event, override) {
|
|
34
|
+
if (event.title !== override.overrideUserId) {
|
|
35
|
+
return [event];
|
|
36
|
+
}
|
|
37
|
+
// Override window doesn't overlap event window at all.
|
|
38
|
+
if (OneUptimeDate.isAfter(override.startsAt, event.end) ||
|
|
39
|
+
OneUptimeDate.isSame(override.startsAt, event.end) ||
|
|
40
|
+
OneUptimeDate.isBefore(override.endsAt, event.start) ||
|
|
41
|
+
OneUptimeDate.isSame(override.endsAt, event.start)) {
|
|
42
|
+
return [event];
|
|
43
|
+
}
|
|
44
|
+
const overrideStart = OneUptimeDate.isAfter(override.startsAt, event.start)
|
|
45
|
+
? override.startsAt
|
|
46
|
+
: event.start;
|
|
47
|
+
const overrideEnd = OneUptimeDate.isBefore(override.endsAt, event.end)
|
|
48
|
+
? override.endsAt
|
|
49
|
+
: event.end;
|
|
50
|
+
const segments = [];
|
|
51
|
+
// Segment before the override window — original user remains on call.
|
|
52
|
+
if (OneUptimeDate.isBefore(event.start, overrideStart)) {
|
|
53
|
+
segments.push(Object.assign(Object.assign({}, event), { end: overrideStart }));
|
|
54
|
+
}
|
|
55
|
+
// Override window — substitute user takes over.
|
|
56
|
+
const meta = {
|
|
57
|
+
isOverride: true,
|
|
58
|
+
originalUserId: override.overrideUserId,
|
|
59
|
+
overrideUserId: override.routeAlertsToUserId,
|
|
60
|
+
overrideStartsAt: override.startsAt,
|
|
61
|
+
overrideEndsAt: override.endsAt,
|
|
62
|
+
};
|
|
63
|
+
segments.push(Object.assign(Object.assign({}, event), { start: overrideStart, end: overrideEnd, title: override.routeAlertsToUserId, [OVERRIDE_META_KEY]: meta }));
|
|
64
|
+
// Segment after the override window — original user resumes.
|
|
65
|
+
if (OneUptimeDate.isAfter(event.end, overrideEnd)) {
|
|
66
|
+
segments.push(Object.assign(Object.assign({}, event), { start: overrideEnd }));
|
|
67
|
+
}
|
|
68
|
+
return segments;
|
|
69
|
+
}
|
|
70
|
+
static reassignEventIds(events) {
|
|
71
|
+
let id = 1;
|
|
72
|
+
return events.map((event) => {
|
|
73
|
+
return Object.assign(Object.assign({}, event), { id: id++ });
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
static getOverrideMeta(event) {
|
|
77
|
+
const meta = event[OVERRIDE_META_KEY];
|
|
78
|
+
if (meta &&
|
|
79
|
+
typeof meta === "object" &&
|
|
80
|
+
meta.isOverride === true) {
|
|
81
|
+
return meta;
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=UserOverrideUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOverrideUtil.js","sourceRoot":"","sources":["../../../../Types/OnCallDutyPolicy/UserOverrideUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -214,6 +214,7 @@ var Permission;
|
|
|
214
214
|
Permission["ReadEmailLog"] = "ReadEmailLog";
|
|
215
215
|
Permission["ReadCallLog"] = "ReadCallLog";
|
|
216
216
|
Permission["ReadPushLog"] = "ReadPushLog";
|
|
217
|
+
Permission["ReadWebhookLog"] = "ReadWebhookLog";
|
|
217
218
|
Permission["ReadWorkspaceNotificationLog"] = "ReadWorkspaceNotificationLog";
|
|
218
219
|
Permission["ReadLlmLog"] = "ReadLlmLog";
|
|
219
220
|
Permission["ReadProjectSCIMLog"] = "ReadProjectSCIMLog";
|
|
@@ -414,6 +415,10 @@ var Permission;
|
|
|
414
415
|
Permission["DeleteProjectSSO"] = "DeleteProjectSSO";
|
|
415
416
|
Permission["EditProjectSSO"] = "EditProjectSSO";
|
|
416
417
|
Permission["ReadProjectSSO"] = "ReadProjectSSO";
|
|
418
|
+
Permission["CreateProjectOIDC"] = "CreateProjectOIDC";
|
|
419
|
+
Permission["DeleteProjectOIDC"] = "DeleteProjectOIDC";
|
|
420
|
+
Permission["EditProjectOIDC"] = "EditProjectOIDC";
|
|
421
|
+
Permission["ReadProjectOIDC"] = "ReadProjectOIDC";
|
|
417
422
|
Permission["CreateStatusPageSSO"] = "CreateStatusPageSSO";
|
|
418
423
|
Permission["DeleteStatusPageSSO"] = "DeleteStatusPageSSO";
|
|
419
424
|
Permission["EditStatusPageSSO"] = "EditStatusPageSSO";
|
|
@@ -2522,6 +2527,42 @@ export class PermissionHelper {
|
|
|
2522
2527
|
isRolePermission: false,
|
|
2523
2528
|
group: PermissionGroup.Settings,
|
|
2524
2529
|
},
|
|
2530
|
+
{
|
|
2531
|
+
permission: Permission.CreateProjectOIDC,
|
|
2532
|
+
title: "Create Project OIDC",
|
|
2533
|
+
description: "This permission can create Project OIDC in this project.",
|
|
2534
|
+
isAssignableToTenant: true,
|
|
2535
|
+
isAccessControlPermission: false,
|
|
2536
|
+
isRolePermission: false,
|
|
2537
|
+
group: PermissionGroup.Settings,
|
|
2538
|
+
},
|
|
2539
|
+
{
|
|
2540
|
+
permission: Permission.DeleteProjectOIDC,
|
|
2541
|
+
title: "Delete Project OIDC",
|
|
2542
|
+
description: "This permission can delete Project OIDC in this project.",
|
|
2543
|
+
isAssignableToTenant: true,
|
|
2544
|
+
isAccessControlPermission: false,
|
|
2545
|
+
isRolePermission: false,
|
|
2546
|
+
group: PermissionGroup.Settings,
|
|
2547
|
+
},
|
|
2548
|
+
{
|
|
2549
|
+
permission: Permission.EditProjectOIDC,
|
|
2550
|
+
title: "Edit Project OIDC",
|
|
2551
|
+
description: "This permission can edit Project OIDC in this project.",
|
|
2552
|
+
isAssignableToTenant: true,
|
|
2553
|
+
isAccessControlPermission: false,
|
|
2554
|
+
isRolePermission: false,
|
|
2555
|
+
group: PermissionGroup.Settings,
|
|
2556
|
+
},
|
|
2557
|
+
{
|
|
2558
|
+
permission: Permission.ReadProjectOIDC,
|
|
2559
|
+
title: "Read Project OIDC",
|
|
2560
|
+
description: "This permission can read Project OIDC in this project.",
|
|
2561
|
+
isAssignableToTenant: true,
|
|
2562
|
+
isAccessControlPermission: false,
|
|
2563
|
+
isRolePermission: false,
|
|
2564
|
+
group: PermissionGroup.Settings,
|
|
2565
|
+
},
|
|
2525
2566
|
{
|
|
2526
2567
|
permission: Permission.CreateStatusPageSSO,
|
|
2527
2568
|
title: "Create Status Page SSO",
|
|
@@ -4119,6 +4160,15 @@ export class PermissionHelper {
|
|
|
4119
4160
|
isRolePermission: false,
|
|
4120
4161
|
group: PermissionGroup.NotificationLog,
|
|
4121
4162
|
},
|
|
4163
|
+
{
|
|
4164
|
+
permission: Permission.ReadWebhookLog,
|
|
4165
|
+
title: "Read Webhook Log",
|
|
4166
|
+
description: "This permission can read outbound Webhook request Logs of this project.",
|
|
4167
|
+
isAssignableToTenant: true,
|
|
4168
|
+
isAccessControlPermission: false,
|
|
4169
|
+
isRolePermission: false,
|
|
4170
|
+
group: PermissionGroup.NotificationLog,
|
|
4171
|
+
},
|
|
4122
4172
|
{
|
|
4123
4173
|
permission: Permission.ReadWorkspaceNotificationLog,
|
|
4124
4174
|
title: "Read Workspace Notification Log",
|