@river-build/web3
Version:
Dapps for our Space and Registry contracts
101 lines • 4.21 kB
JavaScript
import { ethers } from 'ethers';
import { BaseContractShim } from './BaseContractShim';
import DevAbi from '@river-build/generated/dev/abis/IReview.abi.json' assert { type: 'json' };
import { bin_toHexString } from '@river-build/dlog';
// solidity doesn't export enums, so we need to define them here, boooooo
export var SpaceReviewAction;
(function (SpaceReviewAction) {
SpaceReviewAction[SpaceReviewAction["None"] = -1] = "None";
SpaceReviewAction[SpaceReviewAction["Add"] = 0] = "Add";
SpaceReviewAction[SpaceReviewAction["Update"] = 1] = "Update";
SpaceReviewAction[SpaceReviewAction["Delete"] = 2] = "Delete";
})(SpaceReviewAction || (SpaceReviewAction = {}));
export class IReviewShim extends BaseContractShim {
constructor(address, provider) {
super(address, provider, DevAbi);
}
/**
* Get the review for a user
* @param userAddress - The address of the user to get the review for
* @returns The review for the user
*/
async getReview(userAddress) {
const review = await this.read.getReview(userAddress);
return review;
}
/**
* Get all reviews
* @returns All reviews
*/
async getAllReviews() {
const reviews = await this.read.getAllReviews();
return reviews;
}
async addReview(params, signer) {
return this.write(signer).setReview(SpaceReviewAction.Add, this.encodeReviewParams(params));
}
async updateReview(params, signer) {
return this.write(signer).setReview(SpaceReviewAction.Update, this.encodeReviewParams(params));
}
async deleteReview(signer) {
return this.write(signer).setReview(SpaceReviewAction.Delete, ethers.utils.defaultAbiCoder.encode(['string'], ['']));
}
encodeReviewParams(params) {
return ethers.utils.defaultAbiCoder.encode(['tuple(string,uint8)'], [[params.comment, params.rating]]);
}
}
export function getSpaceReviewEventDataBin(binLogs, from) {
const logs = binLogs.map((log) => ({
address: '0x' + bin_toHexString(log.address),
topics: log.topics.map((topic) => '0x' + bin_toHexString(topic)),
data: '0x' + bin_toHexString(log.data),
})) ?? [];
const senderWallet = '0x' + bin_toHexString(from);
return getSpaceReviewEventData(logs, senderWallet);
}
/**
* Get the review event data from a receipt, public static for ease of use in the SDK
* @param receipt - The receipt of the transaction
* @param senderAddress - The address of the sender
* @returns The review event data
*/
export function getSpaceReviewEventData(logs, senderAddress) {
const contractInterface = new ethers.utils.Interface(DevAbi);
for (const log of logs) {
try {
const parsedLog = contractInterface.parseLog(log);
if (parsedLog.name === 'ReviewAdded' &&
parsedLog.args.user.toLowerCase() === senderAddress.toLowerCase()) {
return {
user: parsedLog.args.user,
comment: parsedLog.args.comment,
rating: parsedLog.args.rating,
action: SpaceReviewAction.Add,
};
}
else if (parsedLog.name === 'ReviewUpdated' &&
parsedLog.args.user.toLowerCase() === senderAddress.toLowerCase()) {
return {
user: parsedLog.args.user,
comment: parsedLog.args.comment,
rating: parsedLog.args.rating,
action: SpaceReviewAction.Update,
};
}
else if (parsedLog.name === 'ReviewDeleted' &&
parsedLog.args.user.toLowerCase() === senderAddress.toLowerCase()) {
return {
user: parsedLog.args.user,
comment: undefined,
rating: 0,
action: SpaceReviewAction.Delete,
};
}
}
catch {
// no need for error, this log is not from the contract we're interested in
}
}
return { user: '', comment: undefined, rating: 0, action: SpaceReviewAction.None };
}
//# sourceMappingURL=IReviewShim.js.map