diff --git a/CHANGELOG.md b/CHANGELOG.md index 03676120..4211683e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,13 @@ CHANGELOG ========= -8.3.0 +8.3.0 (2026-01-20) ------------------ * Added `Banquest`, `SummitPayments`, and `Yaadpay` to the `Processor` enum. +* Added `anonymizer` property to the `IpAddress` interface. This contains + information about whether the IP address is an anonymous network, including + confidence score, VPN provider name, and various anonymizer type flags. 8.2.1 (2025-11-25) ------------------ diff --git a/README.md b/README.md index bfa9e356..ae993c43 100644 --- a/README.md +++ b/README.md @@ -299,6 +299,6 @@ This API uses [Semantic Versioning](https://semver.org/). ## Copyright and License -This software is Copyright (c) 2019-2025 by MaxMind, Inc. +This software is Copyright (c) 2019-2026 by MaxMind, Inc. This is free software, licensed under the Apache License, Version 2.0. diff --git a/fixtures/insights.json b/fixtures/insights.json index 5744eb6f..8f2ef903 100644 --- a/fixtures/insights.json +++ b/fixtures/insights.json @@ -25,6 +25,17 @@ "reason": "Suspicious activity has been seen on this IP address across minFraud customers." } ], + "anonymizer": { + "confidence": 99, + "is_anonymous": true, + "is_anonymous_vpn": true, + "is_hosting_provider": true, + "is_public_proxy": true, + "is_residential_proxy": false, + "is_tor_exit_node": true, + "network_last_seen": "2025-01-15", + "provider_name": "TestVPN" + }, "city": { "confidence": 25, "geoname_id": 54321, diff --git a/package-lock.json b/package-lock.json index 8f412ee4..7da9c981 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@maxmind/minfraud-api-node", - "version": "8.2.1", + "version": "8.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@maxmind/minfraud-api-node", - "version": "8.2.1", + "version": "8.3.0", "license": "Apache-2.0", "dependencies": { "@maxmind/geoip2-node": "^6.3.0", diff --git a/package.json b/package.json index 8281dc22..747abdf1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@maxmind/minfraud-api-node", - "version": "8.2.1", + "version": "8.3.0", "description": "Node.js API for MaxMind minFraud web services", "main": "dist/src/index.js", "homepage": "https://github.com/maxmind/minfraud-api-node", diff --git a/src/response/models/insights.spec.ts b/src/response/models/insights.spec.ts index 67365cd7..67022989 100644 --- a/src/response/models/insights.spec.ts +++ b/src/response/models/insights.spec.ts @@ -63,4 +63,25 @@ describe('Insights()', () => { const model = new Insights(response as InsightsResponse); expect(model.email?.domain?.visit?.hasRedirect).toBe(false); }); + + it('allows /ip_address/anonymizer to be accessed', () => { + const model = new Insights(response as InsightsResponse); + expect(model.ipAddress?.anonymizer).toEqual({ + confidence: 99, + isAnonymous: true, + isAnonymousVpn: true, + isHostingProvider: true, + isPublicProxy: true, + isResidentialProxy: false, + isTorExitNode: true, + networkLastSeen: '2025-01-15', + providerName: 'TestVPN', + }); + }); + + it('handles empty anonymizer responses', () => { + delete response.ip_address.anonymizer; + const model = new Insights(response as InsightsResponse); + expect(model.ipAddress?.anonymizer).toBeUndefined(); + }); }); diff --git a/src/response/records.ts b/src/response/records.ts index 44b22b1a..93be29b9 100644 --- a/src/response/records.ts +++ b/src/response/records.ts @@ -1,4 +1,9 @@ -import { CountryRecord, Insights, LocationRecord } from '@maxmind/geoip2-node'; +import { + AnonymizerRecord, + CountryRecord, + Insights, + LocationRecord, +} from '@maxmind/geoip2-node'; import { CreditCardType, DispositionAction, @@ -62,6 +67,11 @@ export interface IpRiskReasons { * Model for minFraud GeoIP2 Insights data. */ export interface IpAddress extends Insights { + /** + * Anonymizer object for the requested IP address. This contains information + * about whether the IP address is associated with an anonymizing service. + */ + readonly anonymizer?: AnonymizerRecord; /** * Country object for the requested IP address. This record represents the * country where MaxMind believes the IP is located.