New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

beam-interactive-node

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

beam-interactive-node - npm Package Compare versions

Comparing version 0.2.4 to 0.2.5

dist/heartbeats.js

1

dist/client.js

@@ -33,2 +33,3 @@ 'use strict';

(0, _util.bubble)('error', _this.connect, _this);
(0, _util.bubble)('close', _this.connect, _this);

@@ -35,0 +36,0 @@ // By default Node throws when errors are emitted without a listener.

8

dist/connector.js

@@ -75,2 +75,4 @@ 'use strict';

(0, _util.bubble)('error', socket, this, 'bubbleOpen');
// Always bubble close
(0, _util.bubble)('close', socket, this);

@@ -101,3 +103,3 @@ socket.once('open', function () {

var message = undefined;
var message = void 0;
try {

@@ -216,2 +218,3 @@ message = this.decode(data);

* @param {Packet} packet
* @return {Connector}
*/

@@ -222,3 +225,3 @@

value: function send(packet) {
var encoded = undefined;
var encoded = void 0;
try {

@@ -232,2 +235,3 @@ encoded = this.encode(packet);

this.socket.send(encoded);
return this;
}

@@ -234,0 +238,0 @@

@@ -67,3 +67,3 @@ 'use strict';

var endpoint = undefined;
var endpoint = void 0;
if (this.options.playbook) {

@@ -70,0 +70,0 @@ endpoint = this.options.remote + '/playbook';

@@ -37,3 +37,3 @@ 'use strict';

value: function encode() {
var encoded = undefined;
var encoded = void 0;
if (typeof this.props.toJSON === 'function') {

@@ -124,3 +124,3 @@ encoded = this.props.toJSON();

Packet.decode = function packetDecode(str) {
var parsed = undefined;
var parsed = void 0;
try {

@@ -156,3 +156,3 @@ parsed = JSON.parse(str.slice(id.length));

Object.defineProperty(packets, 'decode', {
value: function decode(str) {
value: function value(str) {
if (!str || str.length < idLength) {

@@ -163,2 +163,4 @@ throw new _errors.FatalCodingError('Incomplete JSON packet.', str);

for (var key in packets) {
if (!packets.hasOwnProperty(key)) continue;
var p = packets[key];

@@ -165,0 +167,0 @@ if (p.matches(str)) {

@@ -54,4 +54,5 @@ 'use strict';

this.mergeTactile(data);
this.mergeJoystick(data);
this._mergeTactile(data);
this._mergeJoystick(data);
this._mergeScreen(data);

@@ -75,4 +76,4 @@ if (!this.waiting) {

}, {
key: 'mergeTactile',
value: function mergeTactile(data) {
key: '_mergeTactile',
value: function _mergeTactile(data) {
var report = this.queued.report;

@@ -100,3 +101,3 @@

/**
* Merges queued joystick data with that of the given report.
* Merges provided joystick input data with that of the queued report.
* @param {Object} data

@@ -106,26 +107,59 @@ */

}, {
key: 'mergeJoystick',
value: function mergeJoystick(data) {
key: '_mergeJoystick',
value: function _mergeJoystick(data) {
var report = this.queued.report;
var _loop2 = function _loop2(i) {
var right = data.joystick[i];
var left = (0, _util.find)(report.joystick, function (l) {
return l.id === right.id;
});
for (var i = 0; data.joystick && i < data.joystick.length; i++) {
this._mergeCoordinates(report.joystick, data.joystick[i]);
}
}
if (left !== undefined) {
left.x = (left.x + right.x) / 2;
left.y = (left.y + right.y) / 2;
} else {
report.joystick.push(right);
}
};
/**
* Merges a coordinate report with the corresponding
* record in the array, averaging its means if one exists
* or creating a new report if it doesn't.
*
* @param {Array} arr
* @param {Object} right
* @return {Object} the target recrod
*/
for (var i = 0; data.joystick && i < data.joystick.length; i++) {
_loop2(i);
}, {
key: '_mergeCoordinates',
value: function _mergeCoordinates(arr, right) {
var left = (0, _util.find)(arr, function (l) {
return l.id === right.id;
});
if (left === undefined) {
arr.push(right);
return right;
}
left.x = (0, _util.averageIf)(left.x, right.x);
left.y = (0, _util.averageIf)(left.y, right.y);
return left;
}
/**
* Merges provided screen input data with that of the queued report.
* @param {Object} data
*/
}, {
key: '_mergeScreen',
value: function _mergeScreen(data) {
var report = this.queued.report;
for (var i = 0; data.screen && i < data.screen.length; i++) {
var _right = data.screen[i];
var _left = this._mergeCoordinates(report.screen, _right);
if (_left !== _right) {
_left.clicks = (0, _util.addIf)(_left.clicks, _right.clicks);
}
}
}
/**
* Resets queued data. Should be run after reports are sent.

@@ -138,3 +172,11 @@ * @private

value: function resetQueued() {
this.queued = { report: { joystick: [], tactile: [] }, callbacks: [] };
this.queued = {
report: {
joystick: [],
tactile: [],
screen: []
},
callbacks: []
};
this.lastSent = Date.now();

@@ -141,0 +183,0 @@ this.waiting = false;

@@ -34,3 +34,3 @@ 'use strict';

Object.keys(idMap).forEach(function genpacket(key) {
Object.keys(idMap).forEach(function (key) {
var Packet = Packets[key];

@@ -42,3 +42,3 @@ var id = idMap[key];

Packet.prototype.encodeOriginal = Packet.prototype.encode;
Packet.prototype.encode = function encode() {
Packet.prototype.encode = function () {
return Buffer.concat([new Buffer(_varint2.default.encode(id)), this.encodeOriginal().toBuffer()]);

@@ -53,7 +53,7 @@ };

Packet.decodeOriginal = Packet.decode;
Packet.decode = function decode(buf) {
Packet.decode = function (buf) {
_varint2.default.decode(buf, 0);
var offset = _varint2.default.decode.bytes;
var decoded = undefined;
var decoded = void 0;
try {

@@ -76,3 +76,3 @@ decoded = Packet.decodeOriginal(buf.slice(offset));

Object.defineProperty(Packets, 'decode', {
value: function decode(buf) {
value: function value(buf) {
var id = _varint2.default.decode(buf);

@@ -84,2 +84,4 @@ if (id === undefined) {

for (var key in idMap) {
if (!idMap.hasOwnProperty(key)) continue;
var p = Packets[key];

@@ -86,0 +88,0 @@ if (p.id === id) {

@@ -12,2 +12,6 @@ 'use strict';

var _heartbeats = require('./heartbeats');
var _heartbeats2 = _interopRequireDefault(_heartbeats);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -27,10 +31,10 @@

if (event === 'message') {
return fn(ev.data);
fn(ev.data);
} else {
fn(ev);
}
fn(ev);
};
}
socket.on = function on(event, listener) {
socket.on = function (event, listener) {
var wrapped = wrapHandler(event, listener);

@@ -40,3 +44,3 @@ socket.addEventListener(event, wrapped);

socket.once = function once(event, listener) {
socket.once = function (event, listener) {
var wrapped = wrapHandler(event, listener);

@@ -59,2 +63,3 @@ socket.addEventListener(event, function (ev) {

function wrapNode(socket) {
(0, _heartbeats2.default)(socket);
return socket;

@@ -61,0 +66,0 @@ }

@@ -11,3 +11,5 @@ 'use strict';

exports.strRepeat = strRepeat;
exports.isNumber = isNumber;
exports.addIf = addIf;
exports.averageIf = averageIf;
exports.indent = indent;

@@ -91,13 +93,55 @@ exports.assert = assert;

/**
* Adds a and b and returns their result. If either A or B is falsey
* (undefined, null, NaN, etc), it'll treat it as zero.
* @param {Number} a
* @param {Number} b
* Returns true if `n` is a number.
* @param {*} n
* @return {Boolean}
*/
function isNumber(n) {
return typeof n === 'number';
}
/**
* Adds the numeric arguments and returns their result. Non-numeric
* arguments will be ignored.
* @param {Number...} numbers
* @return {Number}
*/
function addIf(a, b) {
return (a || 0) + (b || 0);
function addIf() {
var sum = 0;
for (var _len2 = arguments.length, numbers = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
numbers[_key2] = arguments[_key2];
}
for (var i = 0; i < numbers.length; i++) {
if (isNumber(numbers[i])) sum += numbers[i];
}
return sum;
}
/**
* Averages the numeric arguments and returns the result. Non-numeric
* arguments will be ignored.
* @param {Number...} args
* @return {Number}
*/
function averageIf() {
var sum = 0;
var count = 0;
for (var _len3 = arguments.length, numbers = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
numbers[_key3] = arguments[_key3];
}
for (var i = 0; i < numbers.length; i++) {
if (isNumber(numbers[i])) {
sum += numbers[i];
count += 1;
}
}
return sum / count;
}
/**
* Indents the string n times.

@@ -104,0 +148,0 @@ * @param {String} str

@@ -1,3 +0,3 @@

import {EventEmitter} from 'events';
import {strRepeat, indent, bubble} from './util';
import { EventEmitter } from 'events';
import { strRepeat, indent, bubble } from './util';

@@ -7,3 +7,3 @@

constructor (options) {
constructor(options) {
super();

@@ -14,2 +14,3 @@ this.options = Object.assign({ debug: false }, options);

bubble('error', this.connect, this);
bubble('close', this.connect, this);

@@ -41,3 +42,3 @@ // By default Node throws when errors are emitted without a listener.

*/
logEntry (data, incoming) {
logEntry(data, incoming) {
const now = new Date();

@@ -62,3 +63,3 @@ let message = `${now.getHours()}:${now.getMinutes()}:${now.getSeconds()} ` +

*/
prettyError (err) {
prettyError(err) {
const divider = strRepeat('-', 20) + ' ';

@@ -89,3 +90,3 @@ let output = divider +

*/
newConnector () {
newConnector() {
throw new Error('not implemented');

@@ -98,3 +99,3 @@ }

*/
send (packet) {
send(packet) {
this.connect.send(packet);

@@ -109,3 +110,3 @@ }

*/
call (packet, response, callback) {
call(packet, response, callback) {
this.connect.call(packet, response, callback);

@@ -117,5 +118,5 @@ }

*/
close () {
close() {
this.connect.close();
}
}

@@ -1,4 +0,4 @@

import {UnknownPacketError, UnexpectedServerResponse} from './errors';
import {EventEmitter} from 'events';
import {noop, bubble} from './util';
import { UnknownPacketError, UnexpectedServerResponse } from './errors';
import { EventEmitter } from 'events';
import { noop, bubble } from './util';
import makeSocket from './socketMaker';

@@ -19,3 +19,3 @@

*/
constructor (encode, decode, errorPacket, remote) {
constructor(encode, decode, errorPacket, remote) {
super();

@@ -35,6 +35,8 @@ this.handlers = [];

*/
connect (callback = noop, generator = makeSocket) {
connect(callback = noop, generator = makeSocket) {
const socket = this.socket = generator(this.remote);
bubble('error', socket, this, 'bubbleOpen');
// Always bubble close
bubble('close', socket, this);

@@ -58,3 +60,3 @@ socket.once('open', () => {

*/
doDecode (data) {
doDecode(data) {
this.emit('raw-message', data);

@@ -84,3 +86,3 @@

*/
setOpen (state) {
setOpen(state) {
this.open = state;

@@ -93,3 +95,3 @@ }

*/
getOpen () {
getOpen() {
return this.open;

@@ -104,3 +106,3 @@ }

*/
bubbleOpen (event, ...args) {
bubbleOpen(event, ...args) {
if (this.open) this.emit(event, ...args);

@@ -121,3 +123,3 @@ }

*/
handleIncoming (message) {
handleIncoming(message) {
for (let i = 0; i < this.handlers.length; i++) {

@@ -140,3 +142,3 @@ if (this.handlers[i](message)) {

*/
call (packet, Expected, callback) {
call(packet, Expected, callback) {
this.handlers.push((message) => {

@@ -160,4 +162,5 @@ if (message instanceof Expected) {

* @param {Packet} packet
* @return {Connector}
*/
send (packet) {
send(packet) {
let encoded;

@@ -172,2 +175,3 @@ try {

this.socket.send(encoded);
return this;
}

@@ -178,3 +182,3 @@

*/
close () {
close() {
if (this.socket) {

@@ -181,0 +185,0 @@ this.socket.close();

import assignIn from 'lodash.assignin';
function extendError (name, methods) {
function extendError(name, methods) {
/* eslint-disable no-new-func */

@@ -38,3 +38,3 @@ const Err = (new Function(`

export const UnknownPacketError = extendError('UnknownPacketError', {
constructor (id, data) {
constructor(id, data) {
this.message = `Unknown packet ID ${id}`;

@@ -41,0 +41,0 @@ this.data = data;

@@ -5,3 +5,3 @@ import Packets from './packets';

import Reporter from './reporter';
import {noop} from '../util';
import { noop } from '../util';

@@ -25,3 +25,3 @@

*/
constructor (options) {
constructor(options) {
super(options);

@@ -32,3 +32,3 @@

newConnector () {
newConnector() {
let endpoint;

@@ -65,3 +65,3 @@ if (this.options.playbook) {

*/
handshake (callback) {
handshake(callback) {
const connect = this.connect;

@@ -86,3 +86,3 @@

*/
report (data, callback = noop) {
report(data, callback = noop) {
this.reporter.add(data, callback);

@@ -98,3 +98,3 @@ }

*/
static Packet (name, data) {
static Packet(name, data) {
const Packet = Packets[name];

@@ -101,0 +101,0 @@ if (Packet === undefined) {

@@ -1,4 +0,4 @@

import {FatalCodingError, UnknownPacketError} from '../errors';
import { FatalCodingError, UnknownPacketError } from '../errors';
import isPlain from 'lodash.isplainobject';
import {assert} from '../util';
import { assert } from '../util';

@@ -13,3 +13,3 @@ const idLength = 4;

*/
encode () {
encode() {
let encoded;

@@ -32,3 +32,3 @@ if (typeof this.props.toJSON === 'function') {

*/
get (prop) {
get(prop) {
const parts = prop.split('.');

@@ -48,3 +48,3 @@

*/
toObject () {
toObject() {
return this.props;

@@ -58,3 +58,3 @@ }

*/
toJSON () {
toJSON() {
return JSON.stringify(this.props);

@@ -64,3 +64,3 @@ }

function packet (name, id) {
function packet(name, id) {
assert(id.length === idLength, 'expected ID length `' + id + '` to be 4');

@@ -86,3 +86,3 @@

*/
Packet.matches = function matches (str) {
Packet.matches = function matches(str) {
return str.slice(0, idLength) === id;

@@ -98,3 +98,3 @@ };

*/
Packet.decode = function packetDecode (str) {
Packet.decode = function packetDecode(str) {
let parsed;

@@ -131,3 +131,3 @@ try {

Object.defineProperty(packets, 'decode', {
value: function decode (str) {
value(str) {
if (!str || str.length < idLength) {

@@ -138,2 +138,4 @@ throw new FatalCodingError('Incomplete JSON packet.', str);

for (const key in packets) {
if (!packets.hasOwnProperty(key)) continue;
const p = packets[key];

@@ -140,0 +142,0 @@ if (p.matches(str)) {

import Packets from './packets';
import {find, noop, addIf} from '../util';
import { find, noop, addIf, averageIf } from '../util';

@@ -15,3 +15,3 @@ /**

*/
constructor (client, interval) {
constructor(client, interval) {
this.client = client;

@@ -27,5 +27,6 @@ this.interval = interval;

*/
add (data, callback = noop) {
this.mergeTactile(data);
this.mergeJoystick(data);
add(data, callback = noop) {
this._mergeTactile(data);
this._mergeJoystick(data);
this._mergeScreen(data);

@@ -45,3 +46,3 @@ if (!this.waiting) {

*/
mergeTactile (data) {
_mergeTactile(data) {
const report = this.queued.report;

@@ -63,17 +64,48 @@

/**
* Merges queued joystick data with that of the given report.
* Merges provided joystick input data with that of the queued report.
* @param {Object} data
*/
mergeJoystick (data) {
_mergeJoystick(data) {
const report = this.queued.report;
for (let i = 0; data.joystick && i < data.joystick.length; i++) {
const right = data.joystick[i];
const left = find(report.joystick, (l) => l.id === right.id);
this._mergeCoordinates(report.joystick, data.joystick[i]);
}
}
if (left !== undefined) {
left.x = (left.x + right.x) / 2;
left.y = (left.y + right.y) / 2;
} else {
report.joystick.push(right);
/**
* Merges a coordinate report with the corresponding
* record in the array, averaging its means if one exists
* or creating a new report if it doesn't.
*
* @param {Array} arr
* @param {Object} right
* @return {Object} the target recrod
*/
_mergeCoordinates(arr, right) {
const left = find(arr, (l) => l.id === right.id);
if (left === undefined) {
arr.push(right);
return right;
}
left.x = averageIf(left.x, right.x);
left.y = averageIf(left.y, right.y);
return left;
}
/**
* Merges provided screen input data with that of the queued report.
* @param {Object} data
*/
_mergeScreen(data) {
const report = this.queued.report;
for (let i = 0; data.screen && i < data.screen.length; i++) {
const right = data.screen[i];
const left = this._mergeCoordinates(report.screen, right);
if (left !== right) {
left.clicks = addIf(left.clicks, right.clicks);
}

@@ -87,4 +119,12 @@ }

*/
resetQueued () {
this.queued = { report: { joystick: [], tactile: [] }, callbacks: [] };
resetQueued() {
this.queued = {
report: {
joystick: [],
tactile: [],
screen: [],
},
callbacks: [],
};
this.lastSent = Date.now();

@@ -99,3 +139,3 @@ this.waiting = false;

*/
runSend () {
runSend() {
const q = this.queued;

@@ -102,0 +142,0 @@ this.client.send(new Packets.Report(q.report));

import Packets from './packets';
import Socket from '../connector';
import Client from '../client';
import {find} from '../util';
import { find } from '../util';

@@ -21,7 +21,7 @@ // Map of packet types to events that should be sent out on the robot.

*/
constructor (options) {
constructor(options) {
super(options);
}
newConnector () {
newConnector() {
const socket = new Socket(

@@ -53,3 +53,3 @@ (packet) => packet.encode(),

*/
handshake (callback) {
handshake(callback) {
const connect = this.connect;

@@ -56,0 +56,0 @@

@@ -1,2 +0,2 @@

import {FatalCodingError, UnknownPacketError} from '../errors';
import { FatalCodingError, UnknownPacketError } from '../errors';
import Protobuf from 'protobufjs';

@@ -18,3 +18,3 @@ import varint from 'varint';

Object.keys(idMap).forEach(function genpacket (key) {
Object.keys(idMap).forEach(key => {
const Packet = Packets[key];

@@ -26,3 +26,3 @@ const id = idMap[key];

Packet.prototype.encodeOriginal = Packet.prototype.encode;
Packet.prototype.encode = function encode () {
Packet.prototype.encode = function () {
return Buffer.concat([

@@ -40,3 +40,3 @@ new Buffer(varint.encode(id)),

Packet.decodeOriginal = Packet.decode;
Packet.decode = function decode (buf) {
Packet.decode = function (buf) {
varint.decode(buf, 0);

@@ -63,3 +63,3 @@ const offset = varint.decode.bytes;

Object.defineProperty(Packets, 'decode', {
value: function decode (buf) {
value(buf) {
const id = varint.decode(buf);

@@ -71,2 +71,4 @@ if (id === undefined) {

for (const key in idMap) {
if (!idMap.hasOwnProperty(key)) continue;
const p = Packets[key];

@@ -73,0 +75,0 @@ if (p.id === id) {

@@ -9,3 +9,3 @@ // Importing this is DEPRECATED and will be removed in the future.

enumerable: true,
get () {
get() {
/* eslint-disable no-console */

@@ -12,0 +12,0 @@ console.error('Deprecated: import \'robot/packets\', not ' +

import WebSocket from 'ws';
import addHeartBeats from './heartbeats';

@@ -11,14 +12,14 @@ // window will be undefined in node.js

*/
function wrapDOM (socket) {
function wrapHandler (event, fn) {
function wrapDOM(socket) {
function wrapHandler(event, fn) {
return (ev) => {
if (event === 'message') {
return fn(ev.data);
fn(ev.data);
} else {
fn(ev);
}
fn(ev);
};
}
socket.on = function on (event, listener) {
socket.on = function (event, listener) {
const wrapped = wrapHandler(event, listener);

@@ -28,3 +29,3 @@ socket.addEventListener(event, wrapped);

socket.once = function once (event, listener) {
socket.once = function (event, listener) {
const wrapped = wrapHandler(event, listener);

@@ -46,3 +47,4 @@ socket.addEventListener(event, (ev) => {

*/
function wrapNode (socket) {
function wrapNode(socket) {
addHeartBeats(socket);
return socket;

@@ -60,3 +62,3 @@ }

*/
export default function makeSocket (remote) {
export default function makeSocket(remote) {
const socket = new WebSocket(remote);

@@ -63,0 +65,0 @@

@@ -1,4 +0,4 @@

import {AssertionError} from './errors';
import { AssertionError } from './errors';
export function noop () {}
export function noop() {}

@@ -12,3 +12,3 @@ /**

*/
export function bubble (event, child, parent, emit = 'emit') {
export function bubble(event, child, parent, emit = 'emit') {
child.on(event, (...args) => parent[emit](event, ...args));

@@ -25,3 +25,3 @@ }

*/
export function find (array, predicate) {
export function find(array, predicate) {
for (let i = 0; i < array.length; i++) {

@@ -44,3 +44,3 @@ if (predicate(array[i])) {

*/
export function findValue (obj, predicate) {
export function findValue(obj, predicate) {
for (const key in obj) {

@@ -61,3 +61,3 @@ if (obj.hasOwnProperty(key) && predicate(key, obj[key])) {

*/
export function strRepeat (str, times) {
export function strRepeat(str, times) {
let output = '';

@@ -72,13 +72,45 @@ for (let i = 0; i < times; i++) {

/**
* Adds a and b and returns their result. If either A or B is falsey
* (undefined, null, NaN, etc), it'll treat it as zero.
* @param {Number} a
* @param {Number} b
* Returns true if `n` is a number.
* @param {*} n
* @return {Boolean}
*/
export function isNumber(n) {
return typeof n === 'number';
}
/**
* Adds the numeric arguments and returns their result. Non-numeric
* arguments will be ignored.
* @param {Number...} numbers
* @return {Number}
*/
export function addIf (a, b) {
return (a || 0) + (b || 0);
export function addIf(...numbers) {
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
if (isNumber(numbers[i])) sum += numbers[i];
}
return sum;
}
/**
* Averages the numeric arguments and returns the result. Non-numeric
* arguments will be ignored.
* @param {Number...} args
* @return {Number}
*/
export function averageIf(...numbers) {
let sum = 0;
let count = 0;
for (let i = 0; i < numbers.length; i++) {
if (isNumber(numbers[i])) {
sum += numbers[i];
count += 1;
}
}
return sum / count;
}
/**
* Indents the string n times.

@@ -90,3 +122,3 @@ * @param {String} str

*/
export function indent (str, times, indenter = ' ') {
export function indent(str, times, indenter = ' ') {
const indentation = strRepeat(indenter, times);

@@ -110,3 +142,3 @@ const feed = /\r?\n/.exec(str);

*/
export function assert (condition, error = 'expected false to be true') {
export function assert(condition, error = 'expected false to be true') {
if (!condition) {

@@ -113,0 +145,0 @@ throw new AssertionError(error);

{
"name": "beam-interactive-node",
"version": "0.2.4",
"version": "0.2.5",
"description": "This repository contains reference a implementation of a Beam Interactive robot.",

@@ -37,3 +37,4 @@ "main": "index.js",

"varint": "^4.0.0",
"ws": "^0.8.0"
"ws": "^0.8.0",
"ws-heartbeats": "^1.0.0"
},

@@ -48,3 +49,5 @@ "devDependencies": {

"chai-subset": "^1.1.0",
"eslint": "^1.4.3",
"eslint": "^2.4.0",
"eslint-config-airbnb": "^6.1.0",
"eslint-plugin-react": "^4.2.1",
"http-server": "^0.9.0",

@@ -54,5 +57,5 @@ "istanbul": "^0.3.20",

"mysql": "^2.9.0",
"redis": "^1.0.0",
"redis": "^2.5.1",
"sinon": "^1.16.1"
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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