UNPKG

postchain-client

Version:

Client library for accessing a Postchain node through REST.

102 lines 3.93 kB
import { z } from "zod"; import { FailoverStrategy } from "../enums"; import { MissingBlockchainIdentifierError, MissingNodeUrlError, } from "../errors"; const IdentifierSchema = z.union([ z.object({ blockchainRid: z.undefined(), blockchainIid: z.number(), }), z.object({ blockchainRid: z.string(), blockchainIid: z.undefined(), }), ]); const NodeUrlSchema = z.union([ z.object({ nodeUrlPool: z.union([z.string(), z.array(z.string())]), directoryNodeUrlPool: z.undefined(), }), z.object({ nodeUrlPool: z.undefined(), directoryNodeUrlPool: z.union([z.string(), z.array(z.string())]), }), ]); const RestNetworkSettingsSchema = z.object({ statusPollingInterval: z.number().optional(), statusPollingCount: z.number().optional(), failOverConfig: z .object({ strategy: z.nativeEnum(FailoverStrategy).optional(), attemptsPerEndpoint: z.number().optional(), attemptInterval: z.number().optional(), unreachableDuration: z.number().optional(), }) .optional(), }); export const validateBlockChainIdentifier = (networkSettings, options) => { const { throwOnError = false } = options || {}; const identifierValidationContext = IdentifierSchema.safeParse(networkSettings); if ("error" in identifierValidationContext) { const missingBlockchainIdentifierError = new MissingBlockchainIdentifierError(); if (throwOnError) { throw missingBlockchainIdentifierError; } return { success: identifierValidationContext.success, error: identifierValidationContext.error, message: missingBlockchainIdentifierError.message, }; } return { success: true }; }; const validateNodeUrl = (networkSettings, options) => { const { throwOnError = false } = options || {}; const nodeUrlValidationContext = NodeUrlSchema.safeParse(networkSettings); if ("error" in nodeUrlValidationContext) { const missingNodeUrlError = new MissingNodeUrlError(); if (throwOnError) { throw missingNodeUrlError; } return { success: nodeUrlValidationContext.success, error: nodeUrlValidationContext.error, message: missingNodeUrlError.message, }; } return { success: true }; }; const validateRestNetworkSettings = (networkSettings, options) => { const { throwOnError = false } = options || {}; const restNetworkSettingsValidationContext = RestNetworkSettingsSchema.safeParse(networkSettings); if ("error" in restNetworkSettingsValidationContext) { const { error: { issues }, } = restNetworkSettingsValidationContext; const errorMessage = issues .map(({ message, path }) => `${path[0]}: ${message}`) .join(", "); if (throwOnError) { throw new Error(errorMessage); } return { success: restNetworkSettingsValidationContext.success, error: restNetworkSettingsValidationContext.error, message: errorMessage, }; } return { success: true }; }; export const isNetworkSettingValid = (networkSettings, options) => { const identifierValidationContext = validateBlockChainIdentifier(networkSettings, options); if ("error" in identifierValidationContext) { return identifierValidationContext; } const nodeUrlValidationContext = validateNodeUrl(networkSettings, options); if ("error" in nodeUrlValidationContext) { return nodeUrlValidationContext; } const restNetworkSettingsValidationContext = validateRestNetworkSettings(networkSettings, options); if ("error" in restNetworkSettingsValidationContext) { return restNetworkSettingsValidationContext; } return { success: true }; }; //# sourceMappingURL=networkSettings.js.map