Socket
Socket
Sign inDemoInstall

xumm-sdk

Package Overview
Dependencies
Maintainers
4
Versions
84
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

xumm-sdk - npm Package Compare versions

Comparing version 1.10.1 to 1.11.0

141

dist/src/Payload.js

@@ -18,2 +18,6 @@ "use strict";

const logWs = debug_1.debug('xumm-sdk:payload:websocket');
const maxSocketConnectAttempts = 30;
const socketConnectAttemptSecondsDelay = 2;
const socketKeepaliveSendSeconds = 2;
const socketKeepaliveTimeoutSeconds = 10;
class Payload {

@@ -73,3 +77,2 @@ constructor(MetaObject) {

subscribe(payload, callback) {
var _a, _b;
return __awaiter(this, void 0, void 0, function* () {

@@ -80,54 +83,106 @@ const callbackPromise = new utils_1.DeferredPromise();

const _u = 'undefined'; // For globalThis.mockedWebSocket (leave note for Deno gen!)
const socket = typeof ((_a = globalThis) === null || _a === void 0 ? void 0 : _a.MockedWebSocket) !== _u && typeof jest !== _u
? new ((_b = globalThis) === null || _b === void 0 ? void 0 : _b.MockedWebSocket)('ws://xumm.local')
: new websocket_1.w3cwebsocket(this.Meta.endpoint.replace(/^http/, 'ws') + '/sign/' + payloadDetails.meta.uuid);
let socket;
let keepAlivePing;
let keepAliveReinstateTimer;
let reconnectAttempts = 0;
callbackPromise.promise.then(() => {
clearTimeout(keepAlivePing);
clearTimeout(keepAliveReinstateTimer);
socket.close();
});
socket.onopen = () => {
logWs(`Payload ${payloadDetails.meta.uuid}: Subscription active (WebSocket opened)`);
};
socket.onmessage = (MessageEvent) => __awaiter(this, void 0, void 0, function* () {
const m = MessageEvent.data;
let json = undefined;
try {
json = JSON.parse(m.toString());
if ((json === null || json === void 0 ? void 0 : json.signed) || (json === null || json === void 0 ? void 0 : json.expired)) {
// The payload has been signed or expired, update the referenced payload
const updatedPayloadDetails = yield this.resolvePayload(payload);
Object.assign(payloadDetails, Object.assign({}, updatedPayloadDetails));
}
}
catch (e) {
// Do nothing
logWs(`Payload ${payloadDetails.meta.uuid}: Received message, unable to parse as JSON`, e);
}
if (json && callback && typeof json.devapp_fetched === 'undefined') {
const connect = () => {
var _a, _b;
socket = typeof ((_a = globalThis) === null || _a === void 0 ? void 0 : _a.MockedWebSocket) !== _u && typeof jest !== _u
? new ((_b = globalThis) === null || _b === void 0 ? void 0 : _b.MockedWebSocket)('ws://xumm.local')
: new websocket_1.w3cwebsocket(this.Meta.endpoint.replace(/^http/, 'ws') + '/sign/' + payloadDetails.meta.uuid);
socket.onopen = () => {
console.log(`Payload ${payloadDetails.meta.uuid}: subscription active (WebSocket opened)`);
keepAlivePing = setInterval(() => {
logWs('Send keepalive');
socket.send('{"ping":true}');
}, socketKeepaliveSendSeconds * 1000);
};
socket.onmessage = (MessageEvent) => __awaiter(this, void 0, void 0, function* () {
reconnectAttempts = 0;
const m = MessageEvent.data;
let json = undefined;
try {
// log(`Payload ${payload}`, json)
const callbackResult = yield callback({
uuid: payloadDetails.meta.uuid,
data: json,
resolve(resolveData) {
return __awaiter(this, void 0, void 0, function* () {
yield callbackPromise.resolve(resolveData || undefined);
});
},
payload: payloadDetails
});
if (callbackResult !== undefined) {
callbackPromise.resolve(callbackResult);
json = JSON.parse(m.toString());
if ((json === null || json === void 0 ? void 0 : json.message) && json.message === 'Right back at you!') {
// Keepalive responses
logWs('Keepalive response');
clearTimeout(keepAliveReinstateTimer);
keepAliveReinstateTimer = setTimeout(() => {
console.log(`WebSocket for ${payloadDetails.meta.uuid} ` +
`keepalive response timeout, assume dead... (Reconnect)`);
socket.close(1002, 'Assume dead');
}, socketKeepaliveTimeoutSeconds * 1000);
return;
}
if ((json === null || json === void 0 ? void 0 : json.signed) || (json === null || json === void 0 ? void 0 : json.expired)) {
// The payload has been signed or expired, update the referenced payload
const updatedPayloadDetails = yield this.resolvePayload(payload);
Object.assign(payloadDetails, Object.assign({}, updatedPayloadDetails));
}
}
catch (e) {
// Do nothing
logWs(`Payload ${payloadDetails.meta.uuid}: Callback exception`, e);
// This one emit for devs to know about this problem
console.log(`Payload ${payloadDetails.meta.uuid}: Callback exception: ${e.message}`);
logWs(`Payload ${payloadDetails.meta.uuid}: Received message, unable to parse as JSON`, e);
}
}
});
socket.onclose = (_e) => {
logWs(`Payload ${payloadDetails.meta.uuid}: Subscription ended (WebSocket closed)`);
if (json && callback && typeof json.devapp_fetched === 'undefined') {
try {
// log(`Payload ${payload}`, json)
const callbackResult = yield callback({
uuid: payloadDetails.meta.uuid,
data: json,
resolve(resolveData) {
return __awaiter(this, void 0, void 0, function* () {
yield callbackPromise.resolve(resolveData || undefined);
});
},
payload: payloadDetails
});
if (callbackResult !== undefined) {
callbackPromise.resolve(callbackResult);
}
}
catch (e) {
// Do nothing
logWs(`Payload ${payloadDetails.meta.uuid}: Callback exception`, e);
// This one emit for devs to know about this problem
console.log(`Payload ${payloadDetails.meta.uuid}: Callback exception: ${e.message}`);
}
}
});
socket.onclose = (_e) => {
logWs('Closed [code]', _e.code);
logWs('Closed [reason]', _e.reason);
logWs('Closed [wasClean]', _e.wasClean);
clearInterval(keepAlivePing);
clearTimeout(keepAliveReinstateTimer);
// Reconnect
if (_e.code > 1000 || _e.wasClean === false) {
logWs('Unhealthy disconnect, reconnecting...', _e.code);
if (reconnectAttempts < maxSocketConnectAttempts) {
if (reconnectAttempts === 0) {
console.log(`WebSocket for ${payloadDetails.meta.uuid} lost, reconnecting...`);
}
setTimeout(() => {
reconnectAttempts++;
logWs('# Reconnect');
socket = connect();
}, socketConnectAttemptSecondsDelay * 1000);
}
else {
console.log(`WebSocket for ${payloadDetails.meta.uuid} exceeded reconnect timeouts, give up`);
}
}
else {
// Socket closed on purpose (?)
}
logWs(`Payload ${payloadDetails.meta.uuid}: Subscription ended (WebSocket closed)`);
};
return socket;
};
socket = connect();
return {

@@ -134,0 +189,0 @@ payload: payloadDetails,

{
"name": "xumm-sdk",
"version": "1.10.1",
"version": "1.11.0",
"description": "Interact with the Xumm Developer API",

@@ -5,0 +5,0 @@ "main": "dist/src/index.js",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc