UNPKG

@robertprp/intents-sdk

Version:

Shogun Network Intent-based cross-chain swaps SDK

81 lines 3 kB
import { ChainType, chainIdToChainTypeMap } from '../chains.js'; import { EvmValidator } from '../core/evm/validator.js'; import { SolanaValidator } from '../core/solana/validator.js'; import { SuiValidator } from '../core/sui/validator.js'; import { ValidationError } from '../errors/index.js'; /** * CommonValidator - Handles validations shared across chains */ export class CommonValidator { isValidDeadline(deadline) { return deadline > Math.floor(Date.now() / 1000); } validateDeadline(deadline) { if (!this.isValidDeadline(deadline)) { throw new ValidationError('Deadline must be in the future'); } } } export class ValidatorFactory { static getValidator(chainType) { if (!this.validators.has(chainType)) { switch (chainType) { case ChainType.EVM: this.validators.set(chainType, new EvmValidator()); break; case ChainType.Solana: this.validators.set(chainType, new SolanaValidator()); break; case ChainType.Sui: this.validators.set(chainType, new SuiValidator()); break; default: throw new ValidationError(`Chain type ${chainType} validation is not implemented.`); } } return this.validators.get(chainType); } static getValidatorForChain(chainId) { const chainType = chainIdToChainTypeMap[chainId]; return this.getValidator(chainType); } } Object.defineProperty(ValidatorFactory, "validators", { enumerable: true, configurable: true, writable: true, value: new Map() }); export class CrossChainOrderValidator { constructor() { Object.defineProperty(this, "commonValidator", { enumerable: true, configurable: true, writable: true, value: new CommonValidator() }); } async validateOrder(order) { const sourceValidator = ValidatorFactory.getValidatorForChain(order.sourceChainId); await sourceValidator.validateSourceChain({ ...order, user: order.user }); const destinationValidator = ValidatorFactory.getValidatorForChain(order.destinationChainId); destinationValidator.validateDestinationChain(order); this.commonValidator.validateDeadline(order.deadline); } } export class SingleChainOrderValidator { constructor() { Object.defineProperty(this, "commonValidator", { enumerable: true, configurable: true, writable: true, value: new CommonValidator() }); } async validateOrder(order) { this.commonValidator.validateDeadline(order.deadline); const chainValidator = ValidatorFactory.getValidatorForChain(order.chainId); chainValidator.validateSingleChainOrder(order); } } //# sourceMappingURL=order-validator.js.map