phantasma-sdk-ts 0.5.2 → 0.6.0

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.
@@ -10,6 +10,8 @@ class PhantasmaLink {
10
10
  //Construct The Link
11
11
  constructor(dappID, logging = true) {
12
12
  this.lastSocketErrorMessage = null;
13
+ this.socketTransport = null;
14
+ this.socketOpen = false;
13
15
  this.requestID = 0;
14
16
  //Message Logging
15
17
  this.onMessage = (msg) => {
@@ -36,6 +38,19 @@ class PhantasmaLink {
36
38
  this.onLogin = function (succ) { }; //Does Nothing for Now
37
39
  this.onError = function (message) { }; //Does Nothing for Now
38
40
  }
41
+ // Preserve wallet-side failure details whenever the transport provides them.
42
+ describeFailure(result, fallback) {
43
+ if (typeof result === 'string' && result.length > 0) {
44
+ return result;
45
+ }
46
+ if (result && typeof result.error === 'string' && result.error.length > 0) {
47
+ return result.error;
48
+ }
49
+ if (result && typeof result.message === 'string' && result.message.length > 0) {
50
+ return result.message;
51
+ }
52
+ return fallback;
53
+ }
39
54
  //Connect To Wallet
40
55
  login(onLoginCallback, onErrorCallback, version = 4, platform = 'phantasma', providerHint = 'poltergeist') {
41
56
  this.providerHint = providerHint;
@@ -363,12 +378,19 @@ class PhantasmaLink {
363
378
  if (this.socket) {
364
379
  this.socket.close();
365
380
  }
381
+ const useInjectedSocket =
382
+ // @ts-ignore
383
+ !!window.PhantasmaLinkSocket && this.providerHint !== 'poltergeist';
384
+ this.socketTransport = useInjectedSocket ? 'injected' : 'websocket';
385
+ this.socketOpen = false;
386
+ this.onMessage(useInjectedSocket
387
+ ? 'Using injected PhantasmaLinkSocket transport'
388
+ : `Using raw WebSocket transport: ${path}`);
366
389
  //@ts-ignore
367
- this.socket = //@ts-ignore
368
- window.PhantasmaLinkSocket && this.providerHint !== 'poltergeist'
369
- ? // @ts-ignore
370
- new PhantasmaLinkSocket()
371
- : new WebSocket(path);
390
+ this.socket = useInjectedSocket
391
+ ? // @ts-ignore
392
+ new PhantasmaLinkSocket()
393
+ : new WebSocket(path);
372
394
  this.requestCallback = null;
373
395
  this.lastSocketErrorMessage = null;
374
396
  this.token = null;
@@ -379,6 +401,7 @@ class PhantasmaLink {
379
401
  let that = this;
380
402
  //Once Socket Opened
381
403
  this.socket.onopen = function (e) {
404
+ that.socketOpen = true;
382
405
  that.onMessage('Connection established, authorizing dapp in wallet...');
383
406
  if (isResume) {
384
407
  that.fetchWallet(undefined, undefined);
@@ -405,7 +428,7 @@ class PhantasmaLink {
405
428
  });
406
429
  }
407
430
  else {
408
- that.onError('Authorization failed...');
431
+ that.onError(that.describeFailure(result, 'Authorization failed...'));
409
432
  that.disconnect('Auth Failure');
410
433
  }
411
434
  });
@@ -428,8 +451,9 @@ class PhantasmaLink {
428
451
  that.onError('Could not obtain account info... Make sure you have an account currently logged in');
429
452
  that.disconnect(true);
430
453
  break;
431
- case 'A previouus request is still pending' || 'A previous request is still pending':
432
- that.onError('You have a pending action in your wallet');
454
+ case 'A previouus request is still pending':
455
+ case 'A previous request is still pending':
456
+ that.onError(that.describeFailure(obj, 'You have a pending action in your wallet'));
433
457
  break;
434
458
  case 'user rejected':
435
459
  that.onError('Transaction cancelled by user in ' + that.wallet);
@@ -455,6 +479,7 @@ class PhantasmaLink {
455
479
  };
456
480
  //Cleanup After Socket Closes
457
481
  this.socket.onclose = function (event) {
482
+ that.socketOpen = false;
458
483
  const reason = event.reason && event.reason.length > 0
459
484
  ? event.reason
460
485
  : that.lastSocketErrorMessage || (event.wasClean ? 'Wallet connection closed' : 'Connection terminated unexpectedly');
@@ -505,8 +530,11 @@ class PhantasmaLink {
505
530
  this.requestCallback = callback;
506
531
  const socket = this.socket;
507
532
  const openState = typeof WebSocket !== 'undefined' && typeof WebSocket.OPEN === 'number' ? WebSocket.OPEN : 1;
508
- const isSocketOpen = socket && socket.readyState === openState;
509
- if (!socket || !isSocketOpen) {
533
+ const hasSend = socket && typeof socket.send === 'function';
534
+ const hasReadyState = socket && typeof socket.readyState === 'number';
535
+ const isSocketOpen = hasSend &&
536
+ (hasReadyState ? socket.readyState === openState : this.socketOpen);
537
+ if (!socket || !hasSend || !isSocketOpen) {
510
538
  this.handleSocketFailure('Wallet connection is closed. Please reconnect to your wallet.');
511
539
  return;
512
540
  }
@@ -540,6 +568,7 @@ class PhantasmaLink {
540
568
  //Disconnect The Wallet Connection Socket
541
569
  disconnect(triggered) {
542
570
  this.onMessage('Disconnecting Phantasma Link: ' + triggered);
571
+ this.socketOpen = false;
543
572
  if (this.socket)
544
573
  this.socket.close();
545
574
  }
@@ -7,6 +7,8 @@ export class PhantasmaLink {
7
7
  //Construct The Link
8
8
  constructor(dappID, logging = true) {
9
9
  this.lastSocketErrorMessage = null;
10
+ this.socketTransport = null;
11
+ this.socketOpen = false;
10
12
  this.requestID = 0;
11
13
  //Message Logging
12
14
  this.onMessage = (msg) => {
@@ -33,6 +35,19 @@ export class PhantasmaLink {
33
35
  this.onLogin = function (succ) { }; //Does Nothing for Now
34
36
  this.onError = function (message) { }; //Does Nothing for Now
35
37
  }
38
+ // Preserve wallet-side failure details whenever the transport provides them.
39
+ describeFailure(result, fallback) {
40
+ if (typeof result === 'string' && result.length > 0) {
41
+ return result;
42
+ }
43
+ if (result && typeof result.error === 'string' && result.error.length > 0) {
44
+ return result.error;
45
+ }
46
+ if (result && typeof result.message === 'string' && result.message.length > 0) {
47
+ return result.message;
48
+ }
49
+ return fallback;
50
+ }
36
51
  //Connect To Wallet
37
52
  login(onLoginCallback, onErrorCallback, version = 4, platform = 'phantasma', providerHint = 'poltergeist') {
38
53
  this.providerHint = providerHint;
@@ -360,12 +375,19 @@ export class PhantasmaLink {
360
375
  if (this.socket) {
361
376
  this.socket.close();
362
377
  }
378
+ const useInjectedSocket =
379
+ // @ts-ignore
380
+ !!window.PhantasmaLinkSocket && this.providerHint !== 'poltergeist';
381
+ this.socketTransport = useInjectedSocket ? 'injected' : 'websocket';
382
+ this.socketOpen = false;
383
+ this.onMessage(useInjectedSocket
384
+ ? 'Using injected PhantasmaLinkSocket transport'
385
+ : `Using raw WebSocket transport: ${path}`);
363
386
  //@ts-ignore
364
- this.socket = //@ts-ignore
365
- window.PhantasmaLinkSocket && this.providerHint !== 'poltergeist'
366
- ? // @ts-ignore
367
- new PhantasmaLinkSocket()
368
- : new WebSocket(path);
387
+ this.socket = useInjectedSocket
388
+ ? // @ts-ignore
389
+ new PhantasmaLinkSocket()
390
+ : new WebSocket(path);
369
391
  this.requestCallback = null;
370
392
  this.lastSocketErrorMessage = null;
371
393
  this.token = null;
@@ -376,6 +398,7 @@ export class PhantasmaLink {
376
398
  let that = this;
377
399
  //Once Socket Opened
378
400
  this.socket.onopen = function (e) {
401
+ that.socketOpen = true;
379
402
  that.onMessage('Connection established, authorizing dapp in wallet...');
380
403
  if (isResume) {
381
404
  that.fetchWallet(undefined, undefined);
@@ -402,7 +425,7 @@ export class PhantasmaLink {
402
425
  });
403
426
  }
404
427
  else {
405
- that.onError('Authorization failed...');
428
+ that.onError(that.describeFailure(result, 'Authorization failed...'));
406
429
  that.disconnect('Auth Failure');
407
430
  }
408
431
  });
@@ -425,8 +448,9 @@ export class PhantasmaLink {
425
448
  that.onError('Could not obtain account info... Make sure you have an account currently logged in');
426
449
  that.disconnect(true);
427
450
  break;
428
- case 'A previouus request is still pending' || 'A previous request is still pending':
429
- that.onError('You have a pending action in your wallet');
451
+ case 'A previouus request is still pending':
452
+ case 'A previous request is still pending':
453
+ that.onError(that.describeFailure(obj, 'You have a pending action in your wallet'));
430
454
  break;
431
455
  case 'user rejected':
432
456
  that.onError('Transaction cancelled by user in ' + that.wallet);
@@ -452,6 +476,7 @@ export class PhantasmaLink {
452
476
  };
453
477
  //Cleanup After Socket Closes
454
478
  this.socket.onclose = function (event) {
479
+ that.socketOpen = false;
455
480
  const reason = event.reason && event.reason.length > 0
456
481
  ? event.reason
457
482
  : that.lastSocketErrorMessage || (event.wasClean ? 'Wallet connection closed' : 'Connection terminated unexpectedly');
@@ -502,8 +527,11 @@ export class PhantasmaLink {
502
527
  this.requestCallback = callback;
503
528
  const socket = this.socket;
504
529
  const openState = typeof WebSocket !== 'undefined' && typeof WebSocket.OPEN === 'number' ? WebSocket.OPEN : 1;
505
- const isSocketOpen = socket && socket.readyState === openState;
506
- if (!socket || !isSocketOpen) {
530
+ const hasSend = socket && typeof socket.send === 'function';
531
+ const hasReadyState = socket && typeof socket.readyState === 'number';
532
+ const isSocketOpen = hasSend &&
533
+ (hasReadyState ? socket.readyState === openState : this.socketOpen);
534
+ if (!socket || !hasSend || !isSocketOpen) {
507
535
  this.handleSocketFailure('Wallet connection is closed. Please reconnect to your wallet.');
508
536
  return;
509
537
  }
@@ -537,6 +565,7 @@ export class PhantasmaLink {
537
565
  //Disconnect The Wallet Connection Socket
538
566
  disconnect(triggered) {
539
567
  this.onMessage('Disconnecting Phantasma Link: ' + triggered);
568
+ this.socketOpen = false;
540
569
  if (this.socket)
541
570
  this.socket.close();
542
571
  }
@@ -10,6 +10,8 @@ export declare class PhantasmaLink {
10
10
  socket: any;
11
11
  requestCallback: any;
12
12
  private lastSocketErrorMessage;
13
+ socketTransport: 'websocket' | 'injected' | null;
14
+ socketOpen: boolean;
13
15
  token: any;
14
16
  requestID: number;
15
17
  account: IAccount;
@@ -21,6 +23,7 @@ export declare class PhantasmaLink {
21
23
  platform: string;
22
24
  constructor(dappID: any, logging?: boolean);
23
25
  onMessage: (msg: string) => void;
26
+ private describeFailure;
24
27
  login(onLoginCallback: (success: boolean) => void, onErrorCallback: (message: string) => void, version?: number, platform?: string, providerHint?: string): void;
25
28
  invokeScript(script: string, callback: (message: string) => void): void;
26
29
  signTx(script: any, payload: string | null, callback: (arg0: string) => void, onErrorCallback: () => void, pow?: ProofOfWork, signature?: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"phantasmaLink.d.ts","sourceRoot":"","sources":["../../../../src/core/link/phantasmaLink.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phantasmaLink.d.ts","sourceRoot":"","sources":["../../../../src/core/link/phantasmaLink.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phantasma-sdk-ts",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "description": "Typescript SDK for interacting with the Phantasma Chain",
5
5
  "author": "Phantasma Team",
6
6
  "main": "dist/cjs/index.js",