orbitdb / field-manual

The Offical User's Guide to OrbitDB

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

IPFS Codecs issue

elie-h opened this issue · comments

Hi!

Following the 02_Managing_Data.md section of the tutorial
Looks like any calls ipfs with a CID cause a codec issue - I'm using the exact same code in the github from section 2 for define the NewPiecePlease class.

Error:

Projects/orbitdb/node_modules/ipfs-core-utils/cjs/src/multicodecs.js:5
const LOAD_CODEC = codeOrName => Promise.reject(new Error(`No codec found for "${ codeOrName }"`));
                                                ^

Error: No codec found for "undefined"
    at Multicodecs.LOAD_CODEC [as _loadCodec] (/Users/eliehamouche/Projects/orbitdb/node_modules/ipfs-core-utils/cjs/src/multicodecs.js:5:49)
    at Multicodecs.getCodec (/Users/eliehamouche/Projects/orbitdb/node_modules/ipfs-core-utils/cjs/src/multicodecs.js:31:30)
    at get (/Users/eliehamouche/Projects/orbitdb/node_modules/ipfs-core/cjs/src/components/dag/get.js:30:32)
    at DagAPI.get (/Users/eliehamouche/Projects/orbitdb/node_modules/ipfs-core-utils/cjs/src/with-timeout-option.js:18:14)
    at NewPiecePlease.NPP.onready (/Users/eliehamouche/Projects/orbitdb/main.js:13:44)

Node.js v17.3.0

My script:

const NPP = require("./newpieceplease");


NPP.onready = async () => {
    let cid
    const hash = "QmNR2n4zywCV61MeMLB6JwPueAPqheqpfiA4fLPMxouEmQ";

    cid = await NPP.addNewPiece(hash)
    console.log(cid)

    if (cid) {
        const content = await NPP.node.dag.get(cid)
        console.log(content.value.payload.value)
    }

    console.log('getting all pieces')
    let pieces = NPP.getAllPieces()
    pieces.forEach((piece) => {
        console.log(piece)
    })

    console.log('getting piece by ' + hash)
    piece = NPP.getPieceByHash(hash)
    console.log(piece)

    console.log('getting random piece')
    pieces = NPP.getPieceByInstrument("Piano")
    const randomPiece = pieces[pieces.length * Math.random() | 0]
    console.log(randomPiece)

    cid = await NPP.updatePieceByHash(hash, "Harpsichord")

    if (cid) {
        console.log('update piece' + hash)
        const content = await NPP.node.dag.get(cid)
        console.log(content.value.payload.value)
    }

    cid = await NPP.deletePieceByHash(hash)

    if (cid) {
        const content = await NPP.node.dag.get(cid)
        console.log(content.value.payload)
    }
}

NPP.create()

dependencies:

    "ipfs": "^0.62.1",
    "orbit-db": "^0.28.3"

The field manual is outdated in this respect inasmuch as now the dag.get api requires a cid object, see the doc example here.

The cid you are using in your code is the string representation of the cid object, you first have to parse it

let parsedCid = IpfsCore.CID.parse("zdpuAvD7x5ZX5hz96MiEhFpeLayZRbBj75HwNdvJhfz8y3t4T")

before fetching the data

const content = await NPP.node.dag.get(parsedCid)