@cliz/cp
Version:
Online pbcopy + pbpaste
57 lines (56 loc) • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.paste = void 0;
const md5_1 = require("@zodash/md5");
const websocket_1 = require("@znode/websocket");
const utils_1 = require("../utils");
const config_1 = require("../config");
const debug = require('debug')('cliz-cp');
async function paste(options) {
var _a;
const url = (_a = options === null || options === void 0 ? void 0 : options.relay) !== null && _a !== void 0 ? _a : config_1.default.server;
const code = options.code;
if (!code) {
throw new Error('code is required');
}
return new Promise((resolve, reject) => {
const ws = new websocket_1.Client(url);
ws.on('connection', () => {
debug('socket connect');
setTimeout(() => {
ws.emit('request.sender.to.paste', {
code,
});
}, 100);
});
ws.on('close', (error) => {
debug('socket close:', error);
});
ws.on('error', (error) => {
ws.disconnect();
reject(new Error(`socket error(${error === null || error === void 0 ? void 0 : error.message})`));
});
ws.on('paste.failed', ({ message }) => {
ws.disconnect();
reject(new Error(`paste.failed(${message})`));
});
ws.on('paste', ({ signature, payload }) => {
return onPaste(payload, signature);
});
async function onPaste(text, signature) {
debug('paste data:', text);
const decryptedText = (0, utils_1.decrypt)(code, text);
const _signature = (0, md5_1.md5)(decryptedText);
debug('signature (sent):', signature);
debug('signature (received):', _signature);
if (signature !== _signature) {
ws.disconnect();
reject(new Error(`Receive file is not integrated (origin: ${signature}, receive: ${_signature})`));
}
ws.emit('paste.done', { code: code });
ws.disconnect();
resolve(decryptedText);
}
});
}
exports.paste = paste;