@astrasyncai/verification-gateway 4.2.0 → 4.3.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/README.md +45 -21
- package/dist/adapter-interface/interface.d.mts +2 -2
- package/dist/adapter-interface/interface.d.ts +2 -2
- package/dist/adapters/express.d.mts +2 -2
- package/dist/adapters/express.d.ts +2 -2
- package/dist/adapters/express.js +56 -4
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +56 -4
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +38 -30
- package/dist/adapters/mcp.d.ts +38 -30
- package/dist/adapters/mcp.js +22 -5
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +22 -5
- package/dist/adapters/mcp.mjs.map +1 -1
- package/dist/adapters/nextjs.d.mts +2 -2
- package/dist/adapters/nextjs.d.ts +2 -2
- package/dist/adapters/nextjs.js +54 -4
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +54 -4
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.d.mts +2 -2
- package/dist/adapters/sdk.d.ts +2 -2
- package/dist/agent/index.d.mts +2 -2
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +2 -2
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/index.mjs +2 -2
- package/dist/agent/index.mjs.map +1 -1
- package/dist/bin/astrasync-claude-hook.js +2 -2
- package/dist/bin/astrasync-codex-hook.js +2 -2
- package/dist/bin/astrasync-guard.js +2 -2
- package/dist/bin/astrasync.js +14 -4
- package/dist/browser/background.js +2 -2
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +2 -2
- package/dist/browser/background.mjs.map +1 -1
- package/dist/browser/browser-adapter.d.mts +2 -2
- package/dist/browser/browser-adapter.d.ts +2 -2
- package/dist/claude-code/claude-code-adapter.d.mts +2 -2
- package/dist/claude-code/claude-code-adapter.d.ts +2 -2
- package/dist/cli/index.d.mts +2 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/codex/index.d.mts +2 -2
- package/dist/codex/index.d.ts +2 -2
- package/dist/codex/index.js +2 -2
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +2 -2
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/cursor-adapter.d.mts +2 -2
- package/dist/cursor/cursor-adapter.d.ts +2 -2
- package/dist/cursor/extension.d.mts +2 -2
- package/dist/cursor/extension.d.ts +2 -2
- package/dist/cursor/extension.js +2 -2
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +2 -2
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/edge-config.d.mts +1 -1
- package/dist/edge-config.d.ts +1 -1
- package/dist/edge-core/index.d.mts +1 -1
- package/dist/edge-core/index.d.ts +1 -1
- package/dist/edge-core/index.js +25 -5
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +25 -5
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/{express-D_4hTn5Z.d.mts → express-CR6F3njD.d.mts} +1 -1
- package/dist/{express-BVd1_3FE.d.ts → express-DaqL11tx.d.ts} +1 -1
- package/dist/gateway/gateway.d.mts +2 -2
- package/dist/gateway/gateway.d.ts +2 -2
- package/dist/gateway/gateway.js +2 -2
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +2 -2
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/git-trigger/git-hooks.d.mts +2 -2
- package/dist/git-trigger/git-hooks.d.ts +2 -2
- package/dist/{index-B0YHu_SP.d.ts → index-B5Ts1WtM.d.ts} +3 -3
- package/dist/{index-T1aBoUcc.d.ts → index-BfIxCYIZ.d.ts} +1 -1
- package/dist/{index-BPEBlOsE.d.mts → index-Cub7lK-T.d.mts} +3 -3
- package/dist/{index-DQb5-_1X.d.mts → index-CwAh7Tln.d.mts} +1 -1
- package/dist/index.d.mts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +74 -35
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +71 -32
- package/dist/index.mjs.map +1 -1
- package/dist/local-evaluator/evaluator.d.mts +2 -2
- package/dist/local-evaluator/evaluator.d.ts +2 -2
- package/dist/metadata-capture.d.mts +18 -5
- package/dist/metadata-capture.d.ts +18 -5
- package/dist/metadata-capture.js +21 -4
- package/dist/metadata-capture.js.map +1 -1
- package/dist/metadata-capture.mjs +20 -4
- package/dist/metadata-capture.mjs.map +1 -1
- package/dist/{nextjs-w7RTbP1P.d.ts → nextjs-DL6uE1ye.d.ts} +1 -1
- package/dist/{nextjs-WyeVr2Kp.d.mts → nextjs-DlX6xwbU.d.mts} +1 -1
- package/dist/{sdk-CbTNIkAa.d.mts → sdk-Bbh9B_dw.d.mts} +1 -1
- package/dist/{sdk-QeX0Z8Ho.d.ts → sdk-C6SASmsh.d.ts} +1 -1
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- package/dist/transport/index.js +5 -5
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs +2 -2
- package/dist/transport/index.mjs.map +1 -1
- package/dist/{types-r850cOt0.d.mts → types-C0zfSXMB.d.mts} +22 -0
- package/dist/{types-DqfPU5Bl.d.mts → types-C7Rb-w0d.d.mts} +1 -1
- package/dist/{types-sMxBT-nM.d.ts → types-DwSfO7Sb.d.ts} +22 -0
- package/dist/{types-BLUx92FJ.d.ts → types-nIh3HtuA.d.ts} +1 -1
- package/dist/ui/index.d.mts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/verify.d.mts +1 -1
- package/dist/verify.d.ts +1 -1
- package/package.json +2 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import 'next/server';
|
|
2
|
-
import '../types-
|
|
3
|
-
export { c as createMatcherConfig, a as createMiddleware } from '../nextjs-
|
|
2
|
+
import '../types-C0zfSXMB.mjs';
|
|
3
|
+
export { c as createMatcherConfig, a as createMiddleware } from '../nextjs-DlX6xwbU.mjs';
|
|
4
4
|
import '../metadata-capture.mjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import 'next/server';
|
|
2
|
-
import '../types-
|
|
3
|
-
export { c as createMatcherConfig, a as createMiddleware } from '../nextjs-
|
|
2
|
+
import '../types-DwSfO7Sb.js';
|
|
3
|
+
export { c as createMatcherConfig, a as createMiddleware } from '../nextjs-DL6uE1ye.js';
|
|
4
4
|
import '../metadata-capture.js';
|
package/dist/adapters/nextjs.js
CHANGED
|
@@ -778,7 +778,9 @@ var SECRET_HEADER_NAMES = /* @__PURE__ */ new Set([
|
|
|
778
778
|
"x-astrasync-signature",
|
|
779
779
|
"x-astrasync-secret",
|
|
780
780
|
"x-hub-signature",
|
|
781
|
-
"x-hub-signature-256"
|
|
781
|
+
"x-hub-signature-256",
|
|
782
|
+
// Short-lived verify dedupe token — must never persist in stored metadata.
|
|
783
|
+
"x-astra-verified-hop"
|
|
782
784
|
]);
|
|
783
785
|
var SECRET_HEADER_PREFIXES = ["x-astrasync-", "kya-", "kya_"];
|
|
784
786
|
var CREDENTIAL_HEADER_NAMES = /* @__PURE__ */ new Set([
|
|
@@ -913,16 +915,25 @@ var CONNECTION_HEADER_SOURCES = [
|
|
|
913
915
|
["cf-ipcountry", "x-vercel-ip-country", "cloudfront-viewer-country", "fastly-geo-country"]
|
|
914
916
|
],
|
|
915
917
|
["region", ["x-vercel-ip-country-region", "cloudfront-viewer-country-region"]],
|
|
918
|
+
["countryRegionName", ["cloudfront-viewer-country-region-name"]],
|
|
916
919
|
["city", ["x-vercel-ip-city", "cloudfront-viewer-city"]],
|
|
917
920
|
["asn", ["cloudfront-viewer-asn"]],
|
|
918
921
|
["tlsVersion", ["cloudfront-viewer-tls"]],
|
|
919
922
|
["httpVersion", ["cloudfront-viewer-http-version"]],
|
|
923
|
+
["timeZone", ["x-vercel-ip-timezone", "cloudfront-viewer-time-zone"]],
|
|
924
|
+
["metroCode", ["cloudfront-viewer-metro-code"]],
|
|
920
925
|
// TLS fingerprints can only be computed where TLS terminates. When a CDN
|
|
921
926
|
// terminates TLS in front of the merchant, its fingerprint headers ARE the
|
|
922
927
|
// connection-layer truth — normalising them here is the permanent design.
|
|
923
|
-
|
|
924
|
-
|
|
928
|
+
// CloudFront delivers JA3/JA4 only via an origin request policy and only
|
|
929
|
+
// for HTTPS viewer connections.
|
|
930
|
+
["tlsFingerprint", ["cf-ja3-hash", "cloudfront-viewer-ja3-fingerprint"]],
|
|
931
|
+
["ja4", ["cf-ja4", "cloudfront-viewer-ja4-fingerprint"]],
|
|
932
|
+
// Header-structure fingerprint: browser/SDK-distinctive header ordering.
|
|
933
|
+
["headerOrder", ["cloudfront-viewer-header-order"]],
|
|
934
|
+
["headerCount", ["cloudfront-viewer-header-count"]]
|
|
925
935
|
];
|
|
936
|
+
var MAX_CONNECTION_VALUE_CHARS = 256;
|
|
926
937
|
function deriveConnectionFromHeaders(headers) {
|
|
927
938
|
if (!headers) return void 0;
|
|
928
939
|
const lower = {};
|
|
@@ -935,11 +946,15 @@ function deriveConnectionFromHeaders(headers) {
|
|
|
935
946
|
for (const source of sources) {
|
|
936
947
|
const value = lower[source]?.trim();
|
|
937
948
|
if (value) {
|
|
938
|
-
connection[key] = value;
|
|
949
|
+
connection[key] = value.slice(0, MAX_CONNECTION_VALUE_CHARS);
|
|
939
950
|
break;
|
|
940
951
|
}
|
|
941
952
|
}
|
|
942
953
|
}
|
|
954
|
+
if (!connection.ip) {
|
|
955
|
+
const addr = lower["cloudfront-viewer-address"]?.trim();
|
|
956
|
+
if (addr) connection.ip = addr.replace(/:\d+$/, "");
|
|
957
|
+
}
|
|
943
958
|
if (!connection.ip) {
|
|
944
959
|
const xff = lower["x-forwarded-for"];
|
|
945
960
|
const client = xff?.split(",")[0]?.trim();
|
|
@@ -1352,6 +1367,31 @@ function annotateApprovalRequired(result) {
|
|
|
1352
1367
|
result.denialReasons = [APPROVAL_REASON, ...result.denialReasons ?? []];
|
|
1353
1368
|
}
|
|
1354
1369
|
|
|
1370
|
+
// src/verified-hop.ts
|
|
1371
|
+
var MCP_VERIFIED_HOP_HEADER = "X-Astra-Verified-Hop";
|
|
1372
|
+
var MCP_VERIFIED_HOP_MAX_AGE_MS = 6e4;
|
|
1373
|
+
function parseVerifiedHop(value) {
|
|
1374
|
+
if (!value) return null;
|
|
1375
|
+
const parts = value.split(";");
|
|
1376
|
+
if (parts.length !== 3) return null;
|
|
1377
|
+
const [astraId, sessionId, checkedAtRaw] = parts;
|
|
1378
|
+
if (!astraId) return null;
|
|
1379
|
+
const checkedAt = Number(checkedAtRaw);
|
|
1380
|
+
if (!Number.isFinite(checkedAt) || checkedAt <= 0) return null;
|
|
1381
|
+
return {
|
|
1382
|
+
astraId,
|
|
1383
|
+
...sessionId ? { sessionId } : {},
|
|
1384
|
+
checkedAt
|
|
1385
|
+
};
|
|
1386
|
+
}
|
|
1387
|
+
function isVerifiedHopValidFor(marker, expectedAstraId, opts = {}) {
|
|
1388
|
+
if (!marker) return false;
|
|
1389
|
+
if (marker.astraId !== expectedAstraId) return false;
|
|
1390
|
+
const maxAge = opts.maxAgeMs ?? MCP_VERIFIED_HOP_MAX_AGE_MS;
|
|
1391
|
+
const now = opts.now ?? Date.now();
|
|
1392
|
+
return now - marker.checkedAt <= maxAge && now >= marker.checkedAt;
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1355
1395
|
// src/adapters/nextjs.ts
|
|
1356
1396
|
function escapeHtml(value) {
|
|
1357
1397
|
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
@@ -1590,6 +1630,8 @@ function createMiddleware(options) {
|
|
|
1590
1630
|
enableRuntimeChallenge = true,
|
|
1591
1631
|
routesRefreshMs = DEFAULT_ROUTES_REFRESH_MS,
|
|
1592
1632
|
anonymousBeacon = true,
|
|
1633
|
+
trustVerifiedHop = false,
|
|
1634
|
+
verifiedHopMaxAgeMs,
|
|
1593
1635
|
...config
|
|
1594
1636
|
} = options;
|
|
1595
1637
|
const interstitialEnabled = showInterstitial ?? showCommerceShield ?? true;
|
|
@@ -1652,6 +1694,14 @@ function createMiddleware(options) {
|
|
|
1652
1694
|
return NextResponse.next();
|
|
1653
1695
|
}
|
|
1654
1696
|
const credentials = extractCredentialsFromNextRequest(request);
|
|
1697
|
+
if (trustVerifiedHop && credentials.astraId) {
|
|
1698
|
+
const marker = parseVerifiedHop(request.headers.get(MCP_VERIFIED_HOP_HEADER) ?? void 0);
|
|
1699
|
+
if (isVerifiedHopValidFor(marker, credentials.astraId, {
|
|
1700
|
+
...verifiedHopMaxAgeMs !== void 0 ? { maxAgeMs: verifiedHopMaxAgeMs } : {}
|
|
1701
|
+
})) {
|
|
1702
|
+
return NextResponse.next();
|
|
1703
|
+
}
|
|
1704
|
+
}
|
|
1655
1705
|
const counterpartyUrl = config.counterpartyUrl || request.nextUrl.origin;
|
|
1656
1706
|
const pdlssPair = resolveNextPdlss(request, routeConfig);
|
|
1657
1707
|
const purpose = pdlssPair.purpose;
|