Precisa de Ajuda? Atendimento
0
Sobre a Dakar Parfums

A Dakar Parfums nasceu para responder a uma pergunta simples: por que uma fragrância marcante precisa ser inacessível?

Criada por Karina, a marca reúne uma curadoria de perfumes inspirados em criações de casas renomadas e de nicho, selecionados pelo que realmente importa — fidelidade das notas, projeção e fixação. Femininos, masculinos e lançamentos constantes, todos em 50ml, com preço que cabe na rotina e não só na ocasião especial.

Atendemos presencialmente em Piracicaba, entregamos para todo o Brasil pelo e-commerce e levamos sua fragrância até a porta com o Dakar Delivery.

Dakar Parfums. O luxo ao seu alcance.

' : '') + '
' + (original > current ? '' + money(original) + '' : '') + '' + money(current) + 'sem cupom
' + (hasInstallment ? '
ou ' + plots + 'x de ' + money(installment) + ' sem juros
' : (payment && !interestFree && plots && installment ? '
' + escapeText(textOf(payment, '.txt-corparcelas') + ' ' + textOf(payment, '.preco-de') + ' ' + textOf(payment, '.txt-cadaparcelas') + ' ' + textOf(payment, '.operadora')).trim() + '
' : '')); var view = ownView(source); if (!view) { view = document.createElement('div'); source.appendChild(view); } view.className = 'dk-price-view'; view.setAttribute('data-dakar-price-view', ''); view.removeAttribute('style'); view.removeAttribute('hidden'); if (view.innerHTML !== markup) view.innerHTML = markup; source.classList.add('dk-price-source'); for (var i = 0; i < source.children.length; i++) { var child = source.children[i]; if (child.matches(nativeLines)) child.classList.add('dk-price-native-line'); } } function refresh() { pending = false; // Desconecta apenas durante nossas escritas, evitando ciclos do observador. if (observer) observer.disconnect(); // Repara apenas nossa folha de estilos se algum refresh externo a remover. if (priceCss) { priceStyle = document.getElementById('dakar-coupon-price-style'); if (!priceStyle) { priceStyle = document.createElement('style'); priceStyle.id = 'dakar-coupon-price-style'; document.head.appendChild(priceStyle); } if (priceStyle.textContent !== priceCss) priceStyle.textContent = priceCss; } var sources = document.querySelectorAll(selector); sources.forEach(render); if (observer) observer.observe(document.documentElement, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ['class', 'style', 'hidden'] }); if (sources.length && !lastCampaignCheck) loadCampaign(); } function schedule() { if (!pending) { pending = true; window.requestAnimationFrame(refresh); } } /* Native public campaign reader. No credentials, no latest-created inference. * Unknown rules, unknown validity, and multiple public coupons fail closed. * ES5 syntax and explicit loops avoid Prototype.js Array method overrides. */ function readDakarPublicCoupon(doc, now) { 'use strict'; function reject(reason) { return { ok: false, reason: reason }; } function normalize(value) { return String(value || '').replace(/\u00a0/g, ' ').replace(/\s+/g, ' ').trim(); } function joinText(root, selector, separator) { var nodes = root.querySelectorAll(selector); var values = []; for (var i = 0; i < nodes.length; i++) values.push(nodes[i].textContent); return normalize(values.join(separator)); } function calendarDate(value) { var match = /^(\d{2})\/(\d{2})\/(\d{4})$/.exec(value); if (!match) return null; var day = Number(match[1]); var month = Number(match[2]); var year = Number(match[3]); var date = new Date(Date.UTC(year, month - 1, day)); if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return null; return match[3] + '-' + match[2] + '-' + match[1]; } function currentBrazilDate() { try { var parts = new Intl.DateTimeFormat('en-US', { timeZone: 'America/Sao_Paulo', year: 'numeric', month: '2-digit', day: '2-digit' }).formatToParts(now || new Date()); var dateParts = {}; for (var i = 0; i < parts.length; i++) dateParts[parts[i].type] = parts[i].value; return dateParts.year + '-' + dateParts.month + '-' + dateParts.day; } catch (error) { return null; } } var lists = doc.querySelectorAll('.coupons-list'); if (lists.length !== 1) return reject('missing-or-ambiguous-coupon-list'); var items = lists[0].querySelectorAll('.coupon-item'); if (!items.length) return reject('no-public-coupon'); if (items.length !== 1) return reject('multiple-public-coupons'); var item = items[0]; var codes = item.querySelectorAll('.coupon-code[data-coupon-code]'); if (codes.length !== 1) return reject('missing-or-ambiguous-code'); var code = normalize(codes[0].getAttribute('data-coupon-code')); if (!/^[a-z0-9_-]{1,100}$/i.test(code)) return reject('unsupported-code'); var ruleText = joinText(item, '.coupon-text p', ' - '); var validityText = joinText(item, '.coupon-validity p', ' '); var percentagePattern = /Desconto de\s*(\d+(?:[.,]\d+)?)\s*%/gi; var percentageMatch = percentagePattern.exec(ruleText); if (!percentageMatch || percentagePattern.exec(ruleText)) return reject('missing-or-ambiguous-percentage'); var percent = Number(percentageMatch[1].replace(',', '.')); if (!isFinite(percent) || percent <= 0 || percent >= 100) return reject('unsupported-percentage'); var allProducts = /V[a\u00e1]lido para todos os produtos da loja/i; var combinesOther = /Poder[a\u00e1] acumular com outros descontos/i; var combinesProgressive = /Poder[a\u00e1] acumular com desconto progressivo/i; if (!allProducts.test(ruleText)) return reject('not-unrestricted-storewide'); if (!combinesOther.test(ruleText) || /n[a\u00e3]o\s+poder[a\u00e1]\s+acumular/i.test(ruleText)) return reject('not-confirmed-cumulative'); var minimumPattern = /Compras a partir de R\$\s*((?:\d{1,3}(?:\.\d{3})+|\d+),\d{2})/i; var minimumMatch = minimumPattern.exec(ruleText); var minimumSubtotalCents = minimumMatch ? Math.round(Number(minimumMatch[1].replace(/\./g, '').replace(',', '.')) * 100) : 0; if (!isFinite(minimumSubtotalCents) || minimumSubtotalCents < 0 || minimumSubtotalCents > 9007199254740991) return reject('invalid-minimum'); // Absence of a minimum is accepted only if all other text is recognized. var unknownRules = ruleText.replace(percentageMatch[0], '').replace(minimumPattern, '').replace(allProducts, '').replace(combinesOther, '').replace(combinesProgressive, '').replace(/\s*[-\u2013\u2014]\s*/g, '').replace(/[.\s]+/g, ''); if (unknownRules) return reject('unsupported-rules'); var unlimitedValidity = /^V[a\u00e1]lido por tempo indeterminado\.?$/i.test(validityText); var startsOn = null; var endsOn = null; if (!unlimitedValidity) { var dateMatch = /^V[a\u00e1]lido at[e\u00e9] (\d{2}\/\d{2}\/\d{4})\.?$/i.exec(validityText); if (dateMatch) endsOn = calendarDate(dateMatch[1]); else { dateMatch = /^V[a\u00e1]lido de (\d{2}\/\d{2}\/\d{4}) (?:at[e\u00e9]|a) (\d{2}\/\d{2}\/\d{4})\.?$/i.exec(validityText); if (!dateMatch) return reject('unrecognized-validity'); startsOn = calendarDate(dateMatch[1]); endsOn = calendarDate(dateMatch[2]); if (!startsOn) return reject('invalid-validity-date'); } if (!endsOn || (startsOn && startsOn > endsOn)) return reject('invalid-validity-date'); var today = currentBrazilDate(); if (!today) return reject('unverifiable-current-date'); if (startsOn && today < startsOn) return reject('not-started'); if (today > endsOn) return reject('expired'); } return { ok: true, coupon: { code: code, percent: percent, minimumSubtotalCents: minimumSubtotalCents, minimumConditionText: minimumMatch ? 'em compras a partir de R$ ' + minimumMatch[1] : '', scope: 'all-products', cumulativeOtherDiscounts: true, cumulativeProgressiveDiscounts: combinesProgressive.test(ruleText), startsOn: startsOn, endsOn: endsOn, unlimitedValidity: unlimitedValidity, source: 'native-public-coupon-page', selection: 'sole-public-coupon', latestCreated: null } }; } // Loader contract: accepts a parsed Document and optional epoch milliseconds. // validUntil is the exclusive expiration time in epoch milliseconds. // Brazil's current UTC-03:00 business timezone is used for local midnight. function parsePublicCoupon(doc, nowMs) { var parsed = readDakarPublicCoupon(doc, typeof nowMs === 'number' ? new Date(nowMs) : new Date()); if (!parsed.ok) return null; return { code: parsed.coupon.code, percent: parsed.coupon.percent, minimumCents: parsed.coupon.minimumSubtotalCents, maximumCents: null, validUntil: parsed.coupon.endsOn ? Date.parse(parsed.coupon.endsOn + 'T23:59:59.999-03:00') + 1 : null, conditionsText: parsed.coupon.minimumConditionText }; } function loadCampaign(isRetry) { if (loadingCampaign || !canLoadCampaign) return; window.clearTimeout(retryTimer); if (!isRetry) retryAttempt = 0; loadingCampaign = true; lastCampaignCheck = Date.now(); // A pagina publica e a unica fonte do codigo, percentual e condicoes. // Falhas temporarias nao renovam os cinco minutos da ultima validacao. var completed = false; function finish(nextCampaign, transientFailure) { if (completed) return; completed = true; loadingCampaign = false; if (transientFailure) { if (Date.now() >= campaignFreshUntil) campaign = null; if (retryAttempt < retryDelays.length) { retryTimer = window.setTimeout(function () { if (document.querySelector(selector)) loadCampaign(true); }, retryDelays[retryAttempt++]); } } else { window.clearTimeout(expiryTimer); retryAttempt = 0; campaign = nextCampaign; campaignFreshUntil = campaign ? Date.now() + 300000 : 0; if (campaign && campaign.validUntil) campaignFreshUntil = Math.min(campaignFreshUntil, campaign.validUntil); if (campaign) { expiryTimer = window.setTimeout(function () { campaign = null; campaignFreshUntil = 0; schedule(); }, Math.max(campaignFreshUntil - Date.now(), 0)); } } schedule(); } try { var request = new XMLHttpRequest(); request.open('GET', couponPage + '?dk_campaign=' + lastCampaignCheck, true); request.timeout = 10000; request.onload = function () { if (request.status !== 200) { finish(null, request.status === 0 || request.status === 408 || request.status === 429 || request.status >= 500); return; } try { var page = new DOMParser().parseFromString(request.responseText, 'text/html'); finish(parsePublicCoupon(page, Date.now()), false); } catch (error) { finish(null, false); } }; request.onerror = request.ontimeout = request.onabort = function () { finish(null, true); }; request.send(); } catch (error) { finish(null, true); } } function start() { if (window.MutationObserver) { observer = new MutationObserver(function (changes) { var changedPrice = changes.some(function (change) { var target = change.target.nodeType === 1 ? change.target : change.target.parentElement; if (target && target.closest('#dakar-coupon-price-style')) return true; if (target && target.closest(selector)) return true; for (var r = 0; r < change.removedNodes.length; r++) { if (change.removedNodes[r] === priceStyle) return true; } for (var i = 0; i < change.addedNodes.length; i++) { var node = change.addedNodes[i]; if (node.nodeType === 1 && (node.matches(selector) || node.querySelector(selector))) return true; } return false; }); if (changedPrice) schedule(); }); } refresh(); // Paginas deixadas abertas tambem acompanham a troca da campanha. window.setInterval(function () { if (!document.hidden && document.querySelector(selector)) loadCampaign(); }, 240000); document.addEventListener('visibilitychange', function () { if (!document.hidden) { schedule(); if (document.querySelector(selector) && Date.now() - lastCampaignCheck >= 60000) loadCampaign(); } }); window.addEventListener('online', function () { if (document.querySelector(selector)) loadCampaign(); }); } if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start, { once: true }); else start(); }());