UNPKG

@jingbof/rets-client

Version:

RETS (Real Estate Transaction Standards) Client in Typescript

46 lines (36 loc) 1.22 kB
import { RetsObject } from '../types' import { bufferSplit } from './bufferSplit' const HEADER_BOUNDARY = '\r\n\r\n' const HEADER_ITEM_BOUNDARY = '\r\n' const HEADER_ITEM_PARTS_BOUNDARY = ': ' const readRetsHeaders = (buffer: Buffer): Record<string, any> => { const headers = buffer.toString().split(HEADER_ITEM_BOUNDARY) return headers.reduce((acc, header) => { const [key, value] = header.split(HEADER_ITEM_PARTS_BOUNDARY) return { ...acc, ...(key && value ? { [key]: value } : {}), } }, {}) } export const readRetsObject = (buffer: Buffer): RetsObject | undefined => { const [header, ...rest] = bufferSplit(buffer, Buffer.from(HEADER_BOUNDARY)) if (rest === undefined || rest.length === 0) { return undefined } const data = Buffer.concat(rest) const parsedHeader = readRetsHeaders(header) const contentId = parsedHeader['Content-ID'] ?? '' const objectId = parseInt(parsedHeader['Object-ID'], 10) || 1 const contentType = parsedHeader['Content-Type'] ?? '' const description = parsedHeader.Description ?? '' const location = parsedHeader.Location ?? '' return { data, contentId, objectId, contentType, description, location, } }