All files / src/metadata pin.ts

30% Statements 9/30
100% Branches 0/0
0% Functions 0/1
30% Lines 9/30

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 311x 1x 1x 1x 1x 1x 1x 1x 1x                                            
import { Metadata } from "./metadata.js";
import {
  pinJSON,
  serializeIndexedMap,
  IndexedMapSerialized,
} from "@silvana-one/storage";
import { Field } from "o1js";
 
export async function pinMetadata(metadata: Metadata): Promise<{
  name: string;
  ipfsHash: string;
  metadataRoot: Field;
  privateMetadata: string;
  serializedMap: IndexedMapSerialized;
}> {
  const privateMetadata = JSON.stringify(metadata.toJSON(true), null, 2);
  const ipfsHash: string | undefined = await pinJSON({
    data: metadata.toJSON(false),
    name: "nft-metadata",
  });
  if (!ipfsHash) throw new Error("Failed to pin metadata");

  return {
    name: metadata.name,
    ipfsHash,
    metadataRoot: metadata.map.root,
    privateMetadata,
    serializedMap: serializeIndexedMap(metadata.map),
  };
}