summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2018-06-13 15:01:30 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2018-06-14 11:22:29 -0300
commit2ade9a84077d79863e4a870d44ff0b5458bcf8b6 (patch)
tree06576b6715a75c8b4f02c6331a092f7e1e2c78bf
parent8471c7bfd8ffdf9b0452d00cf7826660be41b569 (diff)
downloadmullvadvpn-2ade9a84077d79863e4a870d44ff0b5458bcf8b6.tar.xz
mullvadvpn-2ade9a84077d79863e4a870d44ff0b5458bcf8b6.zip
Create `JsonRpcError` type
And rename the previous existing type into `JsonRpcErrorMessage`.
-rw-r--r--app/lib/jsonrpc-ws-ipc.js29
1 files changed, 25 insertions, 4 deletions
diff --git a/app/lib/jsonrpc-ws-ipc.js b/app/lib/jsonrpc-ws-ipc.js
index ff73f4cc88..84dec96c77 100644
--- a/app/lib/jsonrpc-ws-ipc.js
+++ b/app/lib/jsonrpc-ws-ipc.js
@@ -11,11 +11,12 @@ export type UnansweredRequest = {
message: Object,
};
-export type JsonRpcError = {
+export type JsonRpcErrorResponse = {
type: 'error',
payload: {
id: string,
error: {
+ code: number,
message: string,
},
},
@@ -37,7 +38,26 @@ export type JsonRpcSuccess = {
result: mixed,
},
};
-export type JsonRpcMessage = JsonRpcError | JsonRpcNotification | JsonRpcSuccess;
+export type JsonRpcMessage = JsonRpcErrorResponse | JsonRpcNotification | JsonRpcSuccess;
+
+export class JsonRpcError extends Error {
+ _code: number;
+ _details: string;
+
+ constructor(code: number, details: string) {
+ super(`Remote JSON-RPC error ${code}: ${details}`);
+ this._code = code;
+ this._details = details;
+ }
+
+ get code(): number {
+ return this._code;
+ }
+
+ get details(): string {
+ return this._details;
+ }
+}
export class TimeOutError extends Error {
jsonRpcMessage: Object;
@@ -200,7 +220,7 @@ export default class Ipc {
}
}
- _onReply(message: JsonRpcError | JsonRpcSuccess) {
+ _onReply(message: JsonRpcErrorResponse | JsonRpcSuccess) {
const id = message.payload.id;
const request = this._unansweredRequests.get(id);
this._unansweredRequests.delete(id);
@@ -215,7 +235,8 @@ export default class Ipc {
clearTimeout(request.timerId);
if (message.type === 'error') {
- request.reject(message.payload.error);
+ const error = message.payload.error;
+ request.reject(new JsonRpcError(error.code, error.message));
} else {
const reply = message.payload.result;
request.resolve(reply);