Skip to content

Commit

Permalink
feat: added ntfTokenApprovals to EvmStreamResult class. (#1102)
Browse files Browse the repository at this point in the history
  • Loading branch information
b4rtaz authored Apr 21, 2023
1 parent 393291c commit 700a64f
Show file tree
Hide file tree
Showing 12 changed files with 242 additions and 5 deletions.
6 changes: 6 additions & 0 deletions .changeset/fresh-tigers-relax.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@moralisweb3/common-streams-utils': patch
'@moralisweb3/streams': patch
---

Added the `ntfTokenApprovals` property to the `EvmStreamResult` class. The `nftApprovals` property is depreciated now.
Original file line number Diff line number Diff line change
Expand Up @@ -2437,6 +2437,45 @@ const nativeBalances = {
],
};

export const nftTokenApprovals = {
confirmed: false,
chainId: '0x1',
abi: [],
streamId: '6c86e9ed-0a93-4f8f-af4d-929ee8918bbb',
tag: 'Bored Ape',
retries: 0,
block: {
number: '16225662',
hash: '0x36a8359fa2eaff57364158247dff17d80c053096ad9c54d1c27f4768974f552b',
timestamp: '1671536351',
},
logs: [],
txs: [],
txsInternal: [],
erc20Transfers: [],
erc20Approvals: [],
nftTokenApprovals: [
{
transactionHash: '0x8b7ed07563c2e679b9b49e2e0b62d1fe8a37c2f6c6d43a6ed072d1fc9ac15a22',
logIndex: '361',
contract: '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d',
account: '0x0a1ad77312d36459179ad622c2a8a6280cc79419',
operator: '0x0000000000000000000000000000000000000000',
approvedAll: false,
tokenId: '2947',
tokenName: 'BoredApeYachtClub',
tokenSymbol: 'BAYC',
tokenContractType: 'ERC721',
},
],
nftApprovals: {
ERC721: [],
ERC1155: [],
},
nftTransfers: [],
nativeBalances: [],
};

export const mockEvmStreamResult = {
INITIAL_TEST: initialTest,
NATIVE_TX: nativeTransaction,
Expand All @@ -2448,4 +2487,5 @@ export const mockEvmStreamResult = {
ERC1155_APPROVAL: erc1155Approval,
WETH_EVENTS: wethEvents,
NATIVE_BALANCES: nativeBalances,
NFT_TOKENS_APPROVALS: nftTokenApprovals,
};
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ describe('EvmStreamResult', () => {
ERC1155: [],
ERC721: [],
},
ntfTokenApprovals: [],
nftTransfers: [],
retries: 0,
txs: [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ import { EvmStreamResultFormatter } from './EvmStreamResultFormatter';
import { EvmStreamResultParser } from './EvmStreamResultParser';
import { EvmStreamResultData, EvmStreamResultInput } from './types';
import { Interface } from '@ethersproject/abi';
import { StreamEvmNftTokenApproval } from '../StreamEvmNftTokenApproval';
import { StreamErc721Approval } from '../StreamErc721Approval';
import { StreamErc1155Approval } from '../StreamErc1155Approval';

export type EvmStreamResultish = EvmStreamResultInput | EvmStreamResult;

Expand Down Expand Up @@ -165,10 +168,20 @@ export class EvmStreamResult implements MoralisDataObject {
return this._data.logs;
}

get nftApprovals() {
/**
* @deprecated Use `ntfTokenApprovals` instead. This property will be removed in the future.
*/
public get nftApprovals(): {
ERC721: StreamErc721Approval[];
ERC1155: StreamErc1155Approval[];
} {
return this._data.nftApprovals;
}

public get ntfTokenApprovals(): StreamEvmNftTokenApproval[] {
return this._data.ntfTokenApprovals;
}

get nftTransfers() {
return this._data.nftTransfers;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export class EvmStreamResultFormatter {
ERC721: data.nftApprovals.ERC721.map((value) => value.toJSON()),
ERC1155: data.nftApprovals.ERC1155.map((value) => value.toJSON()),
},
ntfTokenApprovals: data.ntfTokenApprovals.map((value) => value.toJSON()),
chain: data.chain.format(),
block: data.block.toJSON(),
logs: data.logs.map((value) => value.toJSON()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
Log,
Transaction,
INativeBalance,
INFTApproval,
} from '@moralisweb3/streams-typings';
import { StreamErc1155Approval } from '../StreamErc1155Approval/StreamErc1155Approval';
import { StreamErc20Approval } from '../StreamErc20Approval/StreamErc20Approval';
Expand All @@ -22,6 +23,7 @@ import { StreamEvmTransaction } from '../StreamEvmTransaction/StreamEvmTransacti
import { StreamEvmTransactionLog } from '../StreamEvmTransactionLog/StreamEvmTransactionLog';
import { StreamNativeBalance } from '../StreamNativeBalance';
import { EvmStreamResultData, EvmStreamResultInput } from './types';
import { StreamEvmNftTokenApproval } from '../StreamEvmNftTokenApproval/StreamEvmNftTokenApproval';

export class EvmStreamResultParser {
static parse = (value: EvmStreamResultInput, core: Core): EvmStreamResultData => {
Expand All @@ -32,11 +34,8 @@ export class EvmStreamResultParser {
erc20Transfers: this.parseErc20Transfers(value.erc20Transfers, chain),
erc20Approvals: this.parseErc20Approvals(value.erc20Approvals, chain),
nftTransfers: this.parseNftTransfers(value.nftTransfers, chain),

/**
* @deprecated Will be removed. Use nftTokenApprovals
*/
nftApprovals: this.parseNftApprovals(value.nftApprovals, chain),
ntfTokenApprovals: this.parseNftTokenApprovals(value.nftTokenApprovals, chain, core),
block: this.parseBlock(value.block, chain),
logs: this.parseLogs(value.logs, chain),
txs: this.parseTransactions(value.txs, chain),
Expand Down Expand Up @@ -99,6 +98,18 @@ export class EvmStreamResultParser {
};
}

static parseNftTokenApprovals(values: INFTApproval[], chain: EvmChain, core: Core) {
return values.map((value) =>
StreamEvmNftTokenApproval.create(
{
chain,
...value,
},
core,
),
);
}

static parseBlock(value: Block, chain: EvmChain) {
if (value.number === '') {
return EvmSimpleBlock.create({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { StreamEvmNftTransfer } from '../StreamEvmNftTransfer/StreamEvmNftTransf
import { StreamEvmTransaction } from '../StreamEvmTransaction/StreamEvmTransaction';
import { StreamEvmTransactionLog } from '../StreamEvmTransactionLog/StreamEvmTransactionLog';
import { StreamNativeBalance } from '../StreamNativeBalance';
import { StreamEvmNftTokenApproval } from '../StreamEvmNftTokenApproval';

export interface EvmStreamResultData {
chain: EvmChain;
Expand All @@ -19,10 +20,14 @@ export interface EvmStreamResultData {
erc20Transfers: StreamErc20Transfer[];
erc20Approvals: StreamErc20Approval[];
nftTransfers: StreamEvmNftTransfer[];
/**
* @deprecated Use `ntfTokenApprovals` instead. This property will be removed in the future.
*/
nftApprovals: {
ERC721: StreamErc721Approval[];
ERC1155: StreamErc1155Approval[];
};
ntfTokenApprovals: StreamEvmNftTokenApproval[];
logs: StreamEvmTransactionLog[];
txs: StreamEvmTransaction[];
txsInternal: StreamEvmInternalTransaction[];
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import Core from '@moralisweb3/common-core';
import { setupStreamsUtils } from '../../test/setup';
import { StreamEvmNftTokenApproval } from './StreamEvmNftTokenApproval';

describe('StreamEvmNftTokenApproval', () => {
let core: Core;

beforeAll(() => {
core = setupStreamsUtils();
});

it('should return correct values for all getters', () => {
const approval = StreamEvmNftTokenApproval.create(
{
chain: '0x22',
transactionHash: '0x8b7ed07563c2e679b9b49e2e0b62d1fe8a37c2f6c6d43a6ed072d1fc9ac15a22',
logIndex: '361',
contract: '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d',
account: '0x0a1ad77312d36459179ad622c2a8a6280cc79419',
operator: '0x0000000000000000000000000000000000000000',
approvedAll: false,
tokenId: '2947',
tokenName: 'BoredApeYachtClub',
tokenSymbol: 'BAYC',
tokenContractType: 'ERC721',
},
core,
);

expect(approval.chain.decimal).toBe(0x22);
expect(approval.transactionHash).toBe('0x8b7ed07563c2e679b9b49e2e0b62d1fe8a37c2f6c6d43a6ed072d1fc9ac15a22');
expect(approval.logIndex).toBe('361');
expect(approval.contract).toBe('0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d');
expect(approval.account).toBe('0x0a1ad77312d36459179ad622c2a8a6280cc79419');
expect(approval.operator).toBe('0x0000000000000000000000000000000000000000');
expect(approval.approvedAll).toBe(false);
expect(approval.tokenId).toBe('2947');
expect(approval.tokenName).toBe('BoredApeYachtClub');
expect(approval.tokenSymbol).toBe('BAYC');
expect(approval.tokenContractType).toBe('ERC721');
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import {
Core,
CoreProvider,
MoralisDataFormatted,
MoralisDataObject,
MoralisDataObjectValue,
} from '@moralisweb3/common-core';
import { StreamEvmNftTokenApprovalData, StreamEvmNftTokenApprovalish } from './types';
import { EvmChain } from '@moralisweb3/common-evm-utils';

/**
* The `StreamEvmNftTokenApproval` class is a representation of the NFT approval data.
*
* @category DataType
*/
export class StreamEvmNftTokenApproval implements StreamEvmNftTokenApprovalData, MoralisDataObject {
public static create(data: StreamEvmNftTokenApprovalish, core?: Core): StreamEvmNftTokenApproval {
const finalCore = core ?? CoreProvider.getDefault();
const chain = EvmChain.create(data.chain, finalCore);
return new StreamEvmNftTokenApproval({
...data,
chain,
});
}

private constructor(private readonly data: StreamEvmNftTokenApprovalData) {}

public get chain(): EvmChain {
return this.data.chain;
}

public get contract(): string {
return this.data.contract;
}

public get account(): string {
return this.data.account;
}

public get operator(): string {
return this.data.operator;
}
public get approvedAll(): boolean {
return this.data.approvedAll;
}

public get tokenId(): string | null {
return this.data.tokenId;
}

public get transactionHash(): string {
return this.data.transactionHash;
}

public get logIndex(): string {
return this.data.logIndex;
}

public get tokenContractType(): string {
return this.data.tokenContractType;
}

public get tokenName(): string {
return this.data.tokenName;
}

public get tokenSymbol(): string {
return this.data.tokenSymbol;
}

public toJSON(): MoralisDataObjectValue {
return {
chain: this.chain.format(),
contract: this.contract,
account: this.account,
operator: this.operator,
approvedAll: this.approvedAll,
tokenId: this.tokenId,
transactionHash: this.transactionHash,
logIndex: this.logIndex,
tokenContractType: this.tokenContractType,
tokenName: this.tokenName,
tokenSymbol: this.tokenSymbol,
};
}

public format(): MoralisDataFormatted {
return this.toJSON();
}

public equals(value: this): boolean {
return (
this.contract === value.contract &&
this.account === value.account &&
this.operator === value.operator &&
this.approvedAll === value.approvedAll &&
this.tokenId === value.tokenId &&
this.transactionHash === value.transactionHash &&
this.logIndex === value.logIndex &&
this.tokenContractType === value.tokenContractType &&
this.tokenName === value.tokenName &&
this.tokenSymbol === value.tokenSymbol
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './types';
export * from './StreamEvmNftTokenApproval';
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { EvmChain, EvmChainish } from '@moralisweb3/common-evm-utils';
import { INFTApproval } from '@moralisweb3/streams-typings';

export type StreamEvmNftTokenApprovalish = INFTApproval & {
chain: EvmChainish;
};

export type StreamEvmNftTokenApprovalData = INFTApproval & {
chain: EvmChain;
};
1 change: 1 addition & 0 deletions packages/common/streamsUtils/src/dataTypes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export * from './StreamErc20Approval';
export * from './StreamErc20Transfer';
export * from './StreamErc721Approval';
export * from './StreamEvmInternalTransaction';
export * from './StreamEvmNftTokenApproval';
export * from './StreamEvmNftTransfer';
export * from './StreamEvmTransaction';
export * from './StreamEvmTransactionLog';
Expand Down

1 comment on commit 700a64f

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test coverage

Title Lines Statements Branches Functions
api-utils Coverage: 30%
30.34% (61/201) 30.35% (17/56) 30.76% (12/39)
auth Coverage: 89%
92.38% (97/105) 83.33% (20/24) 86.2% (25/29)
evm-api Coverage: 100%
100% (89/89) 66.66% (6/9) 100% (57/57)
common-aptos-utils Coverage: 4%
4.5% (149/3305) 4.64% (25/538) 5.52% (45/814)
common-evm-utils Coverage: 70%
71.11% (1423/2001) 32.04% (314/980) 48.22% (393/815)
sol-api Coverage: 96%
96.66% (29/30) 66.66% (6/9) 91.66% (11/12)
common-sol-utils Coverage: 74%
74.55% (167/224) 66.66% (18/27) 65.38% (51/78)
common-streams-utils Coverage: 91%
91.51% (1229/1343) 76.13% (418/549) 82.22% (444/540)
streams Coverage: 88%
88.19% (575/652) 68.81% (64/93) 87.94% (124/141)

Please sign in to comment.