node-ipdox 1.0.4 → 1.0.6

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
@@ -69,7 +69,7 @@ export interface IPDOXResponse {
69
69
  isTOR: boolean; // Boolean indicating if the IP address is a TOR node (might be undefined)
70
70
  isProxy: boolean; // Boolean indicating if the IP address is a proxy (might be undefined)
71
71
  };
72
- timeZone: string; // Time zone
72
+ timeZone?: string; // Time zone
73
73
  source: string; // Source API
74
74
  }
75
75
  ```
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import _IPDox from "./ipdox";
1
+ import _IPDox from "./ipdox.js";
2
2
  /**
3
3
  * Main Class
4
4
  */
@@ -6,12 +6,13 @@ export declare const IPDox: typeof _IPDox;
6
6
  /**
7
7
  * Constructor type
8
8
  */
9
- export { IPDOXConstructor } from "./types/IPDOXConstructor";
9
+ export type { IPDOXConstructor } from "./types/IPDOXConstructor.js";
10
10
  /**
11
11
  * Params type
12
12
  */
13
- export { IPDOXRequest } from "./types/IPDOXRequest";
13
+ export type { IPDOXRequest } from "./types/IPDOXRequest.js";
14
14
  /**
15
15
  * Response type
16
16
  */
17
- export { IPDOXResponse } from "./types/IPDOXResponse";
17
+ export type { IPDOXResponse } from "./types/IPDOXResponse.js";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,YAAY,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,KAAK,eAAS,CAAC;AAE5B;;GAEG;AACH,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE;;GAEG;AACH,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;GAEG;AACH,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -4,8 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.IPDox = void 0;
7
- const ipdox_1 = __importDefault(require("./ipdox"));
7
+ const ipdox_js_1 = __importDefault(require("./ipdox.js"));
8
8
  /**
9
9
  * Main Class
10
10
  */
11
- exports.IPDox = ipdox_1.default;
11
+ exports.IPDox = ipdox_js_1.default;
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAgC;AAEhC;;GAEG;AACU,QAAA,KAAK,GAAG,kBAAM,CAAC"}
package/dist/ipdox.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { IPDOXRequest } from "./types/IPDOXRequest";
2
- import { IPDOXResponse } from "./types/IPDOXResponse";
3
- import { IPDOXConstructor } from "./types/IPDOXConstructor";
1
+ import { IPDOXRequest } from "./types/IPDOXRequest.js";
2
+ import { IPDOXResponse } from "./types/IPDOXResponse.js";
3
+ import { IPDOXConstructor } from "./types/IPDOXConstructor.js";
4
4
  declare class IPDox {
5
5
  private cache;
6
6
  private maxRetries;
@@ -28,3 +28,4 @@ declare class IPDox {
28
28
  private fetchIPAPIDotCo;
29
29
  }
30
30
  export default IPDox;
31
+ //# sourceMappingURL=ipdox.d.ts.map
@@ -0,0 +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"}
package/dist/ipdox.js CHANGED
@@ -1,21 +1,14 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
14
5
  Object.defineProperty(exports, "__esModule", { value: true });
15
6
  const axios_1 = __importDefault(require("axios"));
16
- const apis_1 = require("./utils/apis");
7
+ const apis_js_1 = require("./utils/apis.js");
17
8
  const lru_cache_1 = require("lru-cache");
18
9
  class IPDox {
10
+ cache;
11
+ maxRetries;
19
12
  /**
20
13
  * @description Creates an instance of IPDox.
21
14
  * @param {IPDOXConstructor} params
@@ -41,169 +34,160 @@ class IPDox {
41
34
  * @returns {Promise<IPDOXResponse | undefined>} - Promise of the response or undefined
42
35
  * @memberof IPDox
43
36
  */
44
- doxIP(_a) {
45
- return __awaiter(this, arguments, void 0, function* ({ ip }) {
46
- // Check that the ip is valid
47
- if (!ip || ip === "") {
48
- return undefined;
37
+ async doxIP({ ip }) {
38
+ // Check that the ip is valid
39
+ if (!ip || ip === "") {
40
+ return undefined;
41
+ }
42
+ // 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;
49
47
  }
50
- // Check if the IP is already in the cache
51
- if (this.cache.has(ip)) {
52
- const cachedResponse = this.cache.get(ip);
53
- if (cachedResponse) {
54
- return cachedResponse;
48
+ }
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;
55
69
  }
56
70
  }
57
- // Select a random API
58
- let randomAPI = this.selectRandomAPI();
59
- let response = null;
60
- let retries = 0;
61
- // Fetch data from the API
62
- while (!response && retries < this.maxRetries) {
63
- try {
64
- switch (randomAPI) {
65
- case apis_1.GeoAPIs.IP_HYPHEN_API_DOT_COM:
66
- response = yield this.fetchIPHyphenAPIDotCom(ip);
67
- break;
68
- case apis_1.GeoAPIs.FREE_IP_API_DOT_COM:
69
- response = yield this.fetchFreeIPAPIDotCom(ip);
70
- break;
71
- case apis_1.GeoAPIs.IPWHO_DOT_IS:
72
- response = yield this.fetchIPWhoDotIs(ip);
73
- break;
74
- case apis_1.GeoAPIs.IPAPI_DOT_CO:
75
- response = yield this.fetchIPAPIDotCo(ip);
76
- break;
77
- }
78
- }
79
- catch (error) {
80
- // If the promise is rejected, select another random API and try again
81
- randomAPI = this.selectRandomAPI();
82
- retries++;
83
- }
71
+ catch (error) {
72
+ // If the promise is rejected, select another random API and try again
73
+ randomAPI = this.selectRandomAPI();
74
+ retries++;
84
75
  }
85
- // If max retries reached and no response, return undefined
86
- if (retries === this.maxRetries && !response) {
87
- return undefined;
88
- }
89
- // Return the response
90
- return response ? response : undefined;
91
- });
76
+ }
77
+ // If max retries reached and no response, return undefined
78
+ if (retries === this.maxRetries && !response) {
79
+ return undefined;
80
+ }
81
+ // Return the response
82
+ return response ? response : undefined;
92
83
  }
93
84
  selectRandomAPI() {
94
85
  // Get a random entry from the enum
95
- const randomEntry = Object.entries(apis_1.GeoAPIs)[Math.floor(Math.random() * Object.entries(apis_1.GeoAPIs).length)];
86
+ const randomEntry = Object.entries(apis_js_1.GeoAPIs)[Math.floor(Math.random() * Object.entries(apis_js_1.GeoAPIs).length)];
96
87
  // Return the random entry
97
88
  return randomEntry[1];
98
89
  }
99
90
  cacheResponse(ip, response) {
100
91
  this.cache.set(ip, response);
101
92
  }
102
- fetchIPHyphenAPIDotCom(ip) {
103
- return __awaiter(this, void 0, void 0, function* () {
104
- const requestURL = apis_1.GeoAPIs.IP_HYPHEN_API_DOT_COM + ip + "?fields=24899583";
105
- const response = yield axios_1.default.get(requestURL);
106
- if (response.data.status === "success") {
107
- const formattedResponse = {
108
- ip: response.data.query,
109
- country: response.data.countryCode,
110
- city: response.data.city,
111
- continent: response.data.continentCode,
112
- latitude: response.data.lat,
113
- longitude: response.data.lon,
114
- zip: response.data.zip,
115
- isp: response.data.isp,
116
- proxy: response.data.proxy,
117
- isHosting: response.data.hosting,
118
- timeZone: response.data.timezone,
119
- source: "ip-api.com"
120
- };
121
- this.cacheResponse(ip, formattedResponse);
122
- return Promise.resolve(formattedResponse);
123
- }
124
- else {
125
- return Promise.reject();
126
- }
127
- });
93
+ 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);
96
+ if (response.data.status === "success") {
97
+ const formattedResponse = {
98
+ ip: response.data.query,
99
+ country: response.data.countryCode,
100
+ city: response.data.city,
101
+ continent: response.data.continentCode,
102
+ latitude: response.data.lat,
103
+ 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,
109
+ source: "ip-api.com"
110
+ };
111
+ this.cacheResponse(ip, formattedResponse);
112
+ return Promise.resolve(formattedResponse);
113
+ }
114
+ else {
115
+ return Promise.reject();
116
+ }
128
117
  }
129
- fetchFreeIPAPIDotCom(ip) {
130
- return __awaiter(this, void 0, void 0, function* () {
131
- const requestURL = apis_1.GeoAPIs.FREE_IP_API_DOT_COM + ip;
132
- const response = yield axios_1.default.get(requestURL);
133
- if (response.data.ipVersion === 4) {
134
- const formattedResponse = {
135
- ip: response.data.ipAddress,
136
- country: response.data.countryCode,
137
- city: response.data.cityName,
138
- continent: response.data.continentCode,
139
- latitude: response.data.latitude,
140
- longitude: response.data.longitude,
141
- zip: response.data.zipCode,
142
- isp: response.data.isp,
143
- proxy: response.data.proxy,
144
- isHosting: response.data.hosting,
145
- timeZone: response.data.timeZones[0],
146
- source: "freeipapi.com"
147
- };
148
- this.cacheResponse(ip, formattedResponse);
149
- return Promise.resolve(formattedResponse);
150
- }
151
- else {
152
- return Promise.reject();
153
- }
154
- });
118
+ async fetchFreeIPAPIDotCom(ip) {
119
+ 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) {
122
+ const formattedResponse = {
123
+ ip: response.data.ipAddress,
124
+ country: response.data.countryCode,
125
+ city: response.data.cityName,
126
+ continent: response.data.continentCode,
127
+ latitude: response.data.latitude,
128
+ 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],
134
+ source: "freeipapi.com"
135
+ };
136
+ this.cacheResponse(ip, formattedResponse);
137
+ return Promise.resolve(formattedResponse);
138
+ }
139
+ else {
140
+ return Promise.reject();
141
+ }
155
142
  }
156
- fetchIPWhoDotIs(ip) {
157
- return __awaiter(this, void 0, void 0, function* () {
158
- const requestURL = apis_1.GeoAPIs.IPWHO_DOT_IS + ip;
159
- const response = yield axios_1.default.get(requestURL);
160
- if (response.data.success) {
161
- const formattedResponse = {
162
- ip: response.data.ip,
163
- country: response.data.country_code,
164
- city: response.data.city,
165
- continent: response.data.continent_code,
166
- latitude: response.data.latitude,
167
- longitude: response.data.longitude,
168
- zip: response.data.postal,
169
- isp: response.data.connection.isp,
170
- proxy: false,
171
- isHosting: false,
172
- timeZone: response.data.timezone.id,
173
- source: "ipwho.is"
174
- };
175
- this.cacheResponse(ip, formattedResponse);
176
- return Promise.resolve(formattedResponse);
177
- }
178
- else {
179
- return Promise.reject();
180
- }
181
- });
143
+ async fetchIPWhoDotIs(ip) {
144
+ const requestURL = apis_js_1.GeoAPIs.IPWHO_DOT_IS + ip;
145
+ const response = await axios_1.default.get(requestURL);
146
+ if (response.data.success) {
147
+ const formattedResponse = {
148
+ ip: response.data.ip,
149
+ country: response.data.country_code,
150
+ city: response.data.city,
151
+ continent: response.data.continent_code,
152
+ latitude: response.data.latitude,
153
+ 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,
159
+ source: "ipwho.is"
160
+ };
161
+ this.cacheResponse(ip, formattedResponse);
162
+ return Promise.resolve(formattedResponse);
163
+ }
164
+ else {
165
+ return Promise.reject();
166
+ }
182
167
  }
183
- fetchIPAPIDotCo(ip) {
184
- return __awaiter(this, void 0, void 0, function* () {
185
- const requestURL = apis_1.GeoAPIs.IPAPI_DOT_CO + ip + "/json";
186
- const response = yield axios_1.default.get(requestURL);
187
- if (response.data.ip) {
188
- const formattedResponse = {
189
- ip: response.data.ip,
190
- country: response.data.country_code,
191
- city: response.data.city,
192
- continent: response.data.continent_code,
193
- latitude: response.data.latitude,
194
- longitude: response.data.longitude,
195
- zip: response.data.postal,
196
- isp: response.data.org,
197
- timeZone: response.data.timezone,
198
- source: "ipapi.co"
199
- };
200
- this.cacheResponse(ip, formattedResponse);
201
- return Promise.resolve(formattedResponse);
202
- }
203
- else {
204
- return Promise.reject();
205
- }
206
- });
168
+ async fetchIPAPIDotCo(ip) {
169
+ const requestURL = apis_js_1.GeoAPIs.IPAPI_DOT_CO + ip + "/json";
170
+ const response = await axios_1.default.get(requestURL);
171
+ if (response.data.ip) {
172
+ const formattedResponse = {
173
+ ip: response.data.ip,
174
+ country: response.data.country_code,
175
+ city: response.data.city,
176
+ continent: response.data.continent_code,
177
+ latitude: response.data.latitude,
178
+ longitude: response.data.longitude,
179
+ zip: response.data.postal,
180
+ isp: response.data.org,
181
+ timeZone: response.data.timezone,
182
+ source: "ipapi.co"
183
+ };
184
+ this.cacheResponse(ip, formattedResponse);
185
+ return Promise.resolve(formattedResponse);
186
+ }
187
+ else {
188
+ return Promise.reject();
189
+ }
207
190
  }
208
191
  }
209
192
  exports.default = IPDox;
193
+ //# sourceMappingURL=ipdox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipdox.js","sourceRoot":"","sources":["../src/ipdox.ts"],"names":[],"mappings":"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"}
@@ -11,3 +11,4 @@ export interface IPDOXConstructor {
11
11
  cacheMaxAge?: number;
12
12
  maxRetries?: number;
13
13
  }
14
+ //# sourceMappingURL=IPDOXConstructor.d.ts.map
@@ -0,0 +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,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IPDOXConstructor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IPDOXConstructor.js","sourceRoot":"","sources":["../../src/types/IPDOXConstructor.ts"],"names":[],"mappings":""}
@@ -7,3 +7,4 @@
7
7
  export interface IPDOXRequest {
8
8
  ip: string;
9
9
  }
10
+ //# sourceMappingURL=IPDOXRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IPDOXRequest.d.ts","sourceRoot":"","sources":["../../src/types/IPDOXRequest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;CACX"}
@@ -1,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IPDOXRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IPDOXRequest.js","sourceRoot":"","sources":["../../src/types/IPDOXRequest.ts"],"names":[],"mappings":""}
@@ -38,3 +38,4 @@ export interface IPDOXResponse {
38
38
  timeZone?: string;
39
39
  source: string;
40
40
  }
41
+ //# sourceMappingURL=IPDOXResponse.d.ts.map
@@ -0,0 +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,2 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IPDOXResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IPDOXResponse.js","sourceRoot":"","sources":["../../src/types/IPDOXResponse.ts"],"names":[],"mappings":""}
@@ -4,3 +4,4 @@ export declare enum GeoAPIs {
4
4
  IPWHO_DOT_IS = "https://ipwho.is/",
5
5
  IPAPI_DOT_CO = "https://ipapi.co/"
6
6
  }
7
+ //# sourceMappingURL=apis.d.ts.map
@@ -0,0 +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"}
@@ -8,3 +8,4 @@ var GeoAPIs;
8
8
  GeoAPIs["IPWHO_DOT_IS"] = "https://ipwho.is/";
9
9
  GeoAPIs["IPAPI_DOT_CO"] = "https://ipapi.co/";
10
10
  })(GeoAPIs || (exports.GeoAPIs = GeoAPIs = {}));
11
+ //# sourceMappingURL=apis.js.map
@@ -0,0 +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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-ipdox",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
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": [
@@ -14,29 +14,31 @@
14
14
  ],
15
15
  "license": "ISC",
16
16
  "readmeFilename": "README.md",
17
- "homepage": "https://github.com/mikelcalvo/ipdox#readme",
18
- "bugs": {
19
- "url": "https://github.com/mikelcalvo/ipdox/issues"
20
- },
17
+ "homepage": "https://github.com/MikelCalvo/ipdox#readme",
18
+ "bugs": { "url": "https://github.com/MikelCalvo/ipdox/issues" },
21
19
  "main": "./dist/index.js",
22
20
  "types": "./dist/index.d.ts",
23
21
  "files": ["dist"],
24
22
  "scripts": {
25
- "test": "echo \"Error: no test specified\" && exit 1",
26
- "format": "prettier --write \"**/*.ts\" \"**/*.js\" \"**/*.json\"",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest",
25
+ "test:integration": "RUN_INTEGRATION=1 vitest run src/integration/ipdox.providers.int.test.ts",
26
+ "format": "prettier --write \"**/*.ts\" \"**/*.js\" \"**/*.json\" --ignore-path .prettierignore",
27
27
  "build": "tsc"
28
28
  },
29
29
  "repository": {
30
30
  "type": "git",
31
- "url": "git+https://github.com/mikelcalvo/node-ipdox.git"
31
+ "url": "git+https://github.com/MikelCalvo/node-ipdox.git"
32
32
  },
33
- "dependencies": {
34
- "axios": "1.7.2",
35
- "lru-cache": "^10.2.2"
33
+ "publishConfig": {
34
+ "access": "public",
35
+ "provenance": true
36
36
  },
37
+ "dependencies": { "axios": "1.13.2", "lru-cache": "^11.2.4" },
37
38
  "devDependencies": {
38
- "@types/node": "20.14.2",
39
- "prettier": "3.3.2",
40
- "typescript": "^5.4.5"
39
+ "@types/node": "25.0.2",
40
+ "prettier": "3.7.4",
41
+ "typescript": "^5.9.3",
42
+ "vitest": "4.0.15"
41
43
  }
42
44
  }