@cityofzion/bs-neo3 0.14.3 → 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,21 +1,23 @@
1
- import { BlockchainDataService, BlockchainService, BSClaimable, Account, ExchangeDataService, BDSClaimable, Token, BSWithNameService, Network, PartialBy, TransferParam, BSCalculableFee, NftDataService, BSWithNft, AccountWithDerivationPath, BSWithExplorerService, ExplorerService, BSWithLedger } from '@cityofzion/blockchain-service';
2
- 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';
3
2
  import Transport from '@ledgerhq/hw-transport';
4
- export declare class BSNeo3<BSCustomName extends string = string> implements BlockchainService, BSClaimable, BSWithNameService, BSCalculableFee, BSWithNft, BSWithExplorerService, BSWithLedger {
5
- readonly blockchainName: BSCustomName;
6
- readonly feeToken: Token;
7
- readonly claimToken: Token;
8
- readonly burnToken: Token;
9
- readonly derivationPath: string;
3
+ import { AvailableNetworkIds } from './BSNeo3Helper';
4
+ import { NeonDappKitLedgerServiceNeo3 } from './NeonDappKitLedgerServiceNeo3';
5
+ export declare class BSNeo3<BSCustomName extends string = string> implements BlockchainService<BSCustomName, AvailableNetworkIds>, BSClaimable, BSWithNameService, BSCalculableFee, BSWithNft, BSWithExplorerService, BSWithLedger {
6
+ #private;
7
+ blockchainName: BSCustomName;
8
+ derivationPath: string;
9
+ tokens: Token[];
10
+ feeToken: Token;
11
+ claimToken: Token;
12
+ burnToken: Token;
10
13
  blockchainDataService: BlockchainDataService & BDSClaimable;
11
14
  nftDataService: NftDataService;
12
- ledgerService: LedgerServiceNeo3;
15
+ ledgerService: NeonDappKitLedgerServiceNeo3;
13
16
  exchangeDataService: ExchangeDataService;
14
17
  explorerService: ExplorerService;
15
- tokens: Token[];
16
- network: Network;
17
- constructor(blockchainName: BSCustomName, network: PartialBy<Network, 'url'>, getLedgerTransport?: (account: Account) => Promise<Transport>);
18
- setNetwork(param: PartialBy<Network, 'url'>): void;
18
+ network: Network<AvailableNetworkIds>;
19
+ constructor(blockchainName: BSCustomName, network?: Network<AvailableNetworkIds>, getLedgerTransport?: (account: Account) => Promise<Transport>);
20
+ setNetwork(network: Network<AvailableNetworkIds>): void;
19
21
  validateAddress(address: string): boolean;
20
22
  validateEncrypted(encryptedKey: string): boolean;
21
23
  validateKey(key: string): boolean;
@@ -29,5 +31,4 @@ export declare class BSNeo3<BSCustomName extends string = string> implements Blo
29
31
  transfer(param: TransferParam): Promise<string>;
30
32
  claim(account: Account, isLedger?: boolean): Promise<string>;
31
33
  resolveNameServiceDomain(domainName: string): Promise<any>;
32
- private buildTransferInvocation;
33
34
  }
package/dist/BSNeo3.js CHANGED
@@ -8,45 +8,45 @@ 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.type];
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(param) {
35
- var _a;
36
- const network = {
37
- type: param.type,
38
- url: (_a = param.url) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_URL_BY_NETWORK_TYPE[param.type],
39
- };
38
+ setNetwork(network) {
39
+ __classPrivateFieldGet(this, _BSNeo3_instances, "m", _BSNeo3_setTokens).call(this, network);
40
40
  this.network = network;
41
- if (network.type === 'custom') {
42
- 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);
43
43
  }
44
44
  else {
45
- 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);
46
46
  }
47
- this.exchangeDataService = new FlamingoEDSNeo3_1.FlamingoEDSNeo3(network.type);
47
+ this.exchangeDataService = new FlamingoEDSNeo3_1.FlamingoEDSNeo3(network.id, this.tokens);
48
48
  this.nftDataService = new GhostMarketNDSNeo3_1.GhostMarketNDSNeo3(network);
49
- this.explorerService = new DoraESNeo3_1.DoraESNeo3(network.type);
49
+ this.explorerService = new DoraESNeo3_1.DoraESNeo3(network.id);
50
50
  }
51
51
  validateAddress(address) {
52
52
  return neon_js_1.wallet.isAddress(address, 53);
@@ -106,7 +106,7 @@ class BSNeo3 {
106
106
  rpcAddress: this.network.url,
107
107
  account,
108
108
  });
109
- const invocations = this.buildTransferInvocation(param, account);
109
+ const invocations = __classPrivateFieldGet(this, _BSNeo3_instances, "m", _BSNeo3_buildTransferInvocation).call(this, param, account);
110
110
  const { total } = yield invoker.calculateFee({
111
111
  invocations,
112
112
  signers: [],
@@ -128,7 +128,7 @@ class BSNeo3 {
128
128
  account,
129
129
  signingCallback: ledgerTransport ? this.ledgerService.getSigningCallback(ledgerTransport) : undefined,
130
130
  });
131
- const invocations = this.buildTransferInvocation(param, account);
131
+ const invocations = __classPrivateFieldGet(this, _BSNeo3_instances, "m", _BSNeo3_buildTransferInvocation).call(this, param, account);
132
132
  const transactionHash = yield invoker.invokeFunction({
133
133
  invocations,
134
134
  signers: [],
@@ -162,7 +162,7 @@ class BSNeo3 {
162
162
  const response = yield invoker.testInvoke({
163
163
  invocations: [
164
164
  {
165
- scriptHash: constants_1.NEO_NS_HASH,
165
+ scriptHash: BSNeo3Helper_1.BSNeo3Helper.NEO_NS_HASH,
166
166
  operation: 'ownerOf',
167
167
  args: [{ type: 'String', value: domainName }],
168
168
  },
@@ -178,26 +178,32 @@ class BSNeo3 {
178
178
  return address;
179
179
  });
180
180
  }
181
- buildTransferInvocation({ intent, tipIntent }, account) {
182
- const intents = [intent, ...(tipIntent ? [tipIntent] : [])];
183
- const invocations = intents.map(intent => {
184
- return {
185
- operation: 'transfer',
186
- scriptHash: intent.tokenHash,
187
- args: [
188
- { type: 'Hash160', value: account.address },
189
- { type: 'Hash160', value: intent.receiverAddress },
190
- {
191
- type: 'Integer',
192
- value: intent.tokenDecimals
193
- ? neon_js_1.u.BigInteger.fromDecimal(intent.amount, intent.tokenDecimals).toString()
194
- : intent.amount,
195
- },
196
- { type: 'Any', value: '' },
197
- ],
198
- };
199
- });
200
- return invocations;
201
- }
202
181
  }
203
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,7 +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 './BSNeo3Helper';
3
4
  export declare class DoraBDSNeo3 extends RPCBDSNeo3 {
4
- constructor(network: Network, feeToken: Token, claimToken: Token);
5
+ static SUPPORTED_NETWORKS: AvailableNetworkIds[];
6
+ constructor(network: Network<AvailableNetworkIds>, feeToken: Token, claimToken: Token, tokens: Token[]);
5
7
  getTransaction(hash: string): Promise<TransactionResponse>;
6
8
  getTransactionsByAddress({ address, page, }: TransactionsByAddressParams): Promise<TransactionsByAddressResponse>;
7
9
  getContract(contractHash: string): Promise<ContractResponse>;
@@ -13,23 +13,19 @@ 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.type === '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;
30
26
  return __awaiter(this, void 0, void 0, function* () {
31
27
  try {
32
- const data = yield NeoRest.transaction(hash, this._network.type);
28
+ const data = yield NeoRest.transaction(hash, this._network.id);
33
29
  return {
34
30
  block: data.block,
35
31
  time: Number(data.time),
@@ -48,7 +44,7 @@ class DoraBDSNeo3 extends RpcBDSNeo3_1.RPCBDSNeo3 {
48
44
  }
49
45
  getTransactionsByAddress({ address, page = 1, }) {
50
46
  return __awaiter(this, void 0, void 0, function* () {
51
- const data = yield NeoRest.addressTXFull(address, page, this._network.type);
47
+ const data = yield NeoRest.addressTXFull(address, page, this._network.id);
52
48
  const promises = data.items.map((item) => __awaiter(this, void 0, void 0, function* () {
53
49
  var _a, _b;
54
50
  const transferPromises = [];
@@ -113,7 +109,7 @@ class DoraBDSNeo3 extends RpcBDSNeo3_1.RPCBDSNeo3 {
113
109
  var _a, _b;
114
110
  return __awaiter(this, void 0, void 0, function* () {
115
111
  try {
116
- const data = yield NeoRest.contract(contractHash, this._network.type);
112
+ const data = yield NeoRest.contract(contractHash, this._network.id);
117
113
  return {
118
114
  hash: data.hash,
119
115
  methods: (_b = (_a = data.manifest.abi) === null || _a === void 0 ? void 0 : _a.methods) !== null && _b !== void 0 ? _b : [],
@@ -127,14 +123,14 @@ 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.type].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)) {
134
130
  return this._tokenCache.get(tokenHash);
135
131
  }
136
132
  try {
137
- const { decimals, symbol, name, scripthash } = yield NeoRest.asset(tokenHash, this._network.type);
133
+ const { decimals, symbol, name, scripthash } = yield NeoRest.asset(tokenHash, this._network.id);
138
134
  const token = {
139
135
  decimals: Number(decimals),
140
136
  symbol,
@@ -151,7 +147,7 @@ class DoraBDSNeo3 extends RpcBDSNeo3_1.RPCBDSNeo3 {
151
147
  }
152
148
  getBalance(address) {
153
149
  return __awaiter(this, void 0, void 0, function* () {
154
- const response = yield NeoRest.balance(address, this._network.type);
150
+ const response = yield NeoRest.balance(address, this._network.id);
155
151
  const promises = response.map((balance) => __awaiter(this, void 0, void 0, function* () {
156
152
  try {
157
153
  const token = yield this.getTokenInfo(balance.asset);
@@ -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,7 +1,9 @@
1
- import { ExplorerService, NetworkType, BuildNftUrlParams } from '@cityofzion/blockchain-service';
1
+ import { ExplorerService, BuildNftUrlParams } from '@cityofzion/blockchain-service';
2
+ import { AvailableNetworkIds } from './BSNeo3Helper';
2
3
  export declare class DoraESNeo3 implements ExplorerService {
3
4
  #private;
4
- constructor(networkType: NetworkType);
5
+ constructor(networkType: AvailableNetworkIds);
5
6
  buildTransactionUrl(hash: string): string;
7
+ buildContractUrl(contractHash: string): string;
6
8
  buildNftUrl({ contractHash, tokenId }: BuildNftUrlParams): string;
7
9
  }
@@ -10,24 +10,30 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  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");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _DoraESNeo3_networkType;
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
- _DoraESNeo3_networkType.set(this, void 0);
19
- __classPrivateFieldSet(this, _DoraESNeo3_networkType, networkType, "f");
19
+ _DoraESNeo3_networkId.set(this, void 0);
20
+ __classPrivateFieldSet(this, _DoraESNeo3_networkId, networkType, "f");
20
21
  }
21
22
  buildTransactionUrl(hash) {
22
- if (__classPrivateFieldGet(this, _DoraESNeo3_networkType, "f") === 'custom')
23
- throw new Error('DoraESNeo3 does not support custom network');
24
- return `https://dora.coz.io/transaction/neo3/${__classPrivateFieldGet(this, _DoraESNeo3_networkType, "f")}/${hash}`;
23
+ if (!DoraBDSNeo3_1.DoraBDSNeo3.SUPPORTED_NETWORKS.includes(__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")))
24
+ throw new Error('Unsupported network');
25
+ return `https://dora.coz.io/transaction/neo3/${__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")}/${hash}`;
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}`;
25
31
  }
26
32
  buildNftUrl({ contractHash, tokenId }) {
27
- if (__classPrivateFieldGet(this, _DoraESNeo3_networkType, "f") === 'custom')
28
- throw new Error('DoraESNeo3 does not support custom network');
29
- return `https://dora.coz.io/nft/neo3/${__classPrivateFieldGet(this, _DoraESNeo3_networkType, "f")}/${contractHash}/${tokenId}`;
33
+ if (!DoraBDSNeo3_1.DoraBDSNeo3.SUPPORTED_NETWORKS.includes(__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")))
34
+ throw new Error('Unsupported network');
35
+ return `https://dora.coz.io/nft/neo3/${__classPrivateFieldGet(this, _DoraESNeo3_networkId, "f")}/${contractHash}/${tokenId}`;
30
36
  }
31
37
  }
32
38
  exports.DoraESNeo3 = DoraESNeo3;
33
- _DoraESNeo3_networkType = new WeakMap();
39
+ _DoraESNeo3_networkId = new WeakMap();
@@ -1,7 +1,9 @@
1
- import { CryptoCompareEDS, Currency, ExchangeDataService, NetworkType, TokenPricesResponse } from '@cityofzion/blockchain-service';
1
+ import { CryptoCompareEDS, Currency, ExchangeDataService, GetTokenPriceHistory, Token, TokenPricesHistoryResponse, TokenPricesResponse } from '@cityofzion/blockchain-service';
2
+ import { AvailableNetworkIds } from './BSNeo3Helper';
2
3
  export declare class FlamingoEDSNeo3 extends CryptoCompareEDS implements ExchangeDataService {
3
4
  #private;
4
- constructor(networkType: NetworkType);
5
+ constructor(networkId: AvailableNetworkIds, tokens: Token[]);
5
6
  getTokenPrices(currency: Currency): Promise<TokenPricesResponse[]>;
7
+ getTokenPriceHistory(params: GetTokenPriceHistory): Promise<TokenPricesHistoryResponse[]>;
6
8
  private getCurrencyRatio;
7
9
  }
@@ -22,23 +22,22 @@ 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 _FlamingoEDSNeo3_networkType, _FlamingoEDSNeo3_axiosInstance;
25
+ var _FlamingoEDSNeo3_networkId, _FlamingoEDSNeo3_axiosInstance;
26
26
  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(networkType) {
33
- super(networkType, constants_1.TOKENS[networkType]);
34
- _FlamingoEDSNeo3_networkType.set(this, void 0);
31
+ constructor(networkId, tokens) {
32
+ super(tokens);
33
+ _FlamingoEDSNeo3_networkId.set(this, void 0);
35
34
  _FlamingoEDSNeo3_axiosInstance.set(this, void 0);
36
- __classPrivateFieldSet(this, _FlamingoEDSNeo3_networkType, networkType, "f");
35
+ __classPrivateFieldSet(this, _FlamingoEDSNeo3_networkId, networkId, "f");
37
36
  __classPrivateFieldSet(this, _FlamingoEDSNeo3_axiosInstance, axios_1.default.create({ baseURL: 'https://api.flamingo.finance' }), "f");
38
37
  }
39
38
  getTokenPrices(currency) {
40
39
  return __awaiter(this, void 0, void 0, function* () {
41
- if (__classPrivateFieldGet(this, _FlamingoEDSNeo3_networkType, "f") !== 'mainnet')
40
+ if (__classPrivateFieldGet(this, _FlamingoEDSNeo3_networkId, "f") !== 'mainnet')
42
41
  throw new Error('Exchange is only available on mainnet');
43
42
  const { data: prices } = yield __classPrivateFieldGet(this, _FlamingoEDSNeo3_axiosInstance, "f").get('/token-info/prices');
44
43
  let currencyRatio = 1;
@@ -52,6 +51,11 @@ class FlamingoEDSNeo3 extends blockchain_service_1.CryptoCompareEDS {
52
51
  }));
53
52
  });
54
53
  }
54
+ getTokenPriceHistory(params) {
55
+ if (__classPrivateFieldGet(this, _FlamingoEDSNeo3_networkId, "f") !== 'mainnet')
56
+ throw new Error('Exchange is only available on mainnet');
57
+ return super.getTokenPriceHistory(params);
58
+ }
55
59
  getCurrencyRatio(currency) {
56
60
  return __awaiter(this, void 0, void 0, function* () {
57
61
  const { data } = yield __classPrivateFieldGet(this, _FlamingoEDSNeo3_axiosInstance, "f").get(`/fiat/exchange-rate?pair=USD_${currency}`);
@@ -60,4 +64,4 @@ class FlamingoEDSNeo3 extends blockchain_service_1.CryptoCompareEDS {
60
64
  }
61
65
  }
62
66
  exports.FlamingoEDSNeo3 = FlamingoEDSNeo3;
63
- _FlamingoEDSNeo3_networkType = new WeakMap(), _FlamingoEDSNeo3_axiosInstance = new WeakMap();
67
+ _FlamingoEDSNeo3_networkId = new WeakMap(), _FlamingoEDSNeo3_axiosInstance = new WeakMap();
@@ -1,11 +1,13 @@
1
1
  import { NftResponse, NftsResponse, GetNftParam, GetNftsByAddressParams, Network } from '@cityofzion/blockchain-service';
2
+ import { AvailableNetworkIds } from './BSNeo3Helper';
2
3
  import { RpcNDSNeo3 } from './RpcNDSNeo3';
3
4
  export declare class GhostMarketNDSNeo3 extends RpcNDSNeo3 {
4
5
  #private;
5
- constructor(network: Network);
6
+ static CONFIG_BY_NETWORK_ID: Partial<Record<AvailableNetworkIds, {
7
+ url: string;
8
+ chain: string;
9
+ }>>;
10
+ constructor(network: Network<AvailableNetworkIds>);
6
11
  getNftsByAddress({ address, size, cursor }: GetNftsByAddressParams): Promise<NftsResponse>;
7
12
  getNft({ contractHash, tokenId }: GetNftParam): Promise<NftResponse>;
8
- private treatGhostMarketImage;
9
- private getUrlWithParams;
10
- private parse;
11
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_networkType;
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_networkType.set(this, void 0);
36
- __classPrivateFieldSet(this, _GhostMarketNDSNeo3_networkType, network.type, "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_networkType, "f")] }, params), { arrayFormat: 'bracket' });
73
- return `${constants_1.GHOSTMARKET_URL_BY_NETWORK_TYPE[__classPrivateFieldGet(this, _GhostMarketNDSNeo3_networkType, "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_networkType = 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);