@imtbl/sdk 0.0.1-alpha.1 → 0.0.1-alpha.3

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.
package/dist/provider.js CHANGED
@@ -1,6 +1,6 @@
1
+ import { Config, TransfersApi, OrdersApi, UsersApi, Contracts, TradesApi, ExchangesApi, WithdrawalsApi, MintsApi, DepositsApi, EncodingApi, TokensApi } from '@imtbl/core-sdk';
1
2
  import BN from 'bn.js';
2
3
  import * as encUtils from 'enc-utils';
3
- import { Config, TransfersApi, OrdersApi, UsersApi, Contracts, TradesApi, ExchangesApi, WithdrawalsApi, MintsApi, DepositsApi, EncodingApi, TokensApi } from '@imtbl/core-sdk';
4
4
  import { parseUnits } from '@ethersproject/units';
5
5
  import { BigNumber } from '@ethersproject/bignumber';
6
6
  import { ethers } from 'ethers';
@@ -78,18 +78,9 @@ function convertToSignableToken(token) {
78
78
 
79
79
  var Environment;
80
80
  (function (Environment) {
81
- Environment["DEVELOPMENT"] = "development";
82
- Environment["SANDBOX"] = "sandbox";
83
81
  Environment["PRODUCTION"] = "production";
82
+ Environment["SANDBOX"] = "sandbox";
84
83
  })(Environment || (Environment = {}));
85
- ({
86
- ...Config.PRODUCTION,
87
- env: Environment.PRODUCTION,
88
- });
89
- ({
90
- ...Config.SANDBOX,
91
- env: Environment.SANDBOX,
92
- });
93
84
 
94
85
  function isChainValid(chainID, config) {
95
86
  return chainID === config.ethConfiguration.chainID;
@@ -101,9 +92,9 @@ async function validateChain(signer, config) {
101
92
  }
102
93
 
103
94
  async function transfer({ signers: { ethSigner, starkExSigner }, request, config, }) {
104
- await validateChain(ethSigner, config.getStarkExConfig());
95
+ await validateChain(ethSigner, config.immutableXConfig);
105
96
  const ethAddress = await ethSigner.getAddress();
106
- const transfersApi = new TransfersApi(config.getStarkExConfig().apiConfiguration);
97
+ const transfersApi = new TransfersApi(config.immutableXConfig.apiConfiguration);
107
98
  const transferAmount = request.type === 'ERC721' ? '1' : request.amount;
108
99
  const signableResult = await transfersApi.getSignableTransferV1({
109
100
  getSignableTransferRequest: {
@@ -141,9 +132,9 @@ async function transfer({ signers: { ethSigner, starkExSigner }, request, config
141
132
  };
142
133
  }
143
134
  async function batchTransfer({ signers: { ethSigner, starkExSigner }, request, config, }) {
144
- await validateChain(ethSigner, config.getStarkExConfig());
135
+ await validateChain(ethSigner, config.immutableXConfig);
145
136
  const ethAddress = await ethSigner.getAddress();
146
- const transfersApi = new TransfersApi(config.getStarkExConfig().apiConfiguration);
137
+ const transfersApi = new TransfersApi(config.immutableXConfig.apiConfiguration);
147
138
  const signableRequests = request.map((nftTransfer) => {
148
139
  return {
149
140
  amount: '1',
@@ -197,9 +188,9 @@ async function batchTransfer({ signers: { ethSigner, starkExSigner }, request, c
197
188
  }
198
189
 
199
190
  async function createOrder({ signers, request, config, }) {
200
- await validateChain(signers.ethSigner, config.getStarkExConfig());
191
+ await validateChain(signers.ethSigner, config.immutableXConfig);
201
192
  const ethAddress = await signers.ethSigner.getAddress();
202
- const ordersApi = new OrdersApi(config.getStarkExConfig().apiConfiguration);
193
+ const ordersApi = new OrdersApi(config.immutableXConfig.apiConfiguration);
203
194
  const amountSell = request.sell.type === 'ERC721' ? '1' : request.sell.amount;
204
195
  const amountBuy = request.buy.type === 'ERC721' ? '1' : request.buy.amount;
205
196
  const getSignableOrderRequest = {
@@ -242,7 +233,7 @@ async function createOrder({ signers, request, config, }) {
242
233
  };
243
234
  }
244
235
  async function cancelOrder({ signers, request, config, }) {
245
- const ordersApi = new OrdersApi(config.getStarkExConfig().apiConfiguration);
236
+ const ordersApi = new OrdersApi(config.immutableXConfig.apiConfiguration);
246
237
  const getSignableCancelOrderResponse = await ordersApi.getSignableCancelOrder({
247
238
  getSignableCancelOrderRequest: {
248
239
  order_id: request.order_id,
@@ -268,8 +259,8 @@ async function cancelOrder({ signers, request, config, }) {
268
259
  }
269
260
 
270
261
  async function registerOffchain(signers, config) {
271
- await validateChain(signers.ethSigner, config.getStarkExConfig());
272
- const usersApi = new UsersApi(config.getStarkExConfig().apiConfiguration);
262
+ await validateChain(signers.ethSigner, config.immutableXConfig);
263
+ const usersApi = new UsersApi(config.immutableXConfig.apiConfiguration);
273
264
  const userAddress = await signers.ethSigner.getAddress();
274
265
  const starkPublicKey = await signers.starkExSigner.getAddress();
275
266
  const signableResult = await usersApi.getSignableRegistrationOffchain({
@@ -292,8 +283,8 @@ async function registerOffchain(signers, config) {
292
283
  return registeredUser.data;
293
284
  }
294
285
  async function isRegisteredOnChain(starkPublicKey, ethSigner, config) {
295
- await validateChain(ethSigner, config.getStarkExConfig());
296
- const registrationContract = Contracts.Registration.connect(config.getStarkExConfig().ethConfiguration.registrationContractAddress, ethSigner);
286
+ await validateChain(ethSigner, config.immutableXConfig);
287
+ const registrationContract = Contracts.Registration.connect(config.immutableXConfig.ethConfiguration.registrationContractAddress, ethSigner);
297
288
  try {
298
289
  return await registrationContract.isRegistered(starkPublicKey);
299
290
  }
@@ -368,10 +359,10 @@ async function getEncodeAssetInfo(assetType, tokenType, config, tokenData) {
368
359
 
369
360
  async function executeRegisterAndWithdrawERC20({ ethSigner, assetType, starkPublicKey, config, }) {
370
361
  const etherKey = await ethSigner.getAddress();
371
- const starkExConfig = config.getStarkExConfig();
362
+ const starkExConfig = config.immutableXConfig;
372
363
  const usersApi = new UsersApi(starkExConfig.apiConfiguration);
373
364
  const signableResult = await getSignableRegistrationOnchain(etherKey, starkPublicKey, usersApi);
374
- const contract = Contracts.Registration.connect(config.getStarkExConfig().ethConfiguration.registrationContractAddress, ethSigner);
365
+ const contract = Contracts.Registration.connect(config.immutableXConfig.ethConfiguration.registrationContractAddress, ethSigner);
375
366
  const populatedTransaction = await contract.populateTransaction.registerAndWithdraw(etherKey, starkPublicKey, signableResult.operator_signature, assetType);
376
367
  return ethSigner.sendTransaction(populatedTransaction);
377
368
  }
@@ -381,8 +372,8 @@ async function executeWithdrawERC20(ethSigner, assetType, starkPublicKey, config
381
372
  return ethSigner.sendTransaction(populatedTransaction);
382
373
  }
383
374
  async function completeERC20WithdrawalAction({ ethSigner, starkPublicKey, token, config, }) {
384
- await validateChain(ethSigner, config.getStarkExConfig());
385
- const starkExConfig = config.getStarkExConfig();
375
+ await validateChain(ethSigner, config.immutableXConfig);
376
+ const starkExConfig = config.immutableXConfig;
386
377
  const assetType = await getEncodeAssetInfo('asset', 'ERC20', starkExConfig, {
387
378
  token_address: token.tokenAddress,
388
379
  });
@@ -419,7 +410,7 @@ function getMintingBlob(token) {
419
410
  return encUtils.sanitizeHex(encUtils.utf8ToHex(`{${id}}:{${blueprint}}`));
420
411
  }
421
412
  async function completeMintableERC721Withdrawal(ethSigner, starkPublicKey, token, config) {
422
- const starkExConfig = config.getStarkExConfig();
413
+ const starkExConfig = config.immutableXConfig;
423
414
  const assetType = await getEncodeAssetInfo('mintable-asset', 'ERC721', starkExConfig, {
424
415
  id: token.data.id,
425
416
  token_address: token.data.tokenAddress,
@@ -448,7 +439,7 @@ async function executeWithdrawERC721(ethSigner, assetType, starkPublicKey, token
448
439
  return ethSigner.sendTransaction(populatedTransaction);
449
440
  }
450
441
  async function completeERC721Withdrawal(ethSigner, starkPublicKey, token, config) {
451
- const starkExConfig = config.getStarkExConfig();
442
+ const starkExConfig = config.immutableXConfig;
452
443
  const assetType = await getEncodeAssetInfo('asset', 'ERC721', starkExConfig, {
453
444
  token_id: token.tokenId,
454
445
  token_address: token.tokenAddress,
@@ -462,10 +453,10 @@ async function completeERC721Withdrawal(ethSigner, starkPublicKey, token, config
462
453
  }
463
454
  }
464
455
  async function completeERC721WithdrawalAction({ ethSigner, starkPublicKey, token, config, }) {
465
- await validateChain(ethSigner, config.getStarkExConfig());
456
+ await validateChain(ethSigner, config.immutableXConfig);
466
457
  const tokenAddress = token.tokenAddress;
467
458
  const tokenId = token.tokenId;
468
- const starkExConfig = config.getStarkExConfig();
459
+ const starkExConfig = config.immutableXConfig;
469
460
  const mintsApi = new MintsApi(starkExConfig.apiConfiguration);
470
461
  return await mintsApi
471
462
  .getMintableTokenDetailsByClientTokenId({
@@ -503,8 +494,8 @@ async function executeWithdrawEth(ethSigner, assetType, starkPublicKey, config)
503
494
  return ethSigner.sendTransaction(populatedTransaction);
504
495
  }
505
496
  async function completeEthWithdrawalAction({ ethSigner, starkPublicKey, config, }) {
506
- await validateChain(ethSigner, config.getStarkExConfig());
507
- const starkExConfig = config.getStarkExConfig();
497
+ await validateChain(ethSigner, config.immutableXConfig);
498
+ const starkExConfig = config.immutableXConfig;
508
499
  const assetType = await getEncodeAssetInfo('asset', 'ETH', starkExConfig);
509
500
  const isRegistered = await isRegisteredOnChain(starkPublicKey, ethSigner, config);
510
501
  if (!isRegistered) {
@@ -516,10 +507,9 @@ async function completeEthWithdrawalAction({ ethSigner, starkPublicKey, config,
516
507
  }
517
508
 
518
509
  async function prepareWithdrawal({ signers, withdrawal, config, }) {
519
- const starkExConfig = config.getStarkExConfig();
520
510
  return prepareWithdrawalAction({
521
511
  signers,
522
- config: starkExConfig,
512
+ config: config.immutableXConfig,
523
513
  ...withdrawal,
524
514
  });
525
515
  }
@@ -545,9 +535,9 @@ async function completeWithdrawal({ signers: { ethSigner }, starkPublicKey, toke
545
535
  }
546
536
 
547
537
  async function createTrade({ signers: { ethSigner, starkExSigner }, request, config, }) {
548
- await validateChain(ethSigner, config.getStarkExConfig());
538
+ await validateChain(ethSigner, config.immutableXConfig);
549
539
  const ethAddress = await ethSigner.getAddress();
550
- const tradesApi = new TradesApi(config.getStarkExConfig().apiConfiguration);
540
+ const tradesApi = new TradesApi(config.immutableXConfig.apiConfiguration);
551
541
  const signableResult = await tradesApi.getSignableTrade({
552
542
  getSignableTradeRequest: {
553
543
  user: ethAddress,
@@ -582,13 +572,13 @@ async function createTrade({ signers: { ethSigner, starkExSigner }, request, con
582
572
  }
583
573
 
584
574
  async function depositEth({ signers: { ethSigner }, deposit, config, }) {
585
- await validateChain(ethSigner, config.getStarkExConfig());
575
+ await validateChain(ethSigner, config.immutableXConfig);
586
576
  const user = await ethSigner.getAddress();
587
577
  const data = {
588
578
  decimals: 18,
589
579
  };
590
580
  const amount = parseUnits(deposit.amount, 'wei');
591
- const starkExConfig = config.getStarkExConfig();
581
+ const starkExConfig = config.immutableXConfig;
592
582
  const depositsApi = new DepositsApi(starkExConfig.apiConfiguration);
593
583
  const encodingApi = new EncodingApi(starkExConfig.apiConfiguration);
594
584
  const usersApi = new UsersApi(starkExConfig.apiConfiguration);
@@ -636,8 +626,8 @@ async function executeDepositEth(ethSigner, amount, assetType, starkPublicKey, v
636
626
  }
637
627
 
638
628
  async function depositERC20({ signers: { ethSigner }, deposit, config, }) {
639
- await validateChain(ethSigner, config.getStarkExConfig());
640
- const { apiConfiguration, ethConfiguration } = config.getStarkExConfig();
629
+ await validateChain(ethSigner, config.immutableXConfig);
630
+ const { apiConfiguration, ethConfiguration } = config.immutableXConfig;
641
631
  const user = await ethSigner.getAddress();
642
632
  const tokensApi = new TokensApi(apiConfiguration);
643
633
  const depositsApi = new DepositsApi(apiConfiguration);
@@ -704,12 +694,12 @@ async function executeRegisterAndDepositERC20(ethSigner, quantizedAmount, assetT
704
694
  }
705
695
 
706
696
  async function depositERC721({ signers: { ethSigner }, deposit, config, }) {
707
- await validateChain(ethSigner, config.getStarkExConfig());
697
+ await validateChain(ethSigner, config.immutableXConfig);
708
698
  const user = await ethSigner.getAddress();
709
- const starkExConfig = config.getStarkExConfig();
710
- const depositsApi = new DepositsApi(starkExConfig.apiConfiguration);
711
- const encodingApi = new EncodingApi(starkExConfig.apiConfiguration);
712
- const usersApi = new UsersApi(starkExConfig.apiConfiguration);
699
+ const { immutableXConfig } = config;
700
+ const depositsApi = new DepositsApi(immutableXConfig.apiConfiguration);
701
+ const encodingApi = new EncodingApi(immutableXConfig.apiConfiguration);
702
+ const usersApi = new UsersApi(immutableXConfig.apiConfiguration);
713
703
  const data = {
714
704
  token_address: deposit.tokenAddress,
715
705
  token_id: deposit.tokenId,
@@ -745,18 +735,18 @@ async function depositERC721({ signers: { ethSigner }, deposit, config, }) {
745
735
  const isRegistered = await isRegisteredOnChain(starkPublicKey, ethSigner, config);
746
736
  // Approve whether an amount of token from an account can be spent by a third-party account
747
737
  const tokenContract = Contracts.IERC721.connect(deposit.tokenAddress, ethSigner);
748
- const operator = starkExConfig.ethConfiguration.coreContractAddress;
738
+ const operator = immutableXConfig.ethConfiguration.coreContractAddress;
749
739
  const isApprovedForAll = await tokenContract.isApprovedForAll(user, operator);
750
740
  if (!isApprovedForAll) {
751
741
  await tokenContract.setApprovalForAll(operator, true);
752
742
  }
753
743
  if (!isRegistered) {
754
744
  const signableResult = await getSignableRegistrationOnchain(user, starkPublicKey, usersApi);
755
- const coreContract = Contracts.Core.connect(starkExConfig.ethConfiguration.coreContractAddress, ethSigner);
745
+ const coreContract = Contracts.Core.connect(immutableXConfig.ethConfiguration.coreContractAddress, ethSigner);
756
746
  // Note: proxy registration contract registerAndDepositNft method is not used as it currently fails erc721 transfer ownership check
757
747
  await coreContract.registerUser(user, starkPublicKey, signableResult.operator_signature);
758
748
  }
759
- return executeDepositERC721(ethSigner, deposit.tokenId, assetType, starkPublicKey, vaultId, starkExConfig);
749
+ return executeDepositERC721(ethSigner, deposit.tokenId, assetType, starkPublicKey, vaultId, immutableXConfig);
760
750
  }
761
751
  async function executeDepositERC721(ethSigner, tokenId, assetType, starkPublicKey, vaultId, config) {
762
752
  const coreContract = Contracts.Core.connect(config.ethConfiguration.coreContractAddress, ethSigner);
@@ -776,8 +766,8 @@ async function deposit({ signers, deposit, config }) {
776
766
  }
777
767
 
778
768
  async function exchangeTransfer({ signers, request, config, }) {
779
- await validateChain(signers.ethSigner, config.getStarkExConfig());
780
- const exchangeApi = new ExchangesApi(config.getStarkExConfig().apiConfiguration);
769
+ await validateChain(signers.ethSigner, config.immutableXConfig);
770
+ const exchangeApi = new ExchangesApi(config.immutableXConfig.apiConfiguration);
781
771
  const ethAddress = await signers.ethSigner.getAddress();
782
772
  const transferAmount = request.amount;
783
773
  const signableResult = await exchangeApi.getExchangeSignableTransfer({
@@ -1000,7 +990,6 @@ class ImxSigner {
1000
990
 
1001
991
  const IMX_WALLET_IFRAME_ID = 'imx-wallet-app';
1002
992
  const IMX_WALLET_IFRAME_HOSTS = {
1003
- [Environment.DEVELOPMENT]: 'http://localhost:8080',
1004
993
  [Environment.SANDBOX]: 'https://wallets.sandbox.immutable.com',
1005
994
  [Environment.PRODUCTION]: 'https://wallets.immutable.com',
1006
995
  };
@@ -1098,12 +1087,11 @@ class MetaMaskIMXProvider extends GenericIMXProvider {
1098
1087
  super(config, ethSigner, starkExSigner);
1099
1088
  }
1100
1089
  static async connect(config) {
1101
- const starkExConfig = config.getStarkExConfig();
1102
1090
  return await withProviderError(async () => {
1103
1091
  const metaMaskProvider = await connect$1({
1104
- chainID: starkExConfig.ethConfiguration.chainID,
1092
+ chainID: config.immutableXConfig.ethConfiguration.chainID,
1105
1093
  });
1106
- this.imxSigner = await connect(metaMaskProvider, starkExConfig.env);
1094
+ this.imxSigner = await connect(metaMaskProvider, config.baseConfig.environment);
1107
1095
  return new MetaMaskIMXProvider(config, metaMaskProvider.getSigner(), this.imxSigner);
1108
1096
  }, { type: ProviderErrorType.WALLET_CONNECTION_ERROR });
1109
1097
  }
@@ -1125,4 +1113,27 @@ class MetaMaskIMXProvider extends GenericIMXProvider {
1125
1113
  }
1126
1114
  }
1127
1115
 
1128
- export { GenericIMXProvider, MetaMaskIMXProvider };
1116
+ class ProviderConfiguration {
1117
+ immutableXConfig;
1118
+ baseConfig;
1119
+ constructor({ baseConfig, overrides }) {
1120
+ this.baseConfig = baseConfig;
1121
+ if (overrides) {
1122
+ this.immutableXConfig = overrides.immutableXConfig;
1123
+ }
1124
+ else {
1125
+ switch (baseConfig.environment) {
1126
+ case Environment.SANDBOX: {
1127
+ this.immutableXConfig = Config.SANDBOX;
1128
+ break;
1129
+ }
1130
+ case Environment.PRODUCTION: {
1131
+ this.immutableXConfig = Config.PRODUCTION;
1132
+ break;
1133
+ }
1134
+ }
1135
+ }
1136
+ }
1137
+ }
1138
+
1139
+ export { GenericIMXProvider, MetaMaskIMXProvider, ProviderConfiguration };