{"version":3,"sources":["jsdelivr-header.js","/npm/@api.video/browser-to-rtmp-server@0.2.4/dist/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aACA,IAAI,gBAAmB,MAAQ,KAAK,iBAAoB,SAAU,GAC9D,OAAQ,GAAO,EAAI,WAAc,EAAM,CAAE,QAAW,EACxD,EACA,MAAM,SAAW,QAAQ,UACnB,SAAW,gBAAgB,QAAQ,WACnC,YAAc,QAAQ,aACtB,QAAU,QAAQ,SAClB,aAAe,gBAAgB,QAAQ,iBACvC,eAAiB,gBAAgB,QAAQ,iBACzC,gBAAkB,CACpB,WAAY,CACR,SAAU,QAEd,WAAY,CACR,kBAAkB,EAClB,kBAAkB,IAG1B,MAAM,4BAA4B,SAAS,QACvC,WAAA,CAAY,EAAQ,GAChB,QACA,KAAK,YAAc,IAAI,IACvB,KAAK,MAAO,EAAI,eAAe,SAAS,gBAAiB,GAAQ,CAAC,GAClE,KAAK,OAAS,IAAI,QAAQ,OAAO,CAC7B,SAAU,KAAK,KAAK,YAAY,UAAY,SAEhD,KAAK,GAAK,IAAI,YAAY,OAAO,EAAQ,KAAK,KAAK,UACnD,KAAK,GAAG,GAAG,cAAe,GAAW,KAAK,aAAa,IAC3D,CACA,cAAA,GACI,MAAO,IAAI,KAAK,YAAY,UAAU,KAAI,GAAK,EAAE,aACrD,CACA,aAAA,CAAc,GACV,OAAO,KAAK,YAAY,IAAI,IAAK,WACrC,CACA,oBAAA,GACI,MAAO,IAAI,KAAK,YAAY,UAAU,QAAO,KAAO,EAAE,YAAY,SAAQ,MAC9E,CACA,YAAA,CAAa,GACT,MAAM,GAAe,EAAI,SAAS,cAC5B,EAAa,IAAI,aAAa,QAAQ,KAAK,OAAQ,EAAQ,GAAc,CAAC,EAAG,KAC/E,QAA4C,IAAjC,KAAK,KAAK,oBAAsC,KAAK,wBAA0B,KAAK,KAAK,mBAChG,MAAM,IAAI,MAAM,gCAKpB,GAHI,KAAK,MAAM,OAAO,QAClB,EAAQ,KAAK,KAAK,MAAM,MAAM,EAAG,IAEjC,EAAM,MAAQ,KAAK,KAAK,gBAAkB,KAAK,KAAK,eAAe,KAAK,EAAM,MAC9E,MAAM,IAAI,MAAM,gDAEpB,OAAO,CAAK,IAEhB,KAAK,YAAY,IAAI,EAAc,GACnC,KAAK,KAAK,aAAc,EAAW,aACnC,EAAW,GAAG,SAAU,IACf,KAAK,KAAK,YAAY,iBAQvB,EAAO,KAAK,QAAS,GAPrB,EAAO,KAAK,QAAS,IACd,EACH,aAAS,EACT,QAAS,KAMjB,KAAK,KAAK,QAAS,EAAc,EAAE,IAEvC,EAAW,GAAG,gBAAiB,IACvB,KAAK,KAAK,YAAY,kBACtB,EAAO,KAAK,eAAgB,GAEhC,KAAK,KAAK,eAAgB,EAAc,EAAE,IAE9C,EAAW,GAAG,aAAa,KACvB,KAAK,KAAK,YAAa,EAAa,IAExC,EAAO,GAAG,cAAc,KACpB,EAAW,UACX,KAAK,YAAY,OAAO,EAAa,GAE7C,EAEJ,OAAO,QAAU","file":"/npm/@api.video/browser-to-rtmp-server@0.2.4/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@api.video/browser-to-rtmp-server@0.2.4/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nconst crypto_1 = require(\"crypto\");\nconst events_1 = __importDefault(require(\"events\"));\nconst socket_io_1 = require(\"socket.io\");\nconst tslog_1 = require(\"tslog\");\nconst connection_1 = __importDefault(require(\"./connection\"));\nconst ts_deepmerge_1 = __importDefault(require(\"ts-deepmerge\"));\nconst DEFAULT_OPTIONS = {\n    serverLogs: {\n        minLevel: 'info'\n    },\n    clientLogs: {\n        sendErrorDetails: false,\n        sendFfmpegOutput: false\n    }\n};\nclass BrowserToRtmpServer extends events_1.default {\n    constructor(server, opts) {\n        super();\n        this.connections = new Map();\n        this.opts = (0, ts_deepmerge_1.default)(DEFAULT_OPTIONS, opts || {});\n        this.logger = new tslog_1.Logger({\n            minLevel: this.opts.serverLogs?.minLevel || 'info',\n        });\n        this.io = new socket_io_1.Server(server, this.opts.socketio);\n        this.io.on('connection', (socket) => this.onConnection(socket));\n    }\n    getConnections() {\n        return [...this.connections.values()].map(a => a.getStatus());\n    }\n    getConnection(id) {\n        return this.connections.get(id)?.getStatus();\n    }\n    countFfmpegInstances() {\n        return [...this.connections.values()].filter(c => !!c.getStatus().ffmpeg).length;\n    }\n    onConnection(socket) {\n        const connectionId = (0, crypto_1.randomUUID)();\n        const connection = new connection_1.default(this.logger, socket, connectionId, (s, event) => {\n            if (typeof this.opts.maxFfmpegInstances !== \"undefined\" && this.countFfmpegInstances() >= this.opts.maxFfmpegInstances) {\n                throw new Error(\"Max ffmpeg instances reached\");\n            }\n            if (this.opts?.hooks?.start) {\n                event = this.opts.hooks.start(s, event);\n            }\n            if (event.rtmp && this.opts.rtmpUrlRegexp && !this.opts.rtmpUrlRegexp?.test(event.rtmp)) {\n                throw new Error(\"The RTMP url doesn't match the rtmpUrlRegexp\");\n            }\n            return event;\n        });\n        this.connections.set(connectionId, connection);\n        this.emit('connection', connection.getStatus());\n        connection.on('error', (e) => {\n            if (!this.opts.clientLogs?.sendErrorDetails) {\n                socket.emit('error', {\n                    ...e,\n                    details: undefined,\n                    message: \"\"\n                });\n            }\n            else {\n                socket.emit('error', e);\n            }\n            this.emit('error', connectionId, e);\n        });\n        connection.on('ffmpegOutput', (e) => {\n            if (this.opts.clientLogs?.sendFfmpegOutput) {\n                socket.emit('ffmpegOutput', e);\n            }\n            this.emit('ffmpegOutput', connectionId, e);\n        });\n        connection.on('destroyed', () => {\n            this.emit('destroyed', connectionId);\n        });\n        socket.on('disconnect', () => {\n            connection.destroy();\n            this.connections.delete(connectionId);\n        });\n    }\n}\nmodule.exports = BrowserToRtmpServer;\n"]}