@shapeshiftoss/unchained-client 5.4.0 → 6.1.1

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.
Files changed (137) hide show
  1. package/README.md +32 -4
  2. package/dist/bitcoin/index.d.ts +3 -2
  3. package/dist/bitcoin/index.d.ts.map +1 -1
  4. package/dist/bitcoin/index.js +5 -14
  5. package/dist/bitcoin/index.js.map +1 -1
  6. package/dist/bitcoin/parser/index.d.ts +13 -0
  7. package/dist/bitcoin/parser/index.d.ts.map +1 -0
  8. package/dist/bitcoin/parser/index.js +74 -0
  9. package/dist/bitcoin/parser/index.js.map +1 -0
  10. package/dist/bitcoin/parser/utils.d.ts +4 -0
  11. package/dist/bitcoin/parser/utils.d.ts.map +1 -0
  12. package/dist/bitcoin/parser/utils.js +16 -0
  13. package/dist/bitcoin/parser/utils.js.map +1 -0
  14. package/dist/bitcoin/types.d.ts +2 -0
  15. package/dist/bitcoin/types.d.ts.map +1 -0
  16. package/dist/bitcoin/types.js +3 -0
  17. package/dist/bitcoin/types.js.map +1 -0
  18. package/dist/cosmos/index.d.ts +2 -1
  19. package/dist/cosmos/index.d.ts.map +1 -1
  20. package/dist/cosmos/index.js +4 -13
  21. package/dist/cosmos/index.js.map +1 -1
  22. package/dist/cosmos/parser/index.d.ts +13 -0
  23. package/dist/cosmos/parser/index.d.ts.map +1 -0
  24. package/dist/cosmos/parser/index.js +67 -0
  25. package/dist/cosmos/parser/index.js.map +1 -0
  26. package/dist/ethereum/index.d.ts +3 -2
  27. package/dist/ethereum/index.d.ts.map +1 -1
  28. package/dist/ethereum/index.js +5 -14
  29. package/dist/ethereum/index.js.map +1 -1
  30. package/dist/ethereum/parser/abi/erc20.d.ts +4 -0
  31. package/dist/ethereum/parser/abi/erc20.d.ts.map +1 -0
  32. package/dist/ethereum/parser/abi/erc20.js +292 -0
  33. package/dist/ethereum/parser/abi/erc20.js.map +1 -0
  34. package/dist/ethereum/parser/abi/multiSig.d.ts +4 -0
  35. package/dist/ethereum/parser/abi/multiSig.d.ts.map +1 -0
  36. package/dist/ethereum/parser/abi/multiSig.js +369 -0
  37. package/dist/ethereum/parser/abi/multiSig.js.map +1 -0
  38. package/dist/ethereum/parser/abi/shapeShiftRouter.d.ts +4 -0
  39. package/dist/ethereum/parser/abi/shapeShiftRouter.d.ts.map +1 -0
  40. package/dist/ethereum/parser/abi/shapeShiftRouter.js +495 -0
  41. package/dist/ethereum/parser/abi/shapeShiftRouter.js.map +1 -0
  42. package/dist/ethereum/parser/abi/thor.d.ts +4 -0
  43. package/dist/ethereum/parser/abi/thor.d.ts.map +1 -0
  44. package/dist/ethereum/parser/abi/thor.js +155 -0
  45. package/dist/ethereum/parser/abi/thor.js.map +1 -0
  46. package/dist/ethereum/parser/abi/uniV2.d.ts +4 -0
  47. package/dist/ethereum/parser/abi/uniV2.d.ts.map +1 -0
  48. package/dist/ethereum/parser/abi/uniV2.js +344 -0
  49. package/dist/ethereum/parser/abi/uniV2.js.map +1 -0
  50. package/dist/ethereum/parser/abi/yearnVault.d.ts +4 -0
  51. package/dist/ethereum/parser/abi/yearnVault.d.ts.map +1 -0
  52. package/dist/ethereum/parser/abi/yearnVault.js +648 -0
  53. package/dist/ethereum/parser/abi/yearnVault.js.map +1 -0
  54. package/dist/ethereum/parser/constants.d.ts +6 -0
  55. package/dist/ethereum/parser/constants.d.ts.map +1 -0
  56. package/dist/ethereum/parser/constants.js +9 -0
  57. package/dist/ethereum/parser/constants.js.map +1 -0
  58. package/dist/ethereum/parser/index.d.ts +21 -0
  59. package/dist/ethereum/parser/index.d.ts.map +1 -0
  60. package/dist/ethereum/parser/index.js +185 -0
  61. package/dist/ethereum/parser/index.js.map +1 -0
  62. package/dist/ethereum/parser/thor.d.ts +18 -0
  63. package/dist/ethereum/parser/thor.d.ts.map +1 -0
  64. package/dist/ethereum/parser/thor.js +81 -0
  65. package/dist/ethereum/parser/thor.js.map +1 -0
  66. package/dist/ethereum/parser/uniV2.d.ts +21 -0
  67. package/dist/ethereum/parser/uniV2.d.ts.map +1 -0
  68. package/dist/ethereum/parser/uniV2.js +130 -0
  69. package/dist/ethereum/parser/uniV2.js.map +1 -0
  70. package/dist/ethereum/parser/utils.d.ts +9 -0
  71. package/dist/ethereum/parser/utils.d.ts.map +1 -0
  72. package/dist/ethereum/parser/utils.js +47 -0
  73. package/dist/ethereum/parser/utils.js.map +1 -0
  74. package/dist/ethereum/parser/yearn.d.ts +24 -0
  75. package/dist/ethereum/parser/yearn.d.ts.map +1 -0
  76. package/dist/ethereum/parser/yearn.js +84 -0
  77. package/dist/ethereum/parser/yearn.js.map +1 -0
  78. package/dist/ethereum/parser/zrx.d.ts +7 -0
  79. package/dist/ethereum/parser/zrx.d.ts.map +1 -0
  80. package/dist/ethereum/parser/zrx.js +39 -0
  81. package/dist/ethereum/parser/zrx.js.map +1 -0
  82. package/dist/ethereum/types.d.ts +31 -0
  83. package/dist/ethereum/types.d.ts.map +1 -0
  84. package/dist/ethereum/types.js +3 -0
  85. package/dist/ethereum/types.js.map +1 -0
  86. package/dist/generated/bitcoin/api.d.ts +15 -66
  87. package/dist/generated/bitcoin/api.d.ts.map +1 -1
  88. package/dist/generated/bitcoin/api.js +12 -18
  89. package/dist/generated/bitcoin/api.js.map +1 -1
  90. package/dist/generated/bitcoin/base.d.ts +1 -1
  91. package/dist/generated/bitcoin/base.js +1 -1
  92. package/dist/generated/bitcoin/common.d.ts +1 -1
  93. package/dist/generated/bitcoin/common.js +1 -1
  94. package/dist/generated/bitcoin/configuration.d.ts +1 -1
  95. package/dist/generated/bitcoin/configuration.js +1 -1
  96. package/dist/generated/bitcoin/index.d.ts +1 -1
  97. package/dist/generated/bitcoin/index.js +1 -1
  98. package/dist/generated/cosmos/api.d.ts +63 -8
  99. package/dist/generated/cosmos/api.d.ts.map +1 -1
  100. package/dist/generated/cosmos/api.js +61 -3
  101. package/dist/generated/cosmos/api.js.map +1 -1
  102. package/dist/generated/ethereum/api.d.ts +182 -81
  103. package/dist/generated/ethereum/api.d.ts.map +1 -1
  104. package/dist/generated/ethereum/api.js +12 -18
  105. package/dist/generated/ethereum/api.js.map +1 -1
  106. package/dist/generated/ethereum/base.d.ts +1 -1
  107. package/dist/generated/ethereum/base.js +1 -1
  108. package/dist/generated/ethereum/common.d.ts +1 -1
  109. package/dist/generated/ethereum/common.js +1 -1
  110. package/dist/generated/ethereum/configuration.d.ts +1 -1
  111. package/dist/generated/ethereum/configuration.js +1 -1
  112. package/dist/generated/ethereum/index.d.ts +1 -1
  113. package/dist/generated/ethereum/index.js +1 -1
  114. package/dist/index.d.ts +2 -0
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +6 -1
  117. package/dist/index.js.map +1 -1
  118. package/dist/tsconfig.tsbuildinfo +3000 -327
  119. package/dist/types.d.ts +74 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +26 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/utils.d.ts +4 -0
  124. package/dist/utils.d.ts.map +1 -0
  125. package/dist/utils.js +43 -0
  126. package/dist/utils.js.map +1 -0
  127. package/dist/{bitcoin/websocket.d.ts → websocket.d.ts} +8 -7
  128. package/dist/websocket.d.ts.map +1 -0
  129. package/dist/{ethereum/websocket.js → websocket.js} +7 -5
  130. package/dist/websocket.js.map +1 -0
  131. package/package.json +10 -6
  132. package/dist/bitcoin/websocket.d.ts.map +0 -1
  133. package/dist/bitcoin/websocket.js +0 -177
  134. package/dist/bitcoin/websocket.js.map +0 -1
  135. package/dist/ethereum/websocket.d.ts +0 -61
  136. package/dist/ethereum/websocket.d.ts.map +0 -1
  137. package/dist/ethereum/websocket.js.map +0 -1
@@ -0,0 +1,74 @@
1
+ import * as ethereum from './ethereum/types';
2
+ export declare enum Dex {
3
+ Thor = "thor",
4
+ Zrx = "zrx"
5
+ }
6
+ export interface Fee {
7
+ caip19: string;
8
+ value: string;
9
+ }
10
+ export declare type SequencedTx = Tx & {
11
+ sequence: number;
12
+ total: number;
13
+ };
14
+ export declare enum Status {
15
+ Confirmed = "confirmed",
16
+ Pending = "pending",
17
+ Failed = "failed",
18
+ Unknown = "unknown"
19
+ }
20
+ export interface Token {
21
+ contract: string;
22
+ decimals: number;
23
+ name: string;
24
+ symbol: string;
25
+ }
26
+ export interface Trade {
27
+ dexName: Dex;
28
+ memo?: string;
29
+ type: TradeType;
30
+ }
31
+ export declare enum TradeType {
32
+ Trade = "trade",
33
+ Refund = "refund"
34
+ }
35
+ export interface Transfer {
36
+ from: string;
37
+ to: string;
38
+ caip19: string;
39
+ type: TransferType;
40
+ totalValue: string;
41
+ components: Array<{
42
+ value: string;
43
+ }>;
44
+ token?: Token;
45
+ }
46
+ export declare enum TransferType {
47
+ Send = "send",
48
+ Receive = "receive"
49
+ }
50
+ export interface TxMetadata {
51
+ method?: string;
52
+ parser: string;
53
+ }
54
+ export interface StandardTx {
55
+ address: string;
56
+ blockHash?: string;
57
+ blockHeight: number;
58
+ blockTime: number;
59
+ caip2: string;
60
+ confirmations: number;
61
+ fee?: Fee;
62
+ status: Status;
63
+ trade?: Trade;
64
+ transfers: Array<Transfer>;
65
+ txid: string;
66
+ value: string;
67
+ data?: TxMetadata;
68
+ }
69
+ export declare type Tx = StandardTx | ethereum.UniV2Tx | ethereum.ZrxTx | ethereum.ThorTx;
70
+ export declare type TxSpecific<T extends Tx> = Partial<Pick<T, 'trade' | 'transfers' | 'data'>>;
71
+ export interface GenericParser<T> {
72
+ parse: (tx: T) => Promise<TxSpecific<Tx> | undefined>;
73
+ }
74
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AAE5C,oBAAY,GAAG;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,oBAAY,WAAW,GAAG,EAAE,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,oBAAY,MAAM;IAChB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,GAAG,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,oBAAY,SAAS;IACnB,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpC,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAED,oBAAY,EAAE,GAAG,UAAU,GAAG,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAA;AAEjF,oBAAY,UAAU,CAAC,CAAC,SAAS,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC,CAAA;AAEvF,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAA;CACtD"}
package/dist/types.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransferType = exports.TradeType = exports.Status = exports.Dex = void 0;
4
+ var Dex;
5
+ (function (Dex) {
6
+ Dex["Thor"] = "thor";
7
+ Dex["Zrx"] = "zrx";
8
+ })(Dex = exports.Dex || (exports.Dex = {}));
9
+ var Status;
10
+ (function (Status) {
11
+ Status["Confirmed"] = "confirmed";
12
+ Status["Pending"] = "pending";
13
+ Status["Failed"] = "failed";
14
+ Status["Unknown"] = "unknown";
15
+ })(Status = exports.Status || (exports.Status = {}));
16
+ var TradeType;
17
+ (function (TradeType) {
18
+ TradeType["Trade"] = "trade";
19
+ TradeType["Refund"] = "refund";
20
+ })(TradeType = exports.TradeType || (exports.TradeType = {}));
21
+ var TransferType;
22
+ (function (TransferType) {
23
+ TransferType["Send"] = "send";
24
+ TransferType["Receive"] = "receive";
25
+ })(TransferType = exports.TransferType || (exports.TransferType = {}));
26
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAEA,IAAY,GAGX;AAHD,WAAY,GAAG;IACb,oBAAa,CAAA;IACb,kBAAW,CAAA;AACb,CAAC,EAHW,GAAG,GAAH,WAAG,KAAH,WAAG,QAGd;AAYD,IAAY,MAKX;AALD,WAAY,MAAM;IAChB,iCAAuB,CAAA;IACvB,6BAAmB,CAAA;IACnB,2BAAiB,CAAA;IACjB,6BAAmB,CAAA;AACrB,CAAC,EALW,MAAM,GAAN,cAAM,KAAN,cAAM,QAKjB;AAeD,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,8BAAiB,CAAA;AACnB,CAAC,EAHW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAGpB;AAYD,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,6BAAa,CAAA;IACb,mCAAmB,CAAA;AACrB,CAAC,EAHW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAGvB"}
@@ -0,0 +1,4 @@
1
+ import { Token, TransferType, Transfer } from './types';
2
+ export declare function findAsyncSequential<T, U>(array: T[], predicate: (element: T) => Promise<U | undefined>): Promise<U | undefined>;
3
+ export declare function aggregateTransfer(transfers: Array<Transfer>, type: TransferType, caip19: string, from: string, to: string, value: string, token?: Token): Array<Transfer>;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvD,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAC5C,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAChD,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAQxB;AAGD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,EAC1B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,KAAK,GACZ,KAAK,CAAC,QAAQ,CAAC,CAejB"}
package/dist/utils.js ADDED
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.aggregateTransfer = exports.findAsyncSequential = void 0;
13
+ const bignumber_js_1 = require("bignumber.js");
14
+ function findAsyncSequential(array, predicate) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ for (const element of array) {
17
+ const result = yield predicate(element);
18
+ if (result) {
19
+ return result;
20
+ }
21
+ }
22
+ return undefined;
23
+ });
24
+ }
25
+ exports.findAsyncSequential = findAsyncSequential;
26
+ // keep track of all individual tx components and add up the total value transferred
27
+ function aggregateTransfer(transfers, type, caip19, from, to, value, token) {
28
+ if (!new bignumber_js_1.BigNumber(value).gt(0))
29
+ return transfers;
30
+ const index = transfers === null || transfers === void 0 ? void 0 : transfers.findIndex((t) => t.type === type && t.caip19 === caip19 && t.from === from && t.to === to);
31
+ const transfer = transfers === null || transfers === void 0 ? void 0 : transfers[index];
32
+ if (transfer) {
33
+ transfer.totalValue = new bignumber_js_1.BigNumber(transfer.totalValue).plus(value).toString(10);
34
+ transfer.components.push({ value: value });
35
+ transfers[index] = transfer;
36
+ }
37
+ else {
38
+ transfers = [...transfers, { type, caip19, from, to, totalValue: value, components: [{ value: value }], token }];
39
+ }
40
+ return transfers;
41
+ }
42
+ exports.aggregateTransfer = aggregateTransfer;
43
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAwC;AAGxC,SAAsB,mBAAmB,CACvC,KAAU,EACV,SAAiD;;QAEjD,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,MAAM,EAAE;gBACV,OAAO,MAAM,CAAA;aACd;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;CAAA;AAXD,kDAWC;AAED,oFAAoF;AACpF,SAAgB,iBAAiB,CAC/B,SAA0B,EAC1B,IAAkB,EAClB,MAAc,EACd,IAAY,EACZ,EAAU,EACV,KAAa,EACb,KAAa;IAEb,IAAI,CAAC,IAAI,wBAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IAEjD,MAAM,KAAK,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IACnH,MAAM,QAAQ,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,KAAK,CAAC,CAAA;IAEnC,IAAI,QAAQ,EAAE;QACZ,QAAQ,CAAC,UAAU,GAAG,IAAI,wBAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjF,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1C,SAAS,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAA;KAC5B;SAAM;QACL,SAAS,GAAG,CAAC,GAAG,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;KACjH;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAvBD,8CAuBC"}
@@ -1,21 +1,22 @@
1
1
  /// <reference types="node" />
2
2
  import WebSocket from 'isomorphic-ws';
3
3
  import type { ErrorResponse, Topics, TxsTopicData } from '@shapeshiftoss/common-api';
4
- import type { SequencedTx } from '@shapeshiftoss/unchained-tx-parser';
5
4
  export interface Connection {
6
5
  ws: WebSocket;
7
6
  pingTimeout?: NodeJS.Timeout;
8
7
  }
9
- export interface TransactionMessage {
8
+ export interface TransactionMessage<T> {
9
+ address: string;
10
+ data: T;
10
11
  subscriptionId: string;
11
- data: SequencedTx;
12
12
  }
13
- export interface TxsParams {
13
+ export interface TxsParams<T> {
14
14
  data: TxsTopicData | undefined;
15
- onMessage: (message: SequencedTx) => void;
15
+ onMessage: (message: TransactionMessage<T>) => void;
16
16
  onError?: (err: ErrorResponse) => void;
17
17
  }
18
- export declare class Client {
18
+ export declare type SubscriptionId = string;
19
+ export declare class Client<T> {
19
20
  private readonly url;
20
21
  private readonly connections;
21
22
  private txs;
@@ -34,7 +35,7 @@ export declare class Client {
34
35
  * @param onMessage handler for all transaction messages associated with `subscriptionId`
35
36
  * @param [onError] optional handler for any error messages associated with `subscriptionId`
36
37
  */
37
- subscribeTxs(subscriptionId: string, data: TxsTopicData, onMessage: (message: SequencedTx) => void, onError?: (err: ErrorResponse) => void): Promise<void>;
38
+ subscribeTxs(subscriptionId: string, data: TxsTopicData, onMessage: (message: TransactionMessage<T>) => void, onError?: (err: ErrorResponse) => void): Promise<void>;
38
39
  /**
39
40
  * Unsubscribe from transaction history and updates for newly confirmed and pending transactions.
40
41
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAEpG,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,SAAS,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,CAAC,CAAA;IACP,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,IAAI,EAAE,YAAY,GAAG,SAAS,CAAA;IAC9B,SAAS,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IACnD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAA;CACvC;AAED,oBAAY,cAAc,GAAG,MAAM,CAAA;AAEnC,qBAAa,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;IAEpE,OAAO,CAAC,GAAG,CAA2C;gBAE1C,GAAG,EAAE,MAAM;IAQvB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,MAAM;IAKd;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,EACnD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,GACrC,OAAO,CAAC,IAAI,CAAC;IAiFhB;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI;IAclE;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAoB5B"}
@@ -76,8 +76,10 @@ class Client {
76
76
  var _a, _b;
77
77
  if (!event)
78
78
  return;
79
- // TODO: check event.type and handle non desired messages separately (noop)
80
- // trigger heartbeat keep alive on ping event
79
+ if (event.type !== 'message')
80
+ return;
81
+ // browsers do not support ping/pong frame, handle message instead
82
+ // trigger heartbeat keep alive on ping message and respond with pong
81
83
  if (event.data === 'ping') {
82
84
  this.heartbeat('txs');
83
85
  return;
@@ -86,13 +88,13 @@ class Client {
86
88
  const message = JSON.parse(event.data.toString());
87
89
  // narrow type to ErrorResponse if key `type` exists and forward to correct onError handler
88
90
  if ('type' in message) {
89
- const onErrorHandler = (_a = this.txs[message.subscriptionId]) === null || _a === void 0 ? void 0 : _a.onError;
91
+ const onErrorHandler = (_a = this.txs[message.subscriptionId || subscriptionId]) === null || _a === void 0 ? void 0 : _a.onError;
90
92
  onErrorHandler && onErrorHandler(message);
91
93
  return;
92
94
  }
93
95
  // forward the transaction message to the correct onMessage handler
94
- const onMessageHandler = (_b = this.txs[message.subscriptionId]) === null || _b === void 0 ? void 0 : _b.onMessage;
95
- onMessageHandler && onMessageHandler(message.data);
96
+ const onMessageHandler = (_b = this.txs[message.subscriptionId || subscriptionId]) === null || _b === void 0 ? void 0 : _b.onMessage;
97
+ onMessageHandler && onMessageHandler(message);
96
98
  }
97
99
  catch (err) {
98
100
  console.log(`failed to handle onmessage event: ${JSON.stringify(event)}: ${err}`);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshiftoss/unchained-client",
3
- "version": "5.4.0",
3
+ "version": "6.1.1",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "source": "src/index.ts",
@@ -11,19 +11,23 @@
11
11
  "scripts": {
12
12
  "build": "yarn generate && tsc",
13
13
  "clean": "rm -rf dist node_modules src/generated",
14
- "generate": "JAVA_OPTS='-Dlog.level=warn' openapi-generator-cli generate",
14
+ "generate": "JAVA_OPTS='-Dlog.level=error' openapi-generator-cli generate",
15
15
  "watch": "nodemon"
16
16
  },
17
17
  "dependencies": {
18
- "@shapeshiftoss/blockbook": "^5.4.0",
19
- "@shapeshiftoss/unchained-tx-parser": "^5.4.0",
18
+ "@shapeshiftoss/blockbook": "^6.1.1",
19
+ "@shapeshiftoss/caip": "^2.0.0",
20
+ "@shapeshiftoss/types": "^2.0.0",
21
+ "@yfi/sdk": "^1.0.30",
22
+ "bignumber.js": "^9.0.1",
23
+ "ethers": "^5.5.3",
20
24
  "isomorphic-ws": "^4.0.1",
21
25
  "ws": "^8.3.0"
22
26
  },
23
27
  "devDependencies": {
24
28
  "@openapitools/openapi-generator-cli": "^2.4.4",
25
- "@shapeshiftoss/common-api": "^5.4.0",
29
+ "@shapeshiftoss/common-api": "^6.1.1",
26
30
  "@types/ws": "^8.2.1"
27
31
  },
28
- "gitHead": "1f566895d4e6925dda03b165aba3118f8c804a2d"
32
+ "gitHead": "60d4532f77905022d496ae8a4dfc70fc82896b2e"
29
33
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/bitcoin/websocket.ts"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACpG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAErE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,SAAS,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,WAAW,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,YAAY,GAAG,SAAS,CAAA;IAC9B,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;IACzC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAA;CACvC;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;IAEpE,OAAO,CAAC,GAAG,CAAgC;gBAE/B,GAAG,EAAE,MAAM;IAQvB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,MAAM;IAKd;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,EACzC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,GACrC,OAAO,CAAC,IAAI,CAAC;IAgFhB;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI;IAclE;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAoB5B"}
@@ -1,177 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.Client = void 0;
16
- const isomorphic_ws_1 = __importDefault(require("isomorphic-ws"));
17
- class Client {
18
- constructor(url) {
19
- this.txs = {};
20
- this.url = url;
21
- this.connections = {
22
- txs: undefined,
23
- };
24
- }
25
- heartbeat(topic) {
26
- const connection = this.connections[topic];
27
- if (!connection)
28
- return;
29
- connection.pingTimeout && clearTimeout(connection.pingTimeout);
30
- connection.pingTimeout = setTimeout(() => connection === null || connection === void 0 ? void 0 : connection.ws.close(), 10000 + 5000);
31
- }
32
- onOpen(topic, resolve) {
33
- this.heartbeat(topic);
34
- resolve(true);
35
- }
36
- /**
37
- * Subscribe to transaction history and updates for newly confirmed and pending transactions.
38
- *
39
- * - Subsequent calls to `subscribeTxs` for the same `subscriptionId` will add additional addresses to be watched.
40
- *
41
- * @param subscriptionId unique id for grouping of addresses
42
- * @param data details for subscribe
43
- * @param data.topic specifies which topic to subscribe to
44
- * @param data.addresses list of addresses to subscribe to
45
- * @param onMessage handler for all transaction messages associated with `subscriptionId`
46
- * @param [onError] optional handler for any error messages associated with `subscriptionId`
47
- */
48
- subscribeTxs(subscriptionId, data, onMessage, onError) {
49
- return __awaiter(this, void 0, void 0, function* () {
50
- // keep track of the onMessage and onError handlers associated with each subscriptionId
51
- this.txs[subscriptionId] = { onMessage, onError, data: undefined };
52
- if (this.connections.txs) {
53
- if (this.connections.txs.ws.readyState === 1) {
54
- // subscribe if connection exists and is ready
55
- this.connections.txs.ws.send(JSON.stringify({ subscriptionId, method: 'subscribe', data }));
56
- }
57
- else {
58
- // queue up unique addresses for subscriptions if connection exists, but is not ready yet
59
- const txsData = this.txs[subscriptionId].data;
60
- this.txs[subscriptionId].data = txsData
61
- ? Object.assign(Object.assign({}, txsData), { addresses: [...new Set(...txsData.addresses, ...data.addresses)] }) : data;
62
- }
63
- return;
64
- }
65
- const ws = new isomorphic_ws_1.default(this.url);
66
- this.connections.txs = { ws };
67
- // send connection errors to all subscription onError handlers
68
- ws.onerror = (event) => {
69
- Object.entries(this.txs).forEach(([subscriptionId, { onError }]) => {
70
- onError && onError({ subscriptionId, type: 'error', message: event.message });
71
- });
72
- };
73
- // clear heartbeat timeout on close
74
- ws.onclose = () => { var _a; return ((_a = this.connections.txs) === null || _a === void 0 ? void 0 : _a.pingTimeout) && clearTimeout(this.connections.txs.pingTimeout); };
75
- ws.onmessage = (event) => {
76
- var _a, _b;
77
- if (!event)
78
- return;
79
- // TODO: check event.type and handle non desired messages separately (noop)
80
- // trigger heartbeat keep alive on ping event
81
- if (event.data === 'ping') {
82
- this.heartbeat('txs');
83
- return;
84
- }
85
- try {
86
- const message = JSON.parse(event.data.toString());
87
- // narrow type to ErrorResponse if key `type` exists and forward to correct onError handler
88
- if ('type' in message) {
89
- const onErrorHandler = (_a = this.txs[message.subscriptionId]) === null || _a === void 0 ? void 0 : _a.onError;
90
- onErrorHandler && onErrorHandler(message);
91
- return;
92
- }
93
- // forward the transaction message to the correct onMessage handler
94
- const onMessageHandler = (_b = this.txs[message.subscriptionId]) === null || _b === void 0 ? void 0 : _b.onMessage;
95
- onMessageHandler && onMessageHandler(message.data);
96
- }
97
- catch (err) {
98
- console.log(`failed to handle onmessage event: ${JSON.stringify(event)}: ${err}`);
99
- }
100
- };
101
- // wait for the connection to open
102
- yield new Promise((resolve) => {
103
- ws.onopen = () => {
104
- // start heartbeat
105
- this.onOpen('txs', resolve);
106
- // subscribe to all queued subscriptions
107
- Object.values(this.txs).forEach(({ data }) => {
108
- if (!data)
109
- return;
110
- const payload = { subscriptionId, method: 'subscribe', data };
111
- ws.send(JSON.stringify(payload));
112
- delete this.txs[subscriptionId].data;
113
- });
114
- // subscribe to initial subscription
115
- const payload = { subscriptionId, method: 'subscribe', data };
116
- ws.send(JSON.stringify(payload));
117
- };
118
- });
119
- });
120
- }
121
- /**
122
- * Unsubscribe from transaction history and updates for newly confirmed and pending transactions.
123
- *
124
- * - If `subscriptionId` is provided, any provided addresses will be unsubscribed from.
125
- * If no addresses are provided, the subscription will be unsubscribed from.
126
- *
127
- * - If `subscriptionId` is not provided, all subscriptions will be unsubscribed from.
128
- *
129
- * @param [subscriptionId] unique identifier to unsubscribe from
130
- * @param [data] details for unsubscribe
131
- * @param data.topic specifies which topic to unsubscribe from
132
- * @param data.addresses list of addresses to unsubscribe from
133
- */
134
- unsubscribeTxs(subscriptionId, data) {
135
- var _a, _b, _c;
136
- if (((_a = this.connections.txs) === null || _a === void 0 ? void 0 : _a.ws.readyState) !== isomorphic_ws_1.default.OPEN)
137
- return;
138
- if (!subscriptionId)
139
- this.txs = {};
140
- if (subscriptionId && !(data === null || data === void 0 ? void 0 : data.addresses.length))
141
- delete this.txs[subscriptionId];
142
- const payload = {
143
- subscriptionId: subscriptionId !== null && subscriptionId !== void 0 ? subscriptionId : '',
144
- method: 'unsubscribe',
145
- data: { topic: 'txs', addresses: (_b = data === null || data === void 0 ? void 0 : data.addresses) !== null && _b !== void 0 ? _b : [] },
146
- };
147
- (_c = this.connections.txs) === null || _c === void 0 ? void 0 : _c.ws.send(JSON.stringify(payload));
148
- }
149
- /**
150
- * Close and unsubscribe from any subscriptions
151
- *
152
- * - If no topic is provided, all supported topics will be closed and unsubscribed from
153
- *
154
- * @param [topic] specifies which topic to close and unsubscribe from
155
- */
156
- close(topic) {
157
- const closeTxs = () => {
158
- var _a;
159
- this.unsubscribeTxs();
160
- (_a = this.connections.txs) === null || _a === void 0 ? void 0 : _a.ws.close();
161
- };
162
- // close all connections if no topic is provided
163
- if (!topic) {
164
- closeTxs();
165
- return;
166
- }
167
- switch (topic) {
168
- case 'txs':
169
- closeTxs();
170
- break;
171
- default:
172
- console.log(`topic: ${topic} not supported`);
173
- }
174
- }
175
- }
176
- exports.Client = Client;
177
- //# sourceMappingURL=websocket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/bitcoin/websocket.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kEAAqC;AAoBrC,MAAa,MAAM;IAMjB,YAAY,GAAW;QAFf,QAAG,GAA8B,EAAE,CAAA;QAGzC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QAEd,IAAI,CAAC,WAAW,GAAG;YACjB,GAAG,EAAE,SAAS;SACf,CAAA;IACH,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,CAAC,UAAU;YAAE,OAAM;QAEvB,UAAU,CAAC,WAAW,IAAI,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QAC9D,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,CAAA;IACjF,CAAC;IAEO,MAAM,CAAC,KAAa,EAAE,OAAiC;QAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACrB,OAAO,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;IAED;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,cAAsB,EACtB,IAAkB,EAClB,SAAyC,EACzC,OAAsC;;YAEtC,uFAAuF;YACvF,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;YAElE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;gBACxB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,KAAK,CAAC,EAAE;oBAC5C,8CAA8C;oBAC9C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAoB,CAAC,CAAC,CAAA;iBAC9G;qBAAM;oBACL,yFAAyF;oBACzF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAA;oBAC7C,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,OAAO;wBACrC,CAAC,iCAAM,OAAO,KAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAChF,CAAC,CAAC,IAAI,CAAA;iBACT;gBACD,OAAM;aACP;YAED,MAAM,EAAE,GAAG,IAAI,uBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,CAAA;YAE7B,8DAA8D;YAC9D,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;gBACrB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;oBACjE,OAAO,IAAI,OAAO,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC/E,CAAC,CAAC,CAAA;YACJ,CAAC,CAAA;YAED,mCAAmC;YACnC,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,WAAC,OAAA,CAAA,MAAA,IAAI,CAAC,WAAW,CAAC,GAAG,0CAAE,WAAW,KAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA,EAAA,CAAA;YAEtG,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;;gBACvB,IAAI,CAAC,KAAK;oBAAE,OAAM;gBAElB,2EAA2E;gBAE3E,6CAA6C;gBAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;oBACzB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;oBACrB,OAAM;iBACP;gBAED,IAAI;oBACF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAuC,CAAA;oBAEvF,2FAA2F;oBAC3F,IAAI,MAAM,IAAI,OAAO,EAAE;wBACrB,MAAM,cAAc,GAAG,MAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,0CAAE,OAAO,CAAA;wBAChE,cAAc,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;wBACzC,OAAM;qBACP;oBAED,mEAAmE;oBACnE,MAAM,gBAAgB,GAAG,MAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,0CAAE,SAAS,CAAA;oBACpE,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;iBACnD;gBAAC,OAAO,GAAG,EAAE;oBACZ,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;iBAClF;YACH,CAAC,CAAA;YAED,kCAAkC;YAClC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5B,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;oBACf,kBAAkB;oBAClB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;oBAE3B,wCAAwC;oBACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;wBAC3C,IAAI,CAAC,IAAI;4BAAE,OAAM;wBACjB,MAAM,OAAO,GAAmB,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;wBAC7E,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;wBAChC,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAA;oBACtC,CAAC,CAAC,CAAA;oBAEF,oCAAoC;oBACpC,MAAM,OAAO,GAAmB,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;oBAC7E,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;gBAClC,CAAC,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IACD;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,cAAuB,EAAE,IAAmB;;QACzD,IAAI,CAAA,MAAA,IAAI,CAAC,WAAW,CAAC,GAAG,0CAAE,EAAE,CAAC,UAAU,MAAK,uBAAS,CAAC,IAAI;YAAE,OAAM;QAClE,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QAClC,IAAI,cAAc,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC,MAAM,CAAA;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAE9E,MAAM,OAAO,GAAmB;YAC9B,cAAc,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,EAAE;YACpC,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,mCAAI,EAAE,EAAE;SACzD,CAAA;QAED,MAAA,IAAI,CAAC,WAAW,CAAC,GAAG,0CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACxD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAc;QAClB,MAAM,QAAQ,GAAG,GAAG,EAAE;;YACpB,IAAI,CAAC,cAAc,EAAE,CAAA;YACrB,MAAA,IAAI,CAAC,WAAW,CAAC,GAAG,0CAAE,EAAE,CAAC,KAAK,EAAE,CAAA;QAClC,CAAC,CAAA;QAED,gDAAgD;QAChD,IAAI,CAAC,KAAK,EAAE;YACV,QAAQ,EAAE,CAAA;YACV,OAAM;SACP;QAED,QAAQ,KAAK,EAAE;YACb,KAAK,KAAK;gBACR,QAAQ,EAAE,CAAA;gBACV,MAAK;YACP;gBACE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,gBAAgB,CAAC,CAAA;SAC/C;IACH,CAAC;CACF;AAlLD,wBAkLC"}
@@ -1,61 +0,0 @@
1
- /// <reference types="node" />
2
- import WebSocket from 'isomorphic-ws';
3
- import type { ErrorResponse, Topics, TxsTopicData } from '@shapeshiftoss/common-api';
4
- import type { SequencedTx } from '@shapeshiftoss/unchained-tx-parser';
5
- export interface Connection {
6
- ws: WebSocket;
7
- pingTimeout?: NodeJS.Timeout;
8
- }
9
- export interface TransactionMessage {
10
- subscriptionId: string;
11
- data: SequencedTx;
12
- }
13
- export interface TxsParams {
14
- data: TxsTopicData | undefined;
15
- onMessage: (message: SequencedTx) => void;
16
- onError?: (err: ErrorResponse) => void;
17
- }
18
- export declare class Client {
19
- private readonly url;
20
- private readonly connections;
21
- private txs;
22
- constructor(url: string);
23
- private heartbeat;
24
- private onOpen;
25
- /**
26
- * Subscribe to transaction history and updates for newly confirmed and pending transactions.
27
- *
28
- * - Subsequent calls to `subscribeTxs` for the same `subscriptionId` will add additional addresses to be watched.
29
- *
30
- * @param subscriptionId unique id for grouping of addresses
31
- * @param data details for subscribe
32
- * @param data.topic specifies which topic to subscribe to
33
- * @param data.addresses list of addresses to subscribe to
34
- * @param onMessage handler for all transaction messages associated with `subscriptionId`
35
- * @param [onError] optional handler for any error messages associated with `subscriptionId`
36
- */
37
- subscribeTxs(subscriptionId: string, data: TxsTopicData, onMessage: (message: SequencedTx) => void, onError?: (err: ErrorResponse) => void): Promise<void>;
38
- /**
39
- * Unsubscribe from transaction history and updates for newly confirmed and pending transactions.
40
- *
41
- * - If `subscriptionId` is provided, any provided addresses will be unsubscribed from.
42
- * If no addresses are provided, the subscription will be unsubscribed from.
43
- *
44
- * - If `subscriptionId` is not provided, all subscriptions will be unsubscribed from.
45
- *
46
- * @param [subscriptionId] unique identifier to unsubscribe from
47
- * @param [data] details for unsubscribe
48
- * @param data.topic specifies which topic to unsubscribe from
49
- * @param data.addresses list of addresses to unsubscribe from
50
- */
51
- unsubscribeTxs(subscriptionId?: string, data?: TxsTopicData): void;
52
- /**
53
- * Close and unsubscribe from any subscriptions
54
- *
55
- * - If no topic is provided, all supported topics will be closed and unsubscribed from
56
- *
57
- * @param [topic] specifies which topic to close and unsubscribe from
58
- */
59
- close(topic?: Topics): void;
60
- }
61
- //# sourceMappingURL=websocket.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/ethereum/websocket.ts"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AACrC,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACpG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAErE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,SAAS,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,WAAW,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,YAAY,GAAG,SAAS,CAAA;IAC9B,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;IACzC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAA;CACvC;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;IAEpE,OAAO,CAAC,GAAG,CAAgC;gBAE/B,GAAG,EAAE,MAAM;IAQvB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,MAAM;IAKd;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,EACzC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,GACrC,OAAO,CAAC,IAAI,CAAC;IAiFhB;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI;IAclE;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;CAoB5B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/ethereum/websocket.ts"],"names":[],"mappings":"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"}