1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- const fs = require('fs-extra');
- const utils = require('./utils');
- const WebSocketConnection = require('./WebSocketConnection');
- //singleton
- let instance = null;
- class RemoteLib {
- constructor(config) {
- if (!instance) {
- this.config = config;
- this.wsc = new WebSocketConnection(config.remoteLib.url, 10, 30, {rejectUnauthorized: false});
- if (config.remoteLib.accessPassword)
- this.accessToken = utils.getBufHash(config.remoteLib.accessPassword, 'sha256', 'hex');
- this.inpxFile = `${config.tempDir}/${utils.randomHexString(20)}`;
- this.lastUpdateTime = 0;
- instance = this;
- }
- return instance;
- }
- async wsRequest(query) {
- if (this.accessToken)
- query.accessToken = this.accessToken;
- const response = await this.wsc.message(
- await this.wsc.send(query, 60),
- 60
- );
- if (response.error)
- throw new Error(response.error);
- return response;
- }
- async getInpxFile(getPeriod = 0) {
- if (getPeriod && Date.now() - this.lastUpdateTime < getPeriod)
- return this.inpxFile;
- const response = await this.wsRequest({action: 'get-inpx-file'});
- await fs.writeFile(this.inpxFile, response.data, 'base64');
- this.lastUpdateTime = Date.now();
- return this.inpxFile;
- }
- }
- module.exports = RemoteLib;
|