@0xsequence/guard 1.9.24 → 1.9.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -34,132 +34,192 @@ class Guard {
34
34
  this.hostname = void 0;
35
35
  this.fetch = void 0;
36
36
  this.path = '/rpc/Guard/';
37
- this.ping = headers => {
38
- return this.fetch(this.url('Ping'), createHTTPRequest({}, headers)).then(res => {
37
+ this.ping = (headers, signal) => {
38
+ return this.fetch(this.url('Ping'), createHTTPRequest({}, headers, signal)).then(res => {
39
39
  return buildResponse(res).then(_data => {
40
40
  return {
41
41
  status: _data.status
42
42
  };
43
43
  });
44
+ }, error => {
45
+ throw WebrpcRequestFailedError.new({
46
+ cause: `fetch(): ${error.message || ''}`
47
+ });
44
48
  });
45
49
  };
46
- this.version = headers => {
47
- return this.fetch(this.url('Version'), createHTTPRequest({}, headers)).then(res => {
50
+ this.version = (headers, signal) => {
51
+ return this.fetch(this.url('Version'), createHTTPRequest({}, headers, signal)).then(res => {
48
52
  return buildResponse(res).then(_data => {
49
53
  return {
50
54
  version: _data.version
51
55
  };
52
56
  });
57
+ }, error => {
58
+ throw WebrpcRequestFailedError.new({
59
+ cause: `fetch(): ${error.message || ''}`
60
+ });
53
61
  });
54
62
  };
55
- this.runtimeStatus = headers => {
56
- return this.fetch(this.url('RuntimeStatus'), createHTTPRequest({}, headers)).then(res => {
63
+ this.runtimeStatus = (headers, signal) => {
64
+ return this.fetch(this.url('RuntimeStatus'), createHTTPRequest({}, headers, signal)).then(res => {
57
65
  return buildResponse(res).then(_data => {
58
66
  return {
59
67
  status: _data.status
60
68
  };
61
69
  });
70
+ }, error => {
71
+ throw WebrpcRequestFailedError.new({
72
+ cause: `fetch(): ${error.message || ''}`
73
+ });
62
74
  });
63
75
  };
64
- this.getSignerConfig = (args, headers) => {
65
- return this.fetch(this.url('GetSignerConfig'), createHTTPRequest(args, headers)).then(res => {
76
+ this.getSignerConfig = (args, headers, signal) => {
77
+ return this.fetch(this.url('GetSignerConfig'), createHTTPRequest(args, headers, signal)).then(res => {
66
78
  return buildResponse(res).then(_data => {
67
79
  return {
68
80
  signerConfig: _data.signerConfig
69
81
  };
70
82
  });
83
+ }, error => {
84
+ throw WebrpcRequestFailedError.new({
85
+ cause: `fetch(): ${error.message || ''}`
86
+ });
71
87
  });
72
88
  };
73
- this.sign = (args, headers) => {
74
- return this.fetch(this.url('Sign'), createHTTPRequest(args, headers)).then(res => {
89
+ this.sign = (args, headers, signal) => {
90
+ return this.fetch(this.url('Sign'), createHTTPRequest(args, headers, signal)).then(res => {
75
91
  return buildResponse(res).then(_data => {
76
92
  return {
77
93
  sig: _data.sig
78
94
  };
79
95
  });
96
+ }, error => {
97
+ throw WebrpcRequestFailedError.new({
98
+ cause: `fetch(): ${error.message || ''}`
99
+ });
80
100
  });
81
101
  };
82
- this.signWith = (args, headers) => {
83
- return this.fetch(this.url('SignWith'), createHTTPRequest(args, headers)).then(res => {
102
+ this.signWith = (args, headers, signal) => {
103
+ return this.fetch(this.url('SignWith'), createHTTPRequest(args, headers, signal)).then(res => {
84
104
  return buildResponse(res).then(_data => {
85
105
  return {
86
106
  sig: _data.sig
87
107
  };
88
108
  });
109
+ }, error => {
110
+ throw WebrpcRequestFailedError.new({
111
+ cause: `fetch(): ${error.message || ''}`
112
+ });
89
113
  });
90
114
  };
91
- this.authMethods = (args, headers) => {
92
- return this.fetch(this.url('AuthMethods'), createHTTPRequest(args, headers)).then(res => {
115
+ this.authMethods = (args, headers, signal) => {
116
+ return this.fetch(this.url('AuthMethods'), createHTTPRequest(args, headers, signal)).then(res => {
93
117
  return buildResponse(res).then(_data => {
94
118
  return {
95
119
  methods: _data.methods,
96
120
  active: _data.active
97
121
  };
98
122
  });
123
+ }, error => {
124
+ throw WebrpcRequestFailedError.new({
125
+ cause: `fetch(): ${error.message || ''}`
126
+ });
99
127
  });
100
128
  };
101
- this.setPIN = (args, headers) => {
102
- return this.fetch(this.url('SetPIN'), createHTTPRequest(args, headers)).then(res => {
129
+ this.setPIN = (args, headers, signal) => {
130
+ return this.fetch(this.url('SetPIN'), createHTTPRequest(args, headers, signal)).then(res => {
103
131
  return buildResponse(res).then(_data => {
104
132
  return {};
105
133
  });
134
+ }, error => {
135
+ throw WebrpcRequestFailedError.new({
136
+ cause: `fetch(): ${error.message || ''}`
137
+ });
106
138
  });
107
139
  };
108
- this.resetPIN = (args, headers) => {
109
- return this.fetch(this.url('ResetPIN'), createHTTPRequest(args, headers)).then(res => {
140
+ this.resetPIN = (args, headers, signal) => {
141
+ return this.fetch(this.url('ResetPIN'), createHTTPRequest(args, headers, signal)).then(res => {
110
142
  return buildResponse(res).then(_data => {
111
143
  return {};
112
144
  });
145
+ }, error => {
146
+ throw WebrpcRequestFailedError.new({
147
+ cause: `fetch(): ${error.message || ''}`
148
+ });
113
149
  });
114
150
  };
115
- this.createTOTP = (args, headers) => {
116
- return this.fetch(this.url('CreateTOTP'), createHTTPRequest(args, headers)).then(res => {
151
+ this.createTOTP = (args, headers, signal) => {
152
+ return this.fetch(this.url('CreateTOTP'), createHTTPRequest(args, headers, signal)).then(res => {
117
153
  return buildResponse(res).then(_data => {
118
154
  return {
119
155
  uri: _data.uri
120
156
  };
121
157
  });
158
+ }, error => {
159
+ throw WebrpcRequestFailedError.new({
160
+ cause: `fetch(): ${error.message || ''}`
161
+ });
122
162
  });
123
163
  };
124
- this.commitTOTP = (args, headers) => {
125
- return this.fetch(this.url('CommitTOTP'), createHTTPRequest(args, headers)).then(res => {
164
+ this.commitTOTP = (args, headers, signal) => {
165
+ return this.fetch(this.url('CommitTOTP'), createHTTPRequest(args, headers, signal)).then(res => {
126
166
  return buildResponse(res).then(_data => {
127
167
  return {
128
168
  codes: _data.codes
129
169
  };
130
170
  });
171
+ }, error => {
172
+ throw WebrpcRequestFailedError.new({
173
+ cause: `fetch(): ${error.message || ''}`
174
+ });
131
175
  });
132
176
  };
133
- this.resetTOTP = (args, headers) => {
134
- return this.fetch(this.url('ResetTOTP'), createHTTPRequest(args, headers)).then(res => {
177
+ this.resetTOTP = (args, headers, signal) => {
178
+ return this.fetch(this.url('ResetTOTP'), createHTTPRequest(args, headers, signal)).then(res => {
135
179
  return buildResponse(res).then(_data => {
136
180
  return {};
137
181
  });
182
+ }, error => {
183
+ throw WebrpcRequestFailedError.new({
184
+ cause: `fetch(): ${error.message || ''}`
185
+ });
138
186
  });
139
187
  };
140
- this.reset2FA = (args, headers) => {
141
- return this.fetch(this.url('Reset2FA'), createHTTPRequest(args, headers)).then(res => {
188
+ this.reset2FA = (args, headers, signal) => {
189
+ return this.fetch(this.url('Reset2FA'), createHTTPRequest(args, headers, signal)).then(res => {
142
190
  return buildResponse(res).then(_data => {
143
191
  return {};
144
192
  });
193
+ }, error => {
194
+ throw WebrpcRequestFailedError.new({
195
+ cause: `fetch(): ${error.message || ''}`
196
+ });
145
197
  });
146
198
  };
147
- this.recoveryCodes = (args, headers) => {
148
- return this.fetch(this.url('RecoveryCodes'), createHTTPRequest(args, headers)).then(res => {
199
+ this.recoveryCodes = (args, headers, signal) => {
200
+ return this.fetch(this.url('RecoveryCodes'), createHTTPRequest(args, headers, signal)).then(res => {
149
201
  return buildResponse(res).then(_data => {
150
202
  return {
151
203
  codes: _data.codes
152
204
  };
153
205
  });
206
+ }, error => {
207
+ throw WebrpcRequestFailedError.new({
208
+ cause: `fetch(): ${error.message || ''}`
209
+ });
154
210
  });
155
211
  };
156
- this.resetRecoveryCodes = (args, headers) => {
157
- return this.fetch(this.url('ResetRecoveryCodes'), createHTTPRequest(args, headers)).then(res => {
212
+ this.resetRecoveryCodes = (args, headers, signal) => {
213
+ return this.fetch(this.url('ResetRecoveryCodes'), createHTTPRequest(args, headers, signal)).then(res => {
158
214
  return buildResponse(res).then(_data => {
159
215
  return {
160
216
  codes: _data.codes
161
217
  };
162
218
  });
219
+ }, error => {
220
+ throw WebrpcRequestFailedError.new({
221
+ cause: `fetch(): ${error.message || ''}`
222
+ });
163
223
  });
164
224
  };
165
225
  this.hostname = hostname;
@@ -169,13 +229,14 @@ class Guard {
169
229
  return this.hostname + this.path + name;
170
230
  }
171
231
  }
172
- const createHTTPRequest = (body = {}, headers = {}) => {
232
+ const createHTTPRequest = (body = {}, headers = {}, signal = null) => {
173
233
  return {
174
234
  method: 'POST',
175
235
  headers: _extends({}, headers, {
176
236
  'Content-Type': 'application/json'
177
237
  }),
178
- body: JSON.stringify(body || {})
238
+ body: JSON.stringify(body || {}),
239
+ signal
179
240
  };
180
241
  };
181
242
  const buildResponse = res => {
@@ -183,20 +244,192 @@ const buildResponse = res => {
183
244
  let data;
184
245
  try {
185
246
  data = JSON.parse(text);
186
- } catch (err) {
187
- throw {
188
- code: 'unknown',
189
- msg: `expecting JSON, got: ${text}`,
190
- status: res.status
191
- };
247
+ } catch (error) {
248
+ let message = '';
249
+ if (error instanceof Error) {
250
+ message = error.message;
251
+ }
252
+ throw WebrpcBadResponseError.new({
253
+ status: res.status,
254
+ cause: `JSON.parse(): ${message}: response text: ${text}`
255
+ });
192
256
  }
193
257
  if (!res.ok) {
194
- throw data; // webrpc error response
258
+ const code = typeof data.code === 'number' ? data.code : 0;
259
+ throw (webrpcErrorByCode[code] || WebrpcError).new(data);
195
260
  }
196
261
  return data;
197
262
  });
198
263
  };
199
264
 
265
+ //
266
+ // Errors
267
+ //
268
+
269
+ class WebrpcError extends Error {
270
+ constructor(name, code, message, status, cause) {
271
+ super(message);
272
+ this.name = void 0;
273
+ this.code = void 0;
274
+ this.message = void 0;
275
+ this.status = void 0;
276
+ this.cause = void 0;
277
+ /** @deprecated Use message instead of msg. Deprecated in webrpc v0.11.0. */
278
+ this.msg = void 0;
279
+ this.name = name || 'WebrpcError';
280
+ this.code = typeof code === 'number' ? code : 0;
281
+ this.message = message || `endpoint error ${this.code}`;
282
+ this.msg = this.message;
283
+ this.status = typeof status === 'number' ? status : 0;
284
+ this.cause = cause;
285
+ Object.setPrototypeOf(this, WebrpcError.prototype);
286
+ }
287
+ static new(payload) {
288
+ return new this(payload.error, payload.code, payload.message || payload.msg, payload.status, payload.cause);
289
+ }
290
+ }
291
+
292
+ // Webrpc errors
293
+
294
+ class WebrpcEndpointError extends WebrpcError {
295
+ constructor(name = 'WebrpcEndpoint', code = 0, message = 'endpoint error', status = 0, cause) {
296
+ super(name, code, message, status, cause);
297
+ Object.setPrototypeOf(this, WebrpcEndpointError.prototype);
298
+ }
299
+ }
300
+ class WebrpcRequestFailedError extends WebrpcError {
301
+ constructor(name = 'WebrpcRequestFailed', code = -1, message = 'request failed', status = 0, cause) {
302
+ super(name, code, message, status, cause);
303
+ Object.setPrototypeOf(this, WebrpcRequestFailedError.prototype);
304
+ }
305
+ }
306
+ class WebrpcBadRouteError extends WebrpcError {
307
+ constructor(name = 'WebrpcBadRoute', code = -2, message = 'bad route', status = 0, cause) {
308
+ super(name, code, message, status, cause);
309
+ Object.setPrototypeOf(this, WebrpcBadRouteError.prototype);
310
+ }
311
+ }
312
+ class WebrpcBadMethodError extends WebrpcError {
313
+ constructor(name = 'WebrpcBadMethod', code = -3, message = 'bad method', status = 0, cause) {
314
+ super(name, code, message, status, cause);
315
+ Object.setPrototypeOf(this, WebrpcBadMethodError.prototype);
316
+ }
317
+ }
318
+ class WebrpcBadRequestError extends WebrpcError {
319
+ constructor(name = 'WebrpcBadRequest', code = -4, message = 'bad request', status = 0, cause) {
320
+ super(name, code, message, status, cause);
321
+ Object.setPrototypeOf(this, WebrpcBadRequestError.prototype);
322
+ }
323
+ }
324
+ class WebrpcBadResponseError extends WebrpcError {
325
+ constructor(name = 'WebrpcBadResponse', code = -5, message = 'bad response', status = 0, cause) {
326
+ super(name, code, message, status, cause);
327
+ Object.setPrototypeOf(this, WebrpcBadResponseError.prototype);
328
+ }
329
+ }
330
+ class WebrpcServerPanicError extends WebrpcError {
331
+ constructor(name = 'WebrpcServerPanic', code = -6, message = 'server panic', status = 0, cause) {
332
+ super(name, code, message, status, cause);
333
+ Object.setPrototypeOf(this, WebrpcServerPanicError.prototype);
334
+ }
335
+ }
336
+ class WebrpcInternalErrorError extends WebrpcError {
337
+ constructor(name = 'WebrpcInternalError', code = -7, message = 'internal error', status = 0, cause) {
338
+ super(name, code, message, status, cause);
339
+ Object.setPrototypeOf(this, WebrpcInternalErrorError.prototype);
340
+ }
341
+ }
342
+ class WebrpcClientDisconnectedError extends WebrpcError {
343
+ constructor(name = 'WebrpcClientDisconnected', code = -8, message = 'client disconnected', status = 0, cause) {
344
+ super(name, code, message, status, cause);
345
+ Object.setPrototypeOf(this, WebrpcClientDisconnectedError.prototype);
346
+ }
347
+ }
348
+ class WebrpcStreamLostError extends WebrpcError {
349
+ constructor(name = 'WebrpcStreamLost', code = -9, message = 'stream lost', status = 0, cause) {
350
+ super(name, code, message, status, cause);
351
+ Object.setPrototypeOf(this, WebrpcStreamLostError.prototype);
352
+ }
353
+ }
354
+ class WebrpcStreamFinishedError extends WebrpcError {
355
+ constructor(name = 'WebrpcStreamFinished', code = -10, message = 'stream finished', status = 0, cause) {
356
+ super(name, code, message, status, cause);
357
+ Object.setPrototypeOf(this, WebrpcStreamFinishedError.prototype);
358
+ }
359
+ }
360
+
361
+ // Schema errors
362
+
363
+ class UnauthorizedError extends WebrpcError {
364
+ constructor(name = 'Unauthorized', code = 1000, message = 'Unauthorized access', status = 0, cause) {
365
+ super(name, code, message, status, cause);
366
+ Object.setPrototypeOf(this, UnauthorizedError.prototype);
367
+ }
368
+ }
369
+ class SessionExpiredError extends WebrpcError {
370
+ constructor(name = 'SessionExpired', code = 1002, message = 'Session expired', status = 0, cause) {
371
+ super(name, code, message, status, cause);
372
+ Object.setPrototypeOf(this, SessionExpiredError.prototype);
373
+ }
374
+ }
375
+ class AbortedError extends WebrpcError {
376
+ constructor(name = 'Aborted', code = 1005, message = 'Request aborted', status = 0, cause) {
377
+ super(name, code, message, status, cause);
378
+ Object.setPrototypeOf(this, AbortedError.prototype);
379
+ }
380
+ }
381
+ class InvalidArgumentError extends WebrpcError {
382
+ constructor(name = 'InvalidArgument', code = 2001, message = 'Invalid argument', status = 0, cause) {
383
+ super(name, code, message, status, cause);
384
+ Object.setPrototypeOf(this, InvalidArgumentError.prototype);
385
+ }
386
+ }
387
+ class UnavailableError extends WebrpcError {
388
+ constructor(name = 'Unavailable', code = 2002, message = 'Unavailable resource', status = 0, cause) {
389
+ super(name, code, message, status, cause);
390
+ Object.setPrototypeOf(this, UnavailableError.prototype);
391
+ }
392
+ }
393
+ class QueryFailedError extends WebrpcError {
394
+ constructor(name = 'QueryFailed', code = 2003, message = 'Query failed', status = 0, cause) {
395
+ super(name, code, message, status, cause);
396
+ Object.setPrototypeOf(this, QueryFailedError.prototype);
397
+ }
398
+ }
399
+ class ValidationFailedError extends WebrpcError {
400
+ constructor(name = 'ValidationFailed', code = 2004, message = 'Validation Failed', status = 0, cause) {
401
+ super(name, code, message, status, cause);
402
+ Object.setPrototypeOf(this, ValidationFailedError.prototype);
403
+ }
404
+ }
405
+ class NotFoundError extends WebrpcError {
406
+ constructor(name = 'NotFound', code = 3000, message = 'Resource not found', status = 0, cause) {
407
+ super(name, code, message, status, cause);
408
+ Object.setPrototypeOf(this, NotFoundError.prototype);
409
+ }
410
+ }
411
+ const webrpcErrorByCode = {
412
+ [0]: WebrpcEndpointError,
413
+ [-1]: WebrpcRequestFailedError,
414
+ [-2]: WebrpcBadRouteError,
415
+ [-3]: WebrpcBadMethodError,
416
+ [-4]: WebrpcBadRequestError,
417
+ [-5]: WebrpcBadResponseError,
418
+ [-6]: WebrpcServerPanicError,
419
+ [-7]: WebrpcInternalErrorError,
420
+ [-8]: WebrpcClientDisconnectedError,
421
+ [-9]: WebrpcStreamLostError,
422
+ [-10]: WebrpcStreamFinishedError,
423
+ [1000]: UnauthorizedError,
424
+ [1002]: SessionExpiredError,
425
+ [1005]: AbortedError,
426
+ [2001]: InvalidArgumentError,
427
+ [2002]: UnavailableError,
428
+ [2003]: QueryFailedError,
429
+ [2004]: ValidationFailedError,
430
+ [3000]: NotFoundError
431
+ };
432
+
200
433
  const fetch = typeof global === 'object' ? global.fetch : window.fetch;
201
434
  class GuardSigner {
202
435
  constructor(address, url, appendSuffix = false) {