@astrasyncai/verification-gateway 5.21.2 → 5.22.1
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/CHANGELOG.md +20 -0
- package/README.md +19 -7
- package/dist/adapters/express.js +60 -11
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +60 -11
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.js +34 -3
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +34 -3
- package/dist/adapters/mcp.mjs.map +1 -1
- package/dist/adapters/nextjs.js +60 -11
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +60 -11
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.js +1 -1
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +1 -1
- package/dist/adapters/sdk.mjs.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/index.mjs +1 -1
- package/dist/agent/index.mjs.map +1 -1
- package/dist/bin/astrasync-claude-hook.js +1 -1
- package/dist/bin/astrasync-codex-hook.js +1 -1
- package/dist/bin/astrasync-guard.js +1 -1
- package/dist/bin/astrasync.js +1 -1
- package/dist/browser/background.js +1 -1
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +1 -1
- package/dist/browser/background.mjs.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/cli/index.mjs.map +1 -1
- package/dist/codex/index.js +1 -1
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +1 -1
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/extension.js +1 -1
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +1 -1
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/edge-config.js +1 -1
- package/dist/edge-config.js.map +1 -1
- package/dist/edge-config.mjs +1 -1
- package/dist/edge-config.mjs.map +1 -1
- package/dist/edge-core/index.d.mts +4 -1
- package/dist/edge-core/index.d.ts +4 -1
- package/dist/edge-core/index.js +45 -15
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +45 -15
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/gateway/gateway.js +1 -1
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +1 -1
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/index.d.mts +44 -6
- package/dist/index.d.ts +44 -6
- package/dist/index.js +71 -14
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +71 -14
- package/dist/index.mjs.map +1 -1
- package/dist/metadata-capture.d.mts +5 -3
- package/dist/metadata-capture.d.ts +5 -3
- package/dist/metadata-capture.js +33 -2
- package/dist/metadata-capture.js.map +1 -1
- package/dist/metadata-capture.mjs +33 -2
- package/dist/metadata-capture.mjs.map +1 -1
- package/dist/platform-signatures.d.mts +13 -0
- package/dist/platform-signatures.d.ts +13 -0
- package/dist/platform-signatures.js +26 -8
- package/dist/platform-signatures.js.map +1 -1
- package/dist/platform-signatures.mjs +26 -8
- package/dist/platform-signatures.mjs.map +1 -1
- package/dist/registration/index.js +1 -1
- package/dist/registration/index.js.map +1 -1
- package/dist/registration/index.mjs +1 -1
- package/dist/registration/index.mjs.map +1 -1
- package/dist/transport/index.js +1 -1
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs +1 -1
- package/dist/transport/index.mjs.map +1 -1
- package/dist/verify.js +1 -1
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +1 -1
- package/dist/verify.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -33,7 +33,11 @@ var PLATFORM_HEADER_NAMES = /* @__PURE__ */ new Set([
|
|
|
33
33
|
"x-goog-api-client",
|
|
34
34
|
"user-agent",
|
|
35
35
|
"x-agent-card-url",
|
|
36
|
-
"x-agent-provider"
|
|
36
|
+
"x-agent-provider",
|
|
37
|
+
// Round 31 — Web Bot Auth's Signature-Agent names the signing agent's
|
|
38
|
+
// directory host (a public URL, never a secret). It attributes a signed
|
|
39
|
+
// agent even when its UA is stock Chrome.
|
|
40
|
+
"signature-agent"
|
|
37
41
|
]);
|
|
38
42
|
var PLATFORM_HEADER_PREFIXES = [
|
|
39
43
|
"x-goog-",
|
|
@@ -150,7 +154,12 @@ function sanitizeHeaders(raw) {
|
|
|
150
154
|
return result;
|
|
151
155
|
}
|
|
152
156
|
var CONNECTION_HEADER_SOURCES = [
|
|
153
|
-
|
|
157
|
+
// Round 31: `incap-client-ip` = Imperva Cloud WAF; `true-client-ip` is
|
|
158
|
+
// also Akamai's client-IP header when the property enables it.
|
|
159
|
+
[
|
|
160
|
+
"ip",
|
|
161
|
+
["cf-connecting-ip", "fastly-client-ip", "incap-client-ip", "true-client-ip", "x-real-ip"]
|
|
162
|
+
],
|
|
154
163
|
[
|
|
155
164
|
"country",
|
|
156
165
|
["cf-ipcountry", "x-vercel-ip-country", "cloudfront-viewer-country", "fastly-geo-country"]
|
|
@@ -201,6 +210,28 @@ function deriveConnectionFromHeaders(headers) {
|
|
|
201
210
|
if (portMatch) connection.sourcePort = portMatch[1];
|
|
202
211
|
if (!connection.ip && addr) connection.ip = addr.replace(/:\d+$/, "");
|
|
203
212
|
}
|
|
213
|
+
{
|
|
214
|
+
const edgescape = (lower["x-akamai-edgescape"] ?? lower["akamai-edgescape"])?.trim();
|
|
215
|
+
if (edgescape) {
|
|
216
|
+
const fields = /* @__PURE__ */ new Map();
|
|
217
|
+
for (const pair of edgescape.split(",")) {
|
|
218
|
+
const i = pair.indexOf("=");
|
|
219
|
+
if (i > 0) fields.set(pair.slice(0, i).trim().toLowerCase(), pair.slice(i + 1).trim());
|
|
220
|
+
}
|
|
221
|
+
const fill = (key, field) => {
|
|
222
|
+
const v = fields.get(field);
|
|
223
|
+
if (v && !connection[key]) connection[key] = v.slice(0, MAX_CONNECTION_VALUE_CHARS);
|
|
224
|
+
};
|
|
225
|
+
fill("country", "country_code");
|
|
226
|
+
fill("region", "region_code");
|
|
227
|
+
fill("city", "city");
|
|
228
|
+
fill("latitude", "lat");
|
|
229
|
+
fill("longitude", "long");
|
|
230
|
+
fill("timeZone", "timezone");
|
|
231
|
+
fill("asn", "asnum");
|
|
232
|
+
fill("continent", "continent");
|
|
233
|
+
}
|
|
234
|
+
}
|
|
204
235
|
if (!connection.ip) {
|
|
205
236
|
const xff = lower["x-forwarded-for"];
|
|
206
237
|
const client = xff?.split(",")[0]?.trim();
|
|
@@ -452,7 +483,7 @@ function routePolicyOf(route) {
|
|
|
452
483
|
}
|
|
453
484
|
|
|
454
485
|
// src/version.ts
|
|
455
|
-
var SDK_VERSION = "5.
|
|
486
|
+
var SDK_VERSION = "5.22.1";
|
|
456
487
|
|
|
457
488
|
// src/http.ts
|
|
458
489
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -1873,7 +1904,8 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
1873
1904
|
uaPatterns: [/claude/i, /anthropic/i],
|
|
1874
1905
|
agentCardPatterns: [/anthropic\.com/i, /claude\.ai/i],
|
|
1875
1906
|
apiKeyFormatPatterns: [/^sk-ant/i],
|
|
1876
|
-
headerPatterns: [/^anthropic-version/i, /^anthropic-beta/i, /^x-anthropic-/i]
|
|
1907
|
+
headerPatterns: [/^anthropic-version/i, /^anthropic-beta/i, /^x-anthropic-/i],
|
|
1908
|
+
wafLabelPatterns: [/\bclaude/i, /\banthropic/i]
|
|
1877
1909
|
},
|
|
1878
1910
|
{
|
|
1879
1911
|
vendor: "chatgpt",
|
|
@@ -1884,7 +1916,14 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
1884
1916
|
uaPatterns: [/chatgpt/i, /openai/i, /gpt-?\d/i, /\bGPTBot\b/i, /\bOAI-SearchBot\b/i],
|
|
1885
1917
|
agentCardPatterns: [/openai\.com/i, /chatgpt\.com/i],
|
|
1886
1918
|
apiKeyFormatPatterns: [/^sk-proj/i, /^sk-svcacct/i],
|
|
1887
|
-
headerPatterns: [
|
|
1919
|
+
headerPatterns: [
|
|
1920
|
+
/^openai-organization/i,
|
|
1921
|
+
/^openai-project/i,
|
|
1922
|
+
/^openai-version/i,
|
|
1923
|
+
// ChatGPT agent signs with Web Bot Auth under this directory host.
|
|
1924
|
+
/^signature-agent: "?https:\/\/chatgpt\.com/i
|
|
1925
|
+
],
|
|
1926
|
+
wafLabelPatterns: [/\bgptbot\b/i, /\bchatgpt/i, /\boai-searchbot\b/i, /\bopenai/i]
|
|
1888
1927
|
},
|
|
1889
1928
|
{
|
|
1890
1929
|
vendor: "gemini",
|
|
@@ -1905,7 +1944,8 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
1905
1944
|
],
|
|
1906
1945
|
agentCardPatterns: [/gemini\.google\.com/i, /ai\.google\.dev/i],
|
|
1907
1946
|
apiKeyFormatPatterns: [/^aiza/i],
|
|
1908
|
-
headerPatterns: [/^x-goog-user-project/i, /^x-goog-api-client/i]
|
|
1947
|
+
headerPatterns: [/^x-goog-user-project/i, /^x-goog-api-client/i],
|
|
1948
|
+
wafLabelPatterns: [/\bgoogle-extended\b/i, /\bgoogleother\b/i, /\bgemini/i]
|
|
1909
1949
|
},
|
|
1910
1950
|
{
|
|
1911
1951
|
vendor: "cursor",
|
|
@@ -1924,7 +1964,8 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
1924
1964
|
displayName: "Perplexity",
|
|
1925
1965
|
uaPatterns: [/perplexity/i],
|
|
1926
1966
|
agentCardPatterns: [/perplexity\.ai/i],
|
|
1927
|
-
apiKeyFormatPatterns: [/^pplx-/i]
|
|
1967
|
+
apiKeyFormatPatterns: [/^pplx-/i],
|
|
1968
|
+
wafLabelPatterns: [/\bperplexity/i]
|
|
1928
1969
|
},
|
|
1929
1970
|
// Round 30.1: xAI's documented crawlers (GrokBot/1.0, xAI-Grok/1.0,
|
|
1930
1971
|
// Grok-DeepSearch/1.0). Anchored, versioned tokens — never in a stock UA.
|
|
@@ -1933,7 +1974,8 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
1933
1974
|
displayName: "xAI Grok",
|
|
1934
1975
|
uaPatterns: [/\bGrokBot\//i, /\bxAI-Grok\//i, /\bGrok-DeepSearch\//i],
|
|
1935
1976
|
agentCardPatterns: [/\bx\.ai\b/i, /grok\.com/i],
|
|
1936
|
-
apiKeyFormatPatterns: [/^xai-/i]
|
|
1977
|
+
apiKeyFormatPatterns: [/^xai-/i],
|
|
1978
|
+
wafLabelPatterns: [/\bgrok/i, /\bxai\b/i]
|
|
1937
1979
|
},
|
|
1938
1980
|
// Round 30.1: Meta AI's index and fetch crawlers. facebookexternalhit
|
|
1939
1981
|
// (link previews) is deliberately NOT here — it stays a generic crawler.
|
|
@@ -1941,7 +1983,12 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
1941
1983
|
vendor: "meta-ai",
|
|
1942
1984
|
displayName: "Meta AI",
|
|
1943
1985
|
uaPatterns: [/\bMeta-WebIndexer\b/i, /\bMeta-ExternalFetcher\b/i],
|
|
1944
|
-
agentCardPatterns: [/meta\.ai/i]
|
|
1986
|
+
agentCardPatterns: [/meta\.ai/i],
|
|
1987
|
+
wafLabelPatterns: [
|
|
1988
|
+
/\bmeta-webindexer\b/i,
|
|
1989
|
+
/\bmeta-externalfetcher\b/i,
|
|
1990
|
+
/\bmeta-externalagent\b/i
|
|
1991
|
+
]
|
|
1945
1992
|
},
|
|
1946
1993
|
// Agentic browsers — versioned-token patterns ONLY (a stock Chrome UA must
|
|
1947
1994
|
// never match). Distinct vendor keys (not 'chatgpt'/'perplexity'): the
|
|
@@ -1989,6 +2036,7 @@ function matchPlatformSignature(signatures, input) {
|
|
|
1989
2036
|
const apiKeyFormat = input.apiKeyFormat ?? "";
|
|
1990
2037
|
const ja4 = input.ja4 ?? "";
|
|
1991
2038
|
const asn = input.asn ?? "";
|
|
2039
|
+
const wafLabels = input.wafLabels ?? [];
|
|
1992
2040
|
const headerLines = [];
|
|
1993
2041
|
if (input.platformHeaders) {
|
|
1994
2042
|
for (const [name, value] of Object.entries(input.platformHeaders)) {
|
|
@@ -2002,7 +2050,8 @@ function matchPlatformSignature(signatures, input) {
|
|
|
2002
2050
|
const headerMatch = headerLines.length > 0 && sig.headerPatterns?.some((p) => headerLines.some((line) => p.test(line)));
|
|
2003
2051
|
const ja4Match = ja4.length > 0 && sig.ja4Patterns?.some((p) => p.test(ja4));
|
|
2004
2052
|
const asnMatch = asn.length > 0 && sig.asnList?.includes(asn);
|
|
2005
|
-
|
|
2053
|
+
const wafMatch = wafLabels.length > 0 && sig.wafLabelPatterns?.some((p) => wafLabels.some((label) => p.test(label)));
|
|
2054
|
+
if (uaMatch || cardMatch || keyMatch || headerMatch || ja4Match || asnMatch || wafMatch) {
|
|
2006
2055
|
const uaBase = ua.split(/[\s/]/)[0]?.toLowerCase() ?? "";
|
|
2007
2056
|
const cardHost = (() => {
|
|
2008
2057
|
try {
|
|
@@ -2011,7 +2060,7 @@ function matchPlatformSignature(signatures, input) {
|
|
|
2011
2060
|
return "";
|
|
2012
2061
|
}
|
|
2013
2062
|
})();
|
|
2014
|
-
const keyBasis = uaBase || cardHost || apiKeyFormat || ja4 || asn && `asn${asn}` || "unknown";
|
|
2063
|
+
const keyBasis = uaBase || cardHost || apiKeyFormat || ja4 || asn && `asn${asn}` || wafMatch && `waf:${wafLabels[0]?.toLowerCase()}` || "unknown";
|
|
2015
2064
|
return {
|
|
2016
2065
|
vendor: sig.vendor,
|
|
2017
2066
|
fingerprintKey: `${sig.vendor}:${keyBasis}`,
|