lifxlan
Version:
TypeScript library for controlling LIFX products over LAN
262 lines • 13.1 kB
TypeScript
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): {
bytes: Uint8Array<ArrayBufferLike>;
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