homebridge-kasa 9.1.3 → 9.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.
package/README.md CHANGED
@@ -13,6 +13,7 @@ Originally forked from [plasticrake/homebridge-tplink-smarthome](https://github.
13
13
  - **Legacy XOR** - UDP/TCP on port 9999 (classic Kasa devices)
14
14
  - **KLAP v2** - HTTP-based with AES-encrypted sessions (newer firmware)
15
15
  - **AES** - HTTP-based with AES-CBC via RSA handshake (Tapo-protocol devices)
16
+ - **TPAP** - HTTP-based with SPAKE2+ authentication (recent KP125M firmware)
16
17
 
17
18
  ## Models Supported
18
19
 
@@ -72,7 +73,7 @@ If you only have older Kasa devices that haven't been firmware-updated, no crede
72
73
 
73
74
  #### With Kasa credentials (recommended)
74
75
 
75
- Newer devices (e.g. KP125M) and firmware-updated devices (e.g. HS103 with recent firmware) use the KLAP v2 protocol and require your Kasa account credentials to be discovered. Without credentials, only legacy devices on port 9999 will be found.
76
+ Newer devices (e.g. KP125M) and firmware-updated devices (e.g. HS103 with recent firmware) use authenticated KLAP, AES, or TPAP protocols and require your Kasa account credentials to be discovered. Without credentials, only legacy devices on port 9999 will be found.
76
77
 
77
78
  ```json
78
79
  "platforms": [{
@@ -128,7 +129,7 @@ Devices that support energy monitoring (HS110, etc) will have extra characterist
128
129
  This plugin discovers devices using two methods:
129
130
 
130
131
  - **Legacy UDP broadcast** (port 9999) for older devices. This is also how the Kasa app finds older devices.
131
- - **KLAP v2 subnet scan** (port 80) for newer/updated devices. Requires `kasaUsername` and `kasaPassword` to be configured. The plugin scans your subnet for devices speaking the KLAP v2 protocol, which newer firmware and models like the KP125M use.
132
+ - **Authenticated HTTP subnet scan** (port 80) for newer/updated devices using KLAP v2, AES, or TPAP. Requires `kasaUsername` and `kasaPassword` to be configured. This includes Matter-capable models like the KP125M.
132
133
 
133
134
  Try setting the `broadcast` configuration to your subnet broadcast address (e.g. `192.168.1.255`) if you're having discovery issues. This is used by both discovery methods. Some users have reported that rebooting their router or changing some router settings have fixed discovery issues.
134
135
 
@@ -168,3 +169,5 @@ You can remove them by running:
168
169
  ## Credits
169
170
 
170
171
  Thanks to George Georgovassilis and Thomas Baust for [reverse engineering the HS1XX protocol](https://blog.georgovassilis.com/2016/05/07/controlling-the-tp-link-hs100-wi-fi-smart-plug/).
172
+
173
+ TPAP support is based on protocol research and implementations from [python-kasa](https://github.com/python-kasa/python-kasa/pull/1592) and the MIT-licensed [ioBroker.tapo](https://github.com/TA2k/ioBroker.tapo) project.
@@ -141,7 +141,7 @@
141
141
  "kasaUsername": {
142
142
  "title": "Kasa Username",
143
143
  "type": "string",
144
- "description": "Your TP-Link Kasa account email. Required to discover newer devices (e.g. KP125M, firmware-updated HS103) that use the KLAP/AES protocol.",
144
+ "description": "Your TP-Link Kasa account email. Required to discover newer devices (e.g. KP125M, firmware-updated HS103) that use the KLAP/AES/TPAP protocols.",
145
145
  "placeholder": "you@example.com"
146
146
  },
147
147
  "kasaPassword": {
@@ -178,7 +178,7 @@
178
178
  {
179
179
  "type": "fieldset",
180
180
  "title": "Kasa Account (Optional)",
181
- "description": "Required for newer devices that use the KLAP/AES protocol (e.g. KP125M, firmware-updated HS103). Without credentials, only legacy devices on port 9999 will be discovered.",
181
+ "description": "Required for newer devices that use the KLAP/AES/TPAP protocols (e.g. KP125M, firmware-updated HS103). Without credentials, only legacy devices on port 9999 will be discovered.",
182
182
  "expandable": true,
183
183
  "items": [
184
184
  "kasaUsername",
@@ -73,14 +73,14 @@ export class TplinkSmarthomePlatform {
73
73
  return client;
74
74
  }
75
75
  setupKlapDiscovery() {
76
- // KLAP/AES discovery for newer devices (port 80)
76
+ // KLAP/AES/TPAP discovery for newer devices (port 80)
77
77
  // Only enabled when Kasa credentials are configured
78
78
  if (!this.config.kasaCredentials) {
79
- this.log.info("No Kasa credentials configured. Newer devices using KLAP/AES protocol will not be discovered. " +
79
+ this.log.info("No Kasa credentials configured. Newer devices using KLAP/AES/TPAP protocols will not be discovered. " +
80
80
  "Set kasaUsername and kasaPassword in config to enable.");
81
81
  return undefined;
82
82
  }
83
- this.log.info("Kasa credentials configured, enabling KLAP/AES discovery for newer devices");
83
+ this.log.info("Kasa credentials configured, enabling KLAP/AES/TPAP discovery for newer devices");
84
84
  const klapDiscovery = new KlapDiscovery({
85
85
  credentials: this.config.kasaCredentials,
86
86
  devices: this.config.discoveryOptions.devices,
@@ -124,7 +124,7 @@ export class TplinkSmarthomePlatform {
124
124
  return si.deviceId != null && si.deviceId.length > 0;
125
125
  },
126
126
  });
127
- // Start KLAP/AES discovery alongside legacy (if credentials configured)
127
+ // Start KLAP/AES/TPAP discovery alongside legacy (if credentials configured)
128
128
  if (this.klapDiscovery) {
129
129
  this.klapDiscovery.start();
130
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TplinkSmarthomePlatform.js","sourceRoot":"","sources":["../src/TplinkSmarthomePlatform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TplinkSmarthomePlatform.js","sourceRoot":"","sources":["../src/TplinkSmarthomePlatform.ts"],"names":[],"mappings":"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"}
package/lib/config.d.ts CHANGED
@@ -1,123 +1,33 @@
1
- import type { ErrorObject as AjvErrorObject } from "ajv";
2
- export declare class ConfigParseError extends Error {
3
- readonly errors?: AjvErrorObject<string, Record<string, unknown>, unknown>[] | null | undefined;
4
- /**
5
- * Set by `Error.captureStackTrace`
6
- */
7
- readonly stack = "";
8
- constructor(message: string, errors?: AjvErrorObject<string, Record<string, unknown>, unknown>[] | null | undefined);
9
- }
10
- export interface DeviceConfigInput {
11
- host: string;
12
- port?: number | undefined;
13
- }
14
- export interface TplinkSmarthomeConfigInput {
15
- /**
16
- * Adds energy monitoring characteristics viewable in Eve app
17
- * plug: Amperes, KilowattHours, VoltAmperes, Volts, Watts
18
- * bulb: Watts
19
- * @defaultValue true
20
- */
21
- addCustomCharacteristics?: boolean;
22
- /**
23
- * How often to check device energy monitoring the background (seconds). Set to 0 to disable.
24
- * @defaultValue 20
25
- */
26
- emeterPollingInterval?: number;
27
- /**
28
- * (Watts) For plugs that support energy monitoring (e.g. HS110), min power draw for OutletInUse
29
- * @defaultValue 0
30
- */
31
- inUseThreshold?: number;
32
- /**
33
- * Matching models are created in HomeKit as a Switch instead of an Outlet
34
- * @defaultValue ['HS200', 'HS210']
35
- */
36
- switchModels?: Array<string>;
37
- /**
38
- * port to bind udp socket
39
- */
40
- discoveryPort?: number;
41
- /**
42
- * Broadcast Address. If discovery is not working tweak to match your subnet, eg: 192.168.0.255
43
- * @defaultValue '255.255.255.255'
44
- */
45
- broadcast?: string;
46
- /**
47
- * (seconds) How often to check device status in the background
48
- * @defaultValue 10
49
- */
50
- pollingInterval?: number;
51
- /**
52
- * ["plug", "bulb"] to find all TPLink device types or ["plug"] / ["bulb"] for only plugs or bulbs
53
- * @defaultValue ["plug", "bulb"]
54
- */
55
- deviceTypes?: Array<"plug" | "bulb">;
56
- /**
57
- * Allow-list of MAC addresses to include. If specified will ignore other devices.
58
- * MAC Addresses are normalized, special characters are removed and made uppercase for comparison.
59
- * Supports glob-style patterns
60
- */
61
- macAddresses?: Array<string>;
62
- /**
63
- * Deny-list of MAC addresses to exclude.
64
- * MAC Addresses are normalized, special characters are removed and made uppercase for comparison.
65
- * Supports glob-style patterns
66
- */
67
- excludeMacAddresses?: Array<string>;
68
- /**
69
- * Manual list of devices (see "Manually Specifying Devices" section below)
70
- */
71
- devices?: Array<DeviceConfigInput>;
72
- /**
73
- * (seconds) communication timeout
74
- * @defaultValue 15
75
- */
76
- timeout?: number;
77
- /**
78
- * Use 'tcp' or 'udp' for device communication. Discovery will always use 'udp'
79
- */
80
- transport?: "tcp" | "udp";
81
- /**
82
- * (milliseconds) The time to wait to combine similar commands for a device before sending a command to a device
83
- * @defaultValue 100
84
- */
85
- waitTimeUpdate?: number;
86
- /**
87
- * When true, sets the device port to the port the device used when responding to the discovery ping.
88
- * When false, always uses default port (9999).
89
- * You probably don't want to change this.
90
- */
91
- devicesUseDiscoveryPort?: boolean;
92
- /**
93
- * Kasa/TP-Link account email. Required for newer devices using KLAP v2 or AES protocol.
94
- */
95
- kasaUsername?: string;
96
- /**
97
- * Kasa/TP-Link account password. Required for newer devices using KLAP v2 or AES protocol.
98
- */
99
- kasaPassword?: string;
100
- }
101
- type TplinkSmarthomeConfigDefault = {
102
- addCustomCharacteristics: boolean;
103
- emeterPollingInterval: number;
104
- inUseThreshold: number;
105
- switchModels: Array<string>;
106
- discoveryPort: number;
107
- broadcast: string;
108
- pollingInterval: number;
109
- deviceTypes: Array<"plug" | "bulb">;
110
- macAddresses?: Array<string>;
111
- excludeMacAddresses?: Array<string>;
112
- devices?: Array<{
113
- host: string;
114
- port?: number | undefined;
115
- }>;
116
- timeout: number;
117
- transport: "tcp" | "udp" | undefined;
118
- waitTimeUpdate: number;
119
- devicesUseDiscoveryPort: boolean;
120
- };
1
+ import { z } from "zod";
2
+ declare const configInputSchema: z.ZodObject<{
3
+ addCustomCharacteristics: z.ZodOptional<z.ZodBoolean>;
4
+ emeterPollingInterval: z.ZodOptional<z.ZodNumber>;
5
+ inUseThreshold: z.ZodOptional<z.ZodNumber>;
6
+ switchModels: z.ZodOptional<z.ZodArray<z.ZodString>>;
7
+ discoveryPort: z.ZodOptional<z.ZodNumber>;
8
+ broadcast: z.ZodOptional<z.ZodString>;
9
+ pollingInterval: z.ZodOptional<z.ZodNumber>;
10
+ deviceTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
11
+ plug: "plug";
12
+ bulb: "bulb";
13
+ }>>>;
14
+ macAddresses: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ excludeMacAddresses: z.ZodOptional<z.ZodArray<z.ZodString>>;
16
+ devices: z.ZodOptional<z.ZodArray<z.ZodObject<{
17
+ host: z.ZodString;
18
+ port: z.ZodOptional<z.ZodNumber>;
19
+ }, z.core.$strip>>>;
20
+ timeout: z.ZodOptional<z.ZodNumber>;
21
+ transport: z.ZodOptional<z.ZodEnum<{
22
+ tcp: "tcp";
23
+ udp: "udp";
24
+ }>>;
25
+ waitTimeUpdate: z.ZodOptional<z.ZodNumber>;
26
+ devicesUseDiscoveryPort: z.ZodOptional<z.ZodBoolean>;
27
+ kasaUsername: z.ZodOptional<z.ZodString>;
28
+ kasaPassword: z.ZodOptional<z.ZodString>;
29
+ }, z.core.$strip>;
30
+ export type TplinkSmarthomeConfigInput = z.infer<typeof configInputSchema>;
121
31
  export type TplinkSmarthomeConfig = {
122
32
  addCustomCharacteristics: boolean;
123
33
  emeterPollingInterval: number;
@@ -152,6 +62,26 @@ export type TplinkSmarthomeConfig = {
152
62
  password: string;
153
63
  };
154
64
  };
65
+ type TplinkSmarthomeConfigDefault = {
66
+ addCustomCharacteristics: boolean;
67
+ emeterPollingInterval: number;
68
+ inUseThreshold: number;
69
+ switchModels: Array<string>;
70
+ discoveryPort: number;
71
+ broadcast: string;
72
+ pollingInterval: number;
73
+ deviceTypes: Array<"plug" | "bulb">;
74
+ macAddresses?: Array<string>;
75
+ excludeMacAddresses?: Array<string>;
76
+ devices?: Array<{
77
+ host: string;
78
+ port?: number | undefined;
79
+ }>;
80
+ timeout: number;
81
+ transport: "tcp" | "udp" | undefined;
82
+ waitTimeUpdate: number;
83
+ devicesUseDiscoveryPort: boolean;
84
+ };
155
85
  export declare const defaultConfig: TplinkSmarthomeConfigDefault;
156
86
  export declare function parseConfig(config: Record<string, unknown>): TplinkSmarthomeConfig;
157
87
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBrB,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE3E,MAAM,MAAM,qBAAqB,GAAG;IAClC,wBAAwB,EAAE,OAAO,CAAC;IAClC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IAEvB,kBAAkB,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;KACtC,CAAC;IAEF,gBAAgB,EAAE;QAChB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,uBAAuB,EAAE,OAAO,CAAC;QACjC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QACrC,aAAa,EAAE;YACb,kBAAkB,EAAE;gBAClB,OAAO,EAAE,MAAM,CAAC;gBAChB,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;aACtC,CAAC;YACF,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,mBAAmB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAAE,CAAC,CAAC;KAC9D,CAAC;IAEF,eAAe,CAAC,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAClC,wBAAwB,EAAE,OAAO,CAAC;IAClC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAE7D,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,4BAkB3B,CAAC;AAEF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,qBAAqB,CA6ClF"}
package/lib/config.js CHANGED
@@ -1,40 +1,31 @@
1
- import AjvModule from "ajv";
2
- import addFormatsModule from "ajv-formats";
3
- import configSchema from "../config.schema.json" with { type: "json" };
4
- import { isObjectLike } from "./util/types.js";
5
- const Ajv = AjvModule.default;
6
- const addFormats = addFormatsModule.default;
7
- export class ConfigParseError extends Error {
8
- errors;
9
- /**
10
- * Set by `Error.captureStackTrace`
11
- */
12
- stack = "";
13
- constructor(message, errors) {
14
- super(message);
15
- this.errors = errors;
16
- // remove leading / from dataPath
17
- const errorsAsString = errors != null
18
- ? errors
19
- .map((e) => {
20
- let msg = `\`${e.instancePath.replace(/^\//, "")}\` ${e.message}`;
21
- if ("allowedValues" in e.params) {
22
- msg += `. Allowed values: ${JSON.stringify(e.params.allowedValues)}`;
23
- }
24
- return msg;
25
- })
26
- .join("\n")
27
- : "";
28
- this.name = "ConfigParseError";
29
- if (errorsAsString === "") {
30
- this.message = message;
31
- }
32
- else {
33
- this.message = `${message}:\n${errorsAsString}`;
34
- }
35
- Error.captureStackTrace(this, this.constructor);
36
- }
37
- }
1
+ import { z } from "zod";
2
+ const deviceConfigSchema = z.object({
3
+ host: z.string(),
4
+ port: z.number().optional(),
5
+ });
6
+ const configInputSchema = z.object({
7
+ // HomeKit
8
+ addCustomCharacteristics: z.boolean().optional(),
9
+ emeterPollingInterval: z.number().optional(),
10
+ inUseThreshold: z.number().optional(),
11
+ switchModels: z.array(z.string()).optional(),
12
+ // Discovery
13
+ discoveryPort: z.number().optional(),
14
+ broadcast: z.string().optional(),
15
+ pollingInterval: z.number().optional(),
16
+ deviceTypes: z.array(z.enum(["plug", "bulb"])).optional(),
17
+ macAddresses: z.array(z.string()).optional(),
18
+ excludeMacAddresses: z.array(z.string()).optional(),
19
+ devices: z.array(deviceConfigSchema).optional(),
20
+ // Advanced
21
+ timeout: z.number().optional(),
22
+ transport: z.enum(["tcp", "udp"]).optional(),
23
+ waitTimeUpdate: z.number().optional(),
24
+ devicesUseDiscoveryPort: z.boolean().optional(),
25
+ // Kasa Account
26
+ kasaUsername: z.string().optional(),
27
+ kasaPassword: z.string().optional(),
28
+ });
38
29
  export const defaultConfig = {
39
30
  addCustomCharacteristics: true,
40
31
  emeterPollingInterval: 20,
@@ -52,63 +43,14 @@ export const defaultConfig = {
52
43
  waitTimeUpdate: 100,
53
44
  devicesUseDiscoveryPort: false,
54
45
  };
55
- function isArrayOfStrings(value) {
56
- return Array.isArray(value) && value.every((item) => typeof item === "string");
57
- }
58
- function isDeviceConfigInput(value) {
59
- return (isObjectLike(value) &&
60
- "host" in value &&
61
- typeof value.host === "string" &&
62
- (!("port" in value) || typeof value.port === "number"));
63
- }
64
- function isArrayOfDeviceConfigInput(value) {
65
- return Array.isArray(value) && value.every((item) => isDeviceConfigInput(item));
66
- }
67
- function isTplinkSmarthomeConfigInput(c) {
68
- return (isObjectLike(c) &&
69
- (!("addCustomCharacteristics" in c) ||
70
- typeof c.addCustomCharacteristics === "boolean") &&
71
- (!("emeterPollingInterval" in c) || typeof c.emeterPollingInterval === "number") &&
72
- (!("inUseThreshold" in c) || typeof c.inUseThreshold === "number") &&
73
- (!("switchModels" in c) || isArrayOfStrings(c.switchModels)) &&
74
- (!("discoveryPort" in c) || typeof c.discoveryPort === "number") &&
75
- (!("broadcast" in c) || typeof c.broadcast === "string") &&
76
- (!("pollingInterval" in c) || typeof c.pollingInterval === "number") &&
77
- (!("deviceTypes" in c) || isArrayOfStrings(c.deviceTypes)) &&
78
- (!("macAddresses" in c) ||
79
- isArrayOfStrings(c.macAddresses) ||
80
- c.macAddresses === undefined) &&
81
- (!("excludeMacAddresses" in c) ||
82
- isArrayOfStrings(c.excludeMacAddresses) ||
83
- c.excludeMacAddresses === undefined) &&
84
- (!("devices" in c) ||
85
- isArrayOfDeviceConfigInput(c.devices) ||
86
- c.devices === undefined) &&
87
- (!("timeout" in c) || typeof c.timeout === "number") &&
88
- (!("transport" in c) ||
89
- typeof c.transport === "string" ||
90
- c.transport === undefined) &&
91
- (!("waitTimeUpdate" in c) || typeof c.waitTimeUpdate === "number") &&
92
- (!("kasaUsername" in c) ||
93
- typeof c.kasaUsername === "string" ||
94
- c.kasaUsername === undefined) &&
95
- (!("kasaPassword" in c) ||
96
- typeof c.kasaPassword === "string" ||
97
- c.kasaPassword === undefined));
98
- }
99
46
  export function parseConfig(config) {
100
- const ajv = new Ajv({ allErrors: true });
101
- addFormats(ajv);
102
- ajv.addVocabulary(["placeholder", "titleMap"]);
103
- const validate = ajv.compile(configSchema.schema);
104
- const valid = validate(config);
105
- if (!valid)
106
- throw new ConfigParseError("Error parsing config", validate.errors);
107
- if (!isTplinkSmarthomeConfigInput(config))
108
- throw new ConfigParseError("Error parsing config");
47
+ const result = configInputSchema.safeParse(config);
48
+ if (!result.success) {
49
+ throw new Error(`Error parsing config:\n${result.error.message}`);
50
+ }
109
51
  const c = {
110
52
  ...defaultConfig,
111
- ...config,
53
+ ...result.data,
112
54
  };
113
55
  const defaultSendOptions = {
114
56
  timeout: c.timeout * 1000,
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Device discovery for KLAP v2 and AES protocol TP-Link Kasa devices.
2
+ * Device discovery for authenticated HTTP TP-Link Kasa devices.
3
3
  *
4
- * Discovers devices on port 80 by attempting KLAP/AES handshakes,
4
+ * Discovers devices on port 80 by attempting TPAP, KLAP, and AES handshakes,
5
5
  * then creates adapter instances compatible with the existing HomeKit
6
6
  * device layer.
7
7
  */
@@ -57,7 +57,7 @@ export declare class KlapDiscovery extends EventEmitter {
57
57
  private buildCandidateList;
58
58
  /**
59
59
  * Probe a single candidate IP:
60
- * 1. Detect protocol (KLAP or AES)
60
+ * 1. Detect protocol (TPAP, KLAP, or AES)
61
61
  * 2. Create transport and complete handshake
62
62
  * 3. Fetch sysinfo to identify the device
63
63
  * 4. Create adapter and emit events
@@ -1 +1 @@
1
- {"version":3,"file":"KlapDiscovery.d.ts","sourceRoot":"","sources":["../../src/klap/KlapDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,YAAY,CAAC;AAMpB,KAAK,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAUtC,UAAU,gBAAgB;IACxB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAoKD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwC;IACxE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IACrE,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,gBAAgB;IAYrC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,IAAI,IAAI,IAAI;IAaZ;;OAEG;IACH,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAYrC,OAAO,CAAC,mBAAmB,CAAS;YAEtB,iBAAiB;IAsD/B;;;OAGG;YACW,oBAAoB;IA4BlC;;;OAGG;YACW,kBAAkB;IAkDhC;;;;;;OAMG;YACW,cAAc;IA0B5B;;;;OAIG;YACW,kBAAkB;IAyChC;;;OAGG;YACW,YAAY;IA2B1B;;;OAGG;IACH,OAAO,CAAC,cAAc;CAmEvB"}
1
+ {"version":3,"file":"KlapDiscovery.d.ts","sourceRoot":"","sources":["../../src/klap/KlapDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,YAAY,CAAC;AAMpB,KAAK,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAUtC,UAAU,gBAAgB;IACxB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAoMD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwC;IACxE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IACrE,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,gBAAgB;IAYrC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,IAAI,IAAI,IAAI;IAaZ;;OAEG;IACH,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAYrC,OAAO,CAAC,mBAAmB,CAAS;YAEtB,iBAAiB;IAsD/B;;;OAGG;YACW,oBAAoB;IA4BlC;;;OAGG;YACW,kBAAkB;IAkDhC;;;;;;OAMG;YACW,cAAc;IA0B5B;;;;OAIG;YACW,kBAAkB;IAgDhC;;;OAGG;YACW,YAAY;IA2B1B;;;OAGG;IACH,OAAO,CAAC,cAAc;CAmEvB"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Device discovery for KLAP v2 and AES protocol TP-Link Kasa devices.
2
+ * Device discovery for authenticated HTTP TP-Link Kasa devices.
3
3
  *
4
- * Discovers devices on port 80 by attempting KLAP/AES handshakes,
4
+ * Discovers devices on port 80 by attempting TPAP, KLAP, and AES handshakes,
5
5
  * then creates adapter instances compatible with the existing HomeKit
6
6
  * device layer.
7
7
  */
@@ -15,6 +15,7 @@ import { KlapBulb } from "./KlapBulb.js";
15
15
  import { KlapPlug } from "./KlapPlug.js";
16
16
  import { KlapTransport } from "./KlapTransport.js";
17
17
  import { IotProtocol, isSmartDevice, SmartProtocol } from "./protocol.js";
18
+ import { TpapTransport } from "./TpapTransport.js";
18
19
  // ---------------------------------------------------------------------------
19
20
  // Constants
20
21
  // ---------------------------------------------------------------------------
@@ -65,18 +66,37 @@ function subnetIpsFromBroadcast(broadcast) {
65
66
  return ips;
66
67
  }
67
68
  /**
68
- * Detect which protocol a device on port 80 speaks: KLAP v2 or AES.
69
+ * Detect which authenticated protocol a device on port 80 speaks.
69
70
  * Returns the detected protocol type, or null if neither responds.
70
71
  */
71
72
  async function detectProtocol(host, port, timeoutMs, debug) {
72
- // Try KLAP handshake1 first (POST /app/handshake1 with 16 random bytes)
73
+ // TPAP devices expose exact transport metadata through login/discover.
74
+ // Check first because some firmware serves a generic HTTP 200 response from
75
+ // the KLAP endpoint and returns error_code=1003 to an AES probe.
76
+ try {
77
+ const resp = await httpPost(`http://${host}:${port}/`, JSON.stringify({ method: "login", params: { sub_method: "discover" } }), { "Content-Type": "application/json; charset=UTF-8" }, timeoutMs);
78
+ if (resp.statusCode === 200) {
79
+ const result = JSON.parse(resp.body.toString("utf-8"));
80
+ const advertisedScheme = String(result?.result?.mgt_encrypt_schm?.encrypt_type ?? "").toUpperCase();
81
+ if (result?.error_code === 0 &&
82
+ result?.result?.tpap &&
83
+ (result.result.tpap_preferred === true || advertisedScheme === "TPAP")) {
84
+ debug?.(`${host}: detected TPAP protocol`);
85
+ return "tpap";
86
+ }
87
+ }
88
+ }
89
+ catch (err) {
90
+ debug?.(`${host}: TPAP probe failed: ${err instanceof Error ? err.message : String(err)}`);
91
+ }
92
+ // Try KLAP handshake1 (POST /app/handshake1 with 16 random bytes)
73
93
  try {
74
94
  const seed = crypto.randomBytes(16);
75
95
  const resp = await httpPost(`http://${host}:${port}/app/handshake1`, seed, { "Content-Type": "application/octet-stream" }, timeoutMs);
76
- if (resp.statusCode === 200) {
96
+ if (resp.statusCode === 200 && resp.body.length === 48) {
77
97
  return "klap";
78
98
  }
79
- debug?.(`${host}: KLAP probe returned status ${resp.statusCode}`);
99
+ debug?.(`${host}: KLAP probe returned status ${resp.statusCode}, length ${resp.body.length}`);
80
100
  }
81
101
  catch (err) {
82
102
  debug?.(`${host}: KLAP probe failed: ${err instanceof Error ? err.message : String(err)}`);
@@ -324,7 +344,7 @@ export class KlapDiscovery extends EventEmitter {
324
344
  }
325
345
  /**
326
346
  * Probe a single candidate IP:
327
- * 1. Detect protocol (KLAP or AES)
347
+ * 1. Detect protocol (TPAP, KLAP, or AES)
328
348
  * 2. Create transport and complete handshake
329
349
  * 3. Fetch sysinfo to identify the device
330
350
  * 4. Create adapter and emit events
@@ -364,12 +384,19 @@ export class KlapDiscovery extends EventEmitter {
364
384
  credentials: this.credentials,
365
385
  timeout: this.timeout,
366
386
  })
367
- : new AesTransport({
368
- host,
369
- port,
370
- credentials: this.credentials,
371
- timeout: this.timeout,
372
- });
387
+ : protocol === "tpap"
388
+ ? new TpapTransport({
389
+ host,
390
+ port,
391
+ credentials: this.credentials,
392
+ timeout: this.timeout,
393
+ })
394
+ : new AesTransport({
395
+ host,
396
+ port,
397
+ credentials: this.credentials,
398
+ timeout: this.timeout,
399
+ });
373
400
  try {
374
401
  await transport.handshake();
375
402
  }
@@ -1 +1 @@
1
- {"version":3,"file":"KlapDiscovery.js","sourceRoot":"","sources":["../../src/klap/KlapDiscovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KlapDiscovery.js","sourceRoot":"","sources":["../../src/klap/KlapDiscovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { KasaCredentials } from "./types.js";
2
+ export interface TpapTransportOptions {
3
+ host: string;
4
+ port?: number;
5
+ credentials?: KasaCredentials;
6
+ timeout?: number;
7
+ }
8
+ /**
9
+ * TPAP transport for recent TP-Link firmware using SPAKE2+ and AES-CCM.
10
+ *
11
+ * Based on python-kasa's TPAP implementation and the MIT-licensed
12
+ * ioBroker.tapo TypeScript implementation.
13
+ */
14
+ export declare class TpapTransport {
15
+ private readonly host;
16
+ private readonly initialPort;
17
+ private readonly credentials;
18
+ private readonly timeout;
19
+ private port;
20
+ private mac;
21
+ private usesDac;
22
+ private pake;
23
+ private userHashType;
24
+ private session;
25
+ private requestQueue;
26
+ constructor(options: TpapTransportOptions);
27
+ private get baseUrl();
28
+ handshake(): Promise<void>;
29
+ send(request: object): Promise<object>;
30
+ close(): void;
31
+ private discover;
32
+ private login;
33
+ private postJson;
34
+ private authUsername;
35
+ private resolveCredential;
36
+ private createExchange;
37
+ private verifyDacProof;
38
+ private sendOnce;
39
+ private isSessionError;
40
+ private runExclusive;
41
+ }
42
+ //# sourceMappingURL=TpapTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TpapTransport.d.ts","sourceRoot":"","sources":["../../src/klap/TpapTransport.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA2ElD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA8DD;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,YAAY,CAAoC;gBAE5C,OAAO,EAAE,oBAAoB;IAQzC,OAAO,KAAK,OAAO,GAElB;IAEK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgF1B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB5C,KAAK,IAAI,IAAI;YAIC,QAAQ;YAuBR,KAAK;YAKL,QAAQ;IAkBtB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,cAAc;IAwEtB,OAAO,CAAC,cAAc;YA4CR,QAAQ;IAyDtB,OAAO,CAAC,cAAc;YAUR,YAAY;CAa3B"}
@@ -0,0 +1,387 @@
1
+ import { createCipheriv, createDecipheriv, createHash, createHmac, hkdfSync, pbkdf2Sync, randomBytes, timingSafeEqual, verify, X509Certificate, } from "node:crypto";
2
+ import { p256 } from "@noble/curves/p256";
3
+ import { httpPost } from "./http.js";
4
+ const DEFAULT_TIMEOUT = 10_000;
5
+ const MAX_PBKDF2_ITERATIONS = 100_000;
6
+ const TAG_LENGTH = 16;
7
+ const NONCE_LENGTH = 12;
8
+ const PAKE_CONTEXT_TAG = Buffer.from("PAKE V1");
9
+ const P256_M = Buffer.from("02886e2f97ace46e55ba9dd7242579f2993b64e16ef3dcab95afd497333d8fa12f", "hex");
10
+ const P256_N = Buffer.from("03d8bbd6c639c62937b04d997f38c3770719c629d7014d49a24b4f98baa1292b49", "hex");
11
+ const TPAP_ROOT_CA = `-----BEGIN CERTIFICATE-----
12
+ MIICNzCCAdygAwIBAgIUNLD7w5j5WU/efCe8bqkfGSRGgLYwCgYIKoZIzj0EAwIw
13
+ ezEnMCUGA1UEAwweVFAtTElOSyBTWVNURU1TIERFVklDRSBST09UIENBMR0wGwYD
14
+ VQQKDBRUUC1MSU5LIFNZU1RFTVMgSU5DLjEPMA0GA1UEBwwGSXJ2aW5lMRMwEQYD
15
+ VQQIDApDYWxpZm9ybmlhMQswCQYDVQQGEwJVUzAgFw0yNDExMjIwMjU3NDhaGA8y
16
+ MDU0MTExNTAyNTc0OFowezEnMCUGA1UEAwweVFAtTElOSyBTWVNURU1TIERFVklD
17
+ RSBST09UIENBMR0wGwYDVQQKDBRUUC1MSU5LIFNZU1RFTVMgSU5DLjEPMA0GA1UE
18
+ BwwGSXJ2aW5lMRMwEQYDVQQIDApDYWxpZm9ybmlhMQswCQYDVQQGEwJVUzBZMBMG
19
+ ByqGSM49AgEGCCqGSM49AwEHA0IABLwo8H9H6BoJDvcoewi4wPrPryVXir4z4yXV
20
+ n29R5XCAcFfKk06pYPupG6pjaKOLKWXnaOdPZThDFxwGLo3urV2jPDA6MAsGA1Ud
21
+ DwQEAwIBhjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRivfUtiHYsZBOKo80uZEwk
22
+ XhBkdDAKBggqhkjOPQQDAgNJADBGAiEA+7j5jemtXcGYN0unH+9rjVhVAL7WrsOi
23
+ 5rbc0IIvD6MCIQCZuGGssu4Ygt2V8Vr0QF2fO9wxfNB3aRRMYQ+6lMrLGA==
24
+ -----END CERTIFICATE-----`;
25
+ const JSON_HEADERS = {
26
+ "Content-Type": "application/json; charset=UTF-8",
27
+ Accept: "application/json",
28
+ Connection: "Keep-Alive",
29
+ };
30
+ function hash(name, value) {
31
+ return createHash(name).update(value).digest();
32
+ }
33
+ function len8le(value) {
34
+ const length = Buffer.alloc(8);
35
+ length.writeBigUInt64LE(BigInt(value.length));
36
+ return Buffer.concat([length, value]);
37
+ }
38
+ function bufferToBigInt(value) {
39
+ return BigInt(`0x${value.toString("hex") || "0"}`);
40
+ }
41
+ function encodeScalar(value) {
42
+ const hex = value.toString(16);
43
+ const encoded = Buffer.from(hex.length % 2 === 0 ? hex : `0${hex}`, "hex");
44
+ if (encoded.length % 2 === 0)
45
+ return encoded;
46
+ return (encoded[0] & 0x80) !== 0
47
+ ? Buffer.concat([Buffer.from([0]), encoded])
48
+ : encoded;
49
+ }
50
+ function hkdf(input, salt, info, length) {
51
+ return Buffer.from(hkdfSync("sha256", input, salt, Buffer.from(info), length));
52
+ }
53
+ function hkdfExpand(label, input, length) {
54
+ return hkdf(input, Buffer.alloc(length), label, length);
55
+ }
56
+ function parseJson(body, context) {
57
+ try {
58
+ const result = JSON.parse(body.toString("utf-8"));
59
+ if (typeof result !== "object" || result == null || Array.isArray(result)) {
60
+ throw new Error("response is not an object");
61
+ }
62
+ return result;
63
+ }
64
+ catch (error) {
65
+ throw new Error(`${context}: invalid JSON response (${error instanceof Error ? error.message : String(error)})`);
66
+ }
67
+ }
68
+ function resultObject(response, context) {
69
+ const errorCode = Number(response.error_code);
70
+ if (errorCode !== 0)
71
+ throw new Error(`${context}: error_code=${errorCode}`);
72
+ if (typeof response.result !== "object" || response.result == null) {
73
+ throw new Error(`${context}: response missing result`);
74
+ }
75
+ return response.result;
76
+ }
77
+ function certificateFromValue(value) {
78
+ const trimmed = value.trim();
79
+ if (trimmed.includes("BEGIN CERTIFICATE"))
80
+ return new X509Certificate(trimmed);
81
+ return new X509Certificate(Buffer.from(trimmed, "base64"));
82
+ }
83
+ /**
84
+ * TPAP transport for recent TP-Link firmware using SPAKE2+ and AES-CCM.
85
+ *
86
+ * Based on python-kasa's TPAP implementation and the MIT-licensed
87
+ * ioBroker.tapo TypeScript implementation.
88
+ */
89
+ export class TpapTransport {
90
+ host;
91
+ initialPort;
92
+ credentials;
93
+ timeout;
94
+ port;
95
+ mac = "";
96
+ usesDac = false;
97
+ pake = [];
98
+ userHashType = 0;
99
+ session = null;
100
+ requestQueue = Promise.resolve();
101
+ constructor(options) {
102
+ this.host = options.host;
103
+ this.initialPort = options.port ?? 80;
104
+ this.port = this.initialPort;
105
+ this.credentials = options.credentials ?? { username: "", password: "" };
106
+ this.timeout = options.timeout ?? DEFAULT_TIMEOUT;
107
+ }
108
+ get baseUrl() {
109
+ return `http://${this.host}:${this.port}`;
110
+ }
111
+ async handshake() {
112
+ this.session = null;
113
+ await this.discover();
114
+ if (!this.pake.includes(2)) {
115
+ throw new Error(`TPAP handshake failed for ${this.host}: unsupported PAKE modes [${this.pake.join(", ")}]`);
116
+ }
117
+ const userRandom = randomBytes(32);
118
+ const registerResult = await this.login({
119
+ sub_method: "pake_register",
120
+ username: this.authUsername(),
121
+ user_random: userRandom.toString("base64"),
122
+ cipher_suites: [1],
123
+ encryption: ["aes_128_ccm"],
124
+ passcode_type: "userpw",
125
+ stok: null,
126
+ }, "pake_register");
127
+ if (Number(registerResult.cipher_suites) !== 1 ||
128
+ registerResult.encryption !== "aes_128_ccm") {
129
+ throw new Error(`TPAP handshake failed for ${this.host}: unsupported suite/cipher ` +
130
+ `${registerResult.cipher_suites}/${registerResult.encryption}`);
131
+ }
132
+ const exchange = this.createExchange(registerResult, this.resolveCredential(registerResult), userRandom);
133
+ const dacNonce = this.usesDac ? randomBytes(32) : undefined;
134
+ const shareResult = await this.login({
135
+ sub_method: "pake_share",
136
+ user_share: exchange.userShare.toString("base64"),
137
+ user_confirm: exchange.userConfirm.toString("base64"),
138
+ ...(dacNonce ? { dac_nonce: dacNonce.toString("base64") } : {}),
139
+ }, "pake_share");
140
+ const deviceConfirm = Buffer.from(shareResult.dev_confirm ?? "", "base64");
141
+ if (deviceConfirm.length !== exchange.deviceConfirm.length ||
142
+ !timingSafeEqual(deviceConfirm, exchange.deviceConfirm)) {
143
+ throw new Error(`TPAP confirmation mismatch from ${this.host}`);
144
+ }
145
+ if (dacNonce)
146
+ this.verifyDacProof(shareResult, exchange.sharedKey, dacNonce);
147
+ const sessionId = String(shareResult.sessionId ?? shareResult.stok ?? "");
148
+ const sequence = Number(shareResult.start_seq);
149
+ if (!sessionId || !Number.isInteger(sequence) || sequence < 0) {
150
+ throw new Error(`TPAP handshake failed for ${this.host}: missing session fields`);
151
+ }
152
+ this.session = {
153
+ key: hkdf(exchange.sharedKey, Buffer.from("tp-kdf-salt-aes128-key"), "tp-kdf-info-aes128-key", 16),
154
+ baseNonce: hkdf(exchange.sharedKey, Buffer.from("tp-kdf-salt-aes128-iv"), "tp-kdf-info-aes128-iv", NONCE_LENGTH),
155
+ sessionId,
156
+ sequence,
157
+ };
158
+ }
159
+ async send(request) {
160
+ return await this.runExclusive(async () => {
161
+ try {
162
+ return await this.sendOnce(request);
163
+ }
164
+ catch (error) {
165
+ if (error instanceof Error &&
166
+ error.message.includes("response sequence mismatch")) {
167
+ this.session = null;
168
+ throw error;
169
+ }
170
+ if (!this.session || !this.isSessionError(error))
171
+ throw error;
172
+ this.session = null;
173
+ return await this.sendOnce(request);
174
+ }
175
+ });
176
+ }
177
+ close() {
178
+ this.session = null;
179
+ }
180
+ async discover() {
181
+ this.port = this.initialPort;
182
+ const response = await this.postJson({ method: "login", params: { sub_method: "discover" } }, "TPAP discovery");
183
+ const result = resultObject(response, `TPAP discovery at ${this.host}`);
184
+ if (!result.tpap) {
185
+ throw new Error(`TPAP discovery at ${this.host}: response missing tpap metadata`);
186
+ }
187
+ if (Number(result.tpap.tls ?? 0) !== 0) {
188
+ throw new Error(`TPAP discovery at ${this.host}: TLS mode is not supported`);
189
+ }
190
+ this.mac = String(result.mac ?? "");
191
+ this.port = Number(result.tpap.port) || this.initialPort;
192
+ this.usesDac = Boolean(result.tpap.dac);
193
+ this.pake = Array.isArray(result.tpap.pake) ? result.tpap.pake.map(Number) : [];
194
+ this.userHashType = Number(result.tpap.user_hash_type ?? 0);
195
+ }
196
+ async login(params, step) {
197
+ const response = await this.postJson({ method: "login", params }, `TPAP ${step}`);
198
+ return resultObject(response, `TPAP ${step} at ${this.host}`);
199
+ }
200
+ async postJson(payload, context) {
201
+ const response = await httpPost(`${this.baseUrl}/`, JSON.stringify(payload), JSON_HEADERS, this.timeout);
202
+ if (response.statusCode !== 200) {
203
+ throw new Error(`${context} failed for ${this.host}: status ${response.statusCode}`);
204
+ }
205
+ return parseJson(response.body, `${context} at ${this.host}`);
206
+ }
207
+ authUsername() {
208
+ const algorithm = this.userHashType === 1 ? "sha256" : "md5";
209
+ const digest = hash(algorithm, "admin").toString("hex");
210
+ return this.userHashType === 1 ? digest.toUpperCase() : digest;
211
+ }
212
+ resolveCredential(register) {
213
+ const extra = register.extra_crypt;
214
+ if (!extra)
215
+ return `${this.credentials.username}/${this.credentials.password}`;
216
+ if (String(extra.type ?? "").toLowerCase() === "password_shadow") {
217
+ const passwordId = Number(extra.params?.passwd_id ?? 0);
218
+ if (passwordId === 2) {
219
+ return hash("sha1", this.credentials.password).toString("hex");
220
+ }
221
+ if (passwordId === 3) {
222
+ const mac = this.mac
223
+ .replace(/[:-]/g, "")
224
+ .match(/.{2}/g)
225
+ ?.join(":")
226
+ .toUpperCase();
227
+ if (!mac)
228
+ throw new Error(`TPAP handshake failed for ${this.host}: invalid MAC`);
229
+ const usernameHash = hash("md5", this.credentials.username).toString("hex");
230
+ return hash("sha1", `${usernameHash}_${mac}`).toString("hex");
231
+ }
232
+ throw new Error(`TPAP handshake failed for ${this.host}: unsupported password shadow ${passwordId}`);
233
+ }
234
+ throw new Error(`TPAP handshake failed for ${this.host}: unsupported credential transform ${extra.type}`);
235
+ }
236
+ createExchange(register, credential, userRandom) {
237
+ const deviceRandom = Buffer.from(register.dev_random, "base64");
238
+ const deviceSalt = Buffer.from(register.dev_salt, "base64");
239
+ const deviceShare = Buffer.from(register.dev_share, "base64");
240
+ const iterations = Number(register.iterations);
241
+ if (deviceRandom.length === 0 ||
242
+ deviceSalt.length === 0 ||
243
+ deviceShare.length === 0 ||
244
+ !Number.isInteger(iterations) ||
245
+ iterations <= 0 ||
246
+ iterations > MAX_PBKDF2_ITERATIONS) {
247
+ throw new Error(`TPAP register response from ${this.host} is incomplete`);
248
+ }
249
+ const Point = p256.ProjectivePoint;
250
+ const order = p256.CURVE.n;
251
+ const mPoint = Point.fromHex(P256_M);
252
+ const nPoint = Point.fromHex(P256_N);
253
+ const derived = pbkdf2Sync(credential, deviceSalt, iterations, 80, "sha256");
254
+ const w0 = bufferToBigInt(derived.subarray(0, 40)) % order;
255
+ const w1 = bufferToBigInt(derived.subarray(40)) % order;
256
+ const x = bufferToBigInt(Buffer.from(p256.utils.randomPrivateKey()));
257
+ const userPoint = Point.BASE.multiply(x).add(mPoint.multiply(w0));
258
+ const userShare = Buffer.from(userPoint.toRawBytes(false));
259
+ const remotePoint = Point.fromHex(deviceShare);
260
+ const remoteShare = Buffer.from(remotePoint.toRawBytes(false));
261
+ const remotePrime = remotePoint.subtract(nPoint.multiply(w0));
262
+ const z = Buffer.from(remotePrime.multiply(x).toRawBytes(false));
263
+ const v = Buffer.from(remotePrime.multiply(w1).toRawBytes(false));
264
+ const m = Buffer.from(mPoint.toRawBytes(false));
265
+ const n = Buffer.from(nPoint.toRawBytes(false));
266
+ const contextHash = hash("sha256", Buffer.concat([PAKE_CONTEXT_TAG, userRandom, deviceRandom]));
267
+ const transcript = Buffer.concat([
268
+ len8le(contextHash),
269
+ len8le(Buffer.alloc(0)),
270
+ len8le(Buffer.alloc(0)),
271
+ len8le(m),
272
+ len8le(n),
273
+ len8le(userShare),
274
+ len8le(remoteShare),
275
+ len8le(z),
276
+ len8le(v),
277
+ len8le(encodeScalar(w0)),
278
+ ]);
279
+ const transcriptHash = hash("sha256", transcript);
280
+ const confirmationKeys = hkdfExpand("ConfirmationKeys", transcriptHash, 64);
281
+ return {
282
+ userShare,
283
+ userConfirm: createHmac("sha256", confirmationKeys.subarray(0, 32))
284
+ .update(remoteShare)
285
+ .digest(),
286
+ deviceConfirm: createHmac("sha256", confirmationKeys.subarray(32))
287
+ .update(userShare)
288
+ .digest(),
289
+ sharedKey: hkdfExpand("SharedKey", transcriptHash, 32),
290
+ };
291
+ }
292
+ verifyDacProof(result, sharedKey, dacNonce) {
293
+ if (!result.dac_ca || !result.dac_proof) {
294
+ throw new Error(`TPAP handshake failed for ${this.host}: missing DAC proof`);
295
+ }
296
+ const deviceCertificate = certificateFromValue(result.dac_ca);
297
+ const rootCertificate = new X509Certificate(TPAP_ROOT_CA);
298
+ const issuerCertificate = result.dac_ica
299
+ ? certificateFromValue(result.dac_ica)
300
+ : rootCertificate;
301
+ const now = Date.now();
302
+ for (const certificate of [deviceCertificate, issuerCertificate]) {
303
+ if (now < Date.parse(certificate.validFrom) ||
304
+ now > Date.parse(certificate.validTo)) {
305
+ throw new Error(`TPAP handshake failed for ${this.host}: expired DAC certificate`);
306
+ }
307
+ }
308
+ if (!deviceCertificate.verify(issuerCertificate.publicKey)) {
309
+ throw new Error(`TPAP handshake failed for ${this.host}: invalid DAC certificate`);
310
+ }
311
+ if (result.dac_ica && !issuerCertificate.verify(rootCertificate.publicKey)) {
312
+ throw new Error(`TPAP handshake failed for ${this.host}: invalid DAC chain`);
313
+ }
314
+ if (!verify("sha256", Buffer.concat([sharedKey, dacNonce]), deviceCertificate.publicKey, Buffer.from(result.dac_proof, "base64"))) {
315
+ throw new Error(`TPAP handshake failed for ${this.host}: invalid DAC proof`);
316
+ }
317
+ }
318
+ async sendOnce(request) {
319
+ if (!this.session)
320
+ await this.handshake();
321
+ const session = this.session;
322
+ const sequence = session.sequence;
323
+ const nonce = Buffer.from(session.baseNonce);
324
+ nonce.writeUInt32BE(sequence, nonce.length - 4);
325
+ const plaintext = Buffer.from(JSON.stringify(request));
326
+ const cipher = createCipheriv("aes-128-ccm", session.key, nonce, {
327
+ authTagLength: TAG_LENGTH,
328
+ });
329
+ const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
330
+ const sequenceBytes = Buffer.alloc(4);
331
+ sequenceBytes.writeUInt32BE(sequence);
332
+ const payload = Buffer.concat([sequenceBytes, ciphertext, cipher.getAuthTag()]);
333
+ session.sequence += 1;
334
+ const response = await httpPost(`${this.baseUrl}/stok=${session.sessionId}/ds`, payload, { "Content-Type": "application/octet-stream", Connection: "Keep-Alive" }, this.timeout);
335
+ if (response.statusCode !== 200) {
336
+ throw new Error(`TPAP request failed for ${this.host}: status ${response.statusCode}`);
337
+ }
338
+ if (response.body[0] === 0x7b) {
339
+ const outer = parseJson(response.body, `TPAP request at ${this.host}`);
340
+ const errorCode = Number(outer.error_code);
341
+ if (errorCode === 0) {
342
+ throw new Error(`TPAP request at ${this.host}: unencrypted success response`);
343
+ }
344
+ throw new Error(`TPAP session error from ${this.host}: error_code=${errorCode}`);
345
+ }
346
+ if (response.body.length < 4 + TAG_LENGTH) {
347
+ throw new Error(`TPAP response from ${this.host} is too short`);
348
+ }
349
+ const responseSequence = response.body.readUInt32BE(0);
350
+ if (responseSequence !== sequence) {
351
+ throw new Error(`TPAP response sequence mismatch from ${this.host}: ` +
352
+ `expected ${sequence}, received ${responseSequence}`);
353
+ }
354
+ const responseNonce = Buffer.from(session.baseNonce);
355
+ responseNonce.writeUInt32BE(responseSequence, responseNonce.length - 4);
356
+ const encrypted = response.body.subarray(4, -TAG_LENGTH);
357
+ const tag = response.body.subarray(-TAG_LENGTH);
358
+ const decipher = createDecipheriv("aes-128-ccm", session.key, responseNonce, {
359
+ authTagLength: TAG_LENGTH,
360
+ });
361
+ decipher.setAuthTag(tag);
362
+ const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
363
+ return parseJson(decrypted, `TPAP response at ${this.host}`);
364
+ }
365
+ isSessionError(error) {
366
+ return (error instanceof Error &&
367
+ (error.message.includes("error_code=-2203") ||
368
+ error.message.includes("error_code=-40401") ||
369
+ error.message.includes("error_code=-40404") ||
370
+ error.message.includes("ECONNRESET")));
371
+ }
372
+ async runExclusive(operation) {
373
+ const previous = this.requestQueue;
374
+ let release = () => { };
375
+ this.requestQueue = new Promise((resolve) => {
376
+ release = resolve;
377
+ });
378
+ await previous;
379
+ try {
380
+ return await operation();
381
+ }
382
+ finally {
383
+ release();
384
+ }
385
+ }
386
+ }
387
+ //# sourceMappingURL=TpapTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TpapTransport.js","sourceRoot":"","sources":["../../src/klap/TpapTransport.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Shared types for the KLAP/AES transport module.
2
+ * Shared types for authenticated HTTP transports.
3
3
  */
4
4
  export interface KasaCredentials {
5
5
  username: string;
6
6
  password: string;
7
7
  }
8
- export type TransportType = "klap" | "aes";
8
+ export type TransportType = "klap" | "aes" | "tpap";
9
9
  export interface KlapSessionState {
10
10
  cookie: string;
11
11
  encryptionKey: Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/klap/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,CAAC;AAI3C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,sBAAsB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CAChC;AAID,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAID,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/klap/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAIpD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,sBAAsB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CAChC;AAID,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAID,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC;CACxB"}
package/lib/klap/types.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Shared types for the KLAP/AES transport module.
2
+ * Shared types for authenticated HTTP transports.
3
3
  */
4
4
  export {};
5
5
  //# sourceMappingURL=types.js.map
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "homebridge-kasa",
3
3
  "displayName": "Homebridge Kasa",
4
- "version": "9.1.3",
5
- "description": "Kasa smart home plugin for Homebridge. Supports devices using Legacy XOR, KLAP v2, and AES protocols.",
4
+ "version": "9.2.0",
5
+ "description": "Kasa smart home plugin for Homebridge. Supports Legacy XOR, KLAP v2, AES, and TPAP protocols.",
6
6
  "keywords": [
7
7
  "homebridge-plugin",
8
8
  "homebridge",
@@ -34,11 +34,11 @@
34
34
  ],
35
35
  "dependencies": {
36
36
  "@micthiesen/mitools": "^2",
37
- "ajv": "^8.18.0",
38
- "ajv-formats": "^3.0.1",
37
+ "@noble/curves": "1.9.7",
39
38
  "chalk": "^5.4.1",
40
39
  "semver": "^7.7.4",
41
- "tplink-smarthome-api": "~5.0.0"
40
+ "tplink-smarthome-api": "~5.0.0",
41
+ "zod": "4.3.6"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@biomejs/biome": "2.4.8",