@homebridge-plugins/homebridge-august 3.2.3 → 3.3.0-beta.0
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/.github/npm-version-script-esm.js +97 -0
- package/CHANGELOG.md +15 -0
- package/dist/Platform.Base.d.ts +288 -0
- package/dist/Platform.Base.d.ts.map +1 -0
- package/dist/Platform.Base.js +797 -0
- package/dist/Platform.Base.js.map +1 -0
- package/dist/Platform.HAP.d.ts +20 -139
- package/dist/Platform.HAP.d.ts.map +1 -1
- package/dist/Platform.HAP.js +46 -733
- package/dist/Platform.HAP.js.map +1 -1
- package/dist/connectivity-manager.d.ts +3 -3
- package/dist/connectivity-manager.d.ts.map +1 -1
- package/dist/connectivity-manager.js +57 -14
- package/dist/connectivity-manager.js.map +1 -1
- package/dist/devices/device.d.ts +5 -16
- package/dist/devices/device.d.ts.map +1 -1
- package/dist/devices/device.js +18 -75
- package/dist/devices/device.js.map +1 -1
- package/dist/devices/lock.d.ts +3 -3
- package/dist/devices/lock.d.ts.map +1 -1
- package/dist/devices/lock.js +41 -41
- package/dist/devices/lock.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/package.json +8 -7
- package/dist/platform.matter.d.ts +18 -20
- package/dist/platform.matter.d.ts.map +1 -1
- package/dist/platform.matter.js +74 -80
- package/dist/platform.matter.js.map +1 -1
- package/docs/variables/default.html +1 -1
- package/package.json +8 -7
- package/test/device.test.ts +384 -0
- package/test/{platform.test.ts → platform.hap.test.ts} +23 -23
- package/test/platform.polling.test.ts +5 -5
- package/.github/scripts/compute-version-override.cjs +0 -51
- package/.github/scripts/normalize-changelog-header.cjs +0 -86
- package/.github/scripts/npm-version-script-esm-auto.js +0 -201
- package/.github/scripts/resolve-version-bump-esm.js +0 -118
- package/dist/devices/device.test.d.ts +0 -2
- package/dist/devices/device.test.d.ts.map +0 -1
- package/dist/devices/device.test.js +0 -294
- package/dist/devices/device.test.js.map +0 -1
- package/test/connectivity-manager.test.ts +0 -590
- package/test/platform.matter.test.ts +0 -660
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
// Create a simplified test implementation that mimics the updateCharacteristic behavior
|
|
3
|
-
class MockDeviceWithCharacteristics {
|
|
4
|
-
accessory = { context: {}, displayName: 'Test Lock' };
|
|
5
|
-
debugLog = vi.fn();
|
|
6
|
-
debugWarnLog = vi.fn();
|
|
7
|
-
infoLog = vi.fn();
|
|
8
|
-
async updateCharacteristic(Service, ServiceName, Characteristic, CharacteristicValue, CharacteristicName, Value, StatusMatch, StatusDoesNotMatch) {
|
|
9
|
-
if (CharacteristicValue === undefined) {
|
|
10
|
-
await this.debugLog(`${CharacteristicName}: ${CharacteristicValue}`);
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
const contextKey = `${ServiceName}${CharacteristicName}`;
|
|
14
|
-
await this.debugWarnLog(`context before: ${this.accessory.context[contextKey]}`);
|
|
15
|
-
const contextBefore = this.accessory.context[contextKey];
|
|
16
|
-
this.accessory.context[contextKey] = CharacteristicValue;
|
|
17
|
-
await this.debugWarnLog(`context after: ${this.accessory.context[contextKey]}`);
|
|
18
|
-
await this.debugLog(`updateCharacteristic ${CharacteristicName}: ${CharacteristicValue} (${CharacteristicValue === Value ? StatusMatch : StatusDoesNotMatch})`);
|
|
19
|
-
if (contextBefore !== CharacteristicValue) {
|
|
20
|
-
// Value actually changed - push update to HomeKit
|
|
21
|
-
Service.updateCharacteristic(Characteristic, CharacteristicValue);
|
|
22
|
-
// Only log state change messages when we had a prior known value (not initial discovery)
|
|
23
|
-
if (contextBefore !== undefined && StatusMatch && StatusDoesNotMatch) {
|
|
24
|
-
await this.infoLog(`was ${CharacteristicValue === Value ? StatusMatch : StatusDoesNotMatch}`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
// Create a simplified test implementation that mimics the statusCode behavior
|
|
31
|
-
class MockDevice {
|
|
32
|
-
debugLog = vi.fn();
|
|
33
|
-
debugErrorLog = vi.fn();
|
|
34
|
-
/**
|
|
35
|
-
* Check if error is a network timeout or session expiration that requires session refresh
|
|
36
|
-
* Handles 502 Bad Gateway, 401 Unauthorized, 503 Service Unavailable, and network timeouts
|
|
37
|
-
*/
|
|
38
|
-
isTimeoutError(error) {
|
|
39
|
-
// Check for august-yale TimeoutError by name (stable contract — works regardless
|
|
40
|
-
// of message format changes) and Node.js network timeouts by message
|
|
41
|
-
if (error.name === 'TimeoutError' || error.message?.includes('ETIMEDOUT')) {
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
// Check for status codes that indicate session expiration or temporary server issues
|
|
45
|
-
// 502 Bad Gateway - typically indicates session has expired or server issues
|
|
46
|
-
// 503 Service Unavailable - temporary server issues
|
|
47
|
-
// 401 Unauthorized - session has expired
|
|
48
|
-
if (error.statusCode && (error.statusCode === 502 || error.statusCode === 503 || error.statusCode === 401)) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
// Check for error messages containing these status codes (from tiny-json-http error format)
|
|
52
|
-
// Format: "POST failed with: 502" or "GET failed with: 401"
|
|
53
|
-
if (error.message) {
|
|
54
|
-
const sessionErrorPatterns = [
|
|
55
|
-
/failed with: 502/i,
|
|
56
|
-
/failed with: 503/i,
|
|
57
|
-
/failed with: 401/i,
|
|
58
|
-
/Bad Gateway/i,
|
|
59
|
-
/Service Unavailable/i,
|
|
60
|
-
/Unauthorized/i,
|
|
61
|
-
];
|
|
62
|
-
return sessionErrorPatterns.some(pattern => pattern.test(error.message));
|
|
63
|
-
}
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
async statusCode(action, error) {
|
|
67
|
-
const statusCodeString = error.message || ''; // Convert statusCode to a string, handle undefined/null
|
|
68
|
-
// Check if the error is an AggregateError or doesn't contain a status code
|
|
69
|
-
if (error.constructor?.name === 'AggregateError' || !/^\d{3}/.test(statusCodeString)) {
|
|
70
|
-
await this.debugErrorLog(`${action} failed with ${error.constructor?.name || 'Error'}: ${statusCodeString}`);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
const statusCode = statusCodeString.slice(0, 3);
|
|
74
|
-
const logMap = {
|
|
75
|
-
100: `Command successfully sent, statusCode: ${statusCodeString}`,
|
|
76
|
-
200: `Request successful, statusCode: ${statusCodeString}`,
|
|
77
|
-
400: `Bad Request, statusCode: ${statusCodeString}`,
|
|
78
|
-
429: `Too Many Requests, exceeded the number of requests allowed for a given time window, statusCode: ${statusCodeString}`,
|
|
79
|
-
};
|
|
80
|
-
const logMessage = logMap[statusCode]
|
|
81
|
-
?? `Unknown statusCode: ${statusCodeString}, Submit Bugs Here: https://tinyurl.com/AugustYaleBug`;
|
|
82
|
-
await this.debugLog(logMessage);
|
|
83
|
-
if (!logMap[statusCode]) {
|
|
84
|
-
await this.debugErrorLog(`failed ${action}, Error: ${error}`);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
describe('statusCode error handling', () => {
|
|
89
|
-
let mockDevice;
|
|
90
|
-
beforeEach(() => {
|
|
91
|
-
mockDevice = new MockDevice();
|
|
92
|
-
});
|
|
93
|
-
describe('isTimeoutError method', () => {
|
|
94
|
-
it('should detect august-yale TimeoutError by error.name', () => {
|
|
95
|
-
const error = { message: 'Request timed out after 30000ms', name: 'TimeoutError' };
|
|
96
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
97
|
-
});
|
|
98
|
-
it('should detect august-yale TimeoutError regardless of message content', () => {
|
|
99
|
-
const error = { message: 'anything', name: 'TimeoutError' };
|
|
100
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
101
|
-
});
|
|
102
|
-
it('should detect ETIMEDOUT network errors', () => {
|
|
103
|
-
const error = { message: 'ETIMEDOUT connection timed out' };
|
|
104
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
105
|
-
});
|
|
106
|
-
it('should detect 502 Bad Gateway status code', () => {
|
|
107
|
-
const error = { message: 'POST failed with: 502', statusCode: 502 };
|
|
108
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
109
|
-
});
|
|
110
|
-
it('should detect 502 in error message', () => {
|
|
111
|
-
const error = { message: 'POST failed with: 502' };
|
|
112
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
113
|
-
});
|
|
114
|
-
it('should detect 503 Service Unavailable status code', () => {
|
|
115
|
-
const error = { message: 'GET failed with: 503', statusCode: 503 };
|
|
116
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
117
|
-
});
|
|
118
|
-
it('should detect 503 in error message', () => {
|
|
119
|
-
const error = { message: 'Service Unavailable' };
|
|
120
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
121
|
-
});
|
|
122
|
-
it('should detect 401 Unauthorized status code', () => {
|
|
123
|
-
const error = { message: 'POST failed with: 401', statusCode: 401 };
|
|
124
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
125
|
-
});
|
|
126
|
-
it('should detect 401 in error message', () => {
|
|
127
|
-
const error = { message: 'Unauthorized access' };
|
|
128
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
129
|
-
});
|
|
130
|
-
it('should detect Bad Gateway in error message', () => {
|
|
131
|
-
const error = { message: 'Bad Gateway' };
|
|
132
|
-
expect(mockDevice.isTimeoutError(error)).toBe(true);
|
|
133
|
-
});
|
|
134
|
-
it('should return false for non-timeout errors', () => {
|
|
135
|
-
const error = { message: '404 Not Found' };
|
|
136
|
-
expect(mockDevice.isTimeoutError(error)).toBe(false);
|
|
137
|
-
});
|
|
138
|
-
it('should return false for 400 Bad Request', () => {
|
|
139
|
-
const error = { message: '400 Bad Request', statusCode: 400 };
|
|
140
|
-
expect(mockDevice.isTimeoutError(error)).toBe(false);
|
|
141
|
-
});
|
|
142
|
-
it('should return false for 429 Too Many Requests', () => {
|
|
143
|
-
const error = { message: '429 Too Many Requests', statusCode: 429 };
|
|
144
|
-
expect(mockDevice.isTimeoutError(error)).toBe(false);
|
|
145
|
-
});
|
|
146
|
-
it('should return false for empty message', () => {
|
|
147
|
-
const error = { message: '' };
|
|
148
|
-
expect(mockDevice.isTimeoutError(error)).toBe(false);
|
|
149
|
-
});
|
|
150
|
-
it('should return false for errors with non-timeout name', () => {
|
|
151
|
-
const error = { message: 'something failed', name: 'Error' };
|
|
152
|
-
expect(mockDevice.isTimeoutError(error)).toBe(false);
|
|
153
|
-
});
|
|
154
|
-
it('should not match 401 in non-HTTP status contexts', () => {
|
|
155
|
-
const error = { message: 'Expected 4012 records but found 401' };
|
|
156
|
-
expect(mockDevice.isTimeoutError(error)).toBe(false);
|
|
157
|
-
});
|
|
158
|
-
it('should not match 502 in non-HTTP status contexts', () => {
|
|
159
|
-
const error = { message: 'Lock ID 50234 not found' };
|
|
160
|
-
expect(mockDevice.isTimeoutError(error)).toBe(false);
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
describe('statusCode method', () => {
|
|
164
|
-
it('should handle standard HTTP status codes', async () => {
|
|
165
|
-
await mockDevice.statusCode('test action', { message: '400 Bad Request' });
|
|
166
|
-
expect(mockDevice.debugLog).toHaveBeenCalledWith('Bad Request, statusCode: 400 Bad Request');
|
|
167
|
-
expect(mockDevice.debugErrorLog).not.toHaveBeenCalled();
|
|
168
|
-
});
|
|
169
|
-
it('should handle AggregateError specifically', async () => {
|
|
170
|
-
await mockDevice.statusCode('refreshStatus', {
|
|
171
|
-
message: 'Multiple errors occurred',
|
|
172
|
-
constructor: { name: 'AggregateError' },
|
|
173
|
-
});
|
|
174
|
-
expect(mockDevice.debugErrorLog).toHaveBeenCalledWith('refreshStatus failed with AggregateError: Multiple errors occurred');
|
|
175
|
-
expect(mockDevice.debugLog).not.toHaveBeenCalled();
|
|
176
|
-
});
|
|
177
|
-
it('should handle error with empty message', async () => {
|
|
178
|
-
await mockDevice.statusCode('refreshStatus', { message: '' });
|
|
179
|
-
expect(mockDevice.debugErrorLog).toHaveBeenCalledWith('refreshStatus failed with Object: ');
|
|
180
|
-
expect(mockDevice.debugLog).not.toHaveBeenCalled();
|
|
181
|
-
});
|
|
182
|
-
it('should handle error message without numeric status code', async () => {
|
|
183
|
-
await mockDevice.statusCode('refreshStatus', { message: 'Network connection failed' });
|
|
184
|
-
expect(mockDevice.debugErrorLog).toHaveBeenCalledWith('refreshStatus failed with Object: Network connection failed');
|
|
185
|
-
expect(mockDevice.debugLog).not.toHaveBeenCalled();
|
|
186
|
-
});
|
|
187
|
-
it('should handle 429 Too Many Requests status code', async () => {
|
|
188
|
-
await mockDevice.statusCode('test action', { message: '429 Too Many Requests' });
|
|
189
|
-
expect(mockDevice.debugLog).toHaveBeenCalledWith('Too Many Requests, exceeded the number of requests allowed for a given time window, statusCode: 429 Too Many Requests');
|
|
190
|
-
expect(mockDevice.debugErrorLog).not.toHaveBeenCalled();
|
|
191
|
-
});
|
|
192
|
-
it('should handle unknown numeric status codes', async () => {
|
|
193
|
-
await mockDevice.statusCode('test action', { message: '503 Service Unavailable' });
|
|
194
|
-
expect(mockDevice.debugLog).toHaveBeenCalledWith('Unknown statusCode: 503 Service Unavailable, Submit Bugs Here: https://tinyurl.com/AugustYaleBug');
|
|
195
|
-
expect(mockDevice.debugErrorLog).toHaveBeenCalledWith('failed test action, Error: [object Object]');
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
describe('updateCharacteristic', () => {
|
|
200
|
-
let device;
|
|
201
|
-
let mockService;
|
|
202
|
-
const CHARACTERISTIC = 'LockCurrentState';
|
|
203
|
-
beforeEach(() => {
|
|
204
|
-
device = new MockDeviceWithCharacteristics();
|
|
205
|
-
mockService = {
|
|
206
|
-
updateCharacteristic: vi.fn(),
|
|
207
|
-
};
|
|
208
|
-
});
|
|
209
|
-
it('should skip HomeKit update when CharacteristicValue is undefined', async () => {
|
|
210
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, undefined, 'LockCurrentState');
|
|
211
|
-
expect(mockService.updateCharacteristic).not.toHaveBeenCalled();
|
|
212
|
-
expect(device.debugLog).toHaveBeenCalledWith('LockCurrentState: undefined');
|
|
213
|
-
});
|
|
214
|
-
describe('initial state discovery (no prior context)', () => {
|
|
215
|
-
it('should push value to HomeKit on first update', async () => {
|
|
216
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 0, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
217
|
-
expect(mockService.updateCharacteristic).toHaveBeenCalledWith(CHARACTERISTIC, 0);
|
|
218
|
-
});
|
|
219
|
-
it('should NOT log info message on initial discovery', async () => {
|
|
220
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 0, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
221
|
-
expect(device.infoLog).not.toHaveBeenCalled();
|
|
222
|
-
});
|
|
223
|
-
it('should store the value in context for future comparisons', async () => {
|
|
224
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 0, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
225
|
-
expect(device.accessory.context.LockMechanismLockCurrentState).toBe(0);
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
describe('subsequent updates with unchanged value', () => {
|
|
229
|
-
it('should NOT push to HomeKit when value has not changed', async () => {
|
|
230
|
-
// Seed context as if a previous update occurred
|
|
231
|
-
device.accessory.context.LockMechanismLockCurrentState = 1;
|
|
232
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 1, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
233
|
-
expect(mockService.updateCharacteristic).not.toHaveBeenCalled();
|
|
234
|
-
});
|
|
235
|
-
it('should NOT log info message when value has not changed', async () => {
|
|
236
|
-
device.accessory.context.LockMechanismLockCurrentState = 1;
|
|
237
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 1, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
238
|
-
expect(device.infoLog).not.toHaveBeenCalled();
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
describe('genuine state change', () => {
|
|
242
|
-
it('should push to HomeKit when value changes', async () => {
|
|
243
|
-
device.accessory.context.LockMechanismLockCurrentState = 1;
|
|
244
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 0, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
245
|
-
expect(mockService.updateCharacteristic).toHaveBeenCalledWith(CHARACTERISTIC, 0);
|
|
246
|
-
});
|
|
247
|
-
it('should log "was Unlocked" when lock changes from secured to unsecured', async () => {
|
|
248
|
-
device.accessory.context.LockMechanismLockCurrentState = 1;
|
|
249
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 0, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
250
|
-
expect(device.infoLog).toHaveBeenCalledWith('was Unlocked');
|
|
251
|
-
});
|
|
252
|
-
it('should log "was Locked" when lock changes from unsecured to secured', async () => {
|
|
253
|
-
device.accessory.context.LockMechanismLockCurrentState = 0;
|
|
254
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 1, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
255
|
-
expect(device.infoLog).toHaveBeenCalledWith('was Locked');
|
|
256
|
-
});
|
|
257
|
-
it('should update context to new value', async () => {
|
|
258
|
-
device.accessory.context.LockMechanismLockCurrentState = 1;
|
|
259
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 0, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
260
|
-
expect(device.accessory.context.LockMechanismLockCurrentState).toBe(0);
|
|
261
|
-
});
|
|
262
|
-
});
|
|
263
|
-
describe('contact sensor state changes', () => {
|
|
264
|
-
it('should log "was Closed" when door changes to closed', async () => {
|
|
265
|
-
device.accessory.context.ContactSensorContactSensorState = 1;
|
|
266
|
-
await device.updateCharacteristic(mockService, 'ContactSensor', 'ContactSensorState', 0, 'ContactSensorState', 1, 'Opened', 'Closed');
|
|
267
|
-
expect(device.infoLog).toHaveBeenCalledWith('was Closed');
|
|
268
|
-
});
|
|
269
|
-
it('should log "was Opened" when door changes to open', async () => {
|
|
270
|
-
device.accessory.context.ContactSensorContactSensorState = 0;
|
|
271
|
-
await device.updateCharacteristic(mockService, 'ContactSensor', 'ContactSensorState', 1, 'ContactSensorState', 1, 'Opened', 'Closed');
|
|
272
|
-
expect(device.infoLog).toHaveBeenCalledWith('was Opened');
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
describe('updates without StatusMatch/StatusDoesNotMatch', () => {
|
|
276
|
-
it('should push to HomeKit but not log info when no status strings provided', async () => {
|
|
277
|
-
device.accessory.context.BatteryBatteryLevel = 90;
|
|
278
|
-
await device.updateCharacteristic(mockService, 'Battery', 'BatteryLevel', 85, 'BatteryLevel');
|
|
279
|
-
expect(mockService.updateCharacteristic).toHaveBeenCalledWith('BatteryLevel', 85);
|
|
280
|
-
expect(device.infoLog).not.toHaveBeenCalled();
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
describe('startup simulation (seeded context matches API response)', () => {
|
|
284
|
-
it('should not push to HomeKit or log when seeded context matches first API value', async () => {
|
|
285
|
-
// Simulate constructor seeding: accessory.context.LockMechanismLockCurrentState ??= SECURED
|
|
286
|
-
device.accessory.context.LockMechanismLockCurrentState = 1;
|
|
287
|
-
// First API response returns same state (SECURED = 1)
|
|
288
|
-
await device.updateCharacteristic(mockService, 'LockMechanism', CHARACTERISTIC, 1, 'LockCurrentState', 1, 'Locked', 'Unlocked');
|
|
289
|
-
expect(mockService.updateCharacteristic).not.toHaveBeenCalled();
|
|
290
|
-
expect(device.infoLog).not.toHaveBeenCalled();
|
|
291
|
-
});
|
|
292
|
-
});
|
|
293
|
-
});
|
|
294
|
-
//# sourceMappingURL=device.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"device.test.js","sourceRoot":"","sources":["../../src/devices/device.test.ts"],"names":[],"mappings":"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"}
|