@actyx/sdk
Version:
Actyx SDK
72 lines • 3.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeWsMultiplexerV2 = exports.WebsocketEventStoreV2 = exports.v2getNodeId = void 0;
/*
* Actyx SDK: Functions for writing distributed apps
* deployed on peer-to-peer networks, without any servers.
*
* Copyright (C) 2021 Actyx AG
*/
var utils_1 = require("./utils");
Object.defineProperty(exports, "v2getNodeId", { enumerable: true, get: function () { return utils_1.v2getNodeId; } });
var websocketEventStore_1 = require("./websocketEventStore");
Object.defineProperty(exports, "WebsocketEventStoreV2", { enumerable: true, get: function () { return websocketEventStore_1.WebsocketEventStore; } });
const rxjs_1 = require("../../node_modules/rxjs");
const log_1 = require("../internal_common/log");
const node_info_1 = require("../node-info");
const error_1 = require("../util/error");
const multiplexedWebsocket_1 = require("./multiplexedWebsocket");
const utils_2 = require("./utils");
const makeWsMultiplexerV2 = async (config, token, manifest) => {
const apiLocation = (0, utils_2.getApiLocation)(config.actyxHost, config.actyxPort);
const wsUrl = (tok) => `ws://${apiLocation}/events?${tok}`;
const wsConfig = (0, multiplexedWebsocket_1.mkConfig)(wsUrl(token));
const getVersion = async (token) => (await (0, node_info_1.getInfo)(config)(token, -1)).semVer();
const version = await getVersion(token);
const tokVer = [token, version];
const closeSubject = new rxjs_1.Subject();
wsConfig.closeObserver = closeSubject;
const openSubject = new rxjs_1.Subject();
wsConfig.openObserver = openSubject;
const ws = new multiplexedWebsocket_1.MultiplexedWebsocket(wsConfig);
let disconnected = false;
log_1.default.ws.info('websocket initiated');
closeSubject.subscribe({
next: (err) => {
if (disconnected) {
return;
}
disconnected = true;
log_1.default.ws.warn('connection to Actyx lost', (0, error_1.massageError)(err));
config.onConnectionLost && config.onConnectionLost();
let renewing = false;
const renewToken = async () => {
if (renewing)
return;
renewing = true;
if (!(await (0, utils_2.checkToken)(config, tokVer[0]))) {
// tokVer[0] invalid but API working => reauthenticate
tokVer[0] = await (0, utils_2.getToken)(config, manifest);
wsConfig.url = wsUrl(tokVer[0]);
tokVer[1] = await getVersion(tokVer[0]);
ws.close(); // this disposes of the internal WebSocketSubject
ws.request('wake up');
}
};
setTimeout(() => renewToken().catch(() => (renewing = false)), 100);
ws.errors()
.pipe((0, rxjs_1.takeUntil)(openSubject))
.subscribe(() => renewToken().catch(() => (renewing = false)));
},
});
openSubject.subscribe({
next: () => {
log_1.default.ws.info('connection to Actyx established');
disconnected = false;
config.onConnectionEstablished && config.onConnectionEstablished();
},
});
return [ws, tokVer];
};
exports.makeWsMultiplexerV2 = makeWsMultiplexerV2;
//# sourceMappingURL=index.js.map