@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
JavaScript
;
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