winix-control-sdk
v0.2.1
Published
Worker-safe Winix auth/session/device SDK
Maintainers
Readme
winix-control-sdk
Worker-safe Winix SDK and PM2.5 control utilities.
This package is designed for Cloudflare Workers and other modern runtimes with fetch, crypto.subtle, and BigInt support.
Disclaimer
This is an unofficial community package and is not affiliated with Winix.
Install
npm install winix-control-sdkRuntime Requirements
- Node.js 20+ (for local scripts/tests)
- Runtime support for
fetch,atob/btoa,crypto.subtle, andBigInt
Quick Start
import {
resolveWinixAuthState,
resolveWinixSession,
defaultWinixDeviceClient,
} from "winix-control-sdk";
const nowSec = Math.floor(Date.now() / 1000);
const auth = await resolveWinixAuthState(username, password, cachedAuth, nowSec);
const session = await resolveWinixSession(username, auth);
for (const device of session.devices) {
const state = await defaultWinixDeviceClient.getState(device.deviceId);
if (state.power !== "on") await defaultWinixDeviceClient.setPowerOn(device.deviceId);
if (state.mode !== "manual") await defaultWinixDeviceClient.setModeManual(device.deviceId);
await defaultWinixDeviceClient.setAirflow(device.deviceId, "medium");
}Cloudflare Worker Example
import { resolveWinixAuthState, resolveWinixSession } from "winix-control-sdk";
export default {
async scheduled(_event: ScheduledController, env: Env, ctx: ExecutionContext) {
ctx.waitUntil(run(env));
},
};
async function run(env: Env): Promise<void> {
const nowSec = Math.floor(Date.now() / 1000);
const auth = await resolveWinixAuthState(env.WINIX_USERNAME, env.WINIX_PASSWORD, null, nowSec);
const session = await resolveWinixSession(env.WINIX_USERNAME, auth);
console.log("Winix devices", session.devices.length);
}Public API
- Types:
FanSpeed,WinixPowerState,WinixModeState,StoredWinixAuthState,WinixDeviceSummary,WinixDeviceState,WinixResolvedSession - Auth:
resolveWinixAuthState,defaultWinixAuthProvider - Session:
resolveWinixSession,defaultWinixAccountProvider - Device:
defaultWinixDeviceClient - Constants:
WINIX_REFRESH_MARGIN_SECONDS
Development
npm ci
npm run lint
npm run typecheck
npm test
npm run test:coverage
npm run buildRelease
This repo uses Changesets and GitHub Actions for release automation.
Release publishing is configured for npm Trusted Publishing (OIDC), so no long-lived NPM_TOKEN secret is required in GitHub Actions.
One-time npm setup:
- In npm package settings for
winix-control-sdk, add a trusted publisher. - Provider: GitHub Actions
- Repository:
muralidharanv84/winix-control-sdk - Workflow file:
.github/workflows/release.yml - Environment: leave empty (unless you explicitly use one)
