{
  "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/VBANTXTPacket/ETextEncoding.ts", "../../src/packets/VBANTXTPacket/VBANTEXTPacket.ts", "../../src/packets/VBANServicePacket/VBANServicePacket.ts", "../../src/packets/VBANServicePacket/EServiceType.ts", "../../src/packets/VBANServicePacket/subPackets/VBANChatPacket.ts", "../../src/packets/VBANServicePacket/subPackets/VBANPingPacket.ts", "../../src/packets/VBANServicePacket/EServicePINGApplicationType.ts", "../../src/packets/VBANServicePacket/EServicePINGFeatures.ts", "../../src/packets/VBANServicePacket/subPackets/VBANRealTimePacket.ts", "../../src/packets/VBANServicePacket/subPackets/VBANRealTimeRegisterAnswerPacket.ts", "../../src/packets/VBANServicePacket/subPackets/VBANRealTimeRegisterPacket.ts", "../../src/packets/VBANServicePacket/subPackets/VBANRequestReplyPacket.ts", "../../src/packets/VBANServicePacket/EServiceFunction.ts", "../../src/packets/VBANServicePacket/VBANServicePacketFactory.ts", "../../src/packets/VBANUnknownPacket/VBANUnknownPacket.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 'node:buffer';\nimport { ESubProtocol } from './ESubProtocol.js';\nimport { IVBANHeaderCommon } from './IVBANHeaderCommon.js';\nimport {\n    cleanPacketString,\n    PACKET_IDENTIFICATION,\n    sampleRates,\n    sampleRatesMapIndex,\n    STREAM_NAME_LENGTH,\n    SUB_PROTOCOL_MASK\n} from '../commons.js';\nimport { IVBANHeader } from './IVBANHeader.js';\nimport { VBAN_DATA_MAX_SIZE, VBAN_HEADER_LENGTH } 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    public static getSampleRate(srIndex?: number): number {\n        if (srIndex === undefined || srIndex === null || !sampleRates.hasOwnProperty(srIndex) || sampleRates[srIndex] === undefined) {\n            throw new Error(`unknown sample rate ${srIndex}`);\n        }\n        return sampleRates[srIndex];\n    }\n\n    public static parsePacketHeader(headersBuffer: Buffer): IVBANHeaderCommon {\n        const headers: Partial<IVBANHeaderCommon> = {};\n\n        if (headersBuffer.toString('ascii', 0, PACKET_IDENTIFICATION.length) !== PACKET_IDENTIFICATION) {\n            throw new Error('Invalid Header');\n        }\n\n        // read next 4 Bytes\n        const chunk = headersBuffer.readUInt32BE(PACKET_IDENTIFICATION.length);\n\n        // noinspection PointlessArithmeticExpressionJS\n        const sr_sp = (chunk >> (3 * 8)) & 0b11111111;\n        // noinspection PointlessArithmeticExpressionJS\n        headers.part1 = (chunk >> (2 * 8)) & 0b11111111;\n        // noinspection PointlessArithmeticExpressionJS\n        headers.part2 = (chunk >> (1 * 8)) & 0b11111111;\n        // noinspection PointlessArithmeticExpressionJS\n        headers.part3 = (chunk >> (0 * 8)) & 0b11111111;\n\n        // 3 first bits\n        headers.sp = sr_sp & SUB_PROTOCOL_MASK;\n\n        //take last 5 bits for sampleRate\n        headers.srIndex = sr_sp & 0b00011111; // 5 last bits\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    public static parsePacket(packet: Buffer): {\n        headers: IVBANHeaderCommon;\n        data: Buffer;\n    } {\n        const headerBuffer = packet.subarray(0, VBAN_HEADER_LENGTH);\n        const dataBuffer = packet.subarray(VBAN_HEADER_LENGTH);\n\n        const headers = this.parsePacketHeader(headerBuffer);\n\n        return {\n            headers,\n            data: dataBuffer\n        };\n    }\n\n    /**\n     * Extract headers and data from UDPPacket, each Packet will continue the process\n     * @deprecated\n     */\n    public static prepareFromUDPPacket(headersBuffer: Buffer, checkSR = true): IVBANHeaderCommon {\n        const headers = this.parsePacketHeader(headersBuffer);\n        if (checkSR) {\n            headers.sr = this.getSampleRate(headers.srIndex);\n        }\n\n        return headers;\n    }\n\n    /**\n     * common constructor\n     */\n    constructor(headers: IVBANHeader) {\n        this.sr = headers.sr ?? 0;\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        if (headers.sp === ESubProtocol.UNKNOWN) {\n            throw new Error(`You can't convert an unknown packet to UDP packet`);\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        const finalBuffer = Buffer.alloc(VBAN_HEADER_LENGTH + data.length);\n\n        let offset = 0;\n\n        offset += finalBuffer.write(PACKET_IDENTIFICATION, offset, 'ascii');\n\n        let rateIndex: number = 0;\n        if (sampleRate === undefined && headers.sr) {\n            // La recherche est maintenant instantan\u00E9e (O(1))\n            const rateIndexFromMap = sampleRatesMapIndex.get(headers.sr);\n            if (!rateIndexFromMap) {\n                throw new Error(`fail to find index for sample rate ${headers.sr}`);\n            }\n\n            rateIndex = rateIndexFromMap;\n        } else if (sampleRate !== undefined) {\n            rateIndex = sampleRate;\n        }\n\n        // \u00C9criture des parties du header avec `writeUInt8` (plus rapide que `fill`)\n        offset = finalBuffer.writeUInt8((rateIndex & 0b00011111) | (headers.sp & 0b11100000), offset);\n        offset = finalBuffer.writeUInt8(headers.part1, offset);\n        offset = finalBuffer.writeUInt8(headers.part2, offset);\n        offset = finalBuffer.writeUInt8(headers.part3, offset);\n\n        // \u00C9criture du nom du stream\n        offset += finalBuffer.write(headers.streamName.padEnd(STREAM_NAME_LENGTH, '\\0'), offset, 'ascii');\n\n        // \u00C9criture du compteur\n        finalBuffer.writeUInt32LE(headers.frameCounter ?? 1, offset);\n\n        data.copy(finalBuffer, VBAN_HEADER_LENGTH);\n\n        return finalBuffer;\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    public toUDPPacket(): Buffer {\n        throw new Error('Not implemented');\n    }\n}\n", "//sub protocols\nexport enum ESubProtocol {\n    // specific, not handled by VBAN\n    UNKNOWN = -1,\n    // 0x00\n    AUDIO = 0,\n    // 0x20\n    SERIAL = 32,\n    // 0x40\n    TEXT = 64,\n    // 0x60\n    SERVICE = 96\n}\n", "import { Buffer } from 'node:buffer';\n\nexport const PACKET_IDENTIFICATION = 'VBAN';\n\nexport const SUB_PROTOCOL_MASK = 0b11100000;\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 const MBPS_SPEEDS: Record<number, number> = {\n    0: 0,\n    1: 1,\n    2: 2,\n    3: 3,\n    4: 4,\n    5: 5,\n    6: 6,\n    7: 8,\n    8: 10,\n    9: 12,\n    10: 16,\n    11: 24,\n    12: 36,\n    13: 48,\n    14: 60,\n    15: 84,\n    16: 108,\n    17: 156,\n    18: 204,\n    19: 252,\n    20: 300,\n    21: 400,\n    22: 500,\n    23: 600,\n    24: 800,\n    25: 0, // Undefined\n    26: 0, // Undefined\n    27: 0, // Undefined\n    28: 0, // Undefined\n    29: 0, // Undefined\n    30: 0, // Undefined\n    31: 0 // Undefined\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 TypeError('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?.toUpperCase();\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\nexport const sampleRatesMap = new Map<number, number>();\nexport const sampleRatesMapIndex = new Map<number, number>();\nfor (const [index, rate] of Object.entries(sampleRates)) {\n    sampleRatesMapIndex.set(rate, Number(index));\n    sampleRatesMap.set(Number(index), rate);\n}\n", "export const MAX_FRAME_COUNTER = 4294967295;\nexport const VBAN_DATA_MAX_SIZE = 1436;\nexport const VBAN_HEADER_LENGTH = 28;\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 'node:buffer';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.js';\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 toUDPPacket(): ReturnType<(typeof VBANAudioPacket)['toUDPPacket']> {\n        return VBANAudioPacket.toUDPPacket(this);\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(headers: IVBANHeaderCommon, dataBuffer: Buffer): VBANAudioPacket {\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        headers.sr = this.getSampleRate(headers.srIndex);\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 readonly 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 'node:buffer';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.js';\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 toUDPPacket(): ReturnType<(typeof VBANSerialPacket)['toUDPPacket']> {\n        return VBANSerialPacket.toUDPPacket(this);\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(headers: IVBANHeaderCommon, dataBuffer: Buffer): VBANSerialPacket {\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 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 'node:buffer';\nimport { ESubProtocol } from '../ESubProtocol.js';\nimport { BITS_SPEEDS, EFormatBit } from '../../commons.js';\nimport { ETextEncoding } from './ETextEncoding.js';\nimport { IVBANHeaderTEXT } from './IVBANHeaderTEXT.js';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.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     * but will not be sent\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 toUDPPacket(): ReturnType<(typeof VBANTEXTPacket)['toUDPPacket']> {\n        return VBANTEXTPacket.toUDPPacket(this);\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(headers: IVBANHeaderCommon, dataBuffer: Buffer) {\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 'node: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';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.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 fromUDPPacket(headers: IVBANHeaderCommon, dataBuffer: Buffer): undefined | VBANServicePacket {\n        throw new Error('call VBANServicePacketFactory.fromUDPPacker');\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", "export enum EServiceType {\n    // 0x00\n    IDENTIFICATION = 0,\n    // 0x01\n    CHATUTF8 = 1,\n    // 0x02\n    VBAN_SERVICE_REQUESTREPLY = 2,\n    // 0x20\n    RTPACKETREGISTER = 32,\n    // 0x21\n    RTPACKET = 33\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 'node: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 'node: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        for (const feature of packet.data.features) {\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", "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", "import { VBANServicePacket } from '../VBANServicePacket.js';\nimport { IVBANHeaderService } from '../IVBANHeaderService.js';\nimport { EServiceType } from '../EServiceType.js';\nimport { IVBANHeaderCommon } from '../../IVBANHeaderCommon.js';\nimport { Buffer } from 'node: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 'node: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 'node: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 'node:buffer';\nimport { VBANServicePacket } from '../VBANServicePacket.js';\nimport type { IVBANHeaderService } from '../IVBANHeaderService.js';\nimport { EServiceType } from '../EServiceType.js';\nimport type { IVBANHeaderCommon } from '../../IVBANHeaderCommon.js';\n\nexport class VBANRequestReplyPacket extends VBANServicePacket {\n    public answer: string;\n    constructor(headers: IVBANHeaderService, data: Buffer) {\n        super(headers);\n\n        this.answer = data?.toString('utf8');\n    }\n\n    public static fromUDPPacket(headers: IVBANHeaderCommon, data: Buffer): VBANRequestReplyPacket {\n        const fn = headers.part1;\n        const serviceFunction = fn & 0b01111111;\n        const isReply = (fn & 0b10000000) >= 1;\n\n        return new VBANRequestReplyPacket(\n            {\n                ...headers,\n                service: EServiceType.VBAN_SERVICE_REQUESTREPLY,\n                serviceFunction,\n                isReply\n            },\n            data\n        );\n    }\n\n    public toUDPPacket(): ReturnType<(typeof VBANRequestReplyPacket)['toUDPPacket']> {\n        return VBANRequestReplyPacket.toUDPPacket(this);\n    }\n\n    public static toUDPPacket(packet: VBANRequestReplyPacket): 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(packet.answer, 'utf8')\n        );\n    }\n}\n", "export enum EServiceFunction {\n    //0x00\n    PING0 = 0,\n    //0x80\n    REPLY = 128\n}\n", "import { Buffer } from 'node:buffer';\nimport { VBANServicePacket } from './VBANServicePacket.js';\nimport { EServiceType } from './EServiceType.js';\nimport { VBANPingPacket } from './subPackets/VBANPingPacket.js';\nimport { VBANChatPacket } from './subPackets/VBANChatPacket.js';\nimport { VBANRealTimeRegisterPacket } from './subPackets/VBANRealTimeRegisterPacket.js';\nimport { VBANRealTimePacket } from './subPackets/VBANRealTimePacket.js';\nimport { VBANRequestReplyPacket } from './subPackets/VBANRequestReplyPacket.js';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.js';\n\nexport class VBANServicePacketFactory {\n    public static fromUDPPacket(headers: IVBANHeaderCommon, dataBuffer: Buffer): undefined | VBANServicePacket {\n        const service = headers.part2;\n\n        return this.getConstructor(service)?.fromUDPPacket(headers, dataBuffer);\n    }\n\n    private static getConstructor(\n        protocol: EServiceType\n    ):\n        | undefined\n        | typeof VBANPingPacket\n        | typeof VBANChatPacket\n        | typeof VBANRealTimeRegisterPacket\n        | typeof VBANRealTimePacket\n        | typeof VBANRequestReplyPacket {\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            case EServiceType.VBAN_SERVICE_REQUESTREPLY:\n                return VBANRequestReplyPacket;\n            default:\n                return undefined;\n        }\n    }\n\n    static toUDPPacket(packet: VBANServicePacket): Buffer {\n        return packet.toUDPPacket();\n    }\n}\n", "import { Buffer } from 'node:buffer';\nimport { VBANPacket } from '../VBANPacket.js';\nimport { IVBANHeaderCommon } from '../IVBANHeaderCommon.js';\n\nexport class VBANUnknownPacket extends VBANPacket {\n    public subProtocol = -1;\n\n    public data: Buffer;\n\n    public part1: number;\n\n    public part2: number;\n\n    public part3: number;\n\n    constructor(headers: IVBANHeaderCommon, data: Buffer) {\n        super(headers);\n\n        this.subProtocol = headers.sp ?? this.subProtocol;\n\n        this.part1 = headers.part1;\n        this.part2 = headers.part2;\n        this.part3 = headers.part3;\n\n        this.data = data;\n    }\n\n    public toUDPPacket(): ReturnType<(typeof VBANUnknownPacket)['toUDPPacket']> {\n        return VBANUnknownPacket.toUDPPacket(this);\n    }\n\n    public static toUDPPacket(packet: VBANUnknownPacket): Buffer {\n        return VBANUnknownPacket.convertToUDPPacket(\n            {\n                streamName: packet.streamName,\n                sp: packet.subProtocol,\n                sr: packet.sr,\n                frameCounter: packet.frameCounter,\n                part1: packet.part1,\n                part2: packet.part2,\n                part3: packet.part3\n            },\n            packet.data,\n            packet.sr\n        );\n    }\n\n    public static fromUDPPacket(headers: IVBANHeaderCommon, data: Buffer): VBANUnknownPacket {\n        return new VBANUnknownPacket(headers, data);\n    }\n}\n", "import { Buffer } from 'node:buffer';\nimport type { VBANPacketConstructorsTypes, VBANPacketTypes } from './packets/index.js';\nimport { ESubProtocol, VBANAudioPacket, VBANPacket, VBANSerialPacket, VBANServicePacketFactory, VBANTEXTPacket } from './packets/index.js';\nimport { VBANUnknownPacket } from './packets/VBANUnknownPacket/index.js';\n\ntype constructorsTypes = VBANPacketConstructorsTypes | typeof VBANServicePacketFactory;\nconst constructorsMaps = new Map<ESubProtocol, constructorsTypes>([\n    [ESubProtocol.AUDIO, VBANAudioPacket],\n    [ESubProtocol.SERIAL, VBANSerialPacket],\n    [ESubProtocol.TEXT, VBANTEXTPacket],\n    [ESubProtocol.SERVICE, VBANServicePacketFactory],\n    [ESubProtocol.UNKNOWN, VBANUnknownPacket]\n]);\n\nexport class VBANProtocolFactory {\n    public static processPacket(packet: Buffer): VBANPacketTypes {\n        const { headers, data } = VBANPacket.parsePacket(packet);\n\n        return (\n            VBANProtocolFactory.getConstructor(headers.sp)?.fromUDPPacket(headers, data) ?? VBANUnknownPacket.fromUDPPacket(headers, data)\n        );\n    }\n\n    public static getConstructor(protocol: ESubProtocol): constructorsTypes {\n        return constructorsMaps.get(protocol) ?? VBANUnknownPacket;\n    }\n\n    public static toUDPBuffer(packet: Pick<VBANPacket, 'subProtocol'>): Buffer {\n        const constructor = constructorsMaps.get(packet.subProtocol) ?? VBANUnknownPacket;\n\n        // forced, so user can pass a custom packet, and constructor will try to build it .\n        return constructor.toUDPPacket(packet as any);\n    }\n}\n", "import dgram, { BindOptions, RemoteInfo, Socket } from 'node:dgram';\nimport type { AddressInfo } from 'node:net';\nimport type { Buffer } from 'node:buffer';\nimport { EventEmitter } from 'node: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, message: Buffer) => 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        this.options.autoReplyToPing ??= true;\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, msg);\n    };\n\n    public async close() {\n        await promisify(this.UDPServer.close.bind(this.UDPServer))();\n        this.emit('close');\n    }\n}\n", "// THIS FILE IS GENERATED ON BUILD - DO NOT EDIT MANUALLY\nexport const pkg = { name: 'vban', version: '1.5.6' };\n"],
  "mappings": "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",
  "names": ["EBitsResolutions", "ECodecs", "import_node_buffer", "ESubProtocol", "EFormatBit", "ESerialStreamType", "ETextEncoding", "import_node_buffer", "import_node_buffer", "EServiceType", "import_node_buffer", "import_node_buffer", "EServicePINGApplicationType", "EServicePINGFeatures", "import_node_buffer", "import_node_buffer", "ERegistrationAnswer", "import_node_buffer", "import_node_buffer", "EServiceFunction", "dgram", "os"]
}
