3 Commits

Author SHA1 Message Date
x d5a4fcbe5a bump version to 1.5 2025-03-19 22:08:35 +01:00
x c3be23d369 handle local domains 2025-03-19 22:08:30 +01:00
x 90bb276622 fix permissions (remove webrequest) 2025-03-19 22:08:20 +01:00
4 changed files with 51 additions and 20 deletions
+13
View File
@@ -32,6 +32,8 @@ export default function ServerInfo({ data }: { data: ServerData }) {
Internal Network Internal Network
</h2> </h2>
</div> </div>
{data.ip && (
<div className="flex items-center space-x-3"> <div className="flex items-center space-x-3">
<ServerIcon className="w-6 h-6 text-yellow-400 flex-shrink-0" /> <ServerIcon className="w-6 h-6 text-yellow-400 flex-shrink-0" />
<div> <div>
@@ -39,6 +41,17 @@ export default function ServerInfo({ data }: { data: ServerData }) {
<p className="font-medium">{data.ip}</p> <p className="font-medium">{data.ip}</p>
</div> </div>
</div> </div>
)}
{data.hostname && (
<div className="flex items-center space-x-3">
<LinkIcon className="w-6 h-6 text-green-400 flex-shrink-0" />
<div>
<p className="text-sm text-gray-400">Hostname</p>
<p className="font-medium break-all">{data.hostname}</p>
</div>
</div>
)}
</div> </div>
); );
} }
+24 -8
View File
@@ -1,7 +1,11 @@
import { useState, useEffect } from 'react'; import { useState, useEffect } from 'react'
import browser from 'webextension-polyfill'; import { isPrivateIP } from '@/utils'
import { isPrivateIP } from '@/utils'; import {
import { FetchServerInfoRequest, FetchServerInfoResponse, ServerData } from '@/utils/model'; FetchServerInfoRequest,
FetchServerInfoResponse,
ServerData,
} from '@/utils/model'
import browser from 'webextension-polyfill'
export function useTabData() { export function useTabData() {
const [data, setData] = useState<ServerData | null>(null) const [data, setData] = useState<ServerData | null>(null)
@@ -39,7 +43,7 @@ export function useTabData() {
return setData({ return setData({
origin: '', origin: '',
ip: hostname, ip: hostname,
hostname: url.href, hostname: '',
country: '', country: '',
city: '', city: '',
org: '', org: '',
@@ -48,7 +52,10 @@ export function useTabData() {
}) })
} }
const response = await browser.runtime.sendMessage<FetchServerInfoRequest, FetchServerInfoResponse>({ const response = await browser.runtime.sendMessage<
FetchServerInfoRequest,
FetchServerInfoResponse
>({
type: 'FETCH_SERVER_INFO', type: 'FETCH_SERVER_INFO',
hostname: hostname, hostname: hostname,
}) })
@@ -58,7 +65,16 @@ export function useTabData() {
} }
if (response.error) { if (response.error) {
throw new Error(response.error) return setData({
origin: '',
ip: '',
hostname: hostname,
country: '',
city: '',
org: '',
isLocal: true,
isBrowserResource: false,
})
} }
if (!response.data?.ip) { if (!response.data?.ip) {
@@ -68,7 +84,7 @@ export function useTabData() {
setData(response.data) setData(response.data)
setError(null) setError(null)
} catch (err) { } catch (err) {
setError(err instanceof Error ? err.message : 'Failed to fetch data') setError(err instanceof Error ? err.message : 'No data found')
setData(null) setData(null)
} finally { } finally {
setLoading(false) setLoading(false)
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "hostinfo", "name": "hostinfo",
"description": "Receive information of a domain directly in the browser when browsing a website", "description": "Receive information of a domain directly in the browser when browsing a website",
"private": true, "private": true,
"version": "1.4", "version": "1.5",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "wxt", "dev": "wxt",
+5 -3
View File
@@ -2,11 +2,13 @@ import { defineConfig } from 'wxt'
import tailwindcss from '@tailwindcss/vite' import tailwindcss from '@tailwindcss/vite'
export default defineConfig({ export default defineConfig({
extensionApi: 'webextension-polyfill',
modules: ['@wxt-dev/module-react'], modules: ['@wxt-dev/module-react'],
manifest: { manifest: {
permissions: ['tabs', 'activeTab', 'webRequest'], permissions: ['tabs', 'activeTab'],
host_permissions: ['https://ip.albert.lol/*', 'https://cloudflare-dns.com/*'], host_permissions: [
'https://ip.albert.lol/*',
'https://cloudflare-dns.com/*',
],
action: { action: {
default_title: 'Host Info', default_title: 'Host Info',
}, },