Fixed Centrifuge errors
This commit is contained in:
parent
7e280ce22f
commit
798dd80561
@ -2,12 +2,23 @@ const crypto = require('crypto');
|
|||||||
const fetch = require('node-fetch');
|
const fetch = require('node-fetch');
|
||||||
const Vehicle = require('../models/vehicle');
|
const Vehicle = require('../models/vehicle');
|
||||||
const DebugInfo = require('../models/DebugInfo');
|
const DebugInfo = require('../models/DebugInfo');
|
||||||
const Centrifuge = require('centrifuge');
|
const { Centrifuge } = require('centrifuge');
|
||||||
const SockJS = require('sockjs-client');
|
const SockJS = require('sockjs-client');
|
||||||
|
const WebSocket = require('ws');
|
||||||
|
|
||||||
const baseUrl = 'https://avtocod.ru/api/v3';
|
const baseUrl = 'https://avtocod.ru/api/v3';
|
||||||
|
const tokenRefreshUrl = 'https://avtocod.ru/api/centrifuge/refresh';
|
||||||
|
|
||||||
let deviceToken = crypto.createHash('sha256').update(Date.now().toString()).digest().toString('hex');
|
let deviceToken = crypto.createHash('sha256').update(Date.now().toString()).digest().toString('hex');
|
||||||
|
|
||||||
|
const myWs = function (options) {
|
||||||
|
return class wsClass extends WebSocket {
|
||||||
|
constructor(...args) {
|
||||||
|
super(...[...args, ...[options]])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function fromBase64(data) {
|
function fromBase64(data) {
|
||||||
return Buffer.from(data, 'base64').toString('binary');
|
return Buffer.from(data, 'base64').toString('binary');
|
||||||
}
|
}
|
||||||
@ -37,10 +48,47 @@ function decryptReport(report, hash) {
|
|||||||
return JSON.parse(decrypted.toString());
|
return JSON.parse(decrypted.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getToken(ctx) {
|
||||||
|
console.log('+++++ getToken');
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
fetch(tokenRefreshUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: new Headers({ 'Content-Type': 'application/json' }),
|
||||||
|
body: JSON.stringify(ctx)
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
if (!res.ok) {
|
||||||
|
throw new Error(`Unexpected status code ${res.status}`);
|
||||||
|
}
|
||||||
|
return res.json();
|
||||||
|
})
|
||||||
|
.then(data => {
|
||||||
|
resolve(data.token);
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function waitForReport(centrifugoConfig, channel) {
|
function waitForReport(centrifugoConfig, channel) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
let report = null;
|
let report = null;
|
||||||
let centrifuge = new Centrifuge(centrifugoConfig.uri, { sockjs: SockJS });
|
let centrifuge = new Centrifuge([{
|
||||||
|
transport: 'websocket',
|
||||||
|
endpoint: centrifugoConfig.uri
|
||||||
|
}], {
|
||||||
|
websocket: myWs({ headers: {
|
||||||
|
'Sec-Fetch-Site': 'same-site',
|
||||||
|
'Sec-Fetch-Mode': 'websocket',
|
||||||
|
'Sec-Fetch-Dest': 'websocket',
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/109.0'
|
||||||
|
} }),
|
||||||
|
token: centrifugoConfig.token,
|
||||||
|
getToken: getToken,
|
||||||
|
debug: false
|
||||||
|
});
|
||||||
|
|
||||||
let timeout = setTimeout(() => {
|
let timeout = setTimeout(() => {
|
||||||
centrifuge.disconnect();
|
centrifuge.disconnect();
|
||||||
@ -51,7 +99,9 @@ function waitForReport(centrifugoConfig, channel) {
|
|||||||
}
|
}
|
||||||
}, 10000);
|
}, 10000);
|
||||||
|
|
||||||
centrifuge.subscribe(channel, message => {
|
const sub = centrifuge.newSubscription(channel);
|
||||||
|
|
||||||
|
sub.on('publication', function(message) {
|
||||||
if(message.data.event == 'report-ready') {
|
if(message.data.event == 'report-ready') {
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
centrifuge.disconnect();
|
centrifuge.disconnect();
|
||||||
@ -61,7 +111,7 @@ function waitForReport(centrifugoConfig, channel) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
centrifuge.setToken(centrifugoConfig.token);
|
sub.subscribe();
|
||||||
centrifuge.connect();
|
centrifuge.connect();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -73,6 +123,7 @@ class AvtocodProvider {
|
|||||||
let resp = await getJson(url);
|
let resp = await getJson(url);
|
||||||
|
|
||||||
let html = await getPage(resp.report_uri);
|
let html = await getPage(resp.report_uri);
|
||||||
|
|
||||||
let result = html.match(/<meta name="app-version-hash" content="(.*?)" \/>/);
|
let result = html.match(/<meta name="app-version-hash" content="(.*?)" \/>/);
|
||||||
if(result == null) {
|
if(result == null) {
|
||||||
throw Error('Error getting api version hash');
|
throw Error('Error getting api version hash');
|
||||||
|
|||||||
62
package-lock.json
generated
62
package-lock.json
generated
@ -11,7 +11,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"abort-controller": "^3.0.0",
|
"abort-controller": "^3.0.0",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"centrifuge": "^2.8.3",
|
"centrifuge": "^3.1.0",
|
||||||
"compress": "^0.99.0",
|
"compress": "^0.99.0",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
@ -26,7 +26,8 @@
|
|||||||
"response-time": "^2.3.2",
|
"response-time": "^2.3.2",
|
||||||
"sockjs-client": "^1.5.2",
|
"sockjs-client": "^1.5.2",
|
||||||
"utf8": "^3.0.0",
|
"utf8": "^3.0.0",
|
||||||
"uuid": "^8.3.0"
|
"uuid": "^8.3.0",
|
||||||
|
"ws": "^8.12.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
@ -1725,11 +1726,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/centrifuge": {
|
"node_modules/centrifuge": {
|
||||||
"version": "2.8.5",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/centrifuge/-/centrifuge-2.8.5.tgz",
|
"resolved": "https://registry.npmjs.org/centrifuge/-/centrifuge-3.1.0.tgz",
|
||||||
"integrity": "sha512-t06HyieeB2k7uSJSbVM4e7xMF+mfY8xvDtTJLF95ho0ba/X4MSoZcisi2PBzdCLyxG2BhkYW1Wcg6RUiPYTIlQ==",
|
"integrity": "sha512-CI0CU+ZwV7XYfFoW9oxhYg1rf/i7nhNnH9Aa+2okTces0YD+S5WCUMsrQXWkTTPxJI0jpnAbqZUVLqexxMm3ZA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"protobufjs": "^6.11.2"
|
"events": "^3.3.0",
|
||||||
|
"protobufjs": "^6.11.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/chalk": {
|
"node_modules/chalk": {
|
||||||
@ -2348,6 +2350,14 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/events": {
|
||||||
|
"version": "3.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
|
||||||
|
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/eventsource": {
|
"node_modules/eventsource": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz",
|
||||||
@ -4036,6 +4046,26 @@
|
|||||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/ws": {
|
||||||
|
"version": "8.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz",
|
||||||
|
"integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"bufferutil": "^4.0.1",
|
||||||
|
"utf-8-validate": ">=5.0.2"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"bufferutil": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"utf-8-validate": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/yallist": {
|
"node_modules/yallist": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||||
@ -5436,11 +5466,12 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"centrifuge": {
|
"centrifuge": {
|
||||||
"version": "2.8.5",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/centrifuge/-/centrifuge-2.8.5.tgz",
|
"resolved": "https://registry.npmjs.org/centrifuge/-/centrifuge-3.1.0.tgz",
|
||||||
"integrity": "sha512-t06HyieeB2k7uSJSbVM4e7xMF+mfY8xvDtTJLF95ho0ba/X4MSoZcisi2PBzdCLyxG2BhkYW1Wcg6RUiPYTIlQ==",
|
"integrity": "sha512-CI0CU+ZwV7XYfFoW9oxhYg1rf/i7nhNnH9Aa+2okTces0YD+S5WCUMsrQXWkTTPxJI0jpnAbqZUVLqexxMm3ZA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"protobufjs": "^6.11.2"
|
"events": "^3.3.0",
|
||||||
|
"protobufjs": "^6.11.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"chalk": {
|
"chalk": {
|
||||||
@ -5903,6 +5934,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
|
||||||
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
|
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
|
||||||
},
|
},
|
||||||
|
"events": {
|
||||||
|
"version": "3.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
|
||||||
|
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
|
||||||
|
},
|
||||||
"eventsource": {
|
"eventsource": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz",
|
||||||
@ -7199,6 +7235,12 @@
|
|||||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"ws": {
|
||||||
|
"version": "8.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz",
|
||||||
|
"integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
"yallist": {
|
"yallist": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"abort-controller": "^3.0.0",
|
"abort-controller": "^3.0.0",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"centrifuge": "^2.8.3",
|
"centrifuge": "^3.1.0",
|
||||||
"compress": "^0.99.0",
|
"compress": "^0.99.0",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
@ -28,7 +28,8 @@
|
|||||||
"response-time": "^2.3.2",
|
"response-time": "^2.3.2",
|
||||||
"sockjs-client": "^1.5.2",
|
"sockjs-client": "^1.5.2",
|
||||||
"utf8": "^3.0.0",
|
"utf8": "^3.0.0",
|
||||||
"uuid": "^8.3.0"
|
"uuid": "^8.3.0",
|
||||||
|
"ws": "^8.12.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user