const pages = [ { title: "/" }, { title: "/cramer-tracker" }, { title: "/reddit-tracker" }, { title: "/corporate-lobbying-tracker" }, { title: "/most-shorted-stocks" }, { title: "/stocks" }, { title: "/etf" }, { title: "/crypto" }, { title: "/etf/etf-providers" }, { title: "/etf/new-launches" }, //{ title: "/trending" }, { title: "/price-alert" }, { title: "/heatmaps" }, { title: "/donation" }, //{title: "/portfolio"}, { title: "/sentiment-tracker" }, { title: "/industry" }, { title: "/industry/sectors" }, { title: "/industry/all" }, { title: "/newsletter" }, { title: "/options-flow" }, { title: "/ipos" }, { title: "/list" }, { title: "/list/dividend-kings" }, { title: "/list/dividend-aristocrats" }, { title: "/list/magnificent-seven" }, { title: "/list/mega-cap-stocks" }, { title: "/list/large-cap-stocks" }, { title: "/list/mid-cap-stocks" }, { title: "/list/small-cap-stocks" }, { title: "/list/micro-cap-stocks" }, { title: "/list/nano-cap-stocks" }, { title: "/list/nasdaq-stocks" }, { title: "/list/nyse-stocks" }, { title: "/list/xetra-stocks" }, { title: "/list/nasdaq-100-stocks" }, { title: "/list/dow-jones-stocks" }, { title: "/list/sp-500-stocks" }, { title: "/list/canadian-stocks-us" }, { title: "/list/chinese-stocks-us" }, { title: "/list/indian-stocks-us" }, { title: "/list/japanese-stocks-us" }, { title: "/list/german-stocks-us" }, { title: "/list/israeli-stocks-us" }, { title: "/list/uk-stocks-us" }, { title: "/list/financial-sector" }, { title: "/list/healthcare-sector" }, { title: "/list/technology-sector" }, { title: "/list/industrials-sector" }, { title: "/list/energy-sector" }, { title: "/list/utilities-sector" }, { title: "/list/consumer-cyclical-sector" }, { title: "/list/real-estate-sector" }, { title: "/list/basic-materials-sector" }, { title: "/list/communication-services-sector" }, { title: "/list/consumer-defensive-sector" }, { title: "/list/delisted-stocks" }, { title: "/list/bitcoin-etfs" }, { title: "/stock-screener" }, { title: "/market-news" }, { title: "/market-news/crypto" }, { title: "/market-news/general" }, { title: "/earnings-calendar" }, { title: "/economic-calendar" }, { title: "/dividends-calendar" }, { title: "/stock-splits-calendar" }, { title: "/market-mover" }, { title: "/community" }, { title: "/community/create-post" }, { title: "/hedge-funds" }, { title: "/login" }, { title: "/register" }, { title: "/watchlist/stocks" }, { title: "/watchlist/options" }, //{ title: "/leaderboard" }, //{ title: "/tournament-rules" }, { title: "/pricing" }, { title: "/terms-of-use" }, { title: "/privacy-policy" }, { title: "/imprint" }, { title: "/about" }, { title: "/contact" }, { title: "/blog" }, { title: "/politicians" }, { title: "/politicians/flow-data" }, { title: "/analysts" }, { title: "/analysts/top-stocks" }, ]; const site = "https://stocknear.com"; const website = "https://stocknear.com"; /** @type {import('./$types').RequestHandler} */ export async function GET({ locals }) { //get all posts; const { apiKey, apiURL } = locals; const outputPost = await locals.pb.collection("posts").getFullList(); const outputBlogPost = await locals.pb.collection("articles").getFullList(); const posts = outputPost?.map((item) => ({ id: item.id, })); const articles = outputBlogPost?.map((item) => ({ id: item.id, })); const rawData = await fetch(apiURL + "/searchbar-data", { method: "GET", headers: { "Content-Type": "application/json", "X-API-KEY": apiKey, }, }); const outputStocks = await rawData.json(); const stocks = outputStocks?.map((item) => ({ id: item?.symbol, type: item?.type, })); const body = sitemap(posts, articles, stocks, pages); const response = new Response(body); response.headers.set("Cache-Control", "max-age=0, s-maxage=3600"); response.headers.set("Content-Type", "application/xml"); return response; } // Modified sitemap function const sitemap = ( posts, articles, stocks, pages, ) => ` ${pages .map( (page) => ` ${website}${page.title} `, ) .join("")} ${stocks .map((ticker) => { // Determine the path based on the type of the ticker const path = ticker.type === "Stock" ? "/stocks/" : ticker.type === "ETF" ? "/etf/" : "/crypto/"; return ` ${website}${path}${ticker.id} `; }) .join("")} ${articles .map( (article) => ` ${website}/blog/article/${article.id} `, ) .join("")} ${posts .map( (post) => ` ${website}/community/post/${post.id} `, ) .join("")} `;