├── .eslintrc.json ├── public ├── favicon.ico ├── external │ ├── logo.png │ ├── logox.png │ └── withbg.png └── replit.svg ├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ └── feature_request.md ├── postcss.config.js ├── external ├── loved.json ├── dev.json ├── verified.json ├── utils.ts └── database.ts ├── next.config.js ├── replit.nix ├── next-env.d.ts ├── pages ├── history.tsx ├── api │ ├── hello.ts │ └── entilements │ │ ├── lookup.ts │ │ ├── fetch.ts.txt │ │ └── test.tsx ├── _app.tsx ├── index.tsx ├── docs │ └── start.tsx └── lookup │ └── [pid].js ├── tailwind.config.js ├── styles └── globals.css ├── components ├── Navbar.tsx ├── History.js ├── ShareModal.js └── Search.js ├── .gitignore ├── tsconfig.json ├── README.md ├── package.json └── .replit /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kardespro/next-binfo/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: kardespro 4 | -------------------------------------------------------------------------------- /public/external/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kardespro/next-binfo/HEAD/public/external/logo.png -------------------------------------------------------------------------------- /public/external/logox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kardespro/next-binfo/HEAD/public/external/logox.png -------------------------------------------------------------------------------- /public/external/withbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kardespro/next-binfo/HEAD/public/external/withbg.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /external/loved.json: -------------------------------------------------------------------------------- 1 | ["https://top.gg", "https://next-binfo.vercel.app", "https://nego-dev.com","https://next-binfo.kardespro.repl.co"] -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig 7 | -------------------------------------------------------------------------------- /external/dev.json: -------------------------------------------------------------------------------- 1 | ["https://next-binfo.vercel.app", "https://next-binfo.kardespro.repl.co", "https://pogget-app.vercel.app/", "https://pogget-app.vercel.app"] 2 | -------------------------------------------------------------------------------- /replit.nix: -------------------------------------------------------------------------------- 1 | { pkgs }: { 2 | deps = [ 3 | pkgs.nodejs-16_x 4 | pkgs.nodePackages.typescript-language-server 5 | pkgs.nodePackages.yarn 6 | pkgs.replitPackages.jest 7 | ]; 8 | } -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /pages/history.tsx: -------------------------------------------------------------------------------- 1 | import Navbar from '../components/Navbar' 2 | import History from '../components/History.js' 3 | export default function Tarix(){ 4 | return( 5 | <> 6 | 7 | 8 | 9 | ) 10 | } -------------------------------------------------------------------------------- /external/verified.json: -------------------------------------------------------------------------------- 1 | ["https://top.gg","https://awardbot.net", "https://partnerbot.xyz","https://next-binfo.vercel.app","https://next-binfo.kardespro.repl.co","https://nego-dev.com", "https://pogget-app.vercel.app/", "https://pogget-app.vercel.app"] 2 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "./app/**/*.{js,ts,jsx,tsx}", 5 | "./pages/**/*.{js,ts,jsx,tsx}", 6 | "./components/**/*.{js,ts,jsx,tsx}", 7 | ], 8 | theme: { 9 | extend: {}, 10 | }, 11 | plugins: [], 12 | } -------------------------------------------------------------------------------- /styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | body { 6 | 7 | @apply flex flex-col items-center justify-center text-gray-800; 8 | 9 | background: #f3f4f6; 10 | 11 | } 12 | 13 | 14 | #__layout { 15 | @apply h-full w-full; 16 | } 17 | .r{ 18 | border-radius:50%; 19 | } -------------------------------------------------------------------------------- /pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from 'next' 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse 11 | ) { 12 | res.status(200).json({ name: 'John Doe' }) 13 | } 14 | -------------------------------------------------------------------------------- /external/utils.ts: -------------------------------------------------------------------------------- 1 | function makeid(length: number): string { 2 | let result = ""; 3 | const characters = "0123456789100"; 4 | const charactersLength = characters.length; 5 | let counter = 0; 6 | while (counter < length) { 7 | result += characters.charAt(Math.floor(Math.random() * charactersLength)); 8 | counter++; 9 | } 10 | return result; 11 | } 12 | export { makeid } -------------------------------------------------------------------------------- /components/Navbar.tsx: -------------------------------------------------------------------------------- 1 | import { useRouter } from 'next/router' 2 | export default function Navbar(){ 3 | const router = useRouter() 4 | return( 5 | <> 6 |
7 |

Next-binfo

8 |

router.push("/history")}>History

9 |
10 | 11 | ) 12 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import '../styles/globals.css' 2 | import type { AppProps } from 'next/app' 3 | import Head from 'next/head' 4 | import { Analytics } from '@vercel/analytics/react'; 5 | function MyApp({ Component, pageProps }: AppProps) { 6 | return( 7 | <> 8 | 9 | Next-Binfo - Lookup Next.js Websites 10 | 11 | 12 | 13 | 14 | 15 | ) 16 | } 17 | 18 | export default MyApp 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /pages/api/entilements/lookup.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from 'next'; 2 | import axios from 'axios' 3 | import { Lookup, useConnection, useDisconnect } from '../../../external/database' 4 | interface LookupData { 5 | error: String, 6 | errorCode: Number 7 | } 8 | export default async function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse 11 | ) { 12 | if(!req.query.id) return res.json({ 13 | error: "Id Not Found", 14 | errorCode: 404 15 | }) 16 | //await useConnection() 17 | let data = await Lookup(`${req.query.id}`) 18 | let parsedData: any = null; 19 | 20 | if (data) { 21 | parsedData = JSON.parse(data); 22 | } 23 | 24 | if (!parsedData) { 25 | return res.json({ error: "This ID Not Found In Database", errorCode: 404 }); 26 | } 27 | let dreq = await axios.get(`https://next-binfo.vercel.app/api/entilements/test?url=${parsedData.url}`) 28 | //await useDisconnect() 29 | res.json(dreq.data) 30 | 31 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 |

Next-binfo

6 | 7 |

Lookup Next.js Websites Fast And Easily

8 | 9 | #

Start To Deploying Next-binfo Website

10 | 11 | ```bash 12 | git clone https://github.com/kardespro/next-binfo 13 | cd next-binfo 14 | ``` 15 | 16 | ```bash 17 | npm i -y 18 | ``` 19 | 20 |

Start Server

21 | 22 | ```bash 23 | 24 | next build && next start 25 | 26 | ``` 27 | 28 |

Contributors

29 | 30 | 31 | 32 | 41 | 42 |
33 | 34 |
35 | Nego 36 |
37 |
38 | 👨‍💻 39 | 🍥 40 |
43 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "my-app", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@headlessui/react": "^1.7.14", 13 | "@heroicons/react": "^2.0.17", 14 | "@vercel/analytics": "^0.1.11", 15 | "axios": "^1.3.5", 16 | "cheerio": "^1.0.0-rc.12", 17 | "clipboard": "^2.0.11", 18 | "http": "^0.0.1-security", 19 | "lodash": "^4.17.21", 20 | "next": "12.2.0", 21 | "react": "18.2.0", 22 | "react-dom": "18.2.0", 23 | "react-spinners": "^0.13.8", 24 | "redis": "^4.6.5", 25 | "socket.io": "^4.6.2", 26 | "styled-components": "^5.3.9", 27 | "swr": "^2.1.2", 28 | "ws": "^8.13.0" 29 | }, 30 | "devDependencies": { 31 | "@types/node": "18.0.1", 32 | "@types/react": "18.0.14", 33 | "@types/react-dom": "18.0.5", 34 | "autoprefixer": "^10.4.13", 35 | "eslint": "8.19.0", 36 | "eslint-config-next": "12.2.0", 37 | "postcss": "^8.4.19", 38 | "tailwindcss": "^3.2.4", 39 | "typescript": "4.7.4" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from 'next' 2 | import Head from 'next/head' 3 | import Image from 'next/image' 4 | import Navbar from '../components/Navbar' 5 | import Search from '../components/Search.js' 6 | import { useRouter } from 'next/router' 7 | const Home: NextPage = () => { 8 | const router = useRouter() 9 | return ( 10 | <> 11 | 12 |
13 | 14 |
15 |
16 |

17 | 18 | 19 | 20 | 21 | 22 | All Systems Online ! 23 |

24 |
25 |
26 |

Copyright ©️ 2023 - Next-binfo

27 |
28 | 29 | ) 30 | } 31 | 32 | export default Home -------------------------------------------------------------------------------- /external/database.ts: -------------------------------------------------------------------------------- 1 | import { createClient } from 'redis'; const client = createClient({ 2 | password: "edh2Ne02AuFvqpgEYxp0phJFvfPBYrbD", 3 | socket: { 4 | host: "redis-12275.c279.us-central1-1.gce.cloud.redislabs.com", 5 | port: 12275 6 | } 7 | }); 8 | client.on('error', err => console.log('Redis Client Error', err)); 9 | /*interface MyData { 10 | isNext: boolean; 11 | isAvaliable: boolean; 12 | buildID: string; 13 | title: string; 14 | faviconUrl: string; 15 | isTW: string; 16 | timeout: string; 17 | loved: boolean; 18 | verified: boolean; 19 | 20 | }*/ 21 | interface MyData { 22 | url: String 23 | } 24 | export async function useConnection(){ 25 | await client.connect(); 26 | } 27 | export async function addWebsite(id: String, jsonData: MyData){ 28 | await client.connect() 29 | let url = jsonData.url 30 | const strf = { 31 | url: url 32 | } 33 | const tr2 = JSON.stringify(strf) 34 | await client.set(`${id}`, tr2); 35 | await client.disconnect() 36 | return true 37 | } 38 | export async function Lookup(id: String){ 39 | await client.connect() 40 | let data = await client.get(`${id}`) 41 | await client.disconnect() 42 | return data 43 | } 44 | export async function useDisconnect(){ 45 | await client.disconnect(); 46 | return true 47 | } 48 | -------------------------------------------------------------------------------- /public/replit.svg: -------------------------------------------------------------------------------- 1 | replit logo -------------------------------------------------------------------------------- /pages/api/entilements/fetch.ts.txt: -------------------------------------------------------------------------------- 1 | import type { NextApiRequest, NextApiResponse } from 'next'; 2 | import axios from 'axios'; 3 | import cheerio from 'cheerio'; 4 | 5 | interface ScrapeData { 6 | isAvaliable: Boolean; 7 | isNext: Boolean; 8 | error: Boolean; 9 | errorMessage: String; 10 | buildID: String; 11 | sortedPages: string[]; 12 | } 13 | interface ScrapeQuery { 14 | url: String; 15 | } 16 | export default async function handler( 17 | req: NextApiRequest, 18 | res: NextApiResponse 19 | ) { 20 | if(!req.query.url) return res.json({ 21 | isNext: false, 22 | error: true, 23 | errorMessage: "Query Not Found" 24 | }) 25 | try { 26 | const response = await axios.get(req.query.url); 27 | const $ = cheerio.load(response.data); 28 | 29 | const scriptText = $('script#__NEXT_DATA__').html(); 30 | /* if(!scriptText) return res.json({ 31 | isNext: false, 32 | avaliable: true 33 | })*/ 34 | const nextData = JSON.parse(scriptText || '{}'); 35 | 36 | const buildID = nextData?.buildId || '' 37 | const buildManifest = await axios.get(`${req.query.url}//_next/static/${buildID}/_buildManifest.js`) 38 | const dManifest = buildManifest.data 39 | const sortedText = /self\.__BUILD_MANIFEST=(.*),self\.__BUILD_MANIFEST_CB/.exec(dManifest)?.[1]; 40 | const parsedManifest = JSON.parse(sortedText || '[]'); 41 | res.status(200).json({ 42 | isNext: true, 43 | avaliable: true, 44 | buildID: buildID, 45 | sortedPages: parsedManifest 46 | 47 | }); 48 | } catch (error) { 49 | console.error(error); 50 | res.status(200).json({ 51 | isNext: false, 52 | avaliable: false 53 | }); 54 | } 55 | } -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | entrypoint = "index.js" 2 | 3 | hidden = [".config", ".next", ".swc"] 4 | 5 | run = "npm run dev" 6 | 7 | [[hints]] 8 | regex = "Error \\[ERR_REQUIRE_ESM\\]" 9 | message = "We see that you are using require(...) inside your code. We currently do not support this syntax. Please use 'import' instead when using external modules. (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import)" 10 | 11 | [nix] 12 | channel = "stable-21_11" 13 | 14 | [env] 15 | XDG_CONFIG_HOME = "/home/runner/.config" 16 | PATH = "/home/runner/$REPL_SLUG/.config/npm/node_global/bin:/home/runner/$REPL_SLUG/node_modules/.bin" 17 | npm_config_prefix = "/home/runner/$REPL_SLUG/.config/npm/node_global" 18 | 19 | [packager] 20 | language = "nodejs" 21 | 22 | [packager.features] 23 | packageSearch = true 24 | guessImports = true 25 | enabledForHosting = false 26 | 27 | [unitTest] 28 | language = "nodejs" 29 | 30 | [languages.javascript] 31 | pattern = "**/{*.js,*.jsx,*.ts,*.tsx}" 32 | 33 | [languages.javascript.languageServer] 34 | start = [ "typescript-language-server", "--stdio" ] 35 | 36 | [debugger] 37 | support = true 38 | 39 | [debugger.interactive] 40 | transport = "localhost:0" 41 | startCommand = [ "dap-node" ] 42 | 43 | [debugger.interactive.initializeMessage] 44 | command = "initialize" 45 | type = "request" 46 | 47 | [debugger.interactive.initializeMessage.arguments] 48 | clientID = "replit" 49 | clientName = "replit.com" 50 | columnsStartAt1 = true 51 | linesStartAt1 = true 52 | locale = "en-us" 53 | pathFormat = "path" 54 | supportsInvalidatedEvent = true 55 | supportsProgressReporting = true 56 | supportsRunInTerminalRequest = true 57 | supportsVariablePaging = true 58 | supportsVariableType = true 59 | 60 | [debugger.interactive.launchMessage] 61 | command = "launch" 62 | type = "request" 63 | 64 | [debugger.interactive.launchMessage.arguments] 65 | args = [] 66 | console = "externalTerminal" 67 | cwd = "." 68 | environment = [] 69 | pauseForSourceMap = false 70 | program = "./index.js" 71 | request = "launch" 72 | sourceMaps = true 73 | stopOnEntry = false 74 | type = "pwa-node" 75 | -------------------------------------------------------------------------------- /pages/docs/start.tsx: -------------------------------------------------------------------------------- 1 | import Navbar from '../../components/Navbar' 2 | import { useRouter } from 'next/router' 3 | export default function DocsApiDocsStarted(){ 4 | const router = useRouter() 5 | return( 6 | <> 7 | 8 |
9 |

Next-Binfo - Free API

10 |

API Host: https://next-binfo.vercel.app

11 |
12 |
13 | /api/entilements/test?url={``} 14 |
15 |
16 |
17 |

Response : 200 404

18 | 19 | 20 |
21 |
22 | {` 23 | { 24 | isAvaliable: true, 25 | isNext: true, 26 | isTW: true, 27 | title: "Nego-Dev.com", 28 | faviconURL: "https://isdn.nego-dev.com", 29 | loved: true, 30 | dev: true, 31 | verified: true 32 | } 33 | 34 | `} 35 |
36 |
37 |
38 | {` 39 | { 40 | isAvaliable: false, 41 | isNext: false 42 | } 43 | 44 | `} 45 |
46 |
47 |
48 | {` 49 | { 50 | isAvaliable: true, 51 | isNext: false 52 | } 53 | 54 | `} 55 |
56 |
57 |
58 | {` 59 | { 60 | isAvaliable: false, 61 | isNext: false, 62 | error: "404", 63 | message: "Query Not Found" 64 | } 65 | 66 | `} 67 |
68 |
69 |
70 | 77 | 86 |
87 | 88 | ) 89 | } -------------------------------------------------------------------------------- /components/History.js: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from 'react' 2 | import { useRouter } from 'next/router' 3 | export default function History(){ 4 | const [log,setLog] = useState({}) 5 | const [s,t] = useState("") 6 | const [sa,ssa] = useState(true) 7 | const router = useRouter() 8 | useEffect(() => { 9 | let data = window.localStorage.getItem("__history") 10 | if(!data){ 11 | ssa(false) 12 | } 13 | let d = JSON.parse(data) 14 | 15 | 16 | /* let dd = d.title || "Title Not Found" 17 | let ddd = dd.slice(0, 24) + "..."; 18 | t(ddd)*/ 19 | setLog(d) 20 | }) 21 | function remove(){ 22 | window.localStorage.removeItem("__history") 23 | ssa(false) 24 | setLog() 25 | } 26 | return( 27 | <> 28 | {sa ?( 29 | <> 30 |
31 |
32 |

History

33 |
34 | 35 |

{log.title || ""}

36 | 37 | 38 |
39 |
40 | 45 |
46 |
47 |
48 | 55 | 62 |
63 | 64 | ):( 65 | <> 66 |
67 |
68 |

History

69 |
70 |

You Dont have History Yet

71 |
72 |
73 | 74 |
75 |
76 | 83 | 84 |
85 | 86 | )} 87 | 88 | 89 | ) 90 | } -------------------------------------------------------------------------------- /pages/api/entilements/test.tsx: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from 'next'; 2 | import axios from 'axios'; 3 | import cheerio from 'cheerio'; 4 | import loved from '../../../external/loved.json' 5 | import verified from '../../../external/verified.json' 6 | import dev from '../../../external/dev.json' 7 | import { addWebsite, Lookup , useConnection, useDisconnect } from '../../../external/database' 8 | import { makeid } from '../../../external/utils' 9 | interface ScrapeData { 10 | isAvailable: boolean; 11 | error: boolean; 12 | errorMessage: string; 13 | buildID: string; 14 | sortedPages: string[]; 15 | isTW: boolean; 16 | timeout: Number; 17 | loved: boolean; 18 | verified: boolean; 19 | dev: boolean; 20 | share_id: string; 21 | } 22 | 23 | interface ScrapeQuery { 24 | url: string; 25 | } 26 | 27 | export default async function handler( 28 | req: NextApiRequest, 29 | res: NextApiResponse 30 | ) { 31 | if(!req.query.url) return res.json({ 32 | isNext: false, 33 | error: true, 34 | errorMessage: "Query Not Found" 35 | }) 36 | //await useConnection() 37 | let response = await axios.get(req.query.url, {proxy: { protocol: "http", host: "188.74.210.207", port: 6286, auth: { username: "mgsivsqa", password: "db1i98i8t4h3"}}}).catch(err => res.json({ 38 | isNext: false, 39 | isAvaliable: false, 40 | errorMessage: err.code 41 | })) 42 | const $ = cheerio.load(response.data); 43 | const styleHref = $('link[as="style"]').attr('href'); 44 | const fullStyleUrl = new URL(styleHref, req.query.url).toString(); 45 | var twRes = '' 46 | 47 | 48 | const title = $('head > title').text(); 49 | let faviconUrl = ''; 50 | $('head > link[rel="icon"], head > link[rel="shortcut icon"]').each(function(i, elem) { 51 | const href = $(this).attr('href'); 52 | if (href && !href.startsWith('data:')) { 53 | faviconUrl = href; 54 | return false; 55 | } 56 | }); 57 | 58 | 59 | $('script').each(function(i, elem) { 60 | if ($(this).attr('id') === '__NEXT_DATA__') { 61 | const jsonData = $(this).html(); 62 | let j1 = JSON.parse(jsonData || '{}') 63 | 64 | let maked = ''; 65 | if(!faviconUrl.includes("https")){ 66 | maked = `${req.query.url}/${faviconUrl}` 67 | }else{ 68 | maked = `${faviconUrl}` 69 | } 70 | 71 | if(styleHref){ 72 | axios.get(fullStyleUrl,{proxy: { protocol: "http", host: "188.74.210.207", port: 6286, auth: { username: "mgsivsqa", password: "db1i98i8t4h3"}}}).then(w4w1 => { 73 | 74 | const hasTailwind = /\/\*[\s\S]*tailwindcss[\s\S]*\*\//.test(w4w1.data); 75 | let mk5 = makeid(12) 76 | let mkdrty = { 77 | url: req.query.url 78 | } 79 | addWebsite(mk5, mkdrty) 80 | res.json({ 81 | isNext:true, 82 | isAvaliable: true, 83 | buildID: j1.buildId, 84 | title: title, 85 | faviconUrl:`${maked || "/external/withbg.png"}`, 86 | isTW: hasTailwind, 87 | timeout: Date.now(), 88 | loved: loved.includes(req.query.url), 89 | verified: verified.includes(req.query.url), 90 | dev: dev.includes(req.query.url), 91 | share_id: mk5 92 | }) 93 | }) 94 | 95 | 96 | } 97 | if(!styleHref){ 98 | let mk5 = makeid(12) 99 | let mkdrty = { 100 | url: req.query.url 101 | } 102 | addWebsite(mk5, mkdrty) 103 | res.json({ 104 | isNext:true, 105 | isAvaliable: true, 106 | buildID: j1.buildId, 107 | title: title, 108 | faviconUrl:`${maked || "/external/withbg.png"}`, 109 | isTW: false, 110 | timeout: Date.now(), 111 | loved: loved.includes(req.query.url), 112 | verified: verified.includes(req.query.url), 113 | dev: dev.includes(req.query.url), 114 | share_id: mk5 115 | }) 116 | } 117 | 118 | } 119 | }); 120 | //await useDisconnect() 121 | // __NEXT_DATA__ verisi yoksa hata fırlat 122 | if (!$('#__NEXT_DATA__').length) { 123 | res.json({ 124 | isNext: false, 125 | isAvaliable: true 126 | }) 127 | } 128 | } -------------------------------------------------------------------------------- /components/ShareModal.js: -------------------------------------------------------------------------------- 1 | import { Fragment, useRef, useState, useEffect } from 'react' 2 | import { Dialog, Transition } from '@headlessui/react' 3 | import { ExclamationTriangleIcon } from '@heroicons/react/24/outline' 4 | import Clipboard from 'clipboard'; 5 | export default function ShareModal({ id }) { 6 | const [open, setOpen] = useState(true) 7 | 8 | const cancelButtonRef = useRef(null) 9 | useEffect(() => { 10 | new Clipboard('#copyButton'); 11 | }, []); 12 | return ( 13 | 14 | 15 | 24 |
25 | 26 | 27 |
28 |
29 | 38 | 39 |
40 |
41 |
42 | 43 | 44 | 45 | 46 |
47 |
48 | 49 | Copy Lookup URL 50 | 51 |
52 |

53 | Copy And Share Lookup Detalis On Your Friends 54 |

55 |
56 |
57 |
58 |
59 |
60 | 69 | 77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | ) 85 | } 86 | -------------------------------------------------------------------------------- /pages/lookup/[pid].js: -------------------------------------------------------------------------------- 1 | import { useRouter } from 'next/router' 2 | import axios from 'axios' 3 | import { useState , useEffect } from 'react' 4 | export default function LookupData(){ 5 | 6 | const [search,setSearch] = useState({}) 7 | const [ping,setPing] = useState("") 8 | const router = useRouter() 9 | const { pid } = router.query 10 | 11 | useEffect(() => { 12 | (async() => { 13 | let data = await axios.get(`/api/entilements/lookup?id=${pid}`) 14 | if(data.data.errorCode === 404){ 15 | 16 | setSearch(null) 17 | } 18 | if(!data.data.error){ 19 | setSearch(data.data) 20 | 21 | } 22 | })() 23 | }) 24 | return( 25 | <> 26 | {!search && 27 |
28 | } 29 | {search ?( 30 |
31 |
32 |

Results

33 | 34 | 35 |

Badges :

36 |

37 | {search.verified ?( 38 | 39 | 40 | 41 | 42 | 43 | 44 | ):( 45 |

46 | )} 47 | {search.loved ?( 48 | 49 | 50 | 51 | 52 | ):( 53 |

54 | )} 55 | 56 | {search.dev ?( 57 | 58 | 59 | 60 | 61 | 62 | 63 | ):( 64 |

65 | )} 66 |

67 |

Next.js Server : 68 | {search.isNext ?( 69 | ):( 70 | 71 | 72 | )}

73 | 74 |

75 | BuildID : {search.isNext ?( 76 |

{search.buildID}

77 | ):( 78 |

Unknown

79 | )} 80 |

81 |

82 | Pages : {search.isNext ?( 83 |

/,/_app,/_error

84 | ):( 85 |

Unknown

86 | )} 87 |

88 | {search.isNext ?( 89 |

Using TailwindCss? :

90 | ):( 91 |

92 | )} 93 | {search.isNext && search.isTW ?( 94 | 95 | 96 |

97 | 98 | 99 | 100 | 101 |

102 | ):( 103 |

104 | 105 | 106 | 107 | 108 | 109 |

110 | )} 111 | 112 | {search.isNext ? ( 113 | <> 114 |

Header

115 |
116 | 117 |

{search.title.slice(0, 32) + "..." || "Title Not Found"}

118 |
119 | 120 | ):( 121 |

122 | )} 123 | 124 | 125 |
126 |
127 | ):( 128 |
129 |

This ID Not found in Database

130 |
131 | )} 132 | 133 | ) 134 | } -------------------------------------------------------------------------------- /components/Search.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import { useState, useEffect } from 'react' 3 | import useSWR from 'swr' 4 | import MoonLoader from "react-spinners/ClipLoader"; 5 | import ShareModal from './ShareModal.js' 6 | import { useRouter } from 'next/router' 7 | export default function Search(){ 8 | const router = useRouter() 9 | const [favourite,setFavourite] = useState([]) 10 | const [shr,setShr] = useState(false) 11 | const [search,setSearch] = useState() 12 | const [sAble,ssAble] = useState(false) 13 | const [loadBtn,setLoadBtn] = useState(false) 14 | const [ping,setPing] = useState("") 15 | const handleSubmit = async(e) => { 16 | e.preventDefault() 17 | setLoadBtn(true) 18 | let d = await axios.get(`/api/entilements/test?url=${e.target.url.value}`, { headers: { "Content-Type": "application/json"}}) 19 | let p = { 20 | url: e.target.url.value, 21 | title: d.data.title, 22 | faviconUrl: d.data.faviconUrl 23 | } 24 | let pingg = d.data.timeout - Date.now() 25 | 26 | let p2 = JSON.stringify(p) 27 | window.localStorage.setItem("__history", p2) 28 | 29 | setSearch(d.data) 30 | setPing(pingg) 31 | setLoadBtn(false) 32 | ssAble(true) 33 | /* setTimeout(() => { 34 | setLoadBtn(false) 35 | ssAble(true) 36 | 37 | }, 2000)*/ 38 | } 39 | return( 40 | <> 41 |
42 |
43 |
44 | 51 | {loadBtn ?( 52 | 59 | ):( 60 | 64 | )} 65 |
66 | 67 |
68 |
69 | {sAble ?( 70 |
71 |
72 |

Results

73 |

Badges :

74 |

75 | {search.verified ?( 76 | 77 | 78 | 79 | 80 | 81 | 82 | ):( 83 |

84 | )} 85 | {search.loved ?( 86 | 87 | 88 | 89 | 90 | ):( 91 |

92 | )} 93 | 94 | {search.dev ?( 95 | 96 | 97 | 98 | 99 | 100 | 101 | ):( 102 |

103 | )} 104 |

105 |

Next.js Server : 106 | {search.isNext ?( 107 | ):( 108 | 109 | 110 | )}

111 | 112 |

113 | BuildID : {search.isNext ?( 114 |

{search.buildID}

115 | ):( 116 |

Unknown

117 | )} 118 |

119 |

120 | Pages : {search.isNext ?( 121 |

/,/_app,/_error

122 | ):( 123 |

Unknown

124 | )} 125 |

126 | {search.isNext ?( 127 |

Using TailwindCss? :

128 | ):( 129 |

130 | )} 131 | {search.isNext && search.isTW ?( 132 | 133 | 134 |

135 | 136 | 137 | 138 | 139 |

140 | ):( 141 |

142 | 143 | 144 | 145 | 146 | 147 |

148 | )} 149 | {search.isNext ?( 150 | <> 151 |

Timeout :

152 |

{`${ping}`} ms

153 | 154 | ):( 155 |

156 | )} 157 | {search.isNext ? ( 158 | <> 159 |

Header

160 |
161 | 162 |

{search.title.slice(0, 32) + "..." || "Title Not Found"}

163 |
164 | 165 | ):( 166 |

167 | )} 168 |
169 |
170 | ):( 171 |
172 |
173 |
174 | 175 |

You Dont Have Search Yet

176 |

Visit

177 |
178 |
179 |
180 |
181 | 182 | )} 183 | {sAble ?( 184 |
185 | 188 | 192 | {shr && 193 | 194 | 195 | } 196 |
197 | ):( 198 |

199 | )} 200 | 201 | 202 | ) 203 | } --------------------------------------------------------------------------------