{"version":3,"sources":["jsdelivr-header.js","/npm/@oox/module-socketio@0.0.3/index.js"],"names":[],"mappings":"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","file":"/npm/@oox/module-socketio@0.0.3/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@oox/module-socketio@0.0.3/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\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.sockets = void 0;\r\nconst path = require(\"node:path\");\r\nconst client_1 = require(\"./client\");\r\nconst oox = require(\"oox\");\r\nconst oox_1 = require(\"oox\");\r\nconst socket_1 = require(\"./socket\");\r\nObject.defineProperty(exports, \"sockets\", { enumerable: true, get: function () { return socket_1.sockets; } });\r\nclass SocketIOModule extends client_1.default {\r\n    sockets = socket_1.sockets;\r\n    async serve() {\r\n        await this.stop();\r\n        const _http = oox.modules.builtins.http;\r\n        const httpConfig = _http.getConfig(), config = this.getConfig();\r\n        let isShareServer = false;\r\n        // 都没设置端口\r\n        isShareServer = !httpConfig.port && !config.port;\r\n        // 都设置相同端口\r\n        isShareServer = isShareServer || httpConfig.port === config.port;\r\n        // http 模块未被禁用\r\n        isShareServer = isShareServer && !httpConfig.disabled;\r\n        if (isShareServer) {\r\n            config.path = path.posix.join(httpConfig.path, config.path);\r\n            this.server = _http.server;\r\n        }\r\n        await super.serve();\r\n    }\r\n    onSyncConnection(socket) {\r\n        const mSockets = Array.from(socket_1.sockets.values())\r\n            .filter(s => s !== socket &&\r\n            s.data.name !== socket.data.name &&\r\n            s.data.id.startsWith('ws://'));\r\n        return mSockets.map(s => s.data);\r\n    }\r\n    serverOnDisconnect(socket, reason) {\r\n        super.serverOnDisconnect(socket, reason);\r\n        (0, oox_1.removeKeepAliveConnection)(socket.data.name, socket.data.id);\r\n    }\r\n    clientOnDisconnect(socket, reason) {\r\n        super.clientOnDisconnect(socket, reason);\r\n        (0, oox_1.removeKeepAliveConnection)(socket.data.name, socket.data.id);\r\n    }\r\n    /**\r\n     *\r\n     * @param socket 是由哪个通道发送过来的\r\n     * @param connectionDatas\r\n     */\r\n    clientOnSyncConnection(socket, connectionDatas) {\r\n        for (const data of connectionDatas)\r\n            if (!socket_1.sockets.has(data.id))\r\n                this.connect(data.id).catch((error) => console.error(error));\r\n    }\r\n    onFetchActions(socket, search) {\r\n        const data = [];\r\n        for (const key of oox.kvMethods.keys())\r\n            if (!key.endsWith('_proxy') && key.includes(search))\r\n                data.push(key);\r\n        return data;\r\n    }\r\n    fetchActions(id, search = '') {\r\n        let socket = socket_1.sockets.get(id);\r\n        if (!socket) {\r\n            const connections = (0, oox_1.getKeepAliveConnections)(id);\r\n            if (!connections || !connections.size)\r\n                throw new Error(`Unknown service identify<${id}>`);\r\n            id = connections.keys().next().value;\r\n            socket = socket_1.sockets.get(id);\r\n        }\r\n        if (!socket)\r\n            throw new Error(`Unknown service identify<${id}>`);\r\n        return this.emit(socket.data.id, 'fetchActions', [search]);\r\n    }\r\n    onConnection(socket) {\r\n        const { id, name, host } = socket.data;\r\n        const connection = new oox_1.RPCKeepAliveConnection(this, id, socket.data);\r\n        (0, oox_1.addKeepAliveConnection)(connection);\r\n        const connectionContext = {\r\n            sourceIP: '',\r\n            ip: host,\r\n            caller: name,\r\n            callerId: id,\r\n            connection\r\n        };\r\n        socket.on('fetchActions', async (search, fn) => {\r\n            if ('function' !== typeof fn)\r\n                return;\r\n            const data = await this.onFetchActions(socket, search);\r\n            fn(data);\r\n        });\r\n        socket.on('call', async (action, params, context, callback) => {\r\n            if ('object' !== typeof context)\r\n                context = oox.genContext(connectionContext);\r\n            else\r\n                context = oox.genContext(Object.assign(context, connectionContext));\r\n            this.call(action, params, context, callback);\r\n        });\r\n    }\r\n    /**\r\n     *\r\n     * @param {Socket} socket\r\n     */\r\n    serverOnConnection(socket) {\r\n        super.serverOnConnection(socket);\r\n        socket.setMaxListeners(0);\r\n        socket.on('syncConnection', async (fn) => {\r\n            if ('function' !== typeof fn)\r\n                return;\r\n            const data = this.onSyncConnection(socket);\r\n            fn(data);\r\n        });\r\n        this.onConnection(socket);\r\n    }\r\n    async call(action, params, context, callback) {\r\n        const returns = await oox.call(action, params, context);\r\n        'function' === typeof callback && callback(returns);\r\n        return returns;\r\n    }\r\n    clientOnConnection(socket) {\r\n        super.clientOnConnection(socket);\r\n        socket.emit('syncConnection', (socketDatas) => this.clientOnSyncConnection(socket, socketDatas));\r\n        this.onConnection(socket);\r\n    }\r\n    /**\r\n     * socketio emit\r\n     */\r\n    async emit(url, action, params) {\r\n        let socket = null;\r\n        try {\r\n            socket = await this.connect(url);\r\n        }\r\n        catch (error) {\r\n            // try again\r\n            socket = await this.connect(url);\r\n        }\r\n        try {\r\n            return await new Promise((resolve, reject) => {\r\n                const onError = (reason) => {\r\n                    const message = 'string' === typeof reason ? reason : reason instanceof Error ? reason.message : 'connect error';\r\n                    reject(new Error(message));\r\n                };\r\n                // RPC 执行时中断连接\r\n                socket.once('disconnect', onError);\r\n                socket.emit(action, ...params, (returns) => {\r\n                    socket.off('disconnect', onError);\r\n                    resolve(returns);\r\n                });\r\n            });\r\n        }\r\n        catch (error) {\r\n            throw new Error(error.message);\r\n        }\r\n    }\r\n    /**\r\n     * RPC\r\n     */\r\n    async rpc(url, action, params, context) {\r\n        if (!context || !context.traceId) {\r\n            context = oox.getContext();\r\n        }\r\n        const { error, body } = await this.emit(url, 'call', [action, params, context]);\r\n        if (error)\r\n            throw new Error(error.message);\r\n        else\r\n            return body;\r\n    }\r\n}\r\nexports.default = SocketIOModule;\r\n"]}