@cliz/inlets
Version:
Cloud Native Tunnel
58 lines (57 loc) • 2.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const net = require("net");
const doreamon_1 = require("@zodash/doreamon");
const utils_1 = require("../../../utils");
const debug = require('debug')('inlets:client:http');
const logger = doreamon_1.default.logger.getLogger('client:http');
async function http(port, host, socket, { id, data: _data }) {
const adapter = socket.adapter;
const useNewProtocol = !!socket.useNewProtocol;
let data;
if (useNewProtocol && adapter) {
data = typeof _data === 'string' ? _data : _data.toString('utf8');
}
else {
data = await utils_1.dataProcessor.client.onRequest(_data);
}
debug('request:', data);
const req = new utils_1.Request(data);
request(req, port, host, data, async (response, status, statusText) => {
debug('response:', response.toString('utf8'));
if (typeof status !== 'undefined') {
logger.info(`${req.method} ${req.path} ${status} ${statusText}`);
}
const responseBuffer = Buffer.isBuffer(response) ? response : Buffer.from(response);
if (useNewProtocol && adapter) {
await adapter.sendHTTPResponse(id, responseBuffer);
}
else {
const base64Data = responseBuffer.toString('base64');
socket.emit('response', {
id,
data: await utils_1.dataProcessor.client.response(base64Data),
});
}
}, () => {
debug('request end');
});
}
exports.default = http;
function request(req, port, host, data, onData, onEnd) {
const client = new net.Socket();
client.connect(+port, host, () => {
});
client.on('data', data => {
const _res = new utils_1.Response(data.toString('utf8'));
onData(data, _res.status, _res.statusText);
});
client.on('close', () => {
onEnd();
});
client.on('error', (error) => {
console.log('request error:', error);
});
client.write(data);
}
;