matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
73 lines • 2.58 kB
TypeScript
/**
* Programmatic builders for legacy V1 "rr" map binary frames, used by LegacyMapParser tests.
* No live device or captured sample is required — every buffer is constructed byte-by-byte.
*/
export declare const LEGACY_BLOCK_TYPE: {
readonly CHARGER_LOCATION: 1;
readonly IMAGE: 2;
readonly ROBOT_POSITION: 8;
readonly CURRENTLY_CLEANED_BLOCKS: 11;
};
export interface LegacyMapFixtureOptions {
robotPosition?: {
x: number;
y: number;
angle?: number;
};
chargerPosition?: {
x: number;
y: number;
angle?: number;
};
imagePixels?: {
floor?: {
x: number;
y: number;
segId: number;
}[];
obstacle?: {
x: number;
y: number;
}[];
};
imageSize?: {
width: number;
height: number;
left: number;
top: number;
};
cleanedBlocks?: number[];
/** Raw pre-built blocks (e.g. from {@link buildGenericBlock}) inserted after the known blocks. */
unknownBlocks?: Buffer[];
}
/** Writes the 20-byte "rr" header. SHA1 digest is intentionally omitted — LegacyMapParser does not verify it. */
export declare function buildMapHeader(dataLength: number, headerLength?: number): Buffer;
export declare function buildPositionBlock(type: number, x: number, y: number, angle?: number): Buffer;
export declare function buildImageBlock(pixels: {
floor?: {
x: number;
y: number;
segId: number;
}[];
obstacle?: {
x: number;
y: number;
}[];
}, size: {
width: number;
height: number;
left: number;
top: number;
}): Buffer;
export declare function buildCleanedBlocksBlock(segmentIds: number[]): Buffer;
/** Builds a raw block of an arbitrary (non-parsed) type, to verify unknown blocks are skipped without error. */
export declare function buildGenericBlock(type: number, payloadLength?: number): Buffer;
/** Builds a minimal valid V1 "rr" map binary with the requested blocks. */
export declare function buildLegacyMapBuffer(options: LegacyMapFixtureOptions): Buffer;
/**
* Builds the inner-encrypted V1 map push payload as sent on Protocol 301: gzip-compress the
* "rr" binary, AES-128-CBC encrypt (key=sessionNonce, IV=zeros), then prepend a 24-byte envelope.
* Mirrors the device's wire format so decryptAndUnzipV1Map can round-trip it in tests.
*/
export declare function buildEncryptedV1MapPayload(rrBinary: Buffer, sessionNonce: Buffer): Buffer;
//# sourceMappingURL=legacyMapFixture.d.ts.map