From d77b2bacb00f65cead22fe1eca9c4d24e3f247f3 Mon Sep 17 00:00:00 2001 From: Nicholas Hyatt Date: Wed, 3 Aug 2016 08:59:56 -0500 Subject: [PATCH] deserialize throws errors when an error field is present on the top level of a recieved message --- client/src/serialization.js | 16 ++++++++++++++-- client/src/socket.js | 13 ------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/client/src/serialization.js b/client/src/serialization.js index ff8ccd6a2..232a1c7a2 100644 --- a/client/src/serialization.js +++ b/client/src/serialization.js @@ -3,12 +3,22 @@ const PRIMITIVES = [ function modifyObject(doc) { Object.keys(doc).forEach(key => { - doc[key] = deserialize(doc[key]) + doc[key] = deserialize(doc[key], true) }) return doc } -export function deserialize(value) { +class ProtocolError extends Error { + constructor(msg, errorCode) { + super(msg) + this.errorCode = errorCode + } + toString() { + return `${this.message} (Code: ${this.errorCode})` + } +} + +export function deserialize(value, nested) { if (value == null) { return value } else if (PRIMITIVES.indexOf(typeof value) !== -1) { @@ -19,6 +29,8 @@ export function deserialize(value) { const date = new Date() date.setTime(value.epoch_time * 1000) return date + } else if (value.error !== undefined && nested !== true) { + throw new ProtocolError(value.error, value.error_code) } else { return modifyObject(value) } diff --git a/client/src/socket.js b/client/src/socket.js index e32fb5087..a07b5b802 100644 --- a/client/src/socket.js +++ b/client/src/socket.js @@ -24,16 +24,6 @@ const STATUS_ERROR = { type: 'error' } // Occurs when the socket closes const STATUS_DISCONNECTED = { type: 'disconnected' } -class ProtocolError extends Error { - constructor(msg, errorCode) { - super(msg) - this.errorCode = errorCode - } - toString() { - return `${this.message} (Code: ${this.errorCode})` - } -} - // Wraps native websockets with a Subject, which is both an Subscriber // and an Observable (it is bi-directional after all!). This version @@ -176,9 +166,6 @@ export class HorizonSocket extends WebSocketSubject { return this.sendHandshake().ignoreElements() .concat(this.makeRequest(rawRequest)) .concatMap(resp => { - if (resp.error !== undefined) { - throw new ProtocolError(resp.error, resp.error_code) - } const data = resp.data || [] if (resp.state !== undefined) {