UNPKG

@aut-labs/sdk

Version:

The TS/JS SDK package aims to make it easy for frontends/backends to integrate with Aut Smart Contracts

86 lines 2.94 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchMetadata = exports.getMetadataFromCache = exports.removeMetadataFromCache = exports.addMetadataToCache = void 0; const addHours_1 = __importDefault(require("date-fns/addHours")); const stream_1 = require("stream"); function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string } function replaceAll(str, find, replace) { return str.replace(new RegExp(escapeRegExp(find), "g"), replace); } function ipfsCIDToHttpUrl(url, nftStorageUrl) { if (!url) { return url; } if (!url.includes("https://")) return `${nftStorageUrl}/${replaceAll(url, "ipfs://", "")}`; return url; } const addMetadataToCache = (key, value) => { const now = (0, addHours_1.default)(new Date(), 2); const item = { value: value, expiry: now.getTime() }; localStorage.setItem(key, JSON.stringify(item)); }; exports.addMetadataToCache = addMetadataToCache; const removeMetadataFromCache = (key) => { const itemStr = localStorage.getItem(key); if (!itemStr) { return null; } localStorage.removeItem(key); }; exports.removeMetadataFromCache = removeMetadataFromCache; const getMetadataFromCache = (key) => { const itemStr = localStorage.getItem(key); if (!itemStr) { return null; } const item = JSON.parse(itemStr); const now = new Date(); if (now.getTime() > item.expiry) { localStorage.removeItem(key); return null; } return item.value; }; exports.getMetadataFromCache = getMetadataFromCache; const fetchMetadata = async (metadataURI, nftStorageUrl) => { if (!metadataURI) return; let metadata = (0, exports.getMetadataFromCache)(metadataURI); if (!metadata) { try { const response = await fetch(ipfsCIDToHttpUrl(metadataURI, nftStorageUrl), { method: "GET" // headers: { // "Content-Type": "application/json" // } }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } metadata = await response.json(); (0, exports.addMetadataToCache)(metadataURI, metadata); } catch (error) { console.warn(error); } } return metadata; }; exports.fetchMetadata = fetchMetadata; function base64ToStream(base64String) { const buffer = Buffer.from(base64String, "base64"); const readableStream = new stream_1.Readable(); readableStream.push(buffer); readableStream.push(null); // Indicates the end of the stream return readableStream; } //# sourceMappingURL=ipfs-cache.js.map