@astrasyncai/verification-gateway 5.21.1 → 5.22.0
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 +16 -0
- package/README.md +19 -7
- package/dist/adapters/express.js +75 -9
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +75 -9
- 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 +75 -9
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +75 -9
- 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 +60 -13
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +60 -13
- 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 +27 -6
- package/dist/index.d.ts +27 -6
- package/dist/index.js +75 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +75 -9
- 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 +20 -1
- package/dist/platform-signatures.d.ts +20 -1
- package/dist/platform-signatures.js +41 -6
- package/dist/platform-signatures.js.map +1 -1
- package/dist/platform-signatures.mjs +41 -6
- 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
package/dist/index.mjs
CHANGED
|
@@ -30,7 +30,7 @@ function getTrustLevel(score) {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
// src/version.ts
|
|
33
|
-
var SDK_VERSION = "5.
|
|
33
|
+
var SDK_VERSION = "5.22.0";
|
|
34
34
|
|
|
35
35
|
// src/http.ts
|
|
36
36
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -1205,7 +1205,11 @@ var PLATFORM_HEADER_NAMES = /* @__PURE__ */ new Set([
|
|
|
1205
1205
|
"x-goog-api-client",
|
|
1206
1206
|
"user-agent",
|
|
1207
1207
|
"x-agent-card-url",
|
|
1208
|
-
"x-agent-provider"
|
|
1208
|
+
"x-agent-provider",
|
|
1209
|
+
// Round 31 — Web Bot Auth's Signature-Agent names the signing agent's
|
|
1210
|
+
// directory host (a public URL, never a secret). It attributes a signed
|
|
1211
|
+
// agent even when its UA is stock Chrome.
|
|
1212
|
+
"signature-agent"
|
|
1209
1213
|
]);
|
|
1210
1214
|
var PLATFORM_HEADER_PREFIXES = [
|
|
1211
1215
|
"x-goog-",
|
|
@@ -1336,7 +1340,12 @@ function extractPlatformHeaders(sanitized) {
|
|
|
1336
1340
|
return out;
|
|
1337
1341
|
}
|
|
1338
1342
|
var CONNECTION_HEADER_SOURCES = [
|
|
1339
|
-
|
|
1343
|
+
// Round 31: `incap-client-ip` = Imperva Cloud WAF; `true-client-ip` is
|
|
1344
|
+
// also Akamai's client-IP header when the property enables it.
|
|
1345
|
+
[
|
|
1346
|
+
"ip",
|
|
1347
|
+
["cf-connecting-ip", "fastly-client-ip", "incap-client-ip", "true-client-ip", "x-real-ip"]
|
|
1348
|
+
],
|
|
1340
1349
|
[
|
|
1341
1350
|
"country",
|
|
1342
1351
|
["cf-ipcountry", "x-vercel-ip-country", "cloudfront-viewer-country", "fastly-geo-country"]
|
|
@@ -1387,6 +1396,28 @@ function deriveConnectionFromHeaders(headers) {
|
|
|
1387
1396
|
if (portMatch) connection.sourcePort = portMatch[1];
|
|
1388
1397
|
if (!connection.ip && addr) connection.ip = addr.replace(/:\d+$/, "");
|
|
1389
1398
|
}
|
|
1399
|
+
{
|
|
1400
|
+
const edgescape = (lower["x-akamai-edgescape"] ?? lower["akamai-edgescape"])?.trim();
|
|
1401
|
+
if (edgescape) {
|
|
1402
|
+
const fields = /* @__PURE__ */ new Map();
|
|
1403
|
+
for (const pair of edgescape.split(",")) {
|
|
1404
|
+
const i = pair.indexOf("=");
|
|
1405
|
+
if (i > 0) fields.set(pair.slice(0, i).trim().toLowerCase(), pair.slice(i + 1).trim());
|
|
1406
|
+
}
|
|
1407
|
+
const fill = (key, field) => {
|
|
1408
|
+
const v = fields.get(field);
|
|
1409
|
+
if (v && !connection[key]) connection[key] = v.slice(0, MAX_CONNECTION_VALUE_CHARS);
|
|
1410
|
+
};
|
|
1411
|
+
fill("country", "country_code");
|
|
1412
|
+
fill("region", "region_code");
|
|
1413
|
+
fill("city", "city");
|
|
1414
|
+
fill("latitude", "lat");
|
|
1415
|
+
fill("longitude", "long");
|
|
1416
|
+
fill("timeZone", "timezone");
|
|
1417
|
+
fill("asn", "asnum");
|
|
1418
|
+
fill("continent", "continent");
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
1390
1421
|
if (!connection.ip) {
|
|
1391
1422
|
const xff = lower["x-forwarded-for"];
|
|
1392
1423
|
const client = xff?.split(",")[0]?.trim();
|
|
@@ -2085,7 +2116,8 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
2085
2116
|
uaPatterns: [/claude/i, /anthropic/i],
|
|
2086
2117
|
agentCardPatterns: [/anthropic\.com/i, /claude\.ai/i],
|
|
2087
2118
|
apiKeyFormatPatterns: [/^sk-ant/i],
|
|
2088
|
-
headerPatterns: [/^anthropic-version/i, /^anthropic-beta/i, /^x-anthropic-/i]
|
|
2119
|
+
headerPatterns: [/^anthropic-version/i, /^anthropic-beta/i, /^x-anthropic-/i],
|
|
2120
|
+
wafLabelPatterns: [/\bclaude/i, /\banthropic/i]
|
|
2089
2121
|
},
|
|
2090
2122
|
{
|
|
2091
2123
|
vendor: "chatgpt",
|
|
@@ -2096,7 +2128,14 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
2096
2128
|
uaPatterns: [/chatgpt/i, /openai/i, /gpt-?\d/i, /\bGPTBot\b/i, /\bOAI-SearchBot\b/i],
|
|
2097
2129
|
agentCardPatterns: [/openai\.com/i, /chatgpt\.com/i],
|
|
2098
2130
|
apiKeyFormatPatterns: [/^sk-proj/i, /^sk-svcacct/i],
|
|
2099
|
-
headerPatterns: [
|
|
2131
|
+
headerPatterns: [
|
|
2132
|
+
/^openai-organization/i,
|
|
2133
|
+
/^openai-project/i,
|
|
2134
|
+
/^openai-version/i,
|
|
2135
|
+
// ChatGPT agent signs with Web Bot Auth under this directory host.
|
|
2136
|
+
/^signature-agent: "?https:\/\/chatgpt\.com/i
|
|
2137
|
+
],
|
|
2138
|
+
wafLabelPatterns: [/\bgptbot\b/i, /\bchatgpt/i, /\boai-searchbot\b/i, /\bopenai/i]
|
|
2100
2139
|
},
|
|
2101
2140
|
{
|
|
2102
2141
|
vendor: "gemini",
|
|
@@ -2117,7 +2156,8 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
2117
2156
|
],
|
|
2118
2157
|
agentCardPatterns: [/gemini\.google\.com/i, /ai\.google\.dev/i],
|
|
2119
2158
|
apiKeyFormatPatterns: [/^aiza/i],
|
|
2120
|
-
headerPatterns: [/^x-goog-user-project/i, /^x-goog-api-client/i]
|
|
2159
|
+
headerPatterns: [/^x-goog-user-project/i, /^x-goog-api-client/i],
|
|
2160
|
+
wafLabelPatterns: [/\bgoogle-extended\b/i, /\bgoogleother\b/i, /\bgemini/i]
|
|
2121
2161
|
},
|
|
2122
2162
|
{
|
|
2123
2163
|
vendor: "cursor",
|
|
@@ -2136,7 +2176,31 @@ var PLATFORM_AGENT_SIGNATURES = [
|
|
|
2136
2176
|
displayName: "Perplexity",
|
|
2137
2177
|
uaPatterns: [/perplexity/i],
|
|
2138
2178
|
agentCardPatterns: [/perplexity\.ai/i],
|
|
2139
|
-
apiKeyFormatPatterns: [/^pplx-/i]
|
|
2179
|
+
apiKeyFormatPatterns: [/^pplx-/i],
|
|
2180
|
+
wafLabelPatterns: [/\bperplexity/i]
|
|
2181
|
+
},
|
|
2182
|
+
// Round 30.1: xAI's documented crawlers (GrokBot/1.0, xAI-Grok/1.0,
|
|
2183
|
+
// Grok-DeepSearch/1.0). Anchored, versioned tokens — never in a stock UA.
|
|
2184
|
+
{
|
|
2185
|
+
vendor: "grok",
|
|
2186
|
+
displayName: "xAI Grok",
|
|
2187
|
+
uaPatterns: [/\bGrokBot\//i, /\bxAI-Grok\//i, /\bGrok-DeepSearch\//i],
|
|
2188
|
+
agentCardPatterns: [/\bx\.ai\b/i, /grok\.com/i],
|
|
2189
|
+
apiKeyFormatPatterns: [/^xai-/i],
|
|
2190
|
+
wafLabelPatterns: [/\bgrok/i, /\bxai\b/i]
|
|
2191
|
+
},
|
|
2192
|
+
// Round 30.1: Meta AI's index and fetch crawlers. facebookexternalhit
|
|
2193
|
+
// (link previews) is deliberately NOT here — it stays a generic crawler.
|
|
2194
|
+
{
|
|
2195
|
+
vendor: "meta-ai",
|
|
2196
|
+
displayName: "Meta AI",
|
|
2197
|
+
uaPatterns: [/\bMeta-WebIndexer\b/i, /\bMeta-ExternalFetcher\b/i],
|
|
2198
|
+
agentCardPatterns: [/meta\.ai/i],
|
|
2199
|
+
wafLabelPatterns: [
|
|
2200
|
+
/\bmeta-webindexer\b/i,
|
|
2201
|
+
/\bmeta-externalfetcher\b/i,
|
|
2202
|
+
/\bmeta-externalagent\b/i
|
|
2203
|
+
]
|
|
2140
2204
|
},
|
|
2141
2205
|
// Agentic browsers — versioned-token patterns ONLY (a stock Chrome UA must
|
|
2142
2206
|
// never match). Distinct vendor keys (not 'chatgpt'/'perplexity'): the
|
|
@@ -2184,6 +2248,7 @@ function matchPlatformSignature(signatures, input) {
|
|
|
2184
2248
|
const apiKeyFormat = input.apiKeyFormat ?? "";
|
|
2185
2249
|
const ja4 = input.ja4 ?? "";
|
|
2186
2250
|
const asn = input.asn ?? "";
|
|
2251
|
+
const wafLabels = input.wafLabels ?? [];
|
|
2187
2252
|
const headerLines = [];
|
|
2188
2253
|
if (input.platformHeaders) {
|
|
2189
2254
|
for (const [name, value] of Object.entries(input.platformHeaders)) {
|
|
@@ -2197,7 +2262,8 @@ function matchPlatformSignature(signatures, input) {
|
|
|
2197
2262
|
const headerMatch = headerLines.length > 0 && sig.headerPatterns?.some((p) => headerLines.some((line) => p.test(line)));
|
|
2198
2263
|
const ja4Match = ja4.length > 0 && sig.ja4Patterns?.some((p) => p.test(ja4));
|
|
2199
2264
|
const asnMatch = asn.length > 0 && sig.asnList?.includes(asn);
|
|
2200
|
-
|
|
2265
|
+
const wafMatch = wafLabels.length > 0 && sig.wafLabelPatterns?.some((p) => wafLabels.some((label) => p.test(label)));
|
|
2266
|
+
if (uaMatch || cardMatch || keyMatch || headerMatch || ja4Match || asnMatch || wafMatch) {
|
|
2201
2267
|
const uaBase = ua.split(/[\s/]/)[0]?.toLowerCase() ?? "";
|
|
2202
2268
|
const cardHost = (() => {
|
|
2203
2269
|
try {
|
|
@@ -2206,7 +2272,7 @@ function matchPlatformSignature(signatures, input) {
|
|
|
2206
2272
|
return "";
|
|
2207
2273
|
}
|
|
2208
2274
|
})();
|
|
2209
|
-
const keyBasis = uaBase || cardHost || apiKeyFormat || ja4 || asn && `asn${asn}` || "unknown";
|
|
2275
|
+
const keyBasis = uaBase || cardHost || apiKeyFormat || ja4 || asn && `asn${asn}` || wafMatch && `waf:${wafLabels[0]?.toLowerCase()}` || "unknown";
|
|
2210
2276
|
return {
|
|
2211
2277
|
vendor: sig.vendor,
|
|
2212
2278
|
fingerprintKey: `${sig.vendor}:${keyBasis}`,
|