1 | 'use strict';
|
2 |
|
3 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
4 |
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports.default = undefined;
|
9 |
|
10 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
11 |
|
12 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
13 |
|
14 | var _desc, _value, _class;
|
15 |
|
16 | var _semverCompare = require('semver-compare');
|
17 |
|
18 | var _semverCompare2 = _interopRequireDefault(_semverCompare);
|
19 |
|
20 | var _http = require('./http');
|
21 |
|
22 | var _highlevelChecks = require('../highlevel-checks');
|
23 |
|
24 | var check = _interopRequireWildcard(_highlevelChecks);
|
25 |
|
26 | var _debugDecorator = require('../debug-decorator');
|
27 |
|
28 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
29 |
|
30 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
31 |
|
32 | Function.prototype.$asyncbind = function $asyncbind(self, catcher) {
|
33 | 'use strict';
|
34 |
|
35 | if (!Function.prototype.$asyncbind) {
|
36 | Object.defineProperty(Function.prototype, '$asyncbind', {
|
37 | value: $asyncbind,
|
38 | enumerable: false,
|
39 | configurable: true,
|
40 | writable: true
|
41 | });
|
42 | }
|
43 |
|
44 | if (!$asyncbind.trampoline) {
|
45 | $asyncbind.trampoline = function trampoline(t, x, s, e) {
|
46 | return function b(q) {
|
47 | while (q) {
|
48 | if (q.then) return q.then(b, e);
|
49 |
|
50 | try {
|
51 | if (q.pop) {
|
52 | if (q.length) return q.pop() ? x.call(t) : q;
|
53 | q = s;
|
54 | } else q = q.call(t);
|
55 | } catch (r) {
|
56 | return e(r);
|
57 | }
|
58 | }
|
59 | };
|
60 | };
|
61 | }
|
62 |
|
63 | if (!$asyncbind.LazyThenable) {
|
64 | $asyncbind.LazyThenable = function () {
|
65 | function isThenable(obj) {
|
66 | return obj && obj instanceof Object && typeof obj.then === 'function';
|
67 | }
|
68 |
|
69 | function resolution(p, r, how) {
|
70 | try {
|
71 | var x = how ? how(r) : r;
|
72 | if (p === x) return p.reject(new TypeError('Promise resolution loop'));
|
73 |
|
74 | if (isThenable(x)) {
|
75 | x.then(function (y) {
|
76 | resolution(p, y);
|
77 | }, function (e) {
|
78 | p.reject(e);
|
79 | });
|
80 | } else {
|
81 | p.resolve(x);
|
82 | }
|
83 | } catch (ex) {
|
84 | p.reject(ex);
|
85 | }
|
86 | }
|
87 |
|
88 | function Chained() {}
|
89 |
|
90 | ;
|
91 | Chained.prototype = {
|
92 | resolve: _unchained,
|
93 | reject: _unchained,
|
94 | then: thenChain
|
95 | };
|
96 |
|
97 | function _unchained(v) {}
|
98 |
|
99 | function thenChain(res, rej) {
|
100 | this.resolve = res;
|
101 | this.reject = rej;
|
102 | }
|
103 |
|
104 | function then(res, rej) {
|
105 | var chain = new Chained();
|
106 |
|
107 | try {
|
108 | this._resolver(function (value) {
|
109 | return isThenable(value) ? value.then(res, rej) : resolution(chain, value, res);
|
110 | }, function (ex) {
|
111 | resolution(chain, ex, rej);
|
112 | });
|
113 | } catch (ex) {
|
114 | resolution(chain, ex, rej);
|
115 | }
|
116 |
|
117 | return chain;
|
118 | }
|
119 |
|
120 | function Thenable(resolver) {
|
121 | this._resolver = resolver;
|
122 | this.then = then;
|
123 | }
|
124 |
|
125 | ;
|
126 |
|
127 | Thenable.resolve = function (v) {
|
128 | return Thenable.isThenable(v) ? v : {
|
129 | then: function then(resolve) {
|
130 | return resolve(v);
|
131 | }
|
132 | };
|
133 | };
|
134 |
|
135 | Thenable.isThenable = isThenable;
|
136 | return Thenable;
|
137 | }();
|
138 |
|
139 | $asyncbind.EagerThenable = $asyncbind.Thenable = ($asyncbind.EagerThenableFactory = function (tick) {
|
140 | tick = tick || (typeof process === 'undefined' ? 'undefined' : _typeof(process)) === 'object' && process.nextTick || typeof setImmediate === 'function' && setImmediate || function (f) {
|
141 | setTimeout(f, 0);
|
142 | };
|
143 |
|
144 | var soon = function () {
|
145 | var fq = [],
|
146 | fqStart = 0,
|
147 | bufferSize = 1024;
|
148 |
|
149 | function callQueue() {
|
150 | while (fq.length - fqStart) {
|
151 | fq[fqStart]();
|
152 | fq[fqStart++] = undefined;
|
153 |
|
154 | if (fqStart === bufferSize) {
|
155 | fq.splice(0, bufferSize);
|
156 | fqStart = 0;
|
157 | }
|
158 | }
|
159 | }
|
160 |
|
161 | return function (fn) {
|
162 | fq.push(fn);
|
163 | if (fq.length - fqStart === 1) tick(callQueue);
|
164 | };
|
165 | }();
|
166 |
|
167 | function Zousan(func) {
|
168 | if (func) {
|
169 | var me = this;
|
170 | func(function (arg) {
|
171 | me.resolve(arg);
|
172 | }, function (arg) {
|
173 | me.reject(arg);
|
174 | });
|
175 | }
|
176 | }
|
177 |
|
178 | Zousan.prototype = {
|
179 | resolve: function resolve(value) {
|
180 | if (this.state !== undefined) return;
|
181 | if (value === this) return this.reject(new TypeError('Attempt to resolve promise with self'));
|
182 | var me = this;
|
183 |
|
184 | if (value && (typeof value === 'function' || (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object')) {
|
185 | try {
|
186 | var first = 0;
|
187 | var then = value.then;
|
188 |
|
189 | if (typeof then === 'function') {
|
190 | then.call(value, function (ra) {
|
191 | if (!first++) {
|
192 | me.resolve(ra);
|
193 | }
|
194 | }, function (rr) {
|
195 | if (!first++) {
|
196 | me.reject(rr);
|
197 | }
|
198 | });
|
199 | return;
|
200 | }
|
201 | } catch (e) {
|
202 | if (!first) this.reject(e);
|
203 | return;
|
204 | }
|
205 | }
|
206 |
|
207 | this.state = STATE_FULFILLED;
|
208 | this.v = value;
|
209 | if (me.c) soon(function () {
|
210 | for (var n = 0, l = me.c.length; n < l; n++) {
|
211 | STATE_FULFILLED(me.c[n], value);
|
212 | }
|
213 | });
|
214 | },
|
215 | reject: function reject(reason) {
|
216 | if (this.state !== undefined) return;
|
217 | this.state = STATE_REJECTED;
|
218 | this.v = reason;
|
219 | var clients = this.c;
|
220 | if (clients) soon(function () {
|
221 | for (var n = 0, l = clients.length; n < l; n++) {
|
222 | STATE_REJECTED(clients[n], reason);
|
223 | }
|
224 | });
|
225 | },
|
226 | then: function then(onF, onR) {
|
227 | var p = new Zousan();
|
228 | var client = {
|
229 | y: onF,
|
230 | n: onR,
|
231 | p: p
|
232 | };
|
233 |
|
234 | if (this.state === undefined) {
|
235 | if (this.c) this.c.push(client);else this.c = [client];
|
236 | } else {
|
237 | var s = this.state,
|
238 | a = this.v;
|
239 | soon(function () {
|
240 | s(client, a);
|
241 | });
|
242 | }
|
243 |
|
244 | return p;
|
245 | }
|
246 | };
|
247 |
|
248 | function STATE_FULFILLED(c, arg) {
|
249 | if (typeof c.y === 'function') {
|
250 | try {
|
251 | var yret = c.y.call(undefined, arg);
|
252 | c.p.resolve(yret);
|
253 | } catch (err) {
|
254 | c.p.reject(err);
|
255 | }
|
256 | } else c.p.resolve(arg);
|
257 | }
|
258 |
|
259 | function STATE_REJECTED(c, reason) {
|
260 | if (typeof c.n === 'function') {
|
261 | try {
|
262 | var yret = c.n.call(undefined, reason);
|
263 | c.p.resolve(yret);
|
264 | } catch (err) {
|
265 | c.p.reject(err);
|
266 | }
|
267 | } else c.p.reject(reason);
|
268 | }
|
269 |
|
270 | Zousan.resolve = function (val) {
|
271 | if (val && val instanceof Zousan) return val;
|
272 | var z = new Zousan();
|
273 | z.resolve(val);
|
274 | return z;
|
275 | };
|
276 |
|
277 | Zousan.reject = function (err) {
|
278 | if (err && err instanceof Zousan) return err;
|
279 | var z = new Zousan();
|
280 | z.reject(err);
|
281 | return z;
|
282 | };
|
283 |
|
284 | Zousan.version = '2.3.2-nodent';
|
285 | return Zousan;
|
286 | })();
|
287 | }
|
288 |
|
289 | var resolver = this;
|
290 |
|
291 | switch (catcher) {
|
292 | case true:
|
293 | return new $asyncbind.Thenable(boundThen);
|
294 |
|
295 | case 0:
|
296 | return new $asyncbind.LazyThenable(boundThen);
|
297 |
|
298 | case undefined:
|
299 | boundThen.then = boundThen;
|
300 | return boundThen;
|
301 |
|
302 | default:
|
303 | return function () {
|
304 | try {
|
305 | return resolver.apply(self, arguments);
|
306 | } catch (ex) {
|
307 | return catcher(ex);
|
308 | }
|
309 | };
|
310 | }
|
311 |
|
312 | function boundThen() {
|
313 | return resolver.apply(self, arguments);
|
314 | }
|
315 | };
|
316 |
|
317 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
318 |
|
319 | function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
|
320 | var desc = {};
|
321 | Object['ke' + 'ys'](descriptor).forEach(function (key) {
|
322 | desc[key] = descriptor[key];
|
323 | });
|
324 | desc.enumerable = !!desc.enumerable;
|
325 | desc.configurable = !!desc.configurable;
|
326 |
|
327 | if ('value' in desc || desc.initializer) {
|
328 | desc.writable = true;
|
329 | }
|
330 |
|
331 | desc = decorators.slice().reverse().reduce(function (desc, decorator) {
|
332 | return decorator(target, property, desc) || desc;
|
333 | }, desc);
|
334 |
|
335 | if (context && desc.initializer !== void 0) {
|
336 | desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
|
337 | desc.initializer = undefined;
|
338 | }
|
339 |
|
340 | if (desc.initializer === void 0) {
|
341 | Object['define' + 'Property'](target, property, desc);
|
342 | desc = null;
|
343 | }
|
344 |
|
345 | return desc;
|
346 | }
|
347 |
|
348 | var DEFAULT_URL = 'https://localback.net:21324';
|
349 | var DEFAULT_VERSION_URL = 'https://wallet.mytrezor.com/data/bridge/latest.txt';
|
350 |
|
351 | var BridgeTransport = (_class = function () {
|
352 | function BridgeTransport(url, newestVersionUrl) {
|
353 | _classCallCheck(this, BridgeTransport);
|
354 |
|
355 | this.name = 'BridgeTransport';
|
356 | this.version = '';
|
357 | this.configured = false;
|
358 | this.debug = false;
|
359 |
|
360 | this.url = url == null ? DEFAULT_URL : url;
|
361 | this.newestVersionUrl = newestVersionUrl == null ? DEFAULT_VERSION_URL : newestVersionUrl;
|
362 | }
|
363 |
|
364 | _createClass(BridgeTransport, [{
|
365 | key: '_post',
|
366 | value: function _post(options) {
|
367 | return new Promise(function ($return, $error) {
|
368 | return (0, _http.request)(_extends({}, options, { method: 'POST', url: this.url + options.url })).then($return, $error);
|
369 | }.$asyncbind(this));
|
370 | }
|
371 | }, {
|
372 | key: '_get',
|
373 | value: function _get(options) {
|
374 | return new Promise(function ($return, $error) {
|
375 | return (0, _http.request)(_extends({}, options, { method: 'GET', url: this.url + options.url })).then($return, $error);
|
376 | }.$asyncbind(this));
|
377 | }
|
378 | }, {
|
379 | key: 'init',
|
380 | value: function init(debug) {
|
381 | return new Promise(function ($return, $error) {
|
382 | this.debug = !!debug;
|
383 | return this._silentInit().then(function ($await_3) {
|
384 | return $return();
|
385 | }.$asyncbind(this, $error), $error);
|
386 | }.$asyncbind(this));
|
387 | }
|
388 | }, {
|
389 | key: '_silentInit',
|
390 | value: function _silentInit() {
|
391 | return new Promise(function ($return, $error) {
|
392 | var infoS, info, newVersion;
|
393 | return (0, _http.request)({
|
394 | url: this.url,
|
395 | method: 'GET'
|
396 | }).then(function ($await_4) {
|
397 | infoS = $await_4;
|
398 | info = check.info(infoS);
|
399 | this.version = info.version;
|
400 | this.configured = info.configured;
|
401 | return (0, _http.request)({
|
402 | url: this.newestVersionUrl + '?' + Date.now(),
|
403 | method: 'GET'
|
404 | }).then(function ($await_5) {
|
405 | newVersion = check.version($await_5);
|
406 | this.isOutdated = (0, _semverCompare2.default)(this.version, newVersion) < 0;
|
407 | return $return();
|
408 | }.$asyncbind(this, $error), $error);
|
409 | }.$asyncbind(this, $error), $error);
|
410 | }.$asyncbind(this));
|
411 | }
|
412 | }, {
|
413 | key: 'configure',
|
414 | value: function configure(config) {
|
415 | return new Promise(function ($return, $error) {
|
416 | return this._post({
|
417 | url: '/configure',
|
418 | body: config
|
419 | }).then(function ($await_6) {
|
420 | return this._silentInit().then(function ($await_7) {
|
421 | return $return();
|
422 | }.$asyncbind(this, $error), $error);
|
423 | }.$asyncbind(this, $error), $error);
|
424 | }.$asyncbind(this));
|
425 | }
|
426 | }, {
|
427 | key: 'listen',
|
428 | value: function listen(old) {
|
429 | return new Promise(function ($return, $error) {
|
430 | var devicesS, devices;
|
431 | return (old == null ? this._get({ url: '/listen' }) : this._post({
|
432 | url: '/listen',
|
433 | body: old.map(function (device) {
|
434 | return _extends({}, device, {
|
435 |
|
436 | product: 1,
|
437 | vendor: 21324
|
438 | });
|
439 | })
|
440 | })).then(function ($await_8) {
|
441 | devicesS = $await_8;
|
442 | devices = check.devices(devicesS);
|
443 | return $return(devices);
|
444 | }.$asyncbind(this, $error), $error);
|
445 | }.$asyncbind(this));
|
446 | }
|
447 | }, {
|
448 | key: 'enumerate',
|
449 | value: function enumerate() {
|
450 | return new Promise(function ($return, $error) {
|
451 | var devicesS, devices;
|
452 | return this._get({ url: '/enumerate' }).then(function ($await_9) {
|
453 | devicesS = $await_9;
|
454 | devices = check.devices(devicesS);
|
455 | return $return(devices);
|
456 | }.$asyncbind(this, $error), $error);
|
457 | }.$asyncbind(this));
|
458 | }
|
459 | }, {
|
460 | key: '_acquireMixed',
|
461 | value: function _acquireMixed(input) {
|
462 | return new Promise(function ($return, $error) {
|
463 | var checkPrevious = input.checkPrevious && (0, _semverCompare2.default)(this.version, '1.1.3') >= 0;
|
464 | if (checkPrevious) {
|
465 | var previousStr = input.previous == null ? 'null' : input.previous;
|
466 | var _url = '/acquire/' + input.path + '/' + previousStr;
|
467 | return $return(this._post({ url: _url }));
|
468 | } else {
|
469 | return $return(this._post({ url: '/acquire/' + input.path }));
|
470 | }
|
471 | return $return();
|
472 | }.$asyncbind(this));
|
473 | }
|
474 | }, {
|
475 | key: 'acquire',
|
476 | value: function acquire(input) {
|
477 | return new Promise(function ($return, $error) {
|
478 | var acquireS;
|
479 | return this._acquireMixed(input).then(function ($await_10) {
|
480 | acquireS = $await_10;
|
481 | return $return(check.acquire(acquireS));
|
482 | }.$asyncbind(this, $error), $error);
|
483 | }.$asyncbind(this));
|
484 | }
|
485 | }, {
|
486 | key: 'release',
|
487 | value: function release(session) {
|
488 | return new Promise(function ($return, $error) {
|
489 | return this._post({ url: '/release/' + session }).then(function ($await_11) {
|
490 | return $return();
|
491 | }.$asyncbind(this, $error), $error);
|
492 | }.$asyncbind(this));
|
493 | }
|
494 | }, {
|
495 | key: 'call',
|
496 | value: function call(session, name, data) {
|
497 | return new Promise(function ($return, $error) {
|
498 | var res;
|
499 | return this._post({
|
500 | url: '/call/' + session,
|
501 | body: {
|
502 | type: name,
|
503 | message: data
|
504 | }
|
505 | }).then(function ($await_12) {
|
506 | res = $await_12;
|
507 | return $return(check.call(res));
|
508 | }.$asyncbind(this, $error), $error);
|
509 | }.$asyncbind(this));
|
510 | }
|
511 | }], [{
|
512 | key: 'setFetch',
|
513 | value: function setFetch(fetch) {
|
514 | (0, _http.setFetch)(fetch);
|
515 | }
|
516 | }]);
|
517 |
|
518 | return BridgeTransport;
|
519 | }(), (_applyDecoratedDescriptor(_class.prototype, 'init', [_debugDecorator.debugInOut], Object.getOwnPropertyDescriptor(_class.prototype, 'init'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'configure', [_debugDecorator.debugInOut], Object.getOwnPropertyDescriptor(_class.prototype, 'configure'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'listen', [_debugDecorator.debugInOut], Object.getOwnPropertyDescriptor(_class.prototype, 'listen'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'enumerate', [_debugDecorator.debugInOut], Object.getOwnPropertyDescriptor(_class.prototype, 'enumerate'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'acquire', [_debugDecorator.debugInOut], Object.getOwnPropertyDescriptor(_class.prototype, 'acquire'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'release', [_debugDecorator.debugInOut], Object.getOwnPropertyDescriptor(_class.prototype, 'release'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'call', [_debugDecorator.debugInOut], Object.getOwnPropertyDescriptor(_class.prototype, 'call'), _class.prototype)), _class);
|
520 | exports.default = BridgeTransport;
|
521 | module.exports = exports['default']; |
\ | No newline at end of file |