dt-common-device 1.0.17 → 1.0.19
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/config/config.d.ts +1 -5
- package/dist/config/config.js +3 -7
- package/dist/db/db.js +2 -2
- package/dist/device/cloud/entities/DeviceFactory.js +9 -1
- package/dist/device/local/services/Device.service.d.ts +3 -3
- package/dist/device/local/services/Device.service.js +23 -13
- package/package.json +5 -2
- package/src/config/config.ts +4 -14
- package/src/db/db.ts +2 -2
- package/src/device/cloud/entities/DeviceFactory.ts +13 -1
- package/src/device/local/services/Device.service.ts +34 -16
- package/dist/device/cloud/interface.d.ts +0 -101
- package/dist/device/cloud/interface.js +0 -3
- package/dist/device/cloud/interfaces/IDeviceConnectionService.d.ts +0 -7
- package/dist/device/cloud/interfaces/IDeviceConnectionService.js +0 -3
- package/dist/device/cloud/interfaces/IDevicesService.d.ts +0 -9
- package/dist/device/cloud/interfaces/IDevicesService.js +0 -2
- 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/index.d.ts +0 -4
- package/dist/device/index.js +0 -20
- package/dist/device/local/interface.d.ts +0 -0
- package/dist/device/local/interface.js +0 -1
- package/dist/device/local/services/DeviceHub.service.d.ts +0 -11
- package/dist/device/local/services/DeviceHub.service.js +0 -40
package/dist/config/config.d.ts
CHANGED
|
@@ -7,11 +7,7 @@ export declare function ensureAuditInitialized(): void;
|
|
|
7
7
|
* Returns the PostgreSQL DB URI from environment variables.
|
|
8
8
|
* Throws an error if not set.
|
|
9
9
|
*/
|
|
10
|
-
export declare function getPostgresDbUri():
|
|
11
|
-
baseUri: string;
|
|
12
|
-
dbName: string;
|
|
13
|
-
params: string;
|
|
14
|
-
};
|
|
10
|
+
export declare function getPostgresDbUri(): string;
|
|
15
11
|
/**
|
|
16
12
|
* Returns the Redis DB Host and port from environment variables.
|
|
17
13
|
* Throws an error if not set.
|
package/dist/config/config.js
CHANGED
|
@@ -62,15 +62,11 @@ function ensureAuditInitialized() {
|
|
|
62
62
|
* Throws an error if not set.
|
|
63
63
|
*/
|
|
64
64
|
function getPostgresDbUri() {
|
|
65
|
-
const fullUri = process.env.
|
|
65
|
+
const fullUri = process.env.ADMIN_DB_URI;
|
|
66
66
|
if (!fullUri) {
|
|
67
|
-
throw new Error("dt-common-device:
|
|
67
|
+
throw new Error("dt-common-device: ADMIN_DB_URI must be set in environment variables or .env file");
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
const baseUri = `${url.protocol}//${url.username}:${url.password}@${url.hostname}${url.port ? `:${url.port}` : ""}/`;
|
|
71
|
-
const dbName = url.pathname.replace(/^\//, "").split("?")[0];
|
|
72
|
-
const params = url.search || "";
|
|
73
|
-
return { baseUri, dbName, params };
|
|
69
|
+
return fullUri;
|
|
74
70
|
}
|
|
75
71
|
/**
|
|
76
72
|
* Returns the Redis DB Host and port from environment variables.
|
package/dist/db/db.js
CHANGED
|
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getPostgresClient = getPostgresClient;
|
|
4
4
|
const pg_1 = require("pg");
|
|
5
5
|
const config_1 = require("../config/config");
|
|
6
|
-
const
|
|
6
|
+
const URI = (0, config_1.getPostgresDbUri)();
|
|
7
7
|
let pool = null;
|
|
8
8
|
function getPostgresClient() {
|
|
9
9
|
if (!pool) {
|
|
10
10
|
pool = new pg_1.Pool({
|
|
11
|
-
connectionString:
|
|
11
|
+
connectionString: URI,
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
return pool;
|
|
@@ -7,7 +7,15 @@ class DeviceFactory {
|
|
|
7
7
|
this.localDeviceService = new Device_service_1.LocalDeviceService();
|
|
8
8
|
}
|
|
9
9
|
async getDevice(deviceId) {
|
|
10
|
-
|
|
10
|
+
try {
|
|
11
|
+
return await this.localDeviceService.getDevice(deviceId);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
// Log the error for debugging purposes
|
|
15
|
+
console.error(`DeviceFactory: Failed to get device ${deviceId}:`, error);
|
|
16
|
+
// Re-throw the error with additional context
|
|
17
|
+
throw new Error(`DeviceFactory: Unable to retrieve device ${deviceId}. ${error instanceof Error ? error.message : "Unknown error occurred"}`);
|
|
18
|
+
}
|
|
11
19
|
}
|
|
12
20
|
}
|
|
13
21
|
exports.DeviceFactory = DeviceFactory;
|
|
@@ -13,11 +13,11 @@ export declare class LocalDeviceService {
|
|
|
13
13
|
updateDevice(deviceId: string, body: any): Promise<any>;
|
|
14
14
|
deleteDevice(deviceId: string): Promise<any>;
|
|
15
15
|
getState(deviceId: string): Promise<import("axios").AxiosResponse<any, any>>;
|
|
16
|
-
setState(deviceId: string,
|
|
16
|
+
setState(deviceId: string, newState: any): Promise<void>;
|
|
17
17
|
getStatus(deviceId: string): Promise<import("axios").AxiosResponse<any, any>>;
|
|
18
|
-
setStatus(deviceId: string,
|
|
18
|
+
setStatus(deviceId: string, newStatus: any): Promise<void>;
|
|
19
19
|
getBatteryLevel(deviceId: string): Promise<import("axios").AxiosResponse<any, any>>;
|
|
20
|
-
setBatteryLevel(deviceId: string,
|
|
20
|
+
setBatteryLevel(deviceId: string, newBatteryLevel: any): Promise<void>;
|
|
21
21
|
getMetaData(deviceId: string): Promise<import("axios").AxiosResponse<any, any>>;
|
|
22
22
|
setMetaData(deviceId: string, metaData: Record<string, any>): Promise<void>;
|
|
23
23
|
getDeviceByZone(zoneId: string): Promise<any>;
|
|
@@ -38,7 +38,14 @@ class LocalDeviceService {
|
|
|
38
38
|
await (0, dt_audit_library_1.publishAudit)(payload);
|
|
39
39
|
}
|
|
40
40
|
async getDevice(deviceId, withHubDetails = false) {
|
|
41
|
-
|
|
41
|
+
try {
|
|
42
|
+
const response = await axios_1.default.get(`${this.baseUrl}/devices/${deviceId}?withHubDetails=${withHubDetails} `);
|
|
43
|
+
return response.data;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.log(error);
|
|
47
|
+
throw new Error(`Failed to get device: ${error.message}`);
|
|
48
|
+
}
|
|
42
49
|
}
|
|
43
50
|
async getDevices(deviceIds, withHubDetails = false) {
|
|
44
51
|
return await axios_1.default.get(`${this.baseUrl}/devices`, {
|
|
@@ -74,26 +81,28 @@ class LocalDeviceService {
|
|
|
74
81
|
async getState(deviceId) {
|
|
75
82
|
return await axios_1.default.get(`${this.baseUrl}/devices/${deviceId}/state`);
|
|
76
83
|
}
|
|
77
|
-
async setState(deviceId,
|
|
84
|
+
async setState(deviceId, newState) {
|
|
78
85
|
// If old state and new state are different
|
|
79
|
-
const oldState = await this.getState(deviceId);
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
const oldState = (await this.getState(deviceId))?.data?.state || {};
|
|
87
|
+
const changedKeys = Object.keys(newState).filter((key) => !(0, lodash_1.isEqual)(oldState[key], newState[key]));
|
|
88
|
+
if (changedKeys.length > 0) {
|
|
89
|
+
return await this.eventHandler.onStateChange(deviceId, newState);
|
|
82
90
|
}
|
|
83
91
|
}
|
|
84
92
|
async getStatus(deviceId) {
|
|
85
93
|
return await axios_1.default.get(`${this.baseUrl}/devices/${deviceId}/status`);
|
|
86
94
|
}
|
|
87
|
-
async setStatus(deviceId,
|
|
95
|
+
async setStatus(deviceId, newStatus) {
|
|
88
96
|
// If old status and new status are different
|
|
89
97
|
const oldStatus = await this.getStatus(deviceId);
|
|
90
|
-
|
|
91
|
-
|
|
98
|
+
const changedKeys = Object.keys(newStatus).filter((key) => !(0, lodash_1.isEqual)(oldStatus?.data?.[key], newStatus?.[key]));
|
|
99
|
+
if (changedKeys.length > 0) {
|
|
100
|
+
return await this.eventHandler.onStatusChange(deviceId, newStatus);
|
|
92
101
|
}
|
|
93
102
|
// If both old and new status are offline, check the time difference between the last offline status and current time
|
|
94
103
|
if (oldStatus?.data?.online === false &&
|
|
95
104
|
oldStatus?.data?.lastUpdated &&
|
|
96
|
-
|
|
105
|
+
newStatus?.online === false) {
|
|
97
106
|
const lastOfflineTime = new Date(oldStatus?.data?.lastUpdated).getTime();
|
|
98
107
|
const currentTime = Date.now();
|
|
99
108
|
const timeDifference = currentTime - lastOfflineTime;
|
|
@@ -106,14 +115,15 @@ class LocalDeviceService {
|
|
|
106
115
|
async getBatteryLevel(deviceId) {
|
|
107
116
|
return await axios_1.default.get(`${this.baseUrl}/devices/${deviceId}/battery-level`);
|
|
108
117
|
}
|
|
109
|
-
async setBatteryLevel(deviceId,
|
|
118
|
+
async setBatteryLevel(deviceId, newBatteryLevel) {
|
|
110
119
|
// If old battery level and new battery level are different
|
|
111
120
|
const oldBatteryLevel = await this.getBatteryLevel(deviceId);
|
|
112
|
-
|
|
113
|
-
|
|
121
|
+
const changedKeys = Object.keys(newBatteryLevel).filter((key) => !(0, lodash_1.isEqual)(oldBatteryLevel?.data?.[key], newBatteryLevel?.[key]));
|
|
122
|
+
if (changedKeys.length > 0) {
|
|
123
|
+
return await this.eventHandler.onBatteryLevelChange(deviceId, newBatteryLevel);
|
|
114
124
|
}
|
|
115
125
|
// If current battery level is less than 20% and lsat updated time is more than 8 hours, raise an energy alert
|
|
116
|
-
if (
|
|
126
|
+
if (newBatteryLevel?.value < 20 &&
|
|
117
127
|
oldBatteryLevel?.data?.value < 20 &&
|
|
118
128
|
new Date(oldBatteryLevel?.data?.lastUpdated).getTime() <
|
|
119
129
|
Date.now() - 1000 * 60 * 60 * 8) {
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dt-common-device",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.19",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"build": "tsc",
|
|
7
|
+
"build": "tsc ",
|
|
8
|
+
"patch": "npm version patch && npm run build",
|
|
9
|
+
"minor": "npm version minor && npm run build",
|
|
10
|
+
"major": "npm version major && npm run build",
|
|
8
11
|
"security:audit": "npm audit --audit-level=moderate",
|
|
9
12
|
"security:fix": "npm audit fix",
|
|
10
13
|
"security:check": "npm audit && npm outdated",
|
package/src/config/config.ts
CHANGED
|
@@ -68,24 +68,14 @@ export function ensureAuditInitialized() {
|
|
|
68
68
|
* Returns the PostgreSQL DB URI from environment variables.
|
|
69
69
|
* Throws an error if not set.
|
|
70
70
|
*/
|
|
71
|
-
export function getPostgresDbUri(): {
|
|
72
|
-
|
|
73
|
-
dbName: string;
|
|
74
|
-
params: string;
|
|
75
|
-
} {
|
|
76
|
-
const fullUri = process.env.DATABASE_URL;
|
|
71
|
+
export function getPostgresDbUri(): string {
|
|
72
|
+
const fullUri = process.env.ADMIN_DB_URI;
|
|
77
73
|
if (!fullUri) {
|
|
78
74
|
throw new Error(
|
|
79
|
-
"dt-common-device:
|
|
75
|
+
"dt-common-device: ADMIN_DB_URI must be set in environment variables or .env file"
|
|
80
76
|
);
|
|
81
77
|
}
|
|
82
|
-
|
|
83
|
-
const baseUri = `${url.protocol}//${url.username}:${url.password}@${
|
|
84
|
-
url.hostname
|
|
85
|
-
}${url.port ? `:${url.port}` : ""}/`;
|
|
86
|
-
const dbName = url.pathname.replace(/^\//, "").split("?")[0];
|
|
87
|
-
const params = url.search || "";
|
|
88
|
-
return { baseUri, dbName, params };
|
|
78
|
+
return fullUri;
|
|
89
79
|
}
|
|
90
80
|
|
|
91
81
|
/**
|
package/src/db/db.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Pool } from "pg";
|
|
2
2
|
import { getPostgresDbUri } from "../config/config";
|
|
3
3
|
|
|
4
|
-
const
|
|
4
|
+
const URI = getPostgresDbUri();
|
|
5
5
|
|
|
6
6
|
let pool: Pool | null = null;
|
|
7
7
|
|
|
8
8
|
export function getPostgresClient() {
|
|
9
9
|
if (!pool) {
|
|
10
10
|
pool = new Pool({
|
|
11
|
-
connectionString:
|
|
11
|
+
connectionString: URI,
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
return pool;
|
|
@@ -9,6 +9,18 @@ export class DeviceFactory {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
async getDevice(deviceId: string): Promise<IDevice> {
|
|
12
|
-
|
|
12
|
+
try {
|
|
13
|
+
return await this.localDeviceService.getDevice(deviceId);
|
|
14
|
+
} catch (error) {
|
|
15
|
+
// Log the error for debugging purposes
|
|
16
|
+
console.error(`DeviceFactory: Failed to get device ${deviceId}:`, error);
|
|
17
|
+
|
|
18
|
+
// Re-throw the error with additional context
|
|
19
|
+
throw new Error(
|
|
20
|
+
`DeviceFactory: Unable to retrieve device ${deviceId}. ${
|
|
21
|
+
error instanceof Error ? error.message : "Unknown error occurred"
|
|
22
|
+
}`
|
|
23
|
+
);
|
|
24
|
+
}
|
|
13
25
|
}
|
|
14
26
|
}
|
|
@@ -10,7 +10,7 @@ import { publishAudit } from "dt-audit-library";
|
|
|
10
10
|
import { EventHandler } from "../handler/EventHandler";
|
|
11
11
|
import { isEqual } from "lodash";
|
|
12
12
|
import { AlertService } from "./Alert.service";
|
|
13
|
-
import {
|
|
13
|
+
import { getPostgresClient } from "../../../db";
|
|
14
14
|
|
|
15
15
|
export class LocalDeviceService {
|
|
16
16
|
private readonly baseUrl: string;
|
|
@@ -50,9 +50,15 @@ export class LocalDeviceService {
|
|
|
50
50
|
deviceId: string,
|
|
51
51
|
withHubDetails: boolean = false
|
|
52
52
|
): Promise<IDevice> {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
try {
|
|
54
|
+
const response = await axios.get(
|
|
55
|
+
`${this.baseUrl}/devices/${deviceId}?withHubDetails=${withHubDetails} `
|
|
56
|
+
);
|
|
57
|
+
return response.data;
|
|
58
|
+
} catch (error: any) {
|
|
59
|
+
console.log(error);
|
|
60
|
+
throw new Error(`Failed to get device: ${error.message}`);
|
|
61
|
+
}
|
|
56
62
|
}
|
|
57
63
|
|
|
58
64
|
async getDevices(
|
|
@@ -108,11 +114,14 @@ export class LocalDeviceService {
|
|
|
108
114
|
return await axios.get(`${this.baseUrl}/devices/${deviceId}/state`);
|
|
109
115
|
}
|
|
110
116
|
|
|
111
|
-
async setState(deviceId: string,
|
|
117
|
+
async setState(deviceId: string, newState: any) {
|
|
112
118
|
// If old state and new state are different
|
|
113
|
-
const oldState = await this.getState(deviceId);
|
|
114
|
-
|
|
115
|
-
|
|
119
|
+
const oldState = (await this.getState(deviceId))?.data?.state || {};
|
|
120
|
+
const changedKeys = Object.keys(newState).filter(
|
|
121
|
+
(key) => !isEqual(oldState[key], newState[key])
|
|
122
|
+
);
|
|
123
|
+
if (changedKeys.length > 0) {
|
|
124
|
+
return await this.eventHandler.onStateChange(deviceId, newState);
|
|
116
125
|
}
|
|
117
126
|
}
|
|
118
127
|
|
|
@@ -120,17 +129,20 @@ export class LocalDeviceService {
|
|
|
120
129
|
return await axios.get(`${this.baseUrl}/devices/${deviceId}/status`);
|
|
121
130
|
}
|
|
122
131
|
|
|
123
|
-
async setStatus(deviceId: string,
|
|
132
|
+
async setStatus(deviceId: string, newStatus: any) {
|
|
124
133
|
// If old status and new status are different
|
|
125
134
|
const oldStatus = await this.getStatus(deviceId);
|
|
126
|
-
|
|
127
|
-
|
|
135
|
+
const changedKeys = Object.keys(newStatus).filter(
|
|
136
|
+
(key) => !isEqual(oldStatus?.data?.[key], newStatus?.[key])
|
|
137
|
+
);
|
|
138
|
+
if (changedKeys.length > 0) {
|
|
139
|
+
return await this.eventHandler.onStatusChange(deviceId, newStatus);
|
|
128
140
|
}
|
|
129
141
|
// If both old and new status are offline, check the time difference between the last offline status and current time
|
|
130
142
|
if (
|
|
131
143
|
oldStatus?.data?.online === false &&
|
|
132
144
|
oldStatus?.data?.lastUpdated &&
|
|
133
|
-
|
|
145
|
+
newStatus?.online === false
|
|
134
146
|
) {
|
|
135
147
|
const lastOfflineTime = new Date(oldStatus?.data?.lastUpdated).getTime();
|
|
136
148
|
const currentTime = Date.now();
|
|
@@ -145,15 +157,21 @@ export class LocalDeviceService {
|
|
|
145
157
|
async getBatteryLevel(deviceId: string) {
|
|
146
158
|
return await axios.get(`${this.baseUrl}/devices/${deviceId}/battery-level`);
|
|
147
159
|
}
|
|
148
|
-
async setBatteryLevel(deviceId: string,
|
|
160
|
+
async setBatteryLevel(deviceId: string, newBatteryLevel: any) {
|
|
149
161
|
// If old battery level and new battery level are different
|
|
150
162
|
const oldBatteryLevel = await this.getBatteryLevel(deviceId);
|
|
151
|
-
|
|
152
|
-
|
|
163
|
+
const changedKeys = Object.keys(newBatteryLevel).filter(
|
|
164
|
+
(key) => !isEqual(oldBatteryLevel?.data?.[key], newBatteryLevel?.[key])
|
|
165
|
+
);
|
|
166
|
+
if (changedKeys.length > 0) {
|
|
167
|
+
return await this.eventHandler.onBatteryLevelChange(
|
|
168
|
+
deviceId,
|
|
169
|
+
newBatteryLevel
|
|
170
|
+
);
|
|
153
171
|
}
|
|
154
172
|
// If current battery level is less than 20% and lsat updated time is more than 8 hours, raise an energy alert
|
|
155
173
|
if (
|
|
156
|
-
|
|
174
|
+
newBatteryLevel?.value < 20 &&
|
|
157
175
|
oldBatteryLevel?.data?.value < 20 &&
|
|
158
176
|
new Date(oldBatteryLevel?.data?.lastUpdated).getTime() <
|
|
159
177
|
Date.now() - 1000 * 60 * 60 * 8
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { IConnection, IConnectionConnectParams, IDevice, IDeviceAccountResponse, IDeviceCommand, ISmartthingsDeviceCommand, ICommandResponse } from "./types";
|
|
2
|
-
/**
|
|
3
|
-
* Class interface for device cloud operations and connection management
|
|
4
|
-
*/
|
|
5
|
-
export interface IDeviceCloudService {
|
|
6
|
-
/**
|
|
7
|
-
* Creates a new connection for device management
|
|
8
|
-
* @param data - Connection data
|
|
9
|
-
* @param userId - User identifier
|
|
10
|
-
* @returns Promise with connection result
|
|
11
|
-
*/
|
|
12
|
-
createConnection(data: IConnection, userId: string): Promise<any>;
|
|
13
|
-
/**
|
|
14
|
-
* Gets device account information for a connection
|
|
15
|
-
* @param connection - Connection object
|
|
16
|
-
* @returns Promise with device account response
|
|
17
|
-
*/
|
|
18
|
-
getDeviceAccount(connection: IConnection): Promise<IDeviceAccountResponse>;
|
|
19
|
-
/**
|
|
20
|
-
* Gets all devices for a connection
|
|
21
|
-
* @param connection - Connection object
|
|
22
|
-
* @returns Promise with array of devices
|
|
23
|
-
*/
|
|
24
|
-
getDevices(connection: IConnection): Promise<IDevice[]>;
|
|
25
|
-
/**
|
|
26
|
-
* Filters devices based on connection and device list
|
|
27
|
-
* @param connection - Connection object
|
|
28
|
-
* @param devices - Array of devices to filter
|
|
29
|
-
* @returns Promise with filtered devices
|
|
30
|
-
*/
|
|
31
|
-
filterDevices(connection: IConnection, devices: any[]): Promise<IDevice[]>;
|
|
32
|
-
/**
|
|
33
|
-
* Connects to a device service
|
|
34
|
-
* @param connection - Connection object
|
|
35
|
-
* @param connectionConnect - Connection parameters
|
|
36
|
-
* @returns Promise with connection result
|
|
37
|
-
*/
|
|
38
|
-
connect(connection: IConnection, connectionConnect: IConnectionConnectParams): Promise<any>;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Interface for device command operations
|
|
42
|
-
*/
|
|
43
|
-
export interface IDeviceCommandManager {
|
|
44
|
-
/**
|
|
45
|
-
* Invokes a command on a device
|
|
46
|
-
* @param command - Device command to execute
|
|
47
|
-
* @param deviceId - Device identifier
|
|
48
|
-
* @returns Promise with command response
|
|
49
|
-
*/
|
|
50
|
-
invokeCommand(command: IDeviceCommand, deviceId: string): Promise<ICommandResponse>;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Interface for SmartThings specific device command operations
|
|
54
|
-
*/
|
|
55
|
-
export interface ISmartthingsDeviceCommandManager extends IDeviceCommandManager {
|
|
56
|
-
/**
|
|
57
|
-
* Performs device action for SmartThings
|
|
58
|
-
* @param commands - Array of SmartThings device commands
|
|
59
|
-
* @param deviceId - Device identifier
|
|
60
|
-
* @param accessToken - Access token for authentication
|
|
61
|
-
* @returns Promise with action result
|
|
62
|
-
*/
|
|
63
|
-
performDeviceAction(commands: ISmartthingsDeviceCommand[], deviceId: string, accessToken: string): Promise<any>;
|
|
64
|
-
/**
|
|
65
|
-
* Gets device status for SmartThings
|
|
66
|
-
* @param deviceId - Device identifier
|
|
67
|
-
* @param accessToken - Access token for authentication
|
|
68
|
-
* @returns Promise with device status
|
|
69
|
-
*/
|
|
70
|
-
getDeviceStatus(deviceId: string, accessToken: string): Promise<any>;
|
|
71
|
-
/**
|
|
72
|
-
* Gets device lock status for SmartThings
|
|
73
|
-
* @param deviceId - Device identifier
|
|
74
|
-
* @param accessToken - Access token for authentication
|
|
75
|
-
* @returns Promise with lock status
|
|
76
|
-
*/
|
|
77
|
-
getDeviceLockStatus(deviceId: string, accessToken: string): Promise<any>;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Interface for device command factory
|
|
81
|
-
*/
|
|
82
|
-
export interface IDeviceCommandManagerFactory {
|
|
83
|
-
/**
|
|
84
|
-
* Creates a device command manager for a specific connection provider
|
|
85
|
-
* @param connectionProvider - Connection provider type
|
|
86
|
-
* @param connection - Connection object
|
|
87
|
-
* @returns Device command manager instance
|
|
88
|
-
*/
|
|
89
|
-
createDeviceCommandManager(connectionProvider: string, connection: IConnection): IDeviceCommandManager;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Interface for device command classes
|
|
93
|
-
*/
|
|
94
|
-
export interface IDeviceCommandClass {
|
|
95
|
-
/**
|
|
96
|
-
* Creates a SmartThings device command from a generic device command
|
|
97
|
-
* @param deviceCommand - Generic device command
|
|
98
|
-
* @returns SmartThings device command
|
|
99
|
-
*/
|
|
100
|
-
fromDeviceCommand(deviceCommand: IDeviceCommand): ISmartthingsDeviceCommand;
|
|
101
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { IConnection, IConnectionConnectParams, IDeviceAccountResponse } from "../types";
|
|
2
|
-
export interface IDeviceConnectionService {
|
|
3
|
-
createConnection(data: IConnection, userId: string): Promise<any>;
|
|
4
|
-
getDeviceAccount(connection: IConnection): Promise<IDeviceAccountResponse>;
|
|
5
|
-
getDevices(connection: IConnection): Promise<any>;
|
|
6
|
-
connect(connection: IConnection, connectionConnect: IConnectionConnectParams): Promise<any>;
|
|
7
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { IConnection } from "../types";
|
|
2
|
-
export interface IDeviceService {
|
|
3
|
-
getDevices(connection: IConnection): Promise<Record<string, any>[]>;
|
|
4
|
-
getDevice(connectionId: string, deviceId: string): Promise<Record<string, any>>;
|
|
5
|
-
getStatus(connectionId: string, deviceId: string): Promise<string | null>;
|
|
6
|
-
getState(deviceId: string): Promise<Record<string, any>>;
|
|
7
|
-
getGateways(connectionId: string): Promise<any[] | null>;
|
|
8
|
-
getGatewayDetails(connectionId: string, gatewayId: string): Promise<any>;
|
|
9
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { IDeviceService } from "../interfaces";
|
|
2
|
-
import { IConnection, IDevice } from "../types";
|
|
3
|
-
export declare abstract class DeviceService implements IDeviceService {
|
|
4
|
-
deviceId: string;
|
|
5
|
-
propertyId: string;
|
|
6
|
-
name: string;
|
|
7
|
-
hubId: string[];
|
|
8
|
-
deviceType: {
|
|
9
|
-
id: string;
|
|
10
|
-
type: string;
|
|
11
|
-
};
|
|
12
|
-
status: {
|
|
13
|
-
online: boolean;
|
|
14
|
-
error?: {
|
|
15
|
-
type?: string;
|
|
16
|
-
message?: string;
|
|
17
|
-
};
|
|
18
|
-
lastUpdated?: string;
|
|
19
|
-
};
|
|
20
|
-
state?: Record<string, any>;
|
|
21
|
-
metaData?: Record<string, any>;
|
|
22
|
-
zone?: {
|
|
23
|
-
id: string;
|
|
24
|
-
name: string;
|
|
25
|
-
zoneType: string;
|
|
26
|
-
parentZone?: {
|
|
27
|
-
id: string;
|
|
28
|
-
name: string;
|
|
29
|
-
zoneType: string;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
connection: IConnection;
|
|
33
|
-
constructor(device: IDevice);
|
|
34
|
-
abstract getDevices(connection: IConnection): Promise<Record<string, any>[]>;
|
|
35
|
-
abstract getDevice(connectionId: string, deviceId: string): Promise<any>;
|
|
36
|
-
abstract getBattery(deviceId: string): Promise<number | string>;
|
|
37
|
-
abstract getStatus(connectionId: string, deviceId: string): Promise<string>;
|
|
38
|
-
abstract getState(deviceId: string): Promise<string>;
|
|
39
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { IDeviceCloudService } from "../interface";
|
|
2
|
-
import { IConnection, IDevice, IDeviceAccountResponse, IConnectionConnectParams } from "../types";
|
|
3
|
-
/**
|
|
4
|
-
* Device Cloud Service Class
|
|
5
|
-
* Implements IDeviceCloudService interface with empty implementations
|
|
6
|
-
* Implementation will be provided by the consuming project
|
|
7
|
-
*/
|
|
8
|
-
export declare class DeviceCloudService implements IDeviceCloudService {
|
|
9
|
-
/**
|
|
10
|
-
* Creates a new connection for device management
|
|
11
|
-
* @param data - Connection data
|
|
12
|
-
* @param userId - User identifier
|
|
13
|
-
* @returns Promise with connection result
|
|
14
|
-
*/
|
|
15
|
-
createConnection(data: IConnection, userId: string): Promise<any>;
|
|
16
|
-
/**
|
|
17
|
-
* Gets device account information for a connection
|
|
18
|
-
* @param connection - Connection object
|
|
19
|
-
* @returns Promise with device account response
|
|
20
|
-
*/
|
|
21
|
-
getDeviceAccount(connection: IConnection): Promise<IDeviceAccountResponse>;
|
|
22
|
-
/**
|
|
23
|
-
* Gets all devices for a connection
|
|
24
|
-
* @param connection - Connection object
|
|
25
|
-
* @returns Promise with array of devices
|
|
26
|
-
*/
|
|
27
|
-
getDevices(connection: IConnection): Promise<IDevice[]>;
|
|
28
|
-
/**
|
|
29
|
-
* Filters devices based on connection and device list
|
|
30
|
-
* @param connection - Connection object
|
|
31
|
-
* @param devices - Array of devices to filter
|
|
32
|
-
* @returns Promise with filtered devices
|
|
33
|
-
*/
|
|
34
|
-
filterDevices(connection: IConnection, devices: any[]): Promise<IDevice[]>;
|
|
35
|
-
/**
|
|
36
|
-
* Connects to a device service
|
|
37
|
-
* @param connection - Connection object
|
|
38
|
-
* @param connectionConnect - Connection parameters
|
|
39
|
-
* @returns Promise with connection result
|
|
40
|
-
*/
|
|
41
|
-
connect(connection: IConnection, connectionConnect: IConnectionConnectParams): Promise<any>;
|
|
42
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DeviceCloudService = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Device Cloud Service Class
|
|
6
|
-
* Implements IDeviceCloudService interface with empty implementations
|
|
7
|
-
* Implementation will be provided by the consuming project
|
|
8
|
-
*/
|
|
9
|
-
class DeviceCloudService {
|
|
10
|
-
/**
|
|
11
|
-
* Creates a new connection for device management
|
|
12
|
-
* @param data - Connection data
|
|
13
|
-
* @param userId - User identifier
|
|
14
|
-
* @returns Promise with connection result
|
|
15
|
-
*/
|
|
16
|
-
async createConnection(data, userId) {
|
|
17
|
-
// Implementation will be provided by the consuming project
|
|
18
|
-
throw new Error("createConnection method not implemented");
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Gets device account information for a connection
|
|
22
|
-
* @param connection - Connection object
|
|
23
|
-
* @returns Promise with device account response
|
|
24
|
-
*/
|
|
25
|
-
async getDeviceAccount(connection) {
|
|
26
|
-
// Implementation will be provided by the consuming project
|
|
27
|
-
throw new Error("getDeviceAccount method not implemented");
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Gets all devices for a connection
|
|
31
|
-
* @param connection - Connection object
|
|
32
|
-
* @returns Promise with array of devices
|
|
33
|
-
*/
|
|
34
|
-
async getDevices(connection) {
|
|
35
|
-
// Implementation will be provided by the consuming project
|
|
36
|
-
throw new Error("getDevices method not implemented");
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Filters devices based on connection and device list
|
|
40
|
-
* @param connection - Connection object
|
|
41
|
-
* @param devices - Array of devices to filter
|
|
42
|
-
* @returns Promise with filtered devices
|
|
43
|
-
*/
|
|
44
|
-
async filterDevices(connection, devices) {
|
|
45
|
-
// Implementation will be provided by the consuming project
|
|
46
|
-
throw new Error("filterDevices method not implemented");
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Connects to a device service
|
|
50
|
-
* @param connection - Connection object
|
|
51
|
-
* @param connectionConnect - Connection parameters
|
|
52
|
-
* @returns Promise with connection result
|
|
53
|
-
*/
|
|
54
|
-
async connect(connection, connectionConnect) {
|
|
55
|
-
// Implementation will be provided by the consuming project
|
|
56
|
-
throw new Error("connect method not implemented");
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.DeviceCloudService = DeviceCloudService;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { IHubService } from "../interfaces";
|
|
2
|
-
import { IConnection, IDevice } from "../types";
|
|
3
|
-
export declare abstract class HubService implements IHubService {
|
|
4
|
-
deviceId: string;
|
|
5
|
-
propertyId: string;
|
|
6
|
-
name: string;
|
|
7
|
-
deviceType: {
|
|
8
|
-
id: string;
|
|
9
|
-
type: string;
|
|
10
|
-
};
|
|
11
|
-
status: {
|
|
12
|
-
online: boolean;
|
|
13
|
-
error?: {
|
|
14
|
-
type?: string;
|
|
15
|
-
message?: string;
|
|
16
|
-
};
|
|
17
|
-
lastUpdated?: string;
|
|
18
|
-
};
|
|
19
|
-
metaData?: Record<string, any>;
|
|
20
|
-
connection: IConnection;
|
|
21
|
-
constructor(hub: IDevice);
|
|
22
|
-
abstract getHubs(connectionId: string): Promise<any[] | null>;
|
|
23
|
-
abstract getHub(connectionId: string, hubId: string): Promise<Record<string, any>>;
|
|
24
|
-
abstract getStatus(connectionId: string, hubId: string): Promise<string>;
|
|
25
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { ISmartthingsDeviceCommandManager } from "../interface";
|
|
2
|
-
import { IDeviceCommand, ISmartthingsDeviceCommand, ICommandResponse } from "../types";
|
|
3
|
-
/**
|
|
4
|
-
* SmartThings Device Service Class
|
|
5
|
-
* Implements ISmartthingsDeviceCommandManager interface with empty implementations
|
|
6
|
-
* Implementation will be provided by the consuming project
|
|
7
|
-
*/
|
|
8
|
-
export declare class SmartThingsDeviceService implements ISmartthingsDeviceCommandManager {
|
|
9
|
-
/**
|
|
10
|
-
* Invokes a command on a device
|
|
11
|
-
* @param command - Device command to execute
|
|
12
|
-
* @param deviceId - Device identifier
|
|
13
|
-
* @returns Promise with command response
|
|
14
|
-
*/
|
|
15
|
-
invokeCommand(command: IDeviceCommand, deviceId: string): Promise<ICommandResponse>;
|
|
16
|
-
/**
|
|
17
|
-
* Performs device action for SmartThings
|
|
18
|
-
* @param commands - Array of SmartThings device commands
|
|
19
|
-
* @param deviceId - Device identifier
|
|
20
|
-
* @param accessToken - Access token for authentication
|
|
21
|
-
* @returns Promise with action result
|
|
22
|
-
*/
|
|
23
|
-
performDeviceAction(commands: ISmartthingsDeviceCommand[], deviceId: string, accessToken: string): Promise<any>;
|
|
24
|
-
/**
|
|
25
|
-
* Gets device status for SmartThings
|
|
26
|
-
* @param deviceId - Device identifier
|
|
27
|
-
* @param accessToken - Access token for authentication
|
|
28
|
-
* @returns Promise with device status
|
|
29
|
-
*/
|
|
30
|
-
getDeviceStatus(deviceId: string, accessToken: string): Promise<any>;
|
|
31
|
-
/**
|
|
32
|
-
* Gets device lock status for SmartThings
|
|
33
|
-
* @param deviceId - Device identifier
|
|
34
|
-
* @param accessToken - Access token for authentication
|
|
35
|
-
* @returns Promise with lock status
|
|
36
|
-
*/
|
|
37
|
-
getDeviceLockStatus(deviceId: string, accessToken: string): Promise<any>;
|
|
38
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SmartThingsDeviceService = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* SmartThings Device Service Class
|
|
6
|
-
* Implements ISmartthingsDeviceCommandManager interface with empty implementations
|
|
7
|
-
* Implementation will be provided by the consuming project
|
|
8
|
-
*/
|
|
9
|
-
class SmartThingsDeviceService {
|
|
10
|
-
/**
|
|
11
|
-
* Invokes a command on a device
|
|
12
|
-
* @param command - Device command to execute
|
|
13
|
-
* @param deviceId - Device identifier
|
|
14
|
-
* @returns Promise with command response
|
|
15
|
-
*/
|
|
16
|
-
async invokeCommand(command, deviceId) {
|
|
17
|
-
// Implementation will be provided by the consuming project
|
|
18
|
-
throw new Error("invokeCommand method not implemented");
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Performs device action for SmartThings
|
|
22
|
-
* @param commands - Array of SmartThings device commands
|
|
23
|
-
* @param deviceId - Device identifier
|
|
24
|
-
* @param accessToken - Access token for authentication
|
|
25
|
-
* @returns Promise with action result
|
|
26
|
-
*/
|
|
27
|
-
async performDeviceAction(commands, deviceId, accessToken) {
|
|
28
|
-
// Implementation will be provided by the consuming project
|
|
29
|
-
throw new Error("performDeviceAction method not implemented");
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Gets device status for SmartThings
|
|
33
|
-
* @param deviceId - Device identifier
|
|
34
|
-
* @param accessToken - Access token for authentication
|
|
35
|
-
* @returns Promise with device status
|
|
36
|
-
*/
|
|
37
|
-
async getDeviceStatus(deviceId, accessToken) {
|
|
38
|
-
// Implementation will be provided by the consuming project
|
|
39
|
-
throw new Error("getDeviceStatus method not implemented");
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Gets device lock status for SmartThings
|
|
43
|
-
* @param deviceId - Device identifier
|
|
44
|
-
* @param accessToken - Access token for authentication
|
|
45
|
-
* @returns Promise with lock status
|
|
46
|
-
*/
|
|
47
|
-
async getDeviceLockStatus(deviceId, accessToken) {
|
|
48
|
-
// Implementation will be provided by the consuming project
|
|
49
|
-
throw new Error("getDeviceLockStatus method not implemented");
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.SmartThingsDeviceService = SmartThingsDeviceService;
|
package/dist/device/index.d.ts
DELETED
package/dist/device/index.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// DeviceThread Common Library - Device Module
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
|
-
};
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
// Export cloud device interfaces
|
|
19
|
-
__exportStar(require("./cloud/interface"), exports);
|
|
20
|
-
__exportStar(require("./cloud/types"), exports);
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { IHubCreateParams } from "../interfaces";
|
|
2
|
-
export declare class DeviceHubService {
|
|
3
|
-
private readonly baseUrl;
|
|
4
|
-
constructor();
|
|
5
|
-
addHub(body: IHubCreateParams): Promise<any>;
|
|
6
|
-
getHubs(hubIds: string[]): Promise<any>;
|
|
7
|
-
getHub(hubId: string): Promise<any>;
|
|
8
|
-
updateHub(hubId: string, body: any): Promise<any>;
|
|
9
|
-
deleteHub(hubId: string): Promise<any>;
|
|
10
|
-
deleteAllHubs(hubIds: string[]): Promise<any>;
|
|
11
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DeviceHubService = void 0;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const config_1 = require("../../../config/config");
|
|
9
|
-
class DeviceHubService {
|
|
10
|
-
constructor() {
|
|
11
|
-
const { DEVICE_SERVICE } = (0, config_1.getConfig)();
|
|
12
|
-
if (!DEVICE_SERVICE) {
|
|
13
|
-
throw new Error("DEVICE_SERVICE is not configured. Call initialize() first with DEVICE_SERVICE.");
|
|
14
|
-
}
|
|
15
|
-
this.baseUrl = DEVICE_SERVICE;
|
|
16
|
-
}
|
|
17
|
-
async addHub(body) {
|
|
18
|
-
return await axios_1.default.post(`${this.baseUrl}/devices/hubs`, body);
|
|
19
|
-
}
|
|
20
|
-
//get hubs takes an array of hub ids as query params
|
|
21
|
-
async getHubs(hubIds) {
|
|
22
|
-
const query = hubIds && hubIds.length ? `?ids=${hubIds.join(",")}` : "";
|
|
23
|
-
return await axios_1.default.get(`${this.baseUrl}/devices/hubs${query}`);
|
|
24
|
-
}
|
|
25
|
-
//get hub takes a hub id in params
|
|
26
|
-
async getHub(hubId) {
|
|
27
|
-
return await axios_1.default.get(`${this.baseUrl}/devices/hubs/${hubId}`);
|
|
28
|
-
}
|
|
29
|
-
async updateHub(hubId, body) {
|
|
30
|
-
return await axios_1.default.put(`${this.baseUrl}/devices/hubs/${hubId}`, body);
|
|
31
|
-
}
|
|
32
|
-
async deleteHub(hubId) {
|
|
33
|
-
return await axios_1.default.delete(`${this.baseUrl}/devices/hubs/${hubId}`);
|
|
34
|
-
}
|
|
35
|
-
async deleteAllHubs(hubIds) {
|
|
36
|
-
const query = hubIds.length ? `?ids=${hubIds.join(",")}` : "";
|
|
37
|
-
return await axios_1.default.delete(`${this.baseUrl}/devices/hubs${query}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
exports.DeviceHubService = DeviceHubService;
|