@uboness/homebridge-tedee 0.1.1 → 0.2.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +59 -7
  3. package/config.schema.json +256 -106
  4. package/dist/bin/tedee-cleanup.d.ts +3 -0
  5. package/dist/bin/tedee-cleanup.d.ts.map +1 -0
  6. package/dist/bin/tedee-cleanup.js +85 -0
  7. package/dist/bin/tedee-cleanup.js.map +1 -0
  8. package/dist/device/device.d.ts +5 -3
  9. package/dist/device/device.d.ts.map +1 -1
  10. package/dist/device/device.js +13 -14
  11. package/dist/device/device.js.map +1 -1
  12. package/dist/device/index.d.ts +1 -0
  13. package/dist/device/index.d.ts.map +1 -1
  14. package/dist/device/index.js +1 -0
  15. package/dist/device/index.js.map +1 -1
  16. package/dist/device/lock.d.ts +24 -3
  17. package/dist/device/lock.d.ts.map +1 -1
  18. package/dist/device/lock.js +37 -7
  19. package/dist/device/lock.js.map +1 -1
  20. package/dist/settings.d.ts +8 -2
  21. package/dist/settings.d.ts.map +1 -1
  22. package/dist/settings.js +9 -2
  23. package/dist/settings.js.map +1 -1
  24. package/dist/tedee-bridge.d.ts +53 -0
  25. package/dist/tedee-bridge.d.ts.map +1 -0
  26. package/dist/tedee-bridge.js +182 -0
  27. package/dist/tedee-bridge.js.map +1 -0
  28. package/dist/tedee-client.d.ts +1 -6
  29. package/dist/tedee-client.d.ts.map +1 -1
  30. package/dist/tedee-client.js +27 -58
  31. package/dist/tedee-client.js.map +1 -1
  32. package/dist/tedee-platform.d.ts +10 -33
  33. package/dist/tedee-platform.d.ts.map +1 -1
  34. package/dist/tedee-platform.js +70 -148
  35. package/dist/tedee-platform.js.map +1 -1
  36. package/dist/webhook-server.d.ts +28 -0
  37. package/dist/webhook-server.d.ts.map +1 -0
  38. package/dist/{tedee-event-server.js → webhook-server.js} +52 -15
  39. package/dist/webhook-server.js.map +1 -0
  40. package/package.json +7 -4
  41. package/dist/tedee-event-server.d.ts +0 -25
  42. package/dist/tedee-event-server.d.ts.map +0 -1
  43. package/dist/tedee-event-server.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-server.d.ts","sourceRoot":"","sources":["../src/webhook-server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAOxC,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAUnE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQvE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,GAAG,UAAU;IAKjF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAWd,MAAM;IA8BpB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,cAAc;YAKR,QAAQ;YAkBR,gBAAgB;CAiBjC;AAED,yBAAiB,aAAa,CAAC;IAE3B,KAAY,MAAM,GAAG;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CAEJ"}
@@ -1,22 +1,30 @@
1
1
  import EventEmitter from 'node:events';
2
2
  import { createServer } from 'node:http';
3
- import { WEBHOOK_DEFAULT_PORT, WEBHOOK_INSTANCE_HEADER, WEBHOOK_PATH } from "./settings.js";
4
- export class TedeeEventServer {
3
+ import { lookup } from 'node:dns/promises';
4
+ import { networkInterfaces } from 'node:os';
5
+ import { WEBHOOK_DEFAULT_PORT, WEBHOOK_INSTANCE_HEADER, WEBHOOK_PATH, webhookEventPath } from "./settings.js";
6
+ export class WebhookServer {
5
7
  config;
8
+ secret;
6
9
  logger;
7
10
  emitter = new EventEmitter();
8
11
  server;
9
12
  actualPort;
10
- constructor(config, logger) {
13
+ constructor(config, secret, logger) {
11
14
  this.config = config;
15
+ this.secret = secret;
12
16
  this.logger = logger.getLogger('webhook-server');
13
17
  this.emitter.setMaxListeners(1000);
14
18
  }
15
- callbackUrl(host) {
19
+ // Builds the URL a bridge should register with its Tedee bridge. The host is the
20
+ // configured override, or the local IPv4 on the bridge's subnet — the address the
21
+ // bridge can reach us back on (webhook traffic flows bridge -> plugin).
22
+ async webhookUrl(bridgeId, bridgeHost) {
16
23
  if (!this.actualPort) {
17
24
  throw new Error('Webhook server has not started yet');
18
25
  }
19
- return `http://${host}:${this.actualPort}${WEBHOOK_PATH}`;
26
+ const host = this.config.host ?? await this.resolveLocalHost(bridgeHost);
27
+ return `http://${host}:${this.actualPort}${webhookEventPath(bridgeId)}`;
20
28
  }
21
29
  on(event, handler) {
22
30
  this.emitter.on(event, handler);
@@ -64,7 +72,8 @@ export class TedeeEventServer {
64
72
  }
65
73
  async handle(request, response) {
66
74
  const requestUrl = new URL(request.url ?? '/', 'http://localhost');
67
- if (requestUrl.pathname !== WEBHOOK_PATH) {
75
+ const bridgeId = this.parseBridgeId(requestUrl.pathname);
76
+ if (bridgeId === undefined) {
68
77
  response.writeHead(404);
69
78
  response.end();
70
79
  return;
@@ -74,23 +83,28 @@ export class TedeeEventServer {
74
83
  response.end();
75
84
  return;
76
85
  }
77
- let event;
78
- if (request.method === 'POST') {
79
- const body = await this.readBody(request);
80
- event = global.JSON.parse(body);
81
- }
82
- else {
86
+ if (request.method !== 'POST') {
83
87
  response.writeHead(405, { Allow: 'POST' });
84
88
  response.end();
85
89
  return;
86
90
  }
91
+ const body = await this.readBody(request);
92
+ const event = global.JSON.parse(body);
87
93
  response.writeHead(204);
88
94
  response.end();
89
- setImmediate(() => this.emitter.emit('event', event));
95
+ setImmediate(() => this.emitter.emit('event', bridgeId, event));
96
+ }
97
+ parseBridgeId(pathname) {
98
+ const prefix = `${WEBHOOK_PATH}/`;
99
+ if (!pathname.startsWith(prefix)) {
100
+ return undefined;
101
+ }
102
+ const bridgeId = decodeURIComponent(pathname.slice(prefix.length));
103
+ return bridgeId.length > 0 && !bridgeId.includes('/') ? bridgeId : undefined;
90
104
  }
91
105
  validateSecret(request) {
92
106
  const actual = request.headers[WEBHOOK_INSTANCE_HEADER.toLowerCase()];
93
- return Array.isArray(actual) ? actual.includes(this.config.instanceId) : actual === this.config.instanceId;
107
+ return Array.isArray(actual) ? actual.includes(this.secret) : actual === this.secret;
94
108
  }
95
109
  async readBody(request) {
96
110
  const chunks = [];
@@ -105,5 +119,28 @@ export class TedeeEventServer {
105
119
  }
106
120
  return Buffer.concat(chunks).toString('utf8');
107
121
  }
122
+ // Picks the local IPv4 address whose subnet contains the Tedee bridge — that's the
123
+ // interface the kernel would route bridge traffic over, and therefore the address
124
+ // the bridge can reach the plugin on. Throws if no interface matches (eg. bridge
125
+ // unreachable, or on a different L3 segment) unless a host override is configured.
126
+ async resolveLocalHost(bridgeHost) {
127
+ const { address: bridgeIp } = await lookup(bridgeHost, { family: 4 });
128
+ const bridgeInt = ipv4ToInt(bridgeIp);
129
+ for (const ifaces of Object.values(networkInterfaces())) {
130
+ for (const iface of ifaces ?? []) {
131
+ if (iface.internal || iface.family !== 'IPv4') {
132
+ continue;
133
+ }
134
+ const mask = ipv4ToInt(iface.netmask);
135
+ if ((ipv4ToInt(iface.address) & mask) === (bridgeInt & mask)) {
136
+ return iface.address;
137
+ }
138
+ }
139
+ }
140
+ throw new Error(`No local IPv4 interface on the same subnet as Tedee bridge [${bridgeHost} → ${bridgeIp}]. Set webhook.host to override.`);
141
+ }
142
+ }
143
+ function ipv4ToInt(ip) {
144
+ return ip.split('.').reduce((acc, part) => ((acc << 8) | (parseInt(part, 10) & 0xff)), 0) >>> 0;
108
145
  }
109
- //# sourceMappingURL=tedee-event-server.js.map
146
+ //# sourceMappingURL=webhook-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-server.js","sourceRoot":"","sources":["../src/webhook-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uboness/homebridge-tedee",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "author": "uboness",
6
6
  "displayName": "Homebridge Tedee",
@@ -30,6 +30,9 @@
30
30
  }
31
31
  },
32
32
  "main": "dist/index.js",
33
+ "bin": {
34
+ "tedee-cleanup": "dist/bin/tedee-cleanup.js"
35
+ },
33
36
  "files": [
34
37
  "tsconfig.json",
35
38
  "LICENSE",
@@ -49,8 +52,8 @@
49
52
  "release:push": "git push --follow-tags",
50
53
  "release:publish": "npm publish --access public",
51
54
  "release": "pnpm run release:bump && pnpm run release:postbump",
52
- "release-minor": "pnpm run release:bump-minor && pnpm run release:push && pnpm run release:publish",
53
- "release-major": "pnpm run release:bump-major && pnpm run release:push && pnpm run release:publish"
55
+ "release-minor": "pnpm run release:bump-minor && pnpm run release:postbump",
56
+ "release-major": "pnpm run release:bump-major && pnpm run release:postbump"
54
57
  },
55
58
  "dependencies": {
56
59
  "undici": "^8.3.0"
@@ -58,7 +61,7 @@
58
61
  "devDependencies": {
59
62
  "@types/node": "^25.9.1",
60
63
  "commit-and-tag-version": "^12.7.3",
61
- "homebridge": "^2.0.2",
64
+ "homebridge": "^2.1.0",
62
65
  "homebridge-config-ui-x": "^5.24.0",
63
66
  "rimraf": "^6.1.3",
64
67
  "typescript": "^6.0.3"
@@ -1,25 +0,0 @@
1
- import type { Detachable, ValueCallback } from './common.ts';
2
- import type { ILogger } from './logger.ts';
3
- import type { Tedee } from './tedee.ts';
4
- export declare class TedeeEventServer {
5
- private readonly config;
6
- private readonly logger;
7
- private readonly emitter;
8
- private server?;
9
- private actualPort?;
10
- constructor(config: TedeeEventServer.Config, logger: ILogger);
11
- callbackUrl(host: string): string;
12
- on(event: 'event', handler: ValueCallback<Tedee.Event>): Detachable;
13
- start(): Promise<void>;
14
- close(): Promise<void>;
15
- private handle;
16
- private validateSecret;
17
- private readBody;
18
- }
19
- export declare namespace TedeeEventServer {
20
- type Config = {
21
- port?: number;
22
- instanceId: string;
23
- };
24
- }
25
- //# sourceMappingURL=tedee-event-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tedee-event-server.d.ts","sourceRoot":"","sources":["../src/tedee-event-server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAOxC,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO;IAM5D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOjC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU;IAK7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAWd,MAAM;IA8BpB,OAAO,CAAC,cAAc;YAKR,QAAQ;CAczB;AAED,yBAAiB,gBAAgB,CAAC;IAE9B,KAAY,MAAM,GAAG;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAA;KACrB,CAAA;CAEJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tedee-event-server.js","sourceRoot":"","sources":["../src/tedee-event-server.ts"],"names":[],"mappings":"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"}