@jiangtaste/baiwei-sdk 1.0.0 → 1.0.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/core/BaiweiClient.d.ts +7 -7
- package/dist/core/BaiweiClient.js +21 -25
- package/dist/core/BaiweiSession.d.ts +1 -1
- package/dist/core/BaiweiSession.js +20 -27
- package/dist/core/MessageAssembler.js +1 -5
- package/dist/core/PendingRequestStore.js +1 -5
- package/dist/core/SessionConnector.d.ts +2 -2
- package/dist/core/SessionConnector.js +1 -5
- package/dist/index.d.ts +10 -10
- package/dist/index.js +10 -26
- package/dist/services/BaseService.d.ts +2 -2
- package/dist/services/BaseService.js +1 -5
- package/dist/services/ControlService.d.ts +3 -3
- package/dist/services/ControlService.js +10 -14
- package/dist/services/DeviceService.d.ts +3 -3
- package/dist/services/DeviceService.js +5 -9
- package/dist/services/GatewayService.d.ts +2 -2
- package/dist/services/GatewayService.js +9 -13
- package/dist/services/RoomService.d.ts +3 -3
- package/dist/services/RoomService.js +5 -9
- package/dist/services/SceneService.d.ts +3 -3
- package/dist/services/SceneService.js +8 -12
- package/dist/services/UserService.d.ts +3 -3
- package/dist/services/UserService.js +9 -13
- package/dist/transport/TcpClient.d.ts +1 -1
- package/dist/transport/TcpClient.js +7 -14
- package/dist/types/device-catalog.js +2 -5
- package/dist/types/device-state.js +1 -2
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.js +7 -23
- package/dist/types/messages.js +6 -9
- package/dist/types/options.d.ts +1 -1
- package/dist/types/options.js +3 -6
- package/dist/types/room.js +1 -2
- package/dist/types/scene.d.ts +1 -1
- package/dist/types/scene.js +1 -2
- package/dist/types/user.js +1 -2
- package/dist/utils/MessageIdGenerator.js +1 -5
- package/dist/utils/logger.js +2 -6
- package/dist/utils/time.js +1 -4
- package/package.json +7 -7
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { EventEmitter } from "events";
|
|
2
|
-
import { ControlService } from "../services/ControlService";
|
|
3
|
-
import { DeviceService } from "../services/DeviceService";
|
|
4
|
-
import { GatewayService } from "../services/GatewayService";
|
|
5
|
-
import { RoomService } from "../services/RoomService";
|
|
6
|
-
import { SceneService } from "../services/SceneService";
|
|
7
|
-
import { UserService } from "../services/UserService";
|
|
8
|
-
import { BaiweiClientOptions, MessageRequest } from "../types";
|
|
2
|
+
import { ControlService } from "../services/ControlService.js";
|
|
3
|
+
import { DeviceService } from "../services/DeviceService.js";
|
|
4
|
+
import { GatewayService } from "../services/GatewayService.js";
|
|
5
|
+
import { RoomService } from "../services/RoomService.js";
|
|
6
|
+
import { SceneService } from "../services/SceneService.js";
|
|
7
|
+
import { UserService } from "../services/UserService.js";
|
|
8
|
+
import { type BaiweiClientOptions, type MessageRequest } from "../types/index.js";
|
|
9
9
|
/**
|
|
10
10
|
* SDK 对外主入口。
|
|
11
11
|
* 负责组装 session 和各类 service,并把底层事件转发给上层调用者。
|
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const types_1 = require("../types");
|
|
12
|
-
const logger_1 = require("../utils/logger");
|
|
13
|
-
const BaiweiSession_1 = require("./BaiweiSession");
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
import { ControlService } from "../services/ControlService.js";
|
|
3
|
+
import { DeviceService } from "../services/DeviceService.js";
|
|
4
|
+
import { GatewayService } from "../services/GatewayService.js";
|
|
5
|
+
import { RoomService } from "../services/RoomService.js";
|
|
6
|
+
import { SceneService } from "../services/SceneService.js";
|
|
7
|
+
import { UserService } from "../services/UserService.js";
|
|
8
|
+
import { DEFAULT_CLIENT_ID, DEFAULT_TIMEOUT_MS, } from "../types/index.js";
|
|
9
|
+
import { createLogger } from "../utils/logger.js";
|
|
10
|
+
import { BaiweiSession } from "./BaiweiSession.js";
|
|
14
11
|
/**
|
|
15
12
|
* SDK 对外主入口。
|
|
16
13
|
* 负责组装 session 和各类 service,并把底层事件转发给上层调用者。
|
|
17
14
|
*/
|
|
18
|
-
class BaiweiClient extends
|
|
15
|
+
export class BaiweiClient extends EventEmitter {
|
|
19
16
|
options;
|
|
20
17
|
session;
|
|
21
18
|
log;
|
|
@@ -36,14 +33,14 @@ class BaiweiClient extends events_1.EventEmitter {
|
|
|
36
33
|
constructor(options) {
|
|
37
34
|
super();
|
|
38
35
|
this.options = options;
|
|
39
|
-
this.log =
|
|
40
|
-
const session = new
|
|
41
|
-
this.userService = new
|
|
42
|
-
this.deviceService = new
|
|
43
|
-
this.gatewayService = new
|
|
44
|
-
this.controlService = new
|
|
45
|
-
this.sceneService = new
|
|
46
|
-
this.roomService = new
|
|
36
|
+
this.log = createLogger(options.logger, { prefix: "Baiwei" });
|
|
37
|
+
const session = new BaiweiSession(this.buildSessionOptions());
|
|
38
|
+
this.userService = new UserService(session);
|
|
39
|
+
this.deviceService = new DeviceService(session);
|
|
40
|
+
this.gatewayService = new GatewayService(session);
|
|
41
|
+
this.controlService = new ControlService(session);
|
|
42
|
+
this.sceneService = new SceneService(session);
|
|
43
|
+
this.roomService = new RoomService(session);
|
|
47
44
|
session.on("connected", this.onSessionConnected);
|
|
48
45
|
session.on("disconnect", this.onSessionDisconnect);
|
|
49
46
|
session.on("report", this.onSessionReport);
|
|
@@ -85,10 +82,9 @@ class BaiweiClient extends events_1.EventEmitter {
|
|
|
85
82
|
buildSessionOptions() {
|
|
86
83
|
return {
|
|
87
84
|
...this.options,
|
|
88
|
-
clientId: this.options.clientId ??
|
|
89
|
-
timeoutMs: this.options.timeoutMs ??
|
|
85
|
+
clientId: this.options.clientId ?? DEFAULT_CLIENT_ID,
|
|
86
|
+
timeoutMs: this.options.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
90
87
|
logger: this.log,
|
|
91
88
|
};
|
|
92
89
|
}
|
|
93
90
|
}
|
|
94
|
-
exports.BaiweiClient = BaiweiClient;
|
|
@@ -1,22 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const PendingRequestStore_1 = require("./PendingRequestStore");
|
|
10
|
-
const SessionConnector_1 = require("./SessionConnector");
|
|
11
|
-
const TcpClient_1 = require("../transport/TcpClient");
|
|
12
|
-
const types_1 = require("../types");
|
|
13
|
-
const MessageIdGenerator_1 = require("../utils/MessageIdGenerator");
|
|
14
|
-
const logger_1 = require("../utils/logger");
|
|
1
|
+
import EventEmitter from "events";
|
|
2
|
+
import { MessageAssembler } from "./MessageAssembler.js";
|
|
3
|
+
import { PendingRequestStore } from "./PendingRequestStore.js";
|
|
4
|
+
import { SessionConnector } from "./SessionConnector.js";
|
|
5
|
+
import { TcpClient } from "../transport/TcpClient.js";
|
|
6
|
+
import { DEFAULT_APP_ID, MsgType, } from "../types/index.js";
|
|
7
|
+
import { MessageIdGenerator } from "../utils/MessageIdGenerator.js";
|
|
8
|
+
import { createLogger } from "../utils/logger.js";
|
|
15
9
|
/**
|
|
16
10
|
* 会话编排层。
|
|
17
11
|
* 负责连接、请求派发、响应匹配、分片合并和 report 转发。
|
|
18
12
|
*/
|
|
19
|
-
class BaiweiSession extends
|
|
13
|
+
export class BaiweiSession extends EventEmitter {
|
|
20
14
|
tcp;
|
|
21
15
|
options;
|
|
22
16
|
log;
|
|
@@ -33,17 +27,17 @@ class BaiweiSession extends events_1.default {
|
|
|
33
27
|
this.emit("error", err);
|
|
34
28
|
};
|
|
35
29
|
onTcpProtocolError = (err) => this.emit("error", err);
|
|
36
|
-
idGenerator = new
|
|
37
|
-
pending = new
|
|
30
|
+
idGenerator = new MessageIdGenerator();
|
|
31
|
+
pending = new PendingRequestStore();
|
|
38
32
|
assembler;
|
|
39
33
|
connector;
|
|
40
34
|
constructor(options) {
|
|
41
35
|
super();
|
|
42
|
-
this.log =
|
|
36
|
+
this.log = createLogger(options.logger);
|
|
43
37
|
this.options = options;
|
|
44
|
-
this.tcp = new
|
|
45
|
-
this.assembler = new
|
|
46
|
-
this.connector = new
|
|
38
|
+
this.tcp = new TcpClient({ ...this.options });
|
|
39
|
+
this.assembler = new MessageAssembler(this.options.timeoutMs, (msgId, label) => this.emitError(`Partial payload expired: msgId=${msgId}, ${label}`));
|
|
40
|
+
this.connector = new SessionConnector(this.tcp, this.log, (error) => {
|
|
47
41
|
this.emit("error", error);
|
|
48
42
|
});
|
|
49
43
|
this.bindTcpListeners();
|
|
@@ -107,13 +101,13 @@ class BaiweiSession extends events_1.default {
|
|
|
107
101
|
createMessage(req, msgId) {
|
|
108
102
|
return {
|
|
109
103
|
api_version: "0.1",
|
|
110
|
-
appId:
|
|
104
|
+
appId: DEFAULT_APP_ID,
|
|
111
105
|
from: this.options.clientId,
|
|
112
106
|
to: this.options.gatewaySN,
|
|
113
107
|
msg_id: msgId,
|
|
114
108
|
msg_class: req.msgClass,
|
|
115
109
|
msg_name: req.msgName,
|
|
116
|
-
msg_type: req.msgType ??
|
|
110
|
+
msg_type: req.msgType ?? MsgType.GET,
|
|
117
111
|
token: this.token,
|
|
118
112
|
...req.payload,
|
|
119
113
|
};
|
|
@@ -190,15 +184,15 @@ class BaiweiSession extends events_1.default {
|
|
|
190
184
|
}
|
|
191
185
|
/** 分片逻辑委托给 assembler,session 只保留编排职责。 */
|
|
192
186
|
handleFragmentation(msgId, payload, end, msgClass, msgName) {
|
|
193
|
-
return this.assembler.append(msgId, payload, end, `msgClass/msgName=${msgClass}/${msgName}`);
|
|
187
|
+
return this.assembler.append(msgId, payload, end, `msgClass/msgName=${msgClass}/${msgName}`) ?? null;
|
|
194
188
|
}
|
|
195
189
|
/** 按消息类型分发到 response/report 两条处理链。 */
|
|
196
190
|
handleMessageResponse(res) {
|
|
197
191
|
switch (res.msgType) {
|
|
198
|
-
case
|
|
192
|
+
case MsgType.RESPONSE:
|
|
199
193
|
this.handleResponse(res);
|
|
200
194
|
break;
|
|
201
|
-
case
|
|
195
|
+
case MsgType.REPORT:
|
|
202
196
|
this.handleReport(res);
|
|
203
197
|
break;
|
|
204
198
|
default:
|
|
@@ -226,4 +220,3 @@ class BaiweiSession extends events_1.default {
|
|
|
226
220
|
this.emit("error", new Error(message));
|
|
227
221
|
}
|
|
228
222
|
}
|
|
229
|
-
exports.BaiweiSession = BaiweiSession;
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MessageAssembler = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* 负责把同一 msgId 的多段 payload 合并为完整消息。
|
|
6
3
|
* 这里不关心协议语义,只处理“分片”和“过期”。
|
|
7
4
|
*/
|
|
8
|
-
class MessageAssembler {
|
|
5
|
+
export class MessageAssembler {
|
|
9
6
|
timeoutMs;
|
|
10
7
|
onExpired;
|
|
11
8
|
partialPayloads = new Map();
|
|
@@ -73,4 +70,3 @@ class MessageAssembler {
|
|
|
73
70
|
return result;
|
|
74
71
|
}
|
|
75
72
|
}
|
|
76
|
-
exports.MessageAssembler = MessageAssembler;
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PendingRequestStore = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* 维护“请求 msgId -> Promise 回调”的映射。
|
|
6
3
|
* session 只通过它做增删查和批量拒绝。
|
|
7
4
|
*/
|
|
8
|
-
class PendingRequestStore {
|
|
5
|
+
export class PendingRequestStore {
|
|
9
6
|
pending = new Map();
|
|
10
7
|
set(msgId, entry) {
|
|
11
8
|
this.pending.set(msgId, entry);
|
|
@@ -30,4 +27,3 @@ class PendingRequestStore {
|
|
|
30
27
|
this.pending.clear();
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
|
-
exports.PendingRequestStore = PendingRequestStore;
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SessionConnector = void 0;
|
|
4
1
|
const CONNECT_TIMEOUT_MS = 10_000;
|
|
5
2
|
/**
|
|
6
3
|
* 一次性连接握手器。
|
|
7
4
|
* 只负责本次 connect 的监听、超时和错误归一化。
|
|
8
5
|
*/
|
|
9
|
-
class SessionConnector {
|
|
6
|
+
export class SessionConnector {
|
|
10
7
|
tcp;
|
|
11
8
|
log;
|
|
12
9
|
onError;
|
|
@@ -59,4 +56,3 @@ class SessionConnector {
|
|
|
59
56
|
});
|
|
60
57
|
}
|
|
61
58
|
}
|
|
62
|
-
exports.SessionConnector = SessionConnector;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/** SDK 对外公共导出入口。 */
|
|
2
|
-
export * from "./core/BaiweiClient";
|
|
3
|
-
export * from "./core/BaiweiSession";
|
|
4
|
-
export * from "./services/BaseService";
|
|
5
|
-
export * from "./services/ControlService";
|
|
6
|
-
export * from "./services/DeviceService";
|
|
7
|
-
export * from "./services/GatewayService";
|
|
8
|
-
export * from "./services/RoomService";
|
|
9
|
-
export * from "./services/SceneService";
|
|
10
|
-
export * from "./services/UserService";
|
|
11
|
-
export * from "./types";
|
|
2
|
+
export * from "./core/BaiweiClient.js";
|
|
3
|
+
export * from "./core/BaiweiSession.js";
|
|
4
|
+
export * from "./services/BaseService.js";
|
|
5
|
+
export * from "./services/ControlService.js";
|
|
6
|
+
export * from "./services/DeviceService.js";
|
|
7
|
+
export * from "./services/GatewayService.js";
|
|
8
|
+
export * from "./services/RoomService.js";
|
|
9
|
+
export * from "./services/SceneService.js";
|
|
10
|
+
export * from "./services/UserService.js";
|
|
11
|
+
export * from "./types/index.js";
|
package/dist/index.js
CHANGED
|
@@ -1,27 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
1
|
/** SDK 对外公共导出入口。 */
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
2
|
+
export * from "./core/BaiweiClient.js";
|
|
3
|
+
export * from "./core/BaiweiSession.js";
|
|
4
|
+
export * from "./services/BaseService.js";
|
|
5
|
+
export * from "./services/ControlService.js";
|
|
6
|
+
export * from "./services/DeviceService.js";
|
|
7
|
+
export * from "./services/GatewayService.js";
|
|
8
|
+
export * from "./services/RoomService.js";
|
|
9
|
+
export * from "./services/SceneService.js";
|
|
10
|
+
export * from "./services/UserService.js";
|
|
11
|
+
export * from "./types/index.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BaiweiSession } from "../core/BaiweiSession";
|
|
2
|
-
import { MessageRequest } from "../types";
|
|
1
|
+
import { BaiweiSession } from "../core/BaiweiSession.js";
|
|
2
|
+
import { type MessageRequest } from "../types/index.js";
|
|
3
3
|
/**
|
|
4
4
|
* 所有 service 的公共基类。
|
|
5
5
|
* 统一把协议请求委托给 session。
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BaseService = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* 所有 service 的公共基类。
|
|
6
3
|
* 统一把协议请求委托给 session。
|
|
7
4
|
*/
|
|
8
|
-
class BaseService {
|
|
5
|
+
export class BaseService {
|
|
9
6
|
session;
|
|
10
7
|
constructor(session) {
|
|
11
8
|
this.session = session;
|
|
@@ -14,4 +11,3 @@ class BaseService {
|
|
|
14
11
|
return this.session.request(message);
|
|
15
12
|
}
|
|
16
13
|
}
|
|
17
|
-
exports.BaseService = BaseService;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BaiweiSession } from "../core/BaiweiSession";
|
|
2
|
-
import { BaiweiDeviceState, BaiweiDeviceStateReport, BaiweiProductType, DeviceStateList, MessageResponse } from "../types";
|
|
3
|
-
import { BaseService } from "./BaseService";
|
|
1
|
+
import { BaiweiSession } from "../core/BaiweiSession.js";
|
|
2
|
+
import { type BaiweiDeviceState, type BaiweiDeviceStateReport, type BaiweiProductType, type DeviceStateList, type MessageResponse } from "../types/index.js";
|
|
3
|
+
import { BaseService } from "./BaseService.js";
|
|
4
4
|
/**
|
|
5
5
|
* 薄控制层:只负责协议映射,不在 SDK 内维护设备状态缓存。
|
|
6
6
|
*/
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.ControlService = void 0;
|
|
4
|
-
const types_1 = require("../types");
|
|
5
|
-
const BaseService_1 = require("./BaseService");
|
|
1
|
+
import { MsgClass, MsgName, MsgType, } from "../types/index.js";
|
|
2
|
+
import { BaseService } from "./BaseService.js";
|
|
6
3
|
/**
|
|
7
4
|
* 薄控制层:只负责协议映射,不在 SDK 内维护设备状态缓存。
|
|
8
5
|
*/
|
|
9
|
-
class ControlService extends
|
|
6
|
+
export class ControlService extends BaseService {
|
|
10
7
|
constructor(session) {
|
|
11
8
|
super(session);
|
|
12
9
|
}
|
|
@@ -20,8 +17,8 @@ class ControlService extends BaseService_1.BaseService {
|
|
|
20
17
|
/** 查询某个产品类型下的全部设备状态。 */
|
|
21
18
|
async getDeviceStatesByType(type) {
|
|
22
19
|
return this.request({
|
|
23
|
-
msgClass:
|
|
24
|
-
msgName:
|
|
20
|
+
msgClass: MsgClass.CONTROL_MGMT,
|
|
21
|
+
msgName: MsgName.DEVICE_STATE_GET,
|
|
25
22
|
payload: { device: { type } },
|
|
26
23
|
});
|
|
27
24
|
}
|
|
@@ -30,9 +27,9 @@ class ControlService extends BaseService_1.BaseService {
|
|
|
30
27
|
*/
|
|
31
28
|
async controlDevice(deviceState) {
|
|
32
29
|
return this.request({
|
|
33
|
-
msgClass:
|
|
34
|
-
msgName:
|
|
35
|
-
msgType:
|
|
30
|
+
msgClass: MsgClass.CONTROL_MGMT,
|
|
31
|
+
msgName: MsgName.DEVICE_CONTROL,
|
|
32
|
+
msgType: MsgType.SET,
|
|
36
33
|
payload: { device: deviceState },
|
|
37
34
|
});
|
|
38
35
|
}
|
|
@@ -51,8 +48,8 @@ class ControlService extends BaseService_1.BaseService {
|
|
|
51
48
|
*/
|
|
52
49
|
/** 判断一条 report 是否为设备状态上报。 */
|
|
53
50
|
isDeviceStateReport(message) {
|
|
54
|
-
return (message.msgClass ===
|
|
55
|
-
message.msgName ===
|
|
51
|
+
return (message.msgClass === MsgClass.CONTROL_MGMT &&
|
|
52
|
+
message.msgName === MsgName.DEVICE_STATE_REPORT);
|
|
56
53
|
}
|
|
57
54
|
/**
|
|
58
55
|
* 从 report 中提取设备状态;如果不是设备状态上报,则返回 `undefined`。
|
|
@@ -64,4 +61,3 @@ class ControlService extends BaseService_1.BaseService {
|
|
|
64
61
|
return message.payload.device;
|
|
65
62
|
}
|
|
66
63
|
}
|
|
67
|
-
exports.ControlService = ControlService;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BaiweiSession } from "../core/BaiweiSession";
|
|
2
|
-
import { BaiweiDevice, BaiweiProductType, DeviceQuery } from "../types";
|
|
3
|
-
import { BaseService } from "./BaseService";
|
|
1
|
+
import { BaiweiSession } from "../core/BaiweiSession.js";
|
|
2
|
+
import { type BaiweiDevice, type BaiweiProductType, type DeviceQuery } from "../types/index.js";
|
|
3
|
+
import { BaseService } from "./BaseService.js";
|
|
4
4
|
/**
|
|
5
5
|
* 设备目录查询层。
|
|
6
6
|
* 当前设计不缓存设备列表,每次调用都直接向网关查询。
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.DeviceService = void 0;
|
|
4
|
-
const types_1 = require("../types");
|
|
5
|
-
const BaseService_1 = require("./BaseService");
|
|
1
|
+
import { MsgClass, MsgName, } from "../types/index.js";
|
|
2
|
+
import { BaseService } from "./BaseService.js";
|
|
6
3
|
/**
|
|
7
4
|
* 设备目录查询层。
|
|
8
5
|
* 当前设计不缓存设备列表,每次调用都直接向网关查询。
|
|
9
6
|
*/
|
|
10
|
-
class DeviceService extends
|
|
7
|
+
export class DeviceService extends BaseService {
|
|
11
8
|
constructor(session) {
|
|
12
9
|
super(session);
|
|
13
10
|
}
|
|
14
11
|
async queryDevices() {
|
|
15
12
|
return this.request({
|
|
16
|
-
msgClass:
|
|
17
|
-
msgName:
|
|
13
|
+
msgClass: MsgClass.DEVICE_MGMT,
|
|
14
|
+
msgName: MsgName.DEVICE_QUERY,
|
|
18
15
|
});
|
|
19
16
|
}
|
|
20
17
|
/**
|
|
@@ -45,7 +42,6 @@ class DeviceService extends BaseService_1.BaseService {
|
|
|
45
42
|
return devices.find((device) => device.device_id === deviceId);
|
|
46
43
|
}
|
|
47
44
|
}
|
|
48
|
-
exports.DeviceService = DeviceService;
|
|
49
45
|
function flattenDevices(typeList) {
|
|
50
46
|
return typeList.flatMap((item) => item.device_list ?? []);
|
|
51
47
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BaiweiSession } from "../core/BaiweiSession";
|
|
2
|
-
import { BaseService } from "./BaseService";
|
|
1
|
+
import { BaiweiSession } from "../core/BaiweiSession.js";
|
|
2
|
+
import { BaseService } from "./BaseService.js";
|
|
3
3
|
/** 网关级操作封装,例如允许设备入网。 */
|
|
4
4
|
export declare class GatewayService extends BaseService {
|
|
5
5
|
constructor(session: BaiweiSession);
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.GatewayService = void 0;
|
|
4
|
-
const types_1 = require("../types");
|
|
5
|
-
const BaseService_1 = require("./BaseService");
|
|
1
|
+
import { MsgClass, MsgName, MsgType } from "../types/index.js";
|
|
2
|
+
import { BaseService } from "./BaseService.js";
|
|
6
3
|
/** 网关级操作封装,例如允许设备入网。 */
|
|
7
|
-
class GatewayService extends
|
|
4
|
+
export class GatewayService extends BaseService {
|
|
8
5
|
constructor(session) {
|
|
9
6
|
super(session);
|
|
10
7
|
}
|
|
@@ -14,20 +11,19 @@ class GatewayService extends BaseService_1.BaseService {
|
|
|
14
11
|
/** 打开入网窗口,允许新 Zigbee 设备在指定时间内加入。 */
|
|
15
12
|
async permitZigbeeJoin(time = 60) {
|
|
16
13
|
return this.request({
|
|
17
|
-
msgClass:
|
|
18
|
-
msgName:
|
|
19
|
-
msgType:
|
|
14
|
+
msgClass: MsgClass.GATEWAY_MGMT,
|
|
15
|
+
msgName: MsgName.ZB_NET_OPEN,
|
|
16
|
+
msgType: MsgType.SET,
|
|
20
17
|
payload: { time },
|
|
21
18
|
});
|
|
22
19
|
}
|
|
23
20
|
/** 提前关闭入网窗口。 */
|
|
24
21
|
async stopZigbeeJoin() {
|
|
25
22
|
return this.request({
|
|
26
|
-
msgClass:
|
|
27
|
-
msgName:
|
|
28
|
-
msgType:
|
|
23
|
+
msgClass: MsgClass.GATEWAY_MGMT,
|
|
24
|
+
msgName: MsgName.ZB_NET_OPEN,
|
|
25
|
+
msgType: MsgType.SET,
|
|
29
26
|
payload: { time: 0 },
|
|
30
27
|
});
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
|
-
exports.GatewayService = GatewayService;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BaiweiSession } from "../core/BaiweiSession";
|
|
2
|
-
import { Room, RoomList } from "../types";
|
|
3
|
-
import { BaseService } from "./BaseService";
|
|
1
|
+
import { BaiweiSession } from "../core/BaiweiSession.js";
|
|
2
|
+
import { type Room, type RoomList } from "../types/index.js";
|
|
3
|
+
import { BaseService } from "./BaseService.js";
|
|
4
4
|
/** 房间查询封装。 */
|
|
5
5
|
export declare class RoomService extends BaseService {
|
|
6
6
|
constructor(session: BaiweiSession);
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.RoomService = void 0;
|
|
4
|
-
const types_1 = require("../types");
|
|
5
|
-
const BaseService_1 = require("./BaseService");
|
|
1
|
+
import { MsgClass, MsgName } from "../types/index.js";
|
|
2
|
+
import { BaseService } from "./BaseService.js";
|
|
6
3
|
/** 房间查询封装。 */
|
|
7
|
-
class RoomService extends
|
|
4
|
+
export class RoomService extends BaseService {
|
|
8
5
|
constructor(session) {
|
|
9
6
|
super(session);
|
|
10
7
|
}
|
|
11
8
|
async list() {
|
|
12
9
|
return this.request({
|
|
13
|
-
msgClass:
|
|
14
|
-
msgName:
|
|
10
|
+
msgClass: MsgClass.ROOM_MGMT,
|
|
11
|
+
msgName: MsgName.ROOM_QUERY,
|
|
15
12
|
});
|
|
16
13
|
}
|
|
17
14
|
/** 返回拍平后的房间数组,便于业务层直接使用。 */
|
|
@@ -24,4 +21,3 @@ class RoomService extends BaseService_1.BaseService {
|
|
|
24
21
|
return rooms.find((room) => room.id === roomId);
|
|
25
22
|
}
|
|
26
23
|
}
|
|
27
|
-
exports.RoomService = RoomService;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BaiweiSession } from "../core/BaiweiSession";
|
|
2
|
-
import { Scene, SceneList } from "../types";
|
|
3
|
-
import { BaseService } from "./BaseService";
|
|
1
|
+
import { BaiweiSession } from "../core/BaiweiSession.js";
|
|
2
|
+
import { type Scene, type SceneList } from "../types/index.js";
|
|
3
|
+
import { BaseService } from "./BaseService.js";
|
|
4
4
|
/** 场景查询与触发封装。 */
|
|
5
5
|
export declare class SceneService extends BaseService {
|
|
6
6
|
constructor(session: BaiweiSession);
|
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.SceneService = void 0;
|
|
4
|
-
const types_1 = require("../types");
|
|
5
|
-
const BaseService_1 = require("./BaseService");
|
|
1
|
+
import { MsgClass, MsgName, MsgType } from "../types/index.js";
|
|
2
|
+
import { BaseService } from "./BaseService.js";
|
|
6
3
|
/** 场景查询与触发封装。 */
|
|
7
|
-
class SceneService extends
|
|
4
|
+
export class SceneService extends BaseService {
|
|
8
5
|
constructor(session) {
|
|
9
6
|
super(session);
|
|
10
7
|
}
|
|
11
8
|
async list() {
|
|
12
9
|
return this.request({
|
|
13
|
-
msgClass:
|
|
14
|
-
msgName:
|
|
10
|
+
msgClass: MsgClass.SCENE_MGMT,
|
|
11
|
+
msgName: MsgName.SCENE_LIST,
|
|
15
12
|
});
|
|
16
13
|
}
|
|
17
14
|
/** 触发指定场景。 */
|
|
18
15
|
async call(sceneId) {
|
|
19
16
|
return this.request({
|
|
20
|
-
msgClass:
|
|
21
|
-
msgName:
|
|
22
|
-
msgType:
|
|
17
|
+
msgClass: MsgClass.SCENE_MGMT,
|
|
18
|
+
msgName: MsgName.SCENE_CALL,
|
|
19
|
+
msgType: MsgType.SET,
|
|
23
20
|
payload: {
|
|
24
21
|
scene: {
|
|
25
22
|
id: sceneId,
|
|
@@ -36,4 +33,3 @@ class SceneService extends BaseService_1.BaseService {
|
|
|
36
33
|
return scenes.find((scene) => scene.id === sceneId);
|
|
37
34
|
}
|
|
38
35
|
}
|
|
39
|
-
exports.SceneService = SceneService;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BaiweiSession } from "../core/BaiweiSession";
|
|
2
|
-
import { AdminLoginOptions, UserLoginOptions, UserPasswordLoginOptions, UserResponse } from "../types";
|
|
3
|
-
import { BaseService } from "./BaseService";
|
|
1
|
+
import { BaiweiSession } from "../core/BaiweiSession.js";
|
|
2
|
+
import { type AdminLoginOptions, type UserLoginOptions, type UserPasswordLoginOptions, type UserResponse } from "../types/index.js";
|
|
3
|
+
import { BaseService } from "./BaseService.js";
|
|
4
4
|
/** 用户登录封装,主要职责是换取并保存 token。 */
|
|
5
5
|
export declare class UserService extends BaseService {
|
|
6
6
|
constructor(session: BaiweiSession);
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.UserService = void 0;
|
|
4
|
-
const types_1 = require("../types");
|
|
5
|
-
const BaseService_1 = require("./BaseService");
|
|
1
|
+
import { DEFAULT_APP_ID, MsgClass, MsgName, } from "../types/index.js";
|
|
2
|
+
import { BaseService } from "./BaseService.js";
|
|
6
3
|
/** 用户登录封装,主要职责是换取并保存 token。 */
|
|
7
|
-
class UserService extends
|
|
4
|
+
export class UserService extends BaseService {
|
|
8
5
|
constructor(session) {
|
|
9
6
|
super(session);
|
|
10
7
|
}
|
|
@@ -26,11 +23,11 @@ class UserService extends BaseService_1.BaseService {
|
|
|
26
23
|
/** 管理员登录:当前协议只要求管理员密码。 */
|
|
27
24
|
async loginAsAdmin(options = {}) {
|
|
28
25
|
const res = await this.request({
|
|
29
|
-
msgClass:
|
|
30
|
-
msgName:
|
|
26
|
+
msgClass: MsgClass.USER_MGMT,
|
|
27
|
+
msgName: MsgName.USER_LOGIN,
|
|
31
28
|
payload: {
|
|
32
29
|
user: {
|
|
33
|
-
appId:
|
|
30
|
+
appId: DEFAULT_APP_ID,
|
|
34
31
|
user_pwd: options.userPwd ?? "888888",
|
|
35
32
|
},
|
|
36
33
|
},
|
|
@@ -41,11 +38,11 @@ class UserService extends BaseService_1.BaseService {
|
|
|
41
38
|
/** 普通用户登录:显式传用户名和密码。 */
|
|
42
39
|
async loginAsUser(options) {
|
|
43
40
|
const res = await this.request({
|
|
44
|
-
msgClass:
|
|
45
|
-
msgName:
|
|
41
|
+
msgClass: MsgClass.USER_MGMT,
|
|
42
|
+
msgName: MsgName.USER_LOGIN,
|
|
46
43
|
payload: {
|
|
47
44
|
user: {
|
|
48
|
-
appId:
|
|
45
|
+
appId: DEFAULT_APP_ID,
|
|
49
46
|
user_name: options.userName,
|
|
50
47
|
user_pwd: options.userPwd,
|
|
51
48
|
},
|
|
@@ -67,4 +64,3 @@ class UserService extends BaseService_1.BaseService {
|
|
|
67
64
|
return "userName" in options;
|
|
68
65
|
}
|
|
69
66
|
}
|
|
70
|
-
exports.UserService = UserService;
|
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.TcpClient = void 0;
|
|
7
|
-
const events_1 = __importDefault(require("events"));
|
|
8
|
-
const node_net_1 = require("node:net");
|
|
9
|
-
const logger_1 = require("../utils/logger");
|
|
1
|
+
import EventEmitter from "events";
|
|
2
|
+
import { Socket } from "node:net";
|
|
3
|
+
import { createLogger } from "../utils/logger.js";
|
|
10
4
|
const MAGIC = "@#$%";
|
|
11
5
|
const HEADER_SIZE = MAGIC.length + 4;
|
|
12
6
|
/**
|
|
13
7
|
* TCP 传输层。
|
|
14
8
|
* 负责 socket 生命周期、帧编解码、断线重连和协议级容错。
|
|
15
9
|
*/
|
|
16
|
-
class TcpClient extends
|
|
10
|
+
export class TcpClient extends EventEmitter {
|
|
17
11
|
options;
|
|
18
12
|
socket = null;
|
|
19
13
|
reconnectTimer;
|
|
@@ -25,7 +19,7 @@ class TcpClient extends events_1.default {
|
|
|
25
19
|
log;
|
|
26
20
|
constructor(options) {
|
|
27
21
|
super();
|
|
28
|
-
this.log =
|
|
22
|
+
this.log = createLogger(options.logger);
|
|
29
23
|
this.options = {
|
|
30
24
|
autoReconnect: true,
|
|
31
25
|
reconnectInterval: 5_000,
|
|
@@ -34,7 +28,7 @@ class TcpClient extends events_1.default {
|
|
|
34
28
|
keepAlive: true,
|
|
35
29
|
keepAliveInitialDelay: 15_000,
|
|
36
30
|
noDelay: true,
|
|
37
|
-
...options
|
|
31
|
+
...options,
|
|
38
32
|
};
|
|
39
33
|
// Protocol length field is 2 bytes (encoded as 4 ASCII hex chars). Hard cap at 0xFFFF.
|
|
40
34
|
if (!this.options.maxPacketSize || this.options.maxPacketSize <= 0) {
|
|
@@ -60,7 +54,7 @@ class TcpClient extends events_1.default {
|
|
|
60
54
|
if (this.socket)
|
|
61
55
|
return;
|
|
62
56
|
this.connecting = true;
|
|
63
|
-
const socket = new
|
|
57
|
+
const socket = new Socket();
|
|
64
58
|
this.socket = socket;
|
|
65
59
|
if (this.options.noDelay)
|
|
66
60
|
socket.setNoDelay(true);
|
|
@@ -312,4 +306,3 @@ class TcpClient extends events_1.default {
|
|
|
312
306
|
}
|
|
313
307
|
}
|
|
314
308
|
}
|
|
315
|
-
exports.TcpClient = TcpClient;
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BaiweiProductType = void 0;
|
|
4
1
|
/** 设备目录与设备基础信息定义。 */
|
|
5
|
-
var BaiweiProductType;
|
|
2
|
+
export var BaiweiProductType;
|
|
6
3
|
(function (BaiweiProductType) {
|
|
7
4
|
BaiweiProductType["ON_OFF_LIGHT"] = "On/Off Light";
|
|
8
5
|
BaiweiProductType["ON_OFF_SWITCH"] = "On/Off Switch";
|
|
@@ -13,4 +10,4 @@ var BaiweiProductType;
|
|
|
13
10
|
BaiweiProductType["AC_GATEWAY"] = "AC gateway";
|
|
14
11
|
BaiweiProductType["NEW_WIND"] = "New wind controller";
|
|
15
12
|
BaiweiProductType["FLOOR_HEAT"] = "Floor heat controller";
|
|
16
|
-
})(BaiweiProductType || (
|
|
13
|
+
})(BaiweiProductType || (BaiweiProductType = {}));
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** 对外统一导出的类型入口。 */
|
|
2
|
-
export * from "./device-catalog";
|
|
3
|
-
export * from "./device-state";
|
|
4
|
-
export * from "./messages";
|
|
5
|
-
export * from "./options";
|
|
6
|
-
export * from "./room";
|
|
7
|
-
export * from "./scene";
|
|
8
|
-
export * from "./user";
|
|
2
|
+
export * from "./device-catalog.js";
|
|
3
|
+
export * from "./device-state.js";
|
|
4
|
+
export * from "./messages.js";
|
|
5
|
+
export * from "./options.js";
|
|
6
|
+
export * from "./room.js";
|
|
7
|
+
export * from "./scene.js";
|
|
8
|
+
export * from "./user.js";
|
package/dist/types/index.js
CHANGED
|
@@ -1,24 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
1
|
/** 对外统一导出的类型入口。 */
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
2
|
+
export * from "./device-catalog.js";
|
|
3
|
+
export * from "./device-state.js";
|
|
4
|
+
export * from "./messages.js";
|
|
5
|
+
export * from "./options.js";
|
|
6
|
+
export * from "./room.js";
|
|
7
|
+
export * from "./scene.js";
|
|
8
|
+
export * from "./user.js";
|
package/dist/types/messages.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MsgType = exports.MsgName = exports.MsgClass = void 0;
|
|
4
1
|
/** 协议消息的枚举与基础结构定义。 */
|
|
5
|
-
var MsgClass;
|
|
2
|
+
export var MsgClass;
|
|
6
3
|
(function (MsgClass) {
|
|
7
4
|
MsgClass["GATEWAY_MGMT"] = "gateway_mgmt";
|
|
8
5
|
MsgClass["USER_MGMT"] = "user_mgmt";
|
|
@@ -10,8 +7,8 @@ var MsgClass;
|
|
|
10
7
|
MsgClass["DEVICE_MGMT"] = "device_mgmt";
|
|
11
8
|
MsgClass["ROOM_MGMT"] = "room_mgmt";
|
|
12
9
|
MsgClass["SCENE_MGMT"] = "scene_mgmt";
|
|
13
|
-
})(MsgClass || (
|
|
14
|
-
var MsgName;
|
|
10
|
+
})(MsgClass || (MsgClass = {}));
|
|
11
|
+
export var MsgName;
|
|
15
12
|
(function (MsgName) {
|
|
16
13
|
MsgName["ZB_NET_OPEN"] = "zb_net_open";
|
|
17
14
|
MsgName["USER_LOGIN"] = "user_login";
|
|
@@ -22,11 +19,11 @@ var MsgName;
|
|
|
22
19
|
MsgName["ROOM_QUERY"] = "room_query";
|
|
23
20
|
MsgName["SCENE_LIST"] = "scene_list";
|
|
24
21
|
MsgName["SCENE_CALL"] = "scene_call";
|
|
25
|
-
})(MsgName || (
|
|
26
|
-
var MsgType;
|
|
22
|
+
})(MsgName || (MsgName = {}));
|
|
23
|
+
export var MsgType;
|
|
27
24
|
(function (MsgType) {
|
|
28
25
|
MsgType["GET"] = "get";
|
|
29
26
|
MsgType["SET"] = "set";
|
|
30
27
|
MsgType["RESPONSE"] = "response";
|
|
31
28
|
MsgType["REPORT"] = "report";
|
|
32
|
-
})(MsgType || (
|
|
29
|
+
})(MsgType || (MsgType = {}));
|
package/dist/types/options.d.ts
CHANGED
package/dist/types/options.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_TIMEOUT_MS = exports.DEFAULT_CLIENT_ID = exports.DEFAULT_APP_ID = void 0;
|
|
4
1
|
/** SDK 运行参数与默认值定义。 */
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
export const DEFAULT_APP_ID = "010";
|
|
3
|
+
export const DEFAULT_CLIENT_ID = "baiwei-sdk";
|
|
4
|
+
export const DEFAULT_TIMEOUT_MS = 5_000;
|
package/dist/types/room.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
package/dist/types/scene.d.ts
CHANGED
package/dist/types/scene.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
package/dist/types/user.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MessageIdGenerator = void 0;
|
|
4
1
|
const BASE = 10_000_000_000;
|
|
5
2
|
const RANGE = 90_000_000_000;
|
|
6
3
|
/** 生成协议请求使用的随机消息 ID。 */
|
|
7
|
-
class MessageIdGenerator {
|
|
4
|
+
export class MessageIdGenerator {
|
|
8
5
|
next() {
|
|
9
6
|
return String(Math.floor(BASE + Math.random() * RANGE));
|
|
10
7
|
}
|
|
11
8
|
}
|
|
12
|
-
exports.MessageIdGenerator = MessageIdGenerator;
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.maskSensitive = maskSensitive;
|
|
4
|
-
exports.createLogger = createLogger;
|
|
5
1
|
const DEFAULT_SENSITIVE_KEYS = [
|
|
6
2
|
"token",
|
|
7
3
|
"password",
|
|
@@ -16,7 +12,7 @@ const DEFAULT_SENSITIVE_KEYS = [
|
|
|
16
12
|
* 对日志中的敏感字段做浅/深层脱敏。
|
|
17
13
|
* 兼容普通对象和 JSON 字符串两种输入。
|
|
18
14
|
*/
|
|
19
|
-
function maskSensitive(value, keys = DEFAULT_SENSITIVE_KEYS) {
|
|
15
|
+
export function maskSensitive(value, keys = DEFAULT_SENSITIVE_KEYS) {
|
|
20
16
|
if (value === null || value === undefined)
|
|
21
17
|
return value;
|
|
22
18
|
// 1) value 是 JSON string:解析 -> 脱敏 -> 再 stringify 回 string
|
|
@@ -57,7 +53,7 @@ function maskSensitive(value, keys = DEFAULT_SENSITIVE_KEYS) {
|
|
|
57
53
|
* - 默认:debug 不脱敏,info/warn/error 脱敏
|
|
58
54
|
* - 当不传入 logger 时:会在日志前自动加时间戳与可选前缀
|
|
59
55
|
*/
|
|
60
|
-
function createLogger(input, opts = {}) {
|
|
56
|
+
export function createLogger(input, opts = {}) {
|
|
61
57
|
const base = input ?? console;
|
|
62
58
|
const maskKeys = opts.maskKeys ?? DEFAULT_SENSITIVE_KEYS;
|
|
63
59
|
const maskDebug = opts.maskDebug ?? false;
|
package/dist/utils/time.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.formatTime = formatTime;
|
|
4
1
|
/** 把时间格式化为 `YYYY-MM-DD HH:mm:ss`,便于日志或调试输出。 */
|
|
5
|
-
function formatTime(date = new Date()) {
|
|
2
|
+
export function formatTime(date = new Date()) {
|
|
6
3
|
const pad = (n) => n.toString().padStart(2, "0");
|
|
7
4
|
const y = date.getFullYear();
|
|
8
5
|
const m = pad(date.getMonth() + 1);
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jiangtaste/baiwei-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "面向百微智能网关的 SDK",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
7
8
|
"exports": {
|
|
8
9
|
".": {
|
|
9
10
|
"types": "./dist/index.d.ts",
|
|
10
|
-
"
|
|
11
|
+
"import": "./dist/index.js"
|
|
11
12
|
}
|
|
12
13
|
},
|
|
13
14
|
"files": [
|
|
@@ -17,8 +18,8 @@
|
|
|
17
18
|
],
|
|
18
19
|
"sideEffects": false,
|
|
19
20
|
"scripts": {
|
|
20
|
-
"dev": "ts-node -P examples/tsconfig.json examples/debug.ts",
|
|
21
|
-
"debug": "ts-node -P examples/tsconfig.json examples/debug.ts",
|
|
21
|
+
"dev": "ts-node --esm -P examples/tsconfig.json examples/debug.ts",
|
|
22
|
+
"debug": "ts-node --esm -P examples/tsconfig.json examples/debug.ts",
|
|
22
23
|
"build": "tsc",
|
|
23
24
|
"start": "node dist/index.js",
|
|
24
25
|
"prepare": "npm run build"
|
|
@@ -33,7 +34,6 @@
|
|
|
33
34
|
],
|
|
34
35
|
"author": "jiangtaste",
|
|
35
36
|
"license": "MIT",
|
|
36
|
-
"type": "commonjs",
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|