@oneuptime/common 7.0.4372 → 7.0.4415

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 (270) hide show
  1. package/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.ts +0 -7
  2. package/Models/AnalyticsModels/AnalyticsBaseModel/CommonModel.ts +2 -15
  3. package/Models/DatabaseModels/Monitor.ts +1 -1
  4. package/Server/API/StatusPageAPI.ts +5 -0
  5. package/Server/Middleware/NotificationMiddleware.ts +2 -0
  6. package/Server/Middleware/ProjectAuthorization.ts +11 -3
  7. package/Server/Middleware/UserAuthorization.ts +1 -0
  8. package/Server/Services/OpenTelemetryIngestService.ts +13 -9
  9. package/Server/Services/StatusPageDomainService.ts +1 -0
  10. package/Server/Types/Database/QueryHelper.ts +22 -22
  11. package/Server/Types/Workflow/Components/JSON/JsonToText.ts +2 -0
  12. package/Server/Types/Workflow/Components/JSON/TextToJson.ts +2 -0
  13. package/Server/Utils/AnalyticsDatabase/Statement.ts +0 -1
  14. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +28 -81
  15. package/Server/Utils/CronTab.ts +2 -0
  16. package/Server/Utils/JsonWebToken.ts +2 -0
  17. package/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.ts +2 -0
  18. package/Server/Utils/Monitor/MonitorResource.ts +1 -0
  19. package/Server/Utils/OpenAPI.ts +47 -20
  20. package/Server/Utils/StartServer.ts +2 -2
  21. package/Server/Utils/VM/VMAPI.ts +3 -0
  22. package/Server/Utils/VM/VMRunner.ts +1 -1
  23. package/Tests/Server/API/BaseAPI.test.ts +1 -3
  24. package/Tests/Server/Middleware/ProjectAuthorization.test.ts +5 -1
  25. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +55 -55
  26. package/Tests/Server/Services/BillingService.test.ts +16 -17
  27. package/Tests/Server/Services/TeamMemberService.test.ts +16 -1
  28. package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +6 -6
  29. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +5 -55
  30. package/Tests/UI/Components/404.test.tsx +12 -7
  31. package/Tests/UI/Components/ConfirmModal.test.tsx +1 -1
  32. package/Tests/UI/Components/DuplicateModel.test.tsx +14 -6
  33. package/Tests/UI/Components/OrderedStatesList.test.tsx +1 -1
  34. package/Types/API/EmptyResponse.ts +2 -1
  35. package/Types/API/StatusCode.ts +1 -1
  36. package/Types/AnalyticsDatabase/TableColumn.ts +0 -26
  37. package/Types/AnalyticsDatabase/TableColumnType.ts +2 -1
  38. package/Types/BaseDatabase/QueryOperator.ts +1 -1
  39. package/Types/Database/TableColumnType.ts +3 -0
  40. package/Types/GenericFunction.ts +1 -1
  41. package/Types/GenericObject.ts +2 -2
  42. package/Types/IP/IP.ts +1 -1
  43. package/Types/Object.ts +1 -1
  44. package/Types/Port.ts +1 -1
  45. package/UI/Components/Accordion/Accordion.tsx +7 -5
  46. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +6 -2
  47. package/UI/Components/Button/Button.tsx +3 -1
  48. package/UI/Components/CategoryCheckbox/CheckboxList.tsx +6 -2
  49. package/UI/Components/CodeEditor/CodeEditor.tsx +12 -4
  50. package/UI/Components/ColorViewer/ColorViewer.tsx +1 -1
  51. package/UI/Components/Date/StartAndEndDate.tsx +36 -48
  52. package/UI/Components/Detail/Detail.tsx +3 -1
  53. package/UI/Components/Dropdown/Dropdown.tsx +12 -13
  54. package/UI/Components/DuplicateModel/DuplicateModel.tsx +1 -1
  55. package/UI/Components/Events/RecurringArrayFieldElement.tsx +2 -2
  56. package/UI/Components/FilePicker/FilePicker.tsx +5 -5
  57. package/UI/Components/Filters/FilterViewer.tsx +3 -3
  58. package/UI/Components/FormModal/BasicFormModal.tsx +1 -1
  59. package/UI/Components/Forms/BasicForm.tsx +1 -1
  60. package/UI/Components/Forms/Fields/FormField.tsx +5 -4
  61. package/UI/Components/Forms/ModelForm.tsx +2 -2
  62. package/UI/Components/Forms/Validation.ts +2 -0
  63. package/UI/Components/FullPageModal/FullPageModal.tsx +1 -1
  64. package/UI/Components/Header/HeaderIconDropdownButton.tsx +2 -2
  65. package/UI/Components/HeaderAlert/HeaderAlert.tsx +1 -1
  66. package/UI/Components/Icon/Icon.tsx +3 -1
  67. package/UI/Components/Image/Image.tsx +1 -1
  68. package/UI/Components/Input/Input.tsx +1 -1
  69. package/UI/Components/List/List.tsx +4 -4
  70. package/UI/Components/LogsViewer/LogItem.tsx +2 -0
  71. package/UI/Components/Modal/ModalFooter.tsx +1 -1
  72. package/UI/Components/ModelDelete/ModelDelete.tsx +1 -1
  73. package/UI/Components/ModelDetail/ModelDetail.tsx +3 -3
  74. package/UI/Components/ModelFormModal/ModelFormModal.tsx +2 -1
  75. package/UI/Components/ModelList/ModelList.tsx +2 -2
  76. package/UI/Components/ModelList/StaticModelList.tsx +4 -4
  77. package/UI/Components/ModelTable/BaseModelTable.tsx +2 -2
  78. package/UI/Components/ModelTable/TableView.tsx +3 -3
  79. package/UI/Components/ObjectID/IDGenerator.tsx +1 -1
  80. package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +4 -2
  81. package/UI/Components/ProgressBar/ProgressBar.tsx +2 -0
  82. package/UI/Components/Radio/Radio.tsx +10 -4
  83. package/UI/Components/Table/Table.tsx +8 -7
  84. package/UI/Components/TableColumnList/TableColumnListComponent.tsx +1 -1
  85. package/UI/Components/Tabs/Tabs.tsx +2 -2
  86. package/UI/Components/TextArea/TextArea.tsx +3 -1
  87. package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +2 -2
  88. package/UI/Utils/Cookie.ts +2 -0
  89. package/UI/Utils/LocalStorage.ts +2 -0
  90. package/UI/Utils/Logger.ts +10 -8
  91. package/UI/Utils/ModelAPI/ModelAPI.ts +2 -2
  92. package/UI/Utils/SessionStorage.ts +2 -0
  93. package/UI/esbuild-config.js +214 -0
  94. package/Utils/Schema/AnalyticsModelSchema.ts +39 -62
  95. package/Utils/Schema/ModelSchema.ts +51 -53
  96. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js +0 -6
  97. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel.js.map +1 -1
  98. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/CommonModel.js +2 -11
  99. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/CommonModel.js.map +1 -1
  100. package/build/dist/Models/DatabaseModels/Monitor.js +1 -1
  101. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  102. package/build/dist/Server/API/StatusPageAPI.js +3 -0
  103. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  104. package/build/dist/Server/Middleware/NotificationMiddleware.js +2 -0
  105. package/build/dist/Server/Middleware/NotificationMiddleware.js.map +1 -1
  106. package/build/dist/Server/Middleware/ProjectAuthorization.js +7 -3
  107. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  108. package/build/dist/Server/Middleware/UserAuthorization.js +1 -0
  109. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  110. package/build/dist/Server/Services/OpenTelemetryIngestService.js +8 -4
  111. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  112. package/build/dist/Server/Services/StatusPageDomainService.js +1 -0
  113. package/build/dist/Server/Services/StatusPageDomainService.js.map +1 -1
  114. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  115. package/build/dist/Server/Types/Workflow/Components/JSON/JsonToText.js +2 -0
  116. package/build/dist/Server/Types/Workflow/Components/JSON/JsonToText.js.map +1 -1
  117. package/build/dist/Server/Types/Workflow/Components/JSON/TextToJson.js +2 -0
  118. package/build/dist/Server/Types/Workflow/Components/JSON/TextToJson.js.map +1 -1
  119. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +0 -1
  120. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  121. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +15 -55
  122. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  123. package/build/dist/Server/Utils/CronTab.js +2 -0
  124. package/build/dist/Server/Utils/CronTab.js.map +1 -1
  125. package/build/dist/Server/Utils/JsonWebToken.js +2 -0
  126. package/build/dist/Server/Utils/JsonWebToken.js.map +1 -1
  127. package/build/dist/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.js +2 -0
  128. package/build/dist/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.js.map +1 -1
  129. package/build/dist/Server/Utils/Monitor/MonitorResource.js +1 -0
  130. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  131. package/build/dist/Server/Utils/OpenAPI.js +22 -10
  132. package/build/dist/Server/Utils/OpenAPI.js.map +1 -1
  133. package/build/dist/Server/Utils/StartServer.js +2 -2
  134. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  135. package/build/dist/Server/Utils/VM/VMAPI.js +3 -0
  136. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  137. package/build/dist/Tests/Server/API/BaseAPI.test.js +1 -3
  138. package/build/dist/Tests/Server/API/BaseAPI.test.js.map +1 -1
  139. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js +4 -1
  140. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js.map +1 -1
  141. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js +51 -41
  142. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js.map +1 -1
  143. package/build/dist/Tests/Server/Services/BillingService.test.js +16 -17
  144. package/build/dist/Tests/Server/Services/BillingService.test.js.map +1 -1
  145. package/build/dist/Tests/Server/Services/TeamMemberService.test.js +15 -1
  146. package/build/dist/Tests/Server/Services/TeamMemberService.test.js.map +1 -1
  147. package/build/dist/Tests/Server/TestingUtils/Services/BillingServiceHelper.js +2 -2
  148. package/build/dist/Tests/Server/TestingUtils/Services/BillingServiceHelper.js.map +1 -1
  149. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +5 -48
  150. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +1 -1
  151. package/build/dist/Tests/UI/Components/404.test.js +8 -3
  152. package/build/dist/Tests/UI/Components/404.test.js.map +1 -1
  153. package/build/dist/Tests/UI/Components/ConfirmModal.test.js +1 -1
  154. package/build/dist/Tests/UI/Components/ConfirmModal.test.js.map +1 -1
  155. package/build/dist/Tests/UI/Components/DuplicateModel.test.js +7 -2
  156. package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +1 -1
  157. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js +1 -1
  158. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js.map +1 -1
  159. package/build/dist/Types/API/StatusCode.js +1 -1
  160. package/build/dist/Types/API/StatusCode.js.map +1 -1
  161. package/build/dist/Types/AnalyticsDatabase/TableColumn.js +0 -19
  162. package/build/dist/Types/AnalyticsDatabase/TableColumn.js.map +1 -1
  163. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js +2 -1
  164. package/build/dist/Types/AnalyticsDatabase/TableColumnType.js.map +1 -1
  165. package/build/dist/Types/Database/TableColumnType.js +3 -0
  166. package/build/dist/Types/Database/TableColumnType.js.map +1 -1
  167. package/build/dist/Types/IP/IP.js +1 -1
  168. package/build/dist/Types/IP/IP.js.map +1 -1
  169. package/build/dist/Types/Port.js +1 -1
  170. package/build/dist/Types/Port.js.map +1 -1
  171. package/build/dist/UI/Components/Accordion/Accordion.js +7 -5
  172. package/build/dist/UI/Components/Accordion/Accordion.js.map +1 -1
  173. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +6 -2
  174. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  175. package/build/dist/UI/Components/Button/Button.js +3 -1
  176. package/build/dist/UI/Components/Button/Button.js.map +1 -1
  177. package/build/dist/UI/Components/CategoryCheckbox/CheckboxList.js +6 -2
  178. package/build/dist/UI/Components/CategoryCheckbox/CheckboxList.js.map +1 -1
  179. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +12 -4
  180. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  181. package/build/dist/UI/Components/ColorViewer/ColorViewer.js +2 -1
  182. package/build/dist/UI/Components/ColorViewer/ColorViewer.js.map +1 -1
  183. package/build/dist/UI/Components/Date/StartAndEndDate.js +22 -24
  184. package/build/dist/UI/Components/Date/StartAndEndDate.js.map +1 -1
  185. package/build/dist/UI/Components/Detail/Detail.js +3 -1
  186. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  187. package/build/dist/UI/Components/Dropdown/Dropdown.js +14 -11
  188. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  189. package/build/dist/UI/Components/DuplicateModel/DuplicateModel.js +2 -1
  190. package/build/dist/UI/Components/DuplicateModel/DuplicateModel.js.map +1 -1
  191. package/build/dist/UI/Components/Events/RecurringArrayFieldElement.js +4 -2
  192. package/build/dist/UI/Components/Events/RecurringArrayFieldElement.js.map +1 -1
  193. package/build/dist/UI/Components/FilePicker/FilePicker.js +8 -5
  194. package/build/dist/UI/Components/FilePicker/FilePicker.js.map +1 -1
  195. package/build/dist/UI/Components/Filters/FilterViewer.js +6 -3
  196. package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
  197. package/build/dist/UI/Components/FormModal/BasicFormModal.js +2 -1
  198. package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
  199. package/build/dist/UI/Components/Forms/BasicForm.js +2 -1
  200. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  201. package/build/dist/UI/Components/Forms/Fields/FormField.js +8 -4
  202. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  203. package/build/dist/UI/Components/Forms/ModelForm.js +4 -2
  204. package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
  205. package/build/dist/UI/Components/Forms/Validation.js +2 -0
  206. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  207. package/build/dist/UI/Components/FullPageModal/FullPageModal.js +2 -1
  208. package/build/dist/UI/Components/FullPageModal/FullPageModal.js.map +1 -1
  209. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +4 -2
  210. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  211. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js +2 -1
  212. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js.map +1 -1
  213. package/build/dist/UI/Components/Icon/Icon.js +3 -1
  214. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  215. package/build/dist/UI/Components/Image/Image.js +2 -1
  216. package/build/dist/UI/Components/Image/Image.js.map +1 -1
  217. package/build/dist/UI/Components/Input/Input.js +2 -1
  218. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  219. package/build/dist/UI/Components/List/List.js +6 -4
  220. package/build/dist/UI/Components/List/List.js.map +1 -1
  221. package/build/dist/UI/Components/LogsViewer/LogItem.js +2 -0
  222. package/build/dist/UI/Components/LogsViewer/LogItem.js.map +1 -1
  223. package/build/dist/UI/Components/Modal/ModalFooter.js +2 -1
  224. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  225. package/build/dist/UI/Components/ModelDelete/ModelDelete.js +2 -1
  226. package/build/dist/UI/Components/ModelDelete/ModelDelete.js.map +1 -1
  227. package/build/dist/UI/Components/ModelDetail/ModelDetail.js +5 -5
  228. package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
  229. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +2 -1
  230. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
  231. package/build/dist/UI/Components/ModelList/ModelList.js +4 -2
  232. package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
  233. package/build/dist/UI/Components/ModelList/StaticModelList.js +7 -5
  234. package/build/dist/UI/Components/ModelList/StaticModelList.js.map +1 -1
  235. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +4 -2
  236. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  237. package/build/dist/UI/Components/ModelTable/TableView.js +6 -3
  238. package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
  239. package/build/dist/UI/Components/ObjectID/IDGenerator.js +2 -1
  240. package/build/dist/UI/Components/ObjectID/IDGenerator.js.map +1 -1
  241. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +4 -2
  242. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
  243. package/build/dist/UI/Components/ProgressBar/ProgressBar.js +2 -0
  244. package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
  245. package/build/dist/UI/Components/Radio/Radio.js +9 -3
  246. package/build/dist/UI/Components/Radio/Radio.js.map +1 -1
  247. package/build/dist/UI/Components/Table/Table.js +12 -7
  248. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  249. package/build/dist/UI/Components/Tabs/Tabs.js +2 -2
  250. package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
  251. package/build/dist/UI/Components/TextArea/TextArea.js +3 -1
  252. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  253. package/build/dist/UI/Utils/Cookie.js +2 -0
  254. package/build/dist/UI/Utils/Cookie.js.map +1 -1
  255. package/build/dist/UI/Utils/LocalStorage.js +2 -0
  256. package/build/dist/UI/Utils/LocalStorage.js.map +1 -1
  257. package/build/dist/UI/Utils/Logger.js.map +1 -1
  258. package/build/dist/UI/Utils/SessionStorage.js +2 -0
  259. package/build/dist/UI/Utils/SessionStorage.js.map +1 -1
  260. package/build/dist/Utils/Schema/AnalyticsModelSchema.js +38 -55
  261. package/build/dist/Utils/Schema/AnalyticsModelSchema.js.map +1 -1
  262. package/build/dist/Utils/Schema/ModelSchema.js +52 -53
  263. package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
  264. package/package.json +3 -1
  265. package/Models/AnalyticsModels/AnalyticsBaseModel/NestedModel.ts +0 -8
  266. package/Models/AnalyticsModels/NestedModels/KeyValueNestedModel.ts +0 -59
  267. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/NestedModel.js +0 -7
  268. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/NestedModel.js.map +0 -1
  269. package/build/dist/Models/AnalyticsModels/NestedModels/KeyValueNestedModel.js +0 -51
  270. package/build/dist/Models/AnalyticsModels/NestedModels/KeyValueNestedModel.js.map +0 -1
@@ -140,13 +140,6 @@ export default class AnalyticsBaseModel extends CommonModel {
140
140
  this.crudApiPath = data.crudApiPath;
141
141
  this.enableRealtimeEventsOn = data.enableRealtimeEventsOn;
142
142
  this.partitionKey = data.partitionKey;
143
-
144
- // initialize Arrays.
145
- for (const column of this.tableColumns) {
146
- if (column.type === TableColumnType.NestedModel) {
147
- this.setColumnValue(column.key, []);
148
- }
149
- }
150
143
  }
151
144
 
152
145
  private _enableWorkflowOn: EnableWorkflowOn | undefined;
@@ -76,7 +76,7 @@ export default class CommonModel {
76
76
  if (column.type === TableColumnType.JSON && typeof value === "string") {
77
77
  try {
78
78
  value = JSONFunctions.parse(value);
79
- } catch (e) {
79
+ } catch {
80
80
  value = {};
81
81
  }
82
82
  }
@@ -91,7 +91,7 @@ export default class CommonModel {
91
91
  if (!Array.isArray(value)) {
92
92
  throw new BadDataException("Not an array");
93
93
  }
94
- } catch (e) {
94
+ } catch {
95
95
  value = [];
96
96
  }
97
97
  }
@@ -207,19 +207,6 @@ export default class CommonModel {
207
207
  return;
208
208
  }
209
209
 
210
- if (recordValue instanceof Array) {
211
- if (recordValue.length > 0 && column.nestedModelType) {
212
- json[column.key] = CommonModel.toJSONArray(
213
- recordValue as Array<CommonModel>,
214
- column.nestedModelType,
215
- );
216
- } else {
217
- json[column.key] = recordValue;
218
- }
219
-
220
- return;
221
- }
222
-
223
210
  json[column.key] = recordValue;
224
211
  });
225
212
 
@@ -531,7 +531,7 @@ export default class Monitor extends BaseModel {
531
531
  ],
532
532
  })
533
533
  @TableColumn({
534
- type: TableColumnType.JSON,
534
+ type: TableColumnType.MonitorSteps,
535
535
  required: false,
536
536
  title: "Monitor Steps",
537
537
  description: "What would you like to monitor and what is the criteria?",
@@ -142,6 +142,10 @@ export default class StatusPageAPI extends BaseAPI<
142
142
  try {
143
143
  statusPageId = new ObjectID(statusPageIdOrDomain);
144
144
  } catch (err) {
145
+ logger.error(
146
+ `Error converting statusPageIdOrDomain to ObjectID: ${statusPageIdOrDomain}`,
147
+ );
148
+ logger.error(err);
145
149
  return Response.sendErrorResponse(
146
150
  req,
147
151
  res,
@@ -224,6 +228,7 @@ export default class StatusPageAPI extends BaseAPI<
224
228
  try {
225
229
  statusPageId = new ObjectID(statusPageIdOrDomain);
226
230
  } catch (err) {
231
+ logger.error(err);
227
232
  return Response.sendErrorResponse(
228
233
  req,
229
234
  res,
@@ -6,6 +6,7 @@ import {
6
6
  } from "../Utils/Express";
7
7
  import JSONWebToken from "../Utils/JsonWebToken";
8
8
  import Response from "../Utils/Response";
9
+ import logger from "../Utils/Logger";
9
10
  import { OnCallInputRequest } from "../../Types/Call/CallRequest";
10
11
  import BadDataException from "../../Types/Exception/BadDataException";
11
12
  import JSONFunctions from "../../Types/JSONFunctions";
@@ -61,6 +62,7 @@ export default class NotificationMiddleware {
61
62
  JSONWebToken.decodeJsonPayload(token),
62
63
  );
63
64
  } catch (e) {
65
+ logger.error(e);
64
66
  return Response.sendErrorResponse(
65
67
  req,
66
68
  res,
@@ -67,7 +67,7 @@ export default class ProjectMiddleware {
67
67
  next: NextFunction,
68
68
  ): Promise<void> {
69
69
  try {
70
- const tenantId: ObjectID | null = this.getProjectId(req);
70
+ let tenantId: ObjectID | null = this.getProjectId(req);
71
71
 
72
72
  const apiKey: ObjectID | null = this.getApiKey(req);
73
73
 
@@ -81,19 +81,27 @@ export default class ProjectMiddleware {
81
81
 
82
82
  let apiKeyModel: ApiKey | null = null;
83
83
 
84
- if (tenantId) {
84
+ if (apiKey) {
85
85
  apiKeyModel = await ApiKeyService.findOneBy({
86
86
  query: {
87
- projectId: tenantId,
88
87
  apiKey: apiKey,
89
88
  expiresAt: QueryHelper.greaterThan(OneUptimeDate.getCurrentDate()),
90
89
  },
91
90
  select: {
92
91
  _id: true,
92
+ projectId: true,
93
93
  },
94
94
  props: { isRoot: true },
95
95
  });
96
96
 
97
+ tenantId = apiKeyModel?.projectId || null;
98
+
99
+ if (!tenantId) {
100
+ throw new BadDataException(
101
+ "Project ID not found for the provided API Key.",
102
+ );
103
+ }
104
+
97
105
  if (apiKeyModel) {
98
106
  (req as OneUptimeRequest).userType = UserType.API;
99
107
  // TODO: Add API key permissions.
@@ -173,6 +173,7 @@ export default class UserMiddleware {
173
173
  oneuptimeRequest.userAuthorization = JSONWebToken.decode(accessToken);
174
174
  } catch (err) {
175
175
  // if the token is invalid or expired, it'll throw this error.
176
+ logger.error(err);
176
177
  oneuptimeRequest.userType = UserType.Public;
177
178
  return next();
178
179
  }
@@ -128,15 +128,19 @@ export default class OTelIngestService {
128
128
  Metric,
129
129
  ) as Metric;
130
130
 
131
- newDbMetric.startTimeUnixNano = datapoint["startTimeUnixNano"] as number;
132
- newDbMetric.startTime = OneUptimeDate.fromUnixNano(
133
- datapoint["startTimeUnixNano"] as number,
134
- );
135
-
136
- newDbMetric.timeUnixNano = datapoint["timeUnixNano"] as number;
137
- newDbMetric.time = OneUptimeDate.fromUnixNano(
138
- datapoint["timeUnixNano"] as number,
139
- );
131
+ if (datapoint["startTimeUnixNano"]) {
132
+ newDbMetric.startTimeUnixNano = datapoint["startTimeUnixNano"] as number;
133
+ newDbMetric.startTime = OneUptimeDate.fromUnixNano(
134
+ datapoint["startTimeUnixNano"] as number,
135
+ );
136
+ }
137
+
138
+ if (datapoint["timeUnixNano"]) {
139
+ newDbMetric.timeUnixNano = datapoint["timeUnixNano"] as number;
140
+ newDbMetric.time = OneUptimeDate.fromUnixNano(
141
+ datapoint["timeUnixNano"] as number,
142
+ );
143
+ }
140
144
 
141
145
  if (Object.keys(datapoint).includes("asInt")) {
142
146
  newDbMetric.value = datapoint["asInt"] as number;
@@ -237,6 +237,7 @@ export class Service extends DatabaseService<StatusPageDomain> {
237
237
 
238
238
  return true;
239
239
  } catch (err) {
240
+ logger.error(err);
240
241
  return false;
241
242
  }
242
243
  }
@@ -271,7 +271,7 @@ export default class QueryHelper {
271
271
  @CaptureSpan()
272
272
  public static greaterThanEqualTo<T extends number | Date>(
273
273
  value: T,
274
- ): FindWhereProperty<T> {
274
+ ): FindWhereProperty<any> {
275
275
  const rid: string = Text.generateRandomText(10);
276
276
  return Raw(
277
277
  (alias: string) => {
@@ -280,13 +280,13 @@ export default class QueryHelper {
280
280
  {
281
281
  [rid]: value,
282
282
  },
283
- ) as FindWhereProperty<T>;
283
+ ) as FindWhereProperty<any>;
284
284
  }
285
285
 
286
286
  @CaptureSpan()
287
287
  public static greaterThanEqualToOrNull<T extends number | Date>(
288
288
  value: T,
289
- ): FindWhereProperty<T> {
289
+ ): FindWhereProperty<any> {
290
290
  const rid: string = Text.generateRandomText(10);
291
291
  return Raw(
292
292
  (alias: string) => {
@@ -295,13 +295,13 @@ export default class QueryHelper {
295
295
  {
296
296
  [rid]: value,
297
297
  },
298
- ) as FindWhereProperty<T>;
298
+ ) as FindWhereProperty<any>;
299
299
  }
300
300
 
301
301
  @CaptureSpan()
302
302
  public static lessThanEqualTo<T extends number | Date>(
303
303
  value: T,
304
- ): FindWhereProperty<T> {
304
+ ): FindWhereProperty<any> {
305
305
  const rid: string = Text.generateRandomText(10);
306
306
  return Raw(
307
307
  (alias: string) => {
@@ -310,13 +310,13 @@ export default class QueryHelper {
310
310
  {
311
311
  [rid]: value,
312
312
  },
313
- ) as FindWhereProperty<T>;
313
+ ) as FindWhereProperty<any>;
314
314
  }
315
315
 
316
316
  @CaptureSpan()
317
317
  public static lessThanOrNull<T extends number | Date>(
318
318
  value: T,
319
- ): FindWhereProperty<T> {
319
+ ): FindWhereProperty<any> {
320
320
  const rid: string = Text.generateRandomText(10);
321
321
  return Raw(
322
322
  (alias: string) => {
@@ -325,13 +325,13 @@ export default class QueryHelper {
325
325
  {
326
326
  [rid]: value,
327
327
  },
328
- ) as FindWhereProperty<T>;
328
+ ) as FindWhereProperty<any>;
329
329
  }
330
330
 
331
331
  @CaptureSpan()
332
332
  public static lessThanEqualToOrNull<T extends number | Date>(
333
333
  value: T,
334
- ): FindWhereProperty<T> {
334
+ ): FindWhereProperty<any> {
335
335
  const rid: string = Text.generateRandomText(10);
336
336
  return Raw(
337
337
  (alias: string) => {
@@ -340,13 +340,13 @@ export default class QueryHelper {
340
340
  {
341
341
  [rid]: value,
342
342
  },
343
- ) as FindWhereProperty<T>;
343
+ ) as FindWhereProperty<any>;
344
344
  }
345
345
 
346
346
  @CaptureSpan()
347
347
  public static greaterThan<T extends number | Date>(
348
348
  value: T,
349
- ): FindWhereProperty<number | Date> {
349
+ ): FindWhereProperty<any> {
350
350
  const rid: string = Text.generateRandomText(10);
351
351
  return Raw(
352
352
  (alias: string) => {
@@ -355,13 +355,13 @@ export default class QueryHelper {
355
355
  {
356
356
  [rid]: value,
357
357
  },
358
- ) as FindWhereProperty<T>;
358
+ ) as FindWhereProperty<any>;
359
359
  }
360
360
 
361
361
  @CaptureSpan()
362
362
  public static greaterThanOrNull<T extends number | Date>(
363
363
  value: T,
364
- ): FindWhereProperty<T> {
364
+ ): FindWhereProperty<any> {
365
365
  const rid: string = Text.generateRandomText(10);
366
366
  return Raw(
367
367
  (alias: string) => {
@@ -370,14 +370,14 @@ export default class QueryHelper {
370
370
  {
371
371
  [rid]: value,
372
372
  },
373
- ) as FindWhereProperty<T>;
373
+ ) as FindWhereProperty<any>;
374
374
  }
375
375
 
376
376
  @CaptureSpan()
377
377
  public static inBetween<T extends number | Date>(
378
378
  startValue: T,
379
379
  endValue: T,
380
- ): FindWhereProperty<T> {
380
+ ): FindWhereProperty<any> {
381
381
  const rid1: string = Text.generateRandomText(10);
382
382
  const rid2: string = Text.generateRandomText(10);
383
383
  return Raw(
@@ -388,14 +388,14 @@ export default class QueryHelper {
388
388
  [rid1]: startValue,
389
389
  [rid2]: endValue,
390
390
  },
391
- ) as FindWhereProperty<T>;
391
+ ) as FindWhereProperty<any>;
392
392
  }
393
393
 
394
394
  @CaptureSpan()
395
395
  public static inBetweenOrNull<T extends number | Date>(
396
396
  startValue: T,
397
397
  endValue: T,
398
- ): FindWhereProperty<T> {
398
+ ): FindWhereProperty<any> {
399
399
  const rid1: string = Text.generateRandomText(10);
400
400
  const rid2: string = Text.generateRandomText(10);
401
401
  return Raw(
@@ -406,14 +406,14 @@ export default class QueryHelper {
406
406
  [rid1]: startValue,
407
407
  [rid2]: endValue,
408
408
  },
409
- ) as FindWhereProperty<T>;
409
+ ) as FindWhereProperty<any>;
410
410
  }
411
411
 
412
412
  @CaptureSpan()
413
413
  public static notInBetween<T extends number | Date>(
414
414
  startValue: T,
415
415
  endValue: T,
416
- ): FindWhereProperty<T> {
416
+ ): FindWhereProperty<any> {
417
417
  const rid1: string = Text.generateRandomText(10);
418
418
  const rid2: string = Text.generateRandomText(10);
419
419
  return Raw(
@@ -424,7 +424,7 @@ export default class QueryHelper {
424
424
  [rid1]: startValue,
425
425
  [rid2]: endValue,
426
426
  },
427
- ) as FindWhereProperty<T>;
427
+ ) as FindWhereProperty<any>;
428
428
  }
429
429
 
430
430
  @CaptureSpan()
@@ -481,7 +481,7 @@ export default class QueryHelper {
481
481
  @CaptureSpan()
482
482
  public static lessThan<T extends number | Date>(
483
483
  value: T,
484
- ): FindWhereProperty<T> {
484
+ ): FindWhereProperty<any> {
485
485
  const rid: string = Text.generateRandomText(10);
486
486
  return Raw(
487
487
  (alias: string) => {
@@ -490,6 +490,6 @@ export default class QueryHelper {
490
490
  {
491
491
  [rid]: value,
492
492
  },
493
- ) as FindWhereProperty<T>;
493
+ ) as FindWhereProperty<any>;
494
494
  }
495
495
  }
@@ -2,6 +2,7 @@ import ComponentCode, { RunOptions, RunReturnType } from "../../ComponentCode";
2
2
  import BadDataException from "../../../../../Types/Exception/BadDataException";
3
3
  import { JSONObject } from "../../../../../Types/JSON";
4
4
  import JSONFunctions from "../../../../../Types/JSONFunctions";
5
+ import logger from "../../../../Utils/Logger";
5
6
  import ComponentMetadata, {
6
7
  Port,
7
8
  } from "../../../../../Types/Workflow/Component";
@@ -74,6 +75,7 @@ export default class JsonToText extends ComponentCode {
74
75
  executePort: successPort,
75
76
  });
76
77
  } catch (err) {
78
+ logger.error(err);
77
79
  options.log("JSON is not in the correct format.");
78
80
  return Promise.resolve({
79
81
  returnValues: {},
@@ -2,6 +2,7 @@ import ComponentCode, { RunOptions, RunReturnType } from "../../ComponentCode";
2
2
  import BadDataException from "../../../../../Types/Exception/BadDataException";
3
3
  import { JSONObject } from "../../../../../Types/JSON";
4
4
  import JSONFunctions from "../../../../../Types/JSONFunctions";
5
+ import logger from "../../../../Utils/Logger";
5
6
  import ComponentMetadata, {
6
7
  Port,
7
8
  } from "../../../../../Types/Workflow/Component";
@@ -72,6 +73,7 @@ export default class TextToJSON extends ComponentCode {
72
73
  executePort: successPort,
73
74
  });
74
75
  } catch (err) {
76
+ logger.error(err);
75
77
  options.log("text is not in the correct format.");
76
78
  return Promise.resolve({
77
79
  returnValues: {},
@@ -169,7 +169,6 @@ export class Statement implements BaseQueryParams {
169
169
  [TableColumnType.Decimal]: "Double",
170
170
  [TableColumnType.Date]: "DateTime",
171
171
  [TableColumnType.JSON]: "JSON",
172
- [TableColumnType.NestedModel]: "Nested",
173
172
  [TableColumnType.ArrayNumber]: "Array(Int32)",
174
173
  [TableColumnType.ArrayText]: "Array(String)",
175
174
  [TableColumnType.LongNumber]: "Int128",
@@ -53,12 +53,18 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
53
53
  const whereStatement: Statement = this.toWhereStatement(updateBy.query);
54
54
 
55
55
  /* eslint-disable prettier/prettier */
56
- const statement: Statement = SQL`
57
- ALTER TABLE ${this.database.getDatasourceOptions().database!}.${this.model.tableName
56
+ const statement: Statement = SQL`
57
+ ALTER TABLE ${this.database.getDatasourceOptions().database!}.${
58
+ this.model.tableName
58
59
  }
59
- UPDATE `.append(setStatement).append(SQL`
60
- WHERE TRUE `).append(whereStatement);
61
- /* eslint-enable prettier/prettier */
60
+ UPDATE `
61
+ .append(setStatement)
62
+ .append(
63
+ SQL`
64
+ WHERE TRUE `
65
+ )
66
+ .append(whereStatement);
67
+ /* eslint-enable prettier/prettier */
62
68
 
63
69
  logger.debug(`${this.model.tableName} Update Statement`);
64
70
  logger.debug(statement);
@@ -71,27 +77,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
71
77
  ): Array<string> {
72
78
  const columnNames: Array<string> = [];
73
79
  for (const column of tableColumns) {
74
- if (column.type === TableColumnType.NestedModel) {
75
- // Example of nested model query:
76
-
77
- /**
78
- *
79
- * INSERT INTO opentelemetry_spans (trace_id, span_id, attributes.key, attributes.value) VALUES
80
- ('trace1', 'span1', ['key1', 'key2'], ['value1', 'value2']),
81
- ('trace2', 'span2', ['keyA', 'keyB'], ['valueA', 'valueB']);
82
- */
83
-
84
- // Nested Model Support.
85
- const nestedModelColumnNames: Array<string> = this.getColumnNames(
86
- column.nestedModel!.tableColumns,
87
- );
88
-
89
- for (const nestedModelColumnName of nestedModelColumnNames) {
90
- columnNames.push(`${column.key}.${nestedModelColumnName}`);
91
- }
92
- } else {
93
- columnNames.push(column.key);
94
- }
80
+ columnNames.push(column.key);
95
81
  }
96
82
 
97
83
  return columnNames;
@@ -168,45 +154,12 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
168
154
  const record: Record = [];
169
155
 
170
156
  for (const column of item.getTableColumns()) {
171
- if (column.type === TableColumnType.NestedModel) {
172
- // Nested Model Support.
173
-
174
- // THis is very werid, but the output should work in a query like this:
175
-
176
- /**
177
- *
178
- * INSERT INTO opentelemetry_spans (trace_id, span_id, attributes.key, attributes.value) VALUES
179
- ('trace1', 'span1', ['key1', 'key2'], ['value1', 'value2']),
180
- ('trace2', 'span2', ['keyA', 'keyB'], ['valueA', 'valueB']);
181
- */
182
-
183
- for (const subColumn of column.nestedModel!.tableColumns) {
184
- const subRecord: Record = [];
185
-
186
- for (const nestedModelItem of item.getColumnValue(
187
- column.key,
188
- ) as Array<CommonModel>) {
189
- const value: RecordValue = this.sanitizeValue(
190
- nestedModelItem.getColumnValue(subColumn.key),
191
- subColumn,
192
- {
193
- isNestedModel: true,
194
- },
195
- );
196
-
197
- subRecord.push(value);
198
- }
199
-
200
- record.push(subRecord);
201
- }
202
- } else {
203
- const value: RecordValue | undefined = this.sanitizeValue(
204
- item.getColumnValue(column.key),
205
- column,
206
- );
157
+ const value: RecordValue | undefined = this.sanitizeValue(
158
+ item.getColumnValue(column.key),
159
+ column,
160
+ );
207
161
 
208
- record.push(value);
209
- }
162
+ record.push(value);
210
163
  }
211
164
 
212
165
  return record;
@@ -625,16 +578,6 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
625
578
  columns.append(SQL`, `);
626
579
  }
627
580
 
628
- let nestedModelColumns: Statement | null = null;
629
-
630
- if (column.type === TableColumnType.NestedModel) {
631
- nestedModelColumns = SQL`(`
632
- .append(
633
- this.toColumnsCreateStatement(column.nestedModel!.tableColumns),
634
- )
635
- .append(SQL`)`);
636
- }
637
-
638
581
  // special case - ClickHouse does not support using an a query parameter
639
582
  // to specify the column name when creating the table
640
583
  const keyStatement: string = column.key;
@@ -649,10 +592,6 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
649
592
  .append(this.toColumnType(column.type))
650
593
  .append(SQL`)`),
651
594
  );
652
-
653
- if (nestedModelColumns) {
654
- columns.append(SQL` `).append(nestedModelColumns);
655
- }
656
595
  }
657
596
 
658
597
  return columns;
@@ -672,26 +611,34 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
672
611
  "Array(String)": TableColumnType.ArrayText,
673
612
  "Array(Int32)": TableColumnType.ArrayNumber,
674
613
  JSON: TableColumnType.JSON, //JSONArray is also JSON
675
- Nested: TableColumnType.NestedModel,
676
614
  Bool: TableColumnType.Boolean,
677
615
  }[clickhouseType];
678
616
  }
679
617
 
680
618
  public toColumnType(type: TableColumnType): Statement {
681
- return {
619
+ const statement: Statement | undefined = {
682
620
  [TableColumnType.Text]: SQL`String`,
683
621
  [TableColumnType.ObjectID]: SQL`String`,
684
622
  [TableColumnType.Boolean]: SQL`Bool`,
685
623
  [TableColumnType.Number]: SQL`Int32`,
686
624
  [TableColumnType.Decimal]: SQL`Double`,
625
+ [TableColumnType.IP]: SQL`String`,
626
+ [TableColumnType.Port]: SQL`String`,
687
627
  [TableColumnType.Date]: SQL`DateTime`,
688
628
  [TableColumnType.JSON]: SQL`String`, // we use JSON as a string because ClickHouse has really good JSON support for string types
689
629
  [TableColumnType.JSONArray]: SQL`String`, // we use JSON as a string because ClickHouse has really good JSON support for string types
690
- [TableColumnType.NestedModel]: SQL`Nested`,
691
630
  [TableColumnType.ArrayNumber]: SQL`Array(Int32)`,
692
631
  [TableColumnType.ArrayText]: SQL`Array(String)`,
693
632
  [TableColumnType.LongNumber]: SQL`Int128`,
694
633
  }[type];
634
+
635
+ if (!statement) {
636
+ throw new BadDataException(
637
+ `Unknown column type: ${type}. Please add support for this column type.`,
638
+ );
639
+ }
640
+
641
+ return statement;
695
642
  }
696
643
 
697
644
  public toDoesColumnExistStatement(columnName: string): string {
@@ -1,5 +1,6 @@
1
1
  import BadDataException from "../../Types/Exception/BadDataException";
2
2
  import CronParser, { CronExpression } from "cron-parser";
3
+ import logger from "./Logger";
3
4
  import CaptureSpan from "./Telemetry/CaptureSpan";
4
5
 
5
6
  export default class CronTab {
@@ -10,6 +11,7 @@ export default class CronTab {
10
11
  const nextExecutionTime: Date = interval.next().toDate();
11
12
  return nextExecutionTime;
12
13
  } catch (error) {
14
+ logger.error(error);
13
15
  throw new BadDataException(`Invalid cron expression: ${crontab}`);
14
16
  }
15
17
  }
@@ -10,6 +10,7 @@ import Timezone from "../../Types/Timezone";
10
10
  import StatusPagePrivateUser from "../../Models/DatabaseModels/StatusPagePrivateUser";
11
11
  import User from "../../Models/DatabaseModels/User";
12
12
  import jwt from "jsonwebtoken";
13
+ import logger from "./Logger";
13
14
  import CaptureSpan from "./Telemetry/CaptureSpan";
14
15
 
15
16
  class JSONWebToken {
@@ -119,6 +120,7 @@ class JSONWebToken {
119
120
  isGlobalLogin: Boolean(decoded["isGlobalLogin"]),
120
121
  };
121
122
  } catch (e) {
123
+ logger.error(e);
122
124
  throw new BadDataException("AccessToken is invalid or expired");
123
125
  }
124
126
  }
@@ -4,6 +4,7 @@ import {
4
4
  CriteriaFilter,
5
5
  } from "../../../../Types/Monitor/CriteriaFilter";
6
6
  import CustomCodeMonitorResponse from "../../../../Types/Monitor/CustomCodeMonitor/CustomCodeMonitorResponse";
7
+ import logger from "../../Logger";
7
8
  import CaptureSpan from "../../Telemetry/CaptureSpan";
8
9
 
9
10
  export default class CustomCodeMonitoringCriteria {
@@ -78,6 +79,7 @@ export default class CustomCodeMonitoringCriteria {
78
79
  thresholdAsNumber = parseFloat(threshold.toString());
79
80
  }
80
81
  } catch (err) {
82
+ logger.error(err);
81
83
  thresholdAsNumber = null;
82
84
  }
83
85
 
@@ -1244,6 +1244,7 @@ export default class MonitorResourceUtil {
1244
1244
  .responseBody as string) || "{}",
1245
1245
  );
1246
1246
  } catch (err) {
1247
+ logger.error(err);
1247
1248
  responseBody = (input.dataToProcess as ProbeMonitorResponse)
1248
1249
  .responseBody as JSONObject;
1249
1250
  }