UNPKG

@silvana-one/coordination

Version:

Silvana Coordination Client

97 lines (92 loc) 2.54 kB
export const walrusDaemon = (process.env.NEXT_PUBLIC_WALRUS_DAEMON || process.env.WALRUS_DAEMON || "testnet") as "local" | "testnet"; const daemon: "local" | "testnet" = walrusDaemon === "local" ? "local" : "testnet"; const basePublisherUrl = daemon === "local" ? "http://127.0.0.1:31415" : "https://wal-publisher-testnet.staketab.org"; //"https://publisher.walrus-testnet.walrus.space"; const readerUrl = daemon === "local" ? "http://127.0.0.1:31415/v1/blobs/" : "https://wal-aggregator-testnet.staketab.org/v1/blobs/"; //"https://aggregator.walrus-testnet.walrus.space/v1/blobs/"; const MIN_EPOCHS = 14; const MAX_EPOCHS = 53; export async function saveToWalrus({ data, address, numEpochs = MIN_EPOCHS, }: { data: string; address?: string; numEpochs?: number; }): Promise<string | undefined> { let sendToParam = address ? `&send_object_to=${address}` : ""; let epochs = numEpochs < MIN_EPOCHS ? MIN_EPOCHS : numEpochs > MAX_EPOCHS ? MAX_EPOCHS : numEpochs; console.log("Writing to Walrus"); console.time("written"); const response = await fetch( `${basePublisherUrl}/v1/blobs?epochs=${epochs}${sendToParam}`, { method: "PUT", body: data, } ); console.timeEnd("written"); if (response.status === 200) { const info = await response.json(); //console.log("info", info); const blobId = info?.newlyCreated?.blobObject?.blobId ?? info?.alreadyCertified?.blobId; console.log("Walrus blobId", blobId); return blobId; } else { console.error("saveToDA failed:", { statusText: response.statusText, status: response.status, }); return undefined; } } export async function readFromWalrus({ blobId, }: { blobId: string; }): Promise<string | undefined> { if (!blobId) { throw new Error("blobId is not provided"); } console.log("Reading walrus blob", blobId); console.time("read"); const response = await fetch(`${readerUrl}${blobId}`); console.timeEnd("read"); if (!response.ok) { console.error("readFromDA failed:", { statusText: response.statusText, status: response.status, }); return undefined; } else { const blob = await response.text(); //console.log("blob", blob); return blob; } } export async function getWalrusUrl(params: { blobId: string; }): Promise<string> { const { blobId } = params; if (!blobId) { throw new Error("blobId is not set"); } const url = `${readerUrl}${blobId}`; return url; }