UNPKG

hn-api-sdk

Version:

HackerNews API with TypeScript, generated by tsdk

84 lines (83 loc) 2.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSocketIOInstance = exports.setSocketIOInstance = void 0; exports.socketIOHandler = socketIOHandler; var error_1 = require("./error"); var tsdk_helper_1 = require("./shared/tsdk-helper"); var utils_1 = require("./utils"); var socketIOInstance; var QUEUEs = {}; /** * Set the io instance * * @example * ```ts const socket = io('https://server-domain.com', { transports: ['websocket'], }); setSocketIOInstance(socket); ``` * * @param instance - io */ var setSocketIOInstance = function (instance) { socketIOInstance = instance; socketIOInstance.off(tsdk_helper_1.ProtocolTypes.response); socketIOInstance.on(tsdk_helper_1.ProtocolTypes.response, function (_a) { var msgId = _a._id, status = _a.status, result = _a.result; if (msgId && QUEUEs[msgId]) { if (!status || status === 200) { QUEUEs[msgId].resolve(result); } else { QUEUEs[msgId].reject(result); } delete QUEUEs[msgId]; } }); }; exports.setSocketIOInstance = setSocketIOInstance; /** * Get socket.io-client instance * * @param instance - socekt.io-client instance * @returns The io */ var getSocketIOInstance = function () { return socketIOInstance; }; exports.getSocketIOInstance = getSocketIOInstance; function socketIOHandler(apiConfig, data, requestConfig) { var ioInstance = (0, exports.getSocketIOInstance)(); if (!ioInstance) { throw new error_1.NoHandlerError("Call `setSocketIOInstance` first"); } return new Promise(function (resolve, reject) { if (!ioInstance.connected) { return reject(new error_1.NoConnectionError('No Connection')); } var msgId = (0, utils_1.getID)(apiConfig.method, apiConfig.path); ioInstance.emit(tsdk_helper_1.ProtocolTypes.request, { _id: msgId, payload: data instanceof FormData ? Object.fromEntries(data) : data, }); var timer = (requestConfig === null || requestConfig === void 0 ? void 0 : requestConfig.timeout) ? setTimeout(function () { delete QUEUEs[msgId]; reject(new error_1.TimeoutError('Request Timeout')); }, requestConfig.timeout) : -1; QUEUEs[msgId] = { resolve: function (res) { clearTimeout(timer); resolve(res); }, reject: function (e) { clearTimeout(timer); reject(e); }, }; }); }