UNPKG

lifxlan

Version:

TypeScript library for controlling LIFX products over LAN

261 lines 13.1 kB
import type { Waveform, MultiZoneApplicationRequest, MultiZoneEffectType, MultiZoneExtendedApplicationRequest, TileEffectType, TileEffectSkyType } from './constants/index.js'; export interface Color { hue: number; saturation: number; brightness: number; kelvin: number; } export interface OffsetRef { current: number; } export type Header = ReturnType<typeof decodeHeader>; export type StateService = ReturnType<typeof decodeStateService>; export type StateHostFirmware = ReturnType<typeof decodeStateHostFirmware>; export type StateWifiInfo = ReturnType<typeof decodeStateWifiInfo>; export type StateWifiFirmware = ReturnType<typeof decodeStateWifiFirmware>; export type StateVersion = ReturnType<typeof decodeStateVersion>; export type StateInfo = ReturnType<typeof decodeStateInfo>; export type StateLocation = ReturnType<typeof decodeStateLocation>; export type StateGroup = ReturnType<typeof decodeStateGroup>; export type SetColor = ReturnType<typeof decodeSetColor>; export type LightState = ReturnType<typeof decodeLightState>; export type StateHevCycle = ReturnType<typeof decodeStateHevCycle>; export type StateHevCycleConfiguration = ReturnType<typeof decodeStateHevCycleConfiguration>; export type StateRPower = ReturnType<typeof decodeStateRPower>; export type StateDeviceChain = ReturnType<typeof decodeStateDeviceChain>; export type DeviceChainDevice = StateDeviceChain['devices'][0]; export type State64 = ReturnType<typeof decodeState64>; export type StateZone = ReturnType<typeof decodeStateZone>; export type StateMultiZone = ReturnType<typeof decodeStateMultiZone>; export type StateMultiZoneEffect = ReturnType<typeof decodeStateMultiZoneEffect>; export type StateExtendedColorZones = ReturnType<typeof decodeStateExtendedColorZones>; export type StateTileEffect = ReturnType<typeof decodeStateTileEffect>; export type SensorStateAmbientLight = ReturnType<typeof decodeSensorStateAmbientLight>; /** * Encodes a LIFX protocol message into a binary format. * * This is the core encoding function that creates properly formatted LIFX LAN protocol messages. * The encoding follows the official LIFX protocol specification with optimized binary operations. */ export declare function encode(tagged: boolean, source: number, target: Uint8Array, resRequired: boolean, ackRequired: boolean, sequence: number, type: number, payload?: Uint8Array): Uint8Array; /** * Encodes a UUID string directly into a byte array at the specified offset. * * Efficiently converts UUID format (e.g., "550e8400-e29b-41d4-a716-446655440000") * into 16 bytes at the target location. Optimized for minimal string allocations. */ export declare function encodeUuidTo(bytes: Uint8Array, offset: number, uuid: string): void; export declare function encodeStringTo(bytes: Uint8Array, offset: number, value: string, byteLength: number): void; export declare function encodeString(value: string, byteLength: number): Uint8Array; export declare function encodeTimestampTo(view: DataView, offset: number, date: Date): void; export declare function decodeStateService(bytes: Uint8Array, offsetRef: OffsetRef): { service: number; port: number; }; export declare function decodeStateHostFirmware(bytes: Uint8Array, offsetRef: OffsetRef): { build: Date; reserved: Uint8Array<ArrayBufferLike>; version_minor: number; version_major: number; }; export declare function decodeStateWifiInfo(bytes: Uint8Array, offsetRef: OffsetRef): { signal: number; reserved6: Uint8Array<ArrayBufferLike>; reserved7: Uint8Array<ArrayBufferLike>; reserved8: Uint8Array<ArrayBufferLike>; }; export declare function decodeStateWifiFirmware(bytes: Uint8Array, offsetRef: OffsetRef): { build: Date; reserved6: Uint8Array<ArrayBufferLike>; version_minor: number; version_major: number; }; export declare function decodeStatePower(bytes: Uint8Array, offsetRef: OffsetRef): number; export declare function decodeStateLabel(bytes: Uint8Array, offsetRef: OffsetRef): string; export declare function decodeStateVersion(bytes: Uint8Array, offsetRef: OffsetRef): { vendor: number; product: number; }; export declare function decodeStateInfo(bytes: Uint8Array, offsetRef: OffsetRef): { time: Date; uptime: Date; downtime: Date; }; export declare function decodeStateLocation(bytes: Uint8Array, offsetRef: OffsetRef): { location: Uint8Array<ArrayBufferLike>; label: string; updated_at: Date; }; export declare function decodeStateGroup(bytes: Uint8Array, offsetRef: OffsetRef): { group: string; label: string; updated_at: Date; }; export declare function decodeEchoResponse(bytes: Uint8Array, offsetRef: OffsetRef): Uint8Array; export declare function decodeStateUnhandled(bytes: Uint8Array, offsetRef: OffsetRef): number; export declare function decodeSetColor(bytes: Uint8Array, offsetRef: OffsetRef): { reserved: Uint8Array<ArrayBufferLike>; hue: number; saturation: number; brightness: number; kelvin: number; duration: number; }; export declare function encodeSetColor(hue: number, saturation: number, brightness: number, kelvin: number, duration: number): Uint8Array; export declare function encodeSetPower(power: number | boolean): Uint8Array; export declare function encodeSetLocation(location: Uint8Array | string, label: string, updatedAt: Date): Uint8Array; export declare function encodeSetGroup(group: Uint8Array | string, label: string, updatedAt: Date): Uint8Array; export declare function encodeEchoRequest(echoing: Uint8Array): Uint8Array; export declare function encodeSetWaveform(transient: boolean, hue: number, saturation: number, brightness: number, kelvin: number, period: number, cycles: number, skewRatio: number, waveform: Waveform): Uint8Array; export declare function encodeSetLightPower(level: number | boolean, duration: number): Uint8Array; export declare function encodeSetWaveformOptional(transient: boolean, hue: number, saturation: number, brightness: number, kelvin: number, period: number, cycles: number, skewRatio: number, waveform: Waveform, setHue: boolean, setSaturation: boolean, setBrightness: boolean, setKelvin: boolean): Uint8Array; export declare function encodeSetInfrared(brightness: number): Uint8Array; export declare function encodeSetHevCycle(enable: boolean, durationSeconds: number): Uint8Array; export declare function encodeSetHevCycleConfiguration(indication: boolean, durationSeconds: number): Uint8Array; export declare function encodeGetRPower(relayIndex: number): Uint8Array; export declare function encodeSetRPower(relayIndex: number, level: number): Uint8Array; export declare function encodeGet64(tileIndex: number, length: number, x: number, y: number, width: number): Uint8Array; export declare function encodeGetColorZones(startIndex: number, endIndex: number): Uint8Array; export declare function encodeSetColorZones(startIndex: number, endIndex: number, hue: number, saturation: number, brightness: number, kelvin: number, duration: number, apply: MultiZoneApplicationRequest): Uint8Array; export declare function encodeSetMultiZoneEffect(instanceid: number, effectType: MultiZoneEffectType, speed: number, duration: bigint, parameters: Uint8Array): Uint8Array; export declare function encodeSetExtendedColorZones(duration: number, apply: MultiZoneExtendedApplicationRequest, zoneIndex: number, colorsCount: number, colors: Color[]): Uint8Array; export declare function encodeSetUserPosition(tileIndex: number, userX: number, userY: number): Uint8Array; export declare function encodeSet64(tileIndex: number, length: number, x: number, y: number, width: number, duration: number, colors: Color[]): Uint8Array; export declare function encodeGetTileEffect(): Uint8Array; export declare function encodeSetTileEffect(instanceid: number, effectType: TileEffectType, speed: number, duration: bigint, skyType: TileEffectSkyType, cloudSaturationMin: number, paletteCount: number, palette: Color[]): Uint8Array; export declare function decodeLightState(bytes: Uint8Array, offsetRef: OffsetRef): { hue: number; saturation: number; brightness: number; kelvin: number; power: number; label: string; reserved2: Uint8Array<ArrayBufferLike>; reserved8: Uint8Array<ArrayBufferLike>; }; export declare function decodeStateLightPower(bytes: Uint8Array, offsetRef: OffsetRef): number; export declare function decodeStateInfrared(bytes: Uint8Array, offsetRef: OffsetRef): number; export declare function decodeStateHevCycle(bytes: Uint8Array, offsetRef: OffsetRef): { duration_s: number; remaining_s: number; last_power: boolean; }; export declare function decodeStateHevCycleConfiguration(bytes: Uint8Array, offsetRef: OffsetRef): { indication: number; duration_s: number; }; export declare function decodeStateLastHevCycleResult(bytes: Uint8Array, offsetRef: OffsetRef): number; export declare function decodeStateRPower(bytes: Uint8Array, offsetRef: OffsetRef): { relay_index: number; level: number; }; export declare function decodeStateDeviceChain(bytes: Uint8Array, offsetRef: OffsetRef): { start_index: number; devices: { accel_meas_x: number; accel_meas_y: number; accel_meas_z: number; reserved6: Uint8Array; user_x: number; user_y: number; width: number; height: number; reserved7: Uint8Array; device_version_vendor: number; device_version_product: number; reserved8: Uint8Array; firmware_build: Date; reserved9: Uint8Array; firmware_version_minor: number; firmware_version_major: number; reserved10: Uint8Array; }[]; tile_devices_count: number; }; export declare function decodeState64(bytes: Uint8Array, offsetRef: OffsetRef): { tile_index: number; reserved6: Uint8Array<ArrayBufferLike>; x: number; y: number; width: number; colors: Color[]; }; export declare function decodeStateZone(bytes: Uint8Array, offsetRef: OffsetRef): { zones_count: number; zone_index: number; hue: number; saturation: number; brightness: number; kelvin: number; }; export declare function decodeStateMultiZone(bytes: Uint8Array, offsetRef: OffsetRef): { zones_count: number; zone_index: number; colors: Color[]; }; export declare function decodeStateMultiZoneEffect(bytes: Uint8Array, offsetRef: OffsetRef): { instanceid: number; type: number; reserved6: Uint8Array<ArrayBufferLike>; speed: number; duration: bigint; reserved7: Uint8Array<ArrayBufferLike>; reserved8: Uint8Array<ArrayBufferLike>; parameters: Uint8Array<ArrayBufferLike>; }; export declare function decodeStateExtendedColorZones(bytes: Uint8Array, offsetRef: OffsetRef): { zones_count: number; zone_index: number; colors_count: number; colors: Color[]; }; export declare function decodeStateTileEffect(bytes: Uint8Array, offsetRef: OffsetRef): { reserved0: number; instanceid: number; type: number; speed: number; duration: bigint; reserved1: Uint8Array<ArrayBufferLike>; reserved2: Uint8Array<ArrayBufferLike>; skyType: number; reserved3: Uint8Array<ArrayBufferLike>; cloudSaturationMin: number; reserved4: Uint8Array<ArrayBufferLike>; cloudSaturationMax: number; reserved5: Uint8Array<ArrayBufferLike>; palette_count: number; palette: Color[]; }; export declare function decodeSensorStateAmbientLight(bytes: Uint8Array, offsetRef: OffsetRef): { lux: number; }; export declare const getHeaderSize: (view: DataView, offset?: number) => number; export declare const getHeaderFlags: (view: DataView, offset?: number) => number; export declare const getHeaderTagged: (view: DataView, offset?: number) => boolean; export declare const getHeaderSource: (view: DataView, offset?: number) => number; export declare const getHeaderTarget: (bytes: Uint8Array, offset?: number) => Uint8Array; export declare const getHeaderResponseFlags: (view: DataView, offset?: number) => number; export declare const getHeaderResponseRequired: (responseFlags: number) => boolean; export declare const getHeaderAcknowledgeRequired: (responseFlags: number) => boolean; export declare const getHeaderType: (view: DataView, offset?: number) => number; export declare const getHeaderSequence: (view: DataView, offset?: number) => number; export declare const getPayload: (bytes: Uint8Array, offset?: number) => Uint8Array; export declare function decodeHeader(bytes: Uint8Array, offset?: number): { size: number; protocol: number; addressable: boolean; tagged: boolean; origin: number; source: number; target: Uint8Array<ArrayBufferLike>; reserved1: () => Uint8Array<ArrayBufferLike>; reserved2: () => Uint8Array<ArrayBufferLike>; res_required: boolean; ack_required: boolean; reserved3: number; reserved4: () => Uint8Array<ArrayBufferLike>; sequence: number; reserved5: () => Uint8Array<ArrayBufferLike>; type: number; }; //# sourceMappingURL=encoding.d.ts.map