@oneuptime/common 10.2.2 → 10.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/Models/DatabaseModels/Index.ts +6 -0
  2. package/Models/DatabaseModels/StatusPage.ts +43 -0
  3. package/Models/DatabaseModels/StatusPageOidc.ts +689 -0
  4. package/Models/DatabaseModels/UserNotificationRule.ts +49 -0
  5. package/Models/DatabaseModels/UserNotificationSetting.ts +17 -0
  6. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +48 -0
  7. package/Models/DatabaseModels/UserWebhook.ts +290 -0
  8. package/Models/DatabaseModels/WebhookLog.ts +992 -0
  9. package/Server/API/StatusPageAPI.ts +78 -3
  10. package/Server/API/UserWebhookAPI.ts +159 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.ts +1 -1
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1778514515756-MigrationName.ts +259 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1778521361934-MigrationName.ts +17 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1778522070962-AddStatusPageOIDC.ts +63 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  16. package/Server/Services/Index.ts +2 -0
  17. package/Server/Services/ScheduledMaintenanceService.ts +34 -0
  18. package/Server/Services/StatusPageOidcService.ts +10 -0
  19. package/Server/Services/StatusPageSubscriberService.ts +101 -0
  20. package/Server/Services/UserNotificationRuleService.ts +213 -1
  21. package/Server/Services/UserNotificationSettingService.ts +95 -0
  22. package/Server/Services/UserWebhookService.ts +208 -0
  23. package/Server/Services/WebhookLogService.ts +15 -0
  24. package/Server/Services/WebhookService.ts +126 -0
  25. package/Server/Utils/StatusPageSubscriberWebhook.ts +39 -0
  26. package/Types/Permission.ts +58 -0
  27. package/Types/Webhook/WebhookMessage.ts +8 -0
  28. package/Types/WebhookStatus.ts +6 -0
  29. package/build/dist/Models/DatabaseModels/Index.js +6 -0
  30. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  31. package/build/dist/Models/DatabaseModels/StatusPage.js +45 -0
  32. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  33. package/build/dist/Models/DatabaseModels/StatusPageOidc.js +718 -0
  34. package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -0
  35. package/build/dist/Models/DatabaseModels/UserNotificationRule.js +49 -0
  36. package/build/dist/Models/DatabaseModels/UserNotificationRule.js.map +1 -1
  37. package/build/dist/Models/DatabaseModels/UserNotificationSetting.js +19 -0
  38. package/build/dist/Models/DatabaseModels/UserNotificationSetting.js.map +1 -1
  39. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +48 -0
  40. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  41. package/build/dist/Models/DatabaseModels/UserWebhook.js +307 -0
  42. package/build/dist/Models/DatabaseModels/UserWebhook.js.map +1 -0
  43. package/build/dist/Models/DatabaseModels/WebhookLog.js +1021 -0
  44. package/build/dist/Models/DatabaseModels/WebhookLog.js.map +1 -0
  45. package/build/dist/Server/API/StatusPageAPI.js +80 -35
  46. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  47. package/build/dist/Server/API/UserWebhookAPI.js +99 -0
  48. package/build/dist/Server/API/UserWebhookAPI.js.map +1 -0
  49. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.js.map +1 -1
  50. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778514515756-MigrationName.js +94 -0
  51. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778514515756-MigrationName.js.map +1 -0
  52. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778521361934-MigrationName.js +12 -0
  53. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778521361934-MigrationName.js.map +1 -0
  54. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778522070962-AddStatusPageOIDC.js +28 -0
  55. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778522070962-AddStatusPageOIDC.js.map +1 -0
  56. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  57. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  58. package/build/dist/Server/Services/Index.js +2 -0
  59. package/build/dist/Server/Services/Index.js.map +1 -1
  60. package/build/dist/Server/Services/ScheduledMaintenanceService.js +31 -2
  61. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  62. package/build/dist/Server/Services/StatusPageOidcService.js +9 -0
  63. package/build/dist/Server/Services/StatusPageOidcService.js.map +1 -0
  64. package/build/dist/Server/Services/StatusPageSubscriberService.js +99 -4
  65. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  66. package/build/dist/Server/Services/UserNotificationRuleService.js +178 -21
  67. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  68. package/build/dist/Server/Services/UserNotificationSettingService.js +84 -1
  69. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  70. package/build/dist/Server/Services/UserWebhookService.js +190 -0
  71. package/build/dist/Server/Services/UserWebhookService.js.map +1 -0
  72. package/build/dist/Server/Services/WebhookLogService.js +13 -0
  73. package/build/dist/Server/Services/WebhookLogService.js.map +1 -0
  74. package/build/dist/Server/Services/WebhookService.js +92 -0
  75. package/build/dist/Server/Services/WebhookService.js.map +1 -0
  76. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +19 -0
  77. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -0
  78. package/build/dist/Types/Permission.js +50 -0
  79. package/build/dist/Types/Permission.js.map +1 -1
  80. package/build/dist/Types/Webhook/WebhookMessage.js +2 -0
  81. package/build/dist/Types/Webhook/WebhookMessage.js.map +1 -0
  82. package/build/dist/Types/WebhookStatus.js +7 -0
  83. package/build/dist/Types/WebhookStatus.js.map +1 -0
  84. 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,19 @@
1
+ import API from "../../Utils/API";
2
+ import logger from "./Logger";
3
+ export default class StatusPageSubscriberWebhookUtil {
4
+ static async sendWebhookNotification(data) {
5
+ logger.debug("Sending status page subscriber webhook notification.");
6
+ const apiResult = await API.post({
7
+ url: data.webhookUrl,
8
+ data: data.payload,
9
+ options: {
10
+ retries: 3,
11
+ exponentialBackoff: true,
12
+ },
13
+ });
14
+ logger.debug("Status page subscriber webhook response:");
15
+ logger.debug(apiResult);
16
+ return apiResult;
17
+ }
18
+ }
19
+ //# sourceMappingURL=StatusPageSubscriberWebhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusPageSubscriberWebhook.js","sourceRoot":"","sources":["../../../../Server/Utils/StatusPageSubscriberWebhook.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAKlC,OAAO,MAAM,MAAM,UAAU,CAAC;AAW9B,MAAM,CAAC,OAAO,OAAO,+BAA+B;IAC3C,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAG3C;QACC,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAErE,MAAM,SAAS,GACb,MAAM,GAAG,CAAC,IAAI,CAAC;YACb,GAAG,EAAE,IAAI,CAAC,UAAU;YACpB,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,OAAO,EAAE;gBACP,OAAO,EAAE,CAAC;gBACV,kBAAkB,EAAE,IAAI;aACzB;SACF,CAAC,CAAC;QAEL,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAExB,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -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";
@@ -422,6 +423,10 @@ var Permission;
422
423
  Permission["DeleteStatusPageSSO"] = "DeleteStatusPageSSO";
423
424
  Permission["EditStatusPageSSO"] = "EditStatusPageSSO";
424
425
  Permission["ReadStatusPageSSO"] = "ReadStatusPageSSO";
426
+ Permission["CreateStatusPageOIDC"] = "CreateStatusPageOIDC";
427
+ Permission["DeleteStatusPageOIDC"] = "DeleteStatusPageOIDC";
428
+ Permission["EditStatusPageOIDC"] = "EditStatusPageOIDC";
429
+ Permission["ReadStatusPageOIDC"] = "ReadStatusPageOIDC";
425
430
  // Label Permissions (Owner + Admin Permission by default)
426
431
  Permission["CreateProjectLabel"] = "CreateProjectLabel";
427
432
  Permission["EditProjectLabel"] = "EditProjectLabel";
@@ -2598,6 +2603,42 @@ export class PermissionHelper {
2598
2603
  isRolePermission: false,
2599
2604
  group: PermissionGroup.StatusPage,
2600
2605
  },
2606
+ {
2607
+ permission: Permission.CreateStatusPageOIDC,
2608
+ title: "Create Status Page OIDC",
2609
+ description: "This permission can create Status Page OIDC in this project.",
2610
+ isAssignableToTenant: true,
2611
+ isAccessControlPermission: false,
2612
+ isRolePermission: false,
2613
+ group: PermissionGroup.StatusPage,
2614
+ },
2615
+ {
2616
+ permission: Permission.DeleteStatusPageOIDC,
2617
+ title: "Delete Status Page OIDC",
2618
+ description: "This permission can delete Status Page OIDC in this project.",
2619
+ isAssignableToTenant: true,
2620
+ isAccessControlPermission: false,
2621
+ isRolePermission: false,
2622
+ group: PermissionGroup.StatusPage,
2623
+ },
2624
+ {
2625
+ permission: Permission.EditStatusPageOIDC,
2626
+ title: "Edit Status Page OIDC",
2627
+ description: "This permission can edit Status Page OIDC in this project.",
2628
+ isAssignableToTenant: true,
2629
+ isAccessControlPermission: false,
2630
+ isRolePermission: false,
2631
+ group: PermissionGroup.StatusPage,
2632
+ },
2633
+ {
2634
+ permission: Permission.ReadStatusPageOIDC,
2635
+ title: "Read Status Page OIDC",
2636
+ description: "This permission can read Status Page OIDC in this project.",
2637
+ isAssignableToTenant: true,
2638
+ isAccessControlPermission: false,
2639
+ isRolePermission: false,
2640
+ group: PermissionGroup.StatusPage,
2641
+ },
2601
2642
  {
2602
2643
  permission: Permission.CreateProjectSMTPConfig,
2603
2644
  title: "Create SMTP Config",
@@ -4159,6 +4200,15 @@ export class PermissionHelper {
4159
4200
  isRolePermission: false,
4160
4201
  group: PermissionGroup.NotificationLog,
4161
4202
  },
4203
+ {
4204
+ permission: Permission.ReadWebhookLog,
4205
+ title: "Read Webhook Log",
4206
+ description: "This permission can read outbound Webhook request Logs of this project.",
4207
+ isAssignableToTenant: true,
4208
+ isAccessControlPermission: false,
4209
+ isRolePermission: false,
4210
+ group: PermissionGroup.NotificationLog,
4211
+ },
4162
4212
  {
4163
4213
  permission: Permission.ReadWorkspaceNotificationLog,
4164
4214
  title: "Read Workspace Notification Log",