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
JavaScript
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');
}