vpndetection-next 2.1.7 → 2.1.9
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 +2 -2
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ npm install vpndetection-next
|
|
|
15
15
|
|
|
16
16
|
Requires Node.js 22 or newer and Next.js 15 or newer. The proxy runs on the Node.js runtime and, on Next 15, on the Edge runtime too.
|
|
17
17
|
|
|
18
|
-
You need an API key. Create one in the [console](https://app.vpndetection.io);
|
|
18
|
+
You need an API key. Create one in the [console](https://app.vpndetection.io); without one the allowance is counted per source address, and a deployment is a single source address, so a key is what makes this usable in production rather than optional.
|
|
19
19
|
|
|
20
20
|
Next 16 renamed the file convention from `middleware.ts` to `proxy.ts`, and the export from `middleware` to `proxy`. Both work on 16 — `middleware.ts` logs a deprecation — so use whichever your version supports.
|
|
21
21
|
|
|
@@ -171,7 +171,7 @@ Beyond a few million distinct visitors a day, stop calling the API per request:
|
|
|
171
171
|
|
|
172
172
|
## Absent is not false
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
Without a key only `ip` and `isVpn` come back, and a free key adds Tor, relay, `location` and `asn`. A field your plan does not include is absent, which means "not in your plan" rather than "checked, and no".
|
|
175
175
|
|
|
176
176
|
```ts
|
|
177
177
|
lookup.result?.is_hosting ?? false // when you only want the flag
|
package/dist/index.js
CHANGED
|
@@ -58,7 +58,7 @@ export function createGuard(options = {}) {
|
|
|
58
58
|
const headers = new Headers(request.headers);
|
|
59
59
|
headers.delete(LOOKUP_HEADER);
|
|
60
60
|
if (forwarding && lookup !== undefined) {
|
|
61
|
-
headers.set(LOOKUP_HEADER,
|
|
61
|
+
headers.set(LOOKUP_HEADER, asciiJson(toForwarded(lookup)));
|
|
62
62
|
}
|
|
63
63
|
return NextResponse.next({ request: { headers: headers } });
|
|
64
64
|
};
|
|
@@ -132,6 +132,12 @@ function firstForwarded(request) {
|
|
|
132
132
|
// Deliberately compact. This rides on a request header, which has a size limit
|
|
133
133
|
// every proxy in front of you enforces, so it carries the decision and the
|
|
134
134
|
// served body rather than a second copy of the idiomatic view.
|
|
135
|
+
// A header value is bytes, so `Headers.set` throws on anything past U+00FF: a flag emoji, a currency
|
|
136
|
+
// sign such as the euro's, an AS name in another script. JSON's own escapes carry those as ASCII,
|
|
137
|
+
// and `JSON.parse` in `readLookup` reads them back unchanged.
|
|
138
|
+
function asciiJson(value) {
|
|
139
|
+
return JSON.stringify(value).replace(/[\u007f-\uffff]/g, (c) => `\\u${c.charCodeAt(0).toString(16).padStart(4, '0')}`);
|
|
140
|
+
}
|
|
135
141
|
function toForwarded(lookup) {
|
|
136
142
|
return {
|
|
137
143
|
...(lookup.ip === undefined ? {} : { ip: lookup.ip }),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC;AA0B9C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,UAAmB,EAAE;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAE9C,OAAO,KAAK,UAAU,KAAK,CAAC,OAAoB;QAC5C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,UAAmB,EAAE;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAc,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;IAE7C,MAAM,KAAK,GAAG,KAAK,EAAE,OAAoB,EAA+B,EAAE,CACtE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE3B;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,GAAG,CAAC,OAAoB,EAAE,MAA0B,EAAgB,EAAE;QAC/E,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC9B,IAAI,UAAU,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vpndetection-next",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.9",
|
|
4
4
|
"description": "Official Next.js proxy/middleware for the VPNDetection API. Detect VPNs, proxies, Tor, hosting and CDN visitors on every request.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"node": ">=22"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"vpndetection": "^5.
|
|
47
|
+
"vpndetection": "^5.10.1"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"next": ">=15"
|