From 92619ab3f767acd595dddb3e1eda04714e527e29 Mon Sep 17 00:00:00 2001 From: Xmader Date: Tue, 24 Nov 2020 04:03:06 -0500 Subject: [PATCH] refactor: scoreinfo mscz url --- src/mscz.ts | 8 ++++---- src/scoreinfo.ts | 17 +++++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/mscz.ts b/src/mscz.ts index 2733b00..7781ff1 100644 --- a/src/mscz.ts +++ b/src/mscz.ts @@ -4,16 +4,16 @@ import { ScoreInfo } from './scoreinfo' const MSCZ_BUF_SYM = Symbol('msczBufferP') -export const fetchMscz = async (scoreinfo: ScoreInfo): Promise => { +export const fetchMscz = async (scoreinfo: ScoreInfo, _fetch = fetch): Promise => { let msczBufferP = scoreinfo.store.get(MSCZ_BUF_SYM) as Promise | undefined if (!msczBufferP) { const url = scoreinfo.msczCidUrl msczBufferP = (async (): Promise => { - const r0 = await fetch(url) + const r0 = await _fetch(url) assertRes(r0) - const { Key } = await r0.json() - const r = await fetch(`https://ipfs.infura.io/ipfs/${Key as string}`) + const cidRes = await r0.json() + const r = await _fetch(scoreinfo.getMsczUrl(cidRes)) assertRes(r) const data = await r.arrayBuffer() return data diff --git a/src/scoreinfo.ts b/src/scoreinfo.ts index 53c0f8a..887ef5e 100644 --- a/src/scoreinfo.ts +++ b/src/scoreinfo.ts @@ -1,16 +1,15 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ - -const IPNS_KEY = 'QmSdXtvzC8v8iTTZuj5cVmiugnzbR1QATYRcGix4bBsioP' -const RADIX = 20 export abstract class ScoreInfo { + private readonly IPNS_KEY = 'QmSdXtvzC8v8iTTZuj5cVmiugnzbR1QATYRcGix4bBsioP'; + private readonly RADIX = 20; + abstract id: number; abstract title: string; public store = new Map(); get idLastDigit (): number { - return (+this.id) % RADIX + return (+this.id) % this.RADIX } get fileName (): string { @@ -18,12 +17,18 @@ export abstract class ScoreInfo { } get msczIpfsRef (): string { - return `/ipns/${IPNS_KEY}/${this.idLastDigit}/${this.id}.mscz` + return `/ipns/${this.IPNS_KEY}/${this.idLastDigit}/${this.id}.mscz` } get msczCidUrl (): string { return `https://ipfs.infura.io:5001/api/v0/block/stat?arg=${this.msczIpfsRef}` } + + getMsczUrl (cidRes: { Key: string }): string { + const cid = cidRes.Key + if (!cid) throw new Error('score not in dataset') + return `https://ipfs.infura.io/ipfs/${cid}` + } } export class ScoreInfoInPage extends ScoreInfo {