Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

solution: update proto, extract token-api, remove deprecations #30

Merged
merged 2 commits into from
Aug 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@ export {
DescribeAddressResponse,
} from './typesAddress';
export {
AddressAllowanceRequest,
AddressAllowanceResponse,
AddressBalance,
BalanceRequest,
ChainHead,
Expand Down Expand Up @@ -74,3 +72,4 @@ export {
TestCurrency,
} from './typesMarket';
export * as transaction from './typesTransaction';
export * as token from './typesToken';
37 changes: 0 additions & 37 deletions packages/core/src/typesBlockchain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,22 +46,6 @@ export type BalanceRequest = {
includeUtxo?: boolean;
};

export interface AddressAllowanceRequest {
address: AnyAddress;
chain: Blockchain;
contractAddresses: SingleAddress[];
}

export interface AddressAllowanceResponse {
address: SingleAddress;
allowance: string;
available: string;
chain: Blockchain;
contractAddress: SingleAddress;
ownerAddress: SingleAddress;
spenderAddress: SingleAddress;
}

export interface AddressBalance {
asset: AnyAsset;
address: SingleAddress;
Expand Down Expand Up @@ -219,27 +203,6 @@ export class ConvertBlockchain {
};
}

public addressAllowanceRequest(request: AddressAllowanceRequest): blockchain_pb.AddressAllowanceRequest {
const result: blockchain_pb.AddressAllowanceRequest = this.factory('blockchain_pb.AddressAllowanceRequest');

return result
.setChain(request.chain.valueOf())
.setAddress(this.common.pbAnyAddress(request.address))
.setContractAddressesList(request.contractAddresses.map((value) => this.common.pbSingleAddress(value)));
}

public addressAllowanceResponse(): DataMapper<blockchain_pb.AddressAllowance, AddressAllowanceResponse> {
return (response) => ({
address: response.getAddress().getAddress(),
allowance: response.getAllowance(),
available: response.getAvailable(),
chain: response.getChain().valueOf(),
contractAddress: response.getContractAddress().getAddress(),
ownerAddress: response.getOwnerAddress().getAddress(),
spenderAddress: response.getSpenderAddress().getAddress(),
});
}

public balanceRequest(req: BalanceRequest): blockchain_pb.BalanceRequest {
const result: blockchain_pb.BalanceRequest = this.factory('blockchain_pb.BalanceRequest');

Expand Down
121 changes: 121 additions & 0 deletions packages/core/src/typesToken.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
import * as token_message_pb from './generated/token.message_pb';
import { DataMapper } from './Publisher';
import { AnyAddress, Blockchain, ConvertCommon, SingleAddress, } from './typesCommon';
import { MessageFactory } from './typesConvert';

export interface AddressTokenRequest {
blockchain: Blockchain;
address: AnyAddress;
contractAddresses: string[];
}

export interface AddressToken {
blockchain: Blockchain;
address: AnyAddress;
contractAddresses: string[];
}

export interface AddressAllowanceRequest {
blockchain: Blockchain;
address: AnyAddress;
contractAddresses: string[];
cursor?: string;
limit?: number;
}

export interface AddressAllowanceToken {
blockchain: Blockchain;
address: SingleAddress;
approvedByAddress: string[];
approvedForAddress: string[];
}

export interface AddressAllowanceAmount {
address: SingleAddress;
allowance: string;
available: string;
blockchain: Blockchain;
contractAddress: SingleAddress;
ownerAddress: SingleAddress;
spenderAddress: SingleAddress;
}

export class Convert {
private readonly factory: MessageFactory;
private readonly common: ConvertCommon;

constructor(factory: MessageFactory, common: ConvertCommon = new ConvertCommon(factory)) {
this.factory = factory;
this.common = common;
}

public addressTokenRequest(req: AddressTokenRequest): token_message_pb.AddressTokenRequest {
const result: token_message_pb.AddressTokenRequest = this.factory(
'token_message_pb.AddressTokenRequest',
);

return result
.setChain(req.blockchain.valueOf())
.setAddress(this.common.pbAnyAddress(req.address))
.setContractAddressesList(req.contractAddresses.map((value) => this.common.pbSingleAddress(value)));
}

public addressToken(): DataMapper<token_message_pb.AddressToken, AddressToken> {
return (resp) => {
const contractAddresses = resp.getContractAddressesList().map((value) => value.getAddress());

return {
blockchain: resp.getChain().valueOf(),
address: resp.getAddress().getAddress(),
contractAddresses: contractAddresses,
};
};
}

public addressAllowanceRequest(req: AddressAllowanceRequest): token_message_pb.AddressAllowanceRequest {
const result: token_message_pb.AddressAllowanceRequest = this.factory(
'token_message_pb.AddressAllowanceRequest',
);

return result
.setChain(req.blockchain.valueOf())
.setAddress(this.common.pbAnyAddress(req.address))
.setContractAddressesList(req.contractAddresses.map((value) => this.common.pbSingleAddress(value)))
.setCursor(req.cursor)
.setLimit(req.limit);
}

public addressAllowanceToken(): DataMapper<token_message_pb.AddressAllowanceToken, AddressAllowanceToken> {
return (resp) => {
const approvedByAddress = resp.getApprovedByAddressList().map((value) => value.getAddress());
const approvedForAddress = resp.getApprovedForAddressList().map((value) => value.getAddress());

return {
blockchain: resp.getChain().valueOf(),
address: resp.getAddress().getAddress(),
approvedByAddress: approvedByAddress,
approvedForAddress: approvedForAddress,
};
};
}

public addressAllowanceAmount(): DataMapper<token_message_pb.AddressAllowanceAmount, AddressAllowanceAmount> {
return (response) => {
const cursor = response.getCursor();

return {
blockchain: response.getChain().valueOf(),
address: response.getAddress().getAddress(),
allowance: response.getAllowance(),
available: response.getAvailable(),
chain: response.getChain().valueOf(),
contractAddress: response.getContractAddress().getAddress(),
ownerAddress: response.getOwnerAddress().getAddress(),
spenderAddress: response.getSpenderAddress().getAddress(),
cursor: cursor.length > 0 ? cursor : undefined,
};
};
}


}
114 changes: 0 additions & 114 deletions packages/core/src/typesTransaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,33 +72,6 @@ export interface AddressTxResponse {
/** True if transaction is failed */
failed: boolean;
changes: Change[];
/** TODO: deprecated */
transfers: AnyTransfer[];
}

export interface AddressTokenRequest {
blockchain: Blockchain;
address: AnyAddress;
contractAddresses: string[];
}

export interface AddressTokenResponse {
blockchain: Blockchain;
address: AnyAddress;
contractAddresses: string[];
}

export interface AddressAllowanceRequest {
blockchain: Blockchain;
address: AnyAddress;
contractAddresses: string[];
}

export interface AddressAllowanceResponse {
blockchain: Blockchain;
address: SingleAddress;
approvedByAddress: string[];
approvedForAddress: string[];
}

export interface AddressAmount {
Expand Down Expand Up @@ -206,41 +179,6 @@ export class Convert {
};
}

private static transfer(blockchain: Blockchain, transfer: transaction_message_pb.Transfer): AnyTransfer {
if (blockchainType(blockchain) == BlockchainType.BITCOIN) {
return {
direction: transfer.getDirection(),
amount: transfer.getAmount(),
addressAmounts: transfer.getAddressAmountsList().map((value) => {
return {
address: value.getAddress()?.getAddress(),
amount: value.getAmount(),
};
}),
xpubIndexes: transfer.getXpubIndexesList(),
};
}
if (blockchainType(blockchain) == BlockchainType.ETHEREUM) {
const [firstAddressAmount] = transfer.getAddressAmountsList();
if (firstAddressAmount == null) {
throw new Error('Address of ETHEREUM transfer is empty');
}
return {
direction: transfer.getDirection(),
amount: transfer.getAmount(),
fee: transfer.getFee(),
address: firstAddressAmount.getAddress().getAddress(),
xpubIndexes: transfer.getXpubIndexesList(),
contractAddress: transfer.getContractaddress() != '' ? transfer.getContractaddress() : undefined,
};
}
return {
direction: transfer.getDirection(),
amount: transfer.getAmount(),
xpubIndexes: transfer.getXpubIndexesList(),
};
}

public addressTxResponse(): DataMapper<transaction_message_pb.AddressTxResponse, AddressTxResponse> {
return (resp) => {
let block: BlockInfo | undefined;
Expand All @@ -253,15 +191,13 @@ export class Convert {
const changes = resp.getChangesList().map((value) => Convert.change(value));
const cursor = resp.getCursor();
const mempool = resp.getMempool();
const transfers = resp.getTransfersList().map((value) => Convert.transfer(blockchain, value));
const xpubIndex = resp.hasXpubIndex() ? resp.getXpubIndex().getValue() : undefined;

return {
block,
blockchain,
changes,
mempool,
transfers,
xpubIndex,
address: resp.getAddress().getAddress(),
cursor: cursor.length > 0 ? cursor : undefined,
Expand All @@ -272,54 +208,4 @@ export class Convert {
};
}

public addressTokenRequest(req: AddressTokenRequest): transaction_message_pb.AddressTokenRequest {
const result: transaction_message_pb.AddressTokenRequest = this.factory(
'transaction_message_pb.AddressTokenRequest',
);

return result
.setBlockchain(req.blockchain.valueOf())
.setAddress(this.common.pbAnyAddress(req.address))
.setContractAddressesList(req.contractAddresses.map((value) => this.common.pbSingleAddress(value)));
}

public addressTokenResponse(): DataMapper<transaction_message_pb.AddressTokenResponse, AddressTokenResponse> {
return (resp) => {
const contractAddresses = resp.getContractAddressesList().map((value) => value.getAddress());

return {
blockchain: resp.getBlockchain().valueOf(),
address: resp.getAddress().getAddress(),
contractAddresses: contractAddresses,
};
};
}

public addressAllowanceRequest(req: AddressAllowanceRequest): transaction_message_pb.AddressAllowanceRequest {
const result: transaction_message_pb.AddressAllowanceRequest = this.factory(
'transaction_message_pb.AddressAllowanceRequest',
);

return result
.setBlockchain(req.blockchain.valueOf())
.setAddress(this.common.pbAnyAddress(req.address))
.setContractAddressesList(req.contractAddresses.map((value) => this.common.pbSingleAddress(value)));
}

public addressAllowanceResponse(): DataMapper<
transaction_message_pb.AddressAllowanceResponse,
AddressAllowanceResponse
> {
return (resp) => {
const approvedByAddress = resp.getApprovedByAddressList().map((value) => value.getAddress());
const approvedForAddress = resp.getApprovedForAddressList().map((value) => value.getAddress());

return {
blockchain: resp.getBlockchain().valueOf(),
address: resp.getAddress().getAddress(),
approvedByAddress: approvedByAddress,
approvedForAddress: approvedForAddress,
};
};
}
}
5 changes: 5 additions & 0 deletions packages/node/src/EmeraldApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { AddressClient } from './wrapped/AddressClient';
import { BlockchainClient } from './wrapped/BlockchainClient';
import { MarketClient } from './wrapped/MarketClient';
import { MonitoringClient } from './wrapped/MonitoringClient';
import { TokenClient } from './wrapped/TokenClient';
import { TransactionClient } from './wrapped/TransactionClient';

export class EmeraldApi {
Expand Down Expand Up @@ -45,6 +46,10 @@ export class EmeraldApi {
return new MonitoringClient(this.hostname, this.credentials, this.agents);
}

token(): TokenClient {
return new TokenClient(this.hostname, this.credentials, this.agents);
}

transaction(): TransactionClient {
return new TransactionClient(this.hostname, this.credentials, this.agents);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/node/src/__integration-tests__/address.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Blockchain, DescribeAddressControl } from '@emeraldpay/api';
import { EmeraldApi } from '../EmeraldApi';

jest.setTimeout(5000);
jest.setTimeout(15000);

describe('AddressClient', () => {
let api: EmeraldApi;
Expand Down
Loading
Loading