1
1
<script setup lang="ts">
2
2
import type { CKeyValueListItems } from ' @/ui/c-key-value-list/c-key-value-list.types' ;
3
3
4
- const ipOrDomain = ref (' 8.8.8.8' );
4
+ const ip = ref (' 8.8.8.8' );
5
5
const errorMessage = ref (' ' );
6
6
7
7
const fields: Array <{ field: string ; name: string }> = [
8
- { field: ' message' , name: ' Message' },
9
- { field: ' continent' , name: ' Continent Name' },
10
- { field: ' continentCode' , name: ' Continent code' },
11
- { field: ' country' , name: ' Country Name' },
12
- { field: ' countryCode' , name: ' Country Code' },
8
+ { field: ' ip' , name: ' IP' },
9
+ { field: ' hostname' , name: ' Host Name' },
10
+ { field: ' country' , name: ' Country Code' },
13
11
{ field: ' region' , name: ' Region/state Code' },
14
- { field: ' regionName' , name: ' Region/state Name' },
15
12
{ field: ' city' , name: ' City' },
16
- { field: ' district' , name: ' District' },
17
- { field: ' zip' , name: ' Zip Code' },
18
- { field: ' lat' , name: ' Latitude' },
19
- { field: ' lon' , name: ' Longitude' },
13
+ { field: ' postal' , name: ' Postal Code' },
14
+ { field: ' loc' , name: ' Latitude/Longitude' },
20
15
{ field: ' timezone' , name: ' Timezone' },
21
- { field: ' offset' , name: ' Timezone UTC DST offset (in seconds)' },
22
- { field: ' currency' , name: ' National Currency' },
23
- { field: ' isp' , name: ' ISP Name' },
24
16
{ field: ' org' , name: ' Organization Name' },
25
- { field: ' as' , name: ' AS Number and Organization' },
26
- { field: ' asname' , name: ' AS name (RIR)' },
27
- { field: ' reverse' , name: ' Reverse DNS of the IP' },
28
- { field: ' mobile' , name: ' Mobile (cellular) connection' },
29
- { field: ' proxy' , name: ' Proxy, VPN or Tor exit address' },
30
- { field: ' hosting' , name: ' Hosting, colocated or data center' },
31
- { field: ' query' , name: ' IP used for the query' },
32
17
];
33
18
34
19
const geoInfos = ref <CKeyValueListItems >([]);
35
20
const geoInfosData = ref <any >({});
36
21
const status = ref <' pending' | ' error' | ' success' >(' pending' );
22
+ const token = useStorage (' ip-geoloc:token' , ' ' );
37
23
38
24
const openStreetMapUrl = computed (
39
25
() => {
@@ -47,7 +33,10 @@ async function onGetInfos() {
47
33
try {
48
34
status .value = ' pending' ;
49
35
50
- const geoInfoQueryResponse = await fetch (` http://ip-api.com/json/${ipOrDomain .value } ` );
36
+ const geoInfoQueryResponse = await fetch (
37
+ token .value !== ' '
38
+ ? ` https://ipinfo.io/${ip .value }/json?token=${token .value } `
39
+ : ` https://ipinfo.io/${ip .value }/json ` );
51
40
if (! geoInfoQueryResponse .ok ) {
52
41
throw geoInfoQueryResponse .statusText ;
53
42
}
@@ -80,15 +69,29 @@ async function onGetInfos() {
80
69
<div >
81
70
<div flex items-center gap-2 >
82
71
<c-input-text
83
- v-model:value =" ipOrDomain "
84
- placeholder =" Enter an IPv4/6 or a domain name "
72
+ v-model:value =" ip "
73
+ placeholder =" Enter an IPv4/6"
85
74
@update:value =" () => { status = 'pending' }"
86
75
/>
87
76
<c-button align-center @click =" onGetInfos" >
88
77
Get GEO Location Infos
89
78
</c-button >
90
79
</div >
91
80
81
+ <details mt-2 >
82
+ <summary >Optional ipinfo.io token</summary >
83
+ <c-input-text
84
+ v-model:value =" token"
85
+ placeholder =" Optional ipinfo.io token"
86
+ @update:value =" () => { status = 'pending' }"
87
+ />
88
+ <n-p >
89
+ <n-a href =" https://ipinfo.io/" >
90
+ Signup for a free token
91
+ </n-a >
92
+ </n-p >
93
+ </details >
94
+
92
95
<n-divider />
93
96
94
97
<c-card v-if =" status === 'pending'" mt-5 >
0 commit comments