UNPKG

@cliz/cp

Version:

Online pbcopy + pbpaste

57 lines (56 loc) 2.16 kB
"use strict"; 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;