From 054a9a3c01057913005936b0aa1c9d4d71c4c8a2 Mon Sep 17 00:00:00 2001 From: fyears <1142836+fyears@users.noreply.github.com> Date: Sat, 30 Apr 2022 15:40:56 +0800 Subject: [PATCH] add more verbose hint about the json --- src/metadataOnRemote.ts | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/metadataOnRemote.ts b/src/metadataOnRemote.ts index 72d689c..8891547 100644 --- a/src/metadataOnRemote.ts +++ b/src/metadataOnRemote.ts @@ -70,19 +70,44 @@ export const deserializeMetadataOnRemote = (x: string | ArrayBuffer) => { } else { y1 = new TextDecoder().decode(x); } - const y2: any = JSON.parse(y1); - if (!("readme" in y2 && "d" in y2)) { - throw Error("invalid remote meta data file!"); + let y2: any; + try { + y2 = JSON.parse(y1); + } catch (e) { + throw new Error( + `invalid remote meta data file with first few chars: ${y1.slice(0, 5)}` + ); } - const y3 = JSON.parse( - ( + if (!("readme" in y2 && "d" in y2)) { + throw new Error( + 'invalid remote meta data file (no "readme" or "d" fields)!' + ); + } + + let y3: string; + try { + y3 = ( base64url.parse(reverseString(y2["d"]), { out: Buffer.allocUnsafe as any, loose: true, }) as Buffer - ).toString("utf-8") - ) as MetadataOnRemote; - return y3; + ).toString("utf-8"); + } catch (e) { + throw new Error('invalid remote meta data file (invalid "d" field)!'); + } + + let y4: MetadataOnRemote; + try { + y4 = JSON.parse(y3) as MetadataOnRemote; + } catch (e) { + throw new Error( + `invalid remote meta data file with \"d\" field with first few chars: ${y3.slice( + 0, + 5 + )}` + ); + } + return y4; };