import { isValidSuiAddress, normalizeSuiAddress } from '@mysten/sui/utils'; import { MAX_UINT_64 } from '../../constants.js'; import { BaseValidator } from '../../utils/base-validator.js'; import { ValidationError } from '../../errors/index.js'; const SUI_TOKEN_ADDRESS_REGEX = /^0x[a-fA-F0-9]{64}::\w+::\w+$/; export class SuiValidator extends BaseValidator { isValidAddress(address: string): boolean { return isValidSuiAddress(normalizeSuiAddress(address)); } isValidTokenAddress(tokenAddress: string): boolean { const [address] = tokenAddress.split('::'); const isValidAddress = address !== undefined ? this.isValidAddress(address) : false; return isValidAddress && SUI_TOKEN_ADDRESS_REGEX.test(tokenAddress); } isValidAmount(amount: bigint): boolean { return amount > 0n && amount < MAX_UINT_64; } protected getChainName(): string { return 'Sui'; } public async validateCrossChainOrderFeasability(): Promise { // No chain-specific validation implemented for now for Sui return; } override validateSingleChainOrderFeasability(): Promise { return Promise.resolve(); } override validateDcaSingleChainOrderFeasability(): Promise { throw new ValidationError('DCA orders are not supported on Sui'); } }