node-switchbot 3.0.1 → 3.0.2-beta.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.
@@ -1,35 +1,14 @@
1
1
  import { describe, expect, it } from 'vitest';
2
2
  import * as index from '../index.js';
3
3
  describe('index module exports', () => {
4
- it('should export switchbot', () => {
5
- expect(index).toHaveProperty('switchbot');
4
+ it('should export switchbot-ble', () => {
5
+ expect(index.SwitchBotBLE).toBeDefined();
6
6
  });
7
7
  it('should export switchbot-openapi', () => {
8
- expect(index).toHaveProperty('switchbot-openapi');
8
+ expect(index.SwitchBotOpenAPI).toBeDefined();
9
9
  });
10
- it('should export bledevicestatus', () => {
11
- expect(index).toHaveProperty('bledevicestatus');
12
- });
13
- it('should export devicelist', () => {
14
- expect(index).toHaveProperty('devicelist');
15
- });
16
- it('should export devicepush', () => {
17
- expect(index).toHaveProperty('devicepush');
18
- });
19
- it('should export deviceresponse', () => {
20
- expect(index).toHaveProperty('deviceresponse');
21
- });
22
- it('should export devicestatus', () => {
23
- expect(index).toHaveProperty('devicestatus');
24
- });
25
- it('should export devicewebhookstatus', () => {
26
- expect(index).toHaveProperty('devicewebhookstatus');
27
- });
28
- it('should export irdevicelist', () => {
29
- expect(index).toHaveProperty('irdevicelist');
30
- });
31
- it('should export types', () => {
32
- expect(index).toHaveProperty('types');
10
+ it('should export SwitchbotDevice', () => {
11
+ expect(index.SwitchbotDevice).toBeDefined();
33
12
  });
34
13
  });
35
14
  //# sourceMappingURL=index.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/test/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AAEpC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/test/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AAEpC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,25 +1,35 @@
1
+ import { createServer } from 'node:http';
1
2
  import { request } from 'undici';
2
- import { describe, expect, it } from 'vitest';
3
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
3
4
  import { SwitchBotOpenAPI } from '../switchbot-openapi.js';
4
- jest.mock('undici', () => ({
5
- request: jest.fn(),
5
+ vi.mock('undici', () => ({
6
+ request: vi.fn(),
6
7
  }));
7
8
  describe('switchBotOpenAPI', () => {
8
9
  let switchBotAPI;
9
10
  const token = 'test-token';
10
11
  const secret = 'test-secret';
12
+ const port = 3000;
13
+ let server;
11
14
  beforeEach(() => {
12
15
  switchBotAPI = new SwitchBotOpenAPI(token, secret);
16
+ if (server && typeof server.close === 'function') {
17
+ server.close();
18
+ }
19
+ server = startServer(port);
13
20
  });
14
21
  afterEach(() => {
15
- jest.clearAllMocks();
22
+ vi.clearAllMocks();
23
+ if (server && typeof server.close === 'function') {
24
+ server.close();
25
+ }
16
26
  });
17
27
  describe('getDevices', () => {
18
28
  it('should retrieve the list of devices', async () => {
19
29
  const mockDevicesResponse = { body: { devices: [] }, statusCode: 200 };
20
30
  request.mockResolvedValue({
21
31
  body: {
22
- json: jest.fn().mockResolvedValue(mockDevicesResponse.body),
32
+ json: vi.fn().mockResolvedValue(mockDevicesResponse.body),
23
33
  },
24
34
  statusCode: mockDevicesResponse.statusCode,
25
35
  });
@@ -38,7 +48,7 @@ describe('switchBotOpenAPI', () => {
38
48
  const mockControlResponse = { body: {}, statusCode: 200 };
39
49
  request.mockResolvedValue({
40
50
  body: {
41
- json: jest.fn().mockResolvedValue(mockControlResponse.body),
51
+ json: vi.fn().mockResolvedValue(mockControlResponse.body),
42
52
  },
43
53
  statusCode: mockControlResponse.statusCode,
44
54
  });
@@ -57,7 +67,7 @@ describe('switchBotOpenAPI', () => {
57
67
  const mockStatusResponse = { body: {}, statusCode: 200 };
58
68
  request.mockResolvedValue({
59
69
  body: {
60
- json: jest.fn().mockResolvedValue(mockStatusResponse.body),
70
+ json: vi.fn().mockResolvedValue(mockStatusResponse.body),
61
71
  },
62
72
  statusCode: mockStatusResponse.statusCode,
63
73
  });
@@ -76,21 +86,65 @@ describe('switchBotOpenAPI', () => {
76
86
  const mockWebhookResponse = { body: {}, statusCode: 200 };
77
87
  request.mockResolvedValue({
78
88
  body: {
79
- json: jest.fn().mockResolvedValue(mockWebhookResponse.body),
89
+ json: vi.fn().mockResolvedValue(mockWebhookResponse.body),
80
90
  },
81
91
  statusCode: mockWebhookResponse.statusCode,
82
92
  });
83
- const url = 'http://localhost:3000/webhook';
93
+ const url = `http://localhost:${port}/webhook`;
84
94
  await switchBotAPI.setupWebhook(url);
85
95
  expect(request).toHaveBeenCalledWith(expect.any(String), expect.any(Object));
86
96
  });
87
97
  it('should log an error if the webhook setup fails', async () => {
88
98
  const errorMessage = 'Failed to create webhook listener';
89
99
  request.mockRejectedValue(new Error(errorMessage));
90
- const url = 'http://localhost:3000/webhook';
100
+ const url = `http://localhost:${port}/webhook`;
91
101
  await switchBotAPI.setupWebhook(url);
92
102
  expect(request).toHaveBeenCalledWith(expect.any(String), expect.any(Object));
93
103
  });
94
104
  });
105
+ describe('deleteWebhook', () => {
106
+ it('should delete the webhook listener and remove the webhook from the server', async () => {
107
+ const mockDeleteResponse = { body: {}, statusCode: 200 };
108
+ request.mockResolvedValue({
109
+ body: {
110
+ json: vi.fn().mockResolvedValue(mockDeleteResponse.body),
111
+ },
112
+ statusCode: mockDeleteResponse.statusCode,
113
+ });
114
+ const url = `http://localhost:${port}/webhook`;
115
+ await switchBotAPI.deleteWebhook(url);
116
+ expect(request).toHaveBeenCalledWith(expect.any(String), expect.any(Object));
117
+ });
118
+ it('should log an error if the webhook deletion fails', async () => {
119
+ const errorMessage = 'Failed to delete webhook listener';
120
+ request.mockRejectedValue(new Error(errorMessage));
121
+ const url = `http://localhost:${port}/webhook`;
122
+ await switchBotAPI.deleteWebhook(url);
123
+ expect(request).toHaveBeenCalledWith(expect.any(String), expect.any(Object));
124
+ });
125
+ });
95
126
  });
127
+ function startServer(port) {
128
+ const server = createServer((req, res) => {
129
+ if (req.method === 'POST' && req.url === '/webhook') {
130
+ req.on('data', () => {
131
+ // Process the chunk if needed
132
+ });
133
+ req.on('end', () => {
134
+ // Log the webhook received event
135
+ // console.log('Webhook received:', body)
136
+ res.writeHead(200, { 'Content-Type': 'application/json' });
137
+ res.end(JSON.stringify({ message: 'Webhook received' }));
138
+ });
139
+ }
140
+ else {
141
+ res.writeHead(404, { 'Content-Type': 'application/json' });
142
+ res.end(JSON.stringify({ message: 'Not Found' }));
143
+ }
144
+ });
145
+ server.listen(port, () => {
146
+ // Server is listening on port ${port}
147
+ });
148
+ return server;
149
+ }
96
150
  //# sourceMappingURL=switchbot-openapi.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"switchbot-openapi.test.js","sourceRoot":"","sources":["../../src/test/switchbot-openapi.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"switchbot-openapi.test.js","sourceRoot":"","sources":["../../src/test/switchbot-openapi.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACvB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;CACjB,CAAC,CAAC,CAAA;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,YAA8B,CAAA;IAClC,MAAM,KAAK,GAAG,YAAY,CAAA;IAC1B,MAAM,MAAM,GAAG,aAAa,CAAA;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAA;IACjB,IAAI,MAAW,CAAA;IAEf,UAAU,CAAC,GAAG,EAAE;QACd,YAAY,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAClD,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACjD,MAAM,CAAC,KAAK,EAAE,CAAA;QAChB,CAAC;QACD,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAA;QAClB,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACjD,MAAM,CAAC,KAAK,EAAE,CAAA;QAChB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;YACtE,OAAgB,CAAC,iBAAiB,CAAC;gBAClC,IAAI,EAAE;oBACJ,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC;iBAC1D;gBACD,UAAU,EAAE,mBAAmB,CAAC,UAAU;aAC3C,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAA;YAE9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;YAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,YAAY,GAAG,uBAAuB,CAAC;YAC5C,OAAgB,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;YAE5D,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAA;QACnG,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;YACzD,OAAgB,CAAC,iBAAiB,CAAC;gBAClC,IAAI,EAAE;oBACJ,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC;iBAC1D;gBACD,UAAU,EAAE,mBAAmB,CAAC,UAAU;aAC3C,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;YAEjF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;YAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,YAAY,GAAG,0BAA0B,CAAC;YAC/C,OAAgB,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;YAE5D,MAAM,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,6BAA6B,YAAY,EAAE,CAAC,CAAA;QACzI,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;YACxD,OAAgB,CAAC,iBAAiB,CAAC;gBAClC,IAAI,EAAE;oBACJ,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC;iBACzD;gBACD,UAAU,EAAE,kBAAkB,CAAC,UAAU;aAC1C,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;YAE9D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;YAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,YAAY,GAAG,6BAA6B,CAAC;YAClD,OAAgB,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;YAE5D,MAAM,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAA;QACzH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;YACxF,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;YACzD,OAAgB,CAAC,iBAAiB,CAAC;gBAClC,IAAI,EAAE;oBACJ,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC;iBAC1D;gBACD,UAAU,EAAE,mBAAmB,CAAC,UAAU;aAC3C,CAAC,CAAA;YAEF,MAAM,GAAG,GAAG,oBAAoB,IAAI,UAAU,CAAA;YAC9C,MAAM,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YAEpC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,YAAY,GAAG,mCAAmC,CAAC;YACxD,OAAgB,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;YAE5D,MAAM,GAAG,GAAG,oBAAoB,IAAI,UAAU,CAAA;YAC9C,MAAM,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YAEpC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;YACzF,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;YACxD,OAAgB,CAAC,iBAAiB,CAAC;gBAClC,IAAI,EAAE;oBACJ,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC;iBACzD;gBACD,UAAU,EAAE,kBAAkB,CAAC,UAAU;aAC1C,CAAC,CAAA;YAEF,MAAM,GAAG,GAAG,oBAAoB,IAAI,UAAU,CAAA;YAC9C,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;YAErC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,YAAY,GAAG,mCAAmC,CAAC;YACxD,OAAgB,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAA;YAE5D,MAAM,GAAG,GAAG,oBAAoB,IAAI,UAAU,CAAA;YAC9C,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;YAErC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YACpD,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBAClB,8BAA8B;YAChC,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,iCAAiC;gBACjC,yCAAyC;gBACzC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAA;gBAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAA;YAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QACnD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,sCAAsC;IACxC,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC"}
package/docs/media/BLE.md CHANGED
@@ -80,7 +80,7 @@ const switchBotBLE = new SwitchBotBLE()
80
80
  try {
81
81
  await switchBotBLE.startScan()
82
82
  } catch (e: any) {
83
- console.error(`Failed to start BLE scanning. Error:${e}`)
83
+ console.error(`Failed to start BLE scanning, Error: ${e.message ?? e}`)
84
84
  }
85
85
  ```
86
86
 
@@ -230,7 +230,7 @@ switchBotBLE.onadvertisement = async (ad: any) => {
230
230
  try {
231
231
  this.bleEventHandler[ad.address]?.(ad.serviceData)
232
232
  } catch (e: any) {
233
- await this.errorLog(`Failed to handle BLE event. Error:${e}`)
233
+ await this.errorLog(`Failed to handle BLE event, Error: ${e.message ?? e}`)
234
234
  }
235
235
  }
236
236
  ```
@@ -246,7 +246,7 @@ try {
246
246
  switchBotBLE.stopScan()
247
247
  console.log('Stopped BLE scanning to close listening.')
248
248
  } catch (e: any) {
249
- console.error(`Failed to stop BLE scanning, error:${e.message}`)
249
+ console.error(`Failed to stop BLE scanning, Error: ${e.message ?? e}`)
250
250
  }
251
251
  ```
252
252
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "node-switchbot",
3
3
  "type": "module",
4
- "version": "3.0.1",
4
+ "version": "3.0.2-beta.1",
5
5
  "description": "The node-switchbot is a Node.js module which allows you to control your Switchbot Devices through Bluetooth (BLE).",
6
6
  "author": "OpenWonderLabs (https://github.com/OpenWonderLabs)",
7
7
  "license": "MIT",