From 655718768b22bbec7d72e801b9f88679ab61ae53 Mon Sep 17 00:00:00 2001 From: dancode-188 Date: Sun, 28 Dec 2025 01:45:56 +0300 Subject: [PATCH] fix: add validation to importChain to prevent crashes, fixes #12 importChain would crash when given invalid JSON or when required fields were missing. No try-catch on JSON.parse() and no validation before accessing chain.steps would cause TypeErrors. Added validation for: - JSON parsing errors (wrapped in try-catch) - Required fields: name must be a string - steps must be an array (not undefined/null) Now throws clear errors instead of cryptic TypeErrors when import fails. --- src/lib/chain-service.ts | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/lib/chain-service.ts b/src/lib/chain-service.ts index b6666c2..67aae96 100644 --- a/src/lib/chain-service.ts +++ b/src/lib/chain-service.ts @@ -379,8 +379,27 @@ class ChainService { * Import chain from JSON */ async importChain(json: string): Promise { - const chain = JSON.parse(json) as Chain; - + let parsed: any; + + try { + parsed = JSON.parse(json); + } catch (error) { + throw new Error('Invalid JSON format'); + } + + // Validate required fields + if (!parsed || typeof parsed !== 'object') { + throw new Error('Invalid chain data: expected object'); + } + if (!parsed.name || typeof parsed.name !== 'string') { + throw new Error('Invalid chain data: name is required'); + } + if (!Array.isArray(parsed.steps)) { + throw new Error('Invalid chain data: steps must be an array'); + } + + const chain = parsed as Chain; + // Generate new IDs chain.id = `chain-${Date.now()}`; chain.createdAt = new Date();