@cityofzion/blockchain-service 1.19.1 → 1.19.2

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/error.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export declare class BSError extends Error {
2
2
  readonly code: string;
3
- constructor(message: string, code: string);
3
+ readonly sourceError?: Error;
4
+ constructor(message: string, code: string, sourceError?: any);
5
+ toString(): string;
4
6
  }
package/dist/error.js CHANGED
@@ -2,10 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BSError = void 0;
4
4
  class BSError extends Error {
5
- constructor(message, code) {
5
+ constructor(message, code, sourceError) {
6
6
  super(message);
7
7
  this.code = code;
8
8
  this.name = 'BSError';
9
+ this.sourceError = sourceError;
10
+ // Set the prototype explicitly to maintain the correct prototype chain
11
+ Object.setPrototypeOf(this, BSError.prototype);
12
+ }
13
+ toString() {
14
+ return (`[${this.name} - ${this.code}]: ${this.message}` + (this.sourceError ? ` | Caused by: ${this.sourceError}` : ''));
9
15
  }
10
16
  }
11
17
  exports.BSError = BSError;
@@ -0,0 +1,8 @@
1
+ export type TBSAccountHelperPredicateParams = {
2
+ address: string;
3
+ blockchain: string;
4
+ };
5
+ export declare class BSAccountHelper {
6
+ static predicate({ address, blockchain }: TBSAccountHelperPredicateParams): (account: TBSAccountHelperPredicateParams) => boolean;
7
+ static predicateNot({ address, blockchain }: TBSAccountHelperPredicateParams): (account: TBSAccountHelperPredicateParams) => boolean;
8
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BSAccountHelper = void 0;
4
+ class BSAccountHelper {
5
+ static predicate({ address, blockchain }) {
6
+ return (account) => address === account.address && blockchain === account.blockchain;
7
+ }
8
+ static predicateNot({ address, blockchain }) {
9
+ return (account) => address !== account.address || blockchain !== account.blockchain;
10
+ }
11
+ }
12
+ exports.BSAccountHelper = BSAccountHelper;
@@ -1,10 +1,10 @@
1
1
  import { Token } from '../interfaces';
2
- type TPredicateToken = {
2
+ export type TBSTokenHelperPredicateParams = {
3
3
  hash: string;
4
4
  symbol?: string;
5
5
  };
6
6
  export declare class BSTokenHelper {
7
- static predicate({ hash, symbol }: TPredicateToken): (params: TPredicateToken) => boolean;
7
+ static predicate({ hash, symbol }: TBSTokenHelperPredicateParams): (params: TBSTokenHelperPredicateParams) => boolean;
8
8
  static predicateByHash(tokenOrHash: string | {
9
9
  hash: string;
10
10
  }): (params: string | {
@@ -18,4 +18,3 @@ export declare class BSTokenHelper {
18
18
  static normalizeToken<T extends Token | Token[]>(token: T): T;
19
19
  static normalizeHash(hash: string): string;
20
20
  }
21
- export {};
package/dist/index.d.ts CHANGED
@@ -4,9 +4,9 @@ export * from './helpers/BSPromisesHelper';
4
4
  export * from './helpers/BSBigNumberHelper';
5
5
  export * from './helpers/BSTokenHelper';
6
6
  export * from './helpers/BSUtilsHelper';
7
+ export * from './helpers/BSAccountHelper';
7
8
  export * from './services/exchange-data/CryptoCompareEDS';
8
9
  export * from './services/exchange-data/FlamingoForthewinEDS';
9
- export * from './BSAggregator';
10
10
  export * from './functions';
11
11
  export * from './interfaces';
12
12
  export * from './error';
package/dist/index.js CHANGED
@@ -20,9 +20,9 @@ __exportStar(require("./helpers/BSPromisesHelper"), exports);
20
20
  __exportStar(require("./helpers/BSBigNumberHelper"), exports);
21
21
  __exportStar(require("./helpers/BSTokenHelper"), exports);
22
22
  __exportStar(require("./helpers/BSUtilsHelper"), exports);
23
+ __exportStar(require("./helpers/BSAccountHelper"), exports);
23
24
  __exportStar(require("./services/exchange-data/CryptoCompareEDS"), exports);
24
25
  __exportStar(require("./services/exchange-data/FlamingoForthewinEDS"), exports);
25
- __exportStar(require("./BSAggregator"), exports);
26
26
  __exportStar(require("./functions"), exports);
27
27
  __exportStar(require("./interfaces"), exports);
28
28
  __exportStar(require("./error"), exports);
@@ -1,5 +1,6 @@
1
1
  import Transport from '@ledgerhq/hw-transport';
2
2
  import TypedEmitter from 'typed-emitter';
3
+ import { BSError } from './error';
3
4
  export type UntilIndexRecord<BSName extends string = string> = Partial<Record<BSName, Record<string, number>>>;
4
5
  export type Account<BSName extends string = string> = {
5
6
  key: string;
@@ -76,9 +77,6 @@ export interface BSWithLedger<BSName extends string = string> {
76
77
  ledgerService: LedgerService<BSName>;
77
78
  generateAccountFromPublicKey(publicKey: string): Account<BSName>;
78
79
  }
79
- export interface IBSWithNeo3NeoXBridge<BSName extends string = string> {
80
- neo3NeoXBridgeService: INeo3NeoXBridgeService<BSName>;
81
- }
82
80
  export type TransactionNotificationTypedResponse = {
83
81
  type: string;
84
82
  value?: string;
@@ -300,7 +298,7 @@ export interface LedgerService<BSName extends string = string> {
300
298
  getAccounts(transport: Transport, getUntilIndex?: UntilIndexRecord<BSName>): Promise<Account<BSName>[]>;
301
299
  getAccount(transport: Transport, index: number): Promise<Account<BSName>>;
302
300
  }
303
- export type SwapServiceToken<BSName extends string = string> = {
301
+ export type TSwapToken<BSName extends string = string> = {
304
302
  id: string;
305
303
  blockchain?: BSName;
306
304
  imageUrl?: string;
@@ -313,86 +311,123 @@ export type SwapServiceToken<BSName extends string = string> = {
313
311
  network?: string;
314
312
  hasExtraId: boolean;
315
313
  };
316
- export type SwapServiceLoadableValue<T> = {
314
+ export type TSwapLoadableValue<T> = {
317
315
  loading: boolean;
318
316
  value: T | null;
319
317
  };
320
- export type SwapServiceValidateValue<T> = SwapServiceLoadableValue<T> & {
318
+ export type TSwapValidateValue<T> = TSwapLoadableValue<T> & {
321
319
  valid: boolean | null;
322
320
  };
323
- export type SwapServiceMinMaxAmount = {
321
+ export type TSwapMinMaxAmount = {
324
322
  min: string;
325
323
  max: string | null;
326
324
  };
327
- export type SwapServiceEvents<BSName extends string = string> = {
328
- accountToUse: (account: SwapServiceValidateValue<Account<BSName>>) => void | Promise<void>;
329
- amountToUse: (amount: SwapServiceLoadableValue<string>) => void | Promise<void>;
330
- amountToUseMinMax: (minMax: SwapServiceLoadableValue<SwapServiceMinMaxAmount>) => void | Promise<void>;
331
- tokenToUse: (token: SwapServiceLoadableValue<SwapServiceToken<BSName>>) => void | Promise<void>;
332
- availableTokensToUse: (tokens: SwapServiceLoadableValue<SwapServiceToken<BSName>[]>) => void | Promise<void>;
333
- addressToReceive: (account: SwapServiceValidateValue<string>) => void | Promise<void>;
334
- extraIdToReceive: (extraIdToReceive: SwapServiceValidateValue<string>) => void;
335
- amountToReceive: (amount: SwapServiceLoadableValue<string>) => void | Promise<void>;
336
- tokenToReceive: (token: SwapServiceLoadableValue<SwapServiceToken<BSName>>) => void | Promise<void>;
337
- availableTokensToReceive: (tokens: SwapServiceLoadableValue<SwapServiceToken<BSName>[]>) => void | Promise<void>;
325
+ export type TSwapOrchestratorEvents<BSName extends string = string> = {
326
+ accountToUse: (account: TSwapValidateValue<Account<BSName>>) => void | Promise<void>;
327
+ amountToUse: (amount: TSwapLoadableValue<string>) => void | Promise<void>;
328
+ amountToUseMinMax: (minMax: TSwapLoadableValue<TSwapMinMaxAmount>) => void | Promise<void>;
329
+ tokenToUse: (token: TSwapLoadableValue<TSwapToken<BSName>>) => void | Promise<void>;
330
+ availableTokensToUse: (tokens: TSwapLoadableValue<TSwapToken<BSName>[]>) => void | Promise<void>;
331
+ addressToReceive: (account: TSwapValidateValue<string>) => void | Promise<void>;
332
+ extraIdToReceive: (extraIdToReceive: TSwapValidateValue<string>) => void;
333
+ amountToReceive: (amount: TSwapLoadableValue<string>) => void | Promise<void>;
334
+ tokenToReceive: (token: TSwapLoadableValue<TSwapToken<BSName>>) => void | Promise<void>;
335
+ availableTokensToReceive: (tokens: TSwapLoadableValue<TSwapToken<BSName>[]>) => void | Promise<void>;
338
336
  error: (error: string) => void | Promise<void>;
339
337
  };
340
- export type SwapServiceSwapResult = {
338
+ export type TSwapResult = {
341
339
  id: string;
342
340
  txFrom?: string;
343
341
  log?: string;
344
342
  };
345
- export type SwapServiceStatusResponse = {
343
+ export type TSwapServiceStatusResponse = {
346
344
  status: 'finished' | 'confirming' | 'exchanging' | 'failed' | 'refunded';
347
345
  txFrom?: string;
348
346
  txTo?: string;
349
347
  log?: string;
350
348
  };
351
- export interface SwapServiceHelper {
352
- getStatus(id: string): Promise<SwapServiceStatusResponse>;
349
+ export interface ISwapService {
350
+ getStatus(id: string): Promise<TSwapServiceStatusResponse>;
353
351
  }
354
- export interface SwapService<BSName extends string = string> {
355
- eventEmitter: TypedEmitter<SwapServiceEvents<BSName>>;
356
- setTokenToUse(token: SwapServiceToken<BSName> | null): Promise<void>;
352
+ export interface ISwapOrchestrator<BSName extends string = string> {
353
+ eventEmitter: TypedEmitter<TSwapOrchestratorEvents<BSName>>;
354
+ setTokenToUse(token: TSwapToken<BSName> | null): Promise<void>;
357
355
  setAccountToUse(account: Account<BSName> | null): Promise<void>;
358
356
  setAmountToUse(amount: string | null): Promise<void>;
359
- setTokenToReceive(token: SwapServiceToken<BSName> | null): Promise<void>;
357
+ setTokenToReceive(token: TSwapToken<BSName> | null): Promise<void>;
360
358
  setAddressToReceive(address: string | null): Promise<void>;
361
359
  setExtraIdToReceive(extraId: string | null): Promise<void>;
362
- swap(): Promise<SwapServiceSwapResult>;
360
+ swap(): Promise<TSwapResult>;
363
361
  calculateFee(): Promise<string>;
364
362
  }
365
- export type TNeo3NeoXBridgeServiceCalculateMaxAmountParams<BSName extends string> = {
366
- account: Account<BSName>;
367
- receiverAddress: string;
368
- token: Token;
369
- balances: BalanceResponse[];
363
+ export type TBridgeToken = Token & {
364
+ multichainId: string;
370
365
  };
371
- export type TNeo3NeoXBridgeServiceValidatedInputs = {
372
- amount: string;
373
- receiveAmount: string;
374
- token: Token;
366
+ export type TBridgeValue<T> = {
367
+ value: T | null;
368
+ loading: boolean;
369
+ error: BSError | null;
370
+ };
371
+ export type TBridgeValidateValue<T> = TBridgeValue<T> & {
372
+ valid: boolean | null;
375
373
  };
376
- export type TNeo3NeoXBridgeServiceBridgeParam<BSName extends string> = {
374
+ export type TBridgeOrchestratorEvents<BSName extends string = string> = {
375
+ accountToUse: (account: TBridgeValue<Account<BSName>>) => void | Promise<void>;
376
+ amountToUse: (amount: TBridgeValidateValue<string>) => void | Promise<void>;
377
+ amountToUseMin: (max: TBridgeValue<string>) => void | Promise<void>;
378
+ amountToUseMax: (max: TBridgeValue<string>) => void | Promise<void>;
379
+ tokenToUse: (token: TBridgeValue<TBridgeToken>) => void | Promise<void>;
380
+ availableTokensToUse: (tokens: TBridgeValue<TBridgeToken[]>) => void | Promise<void>;
381
+ addressToReceive: (account: TBridgeValidateValue<string>) => void | Promise<void>;
382
+ amountToReceive: (amount: TBridgeValue<string>) => void | Promise<void>;
383
+ tokenToReceive: (token: TBridgeValue<TBridgeToken>) => void | Promise<void>;
384
+ tokenToUseBalance: (balance: TBridgeValue<BalanceResponse | undefined>) => void | Promise<void>;
385
+ bridgeFee: (fee: TBridgeValue<string>) => void | Promise<void>;
386
+ };
387
+ export interface IBridgeOrchestrator<BSName extends string = string> {
388
+ eventEmitter: TypedEmitter<TBridgeOrchestratorEvents<BSName>>;
389
+ setTokenToUse(token: TBridgeToken | null): Promise<void>;
390
+ setAccountToUse(account: Account<BSName> | null): Promise<void>;
391
+ setAmountToUse(amount: string | null): Promise<void>;
392
+ setAddressToReceive(address: string | null): Promise<void>;
393
+ setBalances(balances: BalanceResponse[] | null): Promise<void>;
394
+ switchTokens(): Promise<void>;
395
+ bridge(): Promise<string>;
396
+ wait(): Promise<boolean>;
397
+ }
398
+ export interface IBSWithNeo3NeoXBridge<BSName extends string = string> {
399
+ neo3NeoXBridgeService: INeo3NeoXBridgeService<BSName>;
400
+ }
401
+ export type TNeo3NeoXBridgeServiceConstants = {
402
+ bridgeFee: string;
403
+ bridgeMaxAmount: string;
404
+ bridgeMinAmount: string;
405
+ };
406
+ export type TNeo3NeoXBridgeServiceBridgeParam<BSName extends string = string> = {
377
407
  account: Account<BSName>;
378
408
  receiverAddress: string;
379
- validatedInputs: TNeo3NeoXBridgeServiceValidatedInputs;
409
+ amount: string;
410
+ token: TBridgeToken;
411
+ bridgeFee: string;
380
412
  };
381
- export type TNeo3NeoXBridgeServiceValidateInputParams<BSName extends string> = {
413
+ export type TNeo3NeoXBridgeServiceGetApprovalParam<BSName extends string = string> = {
382
414
  account: Account<BSName>;
383
- receiverAddress: string;
384
415
  amount: string;
385
- token: Token;
386
- balances: BalanceResponse[];
416
+ token: TBridgeToken;
387
417
  };
388
- export type TNeo3NeoXBridgeServiceWaitParams = {
418
+ export type TNeo3NeoXBridgeServiceGetNonceParams = {
419
+ token: TBridgeToken;
389
420
  transactionHash: string;
390
- validatedInputs: TNeo3NeoXBridgeServiceValidatedInputs;
421
+ };
422
+ export type TNeo3NeoXBridgeServiceGetTransactionHashByNonceParams = {
423
+ token: TBridgeToken;
424
+ nonce: string;
391
425
  };
392
426
  export interface INeo3NeoXBridgeService<BSName extends string = string> {
393
- calculateMaxAmount(params: TNeo3NeoXBridgeServiceCalculateMaxAmountParams<BSName>): Promise<string>;
394
- calculateFee(params: TNeo3NeoXBridgeServiceBridgeParam<BSName>): Promise<string>;
427
+ tokens: TBridgeToken[];
428
+ getApprovalFee(params: TNeo3NeoXBridgeServiceGetApprovalParam): Promise<string>;
429
+ getBridgeConstants(token: TBridgeToken): Promise<TNeo3NeoXBridgeServiceConstants>;
395
430
  bridge(params: TNeo3NeoXBridgeServiceBridgeParam<BSName>): Promise<string>;
396
- validateInputs(params: TNeo3NeoXBridgeServiceValidateInputParams<BSName>): Promise<TNeo3NeoXBridgeServiceValidatedInputs>;
397
- wait(params: TNeo3NeoXBridgeServiceWaitParams): Promise<boolean>;
431
+ getNonce(params: TNeo3NeoXBridgeServiceGetNonceParams): Promise<string | null>;
432
+ getTransactionHashByNonce(params: TNeo3NeoXBridgeServiceGetTransactionHashByNonceParams): Promise<string | null>;
398
433
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cityofzion/blockchain-service",
3
- "version": "1.19.1",
3
+ "version": "1.19.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "repository": "https://github.com/CityOfZion/blockchain-services",
@@ -23,7 +23,7 @@
23
23
  "ts-jest": "29.1.1"
24
24
  },
25
25
  "dependencies": {
26
- "@ledgerhq/hw-transport": "~6.30.5",
26
+ "@ledgerhq/hw-transport": "~6.31.8",
27
27
  "axios": "1.8.2",
28
28
  "date-fns": "~4.1.0",
29
29
  "bignumber.js": "~9.3.0"
@@ -1,14 +0,0 @@
1
- import { Account, BlockchainService, UntilIndexRecord } from './interfaces';
2
- export declare class BSAggregator<BSName extends string = string> {
3
- #private;
4
- readonly blockchainServicesByName: Record<BSName, BlockchainService<BSName>>;
5
- constructor(blockchainServices: BlockchainService<BSName>[]);
6
- validateAddressAllBlockchains(address: string): boolean;
7
- validateTextAllBlockchains(text: string): boolean;
8
- validateKeyAllBlockchains(wif: string): boolean;
9
- validateEncryptedAllBlockchains(keyOrJson: string): boolean;
10
- getBlockchainNameByAddress(address: string): BSName[];
11
- getBlockchainNameByKey(wif: string): BSName[];
12
- getBlockchainNameByEncrypted(keyOrJson: string): BSName[];
13
- generateAccountsFromMnemonic(mnemonic: string, untilIndexByBlockchainService?: UntilIndexRecord<BSName>): Promise<Map<BSName, Account<BSName>[]>>;
14
- }
@@ -1,68 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
- if (kind === "m") throw new TypeError("Private method is not writable");
13
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
- };
17
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
18
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
19
- 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");
20
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
21
- };
22
- var _BSAggregator_blockchainServices;
23
- Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.BSAggregator = void 0;
25
- const functions_1 = require("./functions");
26
- class BSAggregator {
27
- constructor(blockchainServices) {
28
- _BSAggregator_blockchainServices.set(this, void 0);
29
- __classPrivateFieldSet(this, _BSAggregator_blockchainServices, blockchainServices, "f");
30
- this.blockchainServicesByName = blockchainServices.reduce((acc, service) => {
31
- if (acc[service.name]) {
32
- throw new Error(`Duplicate blockchain service name: ${service.name}`);
33
- }
34
- acc[service.name] = service;
35
- return acc;
36
- }, {});
37
- }
38
- validateAddressAllBlockchains(address) {
39
- return __classPrivateFieldGet(this, _BSAggregator_blockchainServices, "f").some(bs => bs.validateAddress(address));
40
- }
41
- validateTextAllBlockchains(text) {
42
- return __classPrivateFieldGet(this, _BSAggregator_blockchainServices, "f").some(bs => [bs.validateAddress(text), bs.validateEncrypted(text), bs.validateKey(text)].some(it => it === true));
43
- }
44
- validateKeyAllBlockchains(wif) {
45
- return __classPrivateFieldGet(this, _BSAggregator_blockchainServices, "f").some(bs => bs.validateKey(wif));
46
- }
47
- validateEncryptedAllBlockchains(keyOrJson) {
48
- return __classPrivateFieldGet(this, _BSAggregator_blockchainServices, "f").some(bs => bs.validateEncrypted(keyOrJson));
49
- }
50
- getBlockchainNameByAddress(address) {
51
- return __classPrivateFieldGet(this, _BSAggregator_blockchainServices, "f").filter(bs => bs.validateAddress(address)).map(bs => bs.name);
52
- }
53
- getBlockchainNameByKey(wif) {
54
- return __classPrivateFieldGet(this, _BSAggregator_blockchainServices, "f").filter(bs => bs.validateKey(wif)).map(bs => bs.name);
55
- }
56
- getBlockchainNameByEncrypted(keyOrJson) {
57
- return __classPrivateFieldGet(this, _BSAggregator_blockchainServices, "f").filter(bs => bs.validateEncrypted(keyOrJson)).map(bs => bs.name);
58
- }
59
- generateAccountsFromMnemonic(mnemonic, untilIndexByBlockchainService) {
60
- return __awaiter(this, void 0, void 0, function* () {
61
- return (0, functions_1.generateAccountForBlockchainService)(__classPrivateFieldGet(this, _BSAggregator_blockchainServices, "f"), (service, index) => __awaiter(this, void 0, void 0, function* () {
62
- return service.generateAccountFromMnemonic(mnemonic, index);
63
- }), untilIndexByBlockchainService);
64
- });
65
- }
66
- }
67
- exports.BSAggregator = BSAggregator;
68
- _BSAggregator_blockchainServices = new WeakMap();