import { RestClient, Loggable, Logger } from '@reyaxyz/common'; import { GetReyaCheckerResult, GetReyaCheckerParams, GetTgeClaimingInfoParams, GetTgeClaimingInfoResult, TgeClaimTokensParams, TgeClaimTokensResult, TgeLockTokensParams, TgeLockTokensResult, } from './types'; import { signClaimOrLock } from './services/sign'; export default class TGEModule extends RestClient implements Loggable { loggingEnabled: boolean = false; constructor(apiUrl: string, loggingEnabled: boolean) { super(apiUrl); this.loggingEnabled = loggingEnabled; } @Logger('TGEModule.getReyaChecker') async getReyaChecker(params: GetReyaCheckerParams) { const uri = `/api/tge/eligibility-check/${params.wallet}`; return this.get(uri); } @Logger('TGEModule.getClaimingInfo') async getClaimingInfo(params: GetTgeClaimingInfoParams) { const uri = `/api/tge/claiming-info/${params.wallet}`; return this.get(uri); } @Logger('TGEModule.claimTokens') async claimTokens(params: TgeClaimTokensParams) { const { signature, signatureDeadline } = await signClaimOrLock({ signer: params.signer, distributorContract: params.distributorContract, merkleRoot: params.merkleRoot, isLocking: false, }); const wallet = await params.signer.getAddress(); const uri = `/api/tge/claim/${wallet}`; return this.post( uri, {}, { signature, signatureDeadline, }, ); } @Logger('TGEModule.lockTokens') async lockTokens(params: TgeLockTokensParams) { const { signature, signatureDeadline } = await signClaimOrLock({ signer: params.signer, distributorContract: params.distributorContract, merkleRoot: params.merkleRoot, isLocking: true, }); const wallet = await params.signer.getAddress(); const uri = `/api/tge/lock/${wallet}`; return this.post( uri, {}, { signature, signatureDeadline, }, ); } }