@bitgo-beta/abstract-eth 1.2.3-alpha.3 → 1.2.3-alpha.300

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 (91) hide show
  1. package/CHANGELOG.md +1645 -0
  2. package/dist/src/abstractEthLikeCoin.d.ts +14 -8
  3. package/dist/src/abstractEthLikeCoin.d.ts.map +1 -1
  4. package/dist/src/abstractEthLikeCoin.js +18 -15
  5. package/dist/src/abstractEthLikeNewCoins.d.ts +694 -0
  6. package/dist/src/abstractEthLikeNewCoins.d.ts.map +1 -0
  7. package/dist/src/abstractEthLikeNewCoins.js +2043 -0
  8. package/dist/src/ethLikeToken.d.ts +36 -6
  9. package/dist/src/ethLikeToken.d.ts.map +1 -1
  10. package/dist/src/ethLikeToken.js +285 -10
  11. package/dist/src/index.d.ts +2 -0
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/index.js +8 -2
  14. package/dist/src/lib/contractCall.d.ts +8 -0
  15. package/dist/src/lib/contractCall.d.ts.map +1 -0
  16. package/dist/src/lib/contractCall.js +17 -0
  17. package/dist/src/lib/iface.d.ts +132 -0
  18. package/dist/src/lib/iface.d.ts.map +1 -0
  19. package/dist/src/lib/iface.js +8 -0
  20. package/dist/src/lib/index.d.ts +15 -0
  21. package/dist/src/lib/index.d.ts.map +1 -0
  22. package/dist/src/lib/index.js +56 -0
  23. package/dist/src/lib/keyPair.d.ts +26 -0
  24. package/dist/src/lib/keyPair.d.ts.map +1 -0
  25. package/dist/src/lib/keyPair.js +65 -0
  26. package/dist/src/lib/transaction.d.ts +64 -0
  27. package/dist/src/lib/transaction.d.ts.map +1 -0
  28. package/dist/src/lib/transaction.js +137 -0
  29. package/dist/src/lib/transactionBuilder.d.ts +249 -0
  30. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  31. package/dist/src/lib/transactionBuilder.js +741 -0
  32. package/dist/src/lib/transferBuilder.d.ts +73 -0
  33. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  34. package/dist/src/lib/transferBuilder.js +293 -0
  35. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts +54 -0
  36. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts.map +1 -0
  37. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.js +120 -0
  38. package/dist/src/lib/transferBuilders/index.d.ts +4 -0
  39. package/dist/src/lib/transferBuilders/index.d.ts.map +1 -0
  40. package/dist/src/lib/transferBuilders/index.js +20 -0
  41. package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts +16 -0
  42. package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts.map +1 -0
  43. package/dist/src/lib/transferBuilders/transferBuilderERC1155.js +93 -0
  44. package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts +15 -0
  45. package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts.map +1 -0
  46. package/dist/src/lib/transferBuilders/transferBuilderERC721.js +78 -0
  47. package/dist/src/lib/types.d.ts +39 -0
  48. package/dist/src/lib/types.d.ts.map +1 -0
  49. package/dist/src/lib/types.js +137 -0
  50. package/dist/src/lib/utils.d.ts +267 -0
  51. package/dist/src/lib/utils.d.ts.map +1 -0
  52. package/dist/src/lib/utils.js +688 -0
  53. package/dist/src/lib/walletUtil.d.ts +30 -0
  54. package/dist/src/lib/walletUtil.d.ts.map +1 -0
  55. package/dist/src/lib/walletUtil.js +33 -0
  56. package/dist/src/types.d.ts +9 -0
  57. package/dist/src/types.d.ts.map +1 -0
  58. package/dist/src/types.js +3 -0
  59. package/dist/test/index.d.ts +2 -0
  60. package/dist/test/index.d.ts.map +1 -0
  61. package/dist/test/index.js +18 -0
  62. package/dist/test/unit/coin.d.ts +8 -0
  63. package/dist/test/unit/coin.d.ts.map +1 -0
  64. package/dist/test/unit/coin.js +577 -0
  65. package/dist/test/unit/index.d.ts +5 -0
  66. package/dist/test/unit/index.d.ts.map +1 -0
  67. package/dist/test/unit/index.js +21 -0
  68. package/dist/test/unit/token.d.ts +2 -0
  69. package/dist/test/unit/token.d.ts.map +1 -0
  70. package/dist/test/unit/token.js +37 -0
  71. package/dist/test/unit/transaction.d.ts +3 -0
  72. package/dist/test/unit/transaction.d.ts.map +1 -0
  73. package/dist/test/unit/transaction.js +60 -0
  74. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +8 -0
  75. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
  76. package/dist/test/unit/transactionBuilder/addressInitialization.js +95 -0
  77. package/dist/test/unit/transactionBuilder/index.d.ts +4 -0
  78. package/dist/test/unit/transactionBuilder/index.d.ts.map +1 -0
  79. package/dist/test/unit/transactionBuilder/index.js +20 -0
  80. package/dist/test/unit/transactionBuilder/send.d.ts +3 -0
  81. package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
  82. package/dist/test/unit/transactionBuilder/send.js +197 -0
  83. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +10 -0
  84. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
  85. package/dist/test/unit/transactionBuilder/walletInitialization.js +124 -0
  86. package/dist/test/unit/transferBuilder.d.ts +2 -0
  87. package/dist/test/unit/transferBuilder.d.ts.map +1 -0
  88. package/dist/test/unit/transferBuilder.js +76 -0
  89. package/dist/tsconfig.tsbuildinfo +1 -7942
  90. package/index.ts +2 -0
  91. package/package.json +29 -9
@@ -0,0 +1,73 @@
1
+ /** ETH transfer builder */
2
+ export declare class TransferBuilder {
3
+ private readonly _EMPTY_HEX_VALUE;
4
+ protected _amount: string;
5
+ protected _toAddress: string;
6
+ protected _sequenceId: number;
7
+ protected _signKey: string | null;
8
+ protected _expirationTime: number;
9
+ protected _signature: string;
10
+ private _data;
11
+ private _tokenContractAddress?;
12
+ private _coin;
13
+ private _chainId?;
14
+ private _coinUsesNonPackedEncodingForTxData?;
15
+ private _walletVersion?;
16
+ constructor(serializedData?: string);
17
+ /**
18
+ * A method to set the native coin or ERC20 token to be transferred.
19
+ * This ERC20 token may not be compatible with the network.
20
+ *
21
+ * @param {string} coin - the native coin or ERC20 token to be set
22
+ * @returns {TransferBuilder} the transfer builder instance modified
23
+ */
24
+ coin(coin: string): TransferBuilder;
25
+ walletVersion(version: number): TransferBuilder;
26
+ data(additionalData: string): TransferBuilder;
27
+ amount(amount: string): this;
28
+ to(address: string): TransferBuilder;
29
+ contractSequenceId(counter: number): TransferBuilder;
30
+ key(signKey: string): TransferBuilder;
31
+ expirationTime(date: number): TransferBuilder;
32
+ tokenContractAddress(tokenContractAddress: string): TransferBuilder;
33
+ setCoinUsesNonPackedEncodingForTxData(isCoinUsesNonPackedEncodingForTxData: boolean): TransferBuilder;
34
+ setSignature(signature: string): TransferBuilder;
35
+ signAndBuild(chainId: string, coinUsesNonPackedEncodingForTxData?: boolean): string;
36
+ private hasMandatoryFields;
37
+ /**
38
+ * Obtains the proper operation hash to sign either a sendMultiSig data
39
+ * or a sendMultiSigToken data
40
+ *
41
+ * @returns {string} the operation hash
42
+ */
43
+ getOperationHash(): string;
44
+ protected getOperationData(): (string | number | Buffer)[][];
45
+ private getOperationHashPrefix;
46
+ /**
47
+ * Get the prefix used in generating an operation hash for sending tokens
48
+ *
49
+ * @returns the string prefix
50
+ */
51
+ protected getTokenOperationHashPrefix(): string;
52
+ /**
53
+ * Get the prefix used in generating an operation hash for sending native coins
54
+ *
55
+ * @returns the string prefix
56
+ */
57
+ protected getNativeOperationHashPrefix(): string;
58
+ /** Return an expiration time, in seconds, set to one hour from now
59
+ *
60
+ * @returns {number} expiration time
61
+ */
62
+ private getExpirationTime;
63
+ /**
64
+ * If a signing key is set for this builder, recalculates the signature
65
+ *
66
+ * @returns {string} the signature value
67
+ */
68
+ protected getSignature(): string;
69
+ protected ethSignMsgHash(): string;
70
+ private decodeTransferData;
71
+ getSignatureData(): Buffer<ArrayBuffer>;
72
+ }
73
+ //# sourceMappingURL=transferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AAUA,2BAA2B;AAC3B,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,mCAAmC,CAAC,CAAU;IACtD,OAAO,CAAC,cAAc,CAAC,CAAS;gBAEpB,cAAc,CAAC,EAAE,MAAM;IAWnC;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IASnC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IAK/C,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,eAAe;IAM7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS5B,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IASpC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IASpD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IAKrC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAS7C,oBAAoB,CAAC,oBAAoB,EAAE,MAAM,GAAG,eAAe;IAKnE,qCAAqC,CAAC,oCAAoC,EAAE,OAAO,GAAG,eAAe;IAKrG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAMhD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,kCAAkC,CAAC,EAAE,OAAO,GAAG,MAAM;IAiCnF,OAAO,CAAC,kBAAkB;IAI1B;;;;;OAKG;IACI,gBAAgB,IAAI,MAAM;IAiBjC,SAAS,CAAC,gBAAgB,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE;IAkC5D,OAAO,CAAC,sBAAsB;IAO9B;;;;OAIG;IACH,SAAS,CAAC,2BAA2B,IAAI,MAAM;IAI/C;;;;OAIG;IACH,SAAS,CAAC,4BAA4B,IAAI,MAAM;IAIhD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;;OAIG;IACH,SAAS,CAAC,YAAY,IAAI,MAAM;IAOhC,SAAS,CAAC,cAAc,IAAI,MAAM;IAqBlC,OAAO,CAAC,kBAAkB;IAkBnB,gBAAgB,IAAI,MAAM,CAAC,WAAW,CAAC;CAY/C"}
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.TransferBuilder = void 0;
40
+ const assert_1 = __importDefault(require("assert"));
41
+ const ethUtil = __importStar(require("ethereumjs-util"));
42
+ const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
43
+ const bn_js_1 = __importDefault(require("bn.js"));
44
+ const statics_1 = require("@bitgo-beta/statics");
45
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
46
+ const utils_1 = require("./utils");
47
+ const utils_2 = require("ethers/lib/utils");
48
+ const walletUtil_1 = require("./walletUtil");
49
+ /** ETH transfer builder */
50
+ class TransferBuilder {
51
+ constructor(serializedData) {
52
+ this._EMPTY_HEX_VALUE = '0x';
53
+ if (serializedData) {
54
+ this.decodeTransferData(serializedData);
55
+ }
56
+ else {
57
+ // initialize with default values for non mandatory fields
58
+ this._expirationTime = this.getExpirationTime();
59
+ this._data = this._EMPTY_HEX_VALUE;
60
+ this._signature = this._EMPTY_HEX_VALUE;
61
+ }
62
+ }
63
+ /**
64
+ * A method to set the native coin or ERC20 token to be transferred.
65
+ * This ERC20 token may not be compatible with the network.
66
+ *
67
+ * @param {string} coin - the native coin or ERC20 token to be set
68
+ * @returns {TransferBuilder} the transfer builder instance modified
69
+ */
70
+ coin(coin) {
71
+ this._coin = statics_1.coins.get(coin);
72
+ if (this._coin instanceof statics_1.ContractAddressDefinedToken) {
73
+ this._tokenContractAddress = this._coin.contractAddress.toString();
74
+ }
75
+ return this;
76
+ }
77
+ walletVersion(version) {
78
+ this._walletVersion = version;
79
+ return this;
80
+ }
81
+ data(additionalData) {
82
+ this._signature = this._EMPTY_HEX_VALUE;
83
+ this._data = additionalData;
84
+ return this;
85
+ }
86
+ amount(amount) {
87
+ if (!(0, utils_1.isValidAmount)(amount)) {
88
+ throw new sdk_core_1.InvalidParameterValueError('Invalid amount');
89
+ }
90
+ this._signature = this._EMPTY_HEX_VALUE;
91
+ this._amount = amount;
92
+ return this;
93
+ }
94
+ to(address) {
95
+ if ((0, utils_1.isValidEthAddress)(address)) {
96
+ this._signature = this._EMPTY_HEX_VALUE;
97
+ this._toAddress = address;
98
+ return this;
99
+ }
100
+ throw new sdk_core_1.InvalidParameterValueError('Invalid address');
101
+ }
102
+ contractSequenceId(counter) {
103
+ if (counter >= 0) {
104
+ this._signature = this._EMPTY_HEX_VALUE;
105
+ this._sequenceId = counter;
106
+ return this;
107
+ }
108
+ throw new sdk_core_1.InvalidParameterValueError('Invalid contract sequence id');
109
+ }
110
+ key(signKey) {
111
+ this._signKey = signKey;
112
+ return this;
113
+ }
114
+ expirationTime(date) {
115
+ if (date > 0) {
116
+ this._signature = this._EMPTY_HEX_VALUE;
117
+ this._expirationTime = date;
118
+ return this;
119
+ }
120
+ throw new sdk_core_1.InvalidParameterValueError('Invalid expiration time');
121
+ }
122
+ tokenContractAddress(tokenContractAddress) {
123
+ this._tokenContractAddress = tokenContractAddress;
124
+ return this;
125
+ }
126
+ setCoinUsesNonPackedEncodingForTxData(isCoinUsesNonPackedEncodingForTxData) {
127
+ this._coinUsesNonPackedEncodingForTxData = isCoinUsesNonPackedEncodingForTxData;
128
+ return this;
129
+ }
130
+ setSignature(signature) {
131
+ this._signKey = null;
132
+ this._signature = signature;
133
+ return this;
134
+ }
135
+ signAndBuild(chainId, coinUsesNonPackedEncodingForTxData) {
136
+ this._chainId = chainId;
137
+ // If the coin uses non-packed encoding for tx data, the operation hash is calculated differently
138
+ // This new encoding type is applicable only for native coins and not tokens
139
+ this._coinUsesNonPackedEncodingForTxData =
140
+ coinUsesNonPackedEncodingForTxData && this._tokenContractAddress === undefined;
141
+ if (this.hasMandatoryFields()) {
142
+ if (this._tokenContractAddress !== undefined) {
143
+ return (0, utils_1.sendMultiSigTokenData)(this._toAddress, this._amount, this._tokenContractAddress, this._expirationTime, this._sequenceId, this.getSignature());
144
+ }
145
+ else {
146
+ return (0, utils_1.sendMultiSigData)(this._toAddress, this._amount, this._data, this._expirationTime, this._sequenceId, this.getSignature());
147
+ }
148
+ }
149
+ throw new sdk_core_1.BuildTransactionError('Missing transfer mandatory fields. Amount, destination (to) address and sequenceID are mandatory');
150
+ }
151
+ hasMandatoryFields() {
152
+ return this._amount !== undefined && this._toAddress !== undefined && this._sequenceId !== undefined;
153
+ }
154
+ /**
155
+ * Obtains the proper operation hash to sign either a sendMultiSig data
156
+ * or a sendMultiSigToken data
157
+ *
158
+ * @returns {string} the operation hash
159
+ */
160
+ getOperationHash() {
161
+ const operationData = this.getOperationData();
162
+ let operationHash;
163
+ if (this._coinUsesNonPackedEncodingForTxData) {
164
+ const types = operationData[0];
165
+ const values = operationData[1].map((item) => typeof item === 'string' || typeof item === 'number' ? item : '0x' + item.toString('hex'));
166
+ operationHash = (0, utils_2.keccak256)(utils_2.defaultAbiCoder.encode(types, values));
167
+ }
168
+ else {
169
+ // If the coin uses packed encoding for tx data or it is a token, the operation hash is calculated using the Ethereum ABI
170
+ operationHash = ethUtil.bufferToHex(ethereumjs_abi_1.default.soliditySHA3(...operationData));
171
+ }
172
+ return operationHash;
173
+ }
174
+ getOperationData() {
175
+ let operationData;
176
+ const prefix = this.getOperationHashPrefix();
177
+ if (this._tokenContractAddress !== undefined) {
178
+ operationData = [
179
+ ['string', 'address', 'uint', 'address', 'uint', 'uint'],
180
+ [
181
+ prefix,
182
+ new bn_js_1.default(ethUtil.stripHexPrefix(this._toAddress), 16),
183
+ this._amount,
184
+ new bn_js_1.default(ethUtil.stripHexPrefix(this._tokenContractAddress), 16),
185
+ this._expirationTime,
186
+ this._sequenceId,
187
+ ],
188
+ ];
189
+ }
190
+ else {
191
+ const toAddress = this._coinUsesNonPackedEncodingForTxData
192
+ ? this._toAddress
193
+ : new bn_js_1.default(ethUtil.stripHexPrefix(this._toAddress), 16);
194
+ operationData = [
195
+ ['string', 'address', 'uint', 'bytes', 'uint', 'uint'],
196
+ [
197
+ prefix,
198
+ toAddress,
199
+ this._amount,
200
+ Buffer.from(ethUtil.padToEven(ethUtil.stripHexPrefix(this._data)) || '', 'hex'),
201
+ this._expirationTime,
202
+ this._sequenceId,
203
+ ],
204
+ ];
205
+ }
206
+ return operationData;
207
+ }
208
+ getOperationHashPrefix() {
209
+ if (this._walletVersion === 4) {
210
+ return this._tokenContractAddress ? `${this._chainId}-ERC20` : `${this._chainId}`;
211
+ }
212
+ return this._tokenContractAddress ? this.getTokenOperationHashPrefix() : this.getNativeOperationHashPrefix();
213
+ }
214
+ /**
215
+ * Get the prefix used in generating an operation hash for sending tokens
216
+ *
217
+ * @returns the string prefix
218
+ */
219
+ getTokenOperationHashPrefix() {
220
+ return this._coin?.network?.tokenOperationHashPrefix ?? `${this._chainId}-ERC20` ?? 'ERC20';
221
+ }
222
+ /**
223
+ * Get the prefix used in generating an operation hash for sending native coins
224
+ *
225
+ * @returns the string prefix
226
+ */
227
+ getNativeOperationHashPrefix() {
228
+ return this._coin?.network?.nativeCoinOperationHashPrefix ?? `${this._chainId}` ?? 'ETHER';
229
+ }
230
+ /** Return an expiration time, in seconds, set to one hour from now
231
+ *
232
+ * @returns {number} expiration time
233
+ */
234
+ getExpirationTime() {
235
+ const currentDate = new Date();
236
+ currentDate.setHours(currentDate.getHours() + 1);
237
+ return currentDate.getTime() / 1000;
238
+ }
239
+ /**
240
+ * If a signing key is set for this builder, recalculates the signature
241
+ *
242
+ * @returns {string} the signature value
243
+ */
244
+ getSignature() {
245
+ if (this._signKey) {
246
+ this._signature = this.ethSignMsgHash();
247
+ }
248
+ return this._signature;
249
+ }
250
+ ethSignMsgHash() {
251
+ const data = this.getOperationHash();
252
+ (0, assert_1.default)(this._signKey);
253
+ const keyBuffer = Buffer.from(ethUtil.padToEven(this._signKey), 'hex');
254
+ if (keyBuffer.length !== 32) {
255
+ throw new Error('private key length is invalid');
256
+ }
257
+ const signatureInParts = ethUtil.ecsign(Buffer.from(ethUtil.padToEven(ethUtil.stripHexPrefix(data)), 'hex'), keyBuffer);
258
+ // Assemble strings from r, s and v
259
+ const r = ethUtil.setLengthLeft(signatureInParts.r, 32).toString('hex');
260
+ const s = ethUtil.setLengthLeft(signatureInParts.s, 32).toString('hex');
261
+ const v = ethUtil.stripHexPrefix(ethUtil.intToHex(signatureInParts.v));
262
+ // Concatenate the r, s and v parts to make the signature string
263
+ return ethUtil.addHexPrefix(r.concat(s, v));
264
+ }
265
+ decodeTransferData(data) {
266
+ const transferData = (0, utils_1.decodeTransferData)(data);
267
+ this._toAddress = transferData.to;
268
+ this._amount = transferData.amount;
269
+ this._expirationTime = transferData.expireTime;
270
+ this._sequenceId = transferData.sequenceId;
271
+ this._signature = transferData.signature;
272
+ if (transferData.data) {
273
+ this._data = transferData.data;
274
+ }
275
+ if (transferData.tokenContractAddress) {
276
+ this._tokenContractAddress = transferData.tokenContractAddress;
277
+ }
278
+ }
279
+ getSignatureData() {
280
+ const method = this._tokenContractAddress
281
+ ? ethereumjs_abi_1.default.methodID('sendMultiSigToken', walletUtil_1.sendMultiSigTokenTypes)
282
+ : ethereumjs_abi_1.default.methodID('sendMultiSig', walletUtil_1.sendMultiSigTypes);
283
+ const operationData = this.getOperationData();
284
+ const rawEncodedOperationData = ethereumjs_abi_1.default.rawEncode(...operationData);
285
+ return Buffer.concat([
286
+ method,
287
+ rawEncodedOperationData,
288
+ Buffer.from([this._coinUsesNonPackedEncodingForTxData ? 1 : 0]),
289
+ ]);
290
+ }
291
+ }
292
+ exports.TransferBuilder = TransferBuilder;
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHlEQUEyQztBQUMzQyxvRUFBeUM7QUFDekMsa0RBQXVCO0FBQ3ZCLGlEQUFzSDtBQUN0SCxtREFBeUY7QUFDekYsbUNBQXdIO0FBQ3hILDRDQUE4RDtBQUM5RCw2Q0FBeUU7QUFFekUsMkJBQTJCO0FBQzNCLE1BQWEsZUFBZTtJQWUxQixZQUFZLGNBQXVCO1FBZGxCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQWV2QyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNOLDBEQUEwRDtZQUMxRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLElBQVk7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxZQUFZLHFDQUEyQixFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JFLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxhQUFhLENB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LE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUI7WUFDdkMsQ0FBQyxDQUFDLHdCQUFXLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLG1DQUFzQixDQUFDO1lBQ25FLENBQUMsQ0FBQyx3QkFBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsOEJBQWlCLENBQUMsQ0FBQztRQUM1RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxNQUFNLHVCQUF1QixHQUFHLHdCQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDeEUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLE1BQU07WUFDTix1QkFBdUI7WUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE5U0QsMENBOFNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgZXRoVXRpbCBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcbmltcG9ydCBCTiBmcm9tICdibi5qcyc7XG5pbXBvcnQgeyBjb2lucywgQmFzZUNvaW4sIENvbnRyYWN0QWRkcmVzc0RlZmluZWRUb2tlbiwgRXRoZXJldW1OZXR3b3JrIGFzIEV0aExpa2VOZXR3b3JrIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZGVjb2RlVHJhbnNmZXJEYXRhLCBzZW5kTXVsdGlTaWdEYXRhLCBzZW5kTXVsdGlTaWdUb2tlbkRhdGEsIGlzVmFsaWRFdGhBZGRyZXNzLCBpc1ZhbGlkQW1vdW50IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBkZWZhdWx0QWJpQ29kZXIsIGtlY2NhazI1NiB9IGZyb20gJ2V0aGVycy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgc2VuZE11bHRpU2lnVG9rZW5UeXBlcywgc2VuZE11bHRpU2lnVHlwZXMgfSBmcm9tICcuL3dhbGxldFV0aWwnO1xuXG4vKiogRVRIIHRyYW5zZmVyIGJ1aWxkZXIgKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlckJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9FTVBUWV9IRVhfVkFMVUUgPSAnMHgnO1xuICBwcm90ZWN0ZWQgX2Ftb3VudDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3RvQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3NlcXVlbmNlSWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9zaWduS2V5OiBzdHJpbmcgfCBudWxsO1xuICBwcm90ZWN0ZWQgX2V4cGlyYXRpb25UaW1lOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfc2lnbmF0dXJlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RhdGE6IHN0cmluZztcbiAgcHJpdmF0ZSBfdG9rZW5Db250cmFjdEFkZHJlc3M/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvaW46IFJlYWRvbmx5PEJhc2VDb2luPjtcbiAgcHJpdmF0ZSBfY2hhaW5JZD86IHN0cmluZztcbiAgcHJpdmF0ZSBfY29pblVzZXNOb25QYWNrZWRFbmNvZGluZ0ZvclR4RGF0YT86IGJvb2xlYW47XG4gIHByaXZhdGUgX3dhbGxldFZlcnNpb24/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2VyaWFsaXplZERhdGE/OiBzdHJpbmcpIHtcbiAgICBpZiAoc2VyaWFsaXplZERhdGEpIHtcbiAgICAgIHRoaXMuZGVjb2RlVHJhbnNmZXJEYXRhKHNlcmlhbGl6ZWREYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBub24gbWFuZGF0b3J5IGZpZWxkc1xuICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB0aGlzLmdldEV4cGlyYXRpb25UaW1lKCk7XG4gICAgICB0aGlzLl9kYXRhID0gdGhpcy5fRU1QVFlfSEVYX1ZBTFVFO1xuICAgICAgdGhpcy5fc2lnbmF0dXJlID0gdGhpcy5fRU1QVFlfSEVYX1ZBTFVFO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBIG1ldGhvZCB0byBzZXQgdGhlIG5hdGl2ZSBjb2luIG9yIEVSQzIwIHRva2VuIHRvIGJlIHRyYW5zZmVycmVkLlxuICAgKiBUaGlzIEVSQzIwIHRva2VuIG1heSBub3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBuZXR3b3JrLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29pbiAtIHRoZSBuYXRpdmUgY29pbiBvciBFUkMyMCB0b2tlbiB0byBiZSBzZXRcbiAgICogQHJldHVybnMge1RyYW5zZmVyQnVpbGRlcn0gdGhlIHRyYW5zZmVyIGJ1aWxkZXIgaW5zdGFuY2UgbW9kaWZpZWRcbiAgICovXG4gIGNvaW4oY29pbjogc3RyaW5nKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICB0aGlzLl9jb2luID0gY29pbnMuZ2V0KGNvaW4pO1xuICAgIGlmICh0aGlzLl9jb2luIGluc3RhbmNlb2YgQ29udHJhY3RBZGRyZXNzRGVmaW5lZFRva2VuKSB7XG4gICAgICB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcyA9IHRoaXMuX2NvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3YWxsZXRWZXJzaW9uKHZlcnNpb246IG51bWJlcik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fd2FsbGV0VmVyc2lvbiA9IHZlcnNpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkYXRhKGFkZGl0aW9uYWxEYXRhOiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICB0aGlzLl9kYXRhID0gYWRkaXRpb25hbERhdGE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhbW91bnQoYW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRBbW91bnQoYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFtb3VudCcpO1xuICAgIH1cbiAgICB0aGlzLl9zaWduYXR1cmUgPSB0aGlzLl9FTVBUWV9IRVhfVkFMVUU7XG4gICAgdGhpcy5fYW1vdW50ID0gYW1vdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG8oYWRkcmVzczogc3RyaW5nKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICBpZiAoaXNWYWxpZEV0aEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX3RvQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgfVxuXG4gIGNvbnRyYWN0U2VxdWVuY2VJZChjb3VudGVyOiBudW1iZXIpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmIChjb3VudGVyID49IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX3NlcXVlbmNlSWQgPSBjb3VudGVyO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBjb250cmFjdCBzZXF1ZW5jZSBpZCcpO1xuICB9XG5cbiAga2V5KHNpZ25LZXk6IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fc2lnbktleSA9IHNpZ25LZXk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBleHBpcmF0aW9uVGltZShkYXRlOiBudW1iZXIpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmIChkYXRlID4gMCkge1xuICAgICAgdGhpcy5fc2lnbmF0dXJlID0gdGhpcy5fRU1QVFlfSEVYX1ZBTFVFO1xuICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSBkYXRlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBleHBpcmF0aW9uIHRpbWUnKTtcbiAgfVxuXG4gIHRva2VuQ29udHJhY3RBZGRyZXNzKHRva2VuQ29udHJhY3RBZGRyZXNzOiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHRoaXMuX3Rva2VuQ29udHJhY3RBZGRyZXNzID0gdG9rZW5Db250cmFjdEFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRDb2luVXNlc05vblBhY2tlZEVuY29kaW5nRm9yVHhEYXRhKGlzQ29pblVzZXNOb25QYWNrZWRFbmNvZGluZ0ZvclR4RGF0YTogYm9vbGVhbik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fY29pblVzZXNOb25QYWNrZWRFbmNvZGluZ0ZvclR4RGF0YSA9IGlzQ29pblVzZXNOb25QYWNrZWRFbmNvZGluZ0ZvclR4RGF0YTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fc2lnbktleSA9IG51bGw7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2lnbkFuZEJ1aWxkKGNoYWluSWQ6IHN0cmluZywgY29pblVzZXNOb25QYWNrZWRFbmNvZGluZ0ZvclR4RGF0YT86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHRoaXMuX2NoYWluSWQgPSBjaGFpbklkO1xuXG4gICAgLy8gSWYgdGhlIGNvaW4gdXNlcyBub24tcGFja2VkIGVuY29kaW5nIGZvciB0eCBkYXRhLCB0aGUgb3BlcmF0aW9uIGhhc2ggaXMgY2FsY3VsYXRlZCBkaWZmZXJlbnRseVxuICAgIC8vIFRoaXMgbmV3IGVuY29kaW5nIHR5cGUgaXMgYXBwbGljYWJsZSBvbmx5IGZvciBuYXRpdmUgY29pbnMgYW5kIG5vdCB0b2tlbnNcbiAgICB0aGlzLl9jb2luVXNlc05vblBhY2tlZEVuY29kaW5nRm9yVHhEYXRhID1cbiAgICAgIGNvaW5Vc2VzTm9uUGFja2VkRW5jb2RpbmdGb3JUeERhdGEgJiYgdGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgPT09IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5oYXNNYW5kYXRvcnlGaWVsZHMoKSkge1xuICAgICAgaWYgKHRoaXMuX3Rva2VuQ29udHJhY3RBZGRyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHNlbmRNdWx0aVNpZ1Rva2VuRGF0YShcbiAgICAgICAgICB0aGlzLl90b0FkZHJlc3MsXG4gICAgICAgICAgdGhpcy5fYW1vdW50LFxuICAgICAgICAgIHRoaXMuX3Rva2VuQ29udHJhY3RBZGRyZXNzLFxuICAgICAgICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lLFxuICAgICAgICAgIHRoaXMuX3NlcXVlbmNlSWQsXG4gICAgICAgICAgdGhpcy5nZXRTaWduYXR1cmUoKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNlbmRNdWx0aVNpZ0RhdGEoXG4gICAgICAgICAgdGhpcy5fdG9BZGRyZXNzLFxuICAgICAgICAgIHRoaXMuX2Ftb3VudCxcbiAgICAgICAgICB0aGlzLl9kYXRhLFxuICAgICAgICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lLFxuICAgICAgICAgIHRoaXMuX3NlcXVlbmNlSWQsXG4gICAgICAgICAgdGhpcy5nZXRTaWduYXR1cmUoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgJ01pc3NpbmcgdHJhbnNmZXIgbWFuZGF0b3J5IGZpZWxkcy4gQW1vdW50LCBkZXN0aW5hdGlvbiAodG8pIGFkZHJlc3MgYW5kIHNlcXVlbmNlSUQgYXJlIG1hbmRhdG9yeSdcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNNYW5kYXRvcnlGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Ftb3VudCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3RvQWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3NlcXVlbmNlSWQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRhaW5zIHRoZSBwcm9wZXIgb3BlcmF0aW9uIGhhc2ggdG8gc2lnbiBlaXRoZXIgYSBzZW5kTXVsdGlTaWcgZGF0YVxuICAgKiBvciBhIHNlbmRNdWx0aVNpZ1Rva2VuIGRhdGFcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIG9wZXJhdGlvbiBoYXNoXG4gICAqL1xuICBwdWJsaWMgZ2V0T3BlcmF0aW9uSGFzaCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9wZXJhdGlvbkRhdGEgPSB0aGlzLmdldE9wZXJhdGlvbkRhdGEoKTtcbiAgICBsZXQgb3BlcmF0aW9uSGFzaDogc3RyaW5nO1xuXG4gICAgaWYgKHRoaXMuX2NvaW5Vc2VzTm9uUGFja2VkRW5jb2RpbmdGb3JUeERhdGEpIHtcbiAgICAgIGNvbnN0IHR5cGVzOiBzdHJpbmdbXSA9IG9wZXJhdGlvbkRhdGFbMF0gYXMgc3RyaW5nW107XG4gICAgICBjb25zdCB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSBvcGVyYXRpb25EYXRhWzFdLm1hcCgoaXRlbSkgPT5cbiAgICAgICAgdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyA/IGl0ZW0gOiAnMHgnICsgaXRlbS50b1N0cmluZygnaGV4JylcbiAgICAgICk7XG4gICAgICBvcGVyYXRpb25IYXNoID0ga2VjY2FrMjU2KGRlZmF1bHRBYmlDb2Rlci5lbmNvZGUodHlwZXMsIHZhbHVlcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGUgY29pbiB1c2VzIHBhY2tlZCBlbmNvZGluZyBmb3IgdHggZGF0YSBvciBpdCBpcyBhIHRva2VuLCB0aGUgb3BlcmF0aW9uIGhhc2ggaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgRXRoZXJldW0gQUJJXG4gICAgICBvcGVyYXRpb25IYXNoID0gZXRoVXRpbC5idWZmZXJUb0hleChFdGhlcmV1bUFiaS5zb2xpZGl0eVNIQTMoLi4ub3BlcmF0aW9uRGF0YSkpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0aW9uSGFzaDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRPcGVyYXRpb25EYXRhKCk6IChzdHJpbmcgfCBudW1iZXIgfCBCdWZmZXIpW11bXSB7XG4gICAgbGV0IG9wZXJhdGlvbkRhdGE7XG4gICAgY29uc3QgcHJlZml4ID0gdGhpcy5nZXRPcGVyYXRpb25IYXNoUHJlZml4KCk7XG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udHJhY3RBZGRyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wZXJhdGlvbkRhdGEgPSBbXG4gICAgICAgIFsnc3RyaW5nJywgJ2FkZHJlc3MnLCAndWludCcsICdhZGRyZXNzJywgJ3VpbnQnLCAndWludCddLFxuICAgICAgICBbXG4gICAgICAgICAgcHJlZml4LFxuICAgICAgICAgIG5ldyBCTihldGhVdGlsLnN0cmlwSGV4UHJlZml4KHRoaXMuX3RvQWRkcmVzcyksIDE2KSxcbiAgICAgICAgICB0aGlzLl9hbW91bnQsXG4gICAgICAgICAgbmV3IEJOKGV0aFV0aWwuc3RyaXBIZXhQcmVmaXgodGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MpLCAxNiksXG4gICAgICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUsXG4gICAgICAgICAgdGhpcy5fc2VxdWVuY2VJZCxcbiAgICAgICAgXSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRvQWRkcmVzcyA9IHRoaXMuX2NvaW5Vc2VzTm9uUGFja2VkRW5jb2RpbmdGb3JUeERhdGFcbiAgICAgICAgPyB0aGlzLl90b0FkZHJlc3NcbiAgICAgICAgOiBuZXcgQk4oZXRoVXRpbC5zdHJpcEhleFByZWZpeCh0aGlzLl90b0FkZHJlc3MpLCAxNik7XG4gICAgICBvcGVyYXRpb25EYXRhID0gW1xuICAgICAgICBbJ3N0cmluZycsICdhZGRyZXNzJywgJ3VpbnQnLCAnYnl0ZXMnLCAndWludCcsICd1aW50J10sXG4gICAgICAgIFtcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgdG9BZGRyZXNzLFxuICAgICAgICAgIHRoaXMuX2Ftb3VudCxcbiAgICAgICAgICBCdWZmZXIuZnJvbShldGhVdGlsLnBhZFRvRXZlbihldGhVdGlsLnN0cmlwSGV4UHJlZml4KHRoaXMuX2RhdGEpKSB8fCAnJywgJ2hleCcpLFxuICAgICAgICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lLFxuICAgICAgICAgIHRoaXMuX3NlcXVlbmNlSWQsXG4gICAgICAgIF0sXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0aW9uRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3BlcmF0aW9uSGFzaFByZWZpeCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl93YWxsZXRWZXJzaW9uID09PSA0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgPyBgJHt0aGlzLl9jaGFpbklkfS1FUkMyMGAgOiBgJHt0aGlzLl9jaGFpbklkfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcyA/IHRoaXMuZ2V0VG9rZW5PcGVyYXRpb25IYXNoUHJlZml4KCkgOiB0aGlzLmdldE5hdGl2ZU9wZXJhdGlvbkhhc2hQcmVmaXgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByZWZpeCB1c2VkIGluIGdlbmVyYXRpbmcgYW4gb3BlcmF0aW9uIGhhc2ggZm9yIHNlbmRpbmcgdG9rZW5zXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSBzdHJpbmcgcHJlZml4XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VG9rZW5PcGVyYXRpb25IYXNoUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLl9jb2luPy5uZXR3b3JrIGFzIEV0aExpa2VOZXR3b3JrKT8udG9rZW5PcGVyYXRpb25IYXNoUHJlZml4ID8/IGAke3RoaXMuX2NoYWluSWR9LUVSQzIwYCA/PyAnRVJDMjAnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJlZml4IHVzZWQgaW4gZ2VuZXJhdGluZyBhbiBvcGVyYXRpb24gaGFzaCBmb3Igc2VuZGluZyBuYXRpdmUgY29pbnNcbiAgICpcbiAgICogQHJldHVybnMgdGhlIHN0cmluZyBwcmVmaXhcbiAgICovXG4gIHByb3RlY3RlZCBnZXROYXRpdmVPcGVyYXRpb25IYXNoUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLl9jb2luPy5uZXR3b3JrIGFzIEV0aExpa2VOZXR3b3JrKT8ubmF0aXZlQ29pbk9wZXJhdGlvbkhhc2hQcmVmaXggPz8gYCR7dGhpcy5fY2hhaW5JZH1gID8/ICdFVEhFUic7XG4gIH1cblxuICAvKiogUmV0dXJuIGFuIGV4cGlyYXRpb24gdGltZSwgaW4gc2Vjb25kcywgc2V0IHRvIG9uZSBob3VyIGZyb20gbm93XG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGV4cGlyYXRpb24gdGltZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFeHBpcmF0aW9uVGltZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBjdXJyZW50RGF0ZS5zZXRIb3VycyhjdXJyZW50RGF0ZS5nZXRIb3VycygpICsgMSk7XG4gICAgcmV0dXJuIGN1cnJlbnREYXRlLmdldFRpbWUoKSAvIDEwMDA7XG4gIH1cblxuICAvKipcbiAgICogSWYgYSBzaWduaW5nIGtleSBpcyBzZXQgZm9yIHRoaXMgYnVpbGRlciwgcmVjYWxjdWxhdGVzIHRoZSBzaWduYXR1cmVcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHNpZ25hdHVyZSB2YWx1ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFNpZ25hdHVyZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9zaWduS2V5KSB7XG4gICAgICB0aGlzLl9zaWduYXR1cmUgPSB0aGlzLmV0aFNpZ25Nc2dIYXNoKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmUhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGV0aFNpZ25Nc2dIYXNoKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0T3BlcmF0aW9uSGFzaCgpO1xuICAgIGFzc2VydCh0aGlzLl9zaWduS2V5KTtcbiAgICBjb25zdCBrZXlCdWZmZXIgPSBCdWZmZXIuZnJvbShldGhVdGlsLnBhZFRvRXZlbih0aGlzLl9zaWduS2V5KSwgJ2hleCcpO1xuICAgIGlmIChrZXlCdWZmZXIubGVuZ3RoICE9PSAzMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcml2YXRlIGtleSBsZW5ndGggaXMgaW52YWxpZCcpO1xuICAgIH1cbiAgICBjb25zdCBzaWduYXR1cmVJblBhcnRzID0gZXRoVXRpbC5lY3NpZ24oXG4gICAgICBCdWZmZXIuZnJvbShldGhVdGlsLnBhZFRvRXZlbihldGhVdGlsLnN0cmlwSGV4UHJlZml4KGRhdGEpKSwgJ2hleCcpLFxuICAgICAga2V5QnVmZmVyXG4gICAgKTtcblxuICAgIC8vIEFzc2VtYmxlIHN0cmluZ3MgZnJvbSByLCBzIGFuZCB2XG4gICAgY29uc3QgciA9IGV0aFV0aWwuc2V0TGVuZ3RoTGVmdChzaWduYXR1cmVJblBhcnRzLnIsIDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgcyA9IGV0aFV0aWwuc2V0TGVuZ3RoTGVmdChzaWduYXR1cmVJblBhcnRzLnMsIDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgdiA9IGV0aFV0aWwuc3RyaXBIZXhQcmVmaXgoZXRoVXRpbC5pbnRUb0hleChzaWduYXR1cmVJblBhcnRzLnYpKTtcblxuICAgIC8vIENvbmNhdGVuYXRlIHRoZSByLCBzIGFuZCB2IHBhcnRzIHRvIG1ha2UgdGhlIHNpZ25hdHVyZSBzdHJpbmdcbiAgICByZXR1cm4gZXRoVXRpbC5hZGRIZXhQcmVmaXgoci5jb25jYXQocywgdikpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWNvZGVUcmFuc2ZlckRhdGEoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdHJhbnNmZXJEYXRhID0gZGVjb2RlVHJhbnNmZXJEYXRhKGRhdGEpO1xuXG4gICAgdGhpcy5fdG9BZGRyZXNzID0gdHJhbnNmZXJEYXRhLnRvO1xuICAgIHRoaXMuX2Ftb3VudCA9IHRyYW5zZmVyRGF0YS5hbW91bnQ7XG4gICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB0cmFuc2ZlckRhdGEuZXhwaXJlVGltZTtcbiAgICB0aGlzLl9zZXF1ZW5jZUlkID0gdHJhbnNmZXJEYXRhLnNlcXVlbmNlSWQ7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0gdHJhbnNmZXJEYXRhLnNpZ25hdHVyZTtcblxuICAgIGlmICh0cmFuc2ZlckRhdGEuZGF0YSkge1xuICAgICAgdGhpcy5fZGF0YSA9IHRyYW5zZmVyRGF0YS5kYXRhO1xuICAgIH1cblxuICAgIGlmICh0cmFuc2ZlckRhdGEudG9rZW5Db250cmFjdEFkZHJlc3MpIHtcbiAgICAgIHRoaXMuX3Rva2VuQ29udHJhY3RBZGRyZXNzID0gdHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3RBZGRyZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTaWduYXR1cmVEYXRhKCk6IEJ1ZmZlcjxBcnJheUJ1ZmZlcj4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuX3Rva2VuQ29udHJhY3RBZGRyZXNzXG4gICAgICA/IEV0aGVyZXVtQWJpLm1ldGhvZElEKCdzZW5kTXVsdGlTaWdUb2tlbicsIHNlbmRNdWx0aVNpZ1Rva2VuVHlwZXMpXG4gICAgICA6IEV0aGVyZXVtQWJpLm1ldGhvZElEKCdzZW5kTXVsdGlTaWcnLCBzZW5kTXVsdGlTaWdUeXBlcyk7XG4gICAgY29uc3Qgb3BlcmF0aW9uRGF0YSA9IHRoaXMuZ2V0T3BlcmF0aW9uRGF0YSgpO1xuICAgIGNvbnN0IHJhd0VuY29kZWRPcGVyYXRpb25EYXRhID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKC4uLm9wZXJhdGlvbkRhdGEpO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJhd0VuY29kZWRPcGVyYXRpb25EYXRhLFxuICAgICAgQnVmZmVyLmZyb20oW3RoaXMuX2NvaW5Vc2VzTm9uUGFja2VkRW5jb2RpbmdGb3JUeERhdGEgPyAxIDogMF0pLFxuICAgIF0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,54 @@
1
+ import { BaseCoin } from '@bitgo-beta/statics';
2
+ export declare abstract class BaseNFTTransferBuilder {
3
+ protected readonly _EMPTY_HEX_VALUE = "0x";
4
+ protected _fromAddress: string;
5
+ protected _toAddress: string;
6
+ protected _sequenceId: number;
7
+ protected _signKey: string;
8
+ protected _expirationTime: number;
9
+ protected _signature: string;
10
+ protected _data: string;
11
+ protected _tokenContractAddress: string;
12
+ protected _coin: Readonly<BaseCoin>;
13
+ protected _nativeCoinOperationHashPrefix?: string;
14
+ protected _chainId?: string;
15
+ protected _walletVersion?: number;
16
+ abstract build(): string;
17
+ protected constructor(serializedData?: string);
18
+ expirationTime(date: number): this;
19
+ walletVersion(version: number): this;
20
+ key(signKey: string): this;
21
+ contractSequenceId(counter: number): this;
22
+ to(address: string): this;
23
+ from(address: string): this;
24
+ /** Return an expiration time, in seconds, set to one hour from now
25
+ *
26
+ * @returns {number} expiration time
27
+ */
28
+ private static getExpirationTime;
29
+ /**
30
+ * If a signing key is set for this builder, recalculates the signature
31
+ *
32
+ * @returns {string} the signature value
33
+ */
34
+ protected getSignature(): string;
35
+ /**
36
+ * Get the prefix used in generating an operation hash for sending native coins
37
+ *
38
+ * @returns the string prefix
39
+ */
40
+ protected getNativeOperationHashPrefix(): string;
41
+ /**
42
+ * Obtains the proper operation hash to sign either a sendMultiSig data
43
+ * or a sendMultiSigToken data
44
+ *
45
+ * @returns {string} the operation hash
46
+ */
47
+ private getOperationHash;
48
+ /**
49
+ * Signs the Message with the given private key
50
+ * @returns {string} 65 byte long raw signature
51
+ */
52
+ protected ethSignMsgHash(): string;
53
+ }
54
+ //# sourceMappingURL=baseNFTTransferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseNFTTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/transferBuilders/baseNFTTransferBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,8BAAsB,sBAAsB;IAC1C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,QAAQ;IAE3C,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACxC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpC,SAAS,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IAClD,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;aAElB,KAAK,IAAI,MAAM;IAE/B,SAAS,aAAa,cAAc,CAAC,EAAE,MAAM;IAS7C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASlC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKpC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK1B,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASzC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAMhC;;;;OAIG;IACH,SAAS,CAAC,YAAY,IAAI,MAAM;IAUhC;;;;OAIG;IACH,SAAS,CAAC,4BAA4B,IAAI,MAAM;IAOhD;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;OAGG;IACH,SAAS,CAAC,cAAc,IAAI,MAAM;CAOnC"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseNFTTransferBuilder = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ const utils_1 = require("../utils");
6
+ const utils_2 = require("ethers/lib/utils");
7
+ class BaseNFTTransferBuilder {
8
+ constructor(serializedData) {
9
+ this._EMPTY_HEX_VALUE = '0x';
10
+ if (serializedData === undefined) {
11
+ // initialize with default values for non mandatory fields
12
+ this._expirationTime = BaseNFTTransferBuilder.getExpirationTime();
13
+ this._data = this._EMPTY_HEX_VALUE;
14
+ this._signature = this._EMPTY_HEX_VALUE;
15
+ }
16
+ }
17
+ expirationTime(date) {
18
+ if (date > 0) {
19
+ this._signature = this._EMPTY_HEX_VALUE;
20
+ this._expirationTime = date;
21
+ return this;
22
+ }
23
+ throw new sdk_core_1.InvalidParameterValueError('Invalid expiration time');
24
+ }
25
+ walletVersion(version) {
26
+ this._walletVersion = version;
27
+ return this;
28
+ }
29
+ key(signKey) {
30
+ this._signKey = signKey;
31
+ return this;
32
+ }
33
+ contractSequenceId(counter) {
34
+ if (counter >= 0) {
35
+ this._signature = this._EMPTY_HEX_VALUE;
36
+ this._sequenceId = counter;
37
+ return this;
38
+ }
39
+ throw new sdk_core_1.InvalidParameterValueError('Invalid contract sequence id');
40
+ }
41
+ to(address) {
42
+ if ((0, utils_1.isValidEthAddress)(address)) {
43
+ this._signature = this._EMPTY_HEX_VALUE;
44
+ this._toAddress = address;
45
+ return this;
46
+ }
47
+ throw new sdk_core_1.InvalidParameterValueError('Invalid address');
48
+ }
49
+ from(address) {
50
+ if ((0, utils_1.isValidEthAddress)(address)) {
51
+ this._signature = this._EMPTY_HEX_VALUE;
52
+ this._fromAddress = address;
53
+ return this;
54
+ }
55
+ throw new sdk_core_1.InvalidParameterValueError('Invalid address');
56
+ }
57
+ /** Return an expiration time, in seconds, set to one hour from now
58
+ *
59
+ * @returns {number} expiration time
60
+ */
61
+ static getExpirationTime() {
62
+ const currentDate = new Date();
63
+ currentDate.setHours(currentDate.getHours() + 1);
64
+ return currentDate.getTime() / 1000;
65
+ }
66
+ /**
67
+ * If a signing key is set for this builder, recalculates the signature
68
+ *
69
+ * @returns {string} the signature value
70
+ */
71
+ getSignature() {
72
+ if (this._signKey) {
73
+ this._signature = this.ethSignMsgHash();
74
+ }
75
+ if (this._signature === null) {
76
+ throw new sdk_core_1.InvalidSignatureError('Null signature value');
77
+ }
78
+ return this._signature;
79
+ }
80
+ /**
81
+ * Get the prefix used in generating an operation hash for sending native coins
82
+ *
83
+ * @returns the string prefix
84
+ */
85
+ getNativeOperationHashPrefix() {
86
+ if (this._walletVersion === 4) {
87
+ return this._chainId ?? 'ETHER';
88
+ }
89
+ return this._nativeCoinOperationHashPrefix ?? this._chainId ?? 'ETHER';
90
+ }
91
+ /**
92
+ * Obtains the proper operation hash to sign either a sendMultiSig data
93
+ * or a sendMultiSigToken data
94
+ *
95
+ * @returns {string} the operation hash
96
+ */
97
+ getOperationHash() {
98
+ const hash = (0, utils_2.solidityKeccak256)(['string', 'address', 'uint', 'bytes', 'uint', 'uint'], [
99
+ this.getNativeOperationHashPrefix(),
100
+ this._toAddress,
101
+ '0', // dummy amount value
102
+ this._data,
103
+ this._expirationTime,
104
+ this._sequenceId,
105
+ ]);
106
+ return hash;
107
+ }
108
+ /**
109
+ * Signs the Message with the given private key
110
+ * @returns {string} 65 byte long raw signature
111
+ */
112
+ ethSignMsgHash() {
113
+ const signKey = new utils_2.SigningKey('0x'.concat(this._signKey));
114
+ const digest = signKey.signDigest(this.getOperationHash());
115
+ const rawSignature = (0, utils_2.joinSignature)(digest);
116
+ return rawSignature;
117
+ }
118
+ }
119
+ exports.BaseNFTTransferBuilder = BaseNFTTransferBuilder;
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZU5GVFRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJhbnNmZXJCdWlsZGVycy9iYXNlTkZUVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUF5RjtBQUN6RixvQ0FBNkM7QUFDN0MsNENBQWdGO0FBR2hGLE1BQXNCLHNCQUFzQjtJQWtCMUMsWUFBc0IsY0FBdUI7UUFqQjFCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQWtCekMsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsMERBQTBEO1lBQzFELElBQUksQ0FBQyxlQUFlLEdBQUcsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxJQUFJLHFDQUEwQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFlO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFlO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtC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QU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMzRCxNQUFNLFlBQVksR0FBRyxJQUFBLHFCQUFhLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0MsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBOUlELHdEQThJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yLCBJbnZhbGlkU2lnbmF0dXJlRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBpc1ZhbGlkRXRoQWRkcmVzcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGpvaW5TaWduYXR1cmUsIHNvbGlkaXR5S2VjY2FrMjU2LCBTaWduaW5nS2V5IH0gZnJvbSAnZXRoZXJzL2xpYi91dGlscyc7XG5pbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU5GVFRyYW5zZmVyQnVpbGRlciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfRU1QVFlfSEVYX1ZBTFVFID0gJzB4JztcbiAgLy8gZHVtbXkgYWNjb3VudCB2YWx1ZSwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBTZW5kTXVsdGlTaWdcbiAgcHJvdGVjdGVkIF9mcm9tQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3RvQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3NlcXVlbmNlSWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9zaWduS2V5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZXhwaXJhdGlvblRpbWU6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9zaWduYXR1cmU6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9kYXRhOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9jb2luOiBSZWFkb25seTxCYXNlQ29pbj47XG4gIHByb3RlY3RlZCBfbmF0aXZlQ29pbk9wZXJhdGlvbkhhc2hQcmVmaXg/OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfY2hhaW5JZD86IHN0cmluZztcbiAgcHJvdGVjdGVkIF93YWxsZXRWZXJzaW9uPzogbnVtYmVyO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBidWlsZCgpOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNlcmlhbGl6ZWREYXRhPzogc3RyaW5nKSB7XG4gICAgaWYgKHNlcmlhbGl6ZWREYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIG1hbmRhdG9yeSBmaWVsZHNcbiAgICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lID0gQmFzZU5GVFRyYW5zZmVyQnVpbGRlci5nZXRFeHBpcmF0aW9uVGltZSgpO1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICB9XG4gIH1cblxuICBleHBpcmF0aW9uVGltZShkYXRlOiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAoZGF0ZSA+IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lID0gZGF0ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0ludmFsaWQgZXhwaXJhdGlvbiB0aW1lJyk7XG4gIH1cblxuICB3YWxsZXRWZXJzaW9uKHZlcnNpb246IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX3dhbGxldFZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAga2V5KHNpZ25LZXk6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX3NpZ25LZXkgPSBzaWduS2V5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29udHJhY3RTZXF1ZW5jZUlkKGNvdW50ZXI6IG51bWJlcik6IHRoaXMge1xuICAgIGlmIChjb3VudGVyID49IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuX0VNUFRZX0hFWF9WQUxVRTtcbiAgICAgIHRoaXMuX3NlcXVlbmNlSWQgPSBjb3VudGVyO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBjb250cmFjdCBzZXF1ZW5jZSBpZCcpO1xuICB9XG5cbiAgdG8oYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKGlzVmFsaWRFdGhBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aGlzLl9zaWduYXR1cmUgPSB0aGlzLl9FTVBUWV9IRVhfVkFMVUU7XG4gICAgICB0aGlzLl90b0FkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gIH1cblxuICBmcm9tKGFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmIChpc1ZhbGlkRXRoQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhpcy5fc2lnbmF0dXJlID0gdGhpcy5fRU1QVFlfSEVYX1ZBTFVFO1xuICAgICAgdGhpcy5fZnJvbUFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gIH1cblxuICAvKiogUmV0dXJuIGFuIGV4cGlyYXRpb24gdGltZSwgaW4gc2Vjb25kcywgc2V0IHRvIG9uZSBob3VyIGZyb20gbm93XG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGV4cGlyYXRpb24gdGltZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RXhwaXJhdGlvblRpbWUoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY3VycmVudERhdGUuc2V0SG91cnMoY3VycmVudERhdGUuZ2V0SG91cnMoKSArIDEpO1xuICAgIHJldHVybiBjdXJyZW50RGF0ZS5nZXRUaW1lKCkgLyAxMDAwO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGEgc2lnbmluZyBrZXkgaXMgc2V0IGZvciB0aGlzIGJ1aWxkZXIsIHJlY2FsY3VsYXRlcyB0aGUgc2lnbmF0dXJlXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBzaWduYXR1cmUgdmFsdWVcbiAgICovXG4gIHByb3RlY3RlZCBnZXRTaWduYXR1cmUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fc2lnbktleSkge1xuICAgICAgdGhpcy5fc2lnbmF0dXJlID0gdGhpcy5ldGhTaWduTXNnSGFzaCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc2lnbmF0dXJlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFNpZ25hdHVyZUVycm9yKCdOdWxsIHNpZ25hdHVyZSB2YWx1ZScpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJlZml4IHVzZWQgaW4gZ2VuZXJhdGluZyBhbiBvcGVyYXRpb24gaGFzaCBmb3Igc2VuZGluZyBuYXRpdmUgY29pbnNcbiAgICpcbiAgICogQHJldHVybnMgdGhlIHN0cmluZyBwcmVmaXhcbiAgICovXG4gIHByb3RlY3RlZCBnZXROYXRpdmVPcGVyYXRpb25IYXNoUHJlZml4KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX3dhbGxldFZlcnNpb24gPT09IDQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jaGFpbklkID8/ICdFVEhFUic7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9uYXRpdmVDb2luT3BlcmF0aW9uSGFzaFByZWZpeCA/PyB0aGlzLl9jaGFpbklkID8/ICdFVEhFUic7XG4gIH1cblxuICAvKipcbiAgICogT2J0YWlucyB0aGUgcHJvcGVyIG9wZXJhdGlvbiBoYXNoIHRvIHNpZ24gZWl0aGVyIGEgc2VuZE11bHRpU2lnIGRhdGFcbiAgICogb3IgYSBzZW5kTXVsdGlTaWdUb2tlbiBkYXRhXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBvcGVyYXRpb24gaGFzaFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRPcGVyYXRpb25IYXNoKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzaCA9IHNvbGlkaXR5S2VjY2FrMjU2KFxuICAgICAgWydzdHJpbmcnLCAnYWRkcmVzcycsICd1aW50JywgJ2J5dGVzJywgJ3VpbnQnLCAndWludCddLFxuICAgICAgW1xuICAgICAgICB0aGlzLmdldE5hdGl2ZU9wZXJhdGlvbkhhc2hQcmVmaXgoKSxcbiAgICAgICAgdGhpcy5fdG9BZGRyZXNzLFxuICAgICAgICAnMCcsIC8vIGR1bW15IGFtb3VudCB2YWx1ZVxuICAgICAgICB0aGlzLl9kYXRhLFxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uVGltZSxcbiAgICAgICAgdGhpcy5fc2VxdWVuY2VJZCxcbiAgICAgIF1cbiAgICApO1xuICAgIHJldHVybiBoYXNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRoZSBNZXNzYWdlIHdpdGggdGhlIGdpdmVuIHByaXZhdGUga2V5XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IDY1IGJ5dGUgbG9uZyByYXcgc2lnbmF0dXJlXG4gICAqL1xuICBwcm90ZWN0ZWQgZXRoU2lnbk1zZ0hhc2goKTogc3RyaW5nIHtcbiAgICBjb25zdCBzaWduS2V5ID0gbmV3IFNpZ25pbmdLZXkoJzB4Jy5jb25jYXQodGhpcy5fc2lnbktleSkpO1xuICAgIGNvbnN0IGRpZ2VzdCA9IHNpZ25LZXkuc2lnbkRpZ2VzdCh0aGlzLmdldE9wZXJhdGlvbkhhc2goKSk7XG4gICAgY29uc3QgcmF3U2lnbmF0dXJlID0gam9pblNpZ25hdHVyZShkaWdlc3QpO1xuXG4gICAgcmV0dXJuIHJhd1NpZ25hdHVyZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ export * from './baseNFTTransferBuilder';
2
+ export * from './transferBuilderERC1155';
3
+ export * from './transferBuilderERC721';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/transferBuilders/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./baseNFTTransferBuilder"), exports);
18
+ __exportStar(require("./transferBuilderERC1155"), exports);
19
+ __exportStar(require("./transferBuilderERC721"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zZmVyQnVpbGRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJEQUF5QztBQUN6QywyREFBeUM7QUFDekMsMERBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlTkZUVHJhbnNmZXJCdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyRVJDMTE1NSc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zZmVyQnVpbGRlckVSQzcyMSc7XG4iXX0=