@railgun-community/shared-models 5.0.2 → 5.1.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.
Files changed (60) hide show
  1. package/README.md +2 -0
  2. package/dist/index.js +2 -18
  3. package/dist/index.js.map +1 -1
  4. package/dist/models/artifact.js +2 -5
  5. package/dist/models/artifact.js.map +1 -1
  6. package/dist/models/blocked-address.js +1 -4
  7. package/dist/models/blocked-address.js.map +1 -1
  8. package/dist/models/fee-token.js +1 -2
  9. package/dist/models/function-types.js +1 -2
  10. package/dist/models/index.js +11 -27
  11. package/dist/models/index.js.map +1 -1
  12. package/dist/models/merkletree-scan.js +2 -5
  13. package/dist/models/merkletree-scan.js.map +1 -1
  14. package/dist/models/network-config.js +72 -76
  15. package/dist/models/network-config.js.map +1 -1
  16. package/dist/models/proof.js +2 -5
  17. package/dist/models/proof.js.map +1 -1
  18. package/dist/models/relayer.js +2 -5
  19. package/dist/models/relayer.js.map +1 -1
  20. package/dist/models/response-types.d.ts +15 -35
  21. package/dist/models/response-types.js +8 -11
  22. package/dist/models/response-types.js.map +1 -1
  23. package/dist/models/transaction.js +1 -2
  24. package/dist/models/wallet.js +2 -5
  25. package/dist/models/wallet.js.map +1 -1
  26. package/dist/utils/artifact-v2.js +8 -18
  27. package/dist/utils/artifact-v2.js.map +1 -1
  28. package/dist/utils/available-rpc.js +38 -98
  29. package/dist/utils/available-rpc.js.map +1 -1
  30. package/dist/utils/compare.js +1 -5
  31. package/dist/utils/compare.js.map +1 -1
  32. package/dist/utils/error.js +5 -9
  33. package/dist/utils/error.js.map +1 -1
  34. package/dist/utils/fallback-provider.d.ts +2 -2
  35. package/dist/utils/fallback-provider.js +15 -36
  36. package/dist/utils/fallback-provider.js.map +1 -1
  37. package/dist/utils/format.d.ts +1 -2
  38. package/dist/utils/format.js +2 -11
  39. package/dist/utils/format.js.map +1 -1
  40. package/dist/utils/gas.d.ts +5 -9
  41. package/dist/utils/gas.js +20 -79
  42. package/dist/utils/gas.js.map +1 -1
  43. package/dist/utils/index.d.ts +0 -1
  44. package/dist/utils/index.js +10 -27
  45. package/dist/utils/index.js.map +1 -1
  46. package/dist/utils/median.js +3 -7
  47. package/dist/utils/median.js.map +1 -1
  48. package/dist/utils/network.js +3 -9
  49. package/dist/utils/network.js.map +1 -1
  50. package/dist/utils/polling-json-rpc-provider.d.ts +8 -0
  51. package/dist/utils/polling-json-rpc-provider.js +11 -0
  52. package/dist/utils/polling-json-rpc-provider.js.map +1 -0
  53. package/dist/utils/promises.js +21 -78
  54. package/dist/utils/promises.js.map +1 -1
  55. package/dist/utils/versions.js +5 -9
  56. package/dist/utils/versions.js.map +1 -1
  57. package/package.json +3 -9
  58. package/dist/utils/serializer.d.ts +0 -5
  59. package/dist/utils/serializer.js +0 -57
  60. package/dist/utils/serializer.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /// <reference types="../types/global" />
2
- import { BigNumber } from '@ethersproject/bignumber';
2
+ import { PreparedTransactionRequest } from 'ethers';
3
3
  import { MerkletreeScanStatus } from './merkletree-scan';
4
4
  import { FeesSerialized } from './network-config';
5
5
  export declare type RailgunAPICiphertext = {
@@ -18,36 +18,19 @@ export declare enum EVMGasType {
18
18
  export declare type TransactionGasDetails = TransactionGasDetailsType0 | TransactionGasDetailsType1 | TransactionGasDetailsType2;
19
19
  export declare type TransactionGasDetailsType0 = {
20
20
  evmGasType: EVMGasType.Type0;
21
- gasEstimate: BigNumber;
22
- gasPrice: BigNumber;
21
+ gasEstimate: bigint;
22
+ gasPrice: bigint;
23
23
  };
24
24
  export declare type TransactionGasDetailsType1 = {
25
25
  evmGasType: EVMGasType.Type1;
26
- gasEstimate: BigNumber;
27
- gasPrice: BigNumber;
26
+ gasEstimate: bigint;
27
+ gasPrice: bigint;
28
28
  };
29
29
  export declare type TransactionGasDetailsType2 = {
30
30
  evmGasType: EVMGasType.Type2;
31
- gasEstimate: BigNumber;
32
- maxFeePerGas: BigNumber;
33
- maxPriorityFeePerGas: BigNumber;
34
- };
35
- export declare type TransactionGasDetailsSerialized = TransactionGasDetailsSerializedType0 | TransactionGasDetailsSerializedType1 | TransactionGasDetailsSerializedType2;
36
- export declare type TransactionGasDetailsSerializedType0 = {
37
- evmGasType: EVMGasType.Type0;
38
- gasEstimateString: string;
39
- gasPriceString: string;
40
- };
41
- export declare type TransactionGasDetailsSerializedType1 = {
42
- evmGasType: EVMGasType.Type1;
43
- gasEstimateString: string;
44
- gasPriceString: string;
45
- };
46
- export declare type TransactionGasDetailsSerializedType2 = {
47
- evmGasType: EVMGasType.Type2;
48
- gasEstimateString: string;
49
- maxFeePerGasString: string;
50
- maxPriorityFeePerGasString: string;
31
+ gasEstimate: bigint;
32
+ maxFeePerGas: bigint;
33
+ maxPriorityFeePerGas: bigint;
51
34
  };
52
35
  export declare enum ChainType {
53
36
  EVM = 0
@@ -74,24 +57,24 @@ export declare type RailgunWalletInfo = {
74
57
  id: string;
75
58
  railgunAddress: string;
76
59
  };
77
- export declare type RailgunWalletAddressDataSerialized = {
78
- masterPublicKey: string;
79
- viewingPublicKey: string;
60
+ export declare type RailgunWalletAddressData = {
61
+ masterPublicKey: bigint;
62
+ viewingPublicKey: bigint;
80
63
  };
81
64
  export declare type RailgunTxidFromNullifiersResponse = {
82
65
  txid?: string;
83
66
  };
84
67
  export declare type RailgunPopulateTransactionResponse = {
85
- serializedTransaction: string;
68
+ transaction: PreparedTransactionRequest;
86
69
  nullifiers?: string[];
87
70
  };
88
71
  export declare type RailgunTransactionGasEstimateResponse = {
89
- gasEstimateString: string;
72
+ gasEstimate: bigint;
90
73
  relayerFeeCommitment?: CommitmentSummary;
91
74
  };
92
75
  export declare type RailgunERC20Amount = {
93
76
  tokenAddress: string;
94
- amountString: string;
77
+ amount: bigint;
95
78
  };
96
79
  export declare type RailgunERC20AmountRecipient = RailgunERC20Amount & {
97
80
  recipientAddress: string;
@@ -107,7 +90,7 @@ export declare type RailgunNFTAmount = {
107
90
  nftAddress: string;
108
91
  nftTokenType: NFTTokenType;
109
92
  tokenSubID: string;
110
- amountString: string;
93
+ amount: bigint;
111
94
  };
112
95
  export declare type RailgunNFTAmountRecipient = RailgunNFTAmount & {
113
96
  recipientAddress: string;
@@ -164,9 +147,6 @@ export declare type TransactionHistoryItem = {
164
147
  unshieldNFTAmounts: RailgunUnshieldNFTAmount[];
165
148
  category: TransactionHistoryItemCategory;
166
149
  };
167
- export declare type TransactionHistorySerializedResponse = {
168
- items: TransactionHistoryItem[];
169
- };
170
150
  declare type Ciphertext = {
171
151
  iv: string;
172
152
  tag: string;
@@ -1,34 +1,31 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.TransactionHistoryItemCategory = exports.NFTTokenType = exports.ChainType = exports.EVMGasType = void 0;
4
1
  /**
5
2
  * Type0 / Type1 = non-EIP-1559 (gasPrice).
6
3
  * Type2 = EIP-1559 (maxFeePerGas and maxPriorityFeePerGas).
7
4
  */
8
- var EVMGasType;
5
+ export var EVMGasType;
9
6
  (function (EVMGasType) {
10
7
  EVMGasType[EVMGasType["Type0"] = 0] = "Type0";
11
8
  EVMGasType[EVMGasType["Type1"] = 1] = "Type1";
12
9
  EVMGasType[EVMGasType["Type2"] = 2] = "Type2";
13
- })(EVMGasType = exports.EVMGasType || (exports.EVMGasType = {}));
14
- var ChainType;
10
+ })(EVMGasType || (EVMGasType = {}));
11
+ export var ChainType;
15
12
  (function (ChainType) {
16
13
  ChainType[ChainType["EVM"] = 0] = "EVM";
17
- })(ChainType = exports.ChainType || (exports.ChainType = {}));
14
+ })(ChainType || (ChainType = {}));
18
15
  /**
19
16
  * Synced NFT types from TokenType (@railgun-community/engine).
20
17
  */
21
- var NFTTokenType;
18
+ export var NFTTokenType;
22
19
  (function (NFTTokenType) {
23
20
  NFTTokenType[NFTTokenType["ERC721"] = 1] = "ERC721";
24
21
  NFTTokenType[NFTTokenType["ERC1155"] = 2] = "ERC1155";
25
- })(NFTTokenType = exports.NFTTokenType || (exports.NFTTokenType = {}));
26
- var TransactionHistoryItemCategory;
22
+ })(NFTTokenType || (NFTTokenType = {}));
23
+ export var TransactionHistoryItemCategory;
27
24
  (function (TransactionHistoryItemCategory) {
28
25
  TransactionHistoryItemCategory["ShieldERC20s"] = "ShieldERC20s";
29
26
  TransactionHistoryItemCategory["UnshieldERC20s"] = "UnshieldERC20s";
30
27
  TransactionHistoryItemCategory["TransferSendERC20s"] = "TransferSendERC20s";
31
28
  TransactionHistoryItemCategory["TransferReceiveERC20s"] = "TransferReceiveERC20s";
32
29
  TransactionHistoryItemCategory["Unknown"] = "Unknown";
33
- })(TransactionHistoryItemCategory = exports.TransactionHistoryItemCategory || (exports.TransactionHistoryItemCategory = {}));
30
+ })(TransactionHistoryItemCategory || (TransactionHistoryItemCategory = {}));
34
31
  //# sourceMappingURL=response-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"response-types.js","sourceRoot":"","sources":["../../src/models/response-types.ts"],"names":[],"mappings":";;;AASA;;;GAGG;AACH,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,6CAAS,CAAA;IACT,6CAAS,CAAA;IACT,6CAAS,CAAA;AACX,CAAC,EAJW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAIrB;AAkDD,IAAY,SAEX;AAFD,WAAY,SAAS;IACnB,uCAAO,CAAA;AACT,CAAC,EAFW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAEpB;AAyDD;;GAEG;AACH,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,mDAAU,CAAA;IACV,qDAAW,CAAA;AACb,CAAC,EAHW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAGvB;AA0DD,IAAY,8BAMX;AAND,WAAY,8BAA8B;IACxC,+DAA6B,CAAA;IAC7B,mEAAiC,CAAA;IACjC,2EAAyC,CAAA;IACzC,iFAA+C,CAAA;IAC/C,qDAAmB,CAAA;AACrB,CAAC,EANW,8BAA8B,GAA9B,sCAA8B,KAA9B,sCAA8B,QAMzC","sourcesContent":["import { BigNumber } from '@ethersproject/bignumber';\nimport { MerkletreeScanStatus } from './merkletree-scan';\nimport { FeesSerialized } from './network-config';\n\nexport type RailgunAPICiphertext = {\n iv: string;\n data: string[];\n};\n\n/**\n * Type0 / Type1 = non-EIP-1559 (gasPrice).\n * Type2 = EIP-1559 (maxFeePerGas and maxPriorityFeePerGas).\n */\nexport enum EVMGasType {\n Type0 = 0,\n Type1 = 1,\n Type2 = 2,\n}\n\nexport type TransactionGasDetails =\n | TransactionGasDetailsType0\n | TransactionGasDetailsType1\n | TransactionGasDetailsType2;\n\nexport type TransactionGasDetailsType0 = {\n evmGasType: EVMGasType.Type0;\n gasEstimate: BigNumber;\n gasPrice: BigNumber;\n};\n\nexport type TransactionGasDetailsType1 = {\n evmGasType: EVMGasType.Type1;\n gasEstimate: BigNumber;\n gasPrice: BigNumber;\n};\n\nexport type TransactionGasDetailsType2 = {\n evmGasType: EVMGasType.Type2;\n gasEstimate: BigNumber;\n maxFeePerGas: BigNumber;\n maxPriorityFeePerGas: BigNumber;\n};\n\nexport type TransactionGasDetailsSerialized =\n | TransactionGasDetailsSerializedType0\n | TransactionGasDetailsSerializedType1\n | TransactionGasDetailsSerializedType2;\n\nexport type TransactionGasDetailsSerializedType0 = {\n evmGasType: EVMGasType.Type0;\n gasEstimateString: string;\n gasPriceString: string;\n};\n\nexport type TransactionGasDetailsSerializedType1 = {\n evmGasType: EVMGasType.Type1;\n gasEstimateString: string;\n gasPriceString: string;\n};\n\nexport type TransactionGasDetailsSerializedType2 = {\n evmGasType: EVMGasType.Type2;\n gasEstimateString: string;\n maxFeePerGasString: string;\n maxPriorityFeePerGasString: string;\n};\n\nexport enum ChainType {\n EVM = 0,\n}\n\nexport type Chain = {\n type: ChainType;\n id: number;\n};\n\nexport type RailgunBalancesEvent = {\n chain: Chain;\n erc20Amounts: RailgunERC20Amount[];\n nftAmounts: RailgunNFTAmount[];\n railgunWalletID: string;\n};\n\nexport type MerkletreeScanUpdateEvent = {\n chain: Chain;\n scanStatus: MerkletreeScanStatus;\n progress: number;\n};\n\nexport type LoadProviderResponse = {\n feesSerialized: FeesSerialized;\n};\n\nexport type RailgunWalletInfo = {\n id: string;\n railgunAddress: string;\n};\n\nexport type RailgunWalletAddressDataSerialized = {\n masterPublicKey: string;\n viewingPublicKey: string;\n};\n\nexport type RailgunTxidFromNullifiersResponse = {\n txid?: string;\n};\n\nexport type RailgunPopulateTransactionResponse = {\n serializedTransaction: string;\n nullifiers?: string[];\n};\n\nexport type RailgunTransactionGasEstimateResponse = {\n gasEstimateString: string;\n relayerFeeCommitment?: CommitmentSummary;\n};\n\nexport type RailgunERC20Amount = {\n tokenAddress: string;\n amountString: string;\n};\n\nexport type RailgunERC20AmountRecipient = RailgunERC20Amount & {\n recipientAddress: string;\n};\n\n/**\n * Synced NFT types from TokenType (@railgun-community/engine).\n */\nexport enum NFTTokenType {\n ERC721 = 1,\n ERC1155 = 2,\n}\n\nexport type RailgunNFTAmount = {\n nftAddress: string;\n nftTokenType: NFTTokenType;\n tokenSubID: string;\n amountString: string;\n};\n\nexport type RailgunNFTAmountRecipient = RailgunNFTAmount & {\n recipientAddress: string;\n};\n\nexport type EncryptDataWithSharedKeyResponse = {\n encryptedData: [string, string];\n randomPubKey: string;\n sharedKey: Uint8Array;\n};\n\nexport type EncryptDataWithSharedKeySerialized = {\n encryptedData: [string, string];\n randomPubKey: string;\n sharedKey: string;\n};\n\nexport type Pbkdf2Response = string;\n\ntype SendAdditionalData = {\n recipientAddress: Optional<string>;\n walletSource: Optional<string>;\n memoText: Optional<string>;\n};\n\nexport type RailgunSendERC20Amount = RailgunERC20Amount & SendAdditionalData;\n\nexport type RailgunSendNFTAmount = RailgunNFTAmount & SendAdditionalData;\n\ntype UnshieldAdditonalData = {\n unshieldFee: Optional<string>;\n};\n\nexport type RailgunUnshieldERC20Amount = RailgunSendERC20Amount &\n UnshieldAdditonalData;\n\nexport type RailgunUnshieldNFTAmount = RailgunSendNFTAmount &\n UnshieldAdditonalData;\n\ntype ReceiveAdditionalData = {\n senderAddress: Optional<string>;\n memoText: Optional<string>;\n shieldFee: Optional<string>;\n};\n\nexport type RailgunReceiveERC20Amount = RailgunERC20Amount &\n ReceiveAdditionalData;\n\nexport type RailgunReceiveNFTAmount = RailgunNFTAmount & ReceiveAdditionalData;\n\nexport enum TransactionHistoryItemCategory {\n ShieldERC20s = 'ShieldERC20s',\n UnshieldERC20s = 'UnshieldERC20s',\n TransferSendERC20s = 'TransferSendERC20s',\n TransferReceiveERC20s = 'TransferReceiveERC20s',\n Unknown = 'Unknown',\n}\n\nexport type TransactionHistoryItem = {\n txid: string;\n version: number;\n timestamp: Optional<number>;\n blockNumber: Optional<number>;\n receiveERC20Amounts: RailgunReceiveERC20Amount[];\n transferERC20Amounts: RailgunSendERC20Amount[];\n changeERC20Amounts: RailgunERC20Amount[];\n relayerFeeERC20Amount?: RailgunERC20Amount;\n unshieldERC20Amounts: RailgunUnshieldERC20Amount[];\n receiveNFTAmounts: RailgunReceiveNFTAmount[];\n transferNFTAmounts: RailgunSendNFTAmount[];\n unshieldNFTAmounts: RailgunUnshieldNFTAmount[];\n category: TransactionHistoryItemCategory;\n};\n\nexport type TransactionHistorySerializedResponse = {\n items: TransactionHistoryItem[];\n};\n\ntype Ciphertext = {\n iv: string;\n tag: string;\n data: string[];\n};\n\nexport type CommitmentCiphertext = {\n ciphertext: Ciphertext;\n blindedSenderViewingKey: string;\n blindedReceiverViewingKey: string;\n annotationData: string;\n memo: string;\n};\n\nexport type CommitmentSummary = {\n commitmentCiphertext: CommitmentCiphertext;\n commitmentHash: string;\n};\n"]}
1
+ {"version":3,"file":"response-types.js","sourceRoot":"","sources":["../../src/models/response-types.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,6CAAS,CAAA;IACT,6CAAS,CAAA;IACT,6CAAS,CAAA;AACX,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AA0BD,MAAM,CAAN,IAAY,SAEX;AAFD,WAAY,SAAS;IACnB,uCAAO,CAAA;AACT,CAAC,EAFW,SAAS,KAAT,SAAS,QAEpB;AAyDD;;GAEG;AACH,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,mDAAU,CAAA;IACV,qDAAW,CAAA;AACb,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AA0DD,MAAM,CAAN,IAAY,8BAMX;AAND,WAAY,8BAA8B;IACxC,+DAA6B,CAAA;IAC7B,mEAAiC,CAAA;IACjC,2EAAyC,CAAA;IACzC,iFAA+C,CAAA;IAC/C,qDAAmB,CAAA;AACrB,CAAC,EANW,8BAA8B,KAA9B,8BAA8B,QAMzC","sourcesContent":["/// <reference types=\"../types/global\" />\nimport { PreparedTransactionRequest } from 'ethers';\nimport { MerkletreeScanStatus } from './merkletree-scan';\nimport { FeesSerialized } from './network-config';\n\nexport type RailgunAPICiphertext = {\n iv: string;\n data: string[];\n};\n\n/**\n * Type0 / Type1 = non-EIP-1559 (gasPrice).\n * Type2 = EIP-1559 (maxFeePerGas and maxPriorityFeePerGas).\n */\nexport enum EVMGasType {\n Type0 = 0,\n Type1 = 1,\n Type2 = 2,\n}\n\nexport type TransactionGasDetails =\n | TransactionGasDetailsType0\n | TransactionGasDetailsType1\n | TransactionGasDetailsType2;\n\nexport type TransactionGasDetailsType0 = {\n evmGasType: EVMGasType.Type0;\n gasEstimate: bigint;\n gasPrice: bigint;\n};\n\nexport type TransactionGasDetailsType1 = {\n evmGasType: EVMGasType.Type1;\n gasEstimate: bigint;\n gasPrice: bigint;\n};\n\nexport type TransactionGasDetailsType2 = {\n evmGasType: EVMGasType.Type2;\n gasEstimate: bigint;\n maxFeePerGas: bigint;\n maxPriorityFeePerGas: bigint;\n};\n\nexport enum ChainType {\n EVM = 0,\n}\n\nexport type Chain = {\n type: ChainType;\n id: number;\n};\n\nexport type RailgunBalancesEvent = {\n chain: Chain;\n erc20Amounts: RailgunERC20Amount[];\n nftAmounts: RailgunNFTAmount[];\n railgunWalletID: string;\n};\n\nexport type MerkletreeScanUpdateEvent = {\n chain: Chain;\n scanStatus: MerkletreeScanStatus;\n progress: number;\n};\n\nexport type LoadProviderResponse = {\n feesSerialized: FeesSerialized;\n};\n\nexport type RailgunWalletInfo = {\n id: string;\n railgunAddress: string;\n};\n\nexport type RailgunWalletAddressData = {\n masterPublicKey: bigint;\n viewingPublicKey: bigint;\n};\n\nexport type RailgunTxidFromNullifiersResponse = {\n txid?: string;\n};\n\nexport type RailgunPopulateTransactionResponse = {\n transaction: PreparedTransactionRequest;\n nullifiers?: string[];\n};\n\nexport type RailgunTransactionGasEstimateResponse = {\n gasEstimate: bigint;\n relayerFeeCommitment?: CommitmentSummary;\n};\n\nexport type RailgunERC20Amount = {\n tokenAddress: string;\n amount: bigint;\n};\n\nexport type RailgunERC20AmountRecipient = RailgunERC20Amount & {\n recipientAddress: string;\n};\n\n/**\n * Synced NFT types from TokenType (@railgun-community/engine).\n */\nexport enum NFTTokenType {\n ERC721 = 1,\n ERC1155 = 2,\n}\n\nexport type RailgunNFTAmount = {\n nftAddress: string;\n nftTokenType: NFTTokenType;\n tokenSubID: string;\n amount: bigint;\n};\n\nexport type RailgunNFTAmountRecipient = RailgunNFTAmount & {\n recipientAddress: string;\n};\n\nexport type EncryptDataWithSharedKeyResponse = {\n encryptedData: [string, string];\n randomPubKey: string;\n sharedKey: Uint8Array;\n};\n\nexport type EncryptDataWithSharedKeySerialized = {\n encryptedData: [string, string];\n randomPubKey: string;\n sharedKey: string;\n};\n\nexport type Pbkdf2Response = string;\n\ntype SendAdditionalData = {\n recipientAddress: Optional<string>;\n walletSource: Optional<string>;\n memoText: Optional<string>;\n};\n\nexport type RailgunSendERC20Amount = RailgunERC20Amount & SendAdditionalData;\n\nexport type RailgunSendNFTAmount = RailgunNFTAmount & SendAdditionalData;\n\ntype UnshieldAdditonalData = {\n unshieldFee: Optional<string>;\n};\n\nexport type RailgunUnshieldERC20Amount = RailgunSendERC20Amount &\n UnshieldAdditonalData;\n\nexport type RailgunUnshieldNFTAmount = RailgunSendNFTAmount &\n UnshieldAdditonalData;\n\ntype ReceiveAdditionalData = {\n senderAddress: Optional<string>;\n memoText: Optional<string>;\n shieldFee: Optional<string>;\n};\n\nexport type RailgunReceiveERC20Amount = RailgunERC20Amount &\n ReceiveAdditionalData;\n\nexport type RailgunReceiveNFTAmount = RailgunNFTAmount & ReceiveAdditionalData;\n\nexport enum TransactionHistoryItemCategory {\n ShieldERC20s = 'ShieldERC20s',\n UnshieldERC20s = 'UnshieldERC20s',\n TransferSendERC20s = 'TransferSendERC20s',\n TransferReceiveERC20s = 'TransferReceiveERC20s',\n Unknown = 'Unknown',\n}\n\nexport type TransactionHistoryItem = {\n txid: string;\n version: number;\n timestamp: Optional<number>;\n blockNumber: Optional<number>;\n receiveERC20Amounts: RailgunReceiveERC20Amount[];\n transferERC20Amounts: RailgunSendERC20Amount[];\n changeERC20Amounts: RailgunERC20Amount[];\n relayerFeeERC20Amount?: RailgunERC20Amount;\n unshieldERC20Amounts: RailgunUnshieldERC20Amount[];\n receiveNFTAmounts: RailgunReceiveNFTAmount[];\n transferNFTAmounts: RailgunSendNFTAmount[];\n unshieldNFTAmounts: RailgunUnshieldNFTAmount[];\n category: TransactionHistoryItemCategory;\n};\n\ntype Ciphertext = {\n iv: string;\n tag: string;\n data: string[];\n};\n\nexport type CommitmentCiphertext = {\n ciphertext: Ciphertext;\n blindedSenderViewingKey: string;\n blindedReceiverViewingKey: string;\n annotationData: string;\n memo: string;\n};\n\nexport type CommitmentSummary = {\n commitmentCiphertext: CommitmentCiphertext;\n commitmentHash: string;\n};\n"]}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- exports.__esModule = true;
1
+ export {};
3
2
  //# sourceMappingURL=transaction.js.map
@@ -1,11 +1,8 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.WalletCreationType = void 0;
4
- var WalletCreationType;
1
+ export var WalletCreationType;
5
2
  (function (WalletCreationType) {
6
3
  WalletCreationType["Import"] = "Import";
7
4
  WalletCreationType["Create"] = "Create";
8
5
  WalletCreationType["AddViewOnly"] = "AddViewOnly";
9
6
  WalletCreationType["ImportFromBackup"] = "ImportFromBackup";
10
- })(WalletCreationType = exports.WalletCreationType || (exports.WalletCreationType = {}));
7
+ })(WalletCreationType || (WalletCreationType = {}));
11
8
  //# sourceMappingURL=wallet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/models/wallet.ts"],"names":[],"mappings":";;;AAAA,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,uCAAiB,CAAA;IACjB,uCAAiB,CAAA;IACjB,iDAA2B,CAAA;IAC3B,2DAAqC,CAAA;AACvC,CAAC,EALW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAK7B","sourcesContent":["export enum WalletCreationType {\n Import = 'Import',\n Create = 'Create',\n AddViewOnly = 'AddViewOnly',\n ImportFromBackup = 'ImportFromBackup',\n}\n"]}
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/models/wallet.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,uCAAiB,CAAA;IACjB,uCAAiB,CAAA;IACjB,iDAA2B,CAAA;IAC3B,2DAAqC,CAAA;AACvC,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B","sourcesContent":["export enum WalletCreationType {\n Import = 'Import',\n Create = 'Create',\n AddViewOnly = 'AddViewOnly',\n ImportFromBackup = 'ImportFromBackup',\n}\n"]}
@@ -1,26 +1,16 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- exports.__esModule = true;
6
- exports.assertArtifactExists = exports.artifactExists = void 0;
7
- var artifacts_json_1 = __importDefault(require("../json/artifacts.json"));
8
- var artifactExists = function (nullifiers, commitments) {
9
- var found = artifacts_json_1["default"].find(function (artifact) {
10
- return artifact.nullifiers === nullifiers &&
11
- artifact.commitments === commitments;
12
- });
1
+ import ArtifactsMetadata from '../json/artifacts.json';
2
+ export const artifactExists = (nullifiers, commitments) => {
3
+ const found = ArtifactsMetadata.find(artifact => artifact.nullifiers === nullifiers &&
4
+ artifact.commitments === commitments);
13
5
  return found != null;
14
6
  };
15
- exports.artifactExists = artifactExists;
16
- var artifactError = function (nullifiers, commitments) {
17
- return new Error("No artifacts for inputs: ".concat(nullifiers, "-").concat(commitments));
7
+ const artifactError = (nullifiers, commitments) => {
8
+ return new Error(`No artifacts for inputs: ${nullifiers}-${commitments}`);
18
9
  };
19
- var assertArtifactExists = function (nullifiers, commitments) {
20
- if ((0, exports.artifactExists)(nullifiers, commitments)) {
10
+ export const assertArtifactExists = (nullifiers, commitments) => {
11
+ if (artifactExists(nullifiers, commitments)) {
21
12
  return;
22
13
  }
23
14
  throw artifactError(nullifiers, commitments);
24
15
  };
25
- exports.assertArtifactExists = assertArtifactExists;
26
16
  //# sourceMappingURL=artifact-v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-v2.js","sourceRoot":"","sources":["../../src/utils/artifact-v2.ts"],"names":[],"mappings":";;;;;;AAAA,0EAAuD;AAEhD,IAAM,cAAc,GAAG,UAC5B,UAAkB,EAClB,WAAmB;IAEnB,IAAM,KAAK,GAAG,2BAAiB,CAAC,IAAI,CAClC,UAAA,QAAQ;QACN,OAAA,QAAQ,CAAC,UAAU,KAAK,UAAU;YAClC,QAAQ,CAAC,WAAW,KAAK,WAAW;IADpC,CACoC,CACvC,CAAC;IACF,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC,CAAC;AAVW,QAAA,cAAc,kBAUzB;AAEF,IAAM,aAAa,GAAG,UAAC,UAAkB,EAAE,WAAmB;IAC5D,OAAO,IAAI,KAAK,CAAC,mCAA4B,UAAU,cAAI,WAAW,CAAE,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEK,IAAM,oBAAoB,GAAG,UAClC,UAAkB,EAClB,WAAmB;IAEnB,IAAI,IAAA,sBAAc,EAAC,UAAU,EAAE,WAAW,CAAC,EAAE;QAC3C,OAAO;KACR;IACD,MAAM,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC/C,CAAC,CAAC;AARW,QAAA,oBAAoB,wBAQ/B","sourcesContent":["import ArtifactsMetadata from '../json/artifacts.json';\n\nexport const artifactExists = (\n nullifiers: number,\n commitments: number,\n): boolean => {\n const found = ArtifactsMetadata.find(\n artifact =>\n artifact.nullifiers === nullifiers &&\n artifact.commitments === commitments,\n );\n return found != null;\n};\n\nconst artifactError = (nullifiers: number, commitments: number) => {\n return new Error(`No artifacts for inputs: ${nullifiers}-${commitments}`);\n};\n\nexport const assertArtifactExists = (\n nullifiers: number,\n commitments: number,\n) => {\n if (artifactExists(nullifiers, commitments)) {\n return;\n }\n throw artifactError(nullifiers, commitments);\n};\n"]}
1
+ {"version":3,"file":"artifact-v2.js","sourceRoot":"","sources":["../../src/utils/artifact-v2.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,UAAkB,EAClB,WAAmB,EACV,EAAE;IACX,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAClC,QAAQ,CAAC,EAAE,CACT,QAAQ,CAAC,UAAU,KAAK,UAAU;QAClC,QAAQ,CAAC,WAAW,KAAK,WAAW,CACvC,CAAC;IACF,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAE,WAAmB,EAAE,EAAE;IAChE,OAAO,IAAI,KAAK,CAAC,4BAA4B,UAAU,IAAI,WAAW,EAAE,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,UAAkB,EAClB,WAAmB,EACnB,EAAE;IACF,IAAI,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE;QAC3C,OAAO;KACR;IACD,MAAM,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC/C,CAAC,CAAC","sourcesContent":["import ArtifactsMetadata from '../json/artifacts.json';\n\nexport const artifactExists = (\n nullifiers: number,\n commitments: number,\n): boolean => {\n const found = ArtifactsMetadata.find(\n artifact =>\n artifact.nullifiers === nullifiers &&\n artifact.commitments === commitments,\n );\n return found != null;\n};\n\nconst artifactError = (nullifiers: number, commitments: number) => {\n return new Error(`No artifacts for inputs: ${nullifiers}-${commitments}`);\n};\n\nexport const assertArtifactExists = (\n nullifiers: number,\n commitments: number,\n) => {\n if (artifactExists(nullifiers, commitments)) {\n return;\n }\n throw artifactError(nullifiers, commitments);\n};\n"]}
@@ -1,106 +1,46 @@
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 __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- exports.__esModule = true;
39
- exports.getAvailableProviderJSONs = void 0;
40
- var providers_1 = require("@ethersproject/providers");
41
- var median_1 = require("./median");
42
- var promises_1 = require("./promises");
43
- var BLOCK_NUMBER_TIMEOUT_MS = 5000;
1
+ import { JsonRpcProvider } from 'ethers';
2
+ import { getUpperBoundMedian } from './median';
3
+ import { promiseTimeout } from './promises';
4
+ const BLOCK_NUMBER_TIMEOUT_MS = 5000;
44
5
  /**
45
6
  * Health checks ProviderJson inputs, and returns an array of available RPC providers.
46
7
  * Available means that they respond to getBlockNumber(), and they are +/- 100 blocks from the median.
47
8
  */
48
- var getAvailableProviderJSONs = function (providerJsons, logError) { return __awaiter(void 0, void 0, void 0, function () {
49
- var blockNumbers, nonZeroBlockNumbers, medianBlockNumber, lowerBoundRange, upperBoundRange;
50
- return __generator(this, function (_a) {
51
- switch (_a.label) {
52
- case 0: return [4 /*yield*/, Promise.all(providerJsons.map(function (providerJson) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
53
- switch (_a.label) {
54
- case 0: return [4 /*yield*/, getBlockNumber(providerJson.provider, logError)];
55
- case 1: return [2 /*return*/, _a.sent()];
56
- }
57
- }); }); }))];
58
- case 1:
59
- blockNumbers = _a.sent();
60
- nonZeroBlockNumbers = blockNumbers.filter(function (blockNumber) { return blockNumber != null && blockNumber > 0; });
61
- medianBlockNumber = (0, median_1.getUpperBoundMedian)(nonZeroBlockNumbers);
62
- lowerBoundRange = medianBlockNumber - 100;
63
- upperBoundRange = medianBlockNumber + 100;
64
- return [2 /*return*/, providerJsons.filter(function (providerJson, index) {
65
- var blockNumber = blockNumbers[index];
66
- if (blockNumber == null) {
67
- logError("RPC Health Check failed for ".concat(providerJson.provider, ": No Block Number"));
68
- return false;
69
- }
70
- if (blockNumber < lowerBoundRange) {
71
- logError("RPC Health Check failed for ".concat(providerJson.provider, ": Block Number -").concat(medianBlockNumber - blockNumber, " from median"));
72
- return false;
73
- }
74
- if (blockNumber > upperBoundRange) {
75
- logError("RPC Health Check failed for ".concat(providerJson.provider, ": Block Number +").concat(blockNumber - medianBlockNumber, " from median"));
76
- return false;
77
- }
78
- return true;
79
- })];
9
+ export const getAvailableProviderJSONs = async (providerJsons, logError) => {
10
+ const blockNumbers = await Promise.all(providerJsons.map(async (providerJson) => await getBlockNumber(providerJson.provider, logError)));
11
+ const nonZeroBlockNumbers = blockNumbers.filter(blockNumber => blockNumber != null && blockNumber > 0);
12
+ const medianBlockNumber = getUpperBoundMedian(nonZeroBlockNumbers);
13
+ const lowerBoundRange = medianBlockNumber - 100;
14
+ const upperBoundRange = medianBlockNumber + 100;
15
+ return providerJsons.filter((providerJson, index) => {
16
+ const blockNumber = blockNumbers[index];
17
+ if (blockNumber == null) {
18
+ logError(`RPC Health Check failed for ${providerJson.provider}: No Block Number`);
19
+ return false;
80
20
  }
81
- });
82
- }); };
83
- exports.getAvailableProviderJSONs = getAvailableProviderJSONs;
84
- var getBlockNumber = function (provider, logError) { return __awaiter(void 0, void 0, void 0, function () {
85
- var rpcProvider, blockNumber, err_1;
86
- return __generator(this, function (_a) {
87
- switch (_a.label) {
88
- case 0:
89
- _a.trys.push([0, 2, , 3]);
90
- rpcProvider = new providers_1.JsonRpcProvider(provider);
91
- return [4 /*yield*/, (0, promises_1.promiseTimeout)(rpcProvider.getBlockNumber(), BLOCK_NUMBER_TIMEOUT_MS)];
92
- case 1:
93
- blockNumber = _a.sent();
94
- return [2 /*return*/, blockNumber];
95
- case 2:
96
- err_1 = _a.sent();
97
- if (!(err_1 instanceof Error)) {
98
- throw err_1;
99
- }
100
- logError(err_1.message);
101
- return [2 /*return*/, undefined];
102
- case 3: return [2 /*return*/];
21
+ if (blockNumber < lowerBoundRange) {
22
+ logError(`RPC Health Check failed for ${providerJson.provider}: Block Number -${medianBlockNumber - blockNumber} from median`);
23
+ return false;
24
+ }
25
+ if (blockNumber > upperBoundRange) {
26
+ logError(`RPC Health Check failed for ${providerJson.provider}: Block Number +${blockNumber - medianBlockNumber} from median`);
27
+ return false;
103
28
  }
29
+ return true;
104
30
  });
105
- }); };
31
+ };
32
+ const getBlockNumber = async (provider, logError) => {
33
+ try {
34
+ const rpcProvider = new JsonRpcProvider(provider);
35
+ const blockNumber = await promiseTimeout(rpcProvider.getBlockNumber(), BLOCK_NUMBER_TIMEOUT_MS);
36
+ return blockNumber;
37
+ }
38
+ catch (err) {
39
+ if (!(err instanceof Error)) {
40
+ throw err;
41
+ }
42
+ logError(err.message);
43
+ return undefined;
44
+ }
45
+ };
106
46
  //# sourceMappingURL=available-rpc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"available-rpc.js","sourceRoot":"","sources":["../../src/utils/available-rpc.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAA2D;AAE3D,mCAA+C;AAC/C,uCAA4C;AAI5C,IAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC;;;GAGG;AACI,IAAM,yBAAyB,GAAG,UACvC,aAA6B,EAC7B,QAAkB;;;;oBAEuB,qBAAM,OAAO,CAAC,GAAG,CACxD,aAAa,CAAC,GAAG,CACf,UAAM,YAAY;;gCAChB,qBAAM,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAA;gCAArD,sBAAA,SAAqD,EAAA;;yBAAA,CACxD,CACF,EAAA;;gBALK,YAAY,GAAuB,SAKxC;gBAEK,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAC7C,UAAA,WAAW,IAAI,OAAA,WAAW,IAAI,IAAI,IAAI,WAAW,GAAG,CAAC,EAAtC,CAAsC,CAC1C,CAAC;gBACR,iBAAiB,GAAG,IAAA,4BAAmB,EAAC,mBAAmB,CAAC,CAAC;gBAC7D,eAAe,GAAG,iBAAiB,GAAG,GAAG,CAAC;gBAC1C,eAAe,GAAG,iBAAiB,GAAG,GAAG,CAAC;gBAEhD,sBAAO,aAAa,CAAC,MAAM,CAAC,UAAC,YAAY,EAAE,KAAK;wBAC9C,IAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;wBACxC,IAAI,WAAW,IAAI,IAAI,EAAE;4BACvB,QAAQ,CACN,sCAA+B,YAAY,CAAC,QAAQ,sBAAmB,CACxE,CAAC;4BACF,OAAO,KAAK,CAAC;yBACd;wBACD,IAAI,WAAW,GAAG,eAAe,EAAE;4BACjC,QAAQ,CACN,sCAA+B,YAAY,CAAC,QAAQ,6BAClD,iBAAiB,GAAG,WAAW,iBACnB,CACf,CAAC;4BACF,OAAO,KAAK,CAAC;yBACd;wBACD,IAAI,WAAW,GAAG,eAAe,EAAE;4BACjC,QAAQ,CACN,sCAA+B,YAAY,CAAC,QAAQ,6BAClD,WAAW,GAAG,iBAAiB,iBACnB,CACf,CAAC;4BACF,OAAO,KAAK,CAAC;yBACd;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,EAAC;;;KACJ,CAAC;AA5CW,QAAA,yBAAyB,6BA4CpC;AAEF,IAAM,cAAc,GAAG,UACrB,QAAgB,EAChB,QAAkB;;;;;;gBAGV,WAAW,GAAG,IAAI,2BAAe,CAAC,QAAQ,CAAC,CAAC;gBAC9B,qBAAM,IAAA,yBAAc,EACtC,WAAW,CAAC,cAAc,EAAE,EAC5B,uBAAuB,CACxB,EAAA;;gBAHK,WAAW,GAAG,SAGnB;gBACD,sBAAO,WAAW,EAAC;;;gBAEnB,IAAI,CAAC,CAAC,KAAG,YAAY,KAAK,CAAC,EAAE;oBAC3B,MAAM,KAAG,CAAC;iBACX;gBACD,QAAQ,CAAC,KAAG,CAAC,OAAO,CAAC,CAAC;gBACtB,sBAAO,SAAS,EAAC;;;;KAEpB,CAAC","sourcesContent":["import { JsonRpcProvider } from '@ethersproject/providers';\nimport { ProviderJson } from './fallback-provider';\nimport { getUpperBoundMedian } from './median';\nimport { promiseTimeout } from './promises';\n\ntype LogError = (err: string) => void;\n\nconst BLOCK_NUMBER_TIMEOUT_MS = 5000;\n\n/**\n * Health checks ProviderJson inputs, and returns an array of available RPC providers.\n * Available means that they respond to getBlockNumber(), and they are +/- 100 blocks from the median.\n */\nexport const getAvailableProviderJSONs = async (\n providerJsons: ProviderJson[],\n logError: LogError,\n): Promise<ProviderJson[]> => {\n const blockNumbers: Optional<number>[] = await Promise.all(\n providerJsons.map(\n async providerJson =>\n await getBlockNumber(providerJson.provider, logError),\n ),\n );\n\n const nonZeroBlockNumbers = blockNumbers.filter(\n blockNumber => blockNumber != null && blockNumber > 0,\n ) as number[];\n const medianBlockNumber = getUpperBoundMedian(nonZeroBlockNumbers);\n const lowerBoundRange = medianBlockNumber - 100;\n const upperBoundRange = medianBlockNumber + 100;\n\n return providerJsons.filter((providerJson, index) => {\n const blockNumber = blockNumbers[index];\n if (blockNumber == null) {\n logError(\n `RPC Health Check failed for ${providerJson.provider}: No Block Number`,\n );\n return false;\n }\n if (blockNumber < lowerBoundRange) {\n logError(\n `RPC Health Check failed for ${providerJson.provider}: Block Number -${\n medianBlockNumber - blockNumber\n } from median`,\n );\n return false;\n }\n if (blockNumber > upperBoundRange) {\n logError(\n `RPC Health Check failed for ${providerJson.provider}: Block Number +${\n blockNumber - medianBlockNumber\n } from median`,\n );\n return false;\n }\n return true;\n });\n};\n\nconst getBlockNumber = async (\n provider: string,\n logError: LogError,\n): Promise<Optional<number>> => {\n try {\n const rpcProvider = new JsonRpcProvider(provider);\n const blockNumber = await promiseTimeout(\n rpcProvider.getBlockNumber(),\n BLOCK_NUMBER_TIMEOUT_MS,\n );\n return blockNumber;\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n logError(err.message);\n return undefined;\n }\n};\n"]}
1
+ {"version":3,"file":"available-rpc.js","sourceRoot":"","sources":["../../src/utils/available-rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5C,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAC5C,aAA6B,EAC7B,QAAkB,EACO,EAAE;IAC3B,MAAM,YAAY,GAAuB,MAAM,OAAO,CAAC,GAAG,CACxD,aAAa,CAAC,GAAG,CACf,KAAK,EAAC,YAAY,EAAC,EAAE,CACnB,MAAM,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACxD,CACF,CAAC;IAEF,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAC7C,WAAW,CAAC,EAAE,CAAC,WAAW,IAAI,IAAI,IAAI,WAAW,GAAG,CAAC,CAC1C,CAAC;IACd,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,iBAAiB,GAAG,GAAG,CAAC;IAChD,MAAM,eAAe,GAAG,iBAAiB,GAAG,GAAG,CAAC;IAEhD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,WAAW,IAAI,IAAI,EAAE;YACvB,QAAQ,CACN,+BAA+B,YAAY,CAAC,QAAQ,mBAAmB,CACxE,CAAC;YACF,OAAO,KAAK,CAAC;SACd;QACD,IAAI,WAAW,GAAG,eAAe,EAAE;YACjC,QAAQ,CACN,+BAA+B,YAAY,CAAC,QAAQ,mBAClD,iBAAiB,GAAG,WACtB,cAAc,CACf,CAAC;YACF,OAAO,KAAK,CAAC;SACd;QACD,IAAI,WAAW,GAAG,eAAe,EAAE;YACjC,QAAQ,CACN,+BAA+B,YAAY,CAAC,QAAQ,mBAClD,WAAW,GAAG,iBAChB,cAAc,CACf,CAAC;YACF,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAC1B,QAAgB,EAChB,QAAkB,EACS,EAAE;IAC7B,IAAI;QACF,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,WAAW,CAAC,cAAc,EAAE,EAC5B,uBAAuB,CACxB,CAAC;QACF,OAAO,WAAW,CAAC;KACpB;IAAC,OAAO,GAAG,EAAE;QACZ,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE;YAC3B,MAAM,GAAG,CAAC;SACX;QACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,SAAS,CAAC;KAClB;AACH,CAAC,CAAC","sourcesContent":["import { JsonRpcProvider } from 'ethers';\nimport { ProviderJson } from './fallback-provider';\nimport { getUpperBoundMedian } from './median';\nimport { promiseTimeout } from './promises';\n\ntype LogError = (err: string) => void;\n\nconst BLOCK_NUMBER_TIMEOUT_MS = 5000;\n\n/**\n * Health checks ProviderJson inputs, and returns an array of available RPC providers.\n * Available means that they respond to getBlockNumber(), and they are +/- 100 blocks from the median.\n */\nexport const getAvailableProviderJSONs = async (\n providerJsons: ProviderJson[],\n logError: LogError,\n): Promise<ProviderJson[]> => {\n const blockNumbers: Optional<number>[] = await Promise.all(\n providerJsons.map(\n async providerJson =>\n await getBlockNumber(providerJson.provider, logError),\n ),\n );\n\n const nonZeroBlockNumbers = blockNumbers.filter(\n blockNumber => blockNumber != null && blockNumber > 0,\n ) as number[];\n const medianBlockNumber = getUpperBoundMedian(nonZeroBlockNumbers);\n const lowerBoundRange = medianBlockNumber - 100;\n const upperBoundRange = medianBlockNumber + 100;\n\n return providerJsons.filter((providerJson, index) => {\n const blockNumber = blockNumbers[index];\n if (blockNumber == null) {\n logError(\n `RPC Health Check failed for ${providerJson.provider}: No Block Number`,\n );\n return false;\n }\n if (blockNumber < lowerBoundRange) {\n logError(\n `RPC Health Check failed for ${providerJson.provider}: Block Number -${\n medianBlockNumber - blockNumber\n } from median`,\n );\n return false;\n }\n if (blockNumber > upperBoundRange) {\n logError(\n `RPC Health Check failed for ${providerJson.provider}: Block Number +${\n blockNumber - medianBlockNumber\n } from median`,\n );\n return false;\n }\n return true;\n });\n};\n\nconst getBlockNumber = async (\n provider: string,\n logError: LogError,\n): Promise<Optional<number>> => {\n try {\n const rpcProvider = new JsonRpcProvider(provider);\n const blockNumber = await promiseTimeout(\n rpcProvider.getBlockNumber(),\n BLOCK_NUMBER_TIMEOUT_MS,\n );\n return blockNumber;\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n logError(err.message);\n return undefined;\n }\n};\n"]}
@@ -1,8 +1,4 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.compareChains = void 0;
4
- var compareChains = function (chainA, chainB) {
1
+ export const compareChains = (chainA, chainB) => {
5
2
  return chainA.type === chainB.type && chainA.id === chainB.id;
6
3
  };
7
- exports.compareChains = compareChains;
8
4
  //# sourceMappingURL=compare.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/utils/compare.ts"],"names":[],"mappings":";;;AAEO,IAAM,aAAa,GAAG,UAAC,MAAa,EAAE,MAAa;IACxD,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;AAChE,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB","sourcesContent":["import { Chain } from '../models/response-types';\n\nexport const compareChains = (chainA: Chain, chainB: Chain) => {\n return chainA.type === chainB.type && chainA.id === chainB.id;\n};\n"]}
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/utils/compare.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAa,EAAE,MAAa,EAAE,EAAE;IAC5D,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;AAChE,CAAC,CAAC","sourcesContent":["import { Chain } from '../models/response-types';\n\nexport const compareChains = (chainA: Chain, chainB: Chain) => {\n return chainA.type === chainB.type && chainA.id === chainB.id;\n};\n"]}
@@ -1,15 +1,12 @@
1
- "use strict";
2
- exports.__esModule = true;
3
- exports.sanitizeError = void 0;
4
- var STRING_PREFIX_AFTER_UNICODE_REPLACEMENT = 'y %';
5
- var validAscii = function (str) {
1
+ const STRING_PREFIX_AFTER_UNICODE_REPLACEMENT = 'y %';
2
+ const validAscii = (str) => {
6
3
  return str.replace(
7
4
  // eslint-disable-next-line no-useless-escape
8
5
  /[^A-Za-z 0-9 \.,\?""!@#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~]*/g, '');
9
6
  };
10
- var sanitizeError = function (err) {
7
+ export const sanitizeError = (err) => {
11
8
  if (err && err.message) {
12
- var lowercaseMsg = err.message.toLowerCase();
9
+ const lowercaseMsg = err.message.toLowerCase();
13
10
  if (lowercaseMsg.includes('quorum') ||
14
11
  lowercaseMsg.includes('could not connect to')) {
15
12
  return new Error('Could not connect.');
@@ -73,9 +70,8 @@ var sanitizeError = function (err) {
73
70
  return new Error('RailgunSmartWallet: Invalid Snark Proof. Please re-prove your transaction.');
74
71
  }
75
72
  }
76
- return new Error(validAscii(err.message).replace(":".concat(STRING_PREFIX_AFTER_UNICODE_REPLACEMENT), ': '));
73
+ return new Error(validAscii(err.message).replace(`:${STRING_PREFIX_AFTER_UNICODE_REPLACEMENT}`, ': '));
77
74
  }
78
75
  return new Error('Unknown error. Please try again.');
79
76
  };
80
- exports.sanitizeError = sanitizeError;
81
77
  //# sourceMappingURL=error.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"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","sourcesContent":["const STRING_PREFIX_AFTER_UNICODE_REPLACEMENT = 'y %';\n\nconst validAscii = (str: string) => {\n return str.replace(\n // eslint-disable-next-line no-useless-escape\n /[^A-Za-z 0-9 \\.,\\?\"\"!@#\\$%\\^&\\*\\(\\)-_=\\+;:<>\\/\\\\\\|\\}\\{\\[\\]`~]*/g,\n '',\n );\n};\n\nexport const sanitizeError = (err: Error): Error => {\n if (err && err.message) {\n const lowercaseMsg = err.message.toLowerCase();\n if (\n lowercaseMsg.includes('quorum') ||\n lowercaseMsg.includes('could not connect to')\n ) {\n return new Error('Could not connect.');\n }\n if (lowercaseMsg.includes('call revert exception')) {\n return new Error('Failed to connect to RPC.');\n }\n if (lowercaseMsg.includes('missing revert data')) {\n return new Error('RPC connection error.');\n }\n if (\n lowercaseMsg.includes(\n 'transaction may fail or may require manual gas limit',\n )\n ) {\n return new Error('Unknown error. Transaction failed.');\n }\n if (lowercaseMsg.includes('replacement fee too low')) {\n return new Error(\n 'Nonce is used in a pending transaction, and replacement fee is too low. Please increase your network fee to replace the pending transaction.',\n );\n }\n if (lowercaseMsg.includes('intrinsic gas too low')) {\n return new Error(\n 'Gas price rejected. Please select a higher gas price or resubmit.',\n );\n }\n if (lowercaseMsg.includes('transaction underpriced')) {\n return new Error(\n 'Gas fee too low. Please select a higher gas price and resubmit.',\n );\n }\n if (lowercaseMsg.includes('insufficient funds for intrinsic')) {\n return new Error('Insufficient gas to process transaction.');\n }\n if (lowercaseMsg.includes('nonce has already been used')) {\n return new Error(\n // Do not change 'Nonce already used' string of Error message.\n 'Nonce already used: the transaction was already completed.',\n );\n }\n if (lowercaseMsg.includes('error while dialing dial tcp')) {\n return new Error(\n 'Error while connecting to RPC provider. Please try again.',\n );\n }\n\n // Custom RAILGUN contract error messages\n if (lowercaseMsg.includes('railgunsmartwallet')) {\n if (lowercaseMsg.includes('invalid nft note value')) {\n return new Error('RailgunSmartWallet: Invalid NFT Note Value.');\n }\n if (lowercaseMsg.includes('unsupported token')) {\n return new Error(\n 'RailgunSmartWallet: Unsupported Token. This token cannot interact with the RAILGUN contract.',\n );\n }\n if (lowercaseMsg.includes('invalid note value')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Note Value. Please submit transaction with a corrected amount.',\n );\n }\n if (lowercaseMsg.includes('invalid adapt contract as sender')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Adapt Contract as Sender. Please update your frontend to current Adapt module versions.',\n );\n }\n if (lowercaseMsg.includes('invalid merkle root')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Merkle Root. Please sync your balances and try again.',\n );\n }\n if (lowercaseMsg.includes('note already spent')) {\n return new Error(\n 'RailgunSmartWallet: Note Already Spent. Please sync your balances and try again.',\n );\n }\n if (lowercaseMsg.includes('invalid note ciphertext array length')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Note Ciphertext Array Length. Please sync balances and re-prove your transaction.',\n );\n }\n if (lowercaseMsg.includes('invalid withdraw note')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Unshield Note. Please sync balances and re-prove your transaction.',\n );\n }\n if (lowercaseMsg.includes('invalid snark proof')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Snark Proof. Please re-prove your transaction.',\n );\n }\n }\n\n return new Error(\n validAscii(err.message).replace(\n `:${STRING_PREFIX_AFTER_UNICODE_REPLACEMENT}`,\n ': ',\n ),\n );\n }\n\n return new Error('Unknown error. Please try again.');\n};\n"]}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"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","sourcesContent":["const STRING_PREFIX_AFTER_UNICODE_REPLACEMENT = 'y %';\n\nconst validAscii = (str: string) => {\n return str.replace(\n // eslint-disable-next-line no-useless-escape\n /[^A-Za-z 0-9 \\.,\\?\"\"!@#\\$%\\^&\\*\\(\\)-_=\\+;:<>\\/\\\\\\|\\}\\{\\[\\]`~]*/g,\n '',\n );\n};\n\nexport const sanitizeError = (err: Error): Error => {\n if (err && err.message) {\n const lowercaseMsg = err.message.toLowerCase();\n if (\n lowercaseMsg.includes('quorum') ||\n lowercaseMsg.includes('could not connect to')\n ) {\n return new Error('Could not connect.');\n }\n if (lowercaseMsg.includes('call revert exception')) {\n return new Error('Failed to connect to RPC.');\n }\n if (lowercaseMsg.includes('missing revert data')) {\n return new Error('RPC connection error.');\n }\n if (\n lowercaseMsg.includes(\n 'transaction may fail or may require manual gas limit',\n )\n ) {\n return new Error('Unknown error. Transaction failed.');\n }\n if (lowercaseMsg.includes('replacement fee too low')) {\n return new Error(\n 'Nonce is used in a pending transaction, and replacement fee is too low. Please increase your network fee to replace the pending transaction.',\n );\n }\n if (lowercaseMsg.includes('intrinsic gas too low')) {\n return new Error(\n 'Gas price rejected. Please select a higher gas price or resubmit.',\n );\n }\n if (lowercaseMsg.includes('transaction underpriced')) {\n return new Error(\n 'Gas fee too low. Please select a higher gas price and resubmit.',\n );\n }\n if (lowercaseMsg.includes('insufficient funds for intrinsic')) {\n return new Error('Insufficient gas to process transaction.');\n }\n if (lowercaseMsg.includes('nonce has already been used')) {\n return new Error(\n // Do not change 'Nonce already used' string of Error message.\n 'Nonce already used: the transaction was already completed.',\n );\n }\n if (lowercaseMsg.includes('error while dialing dial tcp')) {\n return new Error(\n 'Error while connecting to RPC provider. Please try again.',\n );\n }\n\n // Custom RAILGUN contract error messages\n if (lowercaseMsg.includes('railgunsmartwallet')) {\n if (lowercaseMsg.includes('invalid nft note value')) {\n return new Error('RailgunSmartWallet: Invalid NFT Note Value.');\n }\n if (lowercaseMsg.includes('unsupported token')) {\n return new Error(\n 'RailgunSmartWallet: Unsupported Token. This token cannot interact with the RAILGUN contract.',\n );\n }\n if (lowercaseMsg.includes('invalid note value')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Note Value. Please submit transaction with a corrected amount.',\n );\n }\n if (lowercaseMsg.includes('invalid adapt contract as sender')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Adapt Contract as Sender. Please update your frontend to current Adapt module versions.',\n );\n }\n if (lowercaseMsg.includes('invalid merkle root')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Merkle Root. Please sync your balances and try again.',\n );\n }\n if (lowercaseMsg.includes('note already spent')) {\n return new Error(\n 'RailgunSmartWallet: Note Already Spent. Please sync your balances and try again.',\n );\n }\n if (lowercaseMsg.includes('invalid note ciphertext array length')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Note Ciphertext Array Length. Please sync balances and re-prove your transaction.',\n );\n }\n if (lowercaseMsg.includes('invalid withdraw note')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Unshield Note. Please sync balances and re-prove your transaction.',\n );\n }\n if (lowercaseMsg.includes('invalid snark proof')) {\n return new Error(\n 'RailgunSmartWallet: Invalid Snark Proof. Please re-prove your transaction.',\n );\n }\n }\n\n return new Error(\n validAscii(err.message).replace(\n `:${STRING_PREFIX_AFTER_UNICODE_REPLACEMENT}`,\n ': ',\n ),\n );\n }\n\n return new Error('Unknown error. Please try again.');\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { FallbackProvider } from '@ethersproject/providers';
1
+ import { FallbackProvider } from 'ethers';
2
2
  export declare type FallbackProviderJsonConfig = {
3
3
  chainId: number;
4
4
  providers: ProviderJson[];
@@ -8,4 +8,4 @@ export declare type ProviderJson = {
8
8
  weight: number;
9
9
  provider: string;
10
10
  };
11
- export declare const createFallbackProviderFromJsonConfig: (config: FallbackProviderJsonConfig, debugMessage?: ((msg: string) => void) | undefined) => FallbackProvider;
11
+ export declare const createFallbackProviderFromJsonConfig: (config: FallbackProviderJsonConfig) => FallbackProvider;
@@ -1,46 +1,25 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- exports.__esModule = true;
14
- exports.createFallbackProviderFromJsonConfig = void 0;
15
- var providers_1 = require("@ethersproject/providers");
16
- var createFallbackProviderFromJsonConfig = function (config, debugMessage) {
1
+ import { FallbackProvider, WebSocketProvider } from 'ethers';
2
+ import { PollingJsonRpcProvider } from './polling-json-rpc-provider';
3
+ export const createFallbackProviderFromJsonConfig = (config) => {
17
4
  try {
18
- var providers = config.providers.map(function (json) {
19
- var isWebsocket = json.provider.startsWith('wss');
20
- var provider = isWebsocket
21
- ? new providers_1.WebSocketProvider(json.provider, Number(config.chainId))
22
- : new providers_1.StaticJsonRpcProvider(json.provider, Number(config.chainId));
23
- if (debugMessage) {
24
- provider.on('debug', function (debug) {
25
- if (debug.backend && debug.backend.error) {
26
- debugMessage("Provider error: ".concat(debug.backend.error));
27
- debugMessage("Provider connection: ".concat(debug.backend.provider
28
- ? debug.backend.provider.connection
29
- : undefined));
30
- }
31
- });
32
- }
33
- return __assign(__assign({}, json), { provider: provider });
5
+ const providers = config.providers.map(json => {
6
+ const isWebsocket = json.provider.startsWith('wss');
7
+ const provider = isWebsocket
8
+ ? new WebSocketProvider(json.provider, Number(config.chainId))
9
+ : new PollingJsonRpcProvider(json.provider, Number(config.chainId));
10
+ return {
11
+ ...json,
12
+ provider,
13
+ };
34
14
  });
35
- var quorum = 1;
36
- return new providers_1.FallbackProvider(providers, quorum);
15
+ const quorum = 1;
16
+ return new FallbackProvider(providers, quorum);
37
17
  }
38
18
  catch (err) {
39
19
  if (!(err instanceof Error)) {
40
20
  throw err;
41
21
  }
42
- throw new Error("Invalid fallback provider config: ".concat(err.message));
22
+ throw new Error(`Invalid fallback provider config: ${err.message}`);
43
23
  }
44
24
  };
45
- exports.createFallbackProviderFromJsonConfig = createFallbackProviderFromJsonConfig;
46
25
  //# sourceMappingURL=fallback-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fallback-provider.js","sourceRoot":"","sources":["../../src/utils/fallback-provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sDAIkC;AA4B3B,IAAM,oCAAoC,GAAG,UAClD,MAAkC,EAClC,YAAoC;IAEpC,IAAI;QACF,IAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAA,IAAI;YACzC,IAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACpD,IAAM,QAAQ,GAAG,WAAW;gBAC1B,CAAC,CAAC,IAAI,6BAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9D,CAAC,CAAC,IAAI,iCAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAErE,IAAI,YAAY,EAAE;gBAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,KAAoB;oBACxC,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;wBACxC,YAAY,CAAC,0BAAmB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC,CAAC;wBACvD,YAAY,CACV,+BACE,KAAK,CAAC,OAAO,CAAC,QAAQ;4BACpB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU;4BACnC,CAAC,CAAC,SAAS,CACb,CACH,CAAC;qBACH;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,6BACK,IAAI,KACP,QAAQ,UAAA,IACR;QACJ,CAAC,CAAC,CAAC;QAEH,IAAM,MAAM,GAAG,CAAC,CAAC;QACjB,OAAO,IAAI,4BAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;KAChD;IAAC,OAAO,GAAG,EAAE;QACZ,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE;YAC3B,MAAM,GAAG,CAAC;SACX;QACD,MAAM,IAAI,KAAK,CAAC,4CAAqC,GAAG,CAAC,OAAO,CAAE,CAAC,CAAC;KACrE;AACH,CAAC,CAAC;AAxCW,QAAA,oCAAoC,wCAwC/C","sourcesContent":["import {\n FallbackProvider,\n StaticJsonRpcProvider,\n WebSocketProvider,\n} from '@ethersproject/providers';\n\nexport type FallbackProviderJsonConfig = {\n chainId: number;\n providers: ProviderJson[];\n};\n\nexport type ProviderJson = {\n priority: number;\n weight: number;\n provider: string;\n};\n\ntype ProviderDebug = {\n action: string;\n rid: number;\n backend: {\n weight: number;\n start: number;\n duration: number;\n result?: string[];\n error?: typeof Error;\n provider?: StaticJsonRpcProvider;\n };\n request: { method: string; params: { filter?: object } };\n provider: FallbackProvider;\n};\n\nexport const createFallbackProviderFromJsonConfig = (\n config: FallbackProviderJsonConfig,\n debugMessage?: (msg: string) => void,\n): FallbackProvider => {\n try {\n const providers = config.providers.map(json => {\n const isWebsocket = json.provider.startsWith('wss');\n const provider = isWebsocket\n ? new WebSocketProvider(json.provider, Number(config.chainId))\n : new StaticJsonRpcProvider(json.provider, Number(config.chainId));\n\n if (debugMessage) {\n provider.on('debug', (debug: ProviderDebug) => {\n if (debug.backend && debug.backend.error) {\n debugMessage(`Provider error: ${debug.backend.error}`);\n debugMessage(\n `Provider connection: ${\n debug.backend.provider\n ? debug.backend.provider.connection\n : undefined\n }`,\n );\n }\n });\n }\n\n return {\n ...json,\n provider,\n };\n });\n\n const quorum = 1;\n return new FallbackProvider(providers, quorum);\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n throw new Error(`Invalid fallback provider config: ${err.message}`);\n }\n};\n"]}
1
+ {"version":3,"file":"fallback-provider.js","sourceRoot":"","sources":["../../src/utils/fallback-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAarE,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,MAAkC,EAChB,EAAE;IACpB,IAAI;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,WAAW;gBAC1B,CAAC,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9D,CAAC,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACtE,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ;aACT,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,CAAC;QACjB,OAAO,IAAI,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;KAChD;IAAC,OAAO,GAAG,EAAE;QACZ,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE;YAC3B,MAAM,GAAG,CAAC;SACX;QACD,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;KACrE;AACH,CAAC,CAAC","sourcesContent":["import { FallbackProvider, WebSocketProvider } from 'ethers';\nimport { PollingJsonRpcProvider } from './polling-json-rpc-provider';\n\nexport type FallbackProviderJsonConfig = {\n chainId: number;\n providers: ProviderJson[];\n};\n\nexport type ProviderJson = {\n priority: number;\n weight: number;\n provider: string;\n};\n\nexport const createFallbackProviderFromJsonConfig = (\n config: FallbackProviderJsonConfig,\n): FallbackProvider => {\n try {\n const providers = config.providers.map(json => {\n const isWebsocket = json.provider.startsWith('wss');\n const provider = isWebsocket\n ? new WebSocketProvider(json.provider, Number(config.chainId))\n : new PollingJsonRpcProvider(json.provider, Number(config.chainId));\n return {\n ...json,\n provider,\n };\n });\n\n const quorum = 1;\n return new FallbackProvider(providers, quorum);\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n throw new Error(`Invalid fallback provider config: ${err.message}`);\n }\n};\n"]}
@@ -1,2 +1 @@
1
- export declare const decimalStringToHexString: (dec: string) => string;
2
- export declare const decimalToHexString: (dec: number) => string;
1
+ export declare const decimalToHexString: (dec: string | number) => string;