{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/1BgMWlvkNrAoWAdnJbb6/gKIRUICukVyRXqGtMx5P/siteMetadata.js", "ssg:https://framerusercontent.com/modules/sRfNPgMMwZftx99LCYbr/jGLMotngPbgfeEo9uH6D/augiA20Il.js"],
  "sourcesContent": ["// Generated by Framer (5bbf1f3)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:\"<script>\\nwindow.addEventListener('load', async function () {\\n\tfunction waitForEl(selector) {\\n\t    return new Promise(resolve => {\\n\t        if (document.querySelector(selector)) {\\n\t            return resolve(document.querySelector(selector));\\n\t        }\\n\t\\n\t        const observer = new MutationObserver(mutations => {\\n\t            if (document.querySelector(selector)) {\\n\t                observer.disconnect();\\n\t                resolve(document.querySelector(selector));\\n\t            }\\n\t        });\\n\t\\n\t        // If you get \\\"parameter 1 is not of type 'Node'\\\" error, see https://stackoverflow.com/a/77855838/492336\\n\t        observer.observe(document.body, {\\n\t            childList: true,\\n\t            subtree: true\\n\t        });\\n\t    });\\n\t}\\n\\n\tawait waitForEl(\\n\t\t\t\t'[data-framer-name=live-cost-of-access] h2'\\n\t\t\t);\\n\tfunction sleep(ms) {\\n\t\treturn new Promise(resolve => setTimeout(resolve, ms));\\n\t}\\n\tsleep(2000);\\n\\n\tasync function selectByFramerName(framerName) {\\n\t\tlet el = await waitForEl(`[data-framer-name=\\\"${framerName}\\\"]`)\\n\t\treturn el;\\n\t}\\n\t\\n\tfunction randomIntFromInterval(min, max) {\\n\t\t// min and max included\\n\t\treturn (Math.random() * (max - min + 1) + min).toFixed(2);\\n\t}\\n\\n\tasync function getRandomResults() {\\n\t\tconst resp = await fetch('https://data.sirbofi.com/api/random-results', {method: 'get', headers: {'Access-Control-Allow-Origin': \\\"https://data.sirbofi.com/\\\"}})\\n\t\tconst data = await resp.json()\\n\t\treturn data.opportunities;\\n\t}\\n\\n\tasync function getAccessPositionValue() {\\n\t\tconst resp = await fetch(\\n\t\t\t'https://data.sirbofi.com/api/access-position-value'\\n\t\t);\\n\t\tconst respJson = await resp.json();\\n\t\treturn respJson.usd;\\n\t}\\n\\n\tfunction setupPulse(el) {\\n\t\tel.style.transitionDuration = '1s';\\n\t\tel.style.transitionTimingFunction = 'linear';\\n\t}\\n\\n\tfunction pulse(el) {\\n\t\tel.style.transitionProperty = 'none';\\n\t\tel.style.animationName = 'none';\\n\t\tel.style.color = 'white';\\n\t\tsetTimeout(function () {\\n\t\t\tel.style.transitionProperty = 'all';\\n\t\t\tel.style.color = '#00ff00';\\n\t\t\tel.style.animationName = 'wave';\\n\t\t}, 100);\\n\t}\\n\t\\n\tlet liveCostOfAccess;\\n\t(async function keepFetchingLiveCostOfAccess() {\\n\t\tif (liveCostOfAccess !== undefined) {\\n\t\t\tfetchedCostOfAccess = await getAccessPositionValue();\\n\t\t\tif (Number(liveCostOfAccess.innerText) !== fetchedCostOfAccess) {\\n\t\t\t\tliveCostOfAccess.innerText = fetchedCostOfAccess;\\n\t\t\t\tpulse(liveCostOfAccess);\\n\t\t\t}\\n\t\t\tsetTimeout(keepFetchingLiveCostOfAccess, 3000);\\n\t\t} else {\\n\t\t\tliveCostOfAccess = await waitForEl(\\n\t\t\t\t'[data-framer-name=live-cost-of-access] h2'\\n\t\t\t);\\n\t\t\tif (liveCostOfAccess !== undefined) {\\n\t\t\t\tsetupPulse(liveCostOfAccess);\\n\t\t\t\tsetTimeout(keepFetchingLiveCostOfAccess, 1000);\\n\t\t\t} else {\\n\t\t\t\tkeepFetchingLiveCostOfAccess();\\n\t\t\t}\\n\t\t}\\n\t})();\\n\\n\\n\t// RANDOM RESULTS WIDGET CODE\\n\tconst getRandomResultsButton = await selectByFramerName('getRandomResultsButton');\\n\tconst currencyNameEl = await selectByFramerName('currencyName');\\n\tlet randomResultWrapper = await selectByFramerName('randomResultWrapper');\\n\tlet randomResultsContainer = await selectByFramerName('randomResultsContainer');\\n\tlet randomResultWrapperTemplate = randomResultWrapper.cloneNode(true);\\n\trandomResultWrapper.remove();\\n\tgetRandomResultsButton.addEventListener('click', async ()=>{\\n\t\trandomResultsContainer.innerHTML = `\\n\t\t\t<div class=\\\"loading-spinner\\\">\\n\t\t\t\t<div class=\\\"spinner\\\"></div>\\n\t\t\t</div>\\n\t\t`;\\n\t\tconst opCryptos = await getRandomResults();\\n\t\tconst ops = Object.values(opCryptos)[0]\\n\t\tif (currencyNameEl) {\\n\t\t\tcurrencyNameEl.querySelector('h5').textContent = Object.keys(opCryptos)[0]\\n\t\t}\\n\t\trandomResultsContainer.innerHTML = '';\\n\t\tfor(let i = 0; i < 5; i++) {\\n\t\t\trandomResultWrapper = randomResultWrapperTemplate.cloneNode(true);\\n\t\t\tconst textElems = randomResultWrapper.querySelectorAll('p');\\n\t\t\tconst resultToElemsMap = {\\n\t\t\t\t0: \\\"buy_from_exchange\\\",\\n\t\t\t\t1: \\\"buy_from_price\\\",\\n\t\t\t\t2: \\\"potential_profit\\\",\\n\t\t\t\t3: \\\"sell_to_price\\\",\\n\t\t\t\t4: \\\"sell_to_exchange\\\"\\n\t\t\t}\\n\t\t\tfor (let j = 0; j < textElems.length; j++) {\\n\t\t\t\tconst el = textElems[j];\\n\t\t\t\tif (el) {\\n\t\t\t\t\tel.textContent = ops[i][resultToElemsMap[j]]\\n\t\t\t\t\tif (j === 2) {\\n\t\t\t\t\t\tel.textContent = `+${el.textContent}%`;\\n\t\t\t\t\t} else if ([1,3].includes(j)) {\\n\t\t\t\t\t\tel.textContent = Number(el.textContent).toFixed(2);\\n\t\t\t\t\t}\\n\t\t\t\t}\\n\t\t\t}\\n\t\t\trandomResultsContainer.appendChild(randomResultWrapper);\\n\t\t}\\n\t})\\n});\\n</script>\\n\\n<style>\\n@keyframes wave {\\n\t0% {opacity: 1;}\\n\t50% {opacity: 0.5;}\\n\t100% {opacity: 1;}\\n}\\n\\n[data-framer-name=live-cost-of-access] h2 {\\n\tanimation-name: wave;\\n\tanimation-duration: 2s;\\n\tanimation-timing-function: ease-out;\\n\tanimation-iteration-count: infinite;\\n}\\n\\n* {\\n\t-webkit-tap-highlight-color:  rgba(255, 255, 255, 0); \\n}\\n\\n.loading-spinner {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  width:100%;\\n  height: 200px;\\n}\\n\\n.spinner {\\n  width: 16px;\\n  height: 16px;\\n  border-radius: 50%;\\n  border: 2px solid rgba(207, 213, 230, 0.2);\\n  border-top-color: white;\\n  animation: spin 1s ease-in-out infinite;\\n}\\n\\n@keyframes spin {\\n  to {\\n    transform: rotate(calc(360deg * 2));\\n  }\\n}\\n\\n</style>\",description:\"Sir Bofi - A tool that finds arbitrage opportunities between global exchanges in matter of seconds protected by Token Gated Access.\",favicon:\"https://framerusercontent.com/assets/l6dnVoOrVAAdoXQ6lXarxlX3I.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/MH29BzJQVsEGYL1XD7GH8FKMi0M.jpg\",title:\"Sir Bofi | Fastest in the industry arbitrage search algorithm\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}", "// Generated by Framer (a3b61f5)\nimport siteMetadata from\"https://framerusercontent.com/modules/1BgMWlvkNrAoWAdnJbb6/gKIRUICukVyRXqGtMx5P/siteMetadata.js\";export default function metadata(params,activeLocale){return{bodyClassName:\"framer-body-augiA20Il\",breakpoints:[{hash:\"72rtr7\",mediaQuery:\"(min-width: 1440px)\"},{hash:\"dfkg0k\",mediaQuery:\"(min-width: 810px) and (max-width: 1439px)\"},{hash:\"1rj31h2\",mediaQuery:\"(max-width: 809px)\"}],description:siteMetadata(params,activeLocale).description,elements:{PFsqmkBp9:\"pricing\",YWVZL8WLG:\"feature\"},framerSearch:{index:true},robots:\"max-image-preview:large\",serializationId:\"framer-DIgnk\",title:\"Sir Bofi | Fastest in the industry arbitrage search algorithm\",viewport:\"width=device-width\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "AACe,SAARA,EAA0BC,EAAOC,EAAa,CAAC,MAAM,CAAC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAulK,YAAY,sIAAsI,QAAQ,qEAAqE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,+DAA+D,CAAE,CCAv7K,SAARC,EAA0BC,EAAOC,EAAa,CAAC,MAAM,CAAC,cAAc,wBAAwB,YAAY,CAAC,CAAC,KAAK,SAAS,WAAW,qBAAqB,EAAE,CAAC,KAAK,SAAS,WAAW,4CAA4C,EAAE,CAAC,KAAK,UAAU,WAAW,oBAAoB,CAAC,EAAE,YAAYF,EAAaC,EAAOC,CAAY,EAAE,YAAY,SAAS,CAAC,UAAU,UAAU,UAAU,SAAS,EAAE,aAAa,CAAC,MAAM,EAAI,EAAE,OAAO,0BAA0B,gBAAgB,eAAe,MAAM,gEAAgE,SAAS,oBAAoB,CAAE,CAAQ,IAAMC,EAAgB,EACltBC,EAAqB,CAAC,QAAU,CAAC,QAAU,CAAC,KAAO,WAAW,YAAc,CAAC,sBAAwB,GAAG,CAAC,EAAE,gBAAkB,CAAC,KAAO,WAAW,YAAc,CAAC,sBAAwB,GAAG,CAAC,EAAE,mBAAqB,CAAC,KAAO,UAAU,CAAC,CAAC",
  "names": ["metadata", "params", "activeLocale", "metadata", "params", "activeLocale", "metadataVersion", "__FramerMetadata__"]
}
