dt-common-device 7.1.13 → 7.2.1
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.
- package/dist/alerts/Alert.model.d.ts +1 -1
- package/dist/alerts/Alert.service.d.ts +6 -10
- package/dist/alerts/Alert.service.js +97 -75
- package/dist/alerts/AlertBuilder.d.ts +0 -4
- package/dist/alerts/AlertBuilder.js +0 -8
- package/dist/alerts/alert.types.d.ts +0 -1
- package/dist/alerts/alert.types.js +0 -1
- package/dist/audit/IAuditProperties.d.ts +3 -1
- package/dist/audit/IAuditProperties.js +2 -0
- package/dist/config/config.js +3 -0
- package/dist/config/constants.js +2 -1
- package/dist/constants/Event.d.ts +30 -0
- package/dist/constants/Event.js +30 -0
- package/dist/db/db.js +2 -2
- package/dist/entities/accessGroup/AccessGroup.repository.d.ts +2 -1
- package/dist/entities/accessGroup/AccessGroup.repository.js +4 -1
- package/dist/entities/accessGroup/AccessGroup.service.d.ts +2 -1
- package/dist/entities/accessGroup/AccessGroup.service.js +4 -3
- package/dist/entities/admin/Admin.repository.d.ts +1 -0
- package/dist/entities/admin/Admin.repository.js +32 -0
- package/dist/entities/admin/Admin.service.d.ts +2 -0
- package/dist/entities/admin/Admin.service.js +14 -0
- package/dist/entities/device/local/services/Device.service.js +2 -1
- package/dist/entities/guest/Guest.repository.d.ts +1 -1
- package/dist/entities/guest/Guest.repository.js +5 -2
- package/dist/entities/guest/Guest.service.d.ts +1 -1
- package/dist/entities/guest/Guest.service.js +4 -1
- package/dist/entities/schedules/Schedule.repository.d.ts +1 -1
- package/dist/entities/schedules/Schedule.repository.js +5 -2
- package/dist/entities/schedules/Schedule.service.d.ts +1 -1
- package/dist/entities/schedules/Schedule.service.js +4 -1
- package/dist/entities/user/User.repository.js +4 -1
- package/dist/entities/user/User.service.d.ts +1 -1
- package/dist/entities/user/User.service.js +4 -1
- package/dist/entities/zone/Zone.service.js +4 -1
- package/dist/issues/Issue.model.d.ts +1 -1
- package/dist/issues/Issue.model.js +4 -0
- package/dist/issues/Issue.service.d.ts +19 -18
- package/dist/issues/Issue.service.js +190 -48
- package/dist/issues/IssueBuilder.d.ts +0 -4
- package/dist/issues/IssueBuilder.js +1 -9
- package/dist/issues/issue.types.d.ts +4 -1
- package/dist/issues/issue.types.js +0 -1
- package/package.json +1 -1
- package/dist/admin/Admin.repository.d.ts +0 -7
- package/dist/admin/Admin.repository.js +0 -182
- package/dist/admin/Admin.service.d.ts +0 -5
- package/dist/admin/Admin.service.js +0 -17
- package/dist/admin/index.d.ts +0 -1
- package/dist/admin/index.js +0 -17
- package/dist/audit/AuditProperties.d.ts +0 -16
- package/dist/audit/AuditProperties.js +0 -2
- package/dist/chronicle/IChronicle.interface.d.ts +0 -14
- package/dist/chronicle/IChronicle.interface.js +0 -2
- package/dist/chronicle/chronicle.service.d.ts +0 -4
- package/dist/chronicle/chronicle.service.js +0 -44
- package/dist/connection/Connection.repository.d.ts +0 -8
- package/dist/connection/Connection.repository.js +0 -92
- package/dist/connection/Connection.service.d.ts +0 -8
- package/dist/connection/Connection.service.js +0 -32
- package/dist/connection/IConnection.d.ts +0 -28
- package/dist/connection/IConnection.js +0 -16
- package/dist/connection/index.d.ts +0 -2
- package/dist/connection/index.js +0 -18
- package/dist/device/cloud/entities/CloudConnection.d.ts +0 -6
- package/dist/device/cloud/entities/CloudConnection.js +0 -6
- package/dist/device/cloud/entities/CloudDevice.d.ts +0 -16
- package/dist/device/cloud/entities/CloudDevice.js +0 -26
- package/dist/device/cloud/entities/CloudDeviceService.d.ts +0 -5
- package/dist/device/cloud/entities/CloudDeviceService.js +0 -9
- package/dist/device/cloud/entities/DeviceFactory.d.ts +0 -7
- package/dist/device/cloud/entities/DeviceFactory.js +0 -80
- package/dist/device/cloud/entities/index.d.ts +0 -3
- package/dist/device/cloud/entities/index.js +0 -19
- package/dist/device/cloud/interface.d.ts +0 -101
- package/dist/device/cloud/interface.js +0 -3
- package/dist/device/cloud/interfaces/ICloudConnection.d.ts +0 -5
- package/dist/device/cloud/interfaces/ICloudConnection.js +0 -2
- package/dist/device/cloud/interfaces/ICloudDevice.d.ts +0 -9
- package/dist/device/cloud/interfaces/ICloudDevice.js +0 -2
- package/dist/device/cloud/interfaces/ICloudDeviceService.d.ts +0 -4
- package/dist/device/cloud/interfaces/ICloudDeviceService.js +0 -2
- package/dist/device/cloud/interfaces/IConnectionService.d.ts +0 -7
- package/dist/device/cloud/interfaces/IConnectionService.js +0 -2
- package/dist/device/cloud/interfaces/IDeviceConnectionService.d.ts +0 -7
- package/dist/device/cloud/interfaces/IDeviceConnectionService.js +0 -3
- package/dist/device/cloud/interfaces/IDeviceFactory.d.ts +0 -4
- package/dist/device/cloud/interfaces/IDeviceFactory.js +0 -2
- package/dist/device/cloud/interfaces/IDeviceService.d.ts +0 -8
- package/dist/device/cloud/interfaces/IDeviceService.js +0 -2
- package/dist/device/cloud/interfaces/IDevicesService.d.ts +0 -9
- package/dist/device/cloud/interfaces/IDevicesService.js +0 -2
- package/dist/device/cloud/interfaces/IHubService.d.ts +0 -5
- package/dist/device/cloud/interfaces/IHubService.js +0 -2
- package/dist/device/cloud/interfaces/IRawDataTransformer.d.ts +0 -4
- package/dist/device/cloud/interfaces/IRawDataTransformer.js +0 -2
- package/dist/device/cloud/interfaces/IRawDevice.d.ts +0 -17
- package/dist/device/cloud/interfaces/IRawDevice.js +0 -11
- package/dist/device/cloud/interfaces/index.d.ts +0 -5
- package/dist/device/cloud/interfaces/index.js +0 -21
- package/dist/device/cloud/services/CloudDevice.service.d.ts +0 -5
- package/dist/device/cloud/services/CloudDevice.service.js +0 -9
- package/dist/device/cloud/services/Connection.service.d.ts +0 -8
- package/dist/device/cloud/services/Connection.service.js +0 -6
- package/dist/device/cloud/services/Device.service.d.ts +0 -39
- package/dist/device/cloud/services/Device.service.js +0 -9
- package/dist/device/cloud/services/DeviceCloudService.d.ts +0 -42
- package/dist/device/cloud/services/DeviceCloudService.js +0 -59
- package/dist/device/cloud/services/DeviceHub.service.d.ts +0 -3
- package/dist/device/cloud/services/DeviceHub.service.js +0 -6
- package/dist/device/cloud/services/Hub.service.d.ts +0 -25
- package/dist/device/cloud/services/Hub.service.js +0 -9
- package/dist/device/cloud/services/SmartThingsDeviceService.d.ts +0 -38
- package/dist/device/cloud/services/SmartThingsDeviceService.js +0 -52
- package/dist/device/cloud/services/index.d.ts +0 -2
- package/dist/device/cloud/services/index.js +0 -18
- package/dist/device/cloud/types.d.ts +0 -52
- package/dist/device/cloud/types.js +0 -15
- package/dist/device/index.d.ts +0 -4
- package/dist/device/index.js +0 -20
- package/dist/device/local/entities/AlertBuilder.d.ts +0 -87
- package/dist/device/local/entities/AlertBuilder.example.d.ts +0 -11
- package/dist/device/local/entities/AlertBuilder.example.js +0 -117
- package/dist/device/local/entities/AlertBuilder.js +0 -179
- package/dist/device/local/entities/IssueBuilder.d.ts +0 -109
- package/dist/device/local/entities/IssueBuilder.example.d.ts +0 -16
- package/dist/device/local/entities/IssueBuilder.example.js +0 -196
- package/dist/device/local/entities/IssueBuilder.js +0 -237
- package/dist/device/local/entities/index.d.ts +0 -2
- package/dist/device/local/entities/index.js +0 -7
- package/dist/device/local/events/EventHandler.d.ts +0 -11
- package/dist/device/local/events/EventHandler.js +0 -86
- package/dist/device/local/events/Events.d.ts +0 -54
- package/dist/device/local/events/Events.js +0 -57
- package/dist/device/local/events/index.d.ts +0 -2
- package/dist/device/local/events/index.js +0 -7
- package/dist/device/local/handler/EventHandler.d.ts +0 -7
- package/dist/device/local/handler/EventHandler.js +0 -44
- package/dist/device/local/interface.d.ts +0 -0
- package/dist/device/local/interface.js +0 -1
- package/dist/device/local/interfaces/IConnection.d.ts +0 -26
- package/dist/device/local/interfaces/IConnection.js +0 -14
- package/dist/device/local/interfaces/IDevice.d.ts +0 -68
- package/dist/device/local/interfaces/IDevice.js +0 -10
- package/dist/device/local/interfaces/IDtDevice.d.ts +0 -16
- package/dist/device/local/interfaces/IDtDevice.js +0 -2
- package/dist/device/local/interfaces/IHub.d.ts +0 -46
- package/dist/device/local/interfaces/IHub.js +0 -2
- package/dist/device/local/interfaces/IProperty.d.ts +0 -29
- package/dist/device/local/interfaces/IProperty.js +0 -2
- package/dist/device/local/interfaces/ISchedule.d.ts +0 -25
- package/dist/device/local/interfaces/ISchedule.js +0 -2
- package/dist/device/local/interfaces/index.d.ts +0 -3
- package/dist/device/local/interfaces/index.js +0 -19
- package/dist/device/local/models/Alert.model.d.ts +0 -28
- package/dist/device/local/models/Alert.model.js +0 -222
- package/dist/device/local/models/Issue.model.d.ts +0 -28
- package/dist/device/local/models/Issue.model.js +0 -260
- package/dist/device/local/repository/Alert.repository.d.ts +0 -106
- package/dist/device/local/repository/Alert.repository.js +0 -374
- package/dist/device/local/repository/Connection.repository.d.ts +0 -8
- package/dist/device/local/repository/Connection.repository.js +0 -92
- package/dist/device/local/repository/Device.repository.d.ts +0 -30
- package/dist/device/local/repository/Device.repository.js +0 -325
- package/dist/device/local/repository/Hub.repository.d.ts +0 -13
- package/dist/device/local/repository/Hub.repository.js +0 -139
- package/dist/device/local/repository/Issue.repository.d.ts +0 -113
- package/dist/device/local/repository/Issue.repository.js +0 -401
- package/dist/device/local/repository/Property.repository.d.ts +0 -8
- package/dist/device/local/repository/Property.repository.js +0 -95
- package/dist/device/local/repository/Schedule.repository.d.ts +0 -9
- package/dist/device/local/repository/Schedule.repository.js +0 -109
- package/dist/device/local/services/Alert.service.d.ts +0 -137
- package/dist/device/local/services/Alert.service.js +0 -475
- package/dist/device/local/services/AlertService.example.d.ts +0 -55
- package/dist/device/local/services/AlertService.example.js +0 -148
- package/dist/device/local/services/Connection.service.d.ts +0 -8
- package/dist/device/local/services/Connection.service.js +0 -32
- package/dist/device/local/services/Device.service.d.ts +0 -40
- package/dist/device/local/services/Device.service.js +0 -391
- package/dist/device/local/services/DeviceHub.service.d.ts +0 -11
- package/dist/device/local/services/DeviceHub.service.js +0 -40
- package/dist/device/local/services/Hub.service.d.ts +0 -12
- package/dist/device/local/services/Hub.service.js +0 -107
- package/dist/device/local/services/Issue.service.d.ts +0 -168
- package/dist/device/local/services/Issue.service.js +0 -642
- package/dist/device/local/services/IssueService.example.d.ts +0 -68
- package/dist/device/local/services/IssueService.example.js +0 -177
- package/dist/device/local/services/Property.service.d.ts +0 -8
- package/dist/device/local/services/Property.service.js +0 -36
- package/dist/device/local/services/Schedule.service.d.ts +0 -9
- package/dist/device/local/services/Schedule.service.js +0 -26
- package/dist/device/local/services/index.d.ts +0 -3
- package/dist/device/local/services/index.js +0 -19
- package/dist/pms/IPms.d.ts +0 -6
- package/dist/pms/IPms.js +0 -10
- package/dist/pms/index.d.ts +0 -1
- package/dist/pms/index.js +0 -17
- package/dist/property/IProperty.d.ts +0 -29
- package/dist/property/IProperty.js +0 -2
- package/dist/property/Property.repository.d.ts +0 -8
- package/dist/property/Property.repository.js +0 -109
- package/dist/property/Property.service.d.ts +0 -8
- package/dist/property/Property.service.js +0 -124
- package/dist/property/index.d.ts +0 -2
- package/dist/property/index.js +0 -18
- package/dist/queue/interfaces/IHttpRequestJob.d.ts +0 -9
- package/dist/queue/interfaces/IHttpRequestJob.js +0 -2
- package/dist/types/alert.types.d.ts +0 -57
- package/dist/types/alert.types.js +0 -22
- package/dist/types/config.types.d.ts +0 -19
- package/dist/types/config.types.js +0 -2
- package/dist/types/index.d.ts +0 -3
- package/dist/types/index.js +0 -19
- package/dist/types/issue.types.d.ts +0 -90
- package/dist/types/issue.types.js +0 -40
- package/dist/utils/http-utils.d.ts +0 -13
- package/dist/utils/http-utils.js +0 -117
|
@@ -52,8 +52,11 @@ let GuestRepository = (() => {
|
|
|
52
52
|
}
|
|
53
53
|
async getGuest(guestId) {
|
|
54
54
|
try {
|
|
55
|
-
const guest = await this.pmsPostgres.query(`SELECT * FROM
|
|
56
|
-
|
|
55
|
+
const guest = await this.pmsPostgres.query(`SELECT * FROM dt_guest WHERE "id" = $1`, [guestId]);
|
|
56
|
+
if (guest.rows.length > 0) {
|
|
57
|
+
return guest.rows[0];
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
57
60
|
}
|
|
58
61
|
catch (error) {
|
|
59
62
|
console.error("Error in getGuest:", error);
|
|
@@ -88,7 +88,10 @@ let GuestService = (() => {
|
|
|
88
88
|
if (!guestId) {
|
|
89
89
|
throw new Error("Guest ID is required");
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
const guest = await this.guestRepository.getGuest(guestId);
|
|
92
|
+
if (!guest)
|
|
93
|
+
return null;
|
|
94
|
+
return guest;
|
|
92
95
|
}
|
|
93
96
|
};
|
|
94
97
|
__setFunctionName(_classThis, "GuestService");
|
|
@@ -52,8 +52,11 @@ let ScheduleRepository = (() => {
|
|
|
52
52
|
}
|
|
53
53
|
async getSchedule(scheduleId) {
|
|
54
54
|
try {
|
|
55
|
-
const schedule = await this.pmsPostgres.query(`SELECT * FROM
|
|
56
|
-
|
|
55
|
+
const schedule = await this.pmsPostgres.query(`SELECT * FROM dt_schedule WHERE "id" = $1`, [scheduleId]);
|
|
56
|
+
if (schedule.rows.length > 0) {
|
|
57
|
+
return schedule.rows[0];
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
57
60
|
}
|
|
58
61
|
catch (error) {
|
|
59
62
|
console.error("Error in getSchedule:", error);
|
|
@@ -88,7 +88,10 @@ let ScheduleService = (() => {
|
|
|
88
88
|
if (!scheduleId) {
|
|
89
89
|
throw new Error("Schedule ID is required");
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
const schedule = await this.scheduleRepository.getSchedule(scheduleId);
|
|
92
|
+
if (!schedule)
|
|
93
|
+
return null;
|
|
94
|
+
return schedule;
|
|
92
95
|
}
|
|
93
96
|
};
|
|
94
97
|
__setFunctionName(_classThis, "ScheduleService");
|
|
@@ -52,7 +52,10 @@ let UserRepository = (() => {
|
|
|
52
52
|
}
|
|
53
53
|
async getUser(userId) {
|
|
54
54
|
const user = await this.postgres.query(`SELECT * FROM dt_users WHERE "id" = $1`, [userId]);
|
|
55
|
-
|
|
55
|
+
if (user.rows.length > 0) {
|
|
56
|
+
return user.rows[0];
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
56
59
|
}
|
|
57
60
|
};
|
|
58
61
|
__setFunctionName(_classThis, "UserRepository");
|
|
@@ -87,7 +87,10 @@ let UserService = (() => {
|
|
|
87
87
|
if (!userId) {
|
|
88
88
|
throw new Error("User ID is required");
|
|
89
89
|
}
|
|
90
|
-
|
|
90
|
+
const user = await this.userRepository.getUser(userId);
|
|
91
|
+
if (!user)
|
|
92
|
+
return null;
|
|
93
|
+
return user;
|
|
91
94
|
}
|
|
92
95
|
};
|
|
93
96
|
__setFunctionName(_classThis, "UserService");
|
|
@@ -88,7 +88,10 @@ let ZoneService = (() => {
|
|
|
88
88
|
if (!zoneId) {
|
|
89
89
|
throw new Error("Zone ID is required");
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
const zone = await this.zoneRepository.getZone(zoneId);
|
|
92
|
+
if (!zone)
|
|
93
|
+
return null;
|
|
94
|
+
return zone;
|
|
92
95
|
}
|
|
93
96
|
};
|
|
94
97
|
__setFunctionName(_classThis, "ZoneService");
|
|
@@ -14,7 +14,7 @@ interface IIssueModel extends Model<IIssueDocument, {}, IIssueMethods> {
|
|
|
14
14
|
findOverdue(includeDeleted?: boolean): Promise<IIssueDocument[]>;
|
|
15
15
|
findUpcoming(days?: number, includeDeleted?: boolean): Promise<IIssueDocument[]>;
|
|
16
16
|
}
|
|
17
|
-
declare const IssueSchema: mongoose.Schema<IIssueDocument, IIssueModel, IIssueMethods, {}, {}, {}, mongoose.DefaultSchemaOptions, IIssueDocument, mongoose.Document<unknown, {}, mongoose.FlatRecord<IIssueDocument>, {}
|
|
17
|
+
declare const IssueSchema: mongoose.Schema<IIssueDocument, IIssueModel, IIssueMethods, {}, {}, {}, mongoose.DefaultSchemaOptions, IIssueDocument, mongoose.Document<unknown, {}, mongoose.FlatRecord<IIssueDocument>, {}, mongoose.ResolveSchemaOptions<mongoose.DefaultSchemaOptions>> & Omit<mongoose.FlatRecord<IIssueDocument> & Required<{
|
|
18
18
|
_id: string;
|
|
19
19
|
}> & {
|
|
20
20
|
__v: number;
|
|
@@ -6,34 +6,30 @@ import { IDevice } from "../entities/device/local/interfaces";
|
|
|
6
6
|
export declare class IssueService {
|
|
7
7
|
private readonly issueRepository;
|
|
8
8
|
constructor();
|
|
9
|
-
/**
|
|
10
|
-
* Create a readiness issue using IssueBuilder
|
|
11
|
-
*/
|
|
12
|
-
createReadinessIssue(data: CreateIssueData): Promise<IIssueDocument>;
|
|
13
9
|
/**
|
|
14
10
|
* Create an operations issue using IssueBuilder
|
|
15
11
|
*/
|
|
16
|
-
createOperationsIssue(data: CreateIssueData): Promise<IIssueDocument>;
|
|
12
|
+
createOperationsIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
|
|
17
13
|
/**
|
|
18
14
|
* Create a security issue using IssueBuilder
|
|
19
15
|
*/
|
|
20
|
-
createSecurityIssue(data: CreateIssueData): Promise<IIssueDocument>;
|
|
16
|
+
createSecurityIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
|
|
21
17
|
/**
|
|
22
18
|
* Create an energy issue using IssueBuilder
|
|
23
19
|
*/
|
|
24
|
-
createEnergyIssue(data: CreateIssueData): Promise<IIssueDocument>;
|
|
20
|
+
createEnergyIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
|
|
25
21
|
/**
|
|
26
22
|
* Create a device-specific issue using IssueBuilder
|
|
27
23
|
*/
|
|
28
|
-
createDeviceIssue(data: CreateIssueData): Promise<IIssueDocument>;
|
|
24
|
+
createDeviceIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
|
|
29
25
|
/**
|
|
30
26
|
* Create a hub-specific issue using IssueBuilder
|
|
31
27
|
*/
|
|
32
|
-
createHubIssue(data: CreateIssueData): Promise<IIssueDocument>;
|
|
28
|
+
createHubIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
|
|
33
29
|
/**
|
|
34
30
|
* Create a user-specific issue using IssueBuilder
|
|
35
31
|
*/
|
|
36
|
-
createUserIssue(data: CreateIssueData): Promise<IIssueDocument>;
|
|
32
|
+
createUserIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
|
|
37
33
|
createCloudAccountAuthorizationIssue(data: {
|
|
38
34
|
propertyId: string;
|
|
39
35
|
entityId: string;
|
|
@@ -42,33 +38,33 @@ export declare class IssueService {
|
|
|
42
38
|
description: string;
|
|
43
39
|
createdBy: string;
|
|
44
40
|
type: IssueType;
|
|
45
|
-
}): Promise<IIssueDocument>;
|
|
41
|
+
}): Promise<IIssueDocument | null>;
|
|
46
42
|
/**
|
|
47
43
|
* Create issue for device going offline longer than baseline
|
|
48
44
|
*/
|
|
49
|
-
createDeviceOfflineIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument>;
|
|
50
|
-
createDoorLeftOpenIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument>;
|
|
45
|
+
createDeviceOfflineIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument | null>;
|
|
46
|
+
createDoorLeftOpenIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument | null>;
|
|
51
47
|
/**
|
|
52
48
|
* Create issue for device battery level below threshold (READINESS + OPERATIONAL + ENERGY)
|
|
53
49
|
*/
|
|
54
|
-
createDeviceBatteryIssue(device: IDevice, batteryLevel: number, threshold: number, source: Source): Promise<IIssueDocument>;
|
|
50
|
+
createDeviceBatteryIssue(device: IDevice, batteryLevel: number, threshold: number, priority: IssuePriority, source: Source): Promise<IIssueDocument | null>;
|
|
55
51
|
/**
|
|
56
52
|
* Create issue for device malfunction (jammed or not accepting codes) (READINESS + OPERATIONAL)
|
|
57
53
|
*/
|
|
58
|
-
createDeviceMalfunctionIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument>;
|
|
54
|
+
createDeviceMalfunctionIssue(device: IDevice, source: Source, reason?: string): Promise<IIssueDocument | null>;
|
|
59
55
|
/**
|
|
60
56
|
* Create a maintenance issue using IssueBuilder
|
|
61
57
|
*/
|
|
62
|
-
createMaintenanceIssue(data: CreateIssueData): Promise<IIssueDocument>;
|
|
58
|
+
createMaintenanceIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
|
|
63
59
|
/**
|
|
64
60
|
* Create a high priority issue using IssueBuilder
|
|
65
61
|
*/
|
|
66
|
-
createHighPriorityIssue(data: CreateIssueData): Promise<IIssueDocument>;
|
|
62
|
+
createHighPriorityIssue(data: CreateIssueData): Promise<IIssueDocument | null>;
|
|
67
63
|
/**
|
|
68
64
|
* Create a new issue with business logic validation
|
|
69
65
|
* Accepts either a CreateIssueData object or an IssueBuilder instance
|
|
70
66
|
*/
|
|
71
|
-
createIssue(issueData: CreateIssueData | IssueBuilder): Promise<IIssueDocument>;
|
|
67
|
+
createIssue(issueData: CreateIssueData | IssueBuilder): Promise<IIssueDocument | null>;
|
|
72
68
|
/**
|
|
73
69
|
* Get issue by ID with business logic
|
|
74
70
|
*/
|
|
@@ -117,6 +113,11 @@ export declare class IssueService {
|
|
|
117
113
|
* Unassign an issue
|
|
118
114
|
*/
|
|
119
115
|
unassignIssue(id: string, unassignedBy: string): Promise<IIssueDocument | null>;
|
|
116
|
+
/**
|
|
117
|
+
* Cancel/Close/Resolve an issue based on query
|
|
118
|
+
* This method will find an issue matching the query and update its status
|
|
119
|
+
*/
|
|
120
|
+
performIssueAction(query: IIssueQuery, action: "cancel" | "close" | "resolve" | "ignore" | "in_progress" | "on_hold", updatedBy: string): Promise<IIssueDocument | null>;
|
|
120
121
|
/**
|
|
121
122
|
* Get issues assigned to a user with business logic
|
|
122
123
|
*/
|
|
@@ -77,7 +77,11 @@ const Issue_repository_1 = require("./Issue.repository");
|
|
|
77
77
|
const Issue_model_1 = require("./Issue.model");
|
|
78
78
|
const issue_types_1 = require("./issue.types");
|
|
79
79
|
const IssueBuilder_1 = require("./IssueBuilder");
|
|
80
|
+
const Service_1 = require("../constants/Service");
|
|
80
81
|
const Admin_service_1 = require("../entities/admin/Admin.service");
|
|
82
|
+
const audit_1 = require("../audit");
|
|
83
|
+
const constants_1 = require("../constants");
|
|
84
|
+
const dt_pub_sub_1 = require("dt-pub-sub");
|
|
81
85
|
let IssueService = (() => {
|
|
82
86
|
let _classDecorators = [(0, typedi_1.Service)()];
|
|
83
87
|
let _classDescriptor;
|
|
@@ -87,29 +91,6 @@ let IssueService = (() => {
|
|
|
87
91
|
constructor() {
|
|
88
92
|
this.issueRepository = typedi_1.default.get(Issue_repository_1.IssueRepository);
|
|
89
93
|
}
|
|
90
|
-
/**
|
|
91
|
-
* Create a readiness issue using IssueBuilder
|
|
92
|
-
*/
|
|
93
|
-
async createReadinessIssue(data) {
|
|
94
|
-
const issueBuilder = IssueBuilder_1.IssueBuilder.createReadinessIssue()
|
|
95
|
-
.setPropertyId(data.propertyId)
|
|
96
|
-
.setTitle(data.title)
|
|
97
|
-
.setDescription(data.description)
|
|
98
|
-
.setCreatedBy(data.createdBy);
|
|
99
|
-
if (data.entityId)
|
|
100
|
-
issueBuilder.setEntityId(data.entityId);
|
|
101
|
-
if (data.entityType)
|
|
102
|
-
issueBuilder.setEntityType(data.entityType);
|
|
103
|
-
if (data.assignedTo)
|
|
104
|
-
issueBuilder.setAssignedTo(data.assignedTo);
|
|
105
|
-
if (data.dueDate)
|
|
106
|
-
issueBuilder.setDueDate(data.dueDate);
|
|
107
|
-
if (data.zoneId)
|
|
108
|
-
issueBuilder.setZoneId(data.zoneId);
|
|
109
|
-
if (data.type)
|
|
110
|
-
issueBuilder.setType(data.type);
|
|
111
|
-
return await this.createIssue(issueBuilder);
|
|
112
|
-
}
|
|
113
94
|
/**
|
|
114
95
|
* Create an operations issue using IssueBuilder
|
|
115
96
|
*/
|
|
@@ -257,7 +238,7 @@ let IssueService = (() => {
|
|
|
257
238
|
propertyId: device.propertyId,
|
|
258
239
|
zoneId: device.zoneId,
|
|
259
240
|
title: "Device Offline - Requires Attention",
|
|
260
|
-
description: `${device.name} has been offline for longer than the threshold time. ${reason ? `Reason: ${reason}
|
|
241
|
+
description: `${device.name} has been offline for longer than the threshold time. ${reason ? `Reason: ${reason}.` : ""}`,
|
|
261
242
|
createdBy: source,
|
|
262
243
|
category: issue_types_1.IssuesCategory.OPERATIONS,
|
|
263
244
|
priority: issue_types_1.IssuePriority.CRITICAL,
|
|
@@ -273,7 +254,7 @@ let IssueService = (() => {
|
|
|
273
254
|
propertyId: device.propertyId,
|
|
274
255
|
zoneId: device.zoneId,
|
|
275
256
|
title: "Door Left Open - Requires Attention",
|
|
276
|
-
description: `${zone?.name} has a door left open, for more than 10 minutes. ${reason ? `Reason: ${reason}
|
|
257
|
+
description: `${zone?.name} has a door left open, for more than 10 minutes. ${reason ? `Reason: ${reason}.` : ""}`,
|
|
277
258
|
createdBy: source,
|
|
278
259
|
category: issue_types_1.IssuesCategory.SECURITY,
|
|
279
260
|
priority: issue_types_1.IssuePriority.HIGH,
|
|
@@ -283,7 +264,7 @@ let IssueService = (() => {
|
|
|
283
264
|
/**
|
|
284
265
|
* Create issue for device battery level below threshold (READINESS + OPERATIONAL + ENERGY)
|
|
285
266
|
*/
|
|
286
|
-
async createDeviceBatteryIssue(device, batteryLevel, threshold, source) {
|
|
267
|
+
async createDeviceBatteryIssue(device, batteryLevel, threshold, priority, source) {
|
|
287
268
|
return await this.createDeviceIssue({
|
|
288
269
|
entityId: device.deviceId,
|
|
289
270
|
entityType: issue_types_1.EntityType.DEVICE,
|
|
@@ -294,7 +275,7 @@ let IssueService = (() => {
|
|
|
294
275
|
description: `${device.name} battery level is ${batteryLevel}%, which is below the property threshold of ${threshold}%.`,
|
|
295
276
|
createdBy: source,
|
|
296
277
|
category: issue_types_1.IssuesCategory.ENERGY,
|
|
297
|
-
priority:
|
|
278
|
+
priority: priority,
|
|
298
279
|
type: issue_types_1.IssueType.BATTERY_LOW,
|
|
299
280
|
});
|
|
300
281
|
}
|
|
@@ -309,7 +290,7 @@ let IssueService = (() => {
|
|
|
309
290
|
propertyId: device.propertyId,
|
|
310
291
|
zoneId: device.zoneId,
|
|
311
292
|
title: `Device Malfunction - Requires Attention`,
|
|
312
|
-
description: `${device.name} is malfunctioning. ${reason ? `Reason: ${reason}
|
|
293
|
+
description: `${device.name} is malfunctioning. ${reason ? `Reason: ${reason}.` : ""}`,
|
|
313
294
|
createdBy: source,
|
|
314
295
|
category: issue_types_1.IssuesCategory.OPERATIONS,
|
|
315
296
|
priority: issue_types_1.IssuePriority.HIGH,
|
|
@@ -353,26 +334,88 @@ let IssueService = (() => {
|
|
|
353
334
|
* Accepts either a CreateIssueData object or an IssueBuilder instance
|
|
354
335
|
*/
|
|
355
336
|
async createIssue(issueData) {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
processedIssueData.dueDate
|
|
373
|
-
|
|
337
|
+
try {
|
|
338
|
+
let processedIssueData;
|
|
339
|
+
// Handle IssueBuilder instance
|
|
340
|
+
if (issueData instanceof IssueBuilder_1.IssueBuilder) {
|
|
341
|
+
processedIssueData = issueData.build();
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
processedIssueData = issueData;
|
|
345
|
+
}
|
|
346
|
+
// Business logic: Validate issue data
|
|
347
|
+
this.validateIssueData(processedIssueData);
|
|
348
|
+
// Business logic: Set default priority if not provided
|
|
349
|
+
if (!processedIssueData.priority) {
|
|
350
|
+
processedIssueData.priority = this.determineDefaultPriority(processedIssueData.category);
|
|
351
|
+
}
|
|
352
|
+
// Business logic: Validate due date is in the future
|
|
353
|
+
if (processedIssueData.dueDate &&
|
|
354
|
+
processedIssueData.dueDate <= new Date()) {
|
|
355
|
+
throw new Error("Due date must be in the future");
|
|
356
|
+
}
|
|
357
|
+
if (processedIssueData?.zoneId && !processedIssueData?.zoneName) {
|
|
358
|
+
const zone = await typedi_1.default.get(Admin_service_1.AdminService).getZone(processedIssueData.zoneId);
|
|
359
|
+
processedIssueData.zoneName = zone?.name || "";
|
|
360
|
+
}
|
|
361
|
+
const existingIssue = await this.query({
|
|
362
|
+
propertyId: processedIssueData.propertyId,
|
|
363
|
+
zoneId: processedIssueData.zoneId,
|
|
364
|
+
entityId: processedIssueData.entityId,
|
|
365
|
+
entityType: processedIssueData.entityType,
|
|
366
|
+
entitySubType: processedIssueData.entitySubType,
|
|
367
|
+
type: processedIssueData.type,
|
|
368
|
+
});
|
|
369
|
+
if (existingIssue.length > 0) {
|
|
370
|
+
await (0, audit_1.pushAudit)({
|
|
371
|
+
auditType: constants_1.DT_EVENT_TYPES.ISSUE.CREATE.SKIPPED,
|
|
372
|
+
auditData: {
|
|
373
|
+
reason: "Issue already exists",
|
|
374
|
+
propertyId: processedIssueData.propertyId,
|
|
375
|
+
entityId: processedIssueData.entityId,
|
|
376
|
+
entityType: processedIssueData.entityType,
|
|
377
|
+
entitySubType: processedIssueData.entitySubType,
|
|
378
|
+
type: processedIssueData.type,
|
|
379
|
+
resource: audit_1.Resource.ISSUE,
|
|
380
|
+
source: processedIssueData.createdBy,
|
|
381
|
+
},
|
|
382
|
+
});
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
const issue = await this.issueRepository.create(processedIssueData);
|
|
386
|
+
await (0, audit_1.pushAudit)({
|
|
387
|
+
auditType: constants_1.DT_EVENT_TYPES.ISSUE.CREATE.SUCCESS,
|
|
388
|
+
auditData: {
|
|
389
|
+
resource: audit_1.Resource.ISSUE,
|
|
390
|
+
source: Service_1.Source.USER,
|
|
391
|
+
propertyId: processedIssueData.propertyId,
|
|
392
|
+
zoneId: processedIssueData.zoneId,
|
|
393
|
+
entityId: processedIssueData.entityId,
|
|
394
|
+
entityType: processedIssueData.entityType,
|
|
395
|
+
entitySubType: processedIssueData.entitySubType,
|
|
396
|
+
type: processedIssueData.type,
|
|
397
|
+
createdBy: processedIssueData.createdBy,
|
|
398
|
+
createdAt: new Date(),
|
|
399
|
+
},
|
|
400
|
+
});
|
|
401
|
+
await dt_pub_sub_1.eventDispatcher.publishEvent(constants_1.DT_EVENT_TYPES.ISSUE.CREATE.SUCCESS, issue, "dt-common-device");
|
|
402
|
+
return issue;
|
|
403
|
+
}
|
|
404
|
+
catch (error) {
|
|
405
|
+
await (0, audit_1.pushAudit)({
|
|
406
|
+
auditType: constants_1.DT_EVENT_TYPES.ISSUE.CREATE.FAILED,
|
|
407
|
+
auditData: {
|
|
408
|
+
resource: audit_1.Resource.ISSUE,
|
|
409
|
+
source: Service_1.Source.USER,
|
|
410
|
+
propertyId: issueData?.propertyId || "",
|
|
411
|
+
zoneId: issueData?.zoneId || "",
|
|
412
|
+
errorMessage: error.message,
|
|
413
|
+
error: error,
|
|
414
|
+
createdBy: issueData?.createdBy || "",
|
|
415
|
+
},
|
|
416
|
+
});
|
|
417
|
+
throw error;
|
|
374
418
|
}
|
|
375
|
-
return await this.issueRepository.create(processedIssueData);
|
|
376
419
|
}
|
|
377
420
|
/**
|
|
378
421
|
* Get issue by ID with business logic
|
|
@@ -585,6 +628,106 @@ let IssueService = (() => {
|
|
|
585
628
|
issueModel.unassign(unassignedBy);
|
|
586
629
|
return await issueModel.save();
|
|
587
630
|
}
|
|
631
|
+
/**
|
|
632
|
+
* Cancel/Close/Resolve an issue based on query
|
|
633
|
+
* This method will find an issue matching the query and update its status
|
|
634
|
+
*/
|
|
635
|
+
async performIssueAction(query, action, updatedBy) {
|
|
636
|
+
try {
|
|
637
|
+
if (!updatedBy) {
|
|
638
|
+
throw new Error("Updated by user is required");
|
|
639
|
+
}
|
|
640
|
+
// Find the issue based on the query
|
|
641
|
+
const issues = await this.query(query);
|
|
642
|
+
if (issues.length === 0) {
|
|
643
|
+
return null; // No issue found matching the query
|
|
644
|
+
}
|
|
645
|
+
if (issues.length > 1) {
|
|
646
|
+
throw new Error(`Multiple issues found matching the query. Please provide more specific criteria.`);
|
|
647
|
+
}
|
|
648
|
+
const issue = issues[0];
|
|
649
|
+
// Check if issue can be cancelled/closed/resolved
|
|
650
|
+
if (issue.status === issue_types_1.IssueStatus.CANCELLED) {
|
|
651
|
+
throw new Error("Issue is already cancelled");
|
|
652
|
+
}
|
|
653
|
+
if (issue.status === issue_types_1.IssueStatus.CLOSED) {
|
|
654
|
+
throw new Error("Issue is already closed");
|
|
655
|
+
}
|
|
656
|
+
if (issue.status === issue_types_1.IssueStatus.RESOLVED) {
|
|
657
|
+
throw new Error("Issue is already resolved");
|
|
658
|
+
}
|
|
659
|
+
if (issue.status === issue_types_1.IssueStatus.IGNORED) {
|
|
660
|
+
throw new Error("Issue is already ignored");
|
|
661
|
+
}
|
|
662
|
+
// Determine the new status based on the action
|
|
663
|
+
let newStatus;
|
|
664
|
+
let updateData = {
|
|
665
|
+
updatedBy,
|
|
666
|
+
updatedAt: new Date(),
|
|
667
|
+
};
|
|
668
|
+
switch (action) {
|
|
669
|
+
case "in_progress":
|
|
670
|
+
newStatus = issue_types_1.IssueStatus.IN_PROGRESS;
|
|
671
|
+
break;
|
|
672
|
+
case "resolve":
|
|
673
|
+
newStatus = issue_types_1.IssueStatus.RESOLVED;
|
|
674
|
+
updateData.resolvedAt = new Date();
|
|
675
|
+
break;
|
|
676
|
+
case "close":
|
|
677
|
+
newStatus = issue_types_1.IssueStatus.CLOSED;
|
|
678
|
+
break;
|
|
679
|
+
case "cancel":
|
|
680
|
+
newStatus = issue_types_1.IssueStatus.CANCELLED;
|
|
681
|
+
break;
|
|
682
|
+
case "on_hold":
|
|
683
|
+
newStatus = issue_types_1.IssueStatus.ON_HOLD;
|
|
684
|
+
break;
|
|
685
|
+
case "ignore":
|
|
686
|
+
newStatus = issue_types_1.IssueStatus.IGNORED;
|
|
687
|
+
break;
|
|
688
|
+
default:
|
|
689
|
+
throw new Error("Invalid action. Must be 'cancel', 'close', or 'resolve'");
|
|
690
|
+
}
|
|
691
|
+
updateData.status = newStatus;
|
|
692
|
+
// Update the issue
|
|
693
|
+
const updatedIssue = await this.updateIssue(issue._id, updateData);
|
|
694
|
+
if (updatedIssue) {
|
|
695
|
+
// Log the action for audit purposes
|
|
696
|
+
console.log(`Issue ${issue._id} has been ${action}ed by ${updatedBy}`);
|
|
697
|
+
await (0, audit_1.pushAudit)({
|
|
698
|
+
auditType: constants_1.DT_EVENT_TYPES.ISSUE.UPDATE.SUCCESS,
|
|
699
|
+
auditData: {
|
|
700
|
+
resource: audit_1.Resource.ISSUE,
|
|
701
|
+
source: Service_1.Source.USER,
|
|
702
|
+
propertyId: issue.propertyId,
|
|
703
|
+
zoneId: issue.zoneId,
|
|
704
|
+
oldStatus: issue.status,
|
|
705
|
+
newStatus,
|
|
706
|
+
action,
|
|
707
|
+
updatedBy,
|
|
708
|
+
updatedAt: new Date(),
|
|
709
|
+
},
|
|
710
|
+
});
|
|
711
|
+
}
|
|
712
|
+
return updatedIssue;
|
|
713
|
+
}
|
|
714
|
+
catch (error) {
|
|
715
|
+
await (0, audit_1.pushAudit)({
|
|
716
|
+
auditType: constants_1.DT_EVENT_TYPES.ISSUE.UPDATE.FAILED,
|
|
717
|
+
auditData: {
|
|
718
|
+
resource: audit_1.Resource.ISSUE,
|
|
719
|
+
source: Service_1.Source.USER,
|
|
720
|
+
propertyId: query.propertyId || "",
|
|
721
|
+
zoneId: query.zoneId || "",
|
|
722
|
+
errorMessage: error.message,
|
|
723
|
+
error: error,
|
|
724
|
+
updatedBy,
|
|
725
|
+
updatedAt: new Date(),
|
|
726
|
+
},
|
|
727
|
+
});
|
|
728
|
+
throw error;
|
|
729
|
+
}
|
|
730
|
+
}
|
|
588
731
|
/**
|
|
589
732
|
* Get issues assigned to a user with business logic
|
|
590
733
|
*/
|
|
@@ -736,7 +879,6 @@ let IssueService = (() => {
|
|
|
736
879
|
determineDefaultPriority(category) {
|
|
737
880
|
// Business logic: Determine default priority based on category
|
|
738
881
|
const categoryPriorities = {
|
|
739
|
-
[issue_types_1.IssuesCategory.READINESS]: issue_types_1.IssuePriority.LOW,
|
|
740
882
|
[issue_types_1.IssuesCategory.OPERATIONS]: issue_types_1.IssuePriority.HIGH,
|
|
741
883
|
[issue_types_1.IssuesCategory.SECURITY]: issue_types_1.IssuePriority.CRITICAL,
|
|
742
884
|
[issue_types_1.IssuesCategory.ENERGY]: issue_types_1.IssuePriority.HIGH,
|
|
@@ -87,10 +87,6 @@ export declare class IssueBuilder {
|
|
|
87
87
|
* Resets the builder to its initial state
|
|
88
88
|
*/
|
|
89
89
|
reset(): this;
|
|
90
|
-
/**
|
|
91
|
-
* Creates a new builder instance with predefined values for common issue types
|
|
92
|
-
*/
|
|
93
|
-
static createReadinessIssue(): IssueBuilder;
|
|
94
90
|
static createOperationsIssue(): IssueBuilder;
|
|
95
91
|
static createSecurityIssue(): IssueBuilder;
|
|
96
92
|
static createEnergyIssue(): IssueBuilder;
|
|
@@ -182,14 +182,6 @@ class IssueBuilder {
|
|
|
182
182
|
this.data = {};
|
|
183
183
|
return this;
|
|
184
184
|
}
|
|
185
|
-
/**
|
|
186
|
-
* Creates a new builder instance with predefined values for common issue types
|
|
187
|
-
*/
|
|
188
|
-
static createReadinessIssue() {
|
|
189
|
-
return new IssueBuilder()
|
|
190
|
-
.setCategory(issue_types_1.IssuesCategory.READINESS)
|
|
191
|
-
.setPriority(issue_types_1.IssuePriority.LOW);
|
|
192
|
-
}
|
|
193
185
|
static createOperationsIssue() {
|
|
194
186
|
return new IssueBuilder()
|
|
195
187
|
.setCategory(issue_types_1.IssuesCategory.OPERATIONS)
|
|
@@ -255,7 +247,7 @@ class IssueBuilder {
|
|
|
255
247
|
*/
|
|
256
248
|
static createMaintenanceIssue(propertyId, type, entityId, entityType) {
|
|
257
249
|
const builder = new IssueBuilder()
|
|
258
|
-
.setCategory(issue_types_1.IssuesCategory.
|
|
250
|
+
.setCategory(issue_types_1.IssuesCategory.OPERATIONS)
|
|
259
251
|
.setPropertyId(propertyId)
|
|
260
252
|
.setType(type)
|
|
261
253
|
.setPriority(issue_types_1.IssuePriority.LOW);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export declare enum IssuesCategory {
|
|
2
|
-
READINESS = "READINESS",
|
|
3
2
|
OPERATIONS = "OPERATIONS",
|
|
4
3
|
SECURITY = "SECURITY",
|
|
5
4
|
ENERGY = "ENERGY",
|
|
@@ -71,6 +70,7 @@ export interface IssueDocument {
|
|
|
71
70
|
category: IssuesCategory;
|
|
72
71
|
propertyId: string;
|
|
73
72
|
zoneId?: string;
|
|
73
|
+
zoneName?: string;
|
|
74
74
|
title: string;
|
|
75
75
|
description: string;
|
|
76
76
|
entityId?: string;
|
|
@@ -93,6 +93,7 @@ export interface CreateIssueData {
|
|
|
93
93
|
category: IssuesCategory;
|
|
94
94
|
propertyId: string;
|
|
95
95
|
zoneId?: string;
|
|
96
|
+
zoneName?: string;
|
|
96
97
|
title: string;
|
|
97
98
|
description: string;
|
|
98
99
|
entityId: string;
|
|
@@ -116,6 +117,7 @@ export interface UpdateIssueData {
|
|
|
116
117
|
priority?: IssuePriority;
|
|
117
118
|
assignedTo?: string;
|
|
118
119
|
updatedBy?: string;
|
|
120
|
+
updatedAt?: Date;
|
|
119
121
|
resolvedAt?: Date;
|
|
120
122
|
dueDate?: Date;
|
|
121
123
|
isDeleted?: boolean;
|
|
@@ -127,6 +129,7 @@ export interface AddCommentData {
|
|
|
127
129
|
export interface IIssueQuery {
|
|
128
130
|
propertyId?: string;
|
|
129
131
|
zoneId?: string;
|
|
132
|
+
zoneName?: string;
|
|
130
133
|
assignedTo?: string;
|
|
131
134
|
status?: IssueStatus;
|
|
132
135
|
priority?: IssuePriority;
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.IssueType = exports.IssuePriority = exports.IssueStatus = exports.EntitySubType = exports.EntityType = exports.IssuesCategory = void 0;
|
|
4
4
|
var IssuesCategory;
|
|
5
5
|
(function (IssuesCategory) {
|
|
6
|
-
IssuesCategory["READINESS"] = "READINESS";
|
|
7
6
|
IssuesCategory["OPERATIONS"] = "OPERATIONS";
|
|
8
7
|
IssuesCategory["SECURITY"] = "SECURITY";
|
|
9
8
|
IssuesCategory["ENERGY"] = "ENERGY";
|
package/package.json
CHANGED