UNPKG

node-red-contrib-tplink-tapo-connect-api

Version:

This unofficial node-RED node allows connection to TP-Link Tapo devices. This project has been enhanced with AI support to enable new features. Starting with v0.50, we have added support for the KLAP protocol. To prioritize the operation of this node, we

67 lines 2.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TapoHttpClient = void 0; const axios_1 = __importDefault(require("axios")); class TapoHttpClient { constructor(ip, timeout = 10000) { this.baseUrl = `http://${ip}`; // Use shorter timeout in test environment const effectiveTimeout = process.env['TAPO_CONNECTION_TIMEOUT'] ? parseInt(process.env['TAPO_CONNECTION_TIMEOUT']) : timeout; this.httpClient = axios_1.default.create({ baseURL: this.baseUrl, timeout: effectiveTimeout, headers: { 'Content-Type': 'application/json', 'User-Agent': 'Tapo TypeScript Client' }, validateStatus: (status) => status < 500 }); } async post(endpoint, data, headers) { try { const response = await this.httpClient.post(endpoint, data, headers ? { headers } : undefined); if (!response.data) { throw this.createTapoError(-1, 'Received empty response from device'); } if (response.data.error_code !== 0) { throw this.createTapoError(response.data.error_code, response.data.msg); } return response.data; } catch (error) { if (error instanceof Error && 'errorCode' in error) { throw error; } throw this.createTapoError(-1, `HTTP request failed: ${error}`); } } async get(endpoint, headers) { try { const response = await this.httpClient.get(endpoint, headers ? { headers } : undefined); return response.data; } catch (error) { throw this.createTapoError(-1, `HTTP GET request failed: ${error}`); } } createTapoError(errorCode, message) { const error = new Error(message || `Tapo API error: ${errorCode}`); error.errorCode = errorCode; error.name = 'TapoError'; return error; } setBaseUrl(ip) { this.baseUrl = `http://${ip}`; this.httpClient.defaults.baseURL = this.baseUrl; } setTimeout(timeout) { this.httpClient.defaults.timeout = timeout; } } exports.TapoHttpClient = TapoHttpClient; //# sourceMappingURL=http-client.js.map