@oneuptime/common 12.0.0 → 12.0.2

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 (237) hide show
  1. package/Models/DatabaseModels/Host.ts +12 -4
  2. package/Models/DatabaseModels/KubernetesContainer.ts +5 -4
  3. package/Models/DatabaseModels/KubernetesResource.ts +8 -7
  4. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.ts +12 -2
  5. package/Models/DatabaseModels/PodmanResource.ts +6 -6
  6. package/Models/DatabaseModels/ServiceLevelObjective.ts +91 -0
  7. package/Models/DatabaseModels/StatusPage.ts +95 -0
  8. package/Server/API/TeamMemberAPI.ts +85 -0
  9. package/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.ts +12 -2
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1785900000000-AddSloMonitorLabelRule.ts +84 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/1785915638551-IncreaseHostIpAddressesLength.ts +40 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1785930000000-WidenInventoryResourceNameColumns.ts +131 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1785930709405-AddStatusPageReportPeriod.ts +25 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  15. package/Server/Middleware/ProjectAuthorization.ts +66 -4
  16. package/Server/Services/BillingService.ts +600 -51
  17. package/Server/Services/CephClusterService.ts +47 -5
  18. package/Server/Services/CephResourceService.ts +43 -4
  19. package/Server/Services/CloudResourceService.ts +47 -5
  20. package/Server/Services/DatabaseService.ts +87 -6
  21. package/Server/Services/DockerHostService.ts +47 -5
  22. package/Server/Services/DockerResourceService.ts +62 -8
  23. package/Server/Services/DockerSwarmClusterService.ts +48 -5
  24. package/Server/Services/DockerSwarmResourceService.ts +53 -4
  25. package/Server/Services/HostService.ts +48 -5
  26. package/Server/Services/IoTDeviceService.ts +1 -17
  27. package/Server/Services/IoTFleetService.ts +47 -5
  28. package/Server/Services/KubernetesClusterService.ts +48 -5
  29. package/Server/Services/KubernetesContainerService.ts +50 -9
  30. package/Server/Services/KubernetesResourceService.ts +53 -7
  31. package/Server/Services/LabelService.ts +106 -1
  32. package/Server/Services/LlmProviderService.ts +69 -9
  33. package/Server/Services/MonitorService.ts +57 -0
  34. package/Server/Services/PodmanHostService.ts +47 -5
  35. package/Server/Services/PodmanResourceService.ts +62 -8
  36. package/Server/Services/ProjectService.ts +165 -35
  37. package/Server/Services/ProxmoxClusterService.ts +47 -5
  38. package/Server/Services/ProxmoxResourceService.ts +43 -4
  39. package/Server/Services/RumApplicationService.ts +48 -5
  40. package/Server/Services/RunnerService.ts +1 -7
  41. package/Server/Services/ServerlessFunctionService.ts +48 -5
  42. package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +426 -0
  43. package/Server/Services/ServiceLevelObjectiveService.ts +39 -0
  44. package/Server/Services/StatusPageService.ts +95 -36
  45. package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +18 -1
  46. package/Server/Services/StatusPageSubscriberService.ts +3 -0
  47. package/Server/Types/Database/JSONColumnQuery.ts +621 -0
  48. package/Server/Types/Database/Permissions/PublicPermission.ts +9 -2
  49. package/Server/Types/Database/QueryHelper.ts +17 -32
  50. package/Server/Utils/Database/TruncateColumnValue.ts +84 -0
  51. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +12 -0
  52. package/Tests/App/Dashboard/RunnerInstallInstructions.test.tsx +119 -0
  53. package/Tests/App/Dashboard/RunnerStatus.test.tsx +274 -0
  54. package/Tests/App/Dashboard/UsersTableGroupsByPerson.test.tsx +448 -0
  55. package/Tests/Server/API/BaseAPIApiKeyAuth.test.ts +704 -0
  56. package/Tests/Server/API/TeamMemberRemoveUserFromProjectAPI.test.ts +303 -0
  57. package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +350 -0
  58. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyHeader.test.ts +362 -0
  59. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +687 -0
  60. package/Tests/Server/Services/BillingService.test.ts +78 -3
  61. package/Tests/Server/Services/BillingServiceChangePlanCancel.test.ts +645 -0
  62. package/Tests/Server/Services/BillingServiceTrialPlanChange.test.ts +1005 -0
  63. package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +503 -0
  64. package/Tests/Server/Services/HostIpAddressesColumnWidth.test.ts +198 -0
  65. package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +510 -0
  66. package/Tests/Server/Services/InventoryResourceNameColumnWidth.test.ts +500 -0
  67. package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +586 -0
  68. package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +1242 -0
  69. package/Tests/Server/Services/LlmProviderUsableByProject.test.ts +293 -0
  70. package/Tests/Server/Services/ProjectServiceChangePlan.test.ts +650 -0
  71. package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +1 -0
  72. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +387 -0
  73. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +770 -0
  74. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +130 -0
  75. package/Tests/Server/Services/SloMonitorLabelRuleHooks.test.ts +352 -0
  76. package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +29 -13
  77. package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +69 -8
  78. package/Tests/Server/Types/Database/JSONColumnQuery.test.ts +593 -0
  79. package/Tests/Server/Types/Database/Permissions/PublicPermission.test.ts +495 -0
  80. package/Tests/Server/Types/Database/QueryUtil.test.ts +113 -0
  81. package/Tests/Server/Utils/AI/ToolArgsExtractors.test.ts +141 -0
  82. package/Tests/Server/Utils/AI/Toolbox/WidgetBuilder.test.ts +205 -0
  83. package/Tests/Server/Utils/Database/TruncateColumnValue.test.ts +179 -0
  84. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +897 -0
  85. package/Tests/Types/Events/Recurring.test.ts +157 -0
  86. package/Tests/Types/Runner/RunnerLiveStatus.test.ts +320 -0
  87. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +285 -0
  88. package/Tests/UI/Components/Detail/EntityFields.test.tsx +166 -0
  89. package/Tests/UI/Components/ModelTable/ModelTableGroupsProjectUsers.test.tsx +375 -0
  90. package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +196 -0
  91. package/Tests/UI/Utils/ProjectUsersModelAPI.test.ts +739 -0
  92. package/Tests/UI/Utils/TeamMembersByUser.test.ts +633 -0
  93. package/Tests/Utils/StatusPage/ReportPeriod.test.ts +218 -0
  94. package/Tests/Utils/Telemetry/HostIpAddresses.test.ts +291 -0
  95. package/Types/CustomField/CustomFieldDefinition.ts +24 -0
  96. package/Types/Date.ts +112 -0
  97. package/Types/Events/Recurring.ts +99 -1
  98. package/Types/Runbook/RunbookStep.ts +15 -0
  99. package/Types/Runner/RunnerLiveStatus.ts +114 -0
  100. package/Types/StatusPage/StatusPageReport.ts +11 -0
  101. package/Types/StatusPage/StatusPageReportPeriodType.ts +21 -0
  102. package/UI/Components/Detail/Detail.tsx +155 -0
  103. package/UI/Components/ModelTable/CustomFieldColumns.tsx +2 -6
  104. package/UI/Components/ModelTable/useCustomFieldColumns.ts +21 -2
  105. package/UI/Utils/ModelAPI/ProjectUsersModelAPI.ts +305 -0
  106. package/UI/Utils/TeamMembersByUser.ts +302 -0
  107. package/Utils/StatusPage/ReportPeriod.ts +236 -0
  108. package/Utils/Telemetry/HostIpAddresses.ts +98 -0
  109. package/build/dist/Models/DatabaseModels/Host.js +12 -4
  110. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  111. package/build/dist/Models/DatabaseModels/KubernetesContainer.js +4 -4
  112. package/build/dist/Models/DatabaseModels/KubernetesContainer.js.map +1 -1
  113. package/build/dist/Models/DatabaseModels/KubernetesResource.js +7 -7
  114. package/build/dist/Models/DatabaseModels/KubernetesResource.js.map +1 -1
  115. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js +16 -4
  116. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js.map +1 -1
  117. package/build/dist/Models/DatabaseModels/PodmanResource.js +6 -6
  118. package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -1
  119. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +87 -0
  120. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -1
  121. package/build/dist/Models/DatabaseModels/StatusPage.js +98 -0
  122. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  123. package/build/dist/Server/API/TeamMemberAPI.js +57 -2
  124. package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
  125. package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js +11 -1
  126. package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js.map +1 -1
  127. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785900000000-AddSloMonitorLabelRule.js +45 -0
  128. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785900000000-AddSloMonitorLabelRule.js.map +1 -0
  129. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785915638551-IncreaseHostIpAddressesLength.js +31 -0
  130. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785915638551-IncreaseHostIpAddressesLength.js.map +1 -0
  131. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930000000-WidenInventoryResourceNameColumns.js +90 -0
  132. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930000000-WidenInventoryResourceNameColumns.js.map +1 -0
  133. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930709405-AddStatusPageReportPeriod.js +14 -0
  134. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930709405-AddStatusPageReportPeriod.js.map +1 -0
  135. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  136. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  137. package/build/dist/Server/Middleware/ProjectAuthorization.js +59 -4
  138. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  139. package/build/dist/Server/Services/BillingService.js +466 -36
  140. package/build/dist/Server/Services/BillingService.js.map +1 -1
  141. package/build/dist/Server/Services/CephClusterService.js +42 -5
  142. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  143. package/build/dist/Server/Services/CephResourceService.js +28 -3
  144. package/build/dist/Server/Services/CephResourceService.js.map +1 -1
  145. package/build/dist/Server/Services/CloudResourceService.js +42 -5
  146. package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
  147. package/build/dist/Server/Services/DatabaseService.js +69 -2
  148. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  149. package/build/dist/Server/Services/DockerHostService.js +42 -5
  150. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  151. package/build/dist/Server/Services/DockerResourceService.js +34 -4
  152. package/build/dist/Server/Services/DockerResourceService.js.map +1 -1
  153. package/build/dist/Server/Services/DockerSwarmClusterService.js +43 -5
  154. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  155. package/build/dist/Server/Services/DockerSwarmResourceService.js +28 -3
  156. package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -1
  157. package/build/dist/Server/Services/HostService.js +43 -5
  158. package/build/dist/Server/Services/HostService.js.map +1 -1
  159. package/build/dist/Server/Services/IoTDeviceService.js +1 -8
  160. package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
  161. package/build/dist/Server/Services/IoTFleetService.js +42 -5
  162. package/build/dist/Server/Services/IoTFleetService.js.map +1 -1
  163. package/build/dist/Server/Services/KubernetesClusterService.js +43 -5
  164. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  165. package/build/dist/Server/Services/KubernetesContainerService.js +29 -3
  166. package/build/dist/Server/Services/KubernetesContainerService.js.map +1 -1
  167. package/build/dist/Server/Services/KubernetesResourceService.js +32 -4
  168. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
  169. package/build/dist/Server/Services/LabelService.js +92 -0
  170. package/build/dist/Server/Services/LabelService.js.map +1 -1
  171. package/build/dist/Server/Services/LlmProviderService.js +61 -8
  172. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  173. package/build/dist/Server/Services/MonitorService.js +47 -0
  174. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  175. package/build/dist/Server/Services/PodmanHostService.js +42 -5
  176. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  177. package/build/dist/Server/Services/PodmanResourceService.js +34 -4
  178. package/build/dist/Server/Services/PodmanResourceService.js.map +1 -1
  179. package/build/dist/Server/Services/ProjectService.js +135 -21
  180. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  181. package/build/dist/Server/Services/ProxmoxClusterService.js +42 -5
  182. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  183. package/build/dist/Server/Services/ProxmoxResourceService.js +28 -3
  184. package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -1
  185. package/build/dist/Server/Services/RumApplicationService.js +43 -5
  186. package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
  187. package/build/dist/Server/Services/RunnerService.js +1 -6
  188. package/build/dist/Server/Services/RunnerService.js.map +1 -1
  189. package/build/dist/Server/Services/ServerlessFunctionService.js +43 -5
  190. package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
  191. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +347 -0
  192. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -0
  193. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +33 -1
  194. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
  195. package/build/dist/Server/Services/StatusPageService.js +69 -46
  196. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  197. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +17 -1
  198. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
  199. package/build/dist/Server/Services/StatusPageSubscriberService.js +3 -0
  200. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  201. package/build/dist/Server/Types/Database/JSONColumnQuery.js +402 -0
  202. package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -0
  203. package/build/dist/Server/Types/Database/Permissions/PublicPermission.js +9 -2
  204. package/build/dist/Server/Types/Database/Permissions/PublicPermission.js.map +1 -1
  205. package/build/dist/Server/Types/Database/QueryHelper.js +17 -27
  206. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  207. package/build/dist/Server/Utils/Database/TruncateColumnValue.js +32 -0
  208. package/build/dist/Server/Utils/Database/TruncateColumnValue.js.map +1 -0
  209. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +11 -0
  210. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  211. package/build/dist/Types/CustomField/CustomFieldDefinition.js +2 -0
  212. package/build/dist/Types/CustomField/CustomFieldDefinition.js.map +1 -0
  213. package/build/dist/Types/Date.js +68 -0
  214. package/build/dist/Types/Date.js.map +1 -1
  215. package/build/dist/Types/Events/Recurring.js +63 -0
  216. package/build/dist/Types/Events/Recurring.js.map +1 -1
  217. package/build/dist/Types/Runbook/RunbookStep.js.map +1 -1
  218. package/build/dist/Types/Runner/RunnerLiveStatus.js +69 -0
  219. package/build/dist/Types/Runner/RunnerLiveStatus.js.map +1 -0
  220. package/build/dist/Types/StatusPage/StatusPageReportPeriodType.js +22 -0
  221. package/build/dist/Types/StatusPage/StatusPageReportPeriodType.js.map +1 -0
  222. package/build/dist/UI/Components/Detail/Detail.js +97 -0
  223. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  224. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
  225. package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +18 -2
  226. package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
  227. package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js +213 -0
  228. package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js.map +1 -0
  229. package/build/dist/UI/Utils/TeamMembersByUser.js +195 -0
  230. package/build/dist/UI/Utils/TeamMembersByUser.js.map +1 -0
  231. package/build/dist/Utils/StatusPage/ReportPeriod.js +131 -0
  232. package/build/dist/Utils/StatusPage/ReportPeriod.js.map +1 -0
  233. package/build/dist/Utils/Telemetry/HostIpAddresses.js +82 -0
  234. package/build/dist/Utils/Telemetry/HostIpAddresses.js.map +1 -0
  235. package/jest.config.json +2 -0
  236. package/package.json +1 -1
  237. package/tsconfig.json +12 -1
@@ -178,10 +178,12 @@ export class Service extends DatabaseService {
178
178
  // Best-effort throttle write; proceed with the DB update regardless.
179
179
  }
180
180
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
181
- const data = {
181
+ const liveness = {
182
182
  lastSeenAt: OneUptimeDate.getCurrentDate(),
183
183
  otelCollectorStatus: "connected",
184
184
  };
185
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
186
+ const data = Object.assign({}, liveness);
185
187
  if (extra === null || extra === void 0 ? void 0 : extra.osType) {
186
188
  data.osType = extra.osType;
187
189
  }
@@ -195,11 +197,46 @@ export class Service extends DatabaseService {
195
197
  * Heartbeat write: a single-statement UPDATE with no hooks and no
196
198
  * `version` bump, avoiding the hot-row Postgres lock convoy that the
197
199
  * full updateOneById pipeline causes. See ServiceService.updateLastSeen.
200
+ *
201
+ * Collector-supplied strings are clamped to their declared column
202
+ * widths inside updateColumnsByIdWithoutHooks — see
203
+ * DatabaseService.truncateStringColumnsToMaxLength.
198
204
  */
199
- await this.updateColumnsByIdWithoutHooks({
200
- id: hostId,
201
- data: data,
202
- });
205
+ try {
206
+ await this.updateColumnsByIdWithoutHooks({
207
+ id: hostId,
208
+ data: data,
209
+ });
210
+ }
211
+ catch (err) {
212
+ /*
213
+ * Liveness must survive bad metadata. The enriched write carries
214
+ * `lastSeenAt` and `otelCollectorStatus` alongside optional,
215
+ * collector-supplied columns; if any one of them makes Postgres
216
+ * reject the statement, lastSeenAt silently stops advancing and
217
+ * markDisconnectedHosts flips a perfectly healthy Podman host to
218
+ * "disconnected" 15 minutes later — with telemetry still arriving the
219
+ * whole time. That was issue #3006 on the Host path (a host.ip list
220
+ * longer than the then-varchar(500) column). Retry with liveness only
221
+ * so the enrichment is what gets dropped, never the heartbeat.
222
+ */
223
+ logger.warn(`PodmanHostService.updateLastSeen: metadata write failed for Podman host ${hostId.toString()}, falling back to a liveness-only update: ${err instanceof Error ? err.message : String(err)}`);
224
+ /*
225
+ * The throttle fingerprint was already stored, so without this the
226
+ * next batch would short-circuit on a cache hit and skip the retry
227
+ * for the rest of the window.
228
+ */
229
+ try {
230
+ await GlobalCache.deleteKey(LAST_SEEN_CACHE_NAMESPACE, cacheKey);
231
+ }
232
+ catch (_f) {
233
+ // Best-effort; the fallback write below is what actually matters.
234
+ }
235
+ await this.updateColumnsByIdWithoutHooks({
236
+ id: hostId,
237
+ data: liveness,
238
+ });
239
+ }
203
240
  }
204
241
  /**
205
242
  * Additively attach labels to a Podman host. Existing labels are
@@ -1 +1 @@
1
- {"version":3,"file":"PodmanHostService.js","sourceRoot":"","sources":["../../../../Server/Services/PodmanHostService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PodmanHostService.js","sourceRoot":"","sources":["../../../../Server/Services/PodmanHostService.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,26 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import DatabaseService from "./DatabaseService";
11
11
  import Model from "../../Models/DatabaseModels/PodmanResource";
12
12
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
13
+ import ColumnLength from "../../Types/Database/ColumnLength";
13
14
  import OneUptimeDate from "../../Types/Date";
15
+ import { truncateLongText, truncateShortText, } from "../Utils/Database/TruncateColumnValue";
14
16
  import logger from "../Utils/Logger";
15
17
  const UPSERT_BATCH_SIZE = 500;
16
18
  const STALE_DELETE_WARN_THRESHOLD = 100;
19
+ /*
20
+ * PodmanResource's text columns are bounded varchars — name / imageName
21
+ * at 500 chars, kind / containerId / state at 100. These bulk paths go
22
+ * through manager.query(), which skips the length validation
23
+ * DatabaseService applies to ordinary writes, so a single oversized
24
+ * value aborts the whole 500-row INSERT chunk it rides in. Clamp per
25
+ * value instead, so one pathological container can never drop the rest.
26
+ */
27
+ function sanitizeContainer(c) {
28
+ return Object.assign(Object.assign({}, c), { containerName: truncateLongText(c.containerName), containerId: truncateShortText(c.containerId), imageName: truncateLongText(c.imageName), state: truncateShortText(c.state) });
29
+ }
30
+ function sanitizeResource(r) {
31
+ return Object.assign(Object.assign({}, r), { kind: truncateShortText(r.kind), name: truncateLongText(r.name), containerId: truncateShortText(r.containerId), imageName: truncateLongText(r.imageName), state: truncateShortText(r.state) });
32
+ }
17
33
  export class Service extends DatabaseService {
18
34
  constructor() {
19
35
  super(Model);
@@ -34,8 +50,15 @@ export class Service extends DatabaseService {
34
50
  if (data.containers.length === 0) {
35
51
  return;
36
52
  }
37
- for (let i = 0; i < data.containers.length; i += UPSERT_BATCH_SIZE) {
38
- const chunk = data.containers.slice(i, i + UPSERT_BATCH_SIZE);
53
+ const containers = data.containers.map((c) => {
54
+ const sanitized = sanitizeContainer(c);
55
+ if (sanitized.containerName !== c.containerName) {
56
+ logger.warn(`PodmanResource container name exceeds ${ColumnLength.LongText} chars; truncated to "${sanitized.containerName}" (host ${data.podmanHostId.toString()}).`);
57
+ }
58
+ return sanitized;
59
+ });
60
+ for (let i = 0; i < containers.length; i += UPSERT_BATCH_SIZE) {
61
+ const chunk = containers.slice(i, i + UPSERT_BATCH_SIZE);
39
62
  const valueFragments = [];
40
63
  const params = [];
41
64
  let p = 1;
@@ -82,8 +105,15 @@ export class Service extends DatabaseService {
82
105
  if (data.resources.length === 0) {
83
106
  return;
84
107
  }
85
- for (let i = 0; i < data.resources.length; i += UPSERT_BATCH_SIZE) {
86
- const chunk = data.resources.slice(i, i + UPSERT_BATCH_SIZE);
108
+ const resources = data.resources.map((r) => {
109
+ const sanitized = sanitizeResource(r);
110
+ if (sanitized.name !== r.name) {
111
+ logger.warn(`PodmanResource name exceeds ${ColumnLength.LongText} chars; truncated to "${sanitized.name}" (host ${data.podmanHostId.toString()}).`);
112
+ }
113
+ return sanitized;
114
+ });
115
+ for (let i = 0; i < resources.length; i += UPSERT_BATCH_SIZE) {
116
+ const chunk = resources.slice(i, i + UPSERT_BATCH_SIZE);
87
117
  const valueFragments = [];
88
118
  const params = [];
89
119
  let p = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"PodmanResourceService.js","sourceRoot":"","sources":["../../../../Server/Services/PodmanResourceService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,4CAA4C,CAAC;AAC/D,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAiDrC,MAAM,iBAAiB,GAAW,GAAG,CAAC;AACtC,MAAM,2BAA2B,GAAW,GAAG,CAAC;AAEhD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED;;;;;;;;;;;OAWG;IAEU,AAAN,KAAK,CAAC,oBAAoB,CAAC,IAIjC;QACC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,KACE,IAAI,CAAC,GAAW,CAAC,EACjB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAC1B,CAAC,IAAI,iBAAiB,EACtB,CAAC;YACD,MAAM,KAAK,GAAiC,IAAI,CAAC,UAAU,CAAC,KAAK,CAC/D,CAAC,EACD,CAAC,GAAG,iBAAiB,CACtB,CAAC;YAEF,MAAM,cAAc,GAAkB,EAAE,CAAC;YACzC,MAAM,MAAM,GAAmB,EAAE,CAAC;YAClC,IAAI,CAAC,GAAW,CAAC,CAAC;YAElB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,cAAc,CAAC,IAAI,CACjB,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,eAAe,CAAC,EAAE,cAAc,CAAC,EAAE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC,EAAE,GAAG,CAC1J,CAAC;gBACF,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAC5B,WAAW,EACX,CAAC,CAAC,aAAa,EACf,CAAC,CAAC,WAAW,EACb,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;oBACjD,CAAC,CAAC,CAAC,CAAC,UAAU;oBACd,CAAC,CAAC,IAAI,EACR,CAAC,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS;oBACnD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;oBACtC,CAAC,CAAC,IAAI,EACR,CAAC,CAAC,UAAU,EACZ,CAAC,CAAC,UAAU,EACZ,CAAC,CACF,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAW;;;;;;;iBAOT,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;OAYnC,CAAC;YAEF,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IAEU,AAAN,KAAK,CAAC,UAAU,CAAC,IAIvB;QACC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAC1E,MAAM,KAAK,GAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAC7D,CAAC,EACD,CAAC,GAAG,iBAAiB,CACtB,CAAC;YAEF,MAAM,cAAc,GAAkB,EAAE,CAAC;YACzC,MAAM,MAAM,GAAmB,EAAE,CAAC;YAClC,IAAI,CAAC,GAAW,CAAC,CAAC;YAElB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,cAAc,CAAC,IAAI,CACjB,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC,EAAE,GAAG,CAChI,CAAC;gBACF,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAC5B,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,WAAW,EACb,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAC1C,CAAC,CAAC,yBAAyB,EAC3B,CAAC,CAAC,UAAU,EACZ,CAAC,CACF,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAW;;;;;;iBAMT,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;OAWnC,CAAC;YAEF,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;;OAGG;IAEU,AAAN,KAAK,CAAC,kBAAkB,CAAC,IAG/B;QACC,MAAM,MAAM,GACV,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,KAAK,CACtC,8EAA8E,EAC9E,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAC/C,CAAC;QAEJ,IAAI,QAAQ,GAAW,CAAC,CAAC;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,MAAM,GAAa,MAAyB,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,QAAQ,GAAG,MAAM,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,GAAG,2BAA2B,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CACT,kCAAkC,QAAQ,wBAAwB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,oDAAoD,CACnJ,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IAEU,AAAN,KAAK,CAAC,yBAAyB,CAAC,IAGtC;QACC,MAAM,IAAI,GAIL,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,KAAK,CAC3C;;;;;;;;iCAQ2B,EAC3B,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAC1D,CAAC;QAEF,MAAM,GAAG,GAEO,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO;YACL,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1D,CAAC;IACJ,CAAC;IAEM,qBAAqB,CAAC,WAAkB;QAC7C,MAAM,OAAO,GAAW,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACxD,OAAO,aAAa,CAAC,gBAAgB,CACnC,WAAW,IAAI,aAAa,CAAC,cAAc,EAAE,EAC7C,CAAC,OAAO,CACT,CAAC;IACJ,CAAC;IAEM,wBAAwB;QAC7B,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAChD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GAAW,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAvOc;IADZ,WAAW,EAAE;;;;mDAuEb;AAWY;IADZ,WAAW,EAAE;;;;yCA4Db;AAOY;IADZ,WAAW,EAAE;;;;iDA0Bb;AASY;IADZ,WAAW,EAAE;;;;wDA8Bb;AAuBH,eAAe,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"PodmanResourceService.js","sourceRoot":"","sources":["../../../../Server/Services/PodmanResourceService.ts"],"names":[],"mappings":"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"}
@@ -433,25 +433,39 @@ export class ProjectService extends DatabaseService {
433
433
  isYearly: plan.getYearlyPlanId() === params.paymentProviderPlanId,
434
434
  endTrialAt: endTrialAt,
435
435
  });
436
- const subscriptionState = await BillingService.getSubscriptionStatus(subscription.subscriptionId);
437
- const meteredSubscriptionState = await BillingService.getSubscriptionStatus(subscription.meteredSubscriptionId);
436
+ const subscriptionState = await this.findSubscriptionStatus(subscription.subscriptionId);
437
+ const meteredSubscriptionState = await this.findSubscriptionStatus(subscription.meteredSubscriptionId);
438
+ const updateData = {
439
+ paymentProviderPlanId: params.paymentProviderPlanId,
440
+ paymentProviderSubscriptionId: subscription.subscriptionId,
441
+ paymentProviderMeteredSubscriptionId: subscription.meteredSubscriptionId,
442
+ paymentProviderSubscriptionSeats: seats,
443
+ trialEndsAt: subscription.trialEndsAt || endTrialAt || new Date(),
444
+ planName: SubscriptionPlan.getPlanType(params.paymentProviderPlanId, getAllEnvVars()),
445
+ };
446
+ if (meteredSubscriptionState) {
447
+ updateData.paymentProviderMeteredSubscriptionStatus =
448
+ meteredSubscriptionState;
449
+ }
450
+ if (subscriptionState) {
451
+ updateData.paymentProviderSubscriptionStatus = subscriptionState;
452
+ }
438
453
  await this.updateOneById({
439
454
  id: project.id,
440
- data: {
441
- paymentProviderPlanId: params.paymentProviderPlanId,
442
- paymentProviderSubscriptionId: subscription.subscriptionId,
443
- paymentProviderMeteredSubscriptionId: subscription.meteredSubscriptionId,
444
- paymentProviderSubscriptionSeats: seats,
445
- trialEndsAt: subscription.trialEndsAt || endTrialAt || new Date(),
446
- planName: SubscriptionPlan.getPlanType(params.paymentProviderPlanId, getAllEnvVars()),
447
- paymentProviderMeteredSubscriptionStatus: meteredSubscriptionState,
448
- paymentProviderSubscriptionStatus: subscriptionState,
449
- },
455
+ data: updateData,
450
456
  props: {
451
457
  isRoot: true,
452
458
  ignoreHooks: true,
453
459
  },
454
460
  });
461
+ /*
462
+ * Raised after the row is written, because the row is what makes these ids
463
+ * unreachable: it now carries the replacements.
464
+ */
465
+ this.alertOnSubscriptionsPendingCancellation({
466
+ projectId: project.id,
467
+ subscriptionIds: subscription.subscriptionIdsPendingCancellation,
468
+ });
455
469
  this.capturePlanChangeAnalytics({
456
470
  project: project,
457
471
  newPlan: plan,
@@ -460,6 +474,89 @@ export class ProjectService extends DatabaseService {
460
474
  });
461
475
  await this.sendSubscriptionChangeWebhookSlackNotification(project.id);
462
476
  }
477
+ /*
478
+ * Reads a subscription's status back, and gives up rather than throwing.
479
+ *
480
+ * This sits between a plan change returning and the project row being
481
+ * written, and that write is what records the subscription ids the plan
482
+ * change produced. A replacement already exists at the payment provider and
483
+ * is already billing by this point, and the row is the only thing in
484
+ * OneUptime that will ever point at it - so a rate limit or a dropped
485
+ * connection reading a status back must not be what stops it being written
486
+ * down. Worse than the missing status: reactivation is retried from
487
+ * BillingInvoiceService whenever the customer's invoices look settled, so a
488
+ * row left pointing at the old id mints another live subscription every
489
+ * time it runs.
490
+ *
491
+ * The status columns are refreshed daily by
492
+ * PaymentProvider:CheckSubscriptionStatus, so leaving one behind costs a
493
+ * day of staleness. Losing the id costs a subscription nobody can find.
494
+ */
495
+ async findSubscriptionStatus(subscriptionId) {
496
+ try {
497
+ return await BillingService.getSubscriptionStatus(subscriptionId);
498
+ }
499
+ catch (err) {
500
+ logger.error(err, { subscriptionId });
501
+ return null;
502
+ }
503
+ }
504
+ /*
505
+ * Raises the subscriptions a plan change replaced but could not cancel.
506
+ *
507
+ * The project row now carries the replacement ids, so these ones exist
508
+ * nowhere in OneUptime any more. They were not billing when the plan change
509
+ * read them and the cancel has already been retried, so this is a loose end
510
+ * rather than a double charge - but it is one nobody will find on their own,
511
+ * which is why the ids travel with the alert instead of only reaching a log
512
+ * line. The replacements also carry them in their payment-provider metadata,
513
+ * as replacedSubscriptionId.
514
+ *
515
+ * Called once the plan change has already been applied and written down, so
516
+ * nothing in here is allowed to throw, and nothing in here is allowed to
517
+ * hold the response open either: failing - or being slow - to raise a loose
518
+ * end must not turn a plan change that worked into one the caller is told
519
+ * failed, or one that never comes back.
520
+ */
521
+ alertOnSubscriptionsPendingCancellation(data) {
522
+ if (!data.subscriptionIds || data.subscriptionIds.length === 0) {
523
+ return;
524
+ }
525
+ logger.error(`Could not cancel subscriptions replaced by a plan change for project ${data.projectId.toString()}. They are still open at the payment provider and have to be cancelled by hand: ${data.subscriptionIds.join(", ")}`, {
526
+ projectId: data.projectId.toString(),
527
+ });
528
+ if (!NotificationSlackWebhookOnSubscriptionUpdate) {
529
+ return;
530
+ }
531
+ const slackMessage = `*Subscriptions could not be cancelled after a plan change:*
532
+ *Project ID:* ${data.projectId.toString()}
533
+ *Subscriptions still open at the payment provider:* ${data.subscriptionIds.join(", ")}
534
+ These are no longer recorded against the project and have to be cancelled by hand.
535
+ `;
536
+ /*
537
+ * Delivery is deliberately not awaited, and neither is reading the
538
+ * configured webhook. SlackUtil retries three times with exponential
539
+ * backoff and sets no HTTP timeout, so awaiting it would let a webhook
540
+ * that hangs hold the plan-change response open with it - for a message
541
+ * whose contents are already on the error log above. Same shape as
542
+ * sendSubscriptionChangeWebhookSlackNotification below.
543
+ */
544
+ try {
545
+ SlackUtil.sendMessageToChannelViaIncomingWebhook({
546
+ url: URL.fromString(NotificationSlackWebhookOnSubscriptionUpdate),
547
+ text: slackMessage,
548
+ }).catch((error) => {
549
+ logger.error("Error sending slack message: " + error, {
550
+ projectId: data.projectId.toString(),
551
+ });
552
+ });
553
+ }
554
+ catch (error) {
555
+ logger.error("Error sending slack message: " + error, {
556
+ projectId: data.projectId.toString(),
557
+ });
558
+ }
559
+ }
463
560
  /*
464
561
  * Pushes a project's trial end date out to a new date, in the payment
465
562
  * provider first and then on the project row.
@@ -1676,11 +1773,13 @@ export class ProjectService extends DatabaseService {
1676
1773
  throw new BadDataException("Subscription plan not found");
1677
1774
  }
1678
1775
  /*
1679
- * Reactivating goes through changePlan, which cancels both subscriptions
1680
- * and creates new ones - so a trial the project still has to run has to be
1681
- * carried onto the replacements explicitly. Otherwise a customer whose
1682
- * trial a master admin extended as a goodwill gesture loses the extension
1683
- * the moment their subscription is reactivated, and is billed right away.
1776
+ * Reactivating goes through changePlan, and it is the one caller that
1777
+ * genuinely lands on its recreate path: the subscriptions being reactivated
1778
+ * are not live, so there is nothing to update and new ones are created. A
1779
+ * trial the project still has to run therefore has to be carried onto the
1780
+ * replacements explicitly. Otherwise a customer whose trial a master admin
1781
+ * extended as a goodwill gesture loses the extension the moment their
1782
+ * subscription is reactivated, and is billed right away.
1684
1783
  *
1685
1784
  * A trial that has already lapsed is not revived: reactivation is not the
1686
1785
  * place to hand out free service.
@@ -1699,15 +1798,26 @@ export class ProjectService extends DatabaseService {
1699
1798
  endTrialAt: endTrialAt,
1700
1799
  });
1701
1800
  // refresh subscription status.
1702
- const subscriptionState = await BillingService.getSubscriptionStatus(result.subscriptionId);
1703
- const meteredSubscriptionState = await BillingService.getSubscriptionStatus(project.paymentProviderMeteredSubscriptionId);
1801
+ const subscriptionState = await this.findSubscriptionStatus(result.subscriptionId);
1802
+ /*
1803
+ * The metered subscription changePlan returns, not the one the project row
1804
+ * still points at. When changePlan replaced the subscriptions the old id
1805
+ * names a cancelled subscription, and its status would be persisted against
1806
+ * the new one.
1807
+ */
1808
+ const meteredSubscriptionState = await this.findSubscriptionStatus(result.meteredSubscriptionId);
1704
1809
  // now update project with new subscription id.
1705
1810
  const updateData = {
1706
1811
  paymentProviderSubscriptionId: result.subscriptionId,
1707
1812
  paymentProviderMeteredSubscriptionId: result.meteredSubscriptionId,
1708
- paymentProviderSubscriptionStatus: subscriptionState,
1709
- paymentProviderMeteredSubscriptionStatus: meteredSubscriptionState,
1710
1813
  };
1814
+ if (subscriptionState) {
1815
+ updateData.paymentProviderSubscriptionStatus = subscriptionState;
1816
+ }
1817
+ if (meteredSubscriptionState) {
1818
+ updateData.paymentProviderMeteredSubscriptionStatus =
1819
+ meteredSubscriptionState;
1820
+ }
1711
1821
  /*
1712
1822
  * The payment provider is the source of truth for the trial the new
1713
1823
  * subscriptions were created with, so its date wins over the one sent.
@@ -1725,6 +1835,10 @@ export class ProjectService extends DatabaseService {
1725
1835
  isRoot: true,
1726
1836
  },
1727
1837
  });
1838
+ this.alertOnSubscriptionsPendingCancellation({
1839
+ projectId: project.id,
1840
+ subscriptionIds: result.subscriptionIdsPendingCancellation,
1841
+ });
1728
1842
  // send slack message on plan change.
1729
1843
  await this.sendSubscriptionChangeWebhookSlackNotification(projectId);
1730
1844
  }