UNPKG

@gotake/gotake-sdk

Version:

SDK for interacting with GoTake blockchain contracts

307 lines (306 loc) 13.2 kB
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; } }