@prosopo/provider 4.15.14 → 4.15.15

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.
Files changed (232) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +106 -106
  2. package/.turbo/turbo-build$colon$tsc.log +24 -24
  3. package/.turbo/turbo-build.log +107 -104
  4. package/CHANGELOG.md +49 -0
  5. package/dist/_virtual/_rolldown/runtime.js +3 -0
  6. package/dist/api/admin/apiAdminRoutesProvider.js +27 -46
  7. package/dist/api/admin/apiClearAllCountersEndpoint.js +62 -57
  8. package/dist/api/admin/apiDnsEventEndpoint.js +79 -92
  9. package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.js +43 -45
  10. package/dist/api/admin/apiGetDecisionMachineEndpoint.js +40 -40
  11. package/dist/api/admin/apiRegisterSiteKeyEndpoint.js +23 -22
  12. package/dist/api/admin/apiRegisterSiteKeysEndpoint.js +26 -30
  13. package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js +35 -37
  14. package/dist/api/admin/apiRemoveDecisionMachineEndpoint.js +40 -40
  15. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.d.ts.map +1 -1
  16. package/dist/api/admin/apiRemoveDetectorKeyEndpoint.js +29 -31
  17. package/dist/api/admin/apiRemoveSiteKeyEndpoint.js +33 -29
  18. package/dist/api/admin/apiRemoveSiteKeysEndpoint.js +32 -31
  19. package/dist/api/admin/apiToggleMaintenanceModeEndpoint.js +43 -35
  20. package/dist/api/admin/apiUpdateDecisionMachineEndpoint.js +43 -63
  21. package/dist/api/admin/apiUpdateDetectorKeyEndpoint.js +36 -35
  22. package/dist/api/admin/createApiAdminRoutesProvider.js +6 -8
  23. package/dist/api/blacklistRequestInspector.js +285 -377
  24. package/dist/api/block.js +17 -30
  25. package/dist/api/captcha/checkSpamEmail.js +88 -98
  26. package/dist/api/captcha/contextAwareValidation.js +21 -15
  27. package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js +126 -140
  28. package/dist/api/captcha/getFrictionlessCaptchaChallenge/constants.js +11 -12
  29. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +236 -299
  30. package/dist/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.js +10 -13
  31. package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +336 -462
  32. package/dist/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.js +17 -14
  33. package/dist/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.js +27 -27
  34. package/dist/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.js +42 -63
  35. package/dist/api/captcha/getFrictionlessCaptchaChallenge.js +2 -4
  36. package/dist/api/captcha/getImageCaptchaChallenge.js +136 -207
  37. package/dist/api/captcha/getPoWCaptchaChallenge.js +128 -198
  38. package/dist/api/captcha/getPuzzleCaptchaChallenge.js +132 -201
  39. package/dist/api/captcha/maintenanceModeResponses.js +38 -47
  40. package/dist/api/captcha/submitImageCaptchaSolution.js +75 -101
  41. package/dist/api/captcha/submitPoWCaptchaSolution.js +137 -207
  42. package/dist/api/captcha/submitPuzzleCaptchaSolution.js +73 -105
  43. package/dist/api/captcha.js +76 -58
  44. package/dist/api/dnsEventUrl.js +20 -22
  45. package/dist/api/domainMiddleware.js +104 -115
  46. package/dist/api/forwardVerify.js +62 -48
  47. package/dist/api/handshakeTimingMiddleware.js +43 -62
  48. package/dist/api/hardBlockVerdictCache.js +114 -117
  49. package/dist/api/headerCheckMiddleware.js +34 -34
  50. package/dist/api/ignoreMiddleware.js +13 -15
  51. package/dist/api/ipInfoMiddleware.js +17 -19
  52. package/dist/api/ja4.js +149 -188
  53. package/dist/api/ja4Middleware.js +39 -54
  54. package/dist/api/metrics.js +245 -257
  55. package/dist/api/public.js +52 -54
  56. package/dist/api/robotsMiddleware.js +10 -10
  57. package/dist/api/startProviderApi.js +205 -232
  58. package/dist/api/testSiteKey.js +16 -16
  59. package/dist/api/validateAddress.js +23 -21
  60. package/dist/api/verify.js +334 -377
  61. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  62. package/dist/cjs/api/admin/apiAdminRoutesProvider.cjs +40 -59
  63. package/dist/cjs/api/admin/apiClearAllCountersEndpoint.cjs +63 -58
  64. package/dist/cjs/api/admin/apiDnsEventEndpoint.cjs +82 -93
  65. package/dist/cjs/api/admin/apiGetAllDecisionMachinesEndpoint.cjs +46 -48
  66. package/dist/cjs/api/admin/apiGetDecisionMachineEndpoint.cjs +41 -41
  67. package/dist/cjs/api/admin/apiRegisterSiteKeyEndpoint.cjs +25 -24
  68. package/dist/cjs/api/admin/apiRegisterSiteKeysEndpoint.cjs +28 -32
  69. package/dist/cjs/api/admin/apiRemoveAllDecisionMachinesEndpoint.cjs +38 -40
  70. package/dist/cjs/api/admin/apiRemoveDecisionMachineEndpoint.cjs +41 -41
  71. package/dist/cjs/api/admin/apiRemoveDetectorKeyEndpoint.cjs +31 -33
  72. package/dist/cjs/api/admin/apiRemoveSiteKeyEndpoint.cjs +35 -31
  73. package/dist/cjs/api/admin/apiRemoveSiteKeysEndpoint.cjs +34 -33
  74. package/dist/cjs/api/admin/apiToggleMaintenanceModeEndpoint.cjs +45 -35
  75. package/dist/cjs/api/admin/apiUpdateDecisionMachineEndpoint.cjs +45 -65
  76. package/dist/cjs/api/admin/apiUpdateDetectorKeyEndpoint.cjs +38 -37
  77. package/dist/cjs/api/admin/createApiAdminRoutesProvider.cjs +7 -8
  78. package/dist/cjs/api/blacklistRequestInspector.cjs +288 -376
  79. package/dist/cjs/api/block.cjs +18 -30
  80. package/dist/cjs/api/captcha/checkSpamEmail.cjs +90 -100
  81. package/dist/cjs/api/captcha/contextAwareValidation.cjs +21 -14
  82. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +125 -140
  83. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/constants.cjs +10 -10
  84. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +238 -301
  85. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decryptSimdReadings.cjs +9 -12
  86. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +349 -473
  87. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/honeypotResponse.cjs +18 -14
  88. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/sessionDedup.cjs +26 -26
  89. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/shortCircuit.cjs +42 -63
  90. package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge.cjs +2 -3
  91. package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +138 -208
  92. package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +131 -200
  93. package/dist/cjs/api/captcha/getPuzzleCaptchaChallenge.cjs +135 -203
  94. package/dist/cjs/api/captcha/maintenanceModeResponses.cjs +38 -44
  95. package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +77 -102
  96. package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +140 -209
  97. package/dist/cjs/api/captcha/submitPuzzleCaptchaSolution.cjs +76 -107
  98. package/dist/cjs/api/captcha.cjs +79 -58
  99. package/dist/cjs/api/dnsEventUrl.cjs +20 -21
  100. package/dist/cjs/api/domainMiddleware.cjs +106 -117
  101. package/dist/cjs/api/forwardVerify.cjs +63 -49
  102. package/dist/cjs/api/handshakeTimingMiddleware.cjs +43 -61
  103. package/dist/cjs/api/hardBlockVerdictCache.cjs +114 -114
  104. package/dist/cjs/api/headerCheckMiddleware.cjs +34 -34
  105. package/dist/cjs/api/ignoreMiddleware.cjs +12 -14
  106. package/dist/cjs/api/ipInfoMiddleware.cjs +16 -18
  107. package/dist/cjs/api/ja4.cjs +149 -187
  108. package/dist/cjs/api/ja4Middleware.cjs +40 -53
  109. package/dist/cjs/api/metrics.cjs +229 -228
  110. package/dist/cjs/api/public.cjs +57 -57
  111. package/dist/cjs/api/robotsMiddleware.cjs +9 -9
  112. package/dist/cjs/api/startProviderApi.cjs +219 -237
  113. package/dist/cjs/api/testSiteKey.cjs +15 -14
  114. package/dist/cjs/api/validateAddress.cjs +24 -21
  115. package/dist/cjs/api/verify.cjs +338 -379
  116. package/dist/cjs/compositeIpAddress.cjs +40 -47
  117. package/dist/cjs/index.cjs +65 -71
  118. package/dist/cjs/pairs.cjs +31 -35
  119. package/dist/cjs/rules/lang.cjs +10 -14
  120. package/dist/cjs/schedulers/captchaScheduler.cjs +26 -32
  121. package/dist/cjs/schedulers/getClientList.cjs +35 -33
  122. package/dist/cjs/schedulers/setClientEntropy.cjs +35 -33
  123. package/dist/cjs/schedulers/updateSpamEmailDomains.cjs +39 -43
  124. package/dist/cjs/services/ipComparison.cjs +122 -119
  125. package/dist/cjs/tasks/captchaManager.cjs +407 -486
  126. package/dist/cjs/tasks/client/clientTasks.cjs +347 -470
  127. package/dist/cjs/tasks/dataset/datasetTasks.cjs +25 -29
  128. package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +16 -32
  129. package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +220 -307
  130. package/dist/cjs/tasks/detection/decodeBehavior.cjs +408 -317
  131. package/dist/cjs/tasks/detection/decodePayload.cjs +686 -468
  132. package/dist/cjs/tasks/detection/decodeSimd.cjs +462 -304
  133. package/dist/cjs/tasks/detection/getBotScore.cjs +37 -43
  134. package/dist/cjs/tasks/dnsEvent/enrichDnsEvent.cjs +88 -71
  135. package/dist/cjs/tasks/frictionless/frictionlessTasks.cjs +348 -486
  136. package/dist/cjs/tasks/frictionless/frictionlessTasksUtils.cjs +13 -30
  137. package/dist/cjs/tasks/frictionless/routingMachine.cjs +71 -55
  138. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +555 -806
  139. package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +22 -23
  140. package/dist/cjs/tasks/index.cjs +2 -4
  141. package/dist/cjs/tasks/powCaptcha/powTasks.cjs +491 -687
  142. package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +17 -29
  143. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasks.cjs +422 -591
  144. package/dist/cjs/tasks/puzzleCaptcha/puzzleTasksUtils.cjs +8 -5
  145. package/dist/cjs/tasks/spam/checkSpamEmail.cjs +133 -141
  146. package/dist/cjs/tasks/spam/checkTrafficFilter.cjs +118 -76
  147. package/dist/cjs/tasks/spam/evaluateEmailSpamRules.cjs +75 -84
  148. package/dist/cjs/tasks/spam/updateSpamEmailDomains.cjs +40 -56
  149. package/dist/cjs/tasks/tasks.cjs +107 -158
  150. package/dist/cjs/util/usageCounters.cjs +220 -211
  151. package/dist/cjs/util.cjs +329 -359
  152. package/dist/cjs/utils/devicePlatform.cjs +14 -8
  153. package/dist/cjs/utils/dns.cjs +68 -93
  154. package/dist/cjs/utils/hashUserAgent.cjs +14 -7
  155. package/dist/cjs/utils/hashUserIp.cjs +14 -6
  156. package/dist/cjs/utils/honeypot/encoders.cjs +74 -80
  157. package/dist/cjs/utils/honeypot/phraseBank.cjs +51 -44
  158. package/dist/cjs/utils/normalizeRequestIp.cjs +33 -25
  159. package/dist/compositeIpAddress.js +38 -46
  160. package/dist/index.js +12 -56
  161. package/dist/pairs.js +31 -37
  162. package/dist/rules/lang.js +11 -15
  163. package/dist/schedulers/captchaScheduler.js +25 -31
  164. package/dist/schedulers/getClientList.js +34 -32
  165. package/dist/schedulers/setClientEntropy.js +34 -32
  166. package/dist/schedulers/updateSpamEmailDomains.js +38 -42
  167. package/dist/services/ipComparison.js +122 -119
  168. package/dist/tasks/captchaManager.js +403 -483
  169. package/dist/tasks/client/clientTasks.js +343 -467
  170. package/dist/tasks/dataset/datasetTasks.js +24 -28
  171. package/dist/tasks/dataset/datasetTasksUtils.js +15 -31
  172. package/dist/tasks/decisionMachine/decisionMachineRunner.js +217 -306
  173. package/dist/tasks/detection/getBotScore.js +37 -43
  174. package/dist/tasks/dnsEvent/enrichDnsEvent.d.ts.map +1 -1
  175. package/dist/tasks/dnsEvent/enrichDnsEvent.js +88 -74
  176. package/dist/tasks/dnsEvent/enrichDnsEvent.js.map +1 -1
  177. package/dist/tasks/frictionless/frictionlessTasks.js +342 -479
  178. package/dist/tasks/frictionless/frictionlessTasksUtils.js +14 -32
  179. package/dist/tasks/frictionless/routingMachine.js +72 -56
  180. package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +550 -801
  181. package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +21 -22
  182. package/dist/tasks/index.js +1 -3
  183. package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
  184. package/dist/tasks/powCaptcha/powTasks.js +486 -682
  185. package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
  186. package/dist/tasks/powCaptcha/powTasksUtils.js +15 -28
  187. package/dist/tasks/puzzleCaptcha/puzzleTasks.d.ts.map +1 -1
  188. package/dist/tasks/puzzleCaptcha/puzzleTasks.js +417 -586
  189. package/dist/tasks/puzzleCaptcha/puzzleTasks.js.map +1 -1
  190. package/dist/tasks/puzzleCaptcha/puzzleTasksUtils.js +9 -6
  191. package/dist/tasks/spam/checkSpamEmail.js +133 -141
  192. package/dist/tasks/spam/checkTrafficFilter.d.ts +1 -0
  193. package/dist/tasks/spam/checkTrafficFilter.d.ts.map +1 -1
  194. package/dist/tasks/spam/checkTrafficFilter.js +117 -77
  195. package/dist/tasks/spam/checkTrafficFilter.js.map +1 -1
  196. package/dist/tasks/spam/evaluateEmailSpamRules.js +75 -86
  197. package/dist/tasks/spam/updateSpamEmailDomains.js +36 -54
  198. package/dist/tasks/tasks.js +98 -150
  199. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js +4 -1
  200. package/dist/tests/integration/api/blacklistRequestInspector.integration.test.js.map +1 -1
  201. package/dist/tests/unit/api/block.unit.test.js +8 -4
  202. package/dist/tests/unit/api/block.unit.test.js.map +1 -1
  203. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js +8 -6
  204. package/dist/tests/unit/api/captcha/maintenanceModeShortCircuit.unit.test.js.map +1 -1
  205. package/dist/tests/unit/api/forwardVerify.unit.test.js +3 -1
  206. package/dist/tests/unit/api/forwardVerify.unit.test.js.map +1 -1
  207. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +15 -7
  208. package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
  209. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js +24 -18
  210. package/dist/tests/unit/schedulers/captchaScheduler.unit.test.js.map +1 -1
  211. package/dist/tests/unit/schedulers/getClientList.unit.test.js +19 -13
  212. package/dist/tests/unit/schedulers/getClientList.unit.test.js.map +1 -1
  213. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.js +19 -13
  214. package/dist/tests/unit/schedulers/setClientEntropy.unit.test.js.map +1 -1
  215. package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
  216. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +22 -16
  217. package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
  218. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js +140 -0
  219. package/dist/tests/unit/tasks/spam/checkTrafficFilter.unit.test.js.map +1 -1
  220. package/dist/tests/unit/testUtils/mockProviderEnv.d.ts +7 -7
  221. package/dist/util/usageCounters.js +220 -212
  222. package/dist/util.d.ts.map +1 -1
  223. package/dist/util.js +327 -364
  224. package/dist/util.js.map +1 -1
  225. package/dist/utils/devicePlatform.js +15 -9
  226. package/dist/utils/dns.js +64 -77
  227. package/dist/utils/hashUserAgent.js +14 -7
  228. package/dist/utils/hashUserIp.js +14 -6
  229. package/dist/utils/honeypot/encoders.js +74 -80
  230. package/dist/utils/honeypot/phraseBank.js +49 -44
  231. package/dist/utils/normalizeRequestIp.js +34 -26
  232. package/package.json +24 -24
@@ -1,46 +1,42 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const env = require("@prosopo/env");
4
- const types = require("@prosopo/types");
5
- const cron = require("cron");
6
- const updateSpamEmailDomains = require("../tasks/spam/updateSpamEmailDomains.cjs");
7
- const util = require("../util.cjs");
1
+ const require_util = require("../util.cjs");
2
+ const require_updateSpamEmailDomains = require("../tasks/spam/updateSpamEmailDomains.cjs");
3
+ let _prosopo_types = require("@prosopo/types");
4
+ let _prosopo_env = require("@prosopo/env");
5
+ let cron = require("cron");
6
+ //#region src/schedulers/updateSpamEmailDomains.ts
7
+ /**
8
+ * Update spam email domains from configured URLs on a schedule.
9
+ * @param pair
10
+ * @param cronSchedule
11
+ * @param config
12
+ */
8
13
  async function updateSpamEmailDomainsScheduler(pair, cronSchedule, config) {
9
- const env$1 = new env.ProviderEnvironment(config, pair);
10
- await env$1.isReady();
11
- const job = new cron.CronJob(cronSchedule, async () => {
12
- const taskRunning = await util.checkIfTaskIsRunning(
13
- types.ScheduledTaskNames.UpdateSpamEmailDomains,
14
- env$1.getDb()
15
- );
16
- env$1.logger.info(() => ({
17
- msg: `${types.ScheduledTaskNames.UpdateSpamEmailDomains} task running: ${taskRunning}`,
18
- data: { taskRunning }
19
- }));
20
- if (!taskRunning) {
21
- env$1.logger.info(() => ({
22
- msg: `${types.ScheduledTaskNames.UpdateSpamEmailDomains} task....`,
23
- data: {}
24
- }));
25
- const spamEmailDomainsUrls = config.spamEmailDomainsUrls || [];
26
- if (spamEmailDomainsUrls.length === 0) {
27
- env$1.logger.warn(() => ({
28
- msg: "No spam email domains URLs configured, skipping update"
29
- }));
30
- return;
31
- }
32
- await updateSpamEmailDomains.updateSpamEmailDomains(
33
- env$1.getDb(),
34
- env$1.logger,
35
- spamEmailDomainsUrls
36
- ).catch((err) => {
37
- env$1.logger.error(() => ({
38
- err,
39
- msg: "Error updating spam email domains"
40
- }));
41
- });
42
- }
43
- });
44
- job.start();
14
+ const env = new _prosopo_env.ProviderEnvironment(config, pair);
15
+ await env.isReady();
16
+ new cron.CronJob(cronSchedule, async () => {
17
+ const taskRunning = await require_util.checkIfTaskIsRunning(_prosopo_types.ScheduledTaskNames.UpdateSpamEmailDomains, env.getDb());
18
+ env.logger.info(() => ({
19
+ msg: `${_prosopo_types.ScheduledTaskNames.UpdateSpamEmailDomains} task running: ${taskRunning}`,
20
+ data: { taskRunning }
21
+ }));
22
+ if (!taskRunning) {
23
+ env.logger.info(() => ({
24
+ msg: `${_prosopo_types.ScheduledTaskNames.UpdateSpamEmailDomains} task....`,
25
+ data: {}
26
+ }));
27
+ const spamEmailDomainsUrls = config.spamEmailDomainsUrls || [];
28
+ if (spamEmailDomainsUrls.length === 0) {
29
+ env.logger.warn(() => ({ msg: "No spam email domains URLs configured, skipping update" }));
30
+ return;
31
+ }
32
+ await require_updateSpamEmailDomains.updateSpamEmailDomains(env.getDb(), env.logger, spamEmailDomainsUrls).catch((err) => {
33
+ env.logger.error(() => ({
34
+ err,
35
+ msg: "Error updating spam email domains"
36
+ }));
37
+ });
38
+ }
39
+ }).start();
45
40
  }
41
+ //#endregion
46
42
  exports.updateSpamEmailDomainsScheduler = updateSpamEmailDomainsScheduler;
@@ -1,122 +1,125 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const geolib = require("geolib");
1
+ let geolib = require("geolib");
2
+ //#region src/services/ipComparison.ts
3
+ /**
4
+ * Compares two IP addresses and provides detailed analysis including:
5
+ * - Whether they match
6
+ * - Provider differences
7
+ * - Connection type differences
8
+ * - Geographic distance
9
+ * - VPN/Proxy detection
10
+ *
11
+ * @param ip1 - First IP address to compare
12
+ * @param ip2 - Second IP address to compare
13
+ * @param ipInfoService - IP info service for local lookups
14
+ * @returns Promise resolving to comparison results or error details
15
+ */
4
16
  async function compareIPs(ip1, ip2, ipInfoService) {
5
- try {
6
- if (!ip1 || !ip2 || typeof ip1 !== "string" || typeof ip2 !== "string") {
7
- return {
8
- error: "Invalid IP addresses provided",
9
- ip1: ip1 || "undefined",
10
- ip2: ip2 || "undefined"
11
- };
12
- }
13
- if (ip1 === ip2) {
14
- return {
15
- ipsMatch: true,
16
- ip1,
17
- ip2
18
- };
19
- }
20
- const [ip1Info, ip2Info] = await Promise.all([
21
- ipInfoService.lookup(ip1),
22
- ipInfoService.lookup(ip2)
23
- ]);
24
- if (!ip1Info.isValid && !ip2Info.isValid) {
25
- return {
26
- error: "Failed to lookup both IP addresses",
27
- ip1,
28
- ip2,
29
- ip1Error: ip1Info.error,
30
- ip2Error: ip2Info.error
31
- };
32
- }
33
- if (!ip1Info.isValid) {
34
- return {
35
- error: "Failed to lookup first IP address",
36
- ip1,
37
- ip2,
38
- ip1Error: ip1Info.error
39
- };
40
- }
41
- if (!ip2Info.isValid) {
42
- return {
43
- error: "Failed to lookup second IP address",
44
- ip1,
45
- ip2,
46
- ip2Error: ip2Info.error
47
- };
48
- }
49
- const determineConnectionType = (ipInfo) => {
50
- if (ipInfo.isMobile) return "mobile";
51
- if (ipInfo.isDatacenter) return "datacenter";
52
- if (ipInfo.isSatellite) return "satellite";
53
- if (ipInfo.providerType === "isp") return "residential";
54
- switch (ipInfo.providerType) {
55
- case "hosting":
56
- return "datacenter";
57
- case "business":
58
- case "education":
59
- case "government":
60
- case "banking":
61
- return "residential";
62
- default:
63
- return "unknown";
64
- }
65
- };
66
- const ip1ConnectionType = determineConnectionType(ip1Info);
67
- const ip2ConnectionType = determineConnectionType(ip2Info);
68
- const differentConnectionTypes = ip1ConnectionType !== ip2ConnectionType;
69
- const ip1Provider = ip1Info.providerName || ip1Info.asnOrganization || "Unknown";
70
- const ip2Provider = ip2Info.providerName || ip2Info.asnOrganization || "Unknown";
71
- const differentProviders = ip1Provider !== ip2Provider;
72
- let distanceKm;
73
- if (ip1Info.latitude !== void 0 && ip1Info.longitude !== void 0 && ip2Info.latitude !== void 0 && ip2Info.longitude !== void 0) {
74
- const distanceMeters = geolib.getDistance(
75
- { latitude: ip1Info.latitude, longitude: ip1Info.longitude },
76
- { latitude: ip2Info.latitude, longitude: ip2Info.longitude }
77
- );
78
- distanceKm = distanceMeters / 1e3;
79
- }
80
- const ip1IsVpnOrProxy = ip1Info.isVPN || ip1Info.isProxy || ip1Info.isTor;
81
- const ip2IsVpnOrProxy = ip2Info.isVPN || ip2Info.isProxy || ip2Info.isTor;
82
- const anyVpnOrProxy = ip1IsVpnOrProxy || ip2IsVpnOrProxy;
83
- const ip1Coordinates = ip1Info.latitude !== void 0 && ip1Info.longitude !== void 0 ? { latitude: ip1Info.latitude, longitude: ip1Info.longitude } : void 0;
84
- const ip2Coordinates = ip2Info.latitude !== void 0 && ip2Info.longitude !== void 0 ? { latitude: ip2Info.latitude, longitude: ip2Info.longitude } : void 0;
85
- return {
86
- ipsMatch: false,
87
- ip1,
88
- ip2,
89
- comparison: {
90
- differentProviders,
91
- differentConnectionTypes,
92
- distanceKm,
93
- anyVpnOrProxy,
94
- ip1Details: {
95
- provider: ip1Provider,
96
- connectionType: ip1ConnectionType,
97
- isVpnOrProxy: ip1IsVpnOrProxy,
98
- country: ip1Info.country,
99
- countryCode: ip1Info.countryCode,
100
- city: ip1Info.city,
101
- coordinates: ip1Coordinates
102
- },
103
- ip2Details: {
104
- provider: ip2Provider,
105
- connectionType: ip2ConnectionType,
106
- isVpnOrProxy: ip2IsVpnOrProxy,
107
- country: ip2Info.country,
108
- countryCode: ip2Info.countryCode,
109
- city: ip2Info.city,
110
- coordinates: ip2Coordinates
111
- }
112
- }
113
- };
114
- } catch (error) {
115
- return {
116
- error: `Comparison failed: ${error instanceof Error ? error.message : String(error)}`,
117
- ip1,
118
- ip2
119
- };
120
- }
17
+ try {
18
+ if (!ip1 || !ip2 || typeof ip1 !== "string" || typeof ip2 !== "string") return {
19
+ error: "Invalid IP addresses provided",
20
+ ip1: ip1 || "undefined",
21
+ ip2: ip2 || "undefined"
22
+ };
23
+ if (ip1 === ip2) return {
24
+ ipsMatch: true,
25
+ ip1,
26
+ ip2
27
+ };
28
+ const [ip1Info, ip2Info] = await Promise.all([ipInfoService.lookup(ip1), ipInfoService.lookup(ip2)]);
29
+ if (!ip1Info.isValid && !ip2Info.isValid) return {
30
+ error: "Failed to lookup both IP addresses",
31
+ ip1,
32
+ ip2,
33
+ ip1Error: ip1Info.error,
34
+ ip2Error: ip2Info.error
35
+ };
36
+ if (!ip1Info.isValid) return {
37
+ error: "Failed to lookup first IP address",
38
+ ip1,
39
+ ip2,
40
+ ip1Error: ip1Info.error
41
+ };
42
+ if (!ip2Info.isValid) return {
43
+ error: "Failed to lookup second IP address",
44
+ ip1,
45
+ ip2,
46
+ ip2Error: ip2Info.error
47
+ };
48
+ const determineConnectionType = (ipInfo) => {
49
+ if (ipInfo.isMobile) return "mobile";
50
+ if (ipInfo.isDatacenter) return "datacenter";
51
+ if (ipInfo.isSatellite) return "satellite";
52
+ if (ipInfo.providerType === "isp") return "residential";
53
+ switch (ipInfo.providerType) {
54
+ case "hosting": return "datacenter";
55
+ case "business":
56
+ case "education":
57
+ case "government":
58
+ case "banking": return "residential";
59
+ default: return "unknown";
60
+ }
61
+ };
62
+ const ip1ConnectionType = determineConnectionType(ip1Info);
63
+ const ip2ConnectionType = determineConnectionType(ip2Info);
64
+ const differentConnectionTypes = ip1ConnectionType !== ip2ConnectionType;
65
+ const ip1Provider = ip1Info.providerName || ip1Info.asnOrganization || "Unknown";
66
+ const ip2Provider = ip2Info.providerName || ip2Info.asnOrganization || "Unknown";
67
+ const differentProviders = ip1Provider !== ip2Provider;
68
+ let distanceKm;
69
+ if (ip1Info.latitude !== void 0 && ip1Info.longitude !== void 0 && ip2Info.latitude !== void 0 && ip2Info.longitude !== void 0) distanceKm = (0, geolib.getDistance)({
70
+ latitude: ip1Info.latitude,
71
+ longitude: ip1Info.longitude
72
+ }, {
73
+ latitude: ip2Info.latitude,
74
+ longitude: ip2Info.longitude
75
+ }) / 1e3;
76
+ const ip1IsVpnOrProxy = ip1Info.isVPN || ip1Info.isProxy || ip1Info.isTor;
77
+ const ip2IsVpnOrProxy = ip2Info.isVPN || ip2Info.isProxy || ip2Info.isTor;
78
+ const anyVpnOrProxy = ip1IsVpnOrProxy || ip2IsVpnOrProxy;
79
+ const ip1Coordinates = ip1Info.latitude !== void 0 && ip1Info.longitude !== void 0 ? {
80
+ latitude: ip1Info.latitude,
81
+ longitude: ip1Info.longitude
82
+ } : void 0;
83
+ const ip2Coordinates = ip2Info.latitude !== void 0 && ip2Info.longitude !== void 0 ? {
84
+ latitude: ip2Info.latitude,
85
+ longitude: ip2Info.longitude
86
+ } : void 0;
87
+ return {
88
+ ipsMatch: false,
89
+ ip1,
90
+ ip2,
91
+ comparison: {
92
+ differentProviders,
93
+ differentConnectionTypes,
94
+ distanceKm,
95
+ anyVpnOrProxy,
96
+ ip1Details: {
97
+ provider: ip1Provider,
98
+ connectionType: ip1ConnectionType,
99
+ isVpnOrProxy: ip1IsVpnOrProxy,
100
+ country: ip1Info.country,
101
+ countryCode: ip1Info.countryCode,
102
+ city: ip1Info.city,
103
+ coordinates: ip1Coordinates
104
+ },
105
+ ip2Details: {
106
+ provider: ip2Provider,
107
+ connectionType: ip2ConnectionType,
108
+ isVpnOrProxy: ip2IsVpnOrProxy,
109
+ country: ip2Info.country,
110
+ countryCode: ip2Info.countryCode,
111
+ city: ip2Info.city,
112
+ coordinates: ip2Coordinates
113
+ }
114
+ }
115
+ };
116
+ } catch (error) {
117
+ return {
118
+ error: `Comparison failed: ${error instanceof Error ? error.message : String(error)}`,
119
+ ip1,
120
+ ip2
121
+ };
122
+ }
121
123
  }
124
+ //#endregion
122
125
  exports.compareIPs = compareIPs;