@oneuptime/common 11.3.20 → 11.3.22

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 (212) hide show
  1. package/Models/AnalyticsModels/AnalyticsBaseModel/CommonModel.ts +2 -0
  2. package/Models/AnalyticsModels/ExceptionInstance.ts +1 -0
  3. package/Models/AnalyticsModels/Log.ts +1 -0
  4. package/Models/AnalyticsModels/Metric.ts +1 -0
  5. package/Models/AnalyticsModels/MonitorLog.ts +1 -0
  6. package/Models/AnalyticsModels/Span.ts +1 -0
  7. package/Models/DatabaseModels/Alert.ts +100 -0
  8. package/Models/DatabaseModels/AlertInternalNote.ts +2 -0
  9. package/Models/DatabaseModels/AlertReminderRule.ts +597 -0
  10. package/Models/DatabaseModels/AlertSeverity.ts +2 -0
  11. package/Models/DatabaseModels/AlertState.ts +2 -0
  12. package/Models/DatabaseModels/AlertStateTimeline.ts +2 -0
  13. package/Models/DatabaseModels/EnterpriseLicenseInstance.ts +173 -0
  14. package/Models/DatabaseModels/GlobalConfig.ts +19 -0
  15. package/Models/DatabaseModels/Incident.ts +100 -0
  16. package/Models/DatabaseModels/IncidentInternalNote.ts +2 -0
  17. package/Models/DatabaseModels/IncidentPublicNote.ts +2 -0
  18. package/Models/DatabaseModels/IncidentReminderRule.ts +597 -0
  19. package/Models/DatabaseModels/IncidentSeverity.ts +2 -0
  20. package/Models/DatabaseModels/IncidentStateTimeline.ts +2 -0
  21. package/Models/DatabaseModels/Index.ts +8 -0
  22. package/Models/DatabaseModels/Label.ts +2 -0
  23. package/Models/DatabaseModels/MonitorStatusTimeline.ts +2 -0
  24. package/Models/DatabaseModels/ScheduledMaintenance.ts +100 -0
  25. package/Models/DatabaseModels/ScheduledMaintenanceReminderRule.ts +585 -0
  26. package/Models/DatabaseModels/ScheduledMaintenanceState.ts +2 -0
  27. package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +2 -0
  28. package/Models/DatabaseModels/StatusPageAnnouncement.ts +2 -0
  29. package/Server/API/DashboardAPI.ts +221 -0
  30. package/Server/API/EnterpriseLicenseAPI.ts +279 -12
  31. package/Server/API/GlobalConfigAPI.ts +81 -16
  32. package/Server/API/StatusPageAPI.ts +894 -791
  33. package/Server/EnvironmentConfig.ts +9 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1783226868418-AddEnterpriseLicenseInstance.ts +47 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1783234451106-AddIncidentAlertReminderRules.ts +211 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1783320000000-AddScheduledMaintenanceReminderRules.ts +113 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule.ts +20 -0
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1783340000000-AddLabelsToIncidentAndAlertReminderRules.ts +69 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  40. package/Server/Services/AlertReminderRuleService.ts +253 -0
  41. package/Server/Services/AlertService.ts +106 -0
  42. package/Server/Services/EnterpriseLicenseInstanceService.ts +10 -0
  43. package/Server/Services/IncidentReminderRuleService.ts +256 -0
  44. package/Server/Services/IncidentService.ts +143 -0
  45. package/Server/Services/Index.ts +8 -0
  46. package/Server/Services/IoTDeviceService.ts +99 -4
  47. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +236 -0
  48. package/Server/Services/ScheduledMaintenanceService.ts +127 -0
  49. package/Server/Services/StatusPageService.ts +104 -45
  50. package/Server/Services/TelemetryExceptionService.ts +123 -0
  51. package/Server/Services/UserNotificationSettingService.ts +24 -0
  52. package/Server/Utils/AnalyticsDatabase/Statement.ts +7 -3
  53. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +35 -0
  54. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +6 -4
  55. package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +7 -6
  56. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +6 -4
  57. package/Server/Utils/Telemetry/IoTSnapshotScan.ts +45 -7
  58. package/Server/Utils/WhatsAppTemplateUtil.ts +10 -0
  59. package/ServiceRoute.ts +4 -0
  60. package/Tests/Server/Services/IoTDeviceService.test.ts +280 -0
  61. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +49 -0
  62. package/Tests/Server/Utils/Monitor/Criteria/TelemetryStepMetricAlias.test.ts +390 -0
  63. package/Tests/Server/Utils/Telemetry/IoTSnapshotScan.test.ts +202 -0
  64. package/Tests/Utils/EnterpriseLicenseUsage.test.ts +165 -0
  65. package/Types/Email/EmailTemplateType.ts +3 -0
  66. package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +18 -0
  67. package/Types/Monitor/MonitorStep.ts +32 -0
  68. package/Types/NotificationSetting/NotificationSettingEventType.ts +3 -0
  69. package/Types/Permission.ts +144 -0
  70. package/Types/Reminder/ReminderStopState.ts +6 -0
  71. package/Types/Reminder/ScheduledMaintenanceReminderStopState.ts +6 -0
  72. package/Types/WhatsApp/WhatsAppTemplates.ts +14 -0
  73. package/UI/Components/EditionLabel/EditionLabel.tsx +172 -0
  74. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +125 -0
  75. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/CommonModel.js.map +1 -1
  76. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +1 -0
  77. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  78. package/build/dist/Models/AnalyticsModels/Log.js +1 -0
  79. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  80. package/build/dist/Models/AnalyticsModels/Metric.js +1 -0
  81. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  82. package/build/dist/Models/AnalyticsModels/MonitorLog.js +1 -0
  83. package/build/dist/Models/AnalyticsModels/MonitorLog.js.map +1 -1
  84. package/build/dist/Models/AnalyticsModels/Span.js +1 -0
  85. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  86. package/build/dist/Models/DatabaseModels/Alert.js +103 -0
  87. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  88. package/build/dist/Models/DatabaseModels/AlertInternalNote.js +2 -0
  89. package/build/dist/Models/DatabaseModels/AlertInternalNote.js.map +1 -1
  90. package/build/dist/Models/DatabaseModels/AlertReminderRule.js +605 -0
  91. package/build/dist/Models/DatabaseModels/AlertReminderRule.js.map +1 -0
  92. package/build/dist/Models/DatabaseModels/AlertSeverity.js +2 -0
  93. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  94. package/build/dist/Models/DatabaseModels/AlertState.js +2 -0
  95. package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
  96. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +2 -0
  97. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
  98. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js +197 -0
  99. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js.map +1 -0
  100. package/build/dist/Models/DatabaseModels/GlobalConfig.js +18 -0
  101. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  102. package/build/dist/Models/DatabaseModels/Incident.js +103 -0
  103. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  104. package/build/dist/Models/DatabaseModels/IncidentInternalNote.js +2 -0
  105. package/build/dist/Models/DatabaseModels/IncidentInternalNote.js.map +1 -1
  106. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +2 -0
  107. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  108. package/build/dist/Models/DatabaseModels/IncidentReminderRule.js +605 -0
  109. package/build/dist/Models/DatabaseModels/IncidentReminderRule.js.map +1 -0
  110. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +2 -0
  111. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  112. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +2 -0
  113. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  114. package/build/dist/Models/DatabaseModels/Index.js +8 -0
  115. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  116. package/build/dist/Models/DatabaseModels/Label.js +2 -0
  117. package/build/dist/Models/DatabaseModels/Label.js.map +1 -1
  118. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +2 -0
  119. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
  120. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +103 -0
  121. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  122. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js +596 -0
  123. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js.map +1 -0
  124. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js +2 -0
  125. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js.map +1 -1
  126. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +2 -0
  127. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
  128. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +2 -0
  129. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
  130. package/build/dist/Server/API/DashboardAPI.js +166 -16
  131. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  132. package/build/dist/Server/API/EnterpriseLicenseAPI.js +203 -13
  133. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
  134. package/build/dist/Server/API/GlobalConfigAPI.js +62 -15
  135. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  136. package/build/dist/Server/API/StatusPageAPI.js +74 -31
  137. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  138. package/build/dist/Server/EnvironmentConfig.js +6 -0
  139. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  140. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783226868418-AddEnterpriseLicenseInstance.js +22 -0
  141. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783226868418-AddEnterpriseLicenseInstance.js.map +1 -0
  142. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783234451106-AddIncidentAlertReminderRules.js +78 -0
  143. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783234451106-AddIncidentAlertReminderRules.js.map +1 -0
  144. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783320000000-AddScheduledMaintenanceReminderRules.js +44 -0
  145. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783320000000-AddScheduledMaintenanceReminderRules.js.map +1 -0
  146. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule.js +12 -0
  147. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule.js.map +1 -0
  148. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783340000000-AddLabelsToIncidentAndAlertReminderRules.js +30 -0
  149. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783340000000-AddLabelsToIncidentAndAlertReminderRules.js.map +1 -0
  150. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  151. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  152. package/build/dist/Server/Services/AlertReminderRuleService.js +228 -0
  153. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -0
  154. package/build/dist/Server/Services/AlertService.js +87 -0
  155. package/build/dist/Server/Services/AlertService.js.map +1 -1
  156. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +9 -0
  157. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -0
  158. package/build/dist/Server/Services/IncidentReminderRuleService.js +231 -0
  159. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -0
  160. package/build/dist/Server/Services/IncidentService.js +116 -0
  161. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  162. package/build/dist/Server/Services/Index.js +8 -0
  163. package/build/dist/Server/Services/Index.js.map +1 -1
  164. package/build/dist/Server/Services/IoTDeviceService.js +66 -4
  165. package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
  166. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +214 -0
  167. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -0
  168. package/build/dist/Server/Services/ScheduledMaintenanceService.js +102 -0
  169. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  170. package/build/dist/Server/Services/StatusPageService.js +91 -43
  171. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  172. package/build/dist/Server/Services/TelemetryExceptionService.js +101 -0
  173. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  174. package/build/dist/Server/Services/UserNotificationSettingService.js +6 -0
  175. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  176. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +4 -2
  177. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  178. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +29 -0
  179. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  180. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +4 -5
  181. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  182. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +6 -5
  183. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
  184. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +9 -9
  185. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  186. package/build/dist/Server/Utils/Telemetry/IoTSnapshotScan.js +33 -2
  187. package/build/dist/Server/Utils/Telemetry/IoTSnapshotScan.js.map +1 -1
  188. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +6 -0
  189. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  190. package/build/dist/ServiceRoute.js +1 -0
  191. package/build/dist/ServiceRoute.js.map +1 -1
  192. package/build/dist/Types/Email/EmailTemplateType.js +3 -0
  193. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  194. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.js +2 -0
  195. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.js.map +1 -0
  196. package/build/dist/Types/Monitor/MonitorStep.js +25 -0
  197. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  198. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  199. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  200. package/build/dist/Types/Permission.js +126 -0
  201. package/build/dist/Types/Permission.js.map +1 -1
  202. package/build/dist/Types/Reminder/ReminderStopState.js +7 -0
  203. package/build/dist/Types/Reminder/ReminderStopState.js.map +1 -0
  204. package/build/dist/Types/Reminder/ScheduledMaintenanceReminderStopState.js +7 -0
  205. package/build/dist/Types/Reminder/ScheduledMaintenanceReminderStopState.js.map +1 -0
  206. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js +9 -0
  207. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js.map +1 -1
  208. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +92 -0
  209. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  210. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +83 -0
  211. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -0
  212. package/package.json +1 -1
@@ -1,12 +1,22 @@
1
1
  import EnterpriseLicense from "../../Models/DatabaseModels/EnterpriseLicense";
2
+ import EnterpriseLicenseInstance from "../../Models/DatabaseModels/EnterpriseLicenseInstance";
2
3
  import BadDataException from "../../Types/Exception/BadDataException";
4
+ import EnterpriseLicenseUsageUtil from "../../Utils/EnterpriseLicense/EnterpriseLicenseUsage";
5
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
6
+ import SortOrder from "../../Types/BaseDatabase/SortOrder";
3
7
  import EnterpriseLicenseService from "../Services/EnterpriseLicenseService";
8
+ import EnterpriseLicenseInstanceService from "../Services/EnterpriseLicenseInstanceService";
4
9
  import UserMiddleware from "../Middleware/UserAuthorization";
5
10
  import JSONWebToken from "../Utils/JsonWebToken";
6
11
  import OneUptimeDate from "../../Types/Date";
7
12
  import Response from "../Utils/Response";
8
13
  import BaseAPI from "./BaseAPI";
9
- // import { Host } from "../EnvironmentConfig";
14
+ /*
15
+ * Bounds how many instance rows one license key can register. Real customers
16
+ * run a handful of instances; this stops a leaked key from being used to
17
+ * fill the table with junk rows.
18
+ */
19
+ const MAX_INSTANCES_PER_LICENSE = 100;
10
20
  export default class EnterpriseLicenseAPI extends BaseAPI {
11
21
  constructor() {
12
22
  var _a, _b;
@@ -30,6 +40,7 @@ export default class EnterpriseLicenseAPI extends BaseAPI {
30
40
  licenseKey: licenseKey,
31
41
  },
32
42
  select: {
43
+ _id: true,
33
44
  companyName: true,
34
45
  expiresAt: true,
35
46
  licenseKey: true,
@@ -53,6 +64,21 @@ export default class EnterpriseLicenseAPI extends BaseAPI {
53
64
  if (secondsUntilExpiry <= 0) {
54
65
  throw new BadDataException("License key has expired");
55
66
  }
67
+ /*
68
+ * The validating instance sends its instanceId and host so it
69
+ * shows up in the instance list right away (usage is reported
70
+ * later by the daily job on the instance).
71
+ */
72
+ const instanceId = this.parseShortText(req.body["instanceId"]);
73
+ const instanceHost = this.parseShortText(req.body["host"]);
74
+ if (instanceId) {
75
+ await this.upsertLicenseInstance({
76
+ licenseId: license.id,
77
+ instanceId: instanceId,
78
+ host: instanceHost || undefined,
79
+ });
80
+ }
81
+ const instances = await this.findLicenseInstances(license.id);
56
82
  const payload = {
57
83
  companyName: license.companyName || "",
58
84
  expiresAt: license.expiresAt.toISOString(),
@@ -71,6 +97,7 @@ export default class EnterpriseLicenseAPI extends BaseAPI {
71
97
  userCountUpdatedAt: license.userCountUpdatedAt
72
98
  ? license.userCountUpdatedAt.toISOString()
73
99
  : null,
100
+ instances: this.getInstanceSummaries(instances),
74
101
  token,
75
102
  });
76
103
  }
@@ -108,21 +135,51 @@ export default class EnterpriseLicenseAPI extends BaseAPI {
108
135
  throw new BadDataException("License key is invalid");
109
136
  }
110
137
  const reportedAt = OneUptimeDate.getCurrentDate();
111
- await EnterpriseLicenseService.updateOneById({
112
- id: license.id,
113
- data: {
114
- currentUserCount: userCount,
115
- userCountUpdatedAt: reportedAt,
116
- },
117
- props: {
118
- isRoot: true,
119
- ignoreHooks: true,
120
- },
121
- });
138
+ const instanceId = this.parseShortText(req.body["instanceId"]);
139
+ const instanceHost = this.parseShortText(req.body["host"]);
140
+ const userEmailHashes = EnterpriseLicenseUsageUtil.sanitizeUserEmailHashes(req.body["userEmailHashes"]);
141
+ if (instanceId) {
142
+ /*
143
+ * Multi-instance report: track usage per instance and count
144
+ * users uniquely across all instances of this license.
145
+ */
146
+ await this.upsertLicenseInstance({
147
+ licenseId: license.id,
148
+ instanceId: instanceId,
149
+ host: instanceHost || undefined,
150
+ userCount: userCount,
151
+ userEmailHashes: userEmailHashes,
152
+ lastReportedAt: reportedAt,
153
+ });
154
+ }
155
+ const instances = await this.findLicenseInstances(license.id);
156
+ let currentUserCount = userCount;
157
+ if (instances.length > 0) {
158
+ currentUserCount = EnterpriseLicenseUsageUtil.getUniqueUserCount(instances, reportedAt);
159
+ }
160
+ /*
161
+ * Legacy reports (no instanceId) only drive the license-wide count
162
+ * while no instance has registered — otherwise they would stomp
163
+ * the deduplicated multi-instance count.
164
+ */
165
+ if (instanceId || instances.length === 0) {
166
+ await EnterpriseLicenseService.updateOneById({
167
+ id: license.id,
168
+ data: {
169
+ currentUserCount: currentUserCount,
170
+ userCountUpdatedAt: reportedAt,
171
+ },
172
+ props: {
173
+ isRoot: true,
174
+ ignoreHooks: true,
175
+ },
176
+ });
177
+ }
122
178
  return Response.sendJsonObjectResponse(req, res, {
123
- currentUserCount: userCount,
179
+ currentUserCount: currentUserCount,
124
180
  userCountUpdatedAt: reportedAt.toISOString(),
125
181
  userLimit: typeof license.userLimit === "number" ? license.userLimit : null,
182
+ instances: this.getInstanceSummaries(instances),
126
183
  });
127
184
  }
128
185
  catch (err) {
@@ -130,5 +187,138 @@ export default class EnterpriseLicenseAPI extends BaseAPI {
130
187
  }
131
188
  });
132
189
  }
190
+ parseShortText(value) {
191
+ if (typeof value !== "string") {
192
+ return "";
193
+ }
194
+ return value.trim().substring(0, 100);
195
+ }
196
+ async findLicenseInstances(licenseId) {
197
+ return EnterpriseLicenseInstanceService.findBy({
198
+ query: {
199
+ enterpriseLicenseId: licenseId,
200
+ },
201
+ select: {
202
+ _id: true,
203
+ instanceId: true,
204
+ host: true,
205
+ userCount: true,
206
+ userEmailHashes: true,
207
+ lastReportedAt: true,
208
+ },
209
+ sort: {
210
+ createdAt: SortOrder.Ascending,
211
+ },
212
+ skip: 0,
213
+ limit: LIMIT_MAX,
214
+ props: {
215
+ isRoot: true,
216
+ },
217
+ });
218
+ }
219
+ getInstanceSummaries(instances) {
220
+ return instances.map((instance) => {
221
+ return {
222
+ instanceId: instance.instanceId || "",
223
+ host: instance.host || null,
224
+ userCount: typeof instance.userCount === "number" ? instance.userCount : null,
225
+ lastReportedAt: instance.lastReportedAt
226
+ ? instance.lastReportedAt.toISOString()
227
+ : null,
228
+ };
229
+ });
230
+ }
231
+ async upsertLicenseInstance(data) {
232
+ const updated = await this.updateLicenseInstanceIfExists(data);
233
+ if (updated) {
234
+ return;
235
+ }
236
+ const instanceCount = await EnterpriseLicenseInstanceService.countBy({
237
+ query: {
238
+ enterpriseLicenseId: data.licenseId,
239
+ },
240
+ props: {
241
+ isRoot: true,
242
+ },
243
+ });
244
+ if (instanceCount.toNumber() >= MAX_INSTANCES_PER_LICENSE) {
245
+ throw new BadDataException("Too many instances are registered for this license. Please contact support@oneuptime.com.");
246
+ }
247
+ const newInstance = new EnterpriseLicenseInstance();
248
+ newInstance.enterpriseLicenseId = data.licenseId;
249
+ newInstance.instanceId = data.instanceId;
250
+ if (data.host !== undefined) {
251
+ newInstance.host = data.host;
252
+ }
253
+ if (data.userCount !== undefined) {
254
+ newInstance.userCount = data.userCount;
255
+ }
256
+ if (data.userEmailHashes !== undefined) {
257
+ newInstance.userEmailHashes = data.userEmailHashes;
258
+ }
259
+ if (data.lastReportedAt !== undefined) {
260
+ newInstance.lastReportedAt = data.lastReportedAt;
261
+ }
262
+ try {
263
+ await EnterpriseLicenseInstanceService.create({
264
+ data: newInstance,
265
+ props: {
266
+ isRoot: true,
267
+ },
268
+ });
269
+ }
270
+ catch (err) {
271
+ /*
272
+ * A concurrent request created the row between our check and this
273
+ * insert — the unique index on (enterpriseLicenseId, instanceId)
274
+ * rejected the duplicate. Apply the report as an update instead.
275
+ */
276
+ const retried = await this.updateLicenseInstanceIfExists(data);
277
+ if (!retried) {
278
+ throw err;
279
+ }
280
+ }
281
+ }
282
+ async updateLicenseInstanceIfExists(data) {
283
+ const existingInstance = await EnterpriseLicenseInstanceService.findOneBy({
284
+ query: {
285
+ enterpriseLicenseId: data.licenseId,
286
+ instanceId: data.instanceId,
287
+ },
288
+ select: {
289
+ _id: true,
290
+ },
291
+ props: {
292
+ isRoot: true,
293
+ },
294
+ });
295
+ if (!existingInstance) {
296
+ return false;
297
+ }
298
+ const updateData = {};
299
+ if (data.host !== undefined) {
300
+ updateData.host = data.host;
301
+ }
302
+ if (data.userCount !== undefined) {
303
+ updateData.userCount = data.userCount;
304
+ }
305
+ if (data.userEmailHashes !== undefined) {
306
+ updateData.userEmailHashes = data.userEmailHashes;
307
+ }
308
+ if (data.lastReportedAt !== undefined) {
309
+ updateData.lastReportedAt = data.lastReportedAt;
310
+ }
311
+ if (Object.keys(updateData).length > 0) {
312
+ await EnterpriseLicenseInstanceService.updateOneById({
313
+ id: existingInstance.id,
314
+ data: updateData,
315
+ props: {
316
+ isRoot: true,
317
+ ignoreHooks: true,
318
+ },
319
+ });
320
+ }
321
+ return true;
322
+ }
133
323
  }
134
324
  //# sourceMappingURL=EnterpriseLicenseAPI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EnterpriseLicenseAPI.js","sourceRoot":"","sources":["../../../../Server/API/EnterpriseLicenseAPI.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EnterpriseLicenseAPI.js","sourceRoot":"","sources":["../../../../Server/API/EnterpriseLicenseAPI.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import ObjectID from "../../Types/ObjectID";
6
6
  import BadDataException from "../../Types/Exception/BadDataException";
7
7
  import API from "../../Utils/API";
8
8
  import HTTPErrorResponse from "../../Types/API/HTTPErrorResponse";
9
- import { EnterpriseLicenseValidationUrl } from "../EnvironmentConfig";
9
+ import { EnterpriseLicenseValidationUrl, Host } from "../EnvironmentConfig";
10
10
  import UserMiddleware from "../Middleware/UserAuthorization";
11
11
  export default class GlobalConfigAPI extends BaseAPI {
12
12
  constructor() {
@@ -31,7 +31,8 @@ export default class GlobalConfigAPI extends BaseAPI {
31
31
  next(err);
32
32
  }
33
33
  });
34
- this.router.get(`${(_b = new this.entityType().getCrudApiPath()) === null || _b === void 0 ? void 0 : _b.toString()}/license`, async (req, res, next) => {
34
+ this.router.get(`${(_b = new this.entityType().getCrudApiPath()) === null || _b === void 0 ? void 0 : _b.toString()}/license`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
35
+ var _a;
35
36
  try {
36
37
  const config = await GlobalConfigService.findOneById({
37
38
  id: ObjectID.getZeroObjectID(),
@@ -43,18 +44,35 @@ export default class GlobalConfigAPI extends BaseAPI {
43
44
  enterpriseLicenseUserLimit: true,
44
45
  enterpriseLicenseCurrentUserCount: true,
45
46
  enterpriseLicenseUserCountUpdatedAt: true,
47
+ enterpriseLicenseInstances: true,
48
+ instanceId: true,
46
49
  },
47
50
  props: {
48
51
  isRoot: true,
49
52
  },
50
53
  });
54
+ /*
55
+ * This route also serves the login page (before sign-in), so it
56
+ * cannot require authentication outright. Anonymous callers only
57
+ * get enough to render the edition pill — the license key, token
58
+ * and instance topology require a signed-in user.
59
+ */
60
+ const isAuthenticatedUser = Boolean((_a = req.userAuthorization) === null || _a === void 0 ? void 0 : _a.userId);
61
+ const licenseValid = Boolean((config === null || config === void 0 ? void 0 : config.enterpriseLicenseToken) &&
62
+ (config === null || config === void 0 ? void 0 : config.enterpriseLicenseExpiresAt) &&
63
+ config.enterpriseLicenseExpiresAt.getTime() > Date.now());
51
64
  const responseBody = {
52
65
  companyName: (config === null || config === void 0 ? void 0 : config.enterpriseCompanyName) || null,
53
66
  expiresAt: (config === null || config === void 0 ? void 0 : config.enterpriseLicenseExpiresAt)
54
67
  ? config.enterpriseLicenseExpiresAt.toISOString()
55
68
  : null,
56
- licenseKey: (config === null || config === void 0 ? void 0 : config.enterpriseLicenseKey) || null,
57
- token: (config === null || config === void 0 ? void 0 : config.enterpriseLicenseToken) || null,
69
+ licenseKey: isAuthenticatedUser
70
+ ? (config === null || config === void 0 ? void 0 : config.enterpriseLicenseKey) || null
71
+ : null,
72
+ token: isAuthenticatedUser
73
+ ? (config === null || config === void 0 ? void 0 : config.enterpriseLicenseToken) || null
74
+ : null,
75
+ licenseValid: licenseValid,
58
76
  userLimit: typeof (config === null || config === void 0 ? void 0 : config.enterpriseLicenseUserLimit) === "number"
59
77
  ? config.enterpriseLicenseUserLimit
60
78
  : null,
@@ -64,6 +82,13 @@ export default class GlobalConfigAPI extends BaseAPI {
64
82
  userCountUpdatedAt: (config === null || config === void 0 ? void 0 : config.enterpriseLicenseUserCountUpdatedAt)
65
83
  ? config.enterpriseLicenseUserCountUpdatedAt.toISOString()
66
84
  : null,
85
+ instances: isAuthenticatedUser &&
86
+ Array.isArray(config === null || config === void 0 ? void 0 : config.enterpriseLicenseInstances)
87
+ ? config.enterpriseLicenseInstances
88
+ : [],
89
+ instanceId: isAuthenticatedUser && (config === null || config === void 0 ? void 0 : config.instanceId)
90
+ ? config.instanceId.toString()
91
+ : null,
67
92
  };
68
93
  return Response.sendJsonObjectResponse(req, res, responseBody);
69
94
  }
@@ -78,10 +103,31 @@ export default class GlobalConfigAPI extends BaseAPI {
78
103
  if (!licenseKey) {
79
104
  throw new BadDataException("License key is required");
80
105
  }
106
+ const globalConfigId = ObjectID.getZeroObjectID();
107
+ const existingConfig = await GlobalConfigService.findOneById({
108
+ id: globalConfigId,
109
+ select: {
110
+ _id: true,
111
+ instanceId: true,
112
+ },
113
+ props: {
114
+ isRoot: true,
115
+ ignoreHooks: true,
116
+ },
117
+ });
118
+ /*
119
+ * Send this instance's id and host along with the key so the
120
+ * license server registers this instance against the license and
121
+ * it shows up in the instance list on all instances that share
122
+ * the license.
123
+ */
124
+ const instanceId = (existingConfig === null || existingConfig === void 0 ? void 0 : existingConfig.instanceId) || ObjectID.generate();
81
125
  const validationResponse = await API.post({
82
126
  url: EnterpriseLicenseValidationUrl,
83
127
  data: {
84
128
  licenseKey,
129
+ instanceId: instanceId.toString(),
130
+ host: Host,
85
131
  },
86
132
  });
87
133
  if (!validationResponse.isSuccess()) {
@@ -121,6 +167,9 @@ export default class GlobalConfigAPI extends BaseAPI {
121
167
  userCountUpdatedAt = parsedReportedAt;
122
168
  }
123
169
  }
170
+ const instances = Array.isArray(payload["instances"])
171
+ ? payload["instances"]
172
+ : [];
124
173
  const updatePayload = {
125
174
  enterpriseCompanyName: companyNameRaw || null,
126
175
  enterpriseLicenseKey: licenseKeyRaw || null,
@@ -129,18 +178,12 @@ export default class GlobalConfigAPI extends BaseAPI {
129
178
  enterpriseLicenseUserLimit: userLimit,
130
179
  enterpriseLicenseCurrentUserCount: currentUserCount,
131
180
  enterpriseLicenseUserCountUpdatedAt: userCountUpdatedAt,
181
+ enterpriseLicenseInstances: instances,
132
182
  };
133
- const globalConfigId = ObjectID.getZeroObjectID();
134
- const existingConfig = await GlobalConfigService.findOneById({
135
- id: globalConfigId,
136
- select: {
137
- _id: true,
138
- },
139
- props: {
140
- isRoot: true,
141
- ignoreHooks: true,
142
- },
143
- });
183
+ if (!(existingConfig === null || existingConfig === void 0 ? void 0 : existingConfig.instanceId)) {
184
+ // Installs that predate instance ids: persist the one we generated.
185
+ updatePayload.instanceId = instanceId;
186
+ }
144
187
  if (existingConfig) {
145
188
  await GlobalConfigService.updateOneById({
146
189
  id: globalConfigId,
@@ -176,6 +219,8 @@ export default class GlobalConfigAPI extends BaseAPI {
176
219
  newConfig.enterpriseLicenseUserCountUpdatedAt =
177
220
  userCountUpdatedAt;
178
221
  }
222
+ newConfig.enterpriseLicenseInstances = instances;
223
+ newConfig.instanceId = instanceId;
179
224
  await GlobalConfigService.create({
180
225
  data: newConfig,
181
226
  props: {
@@ -194,6 +239,8 @@ export default class GlobalConfigAPI extends BaseAPI {
194
239
  userCountUpdatedAt: userCountUpdatedAt
195
240
  ? userCountUpdatedAt.toISOString()
196
241
  : null,
242
+ instances: instances,
243
+ instanceId: instanceId.toString(),
197
244
  });
198
245
  }
199
246
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalConfigAPI.js","sourceRoot":"","sources":["../../../../Server/API/GlobalConfigAPI.ts"],"names":[],"mappings":"AAAA,OAAO,mBAEN,MAAM,iCAAiC,CAAC;AAMzC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,YAAY,MAAM,0CAA0C,CAAC;AACpE,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAE5C,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AACtE,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAClC,OAAO,iBAAiB,MAAM,mCAAmC,CAAC;AAGlE,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAG5C;IACC;;QACE,KAAK,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,GAAG,MAAA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,0CAAE,QAAQ,EAAE,OAAO,EAC5D,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;YACtE,IAAI,CAAC;gBACH,MAAM,YAAY,GAChB,MAAM,mBAAmB,CAAC,WAAW,CAAC;oBACpC,EAAE,EAAE,QAAQ,CAAC,eAAe,EAAE;oBAC9B,MAAM,EAAE;wBACN,0BAA0B,EAAE,IAAI;qBACjC;oBACD,KAAK,EAAE;wBACL,MAAM,EAAE,IAAI;qBACb;iBACF,CAAC,CAAC;gBAEL,OAAO,QAAQ,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE;oBAC/C,0BAA0B,EAAE,OAAO,CACjC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,0BAA0B,CACzC;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;QACH,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,GAAG,MAAA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,0CAAE,QAAQ,EAAE,UAAU,EAC/D,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;YACtE,IAAI,CAAC;gBACH,MAAM,MAAM,GACV,MAAM,mBAAmB,CAAC,WAAW,CAAC;oBACpC,EAAE,EAAE,QAAQ,CAAC,eAAe,EAAE;oBAC9B,MAAM,EAAE;wBACN,qBAAqB,EAAE,IAAI;wBAC3B,0BAA0B,EAAE,IAAI;wBAChC,oBAAoB,EAAE,IAAI;wBAC1B,sBAAsB,EAAE,IAAI;wBAC5B,0BAA0B,EAAE,IAAI;wBAChC,iCAAiC,EAAE,IAAI;wBACvC,mCAAmC,EAAE,IAAI;qBAC1C;oBACD,KAAK,EAAE;wBACL,MAAM,EAAE,IAAI;qBACb;iBACF,CAAC,CAAC;gBAEL,MAAM,YAAY,GAAe;oBAC/B,WAAW,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,qBAAqB,KAAI,IAAI;oBAClD,SAAS,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,0BAA0B;wBAC3C,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,WAAW,EAAE;wBACjD,CAAC,CAAC,IAAI;oBACR,UAAU,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,oBAAoB,KAAI,IAAI;oBAChD,KAAK,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,sBAAsB,KAAI,IAAI;oBAC7C,SAAS,EACP,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,0BAA0B,CAAA,KAAK,QAAQ;wBACpD,CAAC,CAAC,MAAM,CAAC,0BAA0B;wBACnC,CAAC,CAAC,IAAI;oBACV,gBAAgB,EACd,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,iCAAiC,CAAA,KAAK,QAAQ;wBAC3D,CAAC,CAAC,MAAM,CAAC,iCAAiC;wBAC1C,CAAC,CAAC,IAAI;oBACV,kBAAkB,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mCAAmC;wBAC7D,CAAC,CAAC,MAAM,CAAC,mCAAmC,CAAC,WAAW,EAAE;wBAC1D,CAAC,CAAC,IAAI;iBACT,CAAC;gBAEF,OAAO,QAAQ,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;QACH,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,MAAA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,0CAAE,QAAQ,EAAE,UAAU,EAC/D,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;;YACtE,IAAI,CAAC;gBACH,MAAM,UAAU,GACd,CAAA,MAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAwB,0CAAE,IAAI,EAAE,KAAI,EAAE,CAAC;gBAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;gBACxD,CAAC;gBAED,MAAM,kBAAkB,GAEA,MAAM,GAAG,CAAC,IAAI,CAAa;oBACjD,GAAG,EAAE,8BAA8B;oBACnC,IAAI,EAAE;wBACJ,UAAU;qBACX;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,CAAC;oBACpC,MAAM,YAAY,GAChB,kBAAkB,YAAY,iBAAiB;wBAC7C,CAAC,CAAC,kBAAkB,CAAC,OAAO;4BAC1B,iCAAiC;wBACnC,CAAC,CAAC,iCAAiC,CAAC;oBACxC,MAAM,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBAC3C,CAAC;gBAED,MAAM,OAAO,GAAe,kBAAkB,CAAC,IAAkB,CAAC;gBAElE,MAAM,cAAc,GAClB,CAAA,MAAC,OAAO,CAAC,aAAa,CAAwB,0CAAE,IAAI,EAAE,KAAI,EAAE,CAAC;gBAC/D,MAAM,YAAY,GACf,OAAO,CAAC,WAAW,CAAwB,IAAI,EAAE,CAAC;gBACrD,MAAM,aAAa,GACjB,CAAA,MAAC,OAAO,CAAC,YAAY,CAAwB,0CAAE,IAAI,EAAE,KAAI,UAAU,CAAC;gBACtE,MAAM,YAAY,GACf,OAAO,CAAC,OAAO,CAAwB,IAAI,EAAE,CAAC;gBAEjD,IAAI,aAAa,GAAqB,SAAS,CAAC;gBAChD,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,UAAU,GAAS,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;oBAEhD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;wBACvC,MAAM,IAAI,gBAAgB,CACxB,qDAAqD,CACtD,CAAC;oBACJ,CAAC;oBAED,aAAa,GAAG,UAAU,CAAC;gBAC7B,CAAC;gBAED,MAAM,YAAY,GAAY,OAAO,CAAC,WAAW,CAAC,CAAC;gBACnD,MAAM,SAAS,GACb,OAAO,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAC/D,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,IAAI,CAAC;gBAEX,MAAM,mBAAmB,GAAY,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACjE,MAAM,gBAAgB,GACpB,OAAO,mBAAmB,KAAK,QAAQ;oBACvC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;oBAClC,CAAC,CAAC,mBAAmB;oBACrB,CAAC,CAAC,IAAI,CAAC;gBAEX,MAAM,qBAAqB,GAAuB,OAAO,CACvD,oBAAoB,CACC,CAAC;gBACxB,IAAI,kBAAkB,GAAgB,IAAI,CAAC;gBAC3C,IAAI,qBAAqB,EAAE,CAAC;oBAC1B,MAAM,gBAAgB,GAAS,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC;oBAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;wBAC9C,kBAAkB,GAAG,gBAAgB,CAAC;oBACxC,CAAC;gBACH,CAAC;gBAED,MAAM,aAAa,GAAgC;oBACjD,qBAAqB,EAAE,cAAc,IAAI,IAAI;oBAC7C,oBAAoB,EAAE,aAAa,IAAI,IAAI;oBAC3C,0BAA0B,EAAE,aAAa,IAAI,IAAI;oBACjD,sBAAsB,EAAE,YAAY,IAAI,IAAI;oBAC5C,0BAA0B,EAAE,SAAS;oBACrC,iCAAiC,EAAE,gBAAgB;oBACnD,mCAAmC,EAAE,kBAAkB;iBACxD,CAAC;gBAEF,MAAM,cAAc,GAAa,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAE5D,MAAM,cAAc,GAClB,MAAM,mBAAmB,CAAC,WAAW,CAAC;oBACpC,EAAE,EAAE,cAAc;oBAClB,MAAM,EAAE;wBACN,GAAG,EAAE,IAAI;qBACV;oBACD,KAAK,EAAE;wBACL,MAAM,EAAE,IAAI;wBACZ,WAAW,EAAE,IAAI;qBAClB;iBACF,CAAC,CAAC;gBAEL,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,mBAAmB,CAAC,aAAa,CAAC;wBACtC,EAAE,EAAE,cAAc;wBAClB,IAAI,EAAE,aAAa;wBACnB,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;4BACZ,WAAW,EAAE,IAAI;yBAClB;qBACF,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAiB,IAAI,YAAY,EAAE,CAAC;oBACnD,SAAS,CAAC,EAAE,GAAG,cAAc,CAAC;oBAE9B,IAAI,cAAc,EAAE,CAAC;wBACnB,SAAS,CAAC,qBAAqB,GAAG,cAAc,CAAC;oBACnD,CAAC;oBAED,IAAI,aAAa,EAAE,CAAC;wBAClB,SAAS,CAAC,oBAAoB,GAAG,aAAa,CAAC;oBACjD,CAAC;oBAED,IAAI,YAAY,EAAE,CAAC;wBACjB,SAAS,CAAC,sBAAsB,GAAG,YAAY,CAAC;oBAClD,CAAC;oBAED,IAAI,aAAa,EAAE,CAAC;wBAClB,SAAS,CAAC,0BAA0B,GAAG,aAAa,CAAC;oBACvD,CAAC;oBAED,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;wBACvB,SAAS,CAAC,0BAA0B,GAAG,SAAS,CAAC;oBACnD,CAAC;oBAED,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;wBAC9B,SAAS,CAAC,iCAAiC,GAAG,gBAAgB,CAAC;oBACjE,CAAC;oBAED,IAAI,kBAAkB,EAAE,CAAC;wBACvB,SAAS,CAAC,mCAAmC;4BAC3C,kBAAkB,CAAC;oBACvB,CAAC;oBAED,MAAM,mBAAmB,CAAC,MAAM,CAAC;wBAC/B,IAAI,EAAE,SAAS;wBACf,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;4BACZ,WAAW,EAAE,IAAI;yBAClB;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,QAAQ,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE;oBAC/C,WAAW,EAAE,cAAc,IAAI,IAAI;oBACnC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;oBAC7D,UAAU,EAAE,aAAa,IAAI,IAAI;oBACjC,KAAK,EAAE,YAAY,IAAI,IAAI;oBAC3B,SAAS,EAAE,SAAS;oBACpB,gBAAgB,EAAE,gBAAgB;oBAClC,kBAAkB,EAAE,kBAAkB;wBACpC,CAAC,CAAC,kBAAkB,CAAC,WAAW,EAAE;wBAClC,CAAC,CAAC,IAAI;iBACT,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"GlobalConfigAPI.js","sourceRoot":"","sources":["../../../../Server/API/GlobalConfigAPI.ts"],"names":[],"mappings":"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"}
@@ -1021,8 +1021,13 @@ export default class StatusPageAPI extends BaseAPI {
1021
1021
  next(err);
1022
1022
  }
1023
1023
  });
1024
- this.router.post(`${(_x = new this.entityType()
1025
- .getCrudApiPath()) === null || _x === void 0 ? void 0 : _x.toString()}/overview/:statusPageIdOrDomain`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
1024
+ /*
1025
+ * Shared handler for the overview endpoint. Registered for both POST
1026
+ * (used by the status page SPA) and GET (machine-readable access for
1027
+ * crawlers / AI agents) so the authentication and authorization path
1028
+ * can never drift between the two methods. It does not read req.body.
1029
+ */
1030
+ const overviewHandler = async (req, res, next) => {
1026
1031
  var _a;
1027
1032
  try {
1028
1033
  const statusPageId = await resolveStatusPageIdOrThrow(req.params["statusPageIdOrDomain"]);
@@ -1489,26 +1494,25 @@ export default class StatusPageAPI extends BaseAPI {
1489
1494
  }
1490
1495
  let scheduledMaintenanceEvents = [];
1491
1496
  if (statusPage.showScheduledMaintenanceEventsOnStatusPage) {
1492
- scheduledMaintenanceEvents =
1493
- await ScheduledMaintenanceService.findBy({
1494
- query: {
1495
- currentScheduledMaintenanceState: {
1496
- isOngoingState: true,
1497
- },
1498
- statusPages: statusPageId,
1499
- projectId: statusPage.projectId,
1500
- isVisibleOnStatusPage: true,
1501
- },
1502
- select: scheduledEventsSelect,
1503
- sort: {
1504
- startsAt: SortOrder.Ascending,
1505
- },
1506
- skip: 0,
1507
- limit: LIMIT_PER_PROJECT,
1508
- props: {
1509
- isRoot: true,
1497
+ scheduledMaintenanceEvents = await ScheduledMaintenanceService.findBy({
1498
+ query: {
1499
+ currentScheduledMaintenanceState: {
1500
+ isOngoingState: true,
1510
1501
  },
1511
- });
1502
+ statusPages: statusPageId,
1503
+ projectId: statusPage.projectId,
1504
+ isVisibleOnStatusPage: true,
1505
+ },
1506
+ select: scheduledEventsSelect,
1507
+ sort: {
1508
+ startsAt: SortOrder.Ascending,
1509
+ },
1510
+ skip: 0,
1511
+ limit: LIMIT_PER_PROJECT,
1512
+ props: {
1513
+ isRoot: true,
1514
+ },
1515
+ });
1512
1516
  }
1513
1517
  let futureScheduledMaintenanceEvents = [];
1514
1518
  if (statusPage.showScheduledMaintenanceEventsOnStatusPage) {
@@ -1693,12 +1697,23 @@ export default class StatusPageAPI extends BaseAPI {
1693
1697
  monitorsInGroup: JSONFunctions.serialize(monitorsInGroup),
1694
1698
  timelineIncidents: BaseModel.toJSONArray(timelineIncidents, Incident),
1695
1699
  };
1700
+ // These can serve private-page data on a GET; never let shared caches store them.
1701
+ Response.setNoCacheHeaders(res);
1696
1702
  return Response.sendJsonObjectResponse(req, res, response);
1697
1703
  }
1698
1704
  catch (err) {
1699
1705
  next(err);
1700
1706
  }
1701
- });
1707
+ };
1708
+ const overviewApiPath = `${(_x = new this.entityType()
1709
+ .getCrudApiPath()) === null || _x === void 0 ? void 0 : _x.toString()}/overview/:statusPageIdOrDomain`;
1710
+ this.router.post(overviewApiPath, UserMiddleware.getUserMiddleware, overviewHandler);
1711
+ /*
1712
+ * GET variant of the overview endpoint. Same middleware and same handler
1713
+ * as the POST route above — private status pages are rejected for
1714
+ * unauthenticated callers exactly as they are on POST.
1715
+ */
1716
+ this.router.get(overviewApiPath, UserMiddleware.getUserMiddleware, overviewHandler);
1702
1717
  this.router.put(`${(_y = new this.entityType()
1703
1718
  .getCrudApiPath()) === null || _y === void 0 ? void 0 : _y.toString()}/update-subscription/:statusPageId/:subscriberId`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
1704
1719
  try {
@@ -1739,39 +1754,67 @@ export default class StatusPageAPI extends BaseAPI {
1739
1754
  next(err);
1740
1755
  }
1741
1756
  });
1742
- this.router.post(`${(_2 = new this.entityType()
1743
- .getCrudApiPath()) === null || _2 === void 0 ? void 0 : _2.toString()}/incidents/:statusPageIdOrDomain`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
1757
+ /*
1758
+ * Shared handler for the incidents list endpoint. Registered for both
1759
+ * POST and GET (same auth path). It does not read req.body.
1760
+ */
1761
+ const incidentsListHandler = async (req, res, next) => {
1744
1762
  try {
1745
1763
  const objectId = await resolveStatusPageIdOrThrow(req.params["statusPageIdOrDomain"]);
1746
1764
  const response = await this.getIncidents(objectId, null, req);
1765
+ // These can serve private-page data on a GET; never let shared caches store them.
1766
+ Response.setNoCacheHeaders(res);
1747
1767
  return Response.sendJsonObjectResponse(req, res, response);
1748
1768
  }
1749
1769
  catch (err) {
1750
1770
  next(err);
1751
1771
  }
1752
- });
1753
- this.router.post(`${(_3 = new this.entityType()
1754
- .getCrudApiPath()) === null || _3 === void 0 ? void 0 : _3.toString()}/scheduled-maintenance-events/:statusPageIdOrDomain`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
1772
+ };
1773
+ const incidentsListApiPath = `${(_2 = new this.entityType()
1774
+ .getCrudApiPath()) === null || _2 === void 0 ? void 0 : _2.toString()}/incidents/:statusPageIdOrDomain`;
1775
+ this.router.post(incidentsListApiPath, UserMiddleware.getUserMiddleware, incidentsListHandler);
1776
+ this.router.get(incidentsListApiPath, UserMiddleware.getUserMiddleware, incidentsListHandler);
1777
+ /*
1778
+ * Shared handler for the scheduled maintenance events list endpoint.
1779
+ * Registered for both POST and GET (same auth path). It does not read
1780
+ * req.body.
1781
+ */
1782
+ const scheduledMaintenanceEventsListHandler = async (req, res, next) => {
1755
1783
  try {
1756
1784
  const objectId = await resolveStatusPageIdOrThrow(req.params["statusPageIdOrDomain"]);
1757
1785
  const response = await this.getScheduledMaintenanceEvents(objectId, null, req);
1786
+ // These can serve private-page data on a GET; never let shared caches store them.
1787
+ Response.setNoCacheHeaders(res);
1758
1788
  return Response.sendJsonObjectResponse(req, res, response);
1759
1789
  }
1760
1790
  catch (err) {
1761
1791
  next(err);
1762
1792
  }
1763
- });
1764
- this.router.post(`${(_4 = new this.entityType()
1765
- .getCrudApiPath()) === null || _4 === void 0 ? void 0 : _4.toString()}/announcements/:statusPageIdOrDomain`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
1793
+ };
1794
+ const scheduledMaintenanceEventsListApiPath = `${(_3 = new this.entityType()
1795
+ .getCrudApiPath()) === null || _3 === void 0 ? void 0 : _3.toString()}/scheduled-maintenance-events/:statusPageIdOrDomain`;
1796
+ this.router.post(scheduledMaintenanceEventsListApiPath, UserMiddleware.getUserMiddleware, scheduledMaintenanceEventsListHandler);
1797
+ this.router.get(scheduledMaintenanceEventsListApiPath, UserMiddleware.getUserMiddleware, scheduledMaintenanceEventsListHandler);
1798
+ /*
1799
+ * Shared handler for the announcements list endpoint. Registered for
1800
+ * both POST and GET (same auth path). It does not read req.body.
1801
+ */
1802
+ const announcementsListHandler = async (req, res, next) => {
1766
1803
  try {
1767
1804
  const objectId = await resolveStatusPageIdOrThrow(req.params["statusPageIdOrDomain"]);
1768
1805
  const response = await this.getAnnouncements(objectId, null, req);
1806
+ // These can serve private-page data on a GET; never let shared caches store them.
1807
+ Response.setNoCacheHeaders(res);
1769
1808
  return Response.sendJsonObjectResponse(req, res, response);
1770
1809
  }
1771
1810
  catch (err) {
1772
1811
  next(err);
1773
1812
  }
1774
- });
1813
+ };
1814
+ const announcementsListApiPath = `${(_4 = new this.entityType()
1815
+ .getCrudApiPath()) === null || _4 === void 0 ? void 0 : _4.toString()}/announcements/:statusPageIdOrDomain`;
1816
+ this.router.post(announcementsListApiPath, UserMiddleware.getUserMiddleware, announcementsListHandler);
1817
+ this.router.get(announcementsListApiPath, UserMiddleware.getUserMiddleware, announcementsListHandler);
1775
1818
  this.router.post(`${(_5 = new this.entityType()
1776
1819
  .getCrudApiPath()) === null || _5 === void 0 ? void 0 : _5.toString()}/incidents/:statusPageIdOrDomain/:incidentId`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
1777
1820
  try {