2025-04-19 15:38:48 +08:00

94 lines
3.3 KiB
JavaScript

import { getDocumentOrThrow, getLocationOrThrow, } from "@walletconnect/window-getters";
export function getWindowMetadata() {
let doc;
let loc;
try {
doc = getDocumentOrThrow();
loc = getLocationOrThrow();
}
catch (e) {
return null;
}
function getIcons() {
const links = doc.getElementsByTagName("link");
const icons = [];
for (let i = 0; i < links.length; i++) {
const link = links[i];
const rel = link.getAttribute("rel");
if (rel) {
if (rel.toLowerCase().indexOf("icon") > -1) {
const href = link.getAttribute("href");
if (href) {
if (href.toLowerCase().indexOf("https:") === -1 &&
href.toLowerCase().indexOf("http:") === -1 &&
href.indexOf("//") !== 0) {
let absoluteHref = loc.protocol + "//" + loc.host;
if (href.indexOf("/") === 0) {
absoluteHref += href;
}
else {
const path = loc.pathname.split("/");
path.pop();
const finalPath = path.join("/");
absoluteHref += finalPath + "/" + href;
}
icons.push(absoluteHref);
}
else if (href.indexOf("//") === 0) {
const absoluteUrl = loc.protocol + href;
icons.push(absoluteUrl);
}
else {
icons.push(href);
}
}
}
}
}
return icons;
}
function getWindowMetadataOfAny(...args) {
const metaTags = doc.getElementsByTagName("meta");
for (let i = 0; i < metaTags.length; i++) {
const tag = metaTags[i];
const attributes = ["itemprop", "property", "name"]
.map((target) => tag.getAttribute(target))
.filter((attr) => {
if (attr) {
return args.includes(attr);
}
return false;
});
if (attributes.length && attributes) {
const content = tag.getAttribute("content");
if (content) {
return content;
}
}
}
return "";
}
function getName() {
let name = getWindowMetadataOfAny("name", "og:site_name", "og:title", "twitter:title");
if (!name) {
name = doc.title;
}
return name;
}
function getDescription() {
const description = getWindowMetadataOfAny("description", "og:description", "twitter:description", "keywords");
return description;
}
const name = getName();
const description = getDescription();
const url = loc.origin;
const icons = getIcons();
const meta = {
description,
url,
icons,
name,
};
return meta;
}
//# sourceMappingURL=index.js.map