node-ipdox 1.0.6 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,6 +4,25 @@
4
4
 
5
5
  IPDox is a simple and efficient IP geolocation library for Node.js. It fetches data from multiple geolocation APIs and provides a unified response. It also includes a caching mechanism to prevent unnecessary requests.
6
6
 
7
+ ## Providers
8
+
9
+ Current keyless providers used:
10
+
11
+ - ip-api.com
12
+ - ipwho.is
13
+ - freeipapi.com
14
+ - ipapi.co
15
+
16
+ Note: ip-api.com free tier uses HTTP only. Provide `ipApiKey` to enable HTTPS (pro).
17
+
18
+ Fallback providers (best-effort, used after primary providers fail):
19
+
20
+ - geoip.vuiz.net
21
+ - apip.cc
22
+ - ip-sonar.com
23
+
24
+ Fallback providers can return partial data; `city` may be an empty string when unknown.
25
+
7
26
  ## Installation
8
27
 
9
28
  ```bash
@@ -18,7 +37,9 @@ import { IPDox } from "node-ipdox";
18
37
  const ipdox = new IPDox({
19
38
  cacheMaxItems: 5000,
20
39
  cacheMaxAge: 43200000,
21
- maxRetries: 10
40
+ maxRetries: 10,
41
+ requestTimeoutMs: 5000,
42
+ ipApiKey: "YOUR_IP_API_KEY"
22
43
  });
23
44
 
24
45
  ipdox
@@ -29,13 +50,15 @@ ipdox
29
50
 
30
51
  ## API
31
52
 
32
- ### `new IPDox({ cacheMaxItems, cacheMaxAge, maxRetries })`
53
+ ### `new IPDox({ cacheMaxItems, cacheMaxAge, maxRetries, requestTimeoutMs, ipApiKey })`
33
54
 
34
55
  Creates a new instance of IPDox.
35
56
 
36
57
  - `cacheMaxItems` - The maximum number of items to store in the cache (default: 1000)
37
58
  - `cacheMaxAge` - The cache timeout in milliseconds (default: 43200000 (12 hours))
38
59
  - `maxRetries` - Maximum number of retries if an API request fails (default: 10)
60
+ - `requestTimeoutMs` - Request timeout in milliseconds (default: 5000)
61
+ - `ipApiKey` - Optional ip-api.com pro API key to enable HTTPS
39
62
 
40
63
  ### `ipdox.doxIP({ ip })`
41
64
 
@@ -45,7 +68,7 @@ Fetches geolocation data for the specified IP address.
45
68
 
46
69
  Returns a Promise that resolves to an `IPDOXResponse` object.
47
70
 
48
- If no response is found, undefined is returned.
71
+ If no response is found or the IP is invalid, undefined is returned.
49
72
 
50
73
  ## IPDOXResponse
51
74
 
@@ -59,8 +82,8 @@ export interface IPDOXResponse {
59
82
  continent: string; // Continent ISO code
60
83
  latitude: number; // Latitude
61
84
  longitude: number; // Longitude
62
- zip: string; // Zip code
63
- isp: string; // ISP name
85
+ zip?: string; // Zip code (might be undefined)
86
+ isp?: string; // ISP name (might be undefined)
64
87
  proxy?: boolean; // Boolean indicating if the IP address is a proxy (might be undefined)
65
88
  isHosting?: boolean; // Boolean indicating if the IP address is a hosting provider (might be undefined)
66
89
  proxyInfo?: {
package/dist/ipdox.d.ts CHANGED
@@ -4,6 +4,11 @@ import { IPDOXConstructor } from "./types/IPDOXConstructor.js";
4
4
  declare class IPDox {
5
5
  private cache;
6
6
  private maxRetries;
7
+ private requestTimeoutMs;
8
+ private inFlight;
9
+ private http;
10
+ private ipApiKey?;
11
+ private unavailableProviders;
7
12
  /**
8
13
  * @description Creates an instance of IPDox.
9
14
  * @param {IPDOXConstructor} params
@@ -11,7 +16,7 @@ declare class IPDox {
11
16
  * @param {number} params.cacheMaxAge - The cache timeout in milliseconds (default: 43200000 (12 hours))
12
17
  * @param {number} params.maxRetries - The maximum number of retries (default: 10)
13
18
  */
14
- constructor({ cacheMaxItems, cacheMaxAge, maxRetries }?: IPDOXConstructor);
19
+ constructor({ cacheMaxItems, cacheMaxAge, maxRetries, requestTimeoutMs, ipApiKey }?: IPDOXConstructor);
15
20
  /**
16
21
  * @description Get information about an IP address
17
22
  * @param {IPDOXRequest} params - Params of the request
@@ -20,12 +25,25 @@ declare class IPDox {
20
25
  * @memberof IPDox
21
26
  */
22
27
  doxIP({ ip }: IPDOXRequest): Promise<IPDOXResponse | undefined>;
23
- private selectRandomAPI;
28
+ private shuffleProviders;
29
+ private fetchWithRetries;
30
+ private fetchFromProvider;
31
+ private waitWithJitter;
32
+ private noteProviderFailure;
33
+ private isDnsError;
34
+ private parseNumber;
35
+ private parseString;
36
+ private pickString;
37
+ private pickStringOrEmpty;
38
+ private normalizeContinentCode;
24
39
  private cacheResponse;
25
40
  private fetchIPHyphenAPIDotCom;
26
41
  private fetchFreeIPAPIDotCom;
27
42
  private fetchIPWhoDotIs;
28
43
  private fetchIPAPIDotCo;
44
+ private fetchGeoIPVuizDotNet;
45
+ private fetchAPIPDotCC;
46
+ private fetchIPSonarDotCom;
29
47
  }
30
48
  export default IPDox;
31
49
  //# sourceMappingURL=ipdox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ipdox.d.ts","sourceRoot":"","sources":["../src/ipdox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAI/D,cAAM,KAAK;IACV,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;;;OAMG;gBAEF,EACC,aAAoB,EACpB,WAAsB,EACtB,UAAe,EACf,GAAE,gBAIF;IASF;;;;;;OAMG;IACG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAqDrE,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,aAAa;YAIP,sBAAsB;YA4BtB,oBAAoB;YA4BpB,eAAe;YA4Bf,eAAe;CAyB7B;AAED,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"ipdox.d.ts","sourceRoot":"","sources":["../src/ipdox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAoB/D,cAAM,KAAK;IACV,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAkD;IAClE,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,oBAAoB,CAAe;IAE3C;;;;;;OAMG;gBAEF,EACC,aAAoB,EACpB,WAAsB,EACtB,UAAe,EACf,gBAA6C,EAC7C,QAAQ,EACR,GAAE,gBAKF;IAqBF;;;;;;OAMG;IACG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IA0BrE,OAAO,CAAC,gBAAgB;YAcV,gBAAgB;YAmEhB,iBAAiB;YAwBjB,cAAc;IAS5B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,aAAa;YAIP,sBAAsB;YAuDtB,oBAAoB;YAkDpB,eAAe;YAoDf,eAAe;YAuCf,oBAAoB;YAwDpB,cAAc;YAyDd,kBAAkB;CA6ChC;AAED,eAAe,KAAK,CAAC"}
package/dist/ipdox.js CHANGED
@@ -3,12 +3,33 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_net_1 = require("node:net");
6
7
  const axios_1 = __importDefault(require("axios"));
7
8
  const apis_js_1 = require("./utils/apis.js");
8
9
  const lru_cache_1 = require("lru-cache");
10
+ const DEFAULT_REQUEST_TIMEOUT_MS = 5000;
11
+ const DEFAULT_USER_AGENT = "node-ipdox";
12
+ const RETRY_BACKOFF_BASE_MS = 150;
13
+ const RETRY_BACKOFF_MAX_MS = 2000;
14
+ const PRIMARY_PROVIDERS = [
15
+ apis_js_1.GeoAPIs.IP_HYPHEN_API_DOT_COM,
16
+ apis_js_1.GeoAPIs.FREE_IP_API_DOT_COM,
17
+ apis_js_1.GeoAPIs.IPWHO_DOT_IS,
18
+ apis_js_1.GeoAPIs.IPAPI_DOT_CO
19
+ ];
20
+ const FALLBACK_PROVIDERS = [
21
+ apis_js_1.GeoAPIs.GEOIP_VUIZ_DOT_NET,
22
+ apis_js_1.GeoAPIs.APIP_DOT_CC,
23
+ apis_js_1.GeoAPIs.IP_SONAR_DOT_COM
24
+ ];
9
25
  class IPDox {
10
26
  cache;
11
27
  maxRetries;
28
+ requestTimeoutMs;
29
+ inFlight;
30
+ http;
31
+ ipApiKey;
32
+ unavailableProviders;
12
33
  /**
13
34
  * @description Creates an instance of IPDox.
14
35
  * @param {IPDOXConstructor} params
@@ -16,16 +37,29 @@ class IPDox {
16
37
  * @param {number} params.cacheMaxAge - The cache timeout in milliseconds (default: 43200000 (12 hours))
17
38
  * @param {number} params.maxRetries - The maximum number of retries (default: 10)
18
39
  */
19
- constructor({ cacheMaxItems = 1000, cacheMaxAge = 43200000, maxRetries = 10 } = {
40
+ constructor({ cacheMaxItems = 1000, cacheMaxAge = 43200000, maxRetries = 10, requestTimeoutMs = DEFAULT_REQUEST_TIMEOUT_MS, ipApiKey } = {
20
41
  cacheMaxItems: 1000,
21
42
  cacheMaxAge: 43200000,
22
- maxRetries: 10
43
+ maxRetries: 10,
44
+ requestTimeoutMs: DEFAULT_REQUEST_TIMEOUT_MS
23
45
  }) {
24
46
  this.cache = new lru_cache_1.LRUCache({
25
47
  max: cacheMaxItems,
26
- ttl: cacheMaxAge
48
+ ttl: cacheMaxAge,
49
+ ttlAutopurge: true
27
50
  });
28
51
  this.maxRetries = maxRetries;
52
+ this.requestTimeoutMs = requestTimeoutMs;
53
+ this.inFlight = new Map();
54
+ this.ipApiKey = typeof ipApiKey === "string" ? ipApiKey.trim() : undefined;
55
+ this.unavailableProviders = new Set();
56
+ this.http = axios_1.default.create({
57
+ timeout: this.requestTimeoutMs,
58
+ headers: {
59
+ "User-Agent": DEFAULT_USER_AGENT
60
+ },
61
+ validateStatus: status => status >= 200 && status < 500
62
+ });
29
63
  }
30
64
  /**
31
65
  * @description Get information about an IP address
@@ -35,65 +69,212 @@ class IPDox {
35
69
  * @memberof IPDox
36
70
  */
37
71
  async doxIP({ ip }) {
72
+ const normalizedIP = typeof ip === "string" ? ip.trim() : "";
38
73
  // Check that the ip is valid
39
- if (!ip || ip === "") {
74
+ if (!normalizedIP || (0, node_net_1.isIP)(normalizedIP) === 0) {
40
75
  return undefined;
41
76
  }
42
77
  // Check if the IP is already in the cache
43
- if (this.cache.has(ip)) {
44
- const cachedResponse = this.cache.get(ip);
45
- if (cachedResponse) {
46
- return cachedResponse;
47
- }
78
+ const cachedResponse = this.cache.get(normalizedIP);
79
+ if (cachedResponse) {
80
+ return cachedResponse;
48
81
  }
49
- // Select a random API
50
- let randomAPI = this.selectRandomAPI();
51
- let response = null;
52
- let retries = 0;
53
- // Fetch data from the API
54
- while (!response && retries < this.maxRetries) {
55
- try {
56
- switch (randomAPI) {
57
- case apis_js_1.GeoAPIs.IP_HYPHEN_API_DOT_COM:
58
- response = await this.fetchIPHyphenAPIDotCom(ip);
59
- break;
60
- case apis_js_1.GeoAPIs.FREE_IP_API_DOT_COM:
61
- response = await this.fetchFreeIPAPIDotCom(ip);
62
- break;
63
- case apis_js_1.GeoAPIs.IPWHO_DOT_IS:
64
- response = await this.fetchIPWhoDotIs(ip);
65
- break;
66
- case apis_js_1.GeoAPIs.IPAPI_DOT_CO:
67
- response = await this.fetchIPAPIDotCo(ip);
68
- break;
82
+ // Check if there's an ongoing request for the same IP
83
+ const inFlight = this.inFlight.get(normalizedIP);
84
+ if (inFlight) {
85
+ return inFlight;
86
+ }
87
+ const task = this.fetchWithRetries(normalizedIP);
88
+ this.inFlight.set(normalizedIP, task);
89
+ task.finally(() => this.inFlight.delete(normalizedIP));
90
+ return task;
91
+ }
92
+ shuffleProviders(providers, avoidFirst) {
93
+ const shuffled = [...providers];
94
+ for (let i = shuffled.length - 1; i > 0; i--) {
95
+ const j = Math.floor(Math.random() * (i + 1));
96
+ [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
97
+ }
98
+ if (avoidFirst && shuffled.length > 1 && shuffled[0] === avoidFirst) {
99
+ [shuffled[0], shuffled[1]] = [shuffled[1], shuffled[0]];
100
+ }
101
+ return shuffled;
102
+ }
103
+ async fetchWithRetries(ip) {
104
+ if (this.maxRetries <= 0) {
105
+ return undefined;
106
+ }
107
+ const primaryProviders = PRIMARY_PROVIDERS.filter(provider => !this.unavailableProviders.has(provider));
108
+ const fallbackProviders = FALLBACK_PROVIDERS.filter(provider => !this.unavailableProviders.has(provider));
109
+ const providers = primaryProviders.length > 0 || fallbackProviders.length > 0
110
+ ? { primary: primaryProviders, fallback: fallbackProviders }
111
+ : {
112
+ primary: Object.values(apis_js_1.GeoAPIs).filter(provider => !this.unavailableProviders.has(provider)),
113
+ fallback: []
114
+ };
115
+ let attempts = 0;
116
+ let order = [
117
+ ...this.shuffleProviders(providers.primary),
118
+ ...this.shuffleProviders(providers.fallback)
119
+ ];
120
+ let index = 0;
121
+ if (order.length === 0) {
122
+ return undefined;
123
+ }
124
+ while (attempts < this.maxRetries) {
125
+ if (index >= order.length) {
126
+ order = [
127
+ ...this.shuffleProviders(providers.primary),
128
+ ...this.shuffleProviders(providers.fallback)
129
+ ];
130
+ index = 0;
131
+ if (order.length === 0) {
132
+ return undefined;
69
133
  }
70
134
  }
135
+ const provider = order[index];
136
+ index++;
137
+ if (this.unavailableProviders.has(provider)) {
138
+ attempts++;
139
+ continue;
140
+ }
141
+ try {
142
+ return await this.fetchFromProvider(provider, ip);
143
+ }
71
144
  catch (error) {
72
- // If the promise is rejected, select another random API and try again
73
- randomAPI = this.selectRandomAPI();
74
- retries++;
145
+ this.noteProviderFailure(provider, error);
146
+ attempts++;
147
+ if (attempts < this.maxRetries) {
148
+ await this.waitWithJitter(attempts);
149
+ }
75
150
  }
76
151
  }
77
- // If max retries reached and no response, return undefined
78
- if (retries === this.maxRetries && !response) {
79
- return undefined;
152
+ return undefined;
153
+ }
154
+ async fetchFromProvider(provider, ip) {
155
+ switch (provider) {
156
+ case apis_js_1.GeoAPIs.IP_HYPHEN_API_DOT_COM:
157
+ return this.fetchIPHyphenAPIDotCom(ip);
158
+ case apis_js_1.GeoAPIs.FREE_IP_API_DOT_COM:
159
+ return this.fetchFreeIPAPIDotCom(ip);
160
+ case apis_js_1.GeoAPIs.IPWHO_DOT_IS:
161
+ return this.fetchIPWhoDotIs(ip);
162
+ case apis_js_1.GeoAPIs.IPAPI_DOT_CO:
163
+ return this.fetchIPAPIDotCo(ip);
164
+ case apis_js_1.GeoAPIs.GEOIP_VUIZ_DOT_NET:
165
+ return this.fetchGeoIPVuizDotNet(ip);
166
+ case apis_js_1.GeoAPIs.APIP_DOT_CC:
167
+ return this.fetchAPIPDotCC(ip);
168
+ case apis_js_1.GeoAPIs.IP_SONAR_DOT_COM:
169
+ return this.fetchIPSonarDotCom(ip);
170
+ default:
171
+ throw new Error("Unsupported provider");
172
+ }
173
+ }
174
+ async waitWithJitter(attempt) {
175
+ const baseDelay = Math.min(RETRY_BACKOFF_MAX_MS, RETRY_BACKOFF_BASE_MS * 2 ** Math.max(0, attempt - 1));
176
+ const jitter = Math.random() * baseDelay;
177
+ await new Promise(resolve => setTimeout(resolve, jitter));
178
+ }
179
+ noteProviderFailure(provider, error) {
180
+ if (provider === apis_js_1.GeoAPIs.IPAPI_DOT_CO && this.isDnsError(error)) {
181
+ this.unavailableProviders.add(provider);
182
+ }
183
+ }
184
+ isDnsError(error) {
185
+ if (!error || typeof error !== "object") {
186
+ return false;
187
+ }
188
+ const maybeError = error;
189
+ const code = maybeError.code ?? maybeError.cause?.code;
190
+ return code === "ENOTFOUND" || code === "EAI_AGAIN" || code === "ENODATA";
191
+ }
192
+ parseNumber(value) {
193
+ if (typeof value === "number" && Number.isFinite(value)) {
194
+ return value;
195
+ }
196
+ if (typeof value === "string") {
197
+ const trimmed = value.trim();
198
+ if (trimmed !== "") {
199
+ const parsed = Number.parseFloat(trimmed);
200
+ if (Number.isFinite(parsed)) {
201
+ return parsed;
202
+ }
203
+ }
80
204
  }
81
- // Return the response
82
- return response ? response : undefined;
205
+ return undefined;
83
206
  }
84
- selectRandomAPI() {
85
- // Get a random entry from the enum
86
- const randomEntry = Object.entries(apis_js_1.GeoAPIs)[Math.floor(Math.random() * Object.entries(apis_js_1.GeoAPIs).length)];
87
- // Return the random entry
88
- return randomEntry[1];
207
+ parseString(value) {
208
+ if (typeof value === "string") {
209
+ const trimmed = value.trim();
210
+ return trimmed === "" ? undefined : trimmed;
211
+ }
212
+ return undefined;
213
+ }
214
+ pickString(...values) {
215
+ for (const value of values) {
216
+ const parsed = this.parseString(value);
217
+ if (parsed) {
218
+ return parsed;
219
+ }
220
+ }
221
+ return undefined;
222
+ }
223
+ pickStringOrEmpty(...values) {
224
+ return this.pickString(...values) ?? "";
225
+ }
226
+ normalizeContinentCode(continentName) {
227
+ const name = this.parseString(continentName)?.toLowerCase();
228
+ if (!name) {
229
+ return undefined;
230
+ }
231
+ switch (name) {
232
+ case "north america":
233
+ return "NA";
234
+ case "south america":
235
+ return "SA";
236
+ case "europe":
237
+ return "EU";
238
+ case "africa":
239
+ return "AF";
240
+ case "asia":
241
+ return "AS";
242
+ case "oceania":
243
+ return "OC";
244
+ case "antarctica":
245
+ return "AN";
246
+ default:
247
+ return undefined;
248
+ }
89
249
  }
90
250
  cacheResponse(ip, response) {
91
251
  this.cache.set(ip, response);
92
252
  }
93
253
  async fetchIPHyphenAPIDotCom(ip) {
94
- const requestURL = apis_js_1.GeoAPIs.IP_HYPHEN_API_DOT_COM + ip + "?fields=24899583";
95
- const response = await axios_1.default.get(requestURL);
254
+ const baseURL = this.ipApiKey
255
+ ? "https://pro.ip-api.com/json/"
256
+ : apis_js_1.GeoAPIs.IP_HYPHEN_API_DOT_COM;
257
+ const requestURL = baseURL +
258
+ ip +
259
+ "?fields=24899583" +
260
+ (this.ipApiKey ? `&key=${encodeURIComponent(this.ipApiKey)}` : "");
261
+ const response = await this.http.get(requestURL);
96
262
  if (response.data.status === "success") {
263
+ const zip = typeof response.data.zip === "string" && response.data.zip !== ""
264
+ ? response.data.zip
265
+ : undefined;
266
+ const isp = typeof response.data.isp === "string" && response.data.isp !== ""
267
+ ? response.data.isp
268
+ : undefined;
269
+ const proxy = typeof response.data.proxy === "boolean"
270
+ ? response.data.proxy
271
+ : undefined;
272
+ const isHosting = typeof response.data.hosting === "boolean"
273
+ ? response.data.hosting
274
+ : undefined;
275
+ const timeZone = typeof response.data.timezone === "string"
276
+ ? response.data.timezone
277
+ : undefined;
97
278
  const formattedResponse = {
98
279
  ip: response.data.query,
99
280
  country: response.data.countryCode,
@@ -101,11 +282,11 @@ class IPDox {
101
282
  continent: response.data.continentCode,
102
283
  latitude: response.data.lat,
103
284
  longitude: response.data.lon,
104
- zip: response.data.zip,
105
- isp: response.data.isp,
106
- proxy: response.data.proxy,
107
- isHosting: response.data.hosting,
108
- timeZone: response.data.timezone,
285
+ zip,
286
+ isp,
287
+ proxy,
288
+ isHosting,
289
+ timeZone,
109
290
  source: "ip-api.com"
110
291
  };
111
292
  this.cacheResponse(ip, formattedResponse);
@@ -117,8 +298,25 @@ class IPDox {
117
298
  }
118
299
  async fetchFreeIPAPIDotCom(ip) {
119
300
  const requestURL = apis_js_1.GeoAPIs.FREE_IP_API_DOT_COM + ip;
120
- const response = await axios_1.default.get(requestURL);
121
- if (response.data.ipVersion === 4) {
301
+ const response = await this.http.get(requestURL);
302
+ if (response.data.ipVersion === 4 || response.data.ipVersion === 6) {
303
+ const zip = typeof response.data.zipCode === "string" &&
304
+ response.data.zipCode !== ""
305
+ ? response.data.zipCode
306
+ : undefined;
307
+ const isp = typeof response.data.isp === "string" && response.data.isp !== ""
308
+ ? response.data.isp
309
+ : undefined;
310
+ const proxy = typeof response.data.proxy === "boolean"
311
+ ? response.data.proxy
312
+ : undefined;
313
+ const isHosting = typeof response.data.hosting === "boolean"
314
+ ? response.data.hosting
315
+ : undefined;
316
+ const timeZone = Array.isArray(response.data.timeZones) &&
317
+ typeof response.data.timeZones[0] === "string"
318
+ ? response.data.timeZones[0]
319
+ : undefined;
122
320
  const formattedResponse = {
123
321
  ip: response.data.ipAddress,
124
322
  country: response.data.countryCode,
@@ -126,11 +324,11 @@ class IPDox {
126
324
  continent: response.data.continentCode,
127
325
  latitude: response.data.latitude,
128
326
  longitude: response.data.longitude,
129
- zip: response.data.zipCode,
130
- isp: response.data.isp,
131
- proxy: response.data.proxy,
132
- isHosting: response.data.hosting,
133
- timeZone: response.data.timeZones[0],
327
+ zip,
328
+ isp,
329
+ proxy,
330
+ isHosting,
331
+ timeZone,
134
332
  source: "freeipapi.com"
135
333
  };
136
334
  this.cacheResponse(ip, formattedResponse);
@@ -142,8 +340,27 @@ class IPDox {
142
340
  }
143
341
  async fetchIPWhoDotIs(ip) {
144
342
  const requestURL = apis_js_1.GeoAPIs.IPWHO_DOT_IS + ip;
145
- const response = await axios_1.default.get(requestURL);
343
+ const response = await this.http.get(requestURL);
146
344
  if (response.data.success) {
345
+ const zip = typeof response.data.postal === "string" &&
346
+ response.data.postal !== ""
347
+ ? response.data.postal
348
+ : undefined;
349
+ const isp = typeof response.data.connection?.isp === "string" &&
350
+ response.data.connection.isp !== ""
351
+ ? response.data.connection.isp
352
+ : undefined;
353
+ const proxy = typeof response.data.proxy === "boolean"
354
+ ? response.data.proxy
355
+ : undefined;
356
+ const isHosting = typeof response.data.hosting === "boolean"
357
+ ? response.data.hosting
358
+ : undefined;
359
+ const timeZone = typeof response.data.timezone?.id === "string"
360
+ ? response.data.timezone.id
361
+ : typeof response.data.timezone === "string"
362
+ ? response.data.timezone
363
+ : undefined;
147
364
  const formattedResponse = {
148
365
  ip: response.data.ip,
149
366
  country: response.data.country_code,
@@ -151,11 +368,11 @@ class IPDox {
151
368
  continent: response.data.continent_code,
152
369
  latitude: response.data.latitude,
153
370
  longitude: response.data.longitude,
154
- zip: response.data.postal,
155
- isp: response.data.connection.isp,
156
- proxy: false,
157
- isHosting: false,
158
- timeZone: response.data.timezone.id,
371
+ zip,
372
+ isp,
373
+ proxy,
374
+ isHosting,
375
+ timeZone,
159
376
  source: "ipwho.is"
160
377
  };
161
378
  this.cacheResponse(ip, formattedResponse);
@@ -167,8 +384,18 @@ class IPDox {
167
384
  }
168
385
  async fetchIPAPIDotCo(ip) {
169
386
  const requestURL = apis_js_1.GeoAPIs.IPAPI_DOT_CO + ip + "/json";
170
- const response = await axios_1.default.get(requestURL);
387
+ const response = await this.http.get(requestURL);
171
388
  if (response.data.ip) {
389
+ const zip = typeof response.data.postal === "string" &&
390
+ response.data.postal !== ""
391
+ ? response.data.postal
392
+ : undefined;
393
+ const isp = typeof response.data.org === "string" && response.data.org !== ""
394
+ ? response.data.org
395
+ : undefined;
396
+ const timeZone = typeof response.data.timezone === "string"
397
+ ? response.data.timezone
398
+ : undefined;
172
399
  const formattedResponse = {
173
400
  ip: response.data.ip,
174
401
  country: response.data.country_code,
@@ -176,9 +403,9 @@ class IPDox {
176
403
  continent: response.data.continent_code,
177
404
  latitude: response.data.latitude,
178
405
  longitude: response.data.longitude,
179
- zip: response.data.postal,
180
- isp: response.data.org,
181
- timeZone: response.data.timezone,
406
+ zip,
407
+ isp,
408
+ timeZone,
182
409
  source: "ipapi.co"
183
410
  };
184
411
  this.cacheResponse(ip, formattedResponse);
@@ -188,6 +415,116 @@ class IPDox {
188
415
  return Promise.reject();
189
416
  }
190
417
  }
418
+ async fetchGeoIPVuizDotNet(ip) {
419
+ const requestURL = apis_js_1.GeoAPIs.GEOIP_VUIZ_DOT_NET + "?ip=" + encodeURIComponent(ip);
420
+ const response = await this.http.get(requestURL);
421
+ const data = response.data;
422
+ const responseIP = this.parseString(data?.ip) ?? ip;
423
+ const country = this.pickString(data?.country_code, data?.countryCode);
424
+ const city = this.pickStringOrEmpty(data?.city, data?.region, data?.country, data?.country_name);
425
+ const continent = this.pickString(data?.continent_code, data?.continentCode) ??
426
+ this.normalizeContinentCode(data?.continent);
427
+ const latitude = this.parseNumber(data?.latitude ?? data?.lat);
428
+ const longitude = this.parseNumber(data?.longitude ?? data?.lon);
429
+ if (responseIP &&
430
+ country &&
431
+ continent &&
432
+ latitude !== undefined &&
433
+ longitude !== undefined) {
434
+ const zip = this.pickString(data?.postal_code, data?.zip);
435
+ const isp = this.pickString(data?.isp, data?.organization, data?.asn_organization);
436
+ const timeZone = this.pickString(data?.timezone);
437
+ const formattedResponse = {
438
+ ip: responseIP,
439
+ country,
440
+ city,
441
+ continent,
442
+ latitude,
443
+ longitude,
444
+ zip,
445
+ isp,
446
+ timeZone,
447
+ source: "geoip.vuiz.net"
448
+ };
449
+ this.cacheResponse(ip, formattedResponse);
450
+ return Promise.resolve(formattedResponse);
451
+ }
452
+ return Promise.reject();
453
+ }
454
+ async fetchAPIPDotCC(ip) {
455
+ const requestURL = apis_js_1.GeoAPIs.APIP_DOT_CC + encodeURIComponent(ip);
456
+ const response = await this.http.get(requestURL);
457
+ const data = response.data;
458
+ if (data?.status && data.status !== "success") {
459
+ return Promise.reject();
460
+ }
461
+ const responseIP = this.parseString(data?.ip) ?? ip;
462
+ const country = this.parseString(data?.CountryCode);
463
+ const city = this.pickStringOrEmpty(data?.City, data?.RegionName, data?.CountryName);
464
+ const continent = this.parseString(data?.ContinentCode) ??
465
+ this.normalizeContinentCode(data?.ContinentName);
466
+ const latitude = this.parseNumber(data?.Latitude);
467
+ const longitude = this.parseNumber(data?.Longitude);
468
+ if (responseIP &&
469
+ country &&
470
+ continent &&
471
+ latitude !== undefined &&
472
+ longitude !== undefined) {
473
+ const zip = this.parseString(data?.Postal);
474
+ const isp = this.parseString(data?.org) ||
475
+ this.parseString(data?.Org) ||
476
+ this.parseString(data?.ISP);
477
+ const timeZone = this.parseString(data?.TimeZone);
478
+ const formattedResponse = {
479
+ ip: responseIP,
480
+ country,
481
+ city,
482
+ continent,
483
+ latitude,
484
+ longitude,
485
+ zip,
486
+ isp,
487
+ timeZone,
488
+ source: "apip.cc"
489
+ };
490
+ this.cacheResponse(ip, formattedResponse);
491
+ return Promise.resolve(formattedResponse);
492
+ }
493
+ return Promise.reject();
494
+ }
495
+ async fetchIPSonarDotCom(ip) {
496
+ const requestURL = apis_js_1.GeoAPIs.IP_SONAR_DOT_COM + encodeURIComponent(ip);
497
+ const response = await this.http.get(requestURL);
498
+ const data = response.data;
499
+ const responseIP = this.parseString(data?.ip) ?? ip;
500
+ const country = this.parseString(data?.country_code);
501
+ const city = this.pickStringOrEmpty(data?.city_name, data?.region_name, data?.country_name);
502
+ const continent = this.parseString(data?.continent_code);
503
+ const latitude = this.parseNumber(data?.latitude);
504
+ const longitude = this.parseNumber(data?.longitude);
505
+ if (responseIP &&
506
+ country &&
507
+ continent &&
508
+ latitude !== undefined &&
509
+ longitude !== undefined) {
510
+ const zip = this.parseString(data?.postal_code);
511
+ const timeZone = this.parseString(data?.timezone);
512
+ const formattedResponse = {
513
+ ip: responseIP,
514
+ country,
515
+ city,
516
+ continent,
517
+ latitude,
518
+ longitude,
519
+ zip,
520
+ timeZone,
521
+ source: "ip-sonar.com"
522
+ };
523
+ this.cacheResponse(ip, formattedResponse);
524
+ return Promise.resolve(formattedResponse);
525
+ }
526
+ return Promise.reject();
527
+ }
191
528
  }
192
529
  exports.default = IPDox;
193
530
  //# sourceMappingURL=ipdox.js.map
package/dist/ipdox.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ipdox.js","sourceRoot":"","sources":["../src/ipdox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ipdox.js","sourceRoot":"","sources":["../src/ipdox.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,14 @@
5
5
  * @property {number} cacheMaxItems The maximum number of items in the cache (default: 1000)
6
6
  * @property {number} cacheMaxAge The cache timeout in milliseconds (default: 43200000 (12 hours))
7
7
  * @property {number} maxRetries The maximum number of retries (default: 10)
8
+ * @property {number} requestTimeoutMs Request timeout in milliseconds (default: 5000)
9
+ * @property {string} ipApiKey Optional ip-api.com pro API key for HTTPS
8
10
  */
9
11
  export interface IPDOXConstructor {
10
12
  cacheMaxItems?: number;
11
13
  cacheMaxAge?: number;
12
14
  maxRetries?: number;
15
+ requestTimeoutMs?: number;
16
+ ipApiKey?: string;
13
17
  }
14
18
  //# sourceMappingURL=IPDOXConstructor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IPDOXConstructor.d.ts","sourceRoot":"","sources":["../../src/types/IPDOXConstructor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"IPDOXConstructor.d.ts","sourceRoot":"","sources":["../../src/types/IPDOXConstructor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -8,8 +8,8 @@
8
8
  * @property {string} continent The continent (ISO 3166)
9
9
  * @property {number} latitude The latitude
10
10
  * @property {number} longitude The longitude
11
- * @property {string} zip The ZIP code
12
- * @property {string} isp The ISP (Internet Service Provider)
11
+ * @property {string} zip The ZIP code (might be undefined)
12
+ * @property {string} isp The ISP (Internet Service Provider) (might be undefined)
13
13
  * @property {boolean} proxy Is the IP address a proxy?
14
14
  * @property {boolean} isHosting Is the IP address a hosting provider?
15
15
  * @property {object} proxyInfo Information about the proxy
@@ -26,8 +26,8 @@ export interface IPDOXResponse {
26
26
  continent: string;
27
27
  latitude: number;
28
28
  longitude: number;
29
- zip: string;
30
- isp: string;
29
+ zip?: string;
30
+ isp?: string;
31
31
  proxy?: boolean;
32
32
  isHosting?: boolean;
33
33
  proxyInfo?: {
@@ -1 +1 @@
1
- {"version":3,"file":"IPDOXResponse.d.ts","sourceRoot":"","sources":["../../src/types/IPDOXResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE;QACX,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"IPDOXResponse.d.ts","sourceRoot":"","sources":["../../src/types/IPDOXResponse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE;QACX,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf"}
@@ -2,6 +2,9 @@ export declare enum GeoAPIs {
2
2
  IP_HYPHEN_API_DOT_COM = "http://ip-api.com/json/",
3
3
  FREE_IP_API_DOT_COM = "https://freeipapi.com/api/json/",
4
4
  IPWHO_DOT_IS = "https://ipwho.is/",
5
- IPAPI_DOT_CO = "https://ipapi.co/"
5
+ IPAPI_DOT_CO = "https://ipapi.co/",
6
+ GEOIP_VUIZ_DOT_NET = "https://geoip.vuiz.net/geoip",
7
+ APIP_DOT_CC = "https://apip.cc/api-json/",
8
+ IP_SONAR_DOT_COM = "https://api.ip-sonar.com/v1/"
6
9
  }
7
10
  //# sourceMappingURL=apis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apis.d.ts","sourceRoot":"","sources":["../../src/utils/apis.ts"],"names":[],"mappings":"AAAA,oBAAY,OAAO;IAClB,qBAAqB,4BAA4B;IACjD,mBAAmB,oCAAoC;IACvD,YAAY,sBAAsB;IAClC,YAAY,sBAAsB;CAClC"}
1
+ {"version":3,"file":"apis.d.ts","sourceRoot":"","sources":["../../src/utils/apis.ts"],"names":[],"mappings":"AAAA,oBAAY,OAAO;IAClB,qBAAqB,4BAA4B;IACjD,mBAAmB,oCAAoC;IACvD,YAAY,sBAAsB;IAClC,YAAY,sBAAsB;IAClC,kBAAkB,iCAAiC;IACnD,WAAW,8BAA8B;IACzC,gBAAgB,iCAAiC;CACjD"}
@@ -7,5 +7,8 @@ var GeoAPIs;
7
7
  GeoAPIs["FREE_IP_API_DOT_COM"] = "https://freeipapi.com/api/json/";
8
8
  GeoAPIs["IPWHO_DOT_IS"] = "https://ipwho.is/";
9
9
  GeoAPIs["IPAPI_DOT_CO"] = "https://ipapi.co/";
10
+ GeoAPIs["GEOIP_VUIZ_DOT_NET"] = "https://geoip.vuiz.net/geoip";
11
+ GeoAPIs["APIP_DOT_CC"] = "https://apip.cc/api-json/";
12
+ GeoAPIs["IP_SONAR_DOT_COM"] = "https://api.ip-sonar.com/v1/";
10
13
  })(GeoAPIs || (exports.GeoAPIs = GeoAPIs = {}));
11
14
  //# sourceMappingURL=apis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apis.js","sourceRoot":"","sources":["../../src/utils/apis.ts"],"names":[],"mappings":";;;AAAA,IAAY,OAKX;AALD,WAAY,OAAO;IAClB,4DAAiD,CAAA;IACjD,kEAAuD,CAAA;IACvD,6CAAkC,CAAA;IAClC,6CAAkC,CAAA;AACnC,CAAC,EALW,OAAO,uBAAP,OAAO,QAKlB"}
1
+ {"version":3,"file":"apis.js","sourceRoot":"","sources":["../../src/utils/apis.ts"],"names":[],"mappings":";;;AAAA,IAAY,OAQX;AARD,WAAY,OAAO;IAClB,4DAAiD,CAAA;IACjD,kEAAuD,CAAA;IACvD,6CAAkC,CAAA;IAClC,6CAAkC,CAAA;IAClC,8DAAmD,CAAA;IACnD,oDAAyC,CAAA;IACzC,4DAAiD,CAAA;AAClD,CAAC,EARW,OAAO,uBAAP,OAAO,QAQlB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-ipdox",
3
- "version": "1.0.6",
3
+ "version": "1.1.0",
4
4
  "description": "node-ipdox is a Node.js library for GeoIP lookup, leveraging various free GeoIP APIs. It provides a unified response format and incorporates local caching to minimize duplicate requests.",
5
5
  "author": "Mikel Calvo <contact@mikecalvo.net> (www.mikelcalvo.net)",
6
6
  "keywords": [
@@ -15,10 +15,21 @@
15
15
  "license": "ISC",
16
16
  "readmeFilename": "README.md",
17
17
  "homepage": "https://github.com/MikelCalvo/ipdox#readme",
18
- "bugs": { "url": "https://github.com/MikelCalvo/ipdox/issues" },
18
+ "bugs": {
19
+ "url": "https://github.com/MikelCalvo/ipdox/issues"
20
+ },
19
21
  "main": "./dist/index.js",
20
22
  "types": "./dist/index.d.ts",
21
- "files": ["dist"],
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "require": "./dist/index.js",
27
+ "import": "./dist/index.js"
28
+ }
29
+ },
30
+ "files": [
31
+ "dist"
32
+ ],
22
33
  "scripts": {
23
34
  "test": "vitest run",
24
35
  "test:watch": "vitest",
@@ -34,11 +45,14 @@
34
45
  "access": "public",
35
46
  "provenance": true
36
47
  },
37
- "dependencies": { "axios": "1.13.2", "lru-cache": "^11.2.4" },
48
+ "dependencies": {
49
+ "axios": "1.13.4",
50
+ "lru-cache": "^11.2.5"
51
+ },
38
52
  "devDependencies": {
39
- "@types/node": "25.0.2",
40
- "prettier": "3.7.4",
53
+ "@types/node": "25.2.1",
54
+ "prettier": "3.8.1",
41
55
  "typescript": "^5.9.3",
42
- "vitest": "4.0.15"
56
+ "vitest": "4.0.18"
43
57
  }
44
58
  }