UNPKG

lotus-sdk

Version:

Central repository for several classes of tools for integrating with, and building for, the Lotusia ecosystem

144 lines (143 loc) 5.9 kB
import { ValidationError } from '../musig2/errors.js'; function validateString(value, fieldName, allowEmpty = false) { if (typeof value !== 'string') { throw new ValidationError(`${fieldName} must be a string`, `invalid-type-${fieldName}`); } if (!allowEmpty && value.length === 0) { throw new ValidationError(`${fieldName} cannot be empty`, `empty-${fieldName}`); } } function validateNumber(value, fieldName) { if (typeof value !== 'number' || !Number.isFinite(value)) { throw new ValidationError(`${fieldName} must be a finite number`, `invalid-type-${fieldName}`); } } export function validatePoolJoinPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.participantIndex, 'participantIndex'); } export function validateParticipantRegisteredPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.participantIndex, 'participantIndex'); validateString(p.peerId, 'peerId'); validateString(p.publicKey, 'publicKey'); validateString(p.inputTxId, 'inputTxId'); validateNumber(p.inputIndex, 'inputIndex'); validateString(p.ownershipProof, 'ownershipProof'); validateString(p.finalOutputCommitment, 'finalOutputCommitment'); validateNumber(p.timestamp, 'timestamp'); } export function validateRegistrationAckPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.participantIndex, 'participantIndex'); validateString(p.acknowledgedBy, 'acknowledgedBy'); validateNumber(p.timestamp, 'timestamp'); } export function validateSetupTxBroadcastPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.participantIndex, 'participantIndex'); validateString(p.txId, 'txId'); validateNumber(p.timestamp, 'timestamp'); } export function validateSetupConfirmedPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.participantIndex, 'participantIndex'); validateString(p.txId, 'txId'); validateNumber(p.confirmations, 'confirmations'); validateNumber(p.timestamp, 'timestamp'); } export function validateSetupCompletePayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.timestamp, 'timestamp'); } export function validateDestinationRevealPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.participantIndex, 'participantIndex'); validateString(p.finalAddress, 'finalAddress'); validateString(p.revealProof, 'revealProof'); validateNumber(p.timestamp, 'timestamp'); } export function validateRevealCompletePayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.timestamp, 'timestamp'); } export function validateSettlementTxBroadcastPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.outputIndex, 'outputIndex'); validateString(p.txId, 'txId'); validateNumber(p.timestamp, 'timestamp'); } export function validateSettlementConfirmedPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.outputIndex, 'outputIndex'); validateString(p.txId, 'txId'); validateNumber(p.confirmations, 'confirmations'); validateNumber(p.timestamp, 'timestamp'); } export function validateSettlementCompletePayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateNumber(p.timestamp, 'timestamp'); } export function validatePoolAbortPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateString(p.reason, 'reason'); validateNumber(p.timestamp, 'timestamp'); } export function validateParticipantDroppedPayload(payload) { if (!payload || typeof payload !== 'object') { throw new ValidationError('Payload must be an object', 'invalid-payload'); } const p = payload; validateString(p.poolId, 'poolId'); validateString(p.peerId, 'peerId'); validateString(p.reason, 'reason'); validateNumber(p.timestamp, 'timestamp'); }