span { margin: 3px -2px 0 }' // align Scheme status + '#scheme-settings-entry > span > svg {' // v-align/left-pad Scheme status icon + 'position: relative ; top: 2px ; margin-left: 4px }' + ( config.fgAnimationsDisabled ? '' // spin cycle arrows icon when scheme is Auto : ( '#scheme-settings-entry svg[class*=arrowsCyclic],' + '.chatgpt-notif svg[class*=arrowsCyclic] { animation: rotate 5s linear infinite }' )) + `#about-settings-entry span { color: ${ env.ui.app.scheme == 'dark' ? '#28ee28' : 'green' }}` + '#about-settings-entry > span {' // outer About status span + `width: ${ env.browser.isPortrait ? '15vw' : '95px' }; height: 20px ; overflow: hidden ;` + `${ config.fgAnimationsDisabled ? '' : ( // fade edges 'mask-image: linear-gradient(' + 'to right, transparent, black 20%, black 89%, transparent) ;' + '-webkit-mask-image: linear-gradient(' + 'to right, transparent, black 20%, black 89%, transparent)' )}}` + '#about-settings-entry > span > div {' + `text-wrap: nowrap ; ${ config.fgAnimationsDisabled ? '' : 'animation: ticker linear 75s infinite' }}` + '@keyframes ticker { 0% { transform: translateX(100%) } 100% { transform: translateX(-2000%) }}' + `.about-em { color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'green' } !important }` ) }, update: { width: 409, available() { // Show modal const updateAvailModal = modals.alert(`🚀 ${app.msgs.alert_updateAvail}!`, // title `${app.msgs.alert_newerVer} ${app.name} ` // msg + `(v${app.latestVer}) ${app.msgs.alert_isAvail}! ` + '${app.msgs.link_viewChanges}`, function update() { // button modals.safeWinOpen(`${app.urls.update.gm}?t=${Date.now()}`) }, '', modals.update.width ) // Localize button labels if needed if (!env.browser.language.startsWith('en')) { const updateBtns = updateAvailModal.querySelectorAll('button') updateBtns[1].textContent = app.msgs.btnLabel_update updateBtns[0].textContent = app.msgs.btnLabel_dismiss } return updateAvailModal }, unavailable() { return modals.alert(`${app.msgs.alert_upToDate}!`, // title `${app.name} (v${app.version}) ${app.msgs.alert_isUpToDate}!`, // msg '', '', modals.update.width ) } } } // Run MAIN routine menus.toolbar.register() // Init UI props env.ui = { app: { scheme: config.scheme || ui.getScheme() }, site: { isCentered: !!document.documentElement.className.includes('center'), scheme: ui.getScheme() } } // Create/ID/classify/listenerize/stylize APP container app.div = dom.create.elem('div', { id: app.slug, class: 'fade-in' }) themes.apply(config.theme) ; ui.addListeners.appDiv() ;['anchored', 'expanded', 'sticky', 'wider'].forEach(mode => (config[mode] || config[`${mode}Sidebar`]) && app.div.classList.add(mode)) update.appStyle() ;['rpg', 'rpw'].forEach(cssType => // rising particles document.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`)))) // Hide GF alert on GitHub if found if (location.host == 'github.com') { const gfAlert = [...document.querySelectorAll('.markdown-alert')] .find(alert => alert.textContent.includes('Greasy Fork')) return !gfAlert ? undefined : gfAlert.style.display = 'none' } // Create/classify/fill feedback FOOTER app.footer = dom.create.elem('footer', { class: 'fade-in anchored-hidden' }) app.footerContent = dom.create.anchor('#', app.msgs.link_shareFeedback, { target: '_self' }) app.footerContent.onclick = () => modals.open('feedback') app.footer.append(app.footerContent) // Check for active TEXT CAMPAIGNS to replace footer CTA update.footerContent() // APPEND DDGPT + footer to DDG app.elems = [app.div, app.footer] app.divParent = { selector: env.browser.isMobile || env.ui.site.isCentered ? '[data-area*=mainline]' : '[class*=sidebar]' } app.divParent.div = await new Promise(resolve => { const appDivParent = document.querySelector(app.divParent.selector) if (appDivParent) resolve(appDivParent) else new MutationObserver((_, obs) => { const appDivParent = document.querySelector(app.divParent.selector) if (appDivParent) { obs.disconnect() ; resolve(appDivParent) } }).observe(document.body, { childList: true, subtree: true }) }) app.divParent.div.prepend(...app.elems) app.elems.forEach((elem, idx) => // fade in staggered setTimeout(() => elem.classList.add('active'), idx * 550 - 200)) // REPLACE appDivParent max-width w/ min-width for better UI if (!env.browser.isMobile) Object.assign(app.divParent.div.style, { maxWidth: '', minWidth: '448px' }) // REFERRALIZE links to support author setTimeout(() => document.querySelectorAll('a[href^="https://www.amazon."]').forEach(anchor => { const url = new URL(anchor.href) ; url.searchParams.set('tag', 'kudo-ai-20') anchor.href = url.toString() }), 1500) // AUTO-GEN reply or show STANDBY mode app.msgChain = [] ; const searchQuery = new URL(location.href).searchParams.get('q') if (config.autoGet || config.autoSummarize // Auto-Gen on || (config.prefixEnabled || config.suffixEnabled) // or Manual-Gen on && [config.prefixEnabled && location.href.includes('q=%2F'), // prefix required/present config.suffixEnabled // suffix required/present && /q=.*?(?:%3F|?|%EF%BC%9F)(?:&|$)/.test(location.href) ].filter(Boolean).length == (config.prefixEnabled + config.suffixEnabled) // validate both Manual-Gen modes ) { // auto-gen reply app.msgChain.push({ time: Date.now(), role: 'user', content: config.autoSummarize ? prompts.create('summarizeResults') : searchQuery }) get.reply({ msgs: app.msgChain, src: 'query' }) } else { // show Standby mode show.reply({ standby: true }) if (!config.rqDisabled) get.related(searchQuery) .then(queries => show.related(queries)) .catch(err => { log.error(err.message) ; api.tryNew(get.related) }) } // Monitor SCHEME PREF changes to update app scheme if auto-scheme mode new MutationObserver(handleSchemePrefChange).observe( // for site scheme pref changes document.documentElement, { attributes: true, attributeFilter: ['class'] }) window.matchMedia('(prefers-color-scheme: dark)').addEventListener( // for browser/system scheme pref changes 'change', () => requestAnimationFrame(handleSchemePrefChange)) function handleSchemePrefChange() { if (config.scheme) return // since light/dark hard-set const displayedScheme = ui.getScheme() if (env.ui.app.scheme != displayedScheme) update.scheme(displayedScheme) } // Observe sidebar for need to RAISE DDGPT as other extensions inject into it const sidebarObserver = new MutationObserver(() => { if (app.divParent.div.firstChild != app.div) { app.divParent.div.prepend(...app.elems) ; sidebarObserver.disconnect() } }) sidebarObserver.observe(app.divParent.div, { subtree: true, childList: true }) setTimeout(() => sidebarObserver.disconnect(), 5000) // don't observe forever })() ">

ddgpt.com Ddgpt.com - Gf.ddgpt.com

   
([^ log.error('Failed to download chat:', err) }) } ] ) // Prefix icon to title const modalTitle = shareChatModal.querySelector('h2'), titleIcon = icons.create({ key: 'speechBalloons' }) titleIcon.style.cssText = 'height: 28px ; width: 28px ; position: relative ; top: 7px ; right: 8px ;' + `fill: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }` modalTitle.prepend(titleIcon) // Hide Dismiss button, localize other labels const modalBtns = shareChatModal.querySelectorAll('button') modalBtns[0].style.display = 'none' // hide Dismiss button if (!env.browser.language.startsWith('en')) // localize button labels modalBtns.forEach(btn => { if (/copy/i.test(btn.textContent)) btn.textContent = `${app.msgs.tooltip_copy} URL` else if (/visit/i.test(btn.textContent)) btn.textContent = app.msgs.btnLabel_visitPage else if (/download/i.test(btn.textContent)) btn.textContent = `${app.msgs.btnLabel_download} ${log.toTitleCase(app.msgs.btnLabel_convo)}` }) // Style elements shareChatModal.style.wordBreak = 'break-all' // since URL really long modalTitle.style.justifySelf = 'center' shareChatModal.querySelector('p').style.cssText = 'text-align: center ; margin: -10px 0' shareChatModal.querySelector('.modal-buttons').style.cssText = 'justify-content: center' return shareChatModal }, stylize() { if (!this.styles) document.head.append(this.styles = dom.create.elem('style')) this.styles.textContent = ( // Vars `:root { --modal-btn-zoom: scale(1.055) ; --modal-btn-transition: transform 0.15s ease ; --settings-li-transition: transform 0.1s ease ; /* for Settings entry hover-zoom */ --fg-transition: opacity 0.65s cubic-bezier(0.165,0.84,0.44,1), /* fade-in */ transform 0.55s cubic-bezier(0.165,0.84,0.44,1) !important ; /* move-in */ --bg-transition: background-color 0.25s ease !important } /* dim */` // Main modal styles + '@keyframes modal-zoom-fade-out {' + '0% { opacity: 1 } 50% { opacity: 0.25 ; transform: scale(1.05) }' + '100% { opacity: 0 ; transform: scale(1.35) }}' + '.chatgpt-modal > div {' + 'padding: 20px 25px 24px 31px !important ;' // increase alert padding + 'background-color: white !important ; color: black }' + '.chatgpt-modal p { margin: -8px 0 -14px 4px ; font-size: 1.55rem }' // pos/size modal msg + `.chatgpt-modal a { color: #${ env.ui.app.scheme == 'dark' ? '00cfff' : '1e9ebb' } !important }` + '.modal-buttons {' + `margin: 24px -5px -3px ${ env.browser.isMobile ? -5 : -15 }px !important ; width: 100% }` + '.chatgpt-modal button {' // this.alert() buttons + `min-width: 121px ; padding: ${ env.browser.isMobile ? '7px' : '4px 15px' } !important ;` + 'cursor: pointer ; border-radius: 0 !important ; height: 39px ;' + 'border: 1px solid ' + ( env.ui.app.scheme == 'dark' ? 'white' : 'black' ) + '!important ;' + `${ env.ui.app.scheme == 'dark' ? 'background: none ; color: white' : '' }}` + '.primary-modal-btn { background: black !important ; color: white !important }' + '.chatgpt-modal button:hover { background-color: #9cdaff !important ; color: black !important }' + ( env.ui.app.scheme == 'dark' ? // darkmode chatgpt.alert() styles ( '.chatgpt-modal > div, .chatgpt-modal button:not(.primary-modal-btn) {' + 'color: white !important }' + '.primary-modal-btn { background: hsl(186 100% 69%) !important ; color: black !important }' + '.chatgpt-modal a { color: #00cfff !important }' + '.chatgpt-modal button:hover {' + 'background-color: #00cfff !important ; color: black !important }' ) : '' ) + `.${modals.class} { display: grid ; place-items: center }` // for centered icon/logo + '[class*=modal-close-btn] {' + 'position: absolute !important ; float: right ; top: 14px !important ; right: 16px !important ;' + 'cursor: pointer ; width: 33px ; height: 33px ; border-radius: 20px }' + `[class*=modal-close-btn] path {${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white' : 'stroke: #9f9f9f ; fill: #9f9f9f' }}` + ( env.ui.app.scheme == 'dark' ? // invert dark mode hover paths '[class*=modal-close-btn]:hover path { stroke: black ; fill: black }' : '' ) + '[class*=modal-close-btn]:hover { background-color: #f2f2f2 }' // hover underlay + '[class*=modal-close-btn] svg { margin: 11.5px }' // center SVG for hover underlay + '[class*=-modal] h2 {' + 'font-weight: bold ; line-height: 32px ; padding: 0 ; margin: 9px 0 14px !important ;' + `${ env.browser.isMobile ? 'text-align: center' // center on mobile : 'justify-self: start' }}` // left-align on desktop + '[class*=-modal] p { justify-self: start ; font-size: 20px }' + '[class*=-modal] button { font-size: 13px !important ; background: none }' + '[class*=-modal-bg] {' + 'pointer-events: auto ;' // override any disabling from site modals + 'position: fixed ; top: 0 ; left: 0 ; width: 100% ; height: 100% ;' // expand to full view-port + 'display: flex ; justify-content: center ; align-items: center ; z-index: 9999 ;' // align + `transition: var(--bg-transition) ; /* dim */ -webkit-transition: var(--bg-transition) ; -moz-transition: var(--bg-transition) ; -o-transition: var(--bg-transition) ; -ms-transition: var(--bg-transition) }` + '[class*=-modal-bg].animated > div {' + 'z-index: 13456 ; opacity: 0.98 ; transform: translateX(0) translateY(0) }' + '[class$=-modal] {' // native modals + chatgpt.alert()s + 'position: absolute ;' // to be click-draggable + 'opacity: 0 ;' // to fade-in + `background-image: linear-gradient(180deg, ${ env.ui.app.scheme == 'dark' ? '#99a8a6 -200px, black 200px' : '#b6ebff -296px, white 171px' }) ;` + `border: 1px solid ${ env.ui.app.scheme == 'dark' ? 'white' : '#b5b5b5' } !important ;` + `color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };` + 'transform: translateX(-3px) translateY(7px) ;' // offset to move-in from + `transition: var(--fg-transition) ; /* fade-in + move-in */ -webkit-transition: var(--fg-transition) ; -moz-transition: var(--fg-transition) ; -o-transition: var(--fg-transition) ; -ms-transition: var(--fg-transition) } ${ env.browser.isMobile ? '' : `[class$=-modal] button:hover { transform: var(--modal-btn-zoom) }`} ${ config.fgAnimationsDisabled ? '' : `[class$=-modal] button { ${ env.browser.isMobile ? '' : 'will-change: transform ;' } transition: var(--modal-btn-transition) ; -webkit-transition: var(--modal-btn-transition) ; -moz-transition: var(--modal-btn-transition) ; -o-transition: var(--modal-btn-transition) ; -ms-transition: var(--modal-btn-transition) }`}` // Settings modal + `#${app.slug}-settings { min-width: ${ env.browser.isPortrait ? 288 : 698 }px ; max-width: 75vw ; word-wrap: break-word ; border-radius: 15px ; ${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white' : 'stroke: black ; fill: black' }; --shadow: 0 30px 60px rgba(0,0,0,0.12) ; box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) }` + `#${app.slug}-settings-title {` + 'font-weight: bold ; line-height: 19px ; text-align: center ; margin: 0 3px -3px 0 }' + `#${app.slug}-settings-title h4 {` + `font-size: ${ env.browser.isPortrait ? 26 : 31 }px ; font-weight: bold ; margin-top: -39px }` + `#${app.slug}-settings ul {` + 'list-style: none ; padding: 0 ; margin-bottom: 2px ;' // hide bullets, close bottom gap + `width: ${ env.browser.isPortrait ? 100 : 50 }% }` // set width based on column cnt + ( env.browser.isPhone ? '' : ( `#${app.slug}-settings ul:first-of-type {` // color desktop middle separator + `border-right: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }}` )) + `#${app.slug}-settings li {` + `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for text + `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for icons + `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for icons + 'height: 25px ; padding: 4px 10px ; font-size: 14.5px ;' + `border-bottom: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };` // add separator + 'border-radius: 3px ;' // slightly round highlight strip + `${ config.fgAnimationsDisabled || env.browser.isMobile ? '' : `transition: var(--settings-li-transition) ; -webkit-transition: var(--settings-li-transition) ; -moz-transition: var(--settings-li-transition) ; -o-transition: var(--settings-li-transition) ; -ms-transition: var(--settings-li-transition)` }}` + `#${app.slug}-settings li.active {` + `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for text + `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for icons + `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' }}` // for icons + `#${app.slug}-settings li label { padding-right: 20px }` // right-pad labels so toggles don't hug + `#${app.slug}-settings li:last-of-type { border-bottom: none }` // remove last bottom-border + `#${app.slug}-settings li, #${app.slug}-settings li label { cursor: pointer }` // add finger on hover + `#${app.slug}-settings li:hover {` + 'background: rgba(100,149,237,0.88) ; color: white ; fill: white ; stroke: white ;' + `${ env.browser.isMobile ? '' : 'transform: scale(1.15)' }}` + `#${app.slug}-settings li > input { float: right } /* pos toggles */ #${app.slug}-settings li > .track { position: relative ; left: -1px ; bottom: -5.5px ; float: right ; background-color: #ccc ; width: 26px ; height: 13px ; border-radius: 28px ; ${ config.fgAnimationsDisabled ? '' : `transition: 0.4s ; -webkit-transition: 0.4s ; -moz-transition: 0.4s ; -o-transition: 0.4s ; -ms-transition: 0.4s` }} #${app.slug}-settings li .*** { position: absolute ; left: 1px ; bottom: 1px ; content: "" ; background-color: white ; width: 11px ; height: 11px ; border-radius: 28px ; ${ config.fgAnimationsDisabled ? '' : `transition: 0.2s ; -webkit-transition: 0.2s ; -moz-transition: 0.2s ; -o-transition: 0.2s ; -ms-transition: 0.2s` }}` + '#scheme-settings-entry > span { margin: 3px -2px 0 }' // align Scheme status + '#scheme-settings-entry > span > svg {' // v-align/left-pad Scheme status icon + 'position: relative ; top: 2px ; margin-left: 4px }' + ( config.fgAnimationsDisabled ? '' // spin cycle arrows icon when scheme is Auto : ( '#scheme-settings-entry svg[class*=arrowsCyclic],' + '.chatgpt-notif svg[class*=arrowsCyclic] { animation: rotate 5s linear infinite }' )) + `#about-settings-entry span { color: ${ env.ui.app.scheme == 'dark' ? '#28ee28' : 'green' }}` + '#about-settings-entry > span {' // outer About status span + `width: ${ env.browser.isPortrait ? '15vw' : '95px' }; height: 20px ; overflow: hidden ;` + `${ config.fgAnimationsDisabled ? '' : ( // fade edges 'mask-image: linear-gradient(' + 'to right, transparent, black 20%, black 89%, transparent) ;' + '-webkit-mask-image: linear-gradient(' + 'to right, transparent, black 20%, black 89%, transparent)' )}}` + '#about-settings-entry > span > div {' + `text-wrap: nowrap ; ${ config.fgAnimationsDisabled ? '' : 'animation: ticker linear 75s infinite' }}` + '@keyframes ticker { 0% { transform: translateX(100%) } 100% { transform: translateX(-2000%) }}' + `.about-em { color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'green' } !important }` ) }, update: { width: 409, available() { // Show modal const updateAvailModal = modals.alert(`🚀 ${app.msgs.alert_updateAvail}!`, // title `${app.msgs.alert_newerVer} ${app.name} ` // msg + `(v${app.latestVer}) ${app.msgs.alert_isAvail}! ` + '${app.msgs.link_viewChanges}`, function update() { // button modals.safeWinOpen(`${app.urls.update.gm}?t=${Date.now()}`) }, '', modals.update.width ) // Localize button labels if needed if (!env.browser.language.startsWith('en')) { const updateBtns = updateAvailModal.querySelectorAll('button') updateBtns[1].textContent = app.msgs.btnLabel_update updateBtns[0].textContent = app.msgs.btnLabel_dismiss } return updateAvailModal }, unavailable() { return modals.alert(`${app.msgs.alert_upToDate}!`, // title `${app.name} (v${app.version}) ${app.msgs.alert_isUpToDate}!`, // msg '', '', modals.update.width ) } } } // Run MAIN routine menus.toolbar.register() // Init UI props env.ui = { app: { scheme: config.scheme || ui.getScheme() }, site: { isCentered: !!document.documentElement.className.includes('center'), scheme: ui.getScheme() } } // Create/ID/classify/listenerize/stylize APP container app.div = dom.create.elem('div', { id: app.slug, class: 'fade-in' }) themes.apply(config.theme) ; ui.addListeners.appDiv() ;['anchored', 'expanded', 'sticky', 'wider'].forEach(mode => (config[mode] || config[`${mode}Sidebar`]) && app.div.classList.add(mode)) update.appStyle() ;['rpg', 'rpw'].forEach(cssType => // rising particles document.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`)))) // Hide GF alert on GitHub if found if (location.host == 'github.com') { const gfAlert = [...document.querySelectorAll('.markdown-alert')] .find(alert => alert.textContent.includes('Greasy Fork')) return !gfAlert ? undefined : gfAlert.style.display = 'none' } // Create/classify/fill feedback FOOTER app.footer = dom.create.elem('footer', { class: 'fade-in anchored-hidden' }) app.footerContent = dom.create.anchor('#', app.msgs.link_shareFeedback, { target: '_self' }) app.footerContent.onclick = () => modals.open('feedback') app.footer.append(app.footerContent) // Check for active TEXT CAMPAIGNS to replace footer CTA update.footerContent() // APPEND DDGPT + footer to DDG app.elems = [app.div, app.footer] app.divParent = { selector: env.browser.isMobile || env.ui.site.isCentered ? '[data-area*=mainline]' : '[class*=sidebar]' } app.divParent.div = await new Promise(resolve => { const appDivParent = document.querySelector(app.divParent.selector) if (appDivParent) resolve(appDivParent) else new MutationObserver((_, obs) => { const appDivParent = document.querySelector(app.divParent.selector) if (appDivParent) { obs.disconnect() ; resolve(appDivParent) } }).observe(document.body, { childList: true, subtree: true }) }) app.divParent.div.prepend(...app.elems) app.elems.forEach((elem, idx) => // fade in staggered setTimeout(() => elem.classList.add('active'), idx * 550 - 200)) // REPLACE appDivParent max-width w/ min-width for better UI if (!env.browser.isMobile) Object.assign(app.divParent.div.style, { maxWidth: '', minWidth: '448px' }) // REFERRALIZE links to support author setTimeout(() => document.querySelectorAll('a[href^="https://www.amazon."]').forEach(anchor => { const url = new URL(anchor.href) ; url.searchParams.set('tag', 'kudo-ai-20') anchor.href = url.toString() }), 1500) // AUTO-GEN reply or show STANDBY mode app.msgChain = [] ; const searchQuery = new URL(location.href).searchParams.get('q') if (config.autoGet || config.autoSummarize // Auto-Gen on || (config.prefixEnabled || config.suffixEnabled) // or Manual-Gen on && [config.prefixEnabled && location.href.includes('q=%2F'), // prefix required/present config.suffixEnabled // suffix required/present && /q=.*?(?:%3F|?|%EF%BC%9F)(?:&|$)/.test(location.href) ].filter(Boolean).length == (config.prefixEnabled + config.suffixEnabled) // validate both Manual-Gen modes ) { // auto-gen reply app.msgChain.push({ time: Date.now(), role: 'user', content: config.autoSummarize ? prompts.create('summarizeResults') : searchQuery }) get.reply({ msgs: app.msgChain, src: 'query' }) } else { // show Standby mode show.reply({ standby: true }) if (!config.rqDisabled) get.related(searchQuery) .then(queries => show.related(queries)) .catch(err => { log.error(err.message) ; api.tryNew(get.related) }) } // Monitor SCHEME PREF changes to update app scheme if auto-scheme mode new MutationObserver(handleSchemePrefChange).observe( // for site scheme pref changes document.documentElement, { attributes: true, attributeFilter: ['class'] }) window.matchMedia('(prefers-color-scheme: dark)').addEventListener( // for browser/system scheme pref changes 'change', () => requestAnimationFrame(handleSchemePrefChange)) function handleSchemePrefChange() { if (config.scheme) return // since light/dark hard-set const displayedScheme = ui.getScheme() if (env.ui.app.scheme != displayedScheme) update.scheme(displayedScheme) } // Observe sidebar for need to RAISE DDGPT as other extensions inject into it const sidebarObserver = new MutationObserver(() => { if (app.divParent.div.firstChild != app.div) { app.divParent.div.prepend(...app.elems) ; sidebarObserver.disconnect() } }) sidebarObserver.observe(app.divParent.div, { subtree: true, childList: true }) setTimeout(() => sidebarObserver.disconnect(), 5000) // don't observe forever })()

Domain Summary

What IP addresses does Gf.ddgpt.com resolve to?

• Gf.ddgpt.com resolves to the IP addresses 104.21.87.23.

gf.ddgpt.com Profile

Title:([^ log.error('Failed to download chat:', err) }) } ] ) // Prefix icon to title const modalTitle = shareChatModal.querySelector('h2'), titleIcon = icons.create({ key: 'speechBalloons' }) titleIcon.style.cssText = 'height: 28px ; width: 28px ; position: relative ; top: 7px ; right: 8px ;' + `fill: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }` modalTitle.prepend(titleIcon) // Hide Dismiss button, localize other labels const modalBtns = shareChatModal.querySelectorAll('button') modalBtns[0].style.display = 'none' // hide Dismiss button if (!env.browser.language.startsWith('en')) // localize button labels modalBtns.forEach(btn => { if (/copy/i.test(btn.textContent)) btn.textContent = `${app.msgs.tooltip_copy} URL` else if (/visit/i.test(btn.textContent)) btn.textContent = app.msgs.btnLabel_visitPage else if (/download/i.test(btn.textContent)) btn.textContent = `${app.msgs.btnLabel_download} ${log.toTitleCase(app.msgs.btnLabel_convo)}` }) // Style elements shareChatModal.style.wordBreak = 'break-all' // since URL really long modalTitle.style.justifySelf = 'center' shareChatModal.querySelector('p').style.cssText = 'text-align: center ; margin: -10px 0' shareChatModal.querySelector('.modal-buttons').style.cssText = 'justify-content: center' return shareChatModal }, stylize() { if (!this.styles) document.head.append(this.styles = dom.create.elem('style')) this.styles.textContent = ( // Vars `:root { --modal-btn-zoom: scale(1.055) ; --modal-btn-transition: transform 0.15s ease ; --settings-li-transition: transform 0.1s ease ; /* for Settings entry hover-zoom */ --fg-transition: opacity 0.65s cubic-bezier(0.165,0.84,0.44,1), /* fade-in */ transform 0.55s cubic-bezier(0.165,0.84,0.44,1) !important ; /* move-in */ --bg-transition: background-color 0.25s ease !important } /* dim */` // Main modal styles + '@keyframes modal-zoom-fade-out {' + '0% { opacity: 1 } 50% { opacity: 0.25 ; transform: scale(1.05) }' + '100% { opacity: 0 ; transform: scale(1.35) }}' + '.chatgpt-modal > div {' + 'padding: 20px 25px 24px 31px !important ;' // increase alert padding + 'background-color: white !important ; color: black }' + '.chatgpt-modal p { margin: -8px 0 -14px 4px ; font-size: 1.55rem }' // pos/size modal msg + `.chatgpt-modal a { color: #${ env.ui.app.scheme == 'dark' ? '00cfff' : '1e9ebb' } !important }` + '.modal-buttons {' + `margin: 24px -5px -3px ${ env.browser.isMobile ? -5 : -15 }px !important ; width: 100% }` + '.chatgpt-modal button {' // this.alert() buttons + `min-width: 121px ; padding: ${ env.browser.isMobile ? '7px' : '4px 15px' } !important ;` + 'cursor: pointer ; border-radius: 0 !important ; height: 39px ;' + 'border: 1px solid ' + ( env.ui.app.scheme == 'dark' ? 'white' : 'black' ) + '!important ;' + `${ env.ui.app.scheme == 'dark' ? 'background: none ; color: white' : '' }}` + '.primary-modal-btn { background: black !important ; color: white !important }' + '.chatgpt-modal button:hover { background-color: #9cdaff !important ; color: black !important }' + ( env.ui.app.scheme == 'dark' ? // darkmode chatgpt.alert() styles ( '.chatgpt-modal > div, .chatgpt-modal button:not(.primary-modal-btn) {' + 'color: white !important }' + '.primary-modal-btn { background: hsl(186 100% 69%) !important ; color: black !important }' + '.chatgpt-modal a { color: #00cfff !important }' + '.chatgpt-modal button:hover {' + 'background-color: #00cfff !important ; color: black !important }' ) : '' ) + `.${modals.class} { display: grid ; place-items: center }` // for centered icon/logo + '[class*=modal-close-btn] {' + 'position: absolute !important ; float: right ; top: 14px !important ; right: 16px !important ;' + 'cursor: pointer ; width: 33px ; height: 33px ; border-radius: 20px }' + `[class*=modal-close-btn] path {${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white' : 'stroke: #9f9f9f ; fill: #9f9f9f' }}` + ( env.ui.app.scheme == 'dark' ? // invert dark mode hover paths '[class*=modal-close-btn]:hover path { stroke: black ; fill: black }' : '' ) + '[class*=modal-close-btn]:hover { background-color: #f2f2f2 }' // hover underlay + '[class*=modal-close-btn] svg { margin: 11.5px }' // center SVG for hover underlay + '[class*=-modal] h2 {' + 'font-weight: bold ; line-height: 32px ; padding: 0 ; margin: 9px 0 14px !important ;' + `${ env.browser.isMobile ? 'text-align: center' // center on mobile : 'justify-self: start' }}` // left-align on desktop + '[class*=-modal] p { justify-self: start ; font-size: 20px }' + '[class*=-modal] button { font-size: 13px !important ; background: none }' + '[class*=-modal-bg] {' + 'pointer-events: auto ;' // override any disabling from site modals + 'position: fixed ; top: 0 ; left: 0 ; width: 100% ; height: 100% ;' // expand to full view-port + 'display: flex ; justify-content: center ; align-items: center ; z-index: 9999 ;' // align + `transition: var(--bg-transition) ; /* dim */ -webkit-transition: var(--bg-transition) ; -moz-transition: var(--bg-transition) ; -o-transition: var(--bg-transition) ; -ms-transition: var(--bg-transition) }` + '[class*=-modal-bg].animated > div {' + 'z-index: 13456 ; opacity: 0.98 ; transform: translateX(0) translateY(0) }' + '[class$=-modal] {' // native modals + chatgpt.alert()s + 'position: absolute ;' // to be click-draggable + 'opacity: 0 ;' // to fade-in + `background-image: linear-gradient(180deg, ${ env.ui.app.scheme == 'dark' ? '#99a8a6 -200px, black 200px' : '#b6ebff -296px, white 171px' }) ;` + `border: 1px solid ${ env.ui.app.scheme == 'dark' ? 'white' : '#b5b5b5' } !important ;` + `color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };` + 'transform: translateX(-3px) translateY(7px) ;' // offset to move-in from + `transition: var(--fg-transition) ; /* fade-in + move-in */ -webkit-transition: var(--fg-transition) ; -moz-transition: var(--fg-transition) ; -o-transition: var(--fg-transition) ; -ms-transition: var(--fg-transition) } ${ env.browser.isMobile ? '' : `[class$=-modal] button:hover { transform: var(--modal-btn-zoom) }`} ${ config.fgAnimationsDisabled ? '' : `[class$=-modal] button { ${ env.browser.isMobile ? '' : 'will-change: transform ;' } transition: var(--modal-btn-transition) ; -webkit-transition: var(--modal-btn-transition) ; -moz-transition: var(--modal-btn-transition) ; -o-transition: var(--modal-btn-transition) ; -ms-transition: var(--modal-btn-transition) }`}` // Settings modal + `#${app.slug}-settings { min-width: ${ env.browser.isPortrait ? 288 : 698 }px ; max-width: 75vw ; word-wrap: break-word ; border-radius: 15px ; ${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white' : 'stroke: black ; fill: black' }; --shadow: 0 30px 60px rgba(0,0,0,0.12) ; box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) }` + `#${app.slug}-settings-title {` + 'font-weight: bold ; line-height: 19px ; text-align: center ; margin: 0 3px -3px 0 }' + `#${app.slug}-settings-title h4 {` + `font-size: ${ env.browser.isPortrait ? 26 : 31 }px ; font-weight: bold ; margin-top: -39px }` + `#${app.slug}-settings ul {` + 'list-style: none ; padding: 0 ; margin-bottom: 2px ;' // hide bullets, close bottom gap + `width: ${ env.browser.isPortrait ? 100 : 50 }% }` // set width based on column cnt + ( env.browser.isPhone ? '' : ( `#${app.slug}-settings ul:first-of-type {` // color desktop middle separator + `border-right: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }}` )) + `#${app.slug}-settings li {` + `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for text + `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for icons + `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for icons + 'height: 25px ; padding: 4px 10px ; font-size: 14.5px ;' + `border-bottom: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };` // add separator + 'border-radius: 3px ;' // slightly round highlight strip + `${ config.fgAnimationsDisabled || env.browser.isMobile ? '' : `transition: var(--settings-li-transition) ; -webkit-transition: var(--settings-li-transition) ; -moz-transition: var(--settings-li-transition) ; -o-transition: var(--settings-li-transition) ; -ms-transition: var(--settings-li-transition)` }}` + `#${app.slug}-settings li.active {` + `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for text + `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for icons + `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' }}` // for icons + `#${app.slug}-settings li label { padding-right: 20px }` // right-pad labels so toggles don't hug + `#${app.slug}-settings li:last-of-type { border-bottom: none }` // remove last bottom-border + `#${app.slug}-settings li, #${app.slug}-settings li label { cursor: pointer }` // add finger on hover + `#${app.slug}-settings li:hover {` + 'background: rgba(100,149,237,0.88) ; color: white ; fill: white ; stroke: white ;' + `${ env.browser.isMobile ? '' : 'transform: scale(1.15)' }}` + `#${app.slug}-settings li > input { float: right } /* pos toggles */ #${app.slug}-settings li > .track { position: relative ; left: -1px ; bottom: -5.5px ; float: right ; background-color: #ccc ; width: 26px ; height: 13px ; border-radius: 28px ; ${ config.fgAnimationsDisabled ? '' : `transition: 0.4s ; -webkit-transition: 0.4s ; -moz-transition: 0.4s ; -o-transition: 0.4s ; -ms-transition: 0.4s` }} #${app.slug}-settings li .*** { position: absolute ; left: 1px ; bottom: 1px ; content: "" ; background-color: white ; width: 11px ; height: 11px ; border-radius: 28px ; ${ config.fgAnimationsDisabled ? '' : `transition: 0.2s ; -webkit-transition: 0.2s ; -moz-transition: 0.2s ; -o-transition: 0.2s ; -ms-transition: 0.2s` }}` + '#scheme-settings-entry > span { margin: 3px -2px 0 }' // align Scheme status + '#scheme-settings-entry > span > svg {' // v-align/left-pad Scheme status icon + 'position: relative ; top: 2px ; margin-left: 4px }' + ( config.fgAnimationsDisabled ? '' // spin cycle arrows icon when scheme is Auto : ( '#scheme-settings-entry svg[class*=arrowsCyclic],' + '.chatgpt-notif svg[class*=arrowsCyclic] { animation: rotate 5s linear infinite }' )) + `#about-settings-entry span { color: ${ env.ui.app.scheme == 'dark' ? '#28ee28' : 'green' }}` + '#about-settings-entry > span {' // outer About status span + `width: ${ env.browser.isPortrait ? '15vw' : '95px' }; height: 20px ; overflow: hidden ;` + `${ config.fgAnimationsDisabled ? '' : ( // fade edges 'mask-image: linear-gradient(' + 'to right, transparent, black 20%, black 89%, transparent) ;' + '-webkit-mask-image: linear-gradient(' + 'to right, transparent, black 20%, black 89%, transparent)' )}}` + '#about-settings-entry > span > div {' + `text-wrap: nowrap ; ${ config.fgAnimationsDisabled ? '' : 'animation: ticker linear 75s infinite' }}` + '@keyframes ticker { 0% { transform: translateX(100%) } 100% { transform: translateX(-2000%) }}' + `.about-em { color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'green' } !important }` ) }, update: { width: 409, available() { // Show modal const updateAvailModal = modals.alert(`🚀 ${app.msgs.alert_updateAvail}!`, // title `${app.msgs.alert_newerVer} ${app.name} ` // msg + `(v${app.latestVer}) ${app.msgs.alert_isAvail}! ` + '${app.msgs.link_viewChanges}`, function update() { // button modals.safeWinOpen(`${app.urls.update.gm}?t=${Date.now()}`) }, '', modals.update.width ) // Localize button labels if needed if (!env.browser.language.startsWith('en')) { const updateBtns = updateAvailModal.querySelectorAll('button') updateBtns[1].textContent = app.msgs.btnLabel_update updateBtns[0].textContent = app.msgs.btnLabel_dismiss } return updateAvailModal }, unavailable() { return modals.alert(`${app.msgs.alert_upToDate}!`, // title `${app.name} (v${app.version}) ${app.msgs.alert_isUpToDate}!`, // msg '', '', modals.update.width ) } } } // Run MAIN routine menus.toolbar.register() // Init UI props env.ui = { app: { scheme: config.scheme || ui.getScheme() }, site: { isCentered: !!document.documentElement.className.includes('center'), scheme: ui.getScheme() } } // Create/ID/classify/listenerize/stylize APP container app.div = dom.create.elem('div', { id: app.slug, class: 'fade-in' }) themes.apply(config.theme) ; ui.addListeners.appDiv() ;['anchored', 'expanded', 'sticky', 'wider'].forEach(mode => (config[mode] || config[`${mode}Sidebar`]) && app.div.classList.add(mode)) update.appStyle() ;['rpg', 'rpw'].forEach(cssType => // rising particles document.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`)))) // Hide GF alert on GitHub if found if (location.host == 'github.com') { const gfAlert = [...document.querySelectorAll('.markdown-alert')] .find(alert => alert.textContent.includes('Greasy Fork')) return !gfAlert ? undefined : gfAlert.style.display = 'none' } // Create/classify/fill feedback FOOTER app.footer = dom.create.elem('footer', { class: 'fade-in anchored-hidden' }) app.footerContent = dom.create.anchor('#', app.msgs.link_shareFeedback, { target: '_self' }) app.footerContent.onclick = () => modals.open('feedback') app.footer.append(app.footerContent) // Check for active TEXT CAMPAIGNS to replace footer CTA update.footerContent() // APPEND DDGPT + footer to DDG app.elems = [app.div, app.footer] app.divParent = { selector: env.browser.isMobile || env.ui.site.isCentered ? '[data-area*=mainline]' : '[class*=sidebar]' } app.divParent.div = await new Promise(resolve => { const appDivParent = document.querySelector(app.divParent.selector) if (appDivParent) resolve(appDivParent) else new MutationObserver((_, obs) => { const appDivParent = document.querySelector(app.divParent.selector) if (appDivParent) { obs.disconnect() ; resolve(appDivParent) } }).observe(document.body, { childList: true, subtree: true }) }) app.divParent.div.prepend(...app.elems) app.elems.forEach((elem, idx) => // fade in staggered setTimeout(() => elem.classList.add('active'), idx * 550 - 200)) // REPLACE appDivParent max-width w/ min-width for better UI if (!env.browser.isMobile) Object.assign(app.divParent.div.style, { maxWidth: '', minWidth: '448px' }) // REFERRALIZE links to support author setTimeout(() => document.querySelectorAll('a[href^="https://www.amazon."]').forEach(anchor => { const url = new URL(anchor.href) ; url.searchParams.set('tag', 'kudo-ai-20') anchor.href = url.toString() }), 1500) // AUTO-GEN reply or show STANDBY mode app.msgChain = [] ; const searchQuery = new URL(location.href).searchParams.get('q') if (config.autoGet || config.autoSummarize // Auto-Gen on || (config.prefixEnabled || config.suffixEnabled) // or Manual-Gen on && [config.prefixEnabled && location.href.includes('q=%2F'), // prefix required/present config.suffixEnabled // suffix required/present && /q=.*?(?:%3F|?|%EF%BC%9F)(?:&|$)/.test(location.href) ].filter(Boolean).length == (config.prefixEnabled + config.suffixEnabled) // validate both Manual-Gen modes ) { // auto-gen reply app.msgChain.push({ time: Date.now(), role: 'user', content: config.autoSummarize ? prompts.create('summarizeResults') : searchQuery }) get.reply({ msgs: app.msgChain, src: 'query' }) } else { // show Standby mode show.reply({ standby: true }) if (!config.rqDisabled) get.related(searchQuery) .then(queries => show.related(queries)) .catch(err => { log.error(err.message) ; api.tryNew(get.related) }) } // Monitor SCHEME PREF changes to update app scheme if auto-scheme mode new MutationObserver(handleSchemePrefChange).observe( // for site scheme pref changes document.documentElement, { attributes: true, attributeFilter: ['class'] }) window.matchMedia('(prefers-color-scheme: dark)').addEventListener( // for browser/system scheme pref changes 'change', () => requestAnimationFrame(handleSchemePrefChange)) function handleSchemePrefChange() { if (config.scheme) return // since light/dark hard-set const displayedScheme = ui.getScheme() if (env.ui.app.scheme != displayedScheme) update.scheme(displayedScheme) } // Observe sidebar for need to RAISE DDGPT as other extensions inject into it const sidebarObserver = new MutationObserver(() => { if (app.divParent.div.firstChild != app.div) { app.divParent.div.prepend(...app.elems) ; sidebarObserver.disconnect() } }) sidebarObserver.observe(app.divParent.div, { subtree: true, childList: true }) setTimeout(() => sidebarObserver.disconnect(), 5000) // don't observe forever })()

What technologies does gf.ddgpt.com use?

These are the technologies used at gf.ddgpt.com. gf.ddgpt.com has a total of 7 technologies installed in 4 different categories.

gf.ddgpt.com Traffic Analysis

There's no enough data about gf.ddgpt.com traffic.
Daily Visitors n/a
Monthly Visits n/a
Pages per Visit n/a
Visit duration n/a
Bounce Rate n/a
Is this your site?Verify your site's metrics.
Daily Unique Visitors:
 n/a
Monthly Visits:
n/a
Pages per Visit:
n/a
Daily Pageviews:
n/a
Avg. visit duration:
n/a
Bounce rate:
n/a
Global Reach:
 n/a
HypeRank:
n/a
*All traffic values are estimates only.
Last update was 6 hours ago
     
This can take up to 60 seconds. Please wait...

Update will be available in 18 hours
*HypeStat.com is not promoting or affiliated with ddgpt.com in any way. Only publicly available statistics data are displayed.

 

SEMrush is a complete on line advertising and marketing platform that gives a extensive variety of gear and functions to help companies and entrepreneurs in enhancing their on line visibility and optimizing their virtual advertising and marketing strategies.
SemRushSemRush
Domain:
  gf.ddgpt.com
Rank:
(Rank based on keywords, cost and organic traffic)
  n/a
Organic Keywords:
(Number of keywords in top 20 Google SERP)
  0
Organic Traffic:
(Number of visitors coming from top 20 search results)
  0
Organic Cost:
((How much need to spend if get same number of visitors from Google Adwords)
  $0.00

Ad Experience Report

Summary of the ad experience rating of a website for a specific platform.

Mobile summary

Root domain:
ddgpt.com
Ad filtering:
(Chrome is not filtering ads on your site.)
Off
Status:
(The status of the site that is reviewed for the Better Ads Standards.)
Not reviewed

Desktop summary

Root domain:
ddgpt.com
Ad filtering:
(Chrome is not filtering ads on your site.)
Off
Status:
(The status of the site that is reviewed for the Better Ads Standards.)
Not reviewed

Abusive Experience Report

Summary of the abusive experience rating of a website.
Root domain:
ddgpt.com
Enforcement:
(Chrome is not preventing your site from opening new windows or tabs.)
Off
Status:
(The status of the site reviewed for the abusive experiences.)
Not reviewed

Where is gf.ddgpt.com hosted?

Gf.ddgpt.com may be hosted in multiple data centers distributed in different locations around the world. This is probably just one of them.
Server IP:
104.21.87.23
ASN:
AS13335 
ISP:
Cloudflare Inc 
Server Location:


 

Other sites hosted on 104.21.87.23

How fast does gf.ddgpt.com load?

The average loading time of gf.ddgpt.com is 380 ms.
Average Load Time:
380 ms

Does gf.ddgpt.com use compression?

Website compression is the process of reducing the size of website files, such as HTML, CSS, JavaScript, and image files, to improve website performance and load times. Compressing website files can significantly reduce the amount of data that needs to be transferred from the server to the user's browser, resulting in faster page load times and improved user experience. Files on gf.ddgpt.com are reduced by 75%.
gf.ddgpt.com use gzip compression.
Original size: 184.05 KB
Compressed size: 45.5 KB
File reduced by: 138.55 KB (75%)

Google Safe Browsing

Google Safe Browsing is a service provided by Google that helps protect users from visiting websites that may contain malicious or harmful content, such as malware, phishing attempts, or deceptive software.
This site is not currently listed as suspicious

SSL Checker - SSL Certificate Verify

An SSL (Secure Sockets Layer) certificate is a digital certificate that establishes a secure encrypted connection between a web server and a user's web browser. It provides authentication and encryption, ensuring that data transmitted between the server and the browser remains private and protected. gf.ddgpt.com supports HTTPS.
 gf.ddgpt.com supports HTTPS
     
Verifying SSL Support. Please wait...
Common Name: *.github.io
Organization:
Location:
Issuer: Sectigo RSA Domain Validation Secure Server CA
Valid from: Mar 7 00:00:00 2025 GMT
Valid until: Mar 7 23:59:59 2026 GMT
Authority: CA:FALSE
Keysize: 2048 Bits
Common Name: Sectigo RSA Domain Validation Secure Server CA
Organization: Sectigo Limited
Location: Salford, Greater Manchester, GB
Issuer: USERTrust RSA Certification Authority
Valid from: Nov 2 00:00:00 2018 GMT
Valid until: Dec 31 23:59:59 2030 GMT
Authority: CA:TRUE
Keysize: 2048 Bits
Common Name: USERTrust RSA Certification Authority
Organization: The USERTRUST Network
Location: Jersey City, New Jersey, US
Issuer: AAA Certificate Services
Valid from: Mar 12 00:00:00 2019 GMT
Valid until: Dec 31 23:59:59 2028 GMT
Authority: CA:TRUE
Keysize: 4096 Bits

Verify HTTP/2 Support

HTTP/2 (Hypertext Transfer Protocol version 2) is a major revision of the HTTP protocol, which is the foundation of data communication on the World Wide Web. It was developed as an improvement over the previous HTTP/1.1 version to enhance web performance and efficiency.
 gf.ddgpt.com supports HTTP/2
     
Verifying HTTP/2.0 Support. Please wait...

Http Header

HTTP headers are extra portions of records despatched among a consumer (which include an internet browser) and a server at some stage in an HTTP request or response. They offer instructions, metadata, or manipulate parameters for the conversation among the consumer and server.
date: Mon, 23 Jun 2025 05:46:02 GMT
location: https://gf.duckduckgpt.com/
vary: accept-encoding
report-to: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=1zGl0OQRVfhoep%2FlxPQEjcYsbDGG%2BNcPmAVm%2FaQNCgF%2FiNMf6abqvJ45NVN2L2BxUDube4X0Dm9Tn7rXI2FRqfi0d3cxNui4rPtCJ%2FGkiuOgvrRQzTDf2Q%3D%3D"}]}
nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
server: cloudflare
cf-ray: 9541aec5c82b07da-FRA

HTTP/2 301 
date: Mon, 23 Jun 2025 05:46:02 GMT
content-type: text/html
content-length: 167
location: https://github.com/KudoAI/duckduckgpt/raw/refs/heads/main/greasemonkey/duckduckgpt.user.js
cache-control: max-age=3600
expires: Mon, 23 Jun 2025 06:46:02 GMT
vary: Accept-Encoding
server: cloudflare
cf-ray: 9541aec5f94e1bcf-FRA

HTTP/2 302 
date: Mon, 23 Jun 2025 05:46:02 GMT
content-type: text/html; charset=utf-8
content-length: 0
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
access-control-allow-origin: 
location: https://raw.githubusercontent.com/KudoAI/duckduckgpt/refs/heads/main/greasemonkey/duckduckgpt.user.js
cache-control: no-cache
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
x-github-request-id: 8EDC:1414DB:288B140:29F4232:6858EA1A

HTTP/2 200 
cache-control: max-age=300
content-security-policy: default-src 'none'; style-src 'unsafe-inline'; sandbox
content-type: text/plain; charset=utf-8
etag: W/"6e5f2c567d0b3611cd07ba0bd2e3a6559d1332a11dc8c1e0b09217c44d1edb39"
strict-transport-security: max-age=31536000
x-content-type-options: nosniff
x-frame-options: deny
x-xss-protection: 1; mode=block
x-github-request-id: C0BA:235E1C:2A29572:2FED815:6858DC85
content-encoding: gzip
via: 1.1 varnish, 1.1 varnish
expires: Mon, 23 Jun 2025 04:53:06 GMT
accept-ranges: bytes
date: Mon, 23 Jun 2025 05:46:02 GMT
x-served-by: cache-fra-etou8220110-FRA, cache-fra-eddf8230164-FRA
x-cache: MISS, HIT
x-cache-hits: 0, 0
x-timer: S1750657563.608807,VS0,VE263
vary: Authorization,Accept-Encoding
access-control-allow-origin: *
cross-origin-resource-policy: cross-origin
x-fastly-request-id: a95d11f0f1d4ab11e213cd705f11a7ee7cafd47b
source-age: 0
content-length: 46591

DNS Lookup

DNS entries (Domain Name System) are a critical component of the Internet infrastructure. They act as directories that translate human-readable domain names (such as example.com) to machine-readable IP addresses. DNS records are stored on DNS servers and help forward internet traffic efficiently.
Type Ip Target/Txt TTL
HINFO 3600