@oneuptime/common 7.0.3882 → 7.0.3899

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 (34) hide show
  1. package/Models/AnalyticsModels/TelemetryAttribute.ts +8 -8
  2. package/Server/API/TelemetryAPI.ts +2 -4
  3. package/Server/API/WorkspaceNotificationRuleAPI.ts +48 -0
  4. package/Server/Services/IncidentService.ts +3 -1
  5. package/Server/Services/OpenTelemetryIngestService.ts +5 -10
  6. package/Server/Services/TelemetryAttributeService.ts +13 -27
  7. package/Server/Services/WorkspaceNotificationRuleService.ts +209 -1
  8. package/Server/Utils/Telemetry/CaptureSpan.ts +7 -1
  9. package/Server/Utils/Telemetry/Telemetry.ts +125 -83
  10. package/Server/Utils/Workspace/Slack/Slack.ts +65 -10
  11. package/Server/Utils/Workspace/WorkspaceBase.ts +9 -0
  12. package/build/dist/Models/AnalyticsModels/TelemetryAttribute.js +8 -8
  13. package/build/dist/Models/AnalyticsModels/TelemetryAttribute.js.map +1 -1
  14. package/build/dist/Server/API/TelemetryAPI.js +2 -3
  15. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  16. package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js +29 -0
  17. package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js.map +1 -0
  18. package/build/dist/Server/Services/IncidentService.js +3 -1
  19. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  20. package/build/dist/Server/Services/OpenTelemetryIngestService.js +5 -7
  21. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  22. package/build/dist/Server/Services/TelemetryAttributeService.js +13 -24
  23. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  24. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +166 -1
  25. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  26. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +1 -1
  27. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
  28. package/build/dist/Server/Utils/Telemetry/Telemetry.js +84 -56
  29. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  30. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +57 -24
  31. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  32. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +9 -0
  33. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  34. package/package.json +2 -2
@@ -1,21 +1,26 @@
1
+ import { Dictionary } from "lodash";
1
2
  import { JSONArray, JSONObject, JSONValue } from "../../../Types/JSON";
2
- import JSONFunctions from "../../../Types/JSONFunctions";
3
3
  import ObjectID from "../../../Types/ObjectID";
4
4
  import TelemetryType from "../../../Types/Telemetry/TelemetryType";
5
- import ArrayUtil from "../../../Utils/Array";
6
5
  import GlobalCache from "../../Infrastructure/GlobalCache";
7
6
  import TelemetryAttributeService from "../../Services/TelemetryAttributeService";
8
7
  import CaptureSpan from "./CaptureSpan";
8
+ import logger from "../Logger";
9
+
10
+ export type AttributeType = string | number | boolean | null;
9
11
 
10
12
  export default class TelemetryUtil {
11
13
  @CaptureSpan()
12
14
  public static async indexAttributes(data: {
13
- attributes: string[];
15
+ attributes: Array<string>;
14
16
  projectId: ObjectID;
15
17
  telemetryType: TelemetryType;
16
18
  }): Promise<void> {
17
19
  // index attributes
18
20
 
21
+ logger.debug("Indexing attributes");
22
+ logger.debug("data: " + JSON.stringify(data, null, 2));
23
+
19
24
  const cacheKey: string =
20
25
  data.projectId.toString() + "_" + data.telemetryType;
21
26
 
@@ -28,7 +33,9 @@ export default class TelemetryUtil {
28
33
 
29
34
  // check if keys are missing in cache
30
35
 
31
- for (const key of data.attributes) {
36
+ const attributeKeys: string[] = data.attributes;
37
+
38
+ for (const key of attributeKeys) {
32
39
  if (!cacheKeys.includes(key)) {
33
40
  isKeysMissingInCache = true;
34
41
  break;
@@ -42,11 +49,9 @@ export default class TelemetryUtil {
42
49
  telemetryType: data.telemetryType,
43
50
  });
44
51
 
45
- const mergedKeys: Array<string> = ArrayUtil.removeDuplicates([
46
- ...dbKeys,
47
- ...data.attributes,
48
- ...cacheKeys,
49
- ]);
52
+ const mergedKeys: Array<string> = Array.from(
53
+ new Set([...dbKeys, ...attributeKeys, ...cacheKeys]),
54
+ );
50
55
 
51
56
  await GlobalCache.setStringArray(
52
57
  "telemetryAttributesKeys",
@@ -62,96 +67,133 @@ export default class TelemetryUtil {
62
67
  }
63
68
  }
64
69
 
70
+ public static getAttributesForServiceIdAndServiceName(data: {
71
+ serviceId: ObjectID;
72
+ serviceName: string;
73
+ }): Dictionary<AttributeType> {
74
+ // get attributes for service id and service name
75
+ return {
76
+ "oneuptime.service.id": data.serviceId.toString(),
77
+ "oneuptime.service.name": data.serviceName,
78
+ };
79
+ }
80
+
65
81
  @CaptureSpan()
66
82
  public static getAttributes(data: {
83
+ prefixKeysWithString: string;
67
84
  items: JSONArray;
68
- telemetryServiceId?: ObjectID;
69
- telemetryServiceName?: string;
70
- }): JSONObject {
85
+ }): Dictionary<AttributeType | Array<AttributeType>> {
71
86
  const { items } = data;
87
+ let { prefixKeysWithString } = data;
72
88
 
73
- const finalObj: JSONObject = {};
74
- // We need to convert this to date.
75
- const attributes: JSONArray = items;
89
+ if (prefixKeysWithString) {
90
+ prefixKeysWithString = prefixKeysWithString + ".";
91
+ }
76
92
 
77
- type GetValueFunction = (value: JSONValue) => JSONValue;
78
-
79
- const getValue: GetValueFunction = (value: JSONValue): JSONValue => {
80
- value = value as JSONObject;
81
-
82
- if (value["stringValue"]) {
83
- value = value["stringValue"] as string;
84
- } else if (value["intValue"]) {
85
- value = value["intValue"] as number;
86
- } else if (value["doubleValue"]) {
87
- value = value["doubleValue"] as number;
88
- } else if (value["boolValue"]) {
89
- value = value["boolValue"] as boolean;
90
- } else if (
91
- value["arrayValue"] &&
92
- (value["arrayValue"] as JSONObject)["values"]
93
- ) {
94
- value = (
95
- (value["arrayValue"] as JSONObject)["values"] as JSONArray
96
- ).map((v: JSONObject) => {
97
- return getValue(v);
98
- });
99
- } else if (
100
- value["mapValue"] &&
101
- (value["mapValue"] as JSONObject)["fields"]
102
- ) {
103
- value = getValue((value["mapValue"] as JSONObject)["fields"]);
104
- } else if (value["nullValue"]) {
105
- value = null;
106
- }
93
+ let finalObj: Dictionary<AttributeType | Array<AttributeType>> = {};
94
+ const attributes: JSONArray = items;
107
95
 
108
- return value;
109
- };
96
+ if (!attributes) {
97
+ return finalObj;
98
+ }
110
99
 
111
- if (attributes) {
112
- for (const attribute of attributes) {
113
- if (attribute["key"] && typeof attribute["key"] === "string") {
114
- const value: JSONValue = getValue(attribute["value"]);
115
- finalObj[attribute["key"]] = value;
100
+ for (const attribute of attributes) {
101
+ if (attribute["key"] && typeof attribute["key"] === "string") {
102
+ const keyWithPrefix: string = `${prefixKeysWithString}${attribute["key"]}`;
103
+
104
+ const value:
105
+ | AttributeType
106
+ | Dictionary<AttributeType>
107
+ | Array<AttributeType> = this.getAttributeValues(
108
+ keyWithPrefix,
109
+ attribute["value"],
110
+ );
111
+
112
+ if (Array.isArray(value)) {
113
+ finalObj = { ...finalObj, [keyWithPrefix]: value };
114
+ } else if (typeof value === "object" && value !== null) {
115
+ finalObj = { ...finalObj, ...(value as Dictionary<AttributeType>) };
116
+ } else {
117
+ finalObj[keyWithPrefix] = value;
116
118
  }
117
119
  }
118
120
  }
119
121
 
120
- // add oneuptime specific attributes
121
- if (!finalObj["oneuptime"]) {
122
- finalObj["oneuptime"] = {};
123
- }
124
-
125
- if (!(finalObj["oneuptime"] as JSONObject)["telemetry"]) {
126
- (finalObj["oneuptime"] as JSONObject)["telemetry"] = {};
127
- }
122
+ return finalObj;
123
+ }
128
124
 
129
- if (
130
- !((finalObj["oneuptime"] as JSONObject)["telemetry"] as JSONObject)[
131
- "service"
132
- ]
125
+ public static getAttributeValues(
126
+ prefixKeysWithString: string,
127
+ value: JSONValue,
128
+ ): AttributeType | Dictionary<AttributeType> | Array<AttributeType> {
129
+ let finalObj:
130
+ | Dictionary<AttributeType>
131
+ | AttributeType
132
+ | Array<AttributeType> = null;
133
+ value = value as JSONObject;
134
+
135
+ if (value["stringValue"]) {
136
+ finalObj = value["stringValue"] as string;
137
+ } else if (value["intValue"]) {
138
+ finalObj = value["intValue"] as number;
139
+ } else if (value["doubleValue"]) {
140
+ finalObj = value["doubleValue"] as number;
141
+ } else if (value["boolValue"]) {
142
+ finalObj = value["boolValue"] as boolean;
143
+ } else if (
144
+ value["arrayValue"] &&
145
+ (value["arrayValue"] as JSONObject)["values"]
133
146
  ) {
134
- ((finalObj["oneuptime"] as JSONObject)["telemetry"] as JSONObject)[
135
- "service"
136
- ] = {};
137
- }
138
-
139
- if (data.telemetryServiceId) {
140
- (
141
- ((finalObj["oneuptime"] as JSONObject)["telemetry"] as JSONObject)[
142
- "service"
143
- ] as JSONObject
144
- )["id"] = data.telemetryServiceId.toString();
147
+ const values: JSONArray = (value["arrayValue"] as JSONObject)[
148
+ "values"
149
+ ] as JSONArray;
150
+ finalObj = values.map((v: JSONObject) => {
151
+ return this.getAttributeValues(
152
+ prefixKeysWithString,
153
+ v,
154
+ ) as AttributeType;
155
+ }) as Array<AttributeType>;
156
+ } else if (
157
+ value["mapValue"] &&
158
+ (value["mapValue"] as JSONObject)["fields"]
159
+ ) {
160
+ const fields: JSONObject = (value["mapValue"] as JSONObject)?.[
161
+ "fields"
162
+ ] as JSONObject;
163
+
164
+ const flattenedFields: Dictionary<AttributeType> = {};
165
+ for (const key in fields) {
166
+ const prefixKey: string = `${prefixKeysWithString}.${key}`;
167
+ const nestedValue: AttributeType | Dictionary<AttributeType> =
168
+ this.getAttributeValues(prefixKey, fields[key]) as AttributeType;
169
+ if (typeof nestedValue === "object" && nestedValue !== null) {
170
+ for (const nestedKey in nestedValue as Dictionary<AttributeType>) {
171
+ flattenedFields[`${prefixKey}.${nestedKey}`] = (
172
+ nestedValue as Dictionary<AttributeType>
173
+ )[nestedKey] as AttributeType;
174
+ }
175
+ } else {
176
+ flattenedFields[prefixKey] = nestedValue;
177
+ }
178
+ }
179
+ finalObj = flattenedFields;
145
180
  }
146
-
147
- if (data.telemetryServiceName) {
148
- (
149
- ((finalObj["oneuptime"] as JSONObject)["telemetry"] as JSONObject)[
150
- "service"
151
- ] as JSONObject
152
- )["name"] = data.telemetryServiceName;
181
+ // kvlistValue
182
+ else if (
183
+ value["kvlistValue"] &&
184
+ (value["kvlistValue"] as JSONObject)["values"]
185
+ ) {
186
+ const values: JSONArray = (value["kvlistValue"] as JSONObject)[
187
+ "values"
188
+ ] as JSONArray;
189
+ finalObj = this.getAttributes({
190
+ prefixKeysWithString,
191
+ items: values,
192
+ }) as Dictionary<AttributeType>;
193
+ } else if (value["nullValue"]) {
194
+ finalObj = null;
153
195
  }
154
196
 
155
- return JSONFunctions.flattenObject(finalObj);
197
+ return finalObj;
156
198
  }
157
199
  }
@@ -30,6 +30,7 @@ import SlackifyMarkdown from "slackify-markdown";
30
30
  import { DropdownOption } from "../../../../UI/Components/Dropdown/Dropdown";
31
31
  import OneUptimeDate from "../../../../Types/Date";
32
32
  import CaptureSpan from "../../Telemetry/CaptureSpan";
33
+ import BadDataException from "../../../../Types/Exception/BadDataException";
33
34
 
34
35
  export default class SlackUtil extends WorkspaceBase {
35
36
  @CaptureSpan()
@@ -123,7 +124,10 @@ export default class SlackUtil extends WorkspaceBase {
123
124
  if ((result.jsonData as JSONObject)?.["ok"] !== true) {
124
125
  logger.error("Invalid response from Slack API:");
125
126
  logger.error(result.jsonData);
126
- throw new BadRequestException("Invalid response");
127
+ const messageFromSlack: string = (result.jsonData as JSONObject)?.[
128
+ "error"
129
+ ] as string;
130
+ throw new BadRequestException("Error from Slack " + messageFromSlack);
127
131
  }
128
132
 
129
133
  logger.debug("Modal shown to user successfully.");
@@ -187,7 +191,10 @@ export default class SlackUtil extends WorkspaceBase {
187
191
  if ((response.jsonData as JSONObject)?.["ok"] !== true) {
188
192
  logger.error("Invalid response from Slack API:");
189
193
  logger.error(response.jsonData);
190
- throw new BadRequestException("Invalid response");
194
+ const messageFromSlack: string = (response.jsonData as JSONObject)?.[
195
+ "error"
196
+ ] as string;
197
+ throw new BadRequestException("Error from Slack " + messageFromSlack);
191
198
  }
192
199
 
193
200
  logger.debug("Channel joined successfully with data:");
@@ -240,7 +247,10 @@ export default class SlackUtil extends WorkspaceBase {
240
247
  if ((response.jsonData as JSONObject)?.["ok"] !== true) {
241
248
  logger.error("Invalid response from Slack API:");
242
249
  logger.error(response.jsonData);
243
- throw new BadRequestException("Invalid response");
250
+ const messageFromSlack: string = (response.jsonData as JSONObject)?.[
251
+ "error"
252
+ ] as string;
253
+ throw new BadRequestException("Error from Slack " + messageFromSlack);
244
254
  }
245
255
 
246
256
  logger.debug("User invited to channel successfully.");
@@ -344,7 +354,7 @@ export default class SlackUtil extends WorkspaceBase {
344
354
 
345
355
  if (!channels[data.channelName]) {
346
356
  logger.error("Channel not found.");
347
- throw new Error("Channel not found.");
357
+ throw new BadDataException("Channel not found.");
348
358
  }
349
359
 
350
360
  logger.debug("Workspace channel ID obtained:");
@@ -386,7 +396,10 @@ export default class SlackUtil extends WorkspaceBase {
386
396
  if ((response.jsonData as JSONObject)?.["ok"] !== true) {
387
397
  logger.error("Invalid response from Slack API:");
388
398
  logger.error(response.jsonData);
389
- throw new BadRequestException("Invalid response");
399
+ const messageFromSlack: string = (response.jsonData as JSONObject)?.[
400
+ "error"
401
+ ] as string;
402
+ throw new BadRequestException("Error from Slack " + messageFromSlack);
390
403
  }
391
404
 
392
405
  if (
@@ -440,7 +453,10 @@ export default class SlackUtil extends WorkspaceBase {
440
453
  if ((response.jsonData as JSONObject)?.["ok"] !== true) {
441
454
  logger.error("Invalid response from Slack API:");
442
455
  logger.error(response.jsonData);
443
- throw new BadRequestException("Invalid response");
456
+ const messageFromSlack: string = (response.jsonData as JSONObject)?.[
457
+ "error"
458
+ ] as string;
459
+ throw new BadRequestException("Error from Slack " + messageFromSlack);
444
460
  }
445
461
 
446
462
  const channels: Dictionary<WorkspaceChannel> = {};
@@ -527,6 +543,33 @@ export default class SlackUtil extends WorkspaceBase {
527
543
  return values;
528
544
  }
529
545
 
546
+ @CaptureSpan()
547
+ public static override async doesChannelExist(data: {
548
+ authToken: string;
549
+ channelName: string;
550
+ }): Promise<boolean> {
551
+ // if channel name starts with #, remove it
552
+ if (data.channelName && data.channelName.startsWith("#")) {
553
+ data.channelName = data.channelName.substring(1);
554
+ }
555
+
556
+ // convert channel name to lowercase
557
+ data.channelName = data.channelName.toLowerCase();
558
+
559
+ // get channel id from channel name
560
+ const channels: Dictionary<WorkspaceChannel> =
561
+ await this.getAllWorkspaceChannels({
562
+ authToken: data.authToken,
563
+ });
564
+
565
+ // if this channel exists
566
+ if (channels[data.channelName]) {
567
+ return true;
568
+ }
569
+
570
+ return false;
571
+ }
572
+
530
573
  @CaptureSpan()
531
574
  public static override async sendMessage(data: {
532
575
  workspaceMessagePayload: WorkspaceMessagePayload;
@@ -664,7 +707,10 @@ export default class SlackUtil extends WorkspaceBase {
664
707
  if ((response.jsonData as JSONObject)?.["ok"] !== true) {
665
708
  logger.error("Invalid response from Slack API:");
666
709
  logger.error(response.jsonData);
667
- throw new BadRequestException("Invalid response");
710
+ const messageFromSlack: string = (response.jsonData as JSONObject)?.[
711
+ "error"
712
+ ] as string;
713
+ throw new BadRequestException("Error from Slack " + messageFromSlack);
668
714
  }
669
715
 
670
716
  logger.debug("Payload blocks sent to channel successfully.");
@@ -736,7 +782,10 @@ export default class SlackUtil extends WorkspaceBase {
736
782
  if ((response.jsonData as JSONObject)?.["ok"] !== true) {
737
783
  logger.error("Invalid response from Slack API:");
738
784
  logger.error(response.jsonData);
739
- throw new BadRequestException("Invalid response");
785
+ const messageFromSlack: string = (response.jsonData as JSONObject)?.[
786
+ "error"
787
+ ] as string;
788
+ throw new BadRequestException("Error from Slack " + messageFromSlack);
740
789
  }
741
790
 
742
791
  if (
@@ -1111,7 +1160,10 @@ export default class SlackUtil extends WorkspaceBase {
1111
1160
  if ((response.jsonData as JSONObject)?.["ok"] !== true) {
1112
1161
  logger.error("Invalid response from Slack API:");
1113
1162
  logger.error(response.jsonData);
1114
- throw new BadRequestException("Invalid response");
1163
+ const messageFromSlack: string = (response.jsonData as JSONObject)?.[
1164
+ "error"
1165
+ ] as string;
1166
+ throw new BadRequestException("Error from Slack " + messageFromSlack);
1115
1167
  }
1116
1168
 
1117
1169
  // check if the user is in the channel
@@ -1175,7 +1227,10 @@ export default class SlackUtil extends WorkspaceBase {
1175
1227
  if ((response.jsonData as JSONObject)?.["ok"] !== true) {
1176
1228
  logger.error("Invalid response from Slack API:");
1177
1229
  logger.error(response.jsonData);
1178
- throw new BadRequestException("Invalid response");
1230
+ const messageFromSlack: string = (response.jsonData as JSONObject)?.[
1231
+ "error"
1232
+ ] as string;
1233
+ throw new BadRequestException("Error from Slack " + messageFromSlack);
1179
1234
  }
1180
1235
 
1181
1236
  // check if the user is in the channel
@@ -48,6 +48,15 @@ export default class WorkspaceBase {
48
48
  }): Promise<boolean> {
49
49
  throw new NotImplementedException();
50
50
  }
51
+
52
+ @CaptureSpan()
53
+ public static async doesChannelExist(_data: {
54
+ authToken: string;
55
+ channelName: string;
56
+ }): Promise<boolean> {
57
+ throw new NotImplementedException();
58
+ }
59
+
51
60
  @CaptureSpan()
52
61
  public static async getUsernameFromUserId(_data: {
53
62
  authToken: string;
@@ -101,11 +101,11 @@ export default class TelemetryAttribute extends AnalyticsBaseModel {
101
101
  },
102
102
  }),
103
103
  new AnalyticsTableColumn({
104
- key: "attribute",
105
- title: "Attribute",
106
- description: "Attribute",
104
+ key: "attributes",
105
+ title: "Attributes",
106
+ description: "Attributes",
107
107
  required: true,
108
- type: TableColumnType.Text,
108
+ type: TableColumnType.JSONArray,
109
109
  accessControl: {
110
110
  read: [
111
111
  Permission.ProjectOwner,
@@ -143,11 +143,11 @@ export default class TelemetryAttribute extends AnalyticsBaseModel {
143
143
  set telemetryType(v) {
144
144
  this.setColumnValue("telemetryType", v);
145
145
  }
146
- get attribute() {
147
- return this.getColumnValue("attribute");
146
+ get attributes() {
147
+ return this.getColumnValue("attributes");
148
148
  }
149
- set attribute(v) {
150
- this.setColumnValue("attribute", v);
149
+ set attributes(v) {
150
+ this.setColumnValue("attributes", v);
151
151
  }
152
152
  }
153
153
  //# sourceMappingURL=TelemetryAttribute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TelemetryAttribute.js","sourceRoot":"","sources":["../../../../Models/AnalyticsModels/TelemetryAttribute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TelemetryAttribute.js","sourceRoot":"","sources":["../../../../Models/AnalyticsModels/TelemetryAttribute.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ import BadDataException from "Common/Types/Exception/BadDataException";
5
5
  import CommonAPI from "./CommonAPI";
6
6
  import TelemetryType from "Common/Types/Telemetry/TelemetryType";
7
7
  import TelemetryAttributeService from "../Services/TelemetryAttributeService";
8
- import ArrayUtil from "Common/Utils/Array";
9
8
  const router = Express.getRouter();
10
9
  router.post("/telemetry/metrics/get-attributes", UserMiddleware.getUserMiddleware, async (req, res, next) => {
11
10
  return getAttributes(req, res, next, TelemetryType.Metric);
@@ -25,10 +24,10 @@ const getAttributes = async (req, res, next, telemetryType) => {
25
24
  if (!databaseProps.tenantId) {
26
25
  return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
27
26
  }
28
- const attributes = ArrayUtil.removeDuplicates(await TelemetryAttributeService.fetchAttributes({
27
+ const attributes = await TelemetryAttributeService.fetchAttributes({
29
28
  projectId: databaseProps.tenantId,
30
29
  telemetryType,
31
- }));
30
+ });
32
31
  return Response.sendJsonObjectResponse(req, res, {
33
32
  attributes: attributes,
34
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TelemetryAPI.js","sourceRoot":"","sources":["../../../../Server/API/TelemetryAPI.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,OAKN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,gBAAgB,MAAM,yCAAyC,CAAC;AACvE,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,aAAa,MAAM,sCAAsC,CAAC;AACjE,OAAO,yBAAyB,MAAM,uCAAuC,CAAC;AAC9E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,MAAM,MAAM,GAAkB,OAAO,CAAC,SAAS,EAAE,CAAC;AAElD,MAAM,CAAC,IAAI,CACT,mCAAmC,EACnC,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;IACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,gCAAgC,EAChC,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;IACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,kCAAkC,EAClC,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;IACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC,CACF,CAAC;AASF,MAAM,aAAa,GAA0B,KAAK,EAChD,GAAmB,EACnB,GAAoB,EACpB,IAAkB,EAClB,aAA4B,EAC5B,EAAE;IACF,IAAI,CAAC;QACH,MAAM,aAAa,GACjB,MAAM,SAAS,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC;QAEzD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,CAC9C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,CAC3C,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAa,SAAS,CAAC,gBAAgB,CACrD,MAAM,yBAAyB,CAAC,eAAe,CAAC;YAC9C,SAAS,EAAE,aAAa,CAAC,QAAQ;YACjC,aAAa;SACd,CAAC,CACH,CAAC;QAEF,OAAO,QAAQ,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE;YAC/C,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"TelemetryAPI.js","sourceRoot":"","sources":["../../../../Server/API/TelemetryAPI.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,OAKN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,gBAAgB,MAAM,yCAAyC,CAAC;AACvE,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,aAAa,MAAM,sCAAsC,CAAC;AACjE,OAAO,yBAAyB,MAAM,uCAAuC,CAAC;AAE9E,MAAM,MAAM,GAAkB,OAAO,CAAC,SAAS,EAAE,CAAC;AAElD,MAAM,CAAC,IAAI,CACT,mCAAmC,EACnC,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;IACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,gCAAgC,EAChC,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;IACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,kCAAkC,EAClC,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;IACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC,CACF,CAAC;AASF,MAAM,aAAa,GAA0B,KAAK,EAChD,GAAmB,EACnB,GAAoB,EACpB,IAAkB,EAClB,aAA4B,EAC5B,EAAE;IACF,IAAI,CAAC;QACH,MAAM,aAAa,GACjB,MAAM,SAAS,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC;QAEzD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,CAC9C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,CAC3C,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GACd,MAAM,yBAAyB,CAAC,eAAe,CAAC;YAC9C,SAAS,EAAE,aAAa,CAAC,QAAQ;YACjC,aAAa;SACd,CAAC,CAAC;QAEL,OAAO,QAAQ,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE;YAC/C,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,29 @@
1
+ import UserMiddleware from "../Middleware/UserAuthorization";
2
+ import WorkspaceNotificationRuleService from "../Services/WorkspaceNotificationRuleService";
3
+ import Response from "../Utils/Response";
4
+ import BaseAPI from "./BaseAPI";
5
+ import CommonAPI from "./CommonAPI";
6
+ import WorkspaceNotificationRule from "Common/Models/DatabaseModels/WorkspaceNotificationRule";
7
+ import ObjectID from "../../Types/ObjectID";
8
+ export default class WorkspaceNotificationRuleAPI extends BaseAPI {
9
+ constructor() {
10
+ var _a;
11
+ super(WorkspaceNotificationRule, WorkspaceNotificationRuleService);
12
+ this.router.get(`${(_a = new this.entityType().getCrudApiPath()) === null || _a === void 0 ? void 0 : _a.toString()}/test/:workspaceNotifcationRuleId`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
13
+ try {
14
+ const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
15
+ await this.service.testRule({
16
+ ruleId: new ObjectID(req.params["workspaceNotifcationRuleId"]),
17
+ props: databaseProps,
18
+ projectId: databaseProps.tenantId,
19
+ testByUserId: databaseProps.userId,
20
+ });
21
+ return Response.sendEmptySuccessResponse(req, res);
22
+ }
23
+ catch (e) {
24
+ next(e);
25
+ }
26
+ });
27
+ }
28
+ }
29
+ //# sourceMappingURL=WorkspaceNotificationRuleAPI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceNotificationRuleAPI.js","sourceRoot":"","sources":["../../../../Server/API/WorkspaceNotificationRuleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,gCAEN,MAAM,8CAA8C,CAAC;AAMtD,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,yBAAyB,MAAM,wDAAwD,CAAC;AAC/F,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,OAGzD;IACC;;QACE,KAAK,CAAC,yBAAyB,EAAE,gCAAgC,CAAC,CAAC;QAEnE,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,GAAG,MAAA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,0CAAE,QAAQ,EAAE,mCAAmC,EACxF,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;YACtE,IAAI,CAAC;gBACH,MAAM,aAAa,GACjB,MAAM,SAAS,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC;gBAEzD,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;oBAC1B,MAAM,EAAE,IAAI,QAAQ,CAClB,GAAG,CAAC,MAAM,CAAC,4BAA4B,CAAW,CACnD;oBACD,KAAK,EAAE,aAAa;oBACpB,SAAS,EAAE,aAAa,CAAC,QAAS;oBAClC,YAAY,EAAE,aAAa,CAAC,MAAO;iBACpC,CAAC,CAAC;gBAEH,OAAO,QAAQ,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -228,7 +228,9 @@ export class Service extends DatabaseService {
228
228
  if (!lastIncident) {
229
229
  return 0;
230
230
  }
231
- return lastIncident.incidentNumber || 0;
231
+ return lastIncident.incidentNumber
232
+ ? Number(lastIncident.incidentNumber)
233
+ : 0;
232
234
  }
233
235
  async onBeforeCreate(createBy) {
234
236
  if (!createBy.props.tenantId && !createBy.props.isRoot) {