@gotake/gotake-sdk
Version:
SDK for interacting with GoTake blockchain contracts
307 lines (306 loc) • 13.2 kB
JavaScript
import { VideoPayment__factory } from 'gotake-contracts/dist/typechain/factories/contracts/VideoPayment__factory.js';
import { BaseTransactionWrapper } from './base-transaction-wrapper.js';
/**
* Wrapper for VideoPayment contract, providing purchase and content management functionality
* Uses TypeChain generated types for full type safety
*/
export class VideoPaymentWrapper extends BaseTransactionWrapper {
/**
* Create VideoPayment wrapper instance
* @param provider Provider instance
* @param signer Signer instance
*/
constructor(provider, signer) {
super(provider, signer);
this._videoPayment = null;
}
/**
* Get VideoPayment contract instance
* @returns VideoPayment contract instance
*/
async getVideoPayment() {
await this.init();
if (!this._videoPayment) {
const address = this.getContractAddress('videoPayment');
this._videoPayment = VideoPayment__factory.connect(address, this._signer);
}
return this._videoPayment;
}
// Purchase Functions
/**
* Purchase content with native currency (ETH)
* @param contentId Content ID to purchase
* @param options Transaction options
* @returns Transaction result
*/
async purchaseWithNative(contentId, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.purchaseWithNative(contentId, overrides);
}
/**
* Purchase content with ERC20 token
* @param contentId Content ID to purchase
* @param paymentToken ERC20 token address
* @param amount Token amount to pay
* @param options Transaction options
* @returns Transaction result
*/
async purchaseContent(contentId, paymentToken, amount, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.purchaseContent(contentId, paymentToken, amount, overrides);
}
/**
* Batch purchase multiple content with native currency (ETH)
* @param contentIds Array of content IDs to purchase
* @param options Transaction options
* @returns Transaction result
*/
async batchPurchaseWithNative(contentIds, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.batchPurchaseWithNative(contentIds, overrides);
}
/**
* Batch update native prices for multiple content (Admin only)
* @param contentIds Array of content IDs
* @param prices Array of new prices in wei
* @param options Transaction options
* @returns Transaction result
*/
async batchUpdateNativePrice(contentIds, prices, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.batchUpdateNativePrice(contentIds, prices, overrides);
}
/**
* Batch update token prices for multiple content (Admin only)
* @param contentIds Array of content IDs
* @param token Token address
* @param prices Array of new prices
* @param options Transaction options
* @returns Transaction result
*/
async batchUpdateTokenPrice(contentIds, token, prices, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.batchUpdateTokenPrice(contentIds, token, prices, overrides);
}
/**
* Batch consume views for multiple users and content (Admin only)
* @param users Array of user addresses
* @param contentIds Array of content IDs
* @param options Transaction options
* @returns Transaction result
*/
async batchConsumeView(users, contentIds, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.batchConsumeView(users, contentIds, overrides);
}
/**
* Batch purchase multiple content with ERC20 token
* @param contentIds Array of content IDs to purchase
* @param paymentToken ERC20 token address
* @param totalAmount Total token amount to pay
* @param options Transaction options
* @returns Transaction result
*/
async batchPurchase(contentIds, paymentToken, totalAmount, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.batchPurchase(contentIds, paymentToken, totalAmount, overrides);
}
// Query Functions
/**
* Check if user has view permission for content
* @param user User address
* @param contentId Content ID
* @returns True if user has valid view permission
*/
async hasViewPermission(user, contentId) {
const videoPayment = await this.getVideoPayment();
return videoPayment.hasViewPermission(user, contentId);
}
/**
* Get detailed permission information for user and content
* @param user User address
* @param contentId Content ID
* @returns View permission details
*/
async getPermissionDetails(user, contentId) {
const videoPayment = await this.getVideoPayment();
return videoPayment.getPermissionDetails(user, contentId);
}
/**
* Get user permissions for multiple content items
* @param user User address
* @param contentIds Array of content IDs
* @returns Array of view permission details
*/
async getUserPermissions(user, contentIds) {
const videoPayment = await this.getVideoPayment();
return videoPayment.getUserPermissions(user, contentIds);
}
/**
* Check if content is active
* @param contentId Content ID
* @returns True if content is active
*/
async isContentActive(contentId) {
const videoPayment = await this.getVideoPayment();
return videoPayment.isContentActive(contentId);
}
/**
* Check if token is supported
* @param tokenAddress Token address
* @returns True if token is supported
*/
async isSupportedToken(tokenAddress) {
const videoPayment = await this.getVideoPayment();
return videoPayment.isSupportedToken(tokenAddress);
}
// View Consumption
/**
* Consume a view for user (Admin only)
* @param user User address
* @param contentId Content ID
* @param options Transaction options
* @returns Transaction result
*/
async consumeView(user, contentId, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.consumeView(user, contentId, overrides);
}
// Admin Functions
/**
* Set content configuration (Admin only)
* @param contentId Content ID
* @param nativePrice Native price in wei
* @param defaultViewCount Default view count
* @param viewDuration View duration in seconds
* @param isActive Whether content is active
* @param options Transaction options
* @returns Transaction result
*/
async setContentConfig(contentId, nativePrice, defaultViewCount, viewDuration, isActive, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.setContentConfig(contentId, nativePrice, defaultViewCount, viewDuration, isActive, overrides);
}
/**
* Batch set content configurations (Admin only)
* @param contentIds Array of content IDs
* @param nativePrices Array of native prices in wei
* @param defaultViewCounts Array of default view counts
* @param viewDurations Array of view durations in seconds
* @param isActiveArray Array of active statuses
* @param options Transaction options
* @returns Transaction result
*/
async batchSetContentConfig(contentIds, nativePrices, defaultViewCounts, viewDurations, isActiveArray, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.batchSetContentConfig(contentIds, nativePrices, defaultViewCounts, viewDurations, isActiveArray, overrides);
}
/**
* Update native price for content (Admin only)
* @param contentId Content ID
* @param price New price in wei
* @param options Transaction options
* @returns Transaction result
*/
async updateNativePrice(contentId, price, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.updateNativePrice(contentId, price, overrides);
}
/**
* Update token price for content (Admin only)
* @param contentId Content ID
* @param token Token address
* @param price New price
* @param options Transaction options
* @returns Transaction result
*/
async updateTokenPrice(contentId, token, price, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.updateTokenPrice(contentId, token, price, overrides);
}
/**
* Add supported token (Owner only)
* @param tokenAddress Token address to add
* @param options Transaction options
* @returns Transaction result
*/
async addSupportedToken(tokenAddress, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.addSupportedToken(tokenAddress, overrides);
}
/**
* Remove supported token (Owner only)
* @param tokenAddress Token address to remove
* @param options Transaction options
* @returns Transaction result
*/
async removeSupportedToken(tokenAddress, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.removeSupportedToken(tokenAddress, overrides);
}
/**
* Add admin (Owner only)
* @param adminAddress Admin address to add
* @param options Transaction options
* @returns Transaction result
*/
async addAdmin(adminAddress, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.addAdmin(adminAddress, overrides);
}
/**
* Remove admin (Owner only)
* @param adminAddress Admin address to remove
* @param options Transaction options
* @returns Transaction result
*/
async removeAdmin(adminAddress, options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.removeAdmin(adminAddress, overrides);
}
/**
* Pause contract (Owner only)
* @param options Transaction options
* @returns Transaction result
*/
async pause(options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.pause(overrides);
}
/**
* Unpause contract (Owner only)
* @param options Transaction options
* @returns Transaction result
*/
async unpause(options) {
const videoPayment = await this.getVideoPayment();
const overrides = this.createOverrides(options === null || options === void 0 ? void 0 : options.gasConfig);
return videoPayment.unpause(overrides);
}
/**
* Update connection when provider or signer changes
* @param provider New provider instance
* @param signer New signer instance
*/
updateConnection(provider, signer) {
super.updateConnection(provider, signer);
this._videoPayment = null;
}
}