// Page Code for /checkout-link import { cart } from 'wix-stores'; import wixLocation from 'wix-location'; /** * Accepts `products` query parameter in Meta format: * - Encoded: products=112233%3A1%2C445566%3A2 * - Unencoded: products=112233:1,445566:2 (still works) * * Each entry is ID:QTY. Colons/commas may be RFC 3986-escaped. * Example final URL for Meta: * https://mysticalcrow.com/checkout-link?products=112233%3A1%2C445566%3A2 */ function parseProductsParam(rawParam) { if (!rawParam || typeof rawParam !== 'string') return []; // Try to decode once; if it throws or changes nothing, we still continue safely let decoded = rawParam; try { // decodeURIComponent will convert %3A -> ":", %2C -> "," decoded = decodeURIComponent(rawParam); } catch (_e) { // If decoding fails, we’ll proceed with the original string } // Split by commas (now that we normalized to ":" and ",") // Trim spaces just in case. return decoded .split(',') .map(s => s.trim()) .filter(Boolean) .map(pair => { const [id, qty] = pair.split(':').map(x => (x || '').trim()); const quantity = Number(qty); return (id && !Number.isNaN(quantity) && quantity > 0) ? { productId: id, quantity } : null; }) .filter(Boolean); } async function addAllToCart(items) { // Wix Stores cart.addProducts accepts an array of product objects. // We’ll add one by one to ensure each promise resolves, but you can batch if desired. for (const item of items) { // If a product has variants/options, you’ll need to pass the relevant // selection data here (e.g., options: [{ optionName, selection }]). // For simple products, productId + quantity is sufficient. await cart.addProducts([{ productId: item.productId, quantity: item.quantity }]); } } $w.onReady(async function () { const { products } = wixLocation.query; if (!products) { // No parameter present; go to cart so the user isn't stuck. wixLocation.to('/cart'); return; } const items = parseProductsParam(products); if (!items.length) { // Parameter present but invalid/empty after parsing wixLocation.to('/cart'); return; } try { await addAllToCart(items); // Success: go straight to checkout wixLocation.to('/checkout'); } catch (_err) { // If anything fails (bad ID, etc.), fall back to cart wixLocation.to('/cart'); } });
top of page

TEA TIME  – Dark Academia Candle

A fae of shadowed legend—malevolent yet indispensable, feared for its eerie presence but hunted for the truths it cannot help but speak. Bound to answer any question asked by those who catch it, the Suriel holds the tea:  the whispers of fate, and the insight no mortal or fae was ever meant to know. It is the embodiment of forbidden knowledge—cryptic, unsettling, and irresistible.

This candle mirrors the aura of this dark Fae with the meditative essence of a misty forest. Fog and Fern fragrance oil opens with fresh ozone and bright bergamot, before softening into a calming heart of lavender and mint. At the base, green moss, mineral-rich earth, and a trace of juniper linger like secrets clinging to the air. Infused with natural essential oils of cedarwood, patchouli, lemon, orange, and lime, it is refreshing yet otherworldly—like walking through a rain-washed woodland where every breath feels like a revelation.

Hand-poured with 100% soy wax and a clean cotton wick, this candle burns pure and toxin-free. Each fragrance oil is clean and phthalate-free, crafted to carry the Suriel’s haunting energy safely into your space.

Available in three sizes to suit your rituals:
– 16 oz glass jar for long nights of seeking forbidden truths
– 12 oz glass jar for daily moments of quiet revelation
– 6 oz travel tin to carry secrets wherever you wander

Light the flame, and let the Suriel whisper—truth wrapped in shadow, tea steeped in prophecy, and secrets you can never un-hear.

TEA TIME Dark Academia Candle Collection

$13.00Price
Quantity
    bottom of page