{
  "version": 3,
  "sources": ["../../src/index.ts", "../../src/packets/VBANAudioPacket/EBitsResolutions.ts", "../../src/packets/VBANAudioPacket/ECodecs.ts", "../../src/packets/VBANPacket.ts", "../../src/packets/ESubProtocol.ts", "../../src/commons.ts", "../../src/packets/VBANSpecs.ts", "../../src/packets/VBANAudioPacket/VBANAudioPacket.ts", "../../src/packets/VBANSerialPacket/ESerialStreamType.ts", "../../src/packets/VBANSerialPacket/VBANSerialPacket.ts", "../../src/packets/VBANServicePacket/EServiceFunction.ts", "../../src/packets/VBANServicePacket/EServicePINGApplicationType.ts", "../../src/packets/VBANServicePacket/EServicePINGFeatures.ts", "../../src/packets/VBANServicePacket/EServiceType.ts", "../../src/packets/VBANServicePacket/VBANServicePacket.ts", "../../src/packets/VBANServicePacket/VBANChatPacket.ts", "../../src/packets/VBANServicePacket/VBANPingPacket.ts", "../../src/packets/VBANServicePacket/VBANRealTimePacket.ts", "../../src/packets/VBANServicePacket/VBANRealTimeRegisterAnswerPacket.ts", "../../src/packets/VBANServicePacket/VBANRealTimeRegisterPacket.ts", "../../src/packets/VBANServicePacket/VBANServicePacketFactory.ts", "../../src/packets/VBANTXTPacket/ETextEncoding.ts", "../../src/packets/VBANTXTPacket/VBANTEXTPacket.ts", "../../src/VBANProtocolFactory.ts", "../../src/VBANServer.ts", "../../src/pkg.ts"],
  "sourcesContent": ["// Implementation of the VBAN protocol\n// https://www.vb-audio.com/Voicemeeter/VBANProtocol_Specifications.pdf\n\nexport * from './packets/index.js';\n\nexport * from './commons.js';\nexport * from './VBANProtocolFactory.js';\n\nexport * from './IVBANServerOptions.js';\nexport * from './VBANServer.js';\n\nexport * from './pkg.js';\n", "//Bit Resolution\nexport enum EBitsResolutions {\n    VBAN_DATATYPE_BYTE8 = 0x00,\n    VBAN_DATATYPE_INT16 = 0x01,\n    VBAN_DATATYPE_INT24 = 0x02,\n    VBAN_DATATYPE_INT32 = 0x03,\n    VBAN_DATATYPE_FLOAT32 = 0x04,\n    VBAN_DATATYPE_FLOAT64 = 0x05,\n    VBAN_DATATYPE_12BITS = 0x06,\n    VBAN_DATATYPE_10BITS = 0x07\n}\n", "export enum ECodecs {\n    VBAN_CODEC_PCM = 0x00,\n    VBAN_CODEC_VBCA = 0x10, //VB-AUDIO AOIP CODEC\n    VBAN_CODEC_VBCV = 0x20, //VB-AUDIO VOIP CODEC\n    VBAN_CODEC_UNDEFINED_1 = 0x30,\n    VBAN_CODEC_UNDEFINED_2 = 0x40,\n    VBAN_CODEC_UNDEFINED_3 = 0x50,\n    VBAN_CODEC_UNDEFINED_4 = 0x60,\n    VBAN_CODEC_UNDEFINED_5 = 0x70,\n    VBAN_CODEC_UNDEFINED_6 = 0x80,\n    VBAN_CODEC_UNDEFINED_7 = 0x90,\n    VBAN_CODEC_UNDEFINED_8 = 0xa0,\n    VBAN_CODEC_UNDEFINED_9 = 0xb0,\n    VBAN_CODEC_UNDEFINED_10 = 0xc0,\n    VBAN_CODEC_UNDEFINED_11 = 0xd0,\n    VBAN_CODEC_UNDEFINED_12 = 0xe0,\n    VBAN_CODEC_USER = 0xf0\n}\n", "import { Buffer } from 'buffer';\nimport { ESubProtocol } from './ESubProtocol.js';\nimport { IVBANHeaderCommon } from './IVBANHeaderCommon.js';\nimport { cleanPacketString, PACKET_IDENTIFICATION, sampleRates, STREAM_NAME_LENGTH } from '../commons.js';\nimport { IVBANHeader } from './IVBANHeader.js';\nimport { VBAN_DATA_MAX_SIZE } from './VBANSpecs.js';\n\nexport class VBANPacket {\n    /**\n     * the subProtocol of this packet\n     * {@link ESubProtocol}\n     */\n    public subProtocol: ESubProtocol = ESubProtocol.AUDIO;\n    /**\n     * the name of the current stream .\n     * Voicemeeter rely on it to allow a packet or not\n     */\n    public streamName: string;\n    /**\n     * Sample Rate for this stream\n     */\n    public sr: number;\n    /**\n     * frameCounter allow checking if you receive frame in order, and without losing them\n     */\n    public frameCounter: number;\n\n    public static readonly frameCounters: Map<string, number> = new Map<string, number>();\n\n    /**\n     * Extract headers and data from UDPPacket, each Packet will continue the process\n     */\n    public static prepareFromUDPPacket(headersBuffer: Buffer, checkSR = true): IVBANHeaderCommon {\n        const headers: Partial<IVBANHeaderCommon> = {};\n\n        // SR / Sub protocol (5 + 3 bits)\n        const srsp = headersBuffer.readUInt8(PACKET_IDENTIFICATION.length);\n        //take last 5 bits for sampleRate\n        const srIndex = srsp & 0b00011111; // 5 last Bits\n\n        if ((checkSR && !sampleRates.hasOwnProperty(srIndex)) || sampleRates[srIndex] === undefined) {\n            throw new Error(`unknown sample rate ${srIndex}`);\n        }\n        headers.sr = sampleRates[srIndex];\n        headers.srIndex = srIndex;\n\n        // Samples per frame (8 bits)\n        headers.part1 = headersBuffer.readUInt8(5);\n\n        // Channels (8 bits)\n        headers.part2 = headersBuffer.readUInt8(6);\n\n        headers.part3 = headersBuffer.readUInt8(7);\n\n        // Stream Name (16 bytes)\n        headers.streamName = cleanPacketString(headersBuffer.toString('ascii', 8, 8 + STREAM_NAME_LENGTH));\n\n        // Frame Counter (32 bits)\n        headers.frameCounter = headersBuffer.readUInt32LE(24);\n\n        return headers as IVBANHeaderCommon;\n    }\n\n    /**\n     * common constructor\n     */\n    constructor(headers: IVBANHeader) {\n        this.sr = headers.sr;\n        this.streamName = headers.streamName;\n        // Frame Counter (32 bits)\n        this.frameCounter = headers.frameCounter ?? 1;\n    }\n\n    /**\n     * Convert a VBANPacket to a UDP packet\n     */\n    protected static convertToUDPPacket(headers: Omit<IVBANHeaderCommon, 'srIndex'>, data: Buffer, sampleRate?: number): Buffer {\n        let bufferStart = 0;\n\n        const headersBuffer = Buffer.alloc(28);\n\n        bufferStart += PACKET_IDENTIFICATION.length;\n        headersBuffer.fill(PACKET_IDENTIFICATION, bufferStart - PACKET_IDENTIFICATION.length, bufferStart, 'ascii');\n\n        let rate = sampleRate ?? 0;\n        if (sampleRate === undefined) {\n            //search sampleRate\n            rate = Number(\n                Object.entries(sampleRates)\n                    .find(([, sr]) => sr && sr === headers.sr)\n                    ?.shift()\n            );\n            if (!rate) {\n                throw new Error(`fail to find index for sample rate ${headers.sr}`);\n            }\n        }\n\n        headersBuffer.fill((rate & 0b00011111) | (headers.sp & 0b11100000), bufferStart++);\n\n        headersBuffer.fill(headers.part1, bufferStart++);\n        headersBuffer.fill(headers.part2, bufferStart++);\n        headersBuffer.fill(headers.part3, bufferStart++);\n\n        headersBuffer.fill(headers.streamName.padEnd(STREAM_NAME_LENGTH, '\\0'), bufferStart, bufferStart + STREAM_NAME_LENGTH, 'ascii');\n        bufferStart += STREAM_NAME_LENGTH;\n\n        headersBuffer.writeUInt32LE(headers.frameCounter ?? 1, bufferStart);\n\n        if (data.length > VBAN_DATA_MAX_SIZE) {\n            throw new Error(\n                `VBAN DATA MAX SIZE = ${VBAN_DATA_MAX_SIZE} ! You try to send a packet with ${data.length} bytes . You can use the exported var VBAN_DATA_MAX_SIZE to split your datas in packets`\n            );\n        }\n\n        return Buffer.concat([headersBuffer, data.subarray(0, VBAN_DATA_MAX_SIZE)]);\n    }\n\n    /**\n     * EXPERIMENTAL - DO NOT USE\n     *\n     * @experimental\n     */\n    public static checkFrameCounter(headers: VBANPacket) {\n        //check frameCounter\n        const frameCounterKey = 'str';\n        const frameCounter = this.frameCounters.get(frameCounterKey);\n\n        if (!headers.frameCounter) {\n            return;\n        }\n\n        if (frameCounter && frameCounter > headers.frameCounter && headers.frameCounter > 0) {\n            console.log('frameCounter error');\n        } else if (frameCounter && headers.frameCounter > 0) {\n            console.log('frame counter', 'old', frameCounter, 'new', headers.frameCounter, 'diff', headers.frameCounter - frameCounter);\n        } else if (headers.frameCounter === 0) {\n            console.log('frame 0');\n        }\n\n        this.frameCounters.set(frameCounterKey, headers.frameCounter);\n    }\n}\n", "//sub protocols\nexport enum ESubProtocol {\n    AUDIO = 0x00,\n    SERIAL = 0x20,\n    TEXT = 0x40,\n    SERVICE = 0x60\n}\n", "export const PACKET_IDENTIFICATION = 'VBAN';\n\n/**\n * the stream name is limited to 16 bytes\n */\nexport const STREAM_NAME_LENGTH = 16;\n\nexport const BITS_SPEEDS: Record<number, number> = {\n    0: 0,\n    1: 110,\n    2: 150,\n    3: 300,\n    4: 600,\n    5: 1200,\n    6: 2400,\n    7: 4800,\n    8: 9600,\n    9: 14400,\n    10: 19200,\n    11: 31250,\n    12: 38400,\n    13: 57600,\n    14: 115200,\n    15: 128000,\n    16: 230400,\n    17: 250000,\n    18: 256000,\n    19: 460800,\n    20: 921600,\n    21: 1000000,\n    22: 1500000,\n    23: 2000000,\n    24: 3000000,\n    25: 0,\n    26: 0,\n    27: 0,\n    28: 0,\n    29: 0,\n    30: 0,\n    31: 0\n};\n\nexport enum EFormatBit {\n    /**\n     * 0 to 255\n     */\n    VBAN_DATATYPE_BYTE8 = 0x00\n}\n\nexport const serialStopModes: Array<{ mode: number; stop: number | null }> = [\n    {\n        mode: 0,\n        stop: 1\n    },\n    {\n        mode: 1,\n        stop: 1.5\n    },\n    {\n        mode: 2,\n        stop: 2\n    },\n    {\n        mode: 3,\n        stop: null\n    }\n];\n\nexport function dec2bin(dec: number) {\n    return ((dec >>> 0).toString(2) || '').padStart(8, '0');\n}\n\nexport function bufferToHex(buffer: Buffer) {\n    if (!Buffer.isBuffer(buffer)) {\n        throw new Error('need to be a buffer');\n    }\n\n    let hexString = '';\n    for (let i = 0; i < buffer.length; i++) {\n        const hex = buffer[i].toString(16).padStart(2, '0');\n        hexString += hex;\n\n        if (i < buffer.length - 1) {\n            hexString += ' ';\n        }\n    }\n    return hexString;\n}\n\nexport function prepareStringForPacket(str: string, maxLength: number): string {\n    return str.slice(0, maxLength).padEnd(maxLength, '\\0');\n}\n\nexport function cleanPacketString(str: string): string {\n    return str.replace(/\\0/g, '');\n}\n\n//sample rates\nexport const sampleRates: Record<number, number> = {\n    0: 6000,\n    1: 12000,\n    2: 24000,\n    3: 48000,\n    4: 96000,\n    5: 192000,\n    6: 384000,\n    7: 8000,\n    8: 16000,\n    9: 32000,\n    10: 64000,\n    11: 128000,\n    12: 256000,\n    13: 512000,\n    14: 11025,\n    15: 22050,\n    16: 44100,\n    17: 88200,\n    18: 176400,\n    19: 352800,\n    20: 705600,\n    21: 0,\n    22: 0,\n    23: 0,\n    24: 0,\n    25: 0,\n    26: 0,\n    27: 0,\n    28: 0,\n    29: 0,\n    30: 0,\n    31: 0\n};\n", "export const MAX_FRAME_COUNTER = 4294967295;\nexport const VBAN_DATA_MAX_SIZE = 1436;\nexport const VBAN_PACKET_MAX_SIZE = 1464;\n", "import { VBANPacket } from '../VBANPacket.js';\nimport { ESubProtocol } from '../ESubProtocol.js';\nimport { EBitsResolutions } from './EBitsResolutions.js';\nimport { ECodecs } from './ECodecs.js';\nimport { IVBANHeaderAudio } from './IVBANHeaderAudio.js';\nimport { IBitResolution } from './IBitResolution.js';\nimport { Buffer } from 'buffer';\n\nexport class VBANAudioPacket extends VBANPacket {\n    /**\n     * {@link VBANAudioPacket.subProtocol}\n     */\n    public static readonly subProtocol: ESubProtocol = ESubProtocol.AUDIO;\n    public subProtocol: ESubProtocol = VBANAudioPacket.subProtocol;\n    /**\n     * Number of sample is given by an 8 bits unsigned integer (0 \u2013 255) where 0 means 1 sample and\n     * 255 means 256 samples\n     */\n    public nbSample: number;\n    /**\n     * Number of channel is given by an 8 bits unsigned integer (0 \u2013 255) where 0 means 1 channel\n     * and 255 means 256 channels.\n     */\n    public nbChannel: number;\n    /**\n     * Data type used to store audio sample in the packet\n     * Use it to select the correct bitResolution {@link VBANAudioPacket.bitResolutions}, or directly use {@link VBANAudioPacket.bitResolutionObject}\n     */\n    public bitResolution: EBitsResolutions;\n    /**\n     * the bit resolution selected by the id in {@link VBANAudioPacket.bitResolution}\n     */\n    public readonly bitResolutionObject: IBitResolution;\n    /**\n     * Audio codec used\n     */\n    public codec: ECodecs;\n\n    /**\n     * current audio\n     */\n    public data: Buffer;\n\n    constructor(headers: IVBANHeaderAudio, data: Buffer) {\n        super({\n            ...headers,\n            sp: VBANAudioPacket.subProtocol\n        });\n\n        this.nbSample = headers.nbSample;\n        this.nbChannel = headers.nbChannel;\n        this.bitResolution = headers.bitResolution;\n        if (!VBANAudioPacket.bitResolutions[headers.bitResolution]) {\n            throw new Error(`fail to found bitResolution with ID ${headers.bitResolution}`);\n        }\n        this.bitResolutionObject = VBANAudioPacket.bitResolutions[headers.bitResolution];\n        this.codec = headers.codec;\n\n        this.data = data;\n    }\n\n    public static toUDPPacket(packet: VBANAudioPacket): Buffer {\n        return this.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.sr,\n                frameCounter: packet.frameCounter,\n                part1: packet.nbSample - 1,\n                part2: packet.nbChannel - 1,\n                part3: (packet.bitResolution & 0b0000111) | (packet.codec & 0b11110000)\n            },\n            packet.data\n        );\n    }\n\n    public static fromUDPPacket(headersBuffer: Buffer, dataBuffer: Buffer): VBANAudioPacket {\n        const headers = this.prepareFromUDPPacket(headersBuffer);\n        const nbSample = headers.part1 + 1;\n        const nbChannel = headers.part2 + 1;\n\n        // Data Format / Codec (3 + 1 + 4 bits)\n        const dataFormatAndCodec = headers.part3;\n\n        const bitResolution = dataFormatAndCodec & 0b0000111;\n        if (!EBitsResolutions[bitResolution]) {\n            throw new Error(`unknown bit resolution ${bitResolution}`);\n        }\n\n        const codec = dataFormatAndCodec & 0b11110000;\n        if (!ECodecs[codec]) {\n            throw new Error(`unknown codec ${codec}`);\n        }\n\n        return new VBANAudioPacket(\n            {\n                ...headers,\n                nbSample,\n                nbChannel,\n                bitResolution,\n                codec\n            },\n            dataBuffer\n        );\n    }\n\n    public static bitResolutions: Record<number, IBitResolution> = {\n        0: { bitDepth: 8, signed: false, float: false },\n        1: { bitDepth: 16, signed: true, float: false },\n        2: { bitDepth: 24, signed: true, float: false },\n        3: { bitDepth: 32, signed: true, float: false },\n        4: { bitDepth: 32, signed: true, float: true },\n        5: { bitDepth: 64, signed: true, float: true },\n        6: { bitDepth: 12, signed: true, float: false },\n        7: { bitDepth: 10, signed: true, float: false }\n    };\n}\n", "export enum ESerialStreamType {\n    VBAN_SERIAL_GENERIC = 0x00,\n    VBAN_SERIAL_MIDI = 0x10,\n    VBAN_SERIAL_UNDEFINED_2 = 0x20,\n    VBAN_SERIAL_UNDEFINED_3 = 0x30,\n    VBAN_SERIAL_UNDEFINED_4 = 0x40,\n    VBAN_SERIAL_UNDEFINED_5 = 0x50,\n    VBAN_SERIAL_UNDEFINED_6 = 0x60,\n    VBAN_SERIAL_UNDEFINED_7 = 0x70,\n    VBAN_SERIAL_UNDEFINED_8 = 0x80,\n    VBAN_SERIAL_UNDEFINED_9 = 0x90,\n    VBAN_SERIAL_UNDEFINED_10 = 0xa0,\n    VBAN_SERIAL_UNDEFINED_11 = 0xb0,\n    VBAN_SERIAL_UNDEFINED_12 = 0xc0,\n    VBAN_SERIAL_UNDEFINED_13 = 0xd0,\n    VBAN_SERIAL_UNDEFINED_14 = 0xe0,\n    VBAN_SERIAL_USER = 0xf0\n}\n", "import { VBANPacket } from '../VBANPacket.js';\nimport { ESubProtocol } from '../ESubProtocol.js';\nimport { BITS_SPEEDS, EFormatBit, serialStopModes } from '../../commons.js';\nimport { ISerialBitMode } from './ISerialBitMode.js';\nimport { ESerialStreamType } from './ESerialStreamType.js';\nimport { IVBANHeaderSerial } from './IVBANHeaderSerial.js';\nimport { Buffer } from 'buffer';\n\nexport class VBANSerialPacket extends VBANPacket {\n    /**\n     * {@link VBANSerialPacket.subProtocol}\n     */\n    public static readonly subProtocol: ESubProtocol = ESubProtocol.SERIAL;\n    public subProtocol: ESubProtocol = VBANSerialPacket.subProtocol;\n    /**\n     * This field is used to give possible information on COM port and serial transmission mode related\n     * to a Hardware COM port. This is made to possibly emulate COM to COM port connections and\n     * let the receiver configure the physical COM port in the right mode.\n     */\n    public bitMode: ISerialBitMode;\n    /**\n     * Can be used to define a sub channel (sub serial link) and then manage up to 256 different\n     * serial virtual pipes (ZERO by default).\n     */\n    public channelsIdents: number;\n    /**\n     * SR / bps : Bit rate is given in bps for information only. But it can be useful if serial data come from or go to\n     * a particular COM port. Set to ZERO if there is no particular bit rate.\n     */\n    public bps: number;\n    /**\n     * not used . Replaced by {@link VBANSerialPacket.bps}\n     */\n    public sr: number = 0;\n    /**\n     * Data type used to store data in the packet (ZERO per default). The index is stored on 3 first bits.\n     * Bit 3 must be ZERO. Bits 4 to 7 gives additional mode\n     */\n    public formatBit: EFormatBit;\n    /**\n     * type of stream . MIDI or SERIAL ... But in practice, only serial is used (MIDI is serial)\n     */\n    public streamType: ESerialStreamType;\n\n    public data: Buffer;\n\n    constructor(headers: IVBANHeaderSerial, data: Buffer) {\n        super({\n            ...headers,\n            sp: VBANSerialPacket.subProtocol,\n            sr: 0\n        });\n\n        this.bitMode = headers.bitMode;\n        this.channelsIdents = headers.channelsIdents;\n        this.bps = headers.bps;\n        this.formatBit = headers.formatBit;\n        this.streamType = headers.streamType;\n\n        this.data = data;\n\n        //reset sr\n        this.sr = 0;\n    }\n\n    public static toUDPPacket(packet: VBANSerialPacket): Buffer {\n        let part1 = 0;\n\n        const mode = serialStopModes.find((m) => m.stop === packet.bitMode.stop)?.mode;\n        if (mode === undefined) {\n            throw new Error(`fail to found mode for stop ${packet.bitMode.stop}`);\n        }\n        part1 |= mode & 0b00000011;\n\n        if (packet.bitMode.start) {\n            part1 |= 0b00000100;\n        }\n\n        if (packet.bitMode.parity) {\n            part1 |= 0b00001000;\n        }\n\n        if (packet.bitMode.multipart) {\n            part1 |= 0b10000000;\n        }\n\n        //search bpsId\n        const bpsId =\n            Number(\n                Object.entries(BITS_SPEEDS)\n                    .find(([, bps]) => bps && bps === packet.bps)\n                    ?.shift()\n            ) || 0;\n\n        return this.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.bps,\n                frameCounter: packet.frameCounter,\n                part1,\n                part2: packet.channelsIdents,\n                part3: (packet.formatBit & 0b00000111) | (packet.streamType & 0b11110000)\n            },\n            packet.data,\n            bpsId\n        );\n    }\n\n    public static fromUDPPacket(headersBuffer: Buffer, dataBuffer: Buffer): VBANSerialPacket {\n        const headers = this.prepareFromUDPPacket(headersBuffer, false);\n\n        if (headers.srIndex === undefined || BITS_SPEEDS[headers.srIndex] === undefined) {\n            throw new Error(`unknown bits speed ${headers.srIndex}`);\n        }\n\n        const bps = BITS_SPEEDS[headers.srIndex];\n\n        const bitModeRaw = headers.part1;\n\n        const stopMode = bitModeRaw & 0b00000011;\n\n        const stop = serialStopModes.find((m) => m.mode === stopMode)?.stop ?? null;\n\n        const start = (bitModeRaw & 0b00000100) === 4;\n        const parity = (bitModeRaw & 0b00001000) === 8;\n        const multipart = (bitModeRaw & 0b10000000) === 128;\n\n        const bitMode = {\n            stop,\n            start,\n            parity,\n            multipart\n        };\n\n        const channelsIdents = headers.part2;\n\n        const dataFormat = headers.part3;\n        const formatBit = dataFormat & 0b00000111;\n        if (!EFormatBit[formatBit]) {\n            throw new Error(`unknown format bit ${formatBit}`);\n        }\n\n        const streamType = dataFormat & 0b11110000;\n        if (!ESerialStreamType[streamType]) {\n            throw new Error(`unknown stream type ${streamType}`);\n        }\n\n        return new VBANSerialPacket(\n            {\n                ...headers,\n                bps,\n                bitMode,\n                channelsIdents,\n                formatBit,\n                streamType\n            },\n            dataBuffer\n        );\n    }\n}\n", "export enum EServiceFunction {\n    PING0 = 0x00,\n    REPLY = 0x80\n}\n", "export enum EServicePINGApplicationType {\n    UNKNOWN = 0x00000000,\n    RECEPTOR = 0x00000001,\n    TRANSMITTER = 0x00000002,\n    RECEPTORSPOT = 0x00000004,\n    TRANSMITTERSPOT = 0x00000008,\n    VIRTUALDEVICE = 0x00000010,\n    VIRTUALMIXER = 0x00000020,\n    MATRIX = 0x00000040,\n    DAW = 0x00000080,\n    SERVER = 0x01000000\n}\n", "export enum EServicePINGFeatures {\n    AUDIO = 0x00000001,\n    AOIP = 0x00000002,\n    VOIP = 0x00000004,\n    SERIAL = 0x00000100,\n    MIDI = 0x00000300,\n    FRAME = 0x00001000,\n    TXT = 0x00010000\n}\n", "export enum EServiceType {\n    IDENTIFICATION = 0,\n    CHATUTF8 = 1,\n    RTPACKETREGISTER = 32,\n    RTPACKET = 33\n}\n", "import { Buffer } from 'buffer';\nimport { VBANPacket } from '../VBANPacket.js';\nimport { ESubProtocol } from '../ESubProtocol.js';\nimport { EServiceType } from './EServiceType.js';\nimport { IVBANHeaderService } from './IVBANHeaderService.js';\nimport { EServiceFunction } from './EServiceFunction.js';\n\nexport class VBANServicePacket extends VBANPacket {\n    /**\n     * {@link VBANServicePacket.subProtocol}\n     */\n    public static readonly subProtocol: ESubProtocol = ESubProtocol.SERVICE;\n    public subProtocol: ESubProtocol = VBANServicePacket.subProtocol;\n    /**\n     * Sub Type of the service packet\n     * {@link EServiceType}\n     */\n    public service: EServiceType;\n    /**\n     * current function for this function\n     */\n    public serviceFunction: EServiceFunction;\n    /**\n     * answer is a reply to another request\n     */\n    public isReply: boolean = false;\n\n    public data: unknown;\n\n    /**\n     * not used .\n     */\n    public sr: number = 0;\n\n    constructor(headers: IVBANHeaderService) {\n        super({\n            ...headers,\n            sp: VBANServicePacket.subProtocol,\n            sr: 0\n        });\n\n        this.service = headers.service;\n        this.serviceFunction = headers.serviceFunction;\n        this.isReply = headers.isReply ?? false;\n\n        //force sr to 0\n        this.sr = 0;\n    }\n\n    public toUDPPacket(): ReturnType<(typeof VBANServicePacket)['toUDPPacket']> {\n        return VBANServicePacket.toUDPPacket(this);\n    }\n\n    public static toUDPPacket(packet: VBANServicePacket): Buffer {\n        return VBANServicePacket.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.sr,\n                frameCounter: packet.frameCounter,\n                part1: ((packet.isReply ? 0b10000000 : 0) & 0b10000000) | (packet.serviceFunction & 0b01111111),\n                part2: packet.service,\n                part3: 0\n            },\n            Buffer.from(''),\n            packet.sr\n        );\n    }\n}\n", "import { VBANServicePacket } from './VBANServicePacket.js';\nimport { IVBANHeaderService } from './IVBANHeaderService.js';\nimport { EServiceType } from './EServiceType.js';\nimport { prepareStringForPacket } from '../../commons.js';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.js';\nimport { Buffer } from 'buffer';\n\nexport class VBANChatPacket extends VBANServicePacket {\n    public data: string;\n    constructor(headers: IVBANHeaderService, data: string) {\n        super(headers);\n\n        this.data = data;\n    }\n\n    public static fromUDPPacket(headers: IVBANHeaderCommon, dataBuffer: Buffer): VBANChatPacket {\n        const fn = headers.part1;\n        const serviceFunction = fn & 0b01111111;\n        const isReply = (fn & 0b10000000) >= 1;\n\n        return new VBANChatPacket(\n            {\n                ...headers,\n                service: EServiceType.CHATUTF8,\n                serviceFunction,\n                isReply\n            },\n            dataBuffer.toString()\n        );\n    }\n\n    public toUDPPacket(): ReturnType<(typeof VBANChatPacket)['toUDPPacket']> {\n        return VBANChatPacket.toUDPPacket(this);\n    }\n\n    public static toUDPPacket(packet: VBANChatPacket): Buffer {\n        // 704 is the size for a service packet\n        const dataBuffer = Buffer.alloc(676);\n        dataBuffer.write(prepareStringForPacket(packet.data, 676), 0, 'utf8');\n\n        return this.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.sr,\n                frameCounter: packet.frameCounter,\n                part1: ((packet.isReply ? 0b10000000 : 0) & 0b10000000) | (packet.serviceFunction & 0b01111111),\n                part2: packet.service,\n                part3: 0\n            },\n            dataBuffer,\n            packet.sr\n        );\n    }\n}\n", "import { VBANServicePacket } from './VBANServicePacket.js';\nimport { IVBANHeaderService } from './IVBANHeaderService.js';\nimport { IPacketPingData } from './IPacketPingData.js';\nimport { Buffer } from 'buffer';\nimport { EServiceType } from './EServiceType.js';\nimport { EServicePINGApplicationType } from './EServicePINGApplicationType.js';\nimport { EServicePINGFeatures } from './EServicePINGFeatures.js';\nimport { cleanPacketString, prepareStringForPacket } from '../../commons.js';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.js';\n\nexport class VBANPingPacket extends VBANServicePacket {\n    public data: IPacketPingData;\n    constructor(headers: IVBANHeaderService, data: IPacketPingData) {\n        super(headers);\n\n        this.data = data;\n    }\n\n    public static fromUDPPacket(headers: IVBANHeaderCommon, dataBuffer: Buffer): VBANServicePacket {\n        const fn = headers.part1;\n        const serviceFunction = fn & 0b01111111;\n        const isReply = (fn & 0b10000000) >= 1;\n\n        let currentByte = 0;\n        const getXNextBytes = (size: number): Buffer => {\n            const b = dataBuffer.subarray(currentByte, currentByte + size);\n            currentByte += size;\n            return b;\n        };\n\n        const bitType = getXNextBytes(4).readUInt32LE();\n        const applicationType = EServicePINGApplicationType[bitType] ? bitType : EServicePINGApplicationType.UNKNOWN;\n        const bitFeature = getXNextBytes(4).readUInt32LE();\n        const features = (\n            Object.entries(EServicePINGFeatures).filter(([k]) => Number.isNaN(Number(k))) as Array<[string, EServicePINGFeatures]>\n        )\n            .filter(([, v]) => bitFeature & v)\n            .map(([, v]) => v);\n        const bitFeatureEx = getXNextBytes(4).readUInt32LE();\n        const PreferredRate = getXNextBytes(4).readUInt32LE();\n        const minRate = getXNextBytes(4).readUInt32LE();\n        const maxRate = getXNextBytes(4).readUInt32LE();\n        const colorRGB = getXNextBytes(4).readUInt32LE();\n        const color = {\n            blue: colorRGB & 255,\n            green: (colorRGB >> 8) & 255,\n            red: (colorRGB >> 16) & 255\n        };\n        const nVersion = getXNextBytes(4).readUInt32LE();\n        const GPSPosition = cleanPacketString(getXNextBytes(8).toString('ascii'));\n        const userPosition = cleanPacketString(getXNextBytes(8).toString('ascii'));\n        const langCode = cleanPacketString(getXNextBytes(8).toString('ascii'));\n        const reservedASCII = cleanPacketString(getXNextBytes(8).toString('ascii'));\n        const reservedEx = cleanPacketString(getXNextBytes(64).toString('ascii'));\n        const reservedEx2 = cleanPacketString(getXNextBytes(36).toString('ascii'));\n        const deviceName = cleanPacketString(getXNextBytes(64).toString('ascii'));\n        const manufacturerName = cleanPacketString(getXNextBytes(64).toString('ascii'));\n        const applicationName = cleanPacketString(getXNextBytes(64).toString('ascii'));\n        const hostnameASCII = cleanPacketString(getXNextBytes(64).toString('ascii'));\n        const userName = cleanPacketString(getXNextBytes(128).toString('utf8'));\n        const userComment = cleanPacketString(getXNextBytes(128).toString('utf8'));\n\n        //extract information\n        const data: IPacketPingData = {\n            applicationType,\n            features,\n            bitFeatureEx,\n            PreferredRate,\n            minRate,\n            maxRate,\n            color,\n            nVersion,\n            GPSPosition,\n            userPosition,\n            langCode,\n            reservedASCII,\n            reservedEx,\n            reservedEx2,\n            deviceName,\n            manufacturerName,\n            applicationName,\n            hostname: hostnameASCII,\n            userName,\n            userComment\n        };\n\n        return new VBANPingPacket(\n            {\n                ...headers,\n                service: EServiceType.IDENTIFICATION,\n                serviceFunction,\n                isReply\n            },\n            data\n        );\n    }\n\n    public toUDPPacket(): ReturnType<(typeof VBANPingPacket)['toUDPPacket']> {\n        return VBANPingPacket.toUDPPacket(this);\n    }\n\n    public static toUDPPacket(packet: VBANPingPacket): Buffer {\n        // 704 is the size for a service packet\n        const dataBuffer = Buffer.alloc(676);\n        let offset = 0;\n\n        offset = dataBuffer.writeUInt32LE(packet.data.applicationType, offset);\n        let features = 0;\n        packet.data.features.forEach((feature) => {\n            if (EServicePINGFeatures[feature]) {\n                features = features | feature;\n            }\n        });\n        offset = dataBuffer.writeUInt32LE(features, offset);\n        offset = dataBuffer.writeUInt32LE(packet.data.bitFeatureEx, offset);\n        offset = dataBuffer.writeUInt32LE(packet.data.PreferredRate, offset);\n        offset = dataBuffer.writeUInt32LE(packet.data.minRate, offset);\n        offset = dataBuffer.writeUInt32LE(packet.data.maxRate, offset);\n\n        const { red, green, blue } = packet.data.color;\n        offset = dataBuffer.writeUInt32LE(((red & 255) << 16) | ((green & 255) << 8) | (blue & 255), offset);\n\n        offset = dataBuffer.writeUInt32LE(packet.data.nVersion, offset);\n\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.GPSPosition, 8), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.userPosition, 8), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.langCode, 8), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.reservedASCII, 8), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.reservedEx, 64), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.reservedEx2, 36), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.deviceName, 64), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.manufacturerName, 64), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.applicationName, 64), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.hostname, 64), offset, 'ascii');\n        offset += dataBuffer.write(prepareStringForPacket(packet.data.userName, 128), offset, 'utf8');\n        dataBuffer.write(prepareStringForPacket(packet.data.userComment, 128), offset, 'utf8');\n\n        return this.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.sr,\n                frameCounter: packet.frameCounter,\n                part1: ((packet.isReply ? 0b10000000 : 0) & 0b10000000) | (packet.serviceFunction & 0b01111111),\n                part2: packet.service,\n                part3: 0\n            },\n            dataBuffer,\n            packet.sr\n        );\n    }\n}\n", "import { VBANServicePacket } from './VBANServicePacket.js';\nimport { IVBANHeaderService } from './IVBANHeaderService.js';\nimport { EServiceType } from './EServiceType.js';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.js';\nimport { Buffer } from 'buffer';\n\nexport class VBANRealTimePacket extends VBANServicePacket {\n    /**\n     * not clear about the content of this buffer\n     */\n    public data: Buffer;\n    constructor(headers: IVBANHeaderService, data: Buffer) {\n        super(headers);\n\n        this.data = data;\n    }\n\n    public static fromUDPPacket(headers: IVBANHeaderCommon, dataBuffer: Buffer): VBANRealTimePacket {\n        const fn = headers.part1;\n        const serviceFunction = fn & 0b01111111;\n        const isReply = (fn & 0b10000000) >= 1;\n\n        return new VBANRealTimePacket(\n            {\n                ...headers,\n                service: EServiceType.RTPACKET,\n                serviceFunction,\n                isReply\n            },\n            dataBuffer\n        );\n    }\n\n    public toUDPPacket(): ReturnType<(typeof VBANRealTimePacket)['toUDPPacket']> {\n        return VBANRealTimePacket.toUDPPacket(this);\n    }\n\n    public static toUDPPacket(packet: VBANRealTimePacket): Buffer {\n        return this.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.sr,\n                frameCounter: packet.frameCounter,\n                part1: ((packet.isReply ? 0b10000000 : 0) & 0b10000000) | (packet.serviceFunction & 0b01111111),\n                part2: packet.service,\n                part3: 0\n            },\n            Buffer.from(''),\n            packet.sr\n        );\n    }\n}\n", "import { Buffer } from 'buffer';\nimport { VBANServicePacket } from './VBANServicePacket.js';\nimport { IVBANHeaderService } from './IVBANHeaderService.js';\nimport { EServiceType } from './EServiceType.js';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.js';\n\nexport enum ERegistrationAnswer {\n    /**\n     * no RT packet service (could mean the packet ID is not existing).\n     */\n    NO_RT_PACKET_SERVICE = 0,\n    /**\n     * RT packet service registered\n     */\n    RT_PACKET_SERVICE_REGISTERED = 1,\n    /**\n     * RT packet service busy (no more slot).\n     */\n    RT_PACKET_SERVICE_BUSY = 2\n}\n\nexport interface IRealTimeRegisterAnswerPacket {\n    /**\n     * Registration answer\n     */\n    answer: ERegistrationAnswer;\n}\n\nexport class VBANRealTimeRegisterAnswerPacket extends VBANServicePacket {\n    public data: IRealTimeRegisterAnswerPacket;\n    constructor(headers: IVBANHeaderService, data: IRealTimeRegisterAnswerPacket) {\n        super(headers);\n\n        this.data = data;\n    }\n\n    public static fromUDPPacket(headers: IVBANHeaderCommon): VBANRealTimeRegisterAnswerPacket {\n        const fn = headers.part1;\n        const serviceFunction = fn & 0b01111111;\n        const isReply = (fn & 0b10000000) >= 1;\n\n        return new VBANRealTimeRegisterAnswerPacket(\n            {\n                ...headers,\n                service: EServiceType.RTPACKETREGISTER,\n                serviceFunction,\n                isReply\n            },\n            {\n                answer: headers.part3\n            }\n        );\n    }\n\n    public toUDPPacket(): ReturnType<(typeof VBANRealTimeRegisterAnswerPacket)['toUDPPacket']> {\n        return VBANRealTimeRegisterAnswerPacket.toUDPPacket(this);\n    }\n\n    public static toUDPPacket(packet: VBANRealTimeRegisterAnswerPacket): Buffer {\n        return this.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.sr,\n                frameCounter: packet.frameCounter,\n                part1: ((packet.isReply ? 0b10000000 : 0) & 0b10000000) | (packet.serviceFunction & 0b01111111),\n                part2: packet.service,\n                part3: packet.data.answer\n            },\n            Buffer.from(''),\n            packet.sr\n        );\n    }\n}\n", "import { Buffer } from 'buffer';\nimport { VBANServicePacket } from './VBANServicePacket.js';\nimport { IVBANHeaderService } from './IVBANHeaderService.js';\nimport { EServiceType } from './EServiceType.js';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.js';\nimport { VBANRealTimeRegisterAnswerPacket } from './VBANRealTimeRegisterAnswerPacket.js';\n\nexport interface IRealTimeRegisterPacket {\n    /**\n     *  Time out in second (to stop RT packet broadcast)\n     */\n    timeout: number;\n}\n\nexport class VBANRealTimeRegisterPacket extends VBANServicePacket {\n    public data: IRealTimeRegisterPacket;\n    constructor(headers: IVBANHeaderService, data: IRealTimeRegisterPacket) {\n        super(headers);\n\n        this.data = data;\n    }\n\n    public static fromUDPPacket(headers: IVBANHeaderCommon): VBANRealTimeRegisterPacket | VBANRealTimeRegisterAnswerPacket {\n        const fn = headers.part1;\n        const serviceFunction = fn & 0b01111111;\n        const isReply = (fn & 0b10000000) >= 1;\n\n        if (isReply) {\n            return VBANRealTimeRegisterAnswerPacket.fromUDPPacket(headers);\n        }\n\n        return new VBANRealTimeRegisterPacket(\n            {\n                ...headers,\n                service: EServiceType.RTPACKETREGISTER,\n                serviceFunction,\n                isReply\n            },\n            {\n                timeout: headers.part3\n            }\n        );\n    }\n\n    public toUDPPacket(): ReturnType<(typeof VBANRealTimeRegisterPacket)['toUDPPacket']> {\n        return VBANRealTimeRegisterPacket.toUDPPacket(this);\n    }\n\n    public static toUDPPacket(packet: VBANRealTimeRegisterPacket): Buffer {\n        if (packet.data.timeout > 255 || packet.data.timeout < 0) {\n            throw new Error('timeout need to be between 0 and 255');\n        }\n\n        return this.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.sr,\n                frameCounter: packet.frameCounter,\n                part1: ((packet.isReply ? 0b10000000 : 0) & 0b10000000) | (packet.serviceFunction & 0b01111111),\n                part2: packet.service,\n                part3: packet.data.timeout\n            },\n            Buffer.from(''),\n            packet.sr\n        );\n    }\n}\n", "import { Buffer } from 'buffer';\nimport { VBANServicePacket } from './VBANServicePacket.js';\nimport { EServiceType } from './EServiceType.js';\nimport { VBANPacket } from '../VBANPacket.js';\nimport { VBANPingPacket } from './VBANPingPacket.js';\nimport { VBANChatPacket } from './VBANChatPacket.js';\nimport { VBANRealTimeRegisterPacket } from './VBANRealTimeRegisterPacket.js';\nimport { VBANRealTimePacket } from './VBANRealTimePacket.js';\n\nexport class VBANServicePacketFactory {\n    public static fromUDPPacket(headersBuffer: Buffer, dataBuffer: Buffer): VBANServicePacket {\n        const headers = VBANPacket.prepareFromUDPPacket(headersBuffer);\n        const service = headers.part2;\n\n        return this.getConstructor(service).fromUDPPacket(headers, dataBuffer);\n    }\n\n    private static getConstructor(\n        protocol: EServiceType\n    ): typeof VBANPingPacket | typeof VBANChatPacket | typeof VBANRealTimeRegisterPacket | typeof VBANRealTimePacket {\n        switch (protocol) {\n            case EServiceType.IDENTIFICATION:\n                return VBANPingPacket;\n            case EServiceType.CHATUTF8:\n                return VBANChatPacket;\n            case EServiceType.RTPACKET:\n                return VBANRealTimePacket;\n            case EServiceType.RTPACKETREGISTER:\n                return VBANRealTimeRegisterPacket;\n            default:\n                throw new Error(`unknown protocol ${protocol}`);\n        }\n    }\n\n    static toUDPPacket(packet: VBANServicePacket): Buffer {\n        return packet.toUDPPacket();\n    }\n}\n", "export enum ETextEncoding {\n    VBAN_TXT_ASCII = 0x00,\n    VBAN_TXT_UTF8 = 0x10,\n    VBAN_TXT_WCHAR = 0x20,\n    VBAN_SERIAL_UNDEFINED_3 = 0x30,\n    VBAN_SERIAL_UNDEFINED_4 = 0x40,\n    VBAN_SERIAL_UNDEFINED_5 = 0x50,\n    VBAN_SERIAL_UNDEFINED_6 = 0x60,\n    VBAN_SERIAL_UNDEFINED_7 = 0x70,\n    VBAN_SERIAL_UNDEFINED_8 = 0x80,\n    VBAN_SERIAL_UNDEFINED_9 = 0x90,\n    VBAN_SERIAL_UNDEFINED_10 = 0xa0,\n    VBAN_SERIAL_UNDEFINED_11 = 0xb0,\n    VBAN_SERIAL_UNDEFINED_12 = 0xc0,\n    VBAN_SERIAL_UNDEFINED_13 = 0xd0,\n    VBAN_SERIAL_UNDEFINED_14 = 0xe0,\n    VBAN_SERIAL_USER = 0xf0\n}\n", "import { VBANPacket } from '../VBANPacket.js';\nimport { Buffer } from 'buffer';\nimport { ESubProtocol } from '../ESubProtocol.js';\nimport { BITS_SPEEDS, EFormatBit } from '../../commons.js';\nimport { ETextEncoding } from './ETextEncoding.js';\nimport { IVBANHeaderTEXT } from './IVBANHeaderTEXT.js';\n\nexport class VBANTEXTPacket extends VBANPacket {\n    /**\n     * {@link VBANTEXTPacket.subProtocol}\n     */\n    public static readonly subProtocol: ESubProtocol = ESubProtocol.TEXT;\n    public subProtocol: ESubProtocol = VBANTEXTPacket.subProtocol;\n    /**\n     * Bit rate is given in bps for information only. But it can be used internally to limit the bandwidth of\n     * the stream and for example gives more priority to audio stream or RT MIDI stream. It can be set\n     * to ZERO if there is no particular bit rate.\n     */\n    public bps: number;\n    /**\n     * Can be used to define a sub channel (sub text channel) and then manage up to 256 different\n     * virtual pipes (ZERO by default).\n     */\n    public channelsIdents: number;\n    /**\n     * Data type used to store data in the packet (ZERO/VBAN_DATATYPE_BYTE8 per default).\n     */\n    public formatBit: EFormatBit;\n    /**\n     * Text format\n     */\n    public encoding: ETextEncoding;\n    /**\n     * not used . Replaced by {@link VBANTEXTPacket.bps}\n     */\n    sr: number;\n    /**\n     * if data can be decoded, it will be decoded in text\n     */\n    public text: string;\n    /**\n     * you can access the raw dataBuffer (if available) to try another decoding\n     */\n    public dataBuffer?: Buffer;\n\n    constructor(headers: IVBANHeaderTEXT, txt: string = '', dataBuffer?: Buffer) {\n        super({\n            ...headers,\n            sp: VBANTEXTPacket.subProtocol,\n            sr: 0\n        });\n\n        this.bps = headers.bps ?? BITS_SPEEDS[0];\n        this.channelsIdents = headers.channelsIdents ?? 0;\n        this.formatBit = headers.formatBit ?? EFormatBit.VBAN_DATATYPE_BYTE8;\n        this.encoding = headers.encoding;\n\n        this.text = txt;\n        this.dataBuffer = dataBuffer;\n\n        //force sr to 0\n        this.sr = 0;\n    }\n\n    public static toUDPPacket(packet: VBANTEXTPacket): Buffer {\n        const data = packet.text\n            ? Buffer.from(packet.text, VBANTEXTPacket.getEncoding(packet.encoding))\n            : (packet.dataBuffer ?? Buffer.from(''));\n\n        const bpsId =\n            Number(\n                Object.entries(BITS_SPEEDS)\n                    .find(([, bps]) => bps && bps === packet.bps)\n                    ?.shift()\n            ) || 0;\n\n        return this.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.bps,\n                frameCounter: packet.frameCounter,\n                part1: 0,\n                part2: packet.channelsIdents,\n                part3: (packet.formatBit & 0b00000111) | (packet.encoding & 0b11110000)\n            },\n            data,\n            bpsId\n        );\n    }\n\n    public static fromUDPPacket(headersBuffer: Buffer, dataBuffer: Buffer) {\n        const headers = this.prepareFromUDPPacket(headersBuffer);\n\n        if (headers.srIndex === undefined || BITS_SPEEDS[headers.srIndex] === undefined) {\n            throw new Error(`unknown bits speed ${headers.srIndex}`);\n        }\n\n        const bps = BITS_SPEEDS[headers.srIndex];\n\n        const channelsIdents = headers.part2;\n\n        const dataFormat = headers.part3;\n        const formatBit = dataFormat & 0b00000111;\n        if (!EFormatBit[formatBit]) {\n            throw new Error(`unknown format bit ${formatBit}`);\n        }\n\n        const encoding = dataFormat & 0b11110000;\n        if (!ETextEncoding[encoding]) {\n            throw new Error(`unknown text stream type ${encoding}`);\n        }\n\n        const textEncoding = VBANTEXTPacket.getEncoding(encoding);\n\n        let text;\n        if (textEncoding) {\n            text = dataBuffer.toString(textEncoding);\n        }\n\n        return new VBANTEXTPacket(\n            {\n                ...headers,\n                bps,\n                channelsIdents,\n                formatBit,\n                encoding\n            },\n            text,\n            dataBuffer\n        );\n    }\n\n    static getEncoding(streamType: ETextEncoding): BufferEncoding | undefined {\n        let textEncoding: BufferEncoding | undefined;\n        if (streamType === ETextEncoding.VBAN_TXT_UTF8) {\n            textEncoding = 'utf8';\n        } else if (streamType === ETextEncoding.VBAN_TXT_WCHAR) {\n            //need to test this, voicemeeter seems to don't use it\n            textEncoding = 'utf16le';\n        } else if (streamType === ETextEncoding.VBAN_TXT_ASCII) {\n            textEncoding = 'ascii';\n        }\n\n        return textEncoding;\n    }\n}\n", "import { Buffer } from 'buffer';\nimport { PACKET_IDENTIFICATION } from './commons.js';\nimport {\n    ESubProtocol,\n    VBANAudioPacket,\n    VBANPacket,\n    VBANSerialPacket,\n    VBANServicePacket,\n    VBANServicePacketFactory,\n    VBANTEXTPacket\n} from './packets/index.js';\n\nexport class VBANProtocolFactory {\n    public static processPacket(packet: Buffer): VBANAudioPacket | VBANSerialPacket | VBANTEXTPacket | VBANServicePacket {\n        const headerBuffer = packet.subarray(0, 28);\n        const dataBuffer = packet.subarray(28);\n\n        if (headerBuffer.toString('ascii', 0, PACKET_IDENTIFICATION.length) !== PACKET_IDENTIFICATION) {\n            throw new Error('Invalid Header');\n        }\n\n        // SR / Sub protocol (5 + 3 bits)\n        const header1 = headerBuffer.readUInt8(PACKET_IDENTIFICATION.length);\n\n        // first 3 bits only\n        const subProtocol: ESubProtocol = header1 & 0b11100000;\n\n        return VBANProtocolFactory.getConstructor(subProtocol).fromUDPPacket(headerBuffer, dataBuffer);\n    }\n\n    public static getConstructor(\n        protocol: ESubProtocol\n    ): typeof VBANAudioPacket | typeof VBANSerialPacket | typeof VBANTEXTPacket | typeof VBANServicePacketFactory {\n        switch (protocol) {\n            case ESubProtocol.AUDIO:\n                return VBANAudioPacket;\n            case ESubProtocol.SERIAL:\n                return VBANSerialPacket;\n            case ESubProtocol.TEXT:\n                return VBANTEXTPacket;\n            case ESubProtocol.SERVICE:\n                return VBANServicePacketFactory;\n            default:\n                throw new Error(`unknown protocol ${protocol}`);\n        }\n    }\n\n    public static toUDPBuffer(packet: Pick<VBANPacket, 'subProtocol'>): Buffer {\n        switch (packet.subProtocol) {\n            case ESubProtocol.AUDIO:\n                return VBANAudioPacket.toUDPPacket(packet as VBANAudioPacket);\n            case ESubProtocol.SERIAL:\n                return VBANSerialPacket.toUDPPacket(packet as VBANSerialPacket);\n            case ESubProtocol.TEXT:\n                return VBANTEXTPacket.toUDPPacket(packet as VBANTEXTPacket);\n            case ESubProtocol.SERVICE:\n                return VBANServicePacketFactory.toUDPPacket(packet as VBANServicePacket);\n            default:\n                throw new Error('unknown packet instance');\n        }\n    }\n}\n", "import dgram, { BindOptions, RemoteInfo, Socket } from 'node:dgram';\nimport type { AddressInfo } from 'net';\nimport { EventEmitter } from 'events';\nimport {\n    EServiceFunction,\n    EServicePINGApplicationType,\n    EServicePINGFeatures,\n    EServiceType,\n    ESubProtocol,\n    IPacketPingData,\n    MAX_FRAME_COUNTER,\n    VBANPacket,\n    VBANPacketTypes,\n    VBANPingPacket\n} from './packets/index.js';\nimport { VBANProtocolFactory } from './VBANProtocolFactory.js';\nimport { IVBANServerOptions } from './IVBANServerOptions.js';\nimport { promisify } from 'node:util';\nimport os from 'node:os';\n\nexport interface VBANServerEvents {\n    listening: () => void;\n    error: (err: Error) => void;\n    close: () => void;\n    message: (packet: VBANPacketTypes, sender: RemoteInfo) => void;\n}\n\nexport declare interface VBANServer {\n    on<U extends keyof VBANServerEvents>(event: U, listener: VBANServerEvents[U]): this;\n\n    emit<U extends keyof VBANServerEvents>(event: U, ...args: Parameters<VBANServerEvents[U]>): boolean;\n}\n\nexport class VBANServer extends EventEmitter {\n    public readonly UDPServer: Socket;\n    private readonly options: IVBANServerOptions;\n\n    private readonly frameCounter: Map<ESubProtocol, number> = new Map<ESubProtocol, number>();\n\n    public isListening = false;\n\n    constructor(options?: IVBANServerOptions) {\n        super();\n        this.UDPServer = dgram.createSocket('udp4');\n\n        this.options = options || {};\n        if (this.options.autoReplyToPing === undefined) {\n            this.options.autoReplyToPing = true;\n        }\n\n        //listen to server messages\n        this.UDPServer.on('listening', (...args) => {\n            this.emit('listening', ...args);\n            this.isListening = true;\n        });\n        this.UDPServer.on('close', () => {\n            this.isListening = false;\n        });\n        this.UDPServer.on('error', (...args) => {\n            this.emit('error', ...args);\n        });\n        this.UDPServer.on('message', this.messageHandler.bind(this));\n    }\n\n    public address(): AddressInfo {\n        return this.UDPServer.address();\n    }\n\n    bind(port?: number, address?: string): Promise<void>;\n    bind(port?: number): Promise<void>;\n    bind(): Promise<void>;\n    bind(options: BindOptions): Promise<void>;\n    public bind(...args: []): Promise<void> {\n        return new Promise<void>((resolve) => {\n            this.UDPServer.bind(...args, resolve);\n        });\n    }\n\n    private getFrameCounter(protocol: ESubProtocol): number {\n        let frameCounter = this.frameCounter.get(protocol) ?? 0;\n        if (frameCounter >= MAX_FRAME_COUNTER) {\n            frameCounter = 0;\n        }\n        this.frameCounter.set(protocol, ++frameCounter);\n        return frameCounter;\n    }\n\n    public send(packet: VBANPacket, port: number, address: string): Promise<void> {\n        return new Promise<void>((resolve, reject) => {\n            packet.frameCounter = this.getFrameCounter(packet.subProtocol);\n            this.UDPServer.send(VBANProtocolFactory.toUDPBuffer(packet), port, address, (error: Error | null) => {\n                if (error) {\n                    reject(error);\n                    return;\n                }\n\n                resolve();\n            });\n        });\n    }\n\n    public sendPing(receiver: { address: string; port: number }, isReply = false): Promise<void> {\n        const frameCounter = this.getFrameCounter(ESubProtocol.SERVICE);\n\n        const defaultApp: Omit<IPacketPingData, 'hostname'> = {\n            applicationName: 'Test application',\n            manufacturerName: 'Anonymous',\n            applicationType: EServicePINGApplicationType.SERVER,\n            features: [EServicePINGFeatures.AUDIO, EServicePINGFeatures.MIDI, EServicePINGFeatures.TXT, EServicePINGFeatures.SERIAL],\n            bitFeatureEx: 0,\n            PreferredRate: 0,\n            minRate: 6000,\n            maxRate: 705600,\n            color: { blue: 0, green: 128, red: 128 },\n            nVersion: 12345,\n            GPSPosition: '',\n            userPosition: '',\n            langCode: 'fr-fr',\n            reservedASCII: '',\n            reservedEx: '',\n            reservedEx2: '',\n            deviceName: 'NodeJs Server',\n            userName: '',\n            userComment: ''\n        };\n        const application = Object.assign(defaultApp, this.options.application);\n\n        const answerPacket = new VBANPingPacket(\n            {\n                streamName: 'VBAN Service',\n                service: EServiceType.IDENTIFICATION,\n                serviceFunction: EServiceFunction.PING0,\n                frameCounter,\n                isReply\n            },\n            {\n                applicationName: application.applicationName,\n                manufacturerName: application.manufacturerName,\n                applicationType: application.applicationType,\n                features: application.features,\n                bitFeatureEx: application.bitFeatureEx,\n                PreferredRate: application.PreferredRate,\n                minRate: application.minRate,\n                maxRate: application.maxRate,\n                color: application.color,\n                nVersion: application.nVersion,\n                GPSPosition: application.GPSPosition,\n                userPosition: application.userPosition,\n                langCode: application.langCode,\n                reservedASCII: application.reservedASCII,\n                reservedEx: application.reservedEx,\n                reservedEx2: application.reservedEx2,\n                deviceName: application.deviceName,\n                hostname: application.hostname ?? os.hostname(),\n                userName: application.userName,\n                userComment: application.userComment\n            }\n        );\n\n        //send the answer to receiver IP:port . (VM use listen port to send requests)\n        return this.send(answerPacket, receiver.port, receiver.address);\n    }\n\n    private readonly messageHandler = async (msg: Buffer, sender: RemoteInfo): Promise<void> => {\n        if (this.options.beforeProcessPacket) {\n            if (!this.options.beforeProcessPacket(msg, sender)) {\n                // 'packet will be skipped because beforeProcessPacket return false';\n                return;\n            }\n        }\n\n        const packet = VBANProtocolFactory.processPacket(msg);\n        if (this.options.autoReplyToPing && packet instanceof VBANPingPacket && !packet.isReply) {\n            await this.sendPing(sender, true);\n        }\n        this.emit('message', packet, sender);\n    };\n\n    public async close() {\n        await promisify(this.UDPServer.close)();\n        this.emit('close');\n    }\n}\n", "// THIS FILE IS GENERATED ON BUILD - DO NOT EDIT MANUALLY\nexport const pkg = { name: 'vban', version: '1.4.1' };\n"],
  "mappings": "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",
  "names": ["EBitsResolutions", "ECodecs", "ESubProtocol", "EFormatBit", "ESerialStreamType", "EServiceFunction", "EServicePINGApplicationType", "EServicePINGFeatures", "EServiceType", "import_buffer", "import_buffer", "import_buffer", "import_buffer", "import_buffer", "ERegistrationAnswer", "import_buffer", "ETextEncoding", "import_buffer", "dgram", "os"]
}
