@cityofzion/bs-neo3 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/BSNeo3.d.ts CHANGED
@@ -1,22 +1,23 @@
1
- import { BlockchainDataService, BlockchainService, BSClaimable, Account, ExchangeDataService, BDSClaimable, Token, BSWithNameService, Network, TransferParam, BSCalculableFee, NftDataService, BSWithNft, AccountWithDerivationPath, BSWithExplorerService, ExplorerService, BSWithLedger, PartialNetwork } from '@cityofzion/blockchain-service';
2
- import { AvailableNetworkIds } from './constants';
3
- import { LedgerServiceNeo3 } from './LedgerServiceNeo3';
1
+ import { BlockchainDataService, BlockchainService, BSClaimable, Account, ExchangeDataService, BDSClaimable, Token, BSWithNameService, Network, TransferParam, BSCalculableFee, NftDataService, BSWithNft, AccountWithDerivationPath, BSWithExplorerService, ExplorerService, BSWithLedger } from '@cityofzion/blockchain-service';
4
2
  import Transport from '@ledgerhq/hw-transport';
3
+ import { AvailableNetworkIds } from './BSNeo3Helper';
4
+ import { NeonDappKitLedgerServiceNeo3 } from './NeonDappKitLedgerServiceNeo3';
5
5
  export declare class BSNeo3<BSCustomName extends string = string> implements BlockchainService<BSCustomName, AvailableNetworkIds>, BSClaimable, BSWithNameService, BSCalculableFee, BSWithNft, BSWithExplorerService, BSWithLedger {
6
- readonly blockchainName: BSCustomName;
7
- readonly feeToken: Token;
8
- readonly claimToken: Token;
9
- readonly burnToken: Token;
10
- readonly derivationPath: string;
6
+ #private;
7
+ blockchainName: BSCustomName;
8
+ derivationPath: string;
9
+ tokens: Token[];
10
+ feeToken: Token;
11
+ claimToken: Token;
12
+ burnToken: Token;
11
13
  blockchainDataService: BlockchainDataService & BDSClaimable;
12
14
  nftDataService: NftDataService;
13
- ledgerService: LedgerServiceNeo3;
15
+ ledgerService: NeonDappKitLedgerServiceNeo3;
14
16
  exchangeDataService: ExchangeDataService;
15
17
  explorerService: ExplorerService;
16
- tokens: Token[];
17
18
  network: Network<AvailableNetworkIds>;
18
- constructor(blockchainName: BSCustomName, network: PartialNetwork<AvailableNetworkIds>, getLedgerTransport?: (account: Account) => Promise<Transport>);
19
- setNetwork(partialNetwork: PartialNetwork<AvailableNetworkIds>): void;
19
+ constructor(blockchainName: BSCustomName, network?: Network<AvailableNetworkIds>, getLedgerTransport?: (account: Account) => Promise<Transport>);
20
+ setNetwork(network: Network<AvailableNetworkIds>): void;
20
21
  validateAddress(address: string): boolean;
21
22
  validateEncrypted(encryptedKey: string): boolean;
22
23
  validateKey(key: string): boolean;
@@ -30,5 +31,4 @@ export declare class BSNeo3<BSCustomName extends string = string> implements Blo
30
31
  transfer(param: TransferParam): Promise<string>;
31
32
  claim(account: Account, isLedger?: boolean): Promise<string>;
32
33
  resolveNameServiceDomain(domainName: string): Promise<any>;
33
- private buildTransferInvocation;
34
34
  }
package/dist/BSNeo3.js CHANGED
@@ -8,44 +8,43 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
+ };
16
+ var _BSNeo3_instances, _BSNeo3_setTokens, _BSNeo3_buildTransferInvocation;
11
17
  Object.defineProperty(exports, "__esModule", { value: true });
12
18
  exports.BSNeo3 = void 0;
13
19
  const neon_js_1 = require("@cityofzion/neon-js");
14
20
  const neon_dappkit_1 = require("@cityofzion/neon-dappkit");
15
- const RpcBDSNeo3_1 = require("./RpcBDSNeo3");
21
+ const bs_asteroid_sdk_1 = require("@cityofzion/bs-asteroid-sdk");
22
+ const BSNeo3Helper_1 = require("./BSNeo3Helper");
23
+ const NeonDappKitLedgerServiceNeo3_1 = require("./NeonDappKitLedgerServiceNeo3");
16
24
  const DoraBDSNeo3_1 = require("./DoraBDSNeo3");
17
- const constants_1 = require("./constants");
25
+ const RpcBDSNeo3_1 = require("./RpcBDSNeo3");
18
26
  const FlamingoEDSNeo3_1 = require("./FlamingoEDSNeo3");
19
27
  const GhostMarketNDSNeo3_1 = require("./GhostMarketNDSNeo3");
20
- const bs_asteroid_sdk_1 = require("@cityofzion/bs-asteroid-sdk");
21
28
  const DoraESNeo3_1 = require("./DoraESNeo3");
22
- const LedgerServiceNeo3_1 = require("./LedgerServiceNeo3");
23
29
  class BSNeo3 {
24
30
  constructor(blockchainName, network, getLedgerTransport) {
31
+ _BSNeo3_instances.add(this);
32
+ network = network !== null && network !== void 0 ? network : BSNeo3Helper_1.BSNeo3Helper.DEFAULT_NETWORK;
25
33
  this.blockchainName = blockchainName;
26
- this.ledgerService = new LedgerServiceNeo3_1.LedgerServiceNeo3(getLedgerTransport);
27
- this.tokens = constants_1.TOKENS[network.id];
28
- this.derivationPath = constants_1.DERIVATION_PATH;
29
- this.feeToken = this.tokens.find(token => token.symbol === 'GAS');
30
- this.burnToken = this.tokens.find(token => token.symbol === 'NEO');
31
- this.claimToken = this.tokens.find(token => token.symbol === 'GAS');
34
+ this.ledgerService = new NeonDappKitLedgerServiceNeo3_1.NeonDappKitLedgerServiceNeo3(getLedgerTransport);
35
+ this.derivationPath = BSNeo3Helper_1.BSNeo3Helper.DERIVATION_PATH;
32
36
  this.setNetwork(network);
33
37
  }
34
- setNetwork(partialNetwork) {
35
- var _a, _b;
36
- const network = {
37
- id: partialNetwork.id,
38
- name: (_a = partialNetwork.name) !== null && _a !== void 0 ? _a : partialNetwork.id,
39
- url: (_b = partialNetwork.url) !== null && _b !== void 0 ? _b : constants_1.DEFAULT_URL_BY_NETWORK_TYPE[partialNetwork.id],
40
- };
38
+ setNetwork(network) {
39
+ __classPrivateFieldGet(this, _BSNeo3_instances, "m", _BSNeo3_setTokens).call(this, network);
41
40
  this.network = network;
42
- if (network.name === 'custom') {
43
- this.blockchainDataService = new RpcBDSNeo3_1.RPCBDSNeo3(network, this.feeToken, this.claimToken);
41
+ if (DoraBDSNeo3_1.DoraBDSNeo3.SUPPORTED_NETWORKS.includes(network.id)) {
42
+ this.blockchainDataService = new DoraBDSNeo3_1.DoraBDSNeo3(network, this.feeToken, this.claimToken, this.tokens);
44
43
  }
45
44
  else {
46
- this.blockchainDataService = new DoraBDSNeo3_1.DoraBDSNeo3(network, this.feeToken, this.claimToken);
45
+ this.blockchainDataService = new RpcBDSNeo3_1.RPCBDSNeo3(network, this.feeToken, this.claimToken, this.tokens);
47
46
  }
48
- this.exchangeDataService = new FlamingoEDSNeo3_1.FlamingoEDSNeo3(network.id);
47
+ this.exchangeDataService = new FlamingoEDSNeo3_1.FlamingoEDSNeo3(network.id, this.tokens);
49
48
  this.nftDataService = new GhostMarketNDSNeo3_1.GhostMarketNDSNeo3(network);
50
49
  this.explorerService = new DoraESNeo3_1.DoraESNeo3(network.id);
51
50
  }
@@ -107,7 +106,7 @@ class BSNeo3 {
107
106
  rpcAddress: this.network.url,
108
107
  account,
109
108
  });
110
- const invocations = this.buildTransferInvocation(param, account);
109
+ const invocations = __classPrivateFieldGet(this, _BSNeo3_instances, "m", _BSNeo3_buildTransferInvocation).call(this, param, account);
111
110
  const { total } = yield invoker.calculateFee({
112
111
  invocations,
113
112
  signers: [],
@@ -129,7 +128,7 @@ class BSNeo3 {
129
128
  account,
130
129
  signingCallback: ledgerTransport ? this.ledgerService.getSigningCallback(ledgerTransport) : undefined,
131
130
  });
132
- const invocations = this.buildTransferInvocation(param, account);
131
+ const invocations = __classPrivateFieldGet(this, _BSNeo3_instances, "m", _BSNeo3_buildTransferInvocation).call(this, param, account);
133
132
  const transactionHash = yield invoker.invokeFunction({
134
133
  invocations,
135
134
  signers: [],
@@ -163,7 +162,7 @@ class BSNeo3 {
163
162
  const response = yield invoker.testInvoke({
164
163
  invocations: [
165
164
  {
166
- scriptHash: constants_1.NEO_NS_HASH,
165
+ scriptHash: BSNeo3Helper_1.BSNeo3Helper.NEO_NS_HASH,
167
166
  operation: 'ownerOf',
168
167
  args: [{ type: 'String', value: domainName }],
169
168
  },
@@ -179,26 +178,32 @@ class BSNeo3 {
179
178
  return address;
180
179
  });
181
180
  }
182
- buildTransferInvocation({ intent, tipIntent }, account) {
183
- const intents = [intent, ...(tipIntent ? [tipIntent] : [])];
184
- const invocations = intents.map(intent => {
185
- return {
186
- operation: 'transfer',
187
- scriptHash: intent.tokenHash,
188
- args: [
189
- { type: 'Hash160', value: account.address },
190
- { type: 'Hash160', value: intent.receiverAddress },
191
- {
192
- type: 'Integer',
193
- value: intent.tokenDecimals
194
- ? neon_js_1.u.BigInteger.fromDecimal(intent.amount, intent.tokenDecimals).toString()
195
- : intent.amount,
196
- },
197
- { type: 'Any', value: '' },
198
- ],
199
- };
200
- });
201
- return invocations;
202
- }
203
181
  }
204
182
  exports.BSNeo3 = BSNeo3;
183
+ _BSNeo3_instances = new WeakSet(), _BSNeo3_setTokens = function _BSNeo3_setTokens(network) {
184
+ const tokens = BSNeo3Helper_1.BSNeo3Helper.getTokens(network);
185
+ this.tokens = tokens;
186
+ this.feeToken = tokens.find(token => token.symbol === 'GAS');
187
+ this.burnToken = tokens.find(token => token.symbol === 'NEO');
188
+ this.claimToken = tokens.find(token => token.symbol === 'GAS');
189
+ }, _BSNeo3_buildTransferInvocation = function _BSNeo3_buildTransferInvocation({ intent, tipIntent }, account) {
190
+ const intents = [intent, ...(tipIntent ? [tipIntent] : [])];
191
+ const invocations = intents.map(intent => {
192
+ return {
193
+ operation: 'transfer',
194
+ scriptHash: intent.tokenHash,
195
+ args: [
196
+ { type: 'Hash160', value: account.address },
197
+ { type: 'Hash160', value: intent.receiverAddress },
198
+ {
199
+ type: 'Integer',
200
+ value: intent.tokenDecimals
201
+ ? neon_js_1.u.BigInteger.fromDecimal(intent.amount, intent.tokenDecimals).toString()
202
+ : intent.amount,
203
+ },
204
+ { type: 'Any', value: '' },
205
+ ],
206
+ };
207
+ });
208
+ return invocations;
209
+ };
@@ -0,0 +1,21 @@
1
+ import { Network } from '@cityofzion/blockchain-service';
2
+ export type AvailableNetworkIds = 'mainnet' | 'testnet' | 'custom';
3
+ export declare class BSNeo3Helper {
4
+ #private;
5
+ static MAINNET_NETWORK_IDS: AvailableNetworkIds[];
6
+ static TESTNET_NETWORK_IDS: AvailableNetworkIds[];
7
+ static ALL_NETWORK_IDS: AvailableNetworkIds[];
8
+ static MAINNET_NETWORKS: Network<AvailableNetworkIds>[];
9
+ static TESTNET_NETWORKS: Network<AvailableNetworkIds>[];
10
+ static ALL_NETWORKS: Network<AvailableNetworkIds>[];
11
+ static DEFAULT_NETWORK: Network<AvailableNetworkIds>;
12
+ static NEO_NS_HASH: string;
13
+ static DERIVATION_PATH: string;
14
+ static getTokens(network: Network<AvailableNetworkIds>): {
15
+ symbol: string;
16
+ name: string;
17
+ hash: string;
18
+ decimals: number;
19
+ }[];
20
+ static getRpcList(network: Network<AvailableNetworkIds>): string[];
21
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ var _a, _BSNeo3Helper_EXTRA_TOKENS_BY_NETWORK_ID, _BSNeo3Helper_RPC_LIST_BY_NETWORK_ID;
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BSNeo3Helper = void 0;
13
+ const mainnet_json_1 = __importDefault(require("./assets/tokens/mainnet.json"));
14
+ const common_json_1 = __importDefault(require("./assets/tokens/common.json"));
15
+ class BSNeo3Helper {
16
+ static getTokens(network) {
17
+ var _b;
18
+ const extraTokens = (_b = __classPrivateFieldGet(this, _a, "f", _BSNeo3Helper_EXTRA_TOKENS_BY_NETWORK_ID)[network.id]) !== null && _b !== void 0 ? _b : [];
19
+ return [...extraTokens, ...common_json_1.default];
20
+ }
21
+ static getRpcList(network) {
22
+ var _b;
23
+ return (_b = __classPrivateFieldGet(this, _a, "f", _BSNeo3Helper_RPC_LIST_BY_NETWORK_ID)[network.id]) !== null && _b !== void 0 ? _b : [];
24
+ }
25
+ }
26
+ exports.BSNeo3Helper = BSNeo3Helper;
27
+ _a = BSNeo3Helper;
28
+ _BSNeo3Helper_EXTRA_TOKENS_BY_NETWORK_ID = { value: {
29
+ mainnet: mainnet_json_1.default,
30
+ } };
31
+ _BSNeo3Helper_RPC_LIST_BY_NETWORK_ID = { value: {
32
+ mainnet: [
33
+ 'https://mainnet1.neo.coz.io:443',
34
+ 'https://mainnet4.neo.coz.io:443',
35
+ 'http://seed1.neo.org:10332',
36
+ 'http://seed2.neo.org:10332',
37
+ 'https://mainnet2.neo.coz.io:443',
38
+ 'https://mainnet5.neo.coz.io:443',
39
+ 'https://mainnet3.neo.coz.io:443',
40
+ 'https://rpc10.n3.nspcc.ru:10331',
41
+ 'https://neo1-nodes.ghostmarket.io:443',
42
+ ],
43
+ testnet: [
44
+ 'https://testnet1.neo.coz.io:443',
45
+ 'https://testnet2.neo.coz.io:443',
46
+ 'https://rpc.t5.n3.nspcc.ru:20331',
47
+ 'http://seed1t5.neo.org:20332',
48
+ 'http://seed2t5.neo.org:20332',
49
+ 'http://seed3t5.neo.org:20332',
50
+ 'http://seed4t5.neo.org:20332',
51
+ 'http://seed5t5.neo.org:20332',
52
+ ],
53
+ } };
54
+ BSNeo3Helper.MAINNET_NETWORK_IDS = ['mainnet'];
55
+ BSNeo3Helper.TESTNET_NETWORK_IDS = ['testnet'];
56
+ BSNeo3Helper.ALL_NETWORK_IDS = [..._a.MAINNET_NETWORK_IDS, ..._a.TESTNET_NETWORK_IDS];
57
+ BSNeo3Helper.MAINNET_NETWORKS = [
58
+ {
59
+ id: 'mainnet',
60
+ name: 'Mainnet',
61
+ url: __classPrivateFieldGet(_a, _a, "f", _BSNeo3Helper_RPC_LIST_BY_NETWORK_ID)['mainnet'][0],
62
+ },
63
+ ];
64
+ BSNeo3Helper.TESTNET_NETWORKS = [
65
+ {
66
+ id: 'testnet',
67
+ name: 'Testnet',
68
+ url: __classPrivateFieldGet(_a, _a, "f", _BSNeo3Helper_RPC_LIST_BY_NETWORK_ID)['testnet'][0],
69
+ },
70
+ ];
71
+ BSNeo3Helper.ALL_NETWORKS = [..._a.MAINNET_NETWORKS, ..._a.TESTNET_NETWORKS];
72
+ BSNeo3Helper.DEFAULT_NETWORK = _a.MAINNET_NETWORKS[0];
73
+ BSNeo3Helper.NEO_NS_HASH = '0x50ac1c37690cc2cfc594472833cf57505d5f46de';
74
+ BSNeo3Helper.DERIVATION_PATH = "m/44'/888'/0'/0/?";
@@ -1,8 +1,9 @@
1
1
  import { BalanceResponse, ContractResponse, TransactionsByAddressParams, TransactionsByAddressResponse, TransactionResponse, Network, Token } from '@cityofzion/blockchain-service';
2
2
  import { RPCBDSNeo3 } from './RpcBDSNeo3';
3
- import { AvailableNetworkIds } from './constants';
3
+ import { AvailableNetworkIds } from './BSNeo3Helper';
4
4
  export declare class DoraBDSNeo3 extends RPCBDSNeo3 {
5
- constructor(network: Network<AvailableNetworkIds>, feeToken: Token, claimToken: Token);
5
+ static SUPPORTED_NETWORKS: AvailableNetworkIds[];
6
+ constructor(network: Network<AvailableNetworkIds>, feeToken: Token, claimToken: Token, tokens: Token[]);
6
7
  getTransaction(hash: string): Promise<TransactionResponse>;
7
8
  getTransactionsByAddress({ address, page, }: TransactionsByAddressParams): Promise<TransactionsByAddressResponse>;
8
9
  getContract(contractHash: string): Promise<ContractResponse>;
@@ -13,17 +13,13 @@ exports.DoraBDSNeo3 = void 0;
13
13
  const neon_js_1 = require("@cityofzion/neon-js");
14
14
  const api_1 = require("@cityofzion/dora-ts/dist/api");
15
15
  const RpcBDSNeo3_1 = require("./RpcBDSNeo3");
16
- const constants_1 = require("./constants");
17
16
  const NeoRest = new api_1.NeoRESTApi({
18
17
  doraUrl: 'https://dora.coz.io',
19
18
  endpoint: '/api/v2/neo3',
20
19
  });
21
20
  class DoraBDSNeo3 extends RpcBDSNeo3_1.RPCBDSNeo3 {
22
- constructor(network, feeToken, claimToken) {
23
- if (network.id === 'custom') {
24
- throw new Error('DoraBDSNeo3 does not support custom networks');
25
- }
26
- super(network, feeToken, claimToken);
21
+ constructor(network, feeToken, claimToken, tokens) {
22
+ super(network, feeToken, claimToken, tokens);
27
23
  }
28
24
  getTransaction(hash) {
29
25
  var _a, _b;
@@ -127,7 +123,7 @@ class DoraBDSNeo3 extends RpcBDSNeo3_1.RPCBDSNeo3 {
127
123
  }
128
124
  getTokenInfo(tokenHash) {
129
125
  return __awaiter(this, void 0, void 0, function* () {
130
- const localToken = constants_1.TOKENS[this._network.id].find(token => token.hash === tokenHash);
126
+ const localToken = this._tokens.find(token => token.hash === tokenHash);
131
127
  if (localToken)
132
128
  return localToken;
133
129
  if (this._tokenCache.has(tokenHash)) {
@@ -175,3 +171,4 @@ class DoraBDSNeo3 extends RpcBDSNeo3_1.RPCBDSNeo3 {
175
171
  }
176
172
  }
177
173
  exports.DoraBDSNeo3 = DoraBDSNeo3;
174
+ DoraBDSNeo3.SUPPORTED_NETWORKS = ['mainnet', 'testnet'];
@@ -1,8 +1,9 @@
1
1
  import { ExplorerService, BuildNftUrlParams } from '@cityofzion/blockchain-service';
2
- import { AvailableNetworkIds } from './constants';
2
+ import { AvailableNetworkIds } from './BSNeo3Helper';
3
3
  export declare class DoraESNeo3 implements ExplorerService {
4
4
  #private;
5
5
  constructor(networkType: AvailableNetworkIds);
6
6
  buildTransactionUrl(hash: string): string;
7
+ buildContractUrl(contractHash: string): string;
7
8
  buildNftUrl({ contractHash, tokenId }: BuildNftUrlParams): string;
8
9
  }
@@ -13,19 +13,25 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
13
13
  var _DoraESNeo3_networkId;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.DoraESNeo3 = void 0;
16
+ const DoraBDSNeo3_1 = require("./DoraBDSNeo3");
16
17
  class DoraESNeo3 {
17
18
  constructor(networkType) {
18
19
  _DoraESNeo3_networkId.set(this, void 0);
19
20
  __classPrivateFieldSet(this, _DoraESNeo3_networkId, networkType, "f");
20
21
  }
21
22
  buildTransactionUrl(hash) {
22
- if (__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f") === 'custom')
23
- throw new Error('DoraESNeo3 does not support custom network');
23
+ if (!DoraBDSNeo3_1.DoraBDSNeo3.SUPPORTED_NETWORKS.includes(__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")))
24
+ throw new Error('Unsupported network');
24
25
  return `https://dora.coz.io/transaction/neo3/${__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")}/${hash}`;
25
26
  }
27
+ buildContractUrl(contractHash) {
28
+ if (!DoraBDSNeo3_1.DoraBDSNeo3.SUPPORTED_NETWORKS.includes(__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")))
29
+ throw new Error('Unsupported network');
30
+ return `https://dora.coz.io/contract/neo3/${__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")}/${contractHash}`;
31
+ }
26
32
  buildNftUrl({ contractHash, tokenId }) {
27
- if (__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f") === 'custom')
28
- throw new Error('DoraESNeo3 does not support custom network');
33
+ if (!DoraBDSNeo3_1.DoraBDSNeo3.SUPPORTED_NETWORKS.includes(__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")))
34
+ throw new Error('Unsupported network');
29
35
  return `https://dora.coz.io/nft/neo3/${__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")}/${contractHash}/${tokenId}`;
30
36
  }
31
37
  }
@@ -1,8 +1,8 @@
1
- import { CryptoCompareEDS, Currency, ExchangeDataService, GetTokenPriceHistory, TokenPricesHistoryResponse, TokenPricesResponse } from '@cityofzion/blockchain-service';
2
- import { AvailableNetworkIds } from './constants';
1
+ import { CryptoCompareEDS, Currency, ExchangeDataService, GetTokenPriceHistory, Token, TokenPricesHistoryResponse, TokenPricesResponse } from '@cityofzion/blockchain-service';
2
+ import { AvailableNetworkIds } from './BSNeo3Helper';
3
3
  export declare class FlamingoEDSNeo3 extends CryptoCompareEDS implements ExchangeDataService {
4
4
  #private;
5
- constructor(networkId: AvailableNetworkIds);
5
+ constructor(networkId: AvailableNetworkIds, tokens: Token[]);
6
6
  getTokenPrices(currency: Currency): Promise<TokenPricesResponse[]>;
7
7
  getTokenPriceHistory(params: GetTokenPriceHistory): Promise<TokenPricesHistoryResponse[]>;
8
8
  private getCurrencyRatio;
@@ -27,10 +27,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
27
27
  exports.FlamingoEDSNeo3 = void 0;
28
28
  const blockchain_service_1 = require("@cityofzion/blockchain-service");
29
29
  const axios_1 = __importDefault(require("axios"));
30
- const constants_1 = require("./constants");
31
30
  class FlamingoEDSNeo3 extends blockchain_service_1.CryptoCompareEDS {
32
- constructor(networkId) {
33
- super(constants_1.TOKENS[networkId]);
31
+ constructor(networkId, tokens) {
32
+ super(tokens);
34
33
  _FlamingoEDSNeo3_networkId.set(this, void 0);
35
34
  _FlamingoEDSNeo3_axiosInstance.set(this, void 0);
36
35
  __classPrivateFieldSet(this, _FlamingoEDSNeo3_networkId, networkId, "f");
@@ -1,12 +1,13 @@
1
1
  import { NftResponse, NftsResponse, GetNftParam, GetNftsByAddressParams, Network } from '@cityofzion/blockchain-service';
2
- import { AvailableNetworkIds } from './constants';
2
+ import { AvailableNetworkIds } from './BSNeo3Helper';
3
3
  import { RpcNDSNeo3 } from './RpcNDSNeo3';
4
4
  export declare class GhostMarketNDSNeo3 extends RpcNDSNeo3 {
5
5
  #private;
6
+ static CONFIG_BY_NETWORK_ID: Partial<Record<AvailableNetworkIds, {
7
+ url: string;
8
+ chain: string;
9
+ }>>;
6
10
  constructor(network: Network<AvailableNetworkIds>);
7
11
  getNftsByAddress({ address, size, cursor }: GetNftsByAddressParams): Promise<NftsResponse>;
8
12
  getNft({ contractHash, tokenId }: GetNftParam): Promise<NftResponse>;
9
- private treatGhostMarketImage;
10
- private getUrlWithParams;
11
- private parse;
12
13
  }
@@ -22,74 +22,84 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
22
22
  var __importDefault = (this && this.__importDefault) || function (mod) {
23
23
  return (mod && mod.__esModule) ? mod : { "default": mod };
24
24
  };
25
- var _GhostMarketNDSNeo3_networkId;
25
+ var _GhostMarketNDSNeo3_instances, _GhostMarketNDSNeo3_network, _GhostMarketNDSNeo3_treatGhostMarketImage, _GhostMarketNDSNeo3_getUrlWithParams, _GhostMarketNDSNeo3_parse;
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
27
  exports.GhostMarketNDSNeo3 = void 0;
28
28
  const query_string_1 = __importDefault(require("query-string"));
29
29
  const axios_1 = __importDefault(require("axios"));
30
- const constants_1 = require("./constants");
31
30
  const RpcNDSNeo3_1 = require("./RpcNDSNeo3");
32
31
  class GhostMarketNDSNeo3 extends RpcNDSNeo3_1.RpcNDSNeo3 {
33
32
  constructor(network) {
34
33
  super(network);
35
- _GhostMarketNDSNeo3_networkId.set(this, void 0);
36
- __classPrivateFieldSet(this, _GhostMarketNDSNeo3_networkId, network.id, "f");
34
+ _GhostMarketNDSNeo3_instances.add(this);
35
+ _GhostMarketNDSNeo3_network.set(this, void 0);
36
+ __classPrivateFieldSet(this, _GhostMarketNDSNeo3_network, network, "f");
37
37
  }
38
38
  getNftsByAddress({ address, size = 18, cursor }) {
39
39
  var _a;
40
40
  return __awaiter(this, void 0, void 0, function* () {
41
- const url = this.getUrlWithParams({
41
+ const url = __classPrivateFieldGet(this, _GhostMarketNDSNeo3_instances, "m", _GhostMarketNDSNeo3_getUrlWithParams).call(this, {
42
42
  size,
43
43
  owners: [address],
44
44
  cursor: cursor,
45
45
  });
46
46
  const { data } = yield axios_1.default.get(url);
47
47
  const nfts = (_a = data.assets) !== null && _a !== void 0 ? _a : [];
48
- return { nextCursor: data.next, items: nfts.map(this.parse.bind(this)) };
48
+ return { nextCursor: data.next, items: nfts.map(__classPrivateFieldGet(this, _GhostMarketNDSNeo3_instances, "m", _GhostMarketNDSNeo3_parse).bind(this)) };
49
49
  });
50
50
  }
51
51
  getNft({ contractHash, tokenId }) {
52
52
  return __awaiter(this, void 0, void 0, function* () {
53
- const url = this.getUrlWithParams({
53
+ const url = __classPrivateFieldGet(this, _GhostMarketNDSNeo3_instances, "m", _GhostMarketNDSNeo3_getUrlWithParams).call(this, {
54
54
  contract: contractHash,
55
55
  tokenIds: [tokenId],
56
56
  });
57
57
  const { data } = yield axios_1.default.get(url);
58
- return this.parse(data.assets[0]);
58
+ return __classPrivateFieldGet(this, _GhostMarketNDSNeo3_instances, "m", _GhostMarketNDSNeo3_parse).call(this, data.assets[0]);
59
59
  });
60
60
  }
61
- treatGhostMarketImage(srcImage) {
62
- if (!srcImage) {
63
- return;
64
- }
65
- if (srcImage.startsWith('ipfs://')) {
66
- const [, imageId] = srcImage.split('://');
67
- return `https://ghostmarket.mypinata.cloud/ipfs/${imageId}`;
68
- }
69
- return srcImage;
70
- }
71
- getUrlWithParams(params) {
72
- const parameters = query_string_1.default.stringify(Object.assign({ chain: constants_1.GHOSTMARKET_CHAIN_BY_NETWORK_TYPE[__classPrivateFieldGet(this, _GhostMarketNDSNeo3_networkId, "f")] }, params), { arrayFormat: 'bracket' });
73
- return `${constants_1.GHOSTMARKET_URL_BY_NETWORK_TYPE[__classPrivateFieldGet(this, _GhostMarketNDSNeo3_networkId, "f")]}/assets?${parameters}`;
74
- }
75
- parse(data) {
76
- var _a, _b;
77
- const nftResponse = {
78
- collectionImage: this.treatGhostMarketImage((_a = data.collection) === null || _a === void 0 ? void 0 : _a.logoUrl),
79
- id: data.tokenId,
80
- contractHash: data.contract.hash,
81
- symbol: data.contract.symbol,
82
- collectionName: (_b = data.collection) === null || _b === void 0 ? void 0 : _b.name,
83
- image: this.treatGhostMarketImage(data.metadata.mediaUri),
84
- isSVG: String(data.metadata.mediaType).includes('svg+xml'),
85
- name: data.metadata.name,
86
- creator: {
87
- address: data.creator.address,
88
- name: data.creator.offchainName,
89
- },
90
- };
91
- return nftResponse;
92
- }
93
61
  }
94
62
  exports.GhostMarketNDSNeo3 = GhostMarketNDSNeo3;
95
- _GhostMarketNDSNeo3_networkId = new WeakMap();
63
+ _GhostMarketNDSNeo3_network = new WeakMap(), _GhostMarketNDSNeo3_instances = new WeakSet(), _GhostMarketNDSNeo3_treatGhostMarketImage = function _GhostMarketNDSNeo3_treatGhostMarketImage(srcImage) {
64
+ if (!srcImage) {
65
+ return;
66
+ }
67
+ if (srcImage.startsWith('ipfs://')) {
68
+ const [, imageId] = srcImage.split('://');
69
+ return `https://ghostmarket.mypinata.cloud/ipfs/${imageId}`;
70
+ }
71
+ return srcImage;
72
+ }, _GhostMarketNDSNeo3_getUrlWithParams = function _GhostMarketNDSNeo3_getUrlWithParams(params) {
73
+ const config = GhostMarketNDSNeo3.CONFIG_BY_NETWORK_ID[__classPrivateFieldGet(this, _GhostMarketNDSNeo3_network, "f").id];
74
+ if (!config)
75
+ throw new Error('Unsupported network');
76
+ const parameters = query_string_1.default.stringify(Object.assign({ chain: config.chain }, params), { arrayFormat: 'bracket' });
77
+ return `${config.url}/assets?${parameters}`;
78
+ }, _GhostMarketNDSNeo3_parse = function _GhostMarketNDSNeo3_parse(data) {
79
+ var _a, _b;
80
+ const nftResponse = {
81
+ collectionImage: __classPrivateFieldGet(this, _GhostMarketNDSNeo3_instances, "m", _GhostMarketNDSNeo3_treatGhostMarketImage).call(this, (_a = data.collection) === null || _a === void 0 ? void 0 : _a.logoUrl),
82
+ id: data.tokenId,
83
+ contractHash: data.contract.hash,
84
+ symbol: data.contract.symbol,
85
+ collectionName: (_b = data.collection) === null || _b === void 0 ? void 0 : _b.name,
86
+ image: __classPrivateFieldGet(this, _GhostMarketNDSNeo3_instances, "m", _GhostMarketNDSNeo3_treatGhostMarketImage).call(this, data.metadata.mediaUri),
87
+ isSVG: String(data.metadata.mediaType).includes('svg+xml'),
88
+ name: data.metadata.name,
89
+ creator: {
90
+ address: data.creator.address,
91
+ name: data.creator.offchainName,
92
+ },
93
+ };
94
+ return nftResponse;
95
+ };
96
+ GhostMarketNDSNeo3.CONFIG_BY_NETWORK_ID = {
97
+ mainnet: {
98
+ url: 'https://api.ghostmarket.io/api/v2',
99
+ chain: 'n3',
100
+ },
101
+ testnet: {
102
+ url: 'https://api.ghostmarket.io/api/v2',
103
+ chain: 'n3t',
104
+ },
105
+ };
@@ -1,7 +1,7 @@
1
1
  import { Account, LedgerService, LedgerServiceEmitter } from '@cityofzion/blockchain-service';
2
2
  import Transport from '@ledgerhq/hw-transport';
3
3
  import { api } from '@cityofzion/neon-js';
4
- export declare class LedgerServiceNeo3 implements LedgerService {
4
+ export declare class NeonDappKitLedgerServiceNeo3 implements LedgerService {
5
5
  getLedgerTransport?: ((account: Account) => Promise<Transport>) | undefined;
6
6
  emitter: LedgerServiceEmitter;
7
7
  constructor(getLedgerTransport?: ((account: Account) => Promise<Transport>) | undefined);
@@ -12,11 +12,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.LedgerServiceNeo3 = void 0;
15
+ exports.NeonDappKitLedgerServiceNeo3 = void 0;
16
16
  const neon_js_1 = require("@cityofzion/neon-js");
17
17
  const neon_dappkit_1 = require("@cityofzion/neon-dappkit");
18
18
  const events_1 = __importDefault(require("events"));
19
- class LedgerServiceNeo3 {
19
+ class NeonDappKitLedgerServiceNeo3 {
20
20
  constructor(getLedgerTransport) {
21
21
  this.getLedgerTransport = getLedgerTransport;
22
22
  this.emitter = new events_1.default();
@@ -107,4 +107,4 @@ class LedgerServiceNeo3 {
107
107
  return integers.join('');
108
108
  }
109
109
  }
110
- exports.LedgerServiceNeo3 = LedgerServiceNeo3;
110
+ exports.NeonDappKitLedgerServiceNeo3 = NeonDappKitLedgerServiceNeo3;
@@ -1,12 +1,13 @@
1
1
  import { BDSClaimable, BalanceResponse, BlockchainDataService, ContractResponse, Network, RpcResponse, Token, TransactionResponse, TransactionsByAddressParams, TransactionsByAddressResponse } from '@cityofzion/blockchain-service';
2
- import { AvailableNetworkIds } from './constants';
2
+ import { AvailableNetworkIds } from './BSNeo3Helper';
3
3
  export declare class RPCBDSNeo3 implements BlockchainDataService, BDSClaimable {
4
4
  readonly _tokenCache: Map<string, Token>;
5
5
  readonly _feeToken: Token;
6
6
  readonly _claimToken: Token;
7
7
  readonly _network: Network<AvailableNetworkIds>;
8
+ readonly _tokens: Token[];
8
9
  maxTimeToConfirmTransactionInMs: number;
9
- constructor(network: Network<AvailableNetworkIds>, feeToken: Token, claimToken: Token);
10
+ constructor(network: Network<AvailableNetworkIds>, feeToken: Token, claimToken: Token, tokens: Token[]);
10
11
  getTransaction(hash: string): Promise<TransactionResponse>;
11
12
  getTransactionsByAddress(_params: TransactionsByAddressParams): Promise<TransactionsByAddressResponse>;
12
13
  getContract(contractHash: string): Promise<ContractResponse>;
@@ -12,14 +12,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.RPCBDSNeo3 = void 0;
13
13
  const neon_core_1 = require("@cityofzion/neon-core");
14
14
  const neon_dappkit_1 = require("@cityofzion/neon-dappkit");
15
- const constants_1 = require("./constants");
15
+ const BSNeo3Helper_1 = require("./BSNeo3Helper");
16
16
  class RPCBDSNeo3 {
17
- constructor(network, feeToken, claimToken) {
17
+ constructor(network, feeToken, claimToken, tokens) {
18
18
  this._tokenCache = new Map();
19
+ this._tokens = [];
19
20
  this.maxTimeToConfirmTransactionInMs = 1000 * 60 * 2;
20
21
  this._network = network;
21
22
  this._feeToken = feeToken;
22
23
  this._claimToken = claimToken;
24
+ this._tokens = tokens;
23
25
  }
24
26
  getTransaction(hash) {
25
27
  var _a, _b;
@@ -73,7 +75,7 @@ class RPCBDSNeo3 {
73
75
  }
74
76
  getTokenInfo(tokenHash) {
75
77
  return __awaiter(this, void 0, void 0, function* () {
76
- const localToken = constants_1.TOKENS[this._network.id].find(token => token.hash === tokenHash);
78
+ const localToken = this._tokens.find(token => token.hash === tokenHash);
77
79
  if (localToken)
78
80
  return localToken;
79
81
  if (this._tokenCache.has(tokenHash)) {
@@ -158,7 +160,8 @@ class RPCBDSNeo3 {
158
160
  getRpcList() {
159
161
  return __awaiter(this, void 0, void 0, function* () {
160
162
  const list = [];
161
- const promises = constants_1.RPC_LIST_BY_NETWORK_TYPE[this._network.id].map(url => {
163
+ const urls = BSNeo3Helper_1.BSNeo3Helper.getRpcList(this._network);
164
+ const promises = urls.map(url => {
162
165
  // eslint-disable-next-line no-async-promise-executor
163
166
  return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
164
167
  const timeout = setTimeout(() => {
@@ -1,7 +1,8 @@
1
1
  import { GetNftParam, GetNftsByAddressParams, HasTokenParam, Network, NftDataService, NftResponse, NftsResponse } from '@cityofzion/blockchain-service';
2
+ import { AvailableNetworkIds } from './BSNeo3Helper';
2
3
  export declare abstract class RpcNDSNeo3 implements NftDataService {
3
4
  #private;
4
- protected constructor(network: Network);
5
+ protected constructor(network: Network<AvailableNetworkIds>);
5
6
  abstract getNftsByAddress(params: GetNftsByAddressParams): Promise<NftsResponse>;
6
7
  abstract getNft(params: GetNftParam): Promise<NftResponse>;
7
8
  hasToken({ contractHash, address }: HasTokenParam): Promise<boolean>;