[SDK] Fix single event listener (#7)

This commit is contained in:
Joaquim Verges
2022-08-29 05:54:05 +00:00
committed by GitHub
parent 097c2700b2
commit 0c78b164e9
5 changed files with 47 additions and 41 deletions
-13
View File
@@ -1,13 +0,0 @@
---
"@thirdweb-dev/auth": patch
"thirdweb": patch
"@thirdweb-dev/contracts-js": patch
"eslint-config-thirdweb": patch
"@thirdweb-dev/react": patch
"@thirdweb-dev/sdk": patch
"@thirdweb-dev/solana": patch
"@thirdweb-dev/storage": patch
"@thirdweb-dev/tsconfig": patch
---
init monorepo
+5
View File
@@ -0,0 +1,5 @@
---
"@thirdweb-dev/sdk": patch
---
Fix listening to a single contract event
+3 -2
View File
@@ -27,9 +27,10 @@
"clean": "turbo run clean && rm -rf node_modules",
"format": "prettier --write \"**/*.{ts,tsx,md}\"",
"changeset": "changeset",
"version-packages": "changeset version",
"bump-version": "changeset version",
"release": "turbo run build && changeset publish",
"postinstall": "yarn-deduplicate yarn.lock"
"postinstall": "yarn-deduplicate yarn.lock",
"dev-version": "yarn changeset pre enter dev && yarn bump-version"
},
"preconstruct": {
"packages": [
@@ -66,7 +66,7 @@ export class ContractEvents<TContract extends BaseContract> {
*/
public addEventListener(
eventName: keyof TContract["filters"] | (string & {}),
listener: (event: Record<string, any>) => void,
listener: (event: ContractEvent) => void,
) {
// validates event, throws error if not found
const event = this.contractWrapper.readContract.interface.getEvent(
@@ -74,7 +74,7 @@ export class ContractEvents<TContract extends BaseContract> {
);
const address = this.contractWrapper.readContract.address;
const filter = { address, topics: [event.name] };
const filter = { address, topics: [this.contractWrapper.readContract.interface.getEventTopic(event)] };
const wrappedListener = (log: providers.Log) => {
const parsedLog =
+37 -24
View File
@@ -1,8 +1,7 @@
import { ethers, Wallet } from "ethers";
import { sdk, signers } from "./before-setup";
import { EventType } from "../src/constants/events";
import { expect } from "chai";
import { ContractEvent, NFTDrop, ThirdwebSDK, NFTCollection } from "../src";
import { ContractEvent, NFTDrop, NFTCollection } from "../src";
import { AddressZero } from "@ethersproject/constants";
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
@@ -10,6 +9,7 @@ global.fetch = require("cross-fetch");
describe("Events", async () => {
let dropContract: NFTDrop;
let dropContract2: NFTDrop;
let nftContract: NFTCollection;
let adminWallet: SignerWithAddress,
samWallet: SignerWithAddress,
@@ -34,6 +34,20 @@ describe("Events", async () => {
}),
);
dropContract2 = sdk.getNFTDrop(
await sdk.deployer.deployBuiltInContract(NFTDrop.contractType, {
name: `Testing drop from SDK`,
description: "Test contract from tests",
image:
"https://pbs.twimg.com/profile_images/1433508973215367176/XBCfBn3g_400x400.jpg",
primary_sale_recipient: AddressZero,
seller_fee_basis_points: 500,
fee_recipient: AddressZero,
platform_fee_basis_points: 10,
platform_fee_recipient: AddressZero,
}),
);
nftContract = sdk.getNFTCollection(
await sdk.deployer.deployBuiltInContract(NFTCollection.contractType, {
name: "NFT Contract",
@@ -65,7 +79,7 @@ describe("Events", async () => {
it("should emit Contract events", async () => {
const events: ContractEvent[] = [];
dropContract.events.listenToAllEvents((event) => {
const remove = dropContract.events.addEventListener("TokensLazyMinted", (event) => {
events.push(event);
});
await dropContract.createBatch([
@@ -77,32 +91,31 @@ describe("Events", async () => {
},
]);
await new Promise((resolve) => setTimeout(resolve, 5000));
dropContract.events.removeAllListeners();
remove();
expect(events.length).to.be.gt(0);
expect(events.map((e) => e.eventName)).to.include("TokensLazyMinted");
});
// TODO
it.skip("should emit Signature events", async () => {
const RPC_URL = "https://rpc-mumbai.maticvigil.com/";
const provider = ethers.getDefaultProvider(RPC_URL);
const wallet = Wallet.createRandom().connect(provider);
const esdk = new ThirdwebSDK(wallet, {
gasless: {
openzeppelin: {
relayerUrl: "https://google.com", // TODO test relayer url?
},
it("should emit all Contract events", async () => {
const events: ContractEvent[] = [];
const remove = dropContract2.events.listenToAllEvents((event) => {
events.push(event);
});
await dropContract2.createBatch([
{
name: "1",
},
});
sdk.on(EventType.Transaction, (event) => {
console.log(event);
});
sdk.on(EventType.Signature, (event) => {
console.log(event);
});
await esdk
.getNFTDrop(dropContract.getAddress())
.setApprovalForAll(ethers.constants.AddressZero, true);
{
name: "2",
},
]);
await dropContract2.claimConditions.set([{}]);
await dropContract2.claim(1)
await new Promise((resolve) => setTimeout(resolve, 5000));
remove();
expect(events.length).to.be.gt(0);
expect(events.map((e) => e.eventName)).to.include("TokensLazyMinted");
expect(events.map((e) => e.eventName)).to.include("TokensClaimed");
});
it("should return single event", async () => {