iotas-ts 1.1.0 → 1.3.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/CHANGELOG.md +14 -0
- package/dist/src/cache/featureCache.d.ts +11 -6
- package/dist/src/cache/featureCache.js +28 -16
- package/dist/src/cache/featureCache.js.map +1 -1
- package/dist/src/defaults.d.ts +6 -0
- package/dist/src/defaults.js +7 -0
- package/dist/src/defaults.js.map +1 -0
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/quirks.d.ts +1 -0
- package/dist/src/quirks.js +7 -0
- package/dist/src/quirks.js.map +1 -1
- package/dist/src/types.d.ts +0 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.0](https://github.com/mezaugusto/iotas-ts/compare/v1.2.0...v1.3.0) (2026-04-13)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* :art: Implement write barriers for feature updates ([#14](https://github.com/mezaugusto/iotas-ts/issues/14)) ([aed365d](https://github.com/mezaugusto/iotas-ts/commit/aed365d46317dcec9d6998611e5d3fda796ef2c3))
|
|
9
|
+
|
|
10
|
+
## [1.2.0](https://github.com/mezaugusto/iotas-ts/compare/v1.1.0...v1.2.0) (2026-04-12)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* :art: export thresholds ([#12](https://github.com/mezaugusto/iotas-ts/issues/12)) ([8b56a7a](https://github.com/mezaugusto/iotas-ts/commit/8b56a7a81361b680f32b5b0d6eb716e3904075bf))
|
|
16
|
+
|
|
3
17
|
## [1.1.0](https://github.com/mezaugusto/iotas-ts/compare/v1.0.0...v1.1.0) (2026-04-12)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -1,31 +1,36 @@
|
|
|
1
1
|
import type { IotasLogger } from '../logger.js';
|
|
2
|
-
import type { IotasClient } from '../api/iotasClient.js';
|
|
3
2
|
import type { FeatureCacheOptions, Rooms } from '../types.js';
|
|
4
3
|
export type FeatureChangeCallback = (changed: Map<string, number>) => void;
|
|
5
4
|
export type SnapshotFilter = (rooms: Rooms) => Rooms;
|
|
5
|
+
/** Internal interface for sending feature updates to the API. */
|
|
6
|
+
export interface FeatureUpdater {
|
|
7
|
+
updateFeature(featureId: string, value: number): void;
|
|
8
|
+
}
|
|
6
9
|
/**
|
|
7
10
|
* FeatureCache provides cached feature values with background polling.
|
|
8
11
|
*
|
|
9
12
|
* - Seeded from discovery snapshot (no cold-start defaults)
|
|
10
13
|
* - Single getRooms() call per poll cycle
|
|
11
|
-
* -
|
|
14
|
+
* - Per-device write barriers prevent stale poll data overwriting recent writes
|
|
15
|
+
* - Smart pending-value matching: confirming snapshots are accepted early
|
|
12
16
|
* - Subscription model for pushing updates via updateValue
|
|
13
17
|
*/
|
|
14
18
|
export declare class FeatureCache {
|
|
15
19
|
private readonly log;
|
|
16
20
|
private readonly client;
|
|
17
21
|
private readonly values;
|
|
18
|
-
private readonly
|
|
22
|
+
private readonly writeBarriers;
|
|
19
23
|
private readonly subscriptions;
|
|
20
24
|
private pollTimer;
|
|
21
25
|
private consecutiveFailures;
|
|
22
26
|
private stopped;
|
|
23
27
|
private readonly pollIntervalMs;
|
|
24
|
-
private readonly writeBarrierMs;
|
|
25
28
|
private readonly pollBackoffBaseMs;
|
|
26
29
|
private readonly pollBackoffMaxMs;
|
|
27
30
|
private readonly snapshotFilter?;
|
|
28
|
-
constructor(log: IotasLogger, client:
|
|
31
|
+
constructor(log: IotasLogger, client: FeatureUpdater & {
|
|
32
|
+
getRooms(): Promise<Rooms>;
|
|
33
|
+
}, options?: FeatureCacheOptions);
|
|
29
34
|
seed(rooms: Rooms): void;
|
|
30
35
|
get(featureId: string): number | undefined;
|
|
31
36
|
set(featureId: string, value: number): void;
|
|
@@ -45,7 +50,7 @@ export declare class FeatureCache {
|
|
|
45
50
|
/**
|
|
46
51
|
* Reset for a fresh start (used when re-discovering devices).
|
|
47
52
|
*
|
|
48
|
-
* This clears all cached values, write
|
|
53
|
+
* This clears all cached values, write barriers, and subscriptions.
|
|
49
54
|
* Callers must re-register subscriptions after calling reset().
|
|
50
55
|
*
|
|
51
56
|
* Expected call order:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { getWriteBarrierMs } from '../quirks.js';
|
|
2
|
+
import { DEFAULT_WRITE_BARRIER_MS } from '../defaults.js';
|
|
1
3
|
const DEFAULT_POLL_INTERVAL_MS = 30_000;
|
|
2
|
-
const DEFAULT_WRITE_BARRIER_MS = 5_000;
|
|
3
4
|
const DEFAULT_POLL_BACKOFF_BASE_MS = 5_000;
|
|
4
5
|
const DEFAULT_POLL_BACKOFF_MAX_MS = 300_000; // 5 minutes max
|
|
5
6
|
/**
|
|
@@ -7,20 +8,20 @@ const DEFAULT_POLL_BACKOFF_MAX_MS = 300_000; // 5 minutes max
|
|
|
7
8
|
*
|
|
8
9
|
* - Seeded from discovery snapshot (no cold-start defaults)
|
|
9
10
|
* - Single getRooms() call per poll cycle
|
|
10
|
-
* -
|
|
11
|
+
* - Per-device write barriers prevent stale poll data overwriting recent writes
|
|
12
|
+
* - Smart pending-value matching: confirming snapshots are accepted early
|
|
11
13
|
* - Subscription model for pushing updates via updateValue
|
|
12
14
|
*/
|
|
13
15
|
export class FeatureCache {
|
|
14
16
|
log;
|
|
15
17
|
client;
|
|
16
18
|
values = new Map();
|
|
17
|
-
|
|
19
|
+
writeBarriers = new Map();
|
|
18
20
|
subscriptions = new Set();
|
|
19
21
|
pollTimer = null;
|
|
20
22
|
consecutiveFailures = 0;
|
|
21
23
|
stopped = false;
|
|
22
24
|
pollIntervalMs;
|
|
23
|
-
writeBarrierMs;
|
|
24
25
|
pollBackoffBaseMs;
|
|
25
26
|
pollBackoffMaxMs;
|
|
26
27
|
snapshotFilter;
|
|
@@ -28,7 +29,6 @@ export class FeatureCache {
|
|
|
28
29
|
this.log = log;
|
|
29
30
|
this.client = client;
|
|
30
31
|
this.pollIntervalMs = options?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
31
|
-
this.writeBarrierMs = options?.writeBarrierMs ?? DEFAULT_WRITE_BARRIER_MS;
|
|
32
32
|
this.pollBackoffBaseMs = options?.pollBackoffBaseMs ?? DEFAULT_POLL_BACKOFF_BASE_MS;
|
|
33
33
|
this.pollBackoffMaxMs = options?.pollBackoffMaxMs ?? DEFAULT_POLL_BACKOFF_MAX_MS;
|
|
34
34
|
this.snapshotFilter = options?.snapshotFilter;
|
|
@@ -50,7 +50,11 @@ export class FeatureCache {
|
|
|
50
50
|
}
|
|
51
51
|
set(featureId, value) {
|
|
52
52
|
this.values.set(featureId, value);
|
|
53
|
-
this.
|
|
53
|
+
this.writeBarriers.set(featureId, {
|
|
54
|
+
timestamp: Date.now(),
|
|
55
|
+
durationMs: DEFAULT_WRITE_BARRIER_MS,
|
|
56
|
+
pendingValue: value,
|
|
57
|
+
});
|
|
54
58
|
}
|
|
55
59
|
/**
|
|
56
60
|
* Write-through: sets cache value with write barrier AND sends the update
|
|
@@ -94,7 +98,7 @@ export class FeatureCache {
|
|
|
94
98
|
/**
|
|
95
99
|
* Reset for a fresh start (used when re-discovering devices).
|
|
96
100
|
*
|
|
97
|
-
* This clears all cached values, write
|
|
101
|
+
* This clears all cached values, write barriers, and subscriptions.
|
|
98
102
|
* Callers must re-register subscriptions after calling reset().
|
|
99
103
|
*
|
|
100
104
|
* Expected call order:
|
|
@@ -107,7 +111,7 @@ export class FeatureCache {
|
|
|
107
111
|
this.stop();
|
|
108
112
|
this.stopped = false;
|
|
109
113
|
this.values.clear();
|
|
110
|
-
this.
|
|
114
|
+
this.writeBarriers.clear();
|
|
111
115
|
this.subscriptions.clear();
|
|
112
116
|
}
|
|
113
117
|
schedulePoll(delayMs) {
|
|
@@ -141,19 +145,27 @@ export class FeatureCache {
|
|
|
141
145
|
const changedFeatureIds = new Set();
|
|
142
146
|
for (const room of rooms) {
|
|
143
147
|
for (const device of room.devices) {
|
|
148
|
+
const deviceBarrierMs = getWriteBarrierMs(device);
|
|
144
149
|
for (const feature of device.features) {
|
|
145
150
|
if (feature.value === undefined) {
|
|
146
151
|
continue;
|
|
147
152
|
}
|
|
148
153
|
const featureId = feature.id.toString();
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
const barrier = this.writeBarriers.get(featureId);
|
|
155
|
+
if (barrier) {
|
|
156
|
+
const effectiveBarrierMs = Math.max(barrier.durationMs, deviceBarrierMs);
|
|
157
|
+
if (feature.value === barrier.pendingValue) {
|
|
158
|
+
// Snapshot confirms our write — accept and clear barrier
|
|
159
|
+
this.writeBarriers.delete(featureId);
|
|
160
|
+
}
|
|
161
|
+
else if (now - barrier.timestamp < effectiveBarrierMs) {
|
|
162
|
+
// Conflicting value within barrier window — skip stale data
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
// Barrier expired — accept snapshot regardless
|
|
167
|
+
this.writeBarriers.delete(featureId);
|
|
168
|
+
}
|
|
157
169
|
}
|
|
158
170
|
const oldValue = this.values.get(featureId);
|
|
159
171
|
if (oldValue !== feature.value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureCache.js","sourceRoot":"","sources":["../../../src/cache/featureCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"featureCache.js","sourceRoot":"","sources":["../../../src/cache/featureCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const DEFAULT_CURRENT_TEMPERATURE_F = 70;
|
|
2
|
+
export declare const DEFAULT_HEAT_SETPOINT_F = 68;
|
|
3
|
+
export declare const DEFAULT_COOL_SETPOINT_F = 76;
|
|
4
|
+
export declare const LOW_BATTERY_THRESHOLD = 20;
|
|
5
|
+
export declare const DEFAULT_WRITE_BARRIER_MS = 5000;
|
|
6
|
+
export declare const LOCK_WRITE_BARRIER_MS = 15000;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const DEFAULT_CURRENT_TEMPERATURE_F = 70;
|
|
2
|
+
export const DEFAULT_HEAT_SETPOINT_F = 68;
|
|
3
|
+
export const DEFAULT_COOL_SETPOINT_F = 76;
|
|
4
|
+
export const LOW_BATTERY_THRESHOLD = 20;
|
|
5
|
+
export const DEFAULT_WRITE_BARRIER_MS = 5_000;
|
|
6
|
+
export const LOCK_WRITE_BARRIER_MS = 15_000;
|
|
7
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -2,10 +2,11 @@ export type { IotasLogger } from './logger.js';
|
|
|
2
2
|
export { IotasClient } from './api/iotasClient.js';
|
|
3
3
|
export { FeatureCache } from './cache/featureCache.js';
|
|
4
4
|
export type { FeatureChangeCallback, SnapshotFilter } from './cache/featureCache.js';
|
|
5
|
-
export type { Room, Rooms, Device, Feature,
|
|
5
|
+
export type { Room, Rooms, Device, Feature, PhysicalDeviceDescription, IotasClientOptions, IotasTokens, FeatureCacheOptions, } from './types.js';
|
|
6
6
|
export { Temperature, filterDevices } from './utils.js';
|
|
7
7
|
export type { DeviceFilterOptions } from './utils.js';
|
|
8
8
|
export { EventTypeName, FeatureCategory, FeatureTypeName, DeviceCategory, isDeviceCategory, READ_ONLY_CATEGORIES, DISCOVERY_EVENT_TYPES, } from './constants.js';
|
|
9
9
|
export { getSerialNumber, getManufacturer, getModel, findFeatureByCategory, findFeatureByEventType } from './device.js';
|
|
10
10
|
export { isReadOnlyCategory, isSupportedFeature, isDiscoverableFeature, isSupportedDevice } from './predicates.js';
|
|
11
|
-
export { ThermostatMode,
|
|
11
|
+
export { ThermostatMode, parseThermostatModes, getThermostatModeAt, findThermostatModeIndex, } from './thermostat.js';
|
|
12
|
+
export { DEFAULT_CURRENT_TEMPERATURE_F, DEFAULT_HEAT_SETPOINT_F, DEFAULT_COOL_SETPOINT_F, LOW_BATTERY_THRESHOLD, } from './defaults.js';
|
package/dist/src/index.js
CHANGED
|
@@ -4,5 +4,6 @@ export { Temperature, filterDevices } from './utils.js';
|
|
|
4
4
|
export { EventTypeName, FeatureCategory, FeatureTypeName, DeviceCategory, isDeviceCategory, READ_ONLY_CATEGORIES, DISCOVERY_EVENT_TYPES, } from './constants.js';
|
|
5
5
|
export { getSerialNumber, getManufacturer, getModel, findFeatureByCategory, findFeatureByEventType } from './device.js';
|
|
6
6
|
export { isReadOnlyCategory, isSupportedFeature, isDiscoverableFeature, isSupportedDevice } from './predicates.js';
|
|
7
|
-
export { ThermostatMode,
|
|
7
|
+
export { ThermostatMode, parseThermostatModes, getThermostatModeAt, findThermostatModeIndex, } from './thermostat.js';
|
|
8
|
+
export { DEFAULT_CURRENT_TEMPERATURE_F, DEFAULT_HEAT_SETPOINT_F, DEFAULT_COOL_SETPOINT_F, LOW_BATTERY_THRESHOLD, } from './defaults.js';
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAcvD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAExH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEnH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,eAAe,CAAC"}
|
package/dist/src/quirks.d.ts
CHANGED
package/dist/src/quirks.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DeviceCategory } from './constants.js';
|
|
2
|
+
import { DEFAULT_WRITE_BARRIER_MS, LOCK_WRITE_BARRIER_MS } from './defaults.js';
|
|
2
3
|
const ZWAVE_MANUFACTURERS = {
|
|
3
4
|
JASCO: '0x0063',
|
|
4
5
|
};
|
|
@@ -6,4 +7,10 @@ export function needsReliableUpdate(device) {
|
|
|
6
7
|
return (device.category === DeviceCategory.Dimmer &&
|
|
7
8
|
device.physicalDeviceDescription?.manufacturer === ZWAVE_MANUFACTURERS.JASCO);
|
|
8
9
|
}
|
|
10
|
+
export function getWriteBarrierMs(device) {
|
|
11
|
+
if (device.category === DeviceCategory.Lock) {
|
|
12
|
+
return LOCK_WRITE_BARRIER_MS;
|
|
13
|
+
}
|
|
14
|
+
return DEFAULT_WRITE_BARRIER_MS;
|
|
15
|
+
}
|
|
9
16
|
//# sourceMappingURL=quirks.js.map
|
package/dist/src/quirks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quirks.js","sourceRoot":"","sources":["../../src/quirks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"quirks.js","sourceRoot":"","sources":["../../src/quirks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGhF,MAAM,mBAAmB,GAAG;IAC1B,KAAK,EAAE,QAAQ;CACP,CAAC;AAEX,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,CACL,MAAM,CAAC,QAAQ,KAAK,cAAc,CAAC,MAAM;QACzC,MAAM,CAAC,yBAAyB,EAAE,YAAY,KAAK,mBAAmB,CAAC,KAAK,CAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,IAAI,MAAM,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,OAAO,wBAAwB,CAAC;AAClC,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -35,8 +35,6 @@ export interface IotasClientOptions {
|
|
|
35
35
|
export interface FeatureCacheOptions {
|
|
36
36
|
/** Polling interval in ms. Default: 30_000 */
|
|
37
37
|
pollIntervalMs?: number;
|
|
38
|
-
/** Write barrier duration in ms. Default: 5_000 */
|
|
39
|
-
writeBarrierMs?: number;
|
|
40
38
|
/** Base delay for exponential backoff on poll failure in ms. Default: 5_000 */
|
|
41
39
|
pollBackoffBaseMs?: number;
|
|
42
40
|
/** Maximum backoff delay on poll failure in ms. Default: 300_000 */
|