@astrasyncai/verification-gateway 3.7.1 → 3.9.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 +99 -11
- 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 +2 -1
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +2 -1
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/http-pdlss.d.mts +81 -0
- package/dist/adapters/http-pdlss.d.ts +81 -0
- package/dist/adapters/http-pdlss.js +117 -0
- package/dist/adapters/http-pdlss.js.map +1 -0
- package/dist/adapters/http-pdlss.mjs +87 -0
- package/dist/adapters/http-pdlss.mjs.map +1 -0
- package/dist/adapters/mcp.d.mts +1 -1
- package/dist/adapters/mcp.d.ts +1 -1
- package/dist/adapters/mcp.js +2 -1
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +2 -1
- 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 +2 -1
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +2 -1
- 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/adapters/sdk.js +2 -1
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +2 -1
- package/dist/adapters/sdk.mjs.map +1 -1
- package/dist/agent/index.d.mts +2 -2
- package/dist/agent/index.d.ts +2 -2
- package/dist/bin/astrasync-claude-hook.js +14 -1
- package/dist/bin/astrasync-guard.js +14 -1
- package/dist/bin/astrasync.js +31 -1
- package/dist/browser/background.js +14 -1
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +14 -1
- 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/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 +14 -1
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +14 -1
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/edge-config.d.mts +130 -0
- package/dist/edge-config.d.ts +130 -0
- package/dist/edge-config.js +162 -0
- package/dist/edge-config.js.map +1 -0
- package/dist/edge-config.mjs +131 -0
- package/dist/edge-config.mjs.map +1 -0
- package/dist/{express-BnMO-H3y.d.mts → express-DXUyvv7t.d.mts} +1 -1
- package/dist/{express-DQhDzNAt.d.ts → express-sGXhDdd0.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 +14 -1
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +14 -1
- 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-D8-dvUFA.d.ts → index-C61VL_OW.d.ts} +1 -1
- package/dist/{index-rftma0ln.d.ts → index-CMg-vjEK.d.ts} +1 -1
- package/dist/{index-WHKq2v17.d.mts → index-Dalih3EB.d.mts} +1 -1
- package/dist/{index-BT_aRn-I.d.mts → index-DmmdehNu.d.mts} +1 -1
- package/dist/index.d.mts +26 -82
- package/dist/index.d.ts +26 -82
- package/dist/index.js +226 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +215 -10
- 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/{nextjs-DPj7ZNlq.d.ts → nextjs-DwUW-Nm1.d.ts} +1 -1
- package/dist/{nextjs-DFKYhxe6.d.mts → nextjs-F_2pbPIA.d.mts} +1 -1
- package/dist/platform-signatures.d.mts +47 -0
- package/dist/platform-signatures.d.ts +47 -0
- package/dist/platform-signatures.js +89 -0
- package/dist/platform-signatures.js.map +1 -0
- package/dist/platform-signatures.mjs +63 -0
- package/dist/platform-signatures.mjs.map +1 -0
- package/dist/{sdk-CAcHgB5x.d.ts → sdk-CfHANs4A.d.ts} +1 -1
- package/dist/{sdk-Cy3wAmDt.d.mts → sdk-Clob2-0A.d.mts} +1 -1
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- package/dist/{types-CKe8O0lR.d.mts → types-ACMsV07B.d.mts} +112 -9
- package/dist/{types-CKe8O0lR.d.ts → types-ACMsV07B.d.ts} +112 -9
- package/dist/{types-B-ubjHER.d.mts → types-BtqUvK8v.d.mts} +1 -1
- package/dist/{types-Bgn5gxHQ.d.ts → types-DmSDgPpG.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 +144 -0
- package/dist/verify.d.ts +144 -0
- package/dist/verify.js +593 -0
- package/dist/verify.js.map +1 -0
- package/dist/verify.mjs +557 -0
- package/dist/verify.mjs.map +1 -0
- package/package.json +21 -1
package/dist/index.js
CHANGED
|
@@ -37,35 +37,46 @@ __export(src_exports, {
|
|
|
37
37
|
AstraSyncError: () => AstraSyncError,
|
|
38
38
|
AuthenticationError: () => AuthenticationError,
|
|
39
39
|
ChallengeHandler: () => ChallengeHandler,
|
|
40
|
+
DEFAULT_EDGE_CONFIG: () => DEFAULT_EDGE_CONFIG,
|
|
40
41
|
DEFAULT_TRUST_THRESHOLDS: () => DEFAULT_TRUST_THRESHOLDS,
|
|
41
42
|
KYDRequiredError: () => KYDRequiredError,
|
|
43
|
+
PLATFORM_AGENT_SIGNATURES: () => PLATFORM_AGENT_SIGNATURES,
|
|
42
44
|
RegistrationDeniedError: () => RegistrationDeniedError,
|
|
43
45
|
RegistrationExpiredError: () => RegistrationExpiredError,
|
|
44
46
|
RegistrationTimeoutError: () => RegistrationTimeoutError,
|
|
45
47
|
TRUST_LEVEL_RANGES: () => TRUST_LEVEL_RANGES,
|
|
46
|
-
VERSION: () =>
|
|
48
|
+
VERSION: () => SDK_VERSION,
|
|
49
|
+
_resetEdgeConfigCache: () => _resetEdgeConfigCache,
|
|
47
50
|
agent: () => agent_exports,
|
|
48
51
|
authorizeSettlement: () => authorizeSettlement,
|
|
49
52
|
awaitStepUpApproval: () => awaitStepUpApproval,
|
|
50
53
|
buildGuidance: () => buildGuidance,
|
|
51
54
|
clearCache: () => clearCache,
|
|
52
55
|
createMcpMiddleware: () => createMcpMiddleware,
|
|
56
|
+
degradeToObserve: () => degradeToObserve,
|
|
57
|
+
detectPlatformFingerprint: () => detectPlatformFingerprint,
|
|
53
58
|
determineAccessLevel: () => determineAccessLevel,
|
|
54
59
|
express: () => express_exports,
|
|
55
60
|
extractCredentials: () => extractCredentials,
|
|
56
61
|
extractMcpCredentials: () => extractMcpCredentials,
|
|
62
|
+
fetchEdgeConfig: () => fetchEdgeConfig,
|
|
63
|
+
fetchRoutes: () => fetchRoutes,
|
|
57
64
|
getAccessLevelForScore: () => getAccessLevelForScore,
|
|
58
65
|
getCachedWellKnownUrls: () => getCachedWellKnownUrls,
|
|
59
66
|
getCapabilities: () => getCapabilities,
|
|
67
|
+
getEdgeConfig: () => getEdgeConfig,
|
|
60
68
|
getTrustLevel: () => getTrustLevel,
|
|
61
69
|
getWellKnownUrls: () => getWellKnownUrls,
|
|
62
70
|
hasCredentials: () => hasCredentials,
|
|
63
71
|
hasMinimumAccess: () => hasMinimumAccess,
|
|
72
|
+
isEdgeConfig: () => isEdgeConfig,
|
|
73
|
+
matchEdgePathRule: () => matchEdgePathRule,
|
|
64
74
|
nextjs: () => nextjs_exports,
|
|
65
75
|
pollStepUpStatus: () => pollStepUpStatus,
|
|
66
76
|
prefetchWellKnown: () => prefetchWellKnown,
|
|
67
77
|
quickVerify: () => quickVerify,
|
|
68
78
|
recordDecision: () => recordDecision2,
|
|
79
|
+
reportUnregisteredAttempt: () => reportUnregisteredAttempt,
|
|
69
80
|
sdk: () => sdk_exports,
|
|
70
81
|
setMcpMeta: () => setMcpMeta,
|
|
71
82
|
transport: () => transport_exports,
|
|
@@ -195,7 +206,7 @@ function getCapabilities(accessLevel) {
|
|
|
195
206
|
}
|
|
196
207
|
|
|
197
208
|
// src/version.ts
|
|
198
|
-
var SDK_VERSION = "3.
|
|
209
|
+
var SDK_VERSION = "3.9.0";
|
|
199
210
|
|
|
200
211
|
// src/well-known.ts
|
|
201
212
|
var CACHE_TTL_MS = 60 * 60 * 1e3;
|
|
@@ -482,6 +493,7 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
482
493
|
if (requestData.runtimeChallengeOptions)
|
|
483
494
|
body.runtimeChallengeOptions = requestData.runtimeChallengeOptions;
|
|
484
495
|
if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
|
|
496
|
+
if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
|
|
485
497
|
body.sdkVersion = SDK_VERSION;
|
|
486
498
|
if (requestData.callerMetadata || requestData.clientIp || requestData.userAgent) {
|
|
487
499
|
const meta = {
|
|
@@ -730,6 +742,21 @@ async function fetchRoutes(config, counterpartyId) {
|
|
|
730
742
|
return null;
|
|
731
743
|
}
|
|
732
744
|
}
|
|
745
|
+
async function reportUnregisteredAttempt(config, data) {
|
|
746
|
+
const apiBaseUrl = config.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl;
|
|
747
|
+
const { counterpartyUrl, ...rest } = data;
|
|
748
|
+
const body = {
|
|
749
|
+
...rest,
|
|
750
|
+
...counterpartyUrl && { counterpartyUrl },
|
|
751
|
+
...config.counterpartyId && { counterpartyId: config.counterpartyId }
|
|
752
|
+
};
|
|
753
|
+
await fetch(`${apiBaseUrl}/verification-activity/unregistered-attempt`, {
|
|
754
|
+
method: "POST",
|
|
755
|
+
headers: { "Content-Type": "application/json" },
|
|
756
|
+
body: JSON.stringify(body)
|
|
757
|
+
}).catch(() => {
|
|
758
|
+
});
|
|
759
|
+
}
|
|
733
760
|
async function reportCounterpartyPreCheckFailure(config, data) {
|
|
734
761
|
const apiBaseUrl = config.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl;
|
|
735
762
|
await fetch(`${apiBaseUrl}/verification-activity/counterparty-pre-check-failure`, {
|
|
@@ -4495,7 +4522,7 @@ async function exportJwkFromKeyLike(keyLike) {
|
|
|
4495
4522
|
|
|
4496
4523
|
// src/transport/registry/mastercard.ts
|
|
4497
4524
|
function createMastercardRegistry(options = {}) {
|
|
4498
|
-
const
|
|
4525
|
+
const cache3 = /* @__PURE__ */ new Map();
|
|
4499
4526
|
const ttlSec = options.cacheTtlSec ?? 3600;
|
|
4500
4527
|
const fetchFn = options.fetch ?? globalThis.fetch;
|
|
4501
4528
|
let warned = false;
|
|
@@ -4512,7 +4539,7 @@ function createMastercardRegistry(options = {}) {
|
|
|
4512
4539
|
}
|
|
4513
4540
|
return null;
|
|
4514
4541
|
}
|
|
4515
|
-
const cached =
|
|
4542
|
+
const cached = cache3.get(kid);
|
|
4516
4543
|
if (cached && cached.expiresAt > Date.now()) return cached.jwk;
|
|
4517
4544
|
try {
|
|
4518
4545
|
const res = await fetchFn(options.registryUrl);
|
|
@@ -4521,7 +4548,7 @@ function createMastercardRegistry(options = {}) {
|
|
|
4521
4548
|
const keys = body.keys ?? [];
|
|
4522
4549
|
for (const k of keys) {
|
|
4523
4550
|
if (k.kid === kid) {
|
|
4524
|
-
|
|
4551
|
+
cache3.set(kid, { jwk: k, expiresAt: Date.now() + ttlSec * 1e3 });
|
|
4525
4552
|
return k;
|
|
4526
4553
|
}
|
|
4527
4554
|
}
|
|
@@ -4536,7 +4563,7 @@ function createMastercardRegistry(options = {}) {
|
|
|
4536
4563
|
// src/transport/registry/web-bot-auth.ts
|
|
4537
4564
|
var DIRECTORY_PATH = "/.well-known/http-message-signatures-directory";
|
|
4538
4565
|
function createWebBotAuthRegistry(options = {}) {
|
|
4539
|
-
const
|
|
4566
|
+
const cache3 = /* @__PURE__ */ new Map();
|
|
4540
4567
|
const ttlSec = options.cacheTtlSec ?? 3600;
|
|
4541
4568
|
const fetchFn = options.fetch ?? globalThis.fetch;
|
|
4542
4569
|
return {
|
|
@@ -4545,7 +4572,7 @@ function createWebBotAuthRegistry(options = {}) {
|
|
|
4545
4572
|
if (!kid) return null;
|
|
4546
4573
|
const directoryUrl = resolveDirectoryUrl(options.directoryUrl, context?.origin);
|
|
4547
4574
|
if (!directoryUrl) return null;
|
|
4548
|
-
const cached =
|
|
4575
|
+
const cached = cache3.get(directoryUrl);
|
|
4549
4576
|
const now = Date.now();
|
|
4550
4577
|
if (cached && cached.expiresAt > now) {
|
|
4551
4578
|
return findKeyByKid(cached.keys, kid);
|
|
@@ -4555,7 +4582,7 @@ function createWebBotAuthRegistry(options = {}) {
|
|
|
4555
4582
|
if (!res.ok) return null;
|
|
4556
4583
|
const body = await res.json();
|
|
4557
4584
|
const keys = body.keys ?? [];
|
|
4558
|
-
|
|
4585
|
+
cache3.set(directoryUrl, { keys, expiresAt: now + ttlSec * 1e3 });
|
|
4559
4586
|
return findKeyByKid(keys, kid);
|
|
4560
4587
|
} catch {
|
|
4561
4588
|
return null;
|
|
@@ -5724,8 +5751,186 @@ async function recordDecision2(config, params) {
|
|
|
5724
5751
|
};
|
|
5725
5752
|
}
|
|
5726
5753
|
|
|
5727
|
-
// src/
|
|
5728
|
-
var
|
|
5754
|
+
// src/edge-config.ts
|
|
5755
|
+
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
5756
|
+
version: 1,
|
|
5757
|
+
mode: "observe",
|
|
5758
|
+
depth: "classify",
|
|
5759
|
+
pathRules: [],
|
|
5760
|
+
sampling: Object.freeze({ anonymousBeaconRate: 0.1 }),
|
|
5761
|
+
failurePosture: "open"
|
|
5762
|
+
});
|
|
5763
|
+
var EDGE_MODES = ["observe", "enforce"];
|
|
5764
|
+
var EDGE_DEPTHS = ["classify", "authenticate", "authorize"];
|
|
5765
|
+
function isEdgeConfig(value) {
|
|
5766
|
+
if (typeof value !== "object" || value === null) return false;
|
|
5767
|
+
const v = value;
|
|
5768
|
+
if (v.version !== 1) return false;
|
|
5769
|
+
if (!EDGE_MODES.includes(v.mode)) return false;
|
|
5770
|
+
if (!EDGE_DEPTHS.includes(v.depth)) return false;
|
|
5771
|
+
if (!Array.isArray(v.pathRules)) return false;
|
|
5772
|
+
for (const rule of v.pathRules) {
|
|
5773
|
+
if (typeof rule !== "object" || rule === null) return false;
|
|
5774
|
+
const r = rule;
|
|
5775
|
+
if (typeof r.pattern !== "string" || r.pattern.length === 0) return false;
|
|
5776
|
+
if (r.mode !== void 0 && !EDGE_MODES.includes(r.mode)) return false;
|
|
5777
|
+
if (r.depth !== void 0 && !EDGE_DEPTHS.includes(r.depth)) return false;
|
|
5778
|
+
}
|
|
5779
|
+
const sampling = v.sampling;
|
|
5780
|
+
if (typeof sampling !== "object" || sampling === null || typeof sampling.anonymousBeaconRate !== "number" || sampling.anonymousBeaconRate < 0 || sampling.anonymousBeaconRate > 1) {
|
|
5781
|
+
return false;
|
|
5782
|
+
}
|
|
5783
|
+
return v.failurePosture === "open";
|
|
5784
|
+
}
|
|
5785
|
+
async function fetchEdgeConfig(config, counterpartyId, opts) {
|
|
5786
|
+
if (!counterpartyId) return null;
|
|
5787
|
+
const headers = { Accept: "application/json" };
|
|
5788
|
+
if (config.apiKey) {
|
|
5789
|
+
headers["Authorization"] = `Bearer ${config.apiKey}`;
|
|
5790
|
+
headers["X-API-Key"] = config.apiKey;
|
|
5791
|
+
}
|
|
5792
|
+
if (opts?.etag) headers["If-None-Match"] = opts.etag;
|
|
5793
|
+
try {
|
|
5794
|
+
const response = await fetch(
|
|
5795
|
+
`${config.apiBaseUrl}/endpoints/${encodeURIComponent(counterpartyId)}/edge-config`,
|
|
5796
|
+
{ method: "GET", headers, signal: AbortSignal.timeout(opts?.timeoutMs ?? 5e3) }
|
|
5797
|
+
);
|
|
5798
|
+
if (response.status === 304) return { notModified: true };
|
|
5799
|
+
if (!response.ok) return null;
|
|
5800
|
+
const body = await response.json();
|
|
5801
|
+
const edgeConfig = body.data?.edgeConfig;
|
|
5802
|
+
if (!isEdgeConfig(edgeConfig)) return null;
|
|
5803
|
+
return { edgeConfig, etag: response.headers.get("etag") ?? void 0 };
|
|
5804
|
+
} catch {
|
|
5805
|
+
return null;
|
|
5806
|
+
}
|
|
5807
|
+
}
|
|
5808
|
+
var DEFAULT_TTL_MS = 60 * 1e3;
|
|
5809
|
+
var DEFAULT_MAX_STALE_MS = 24 * 60 * 60 * 1e3;
|
|
5810
|
+
var cache2 = /* @__PURE__ */ new Map();
|
|
5811
|
+
var inflight2 = /* @__PURE__ */ new Map();
|
|
5812
|
+
function cacheKey(apiBaseUrl, counterpartyId) {
|
|
5813
|
+
return `${apiBaseUrl}|${counterpartyId}`;
|
|
5814
|
+
}
|
|
5815
|
+
function degradeToObserve(config) {
|
|
5816
|
+
if (config.mode !== "enforce" && !config.pathRules.some((r) => r.mode === "enforce")) {
|
|
5817
|
+
return config;
|
|
5818
|
+
}
|
|
5819
|
+
return {
|
|
5820
|
+
...config,
|
|
5821
|
+
mode: "observe",
|
|
5822
|
+
pathRules: config.pathRules.map((r) => r.mode === "enforce" ? { ...r, mode: "observe" } : r)
|
|
5823
|
+
};
|
|
5824
|
+
}
|
|
5825
|
+
async function revalidate(config, counterpartyId) {
|
|
5826
|
+
const key = cacheKey(config.apiBaseUrl, counterpartyId);
|
|
5827
|
+
const existing = inflight2.get(key);
|
|
5828
|
+
if (existing) return existing;
|
|
5829
|
+
const promise = fetchEdgeConfig(config, counterpartyId, { etag: cache2.get(key)?.etag }).then((result) => {
|
|
5830
|
+
if (result === null) return;
|
|
5831
|
+
const now = Date.now();
|
|
5832
|
+
if ("notModified" in result) {
|
|
5833
|
+
const entry = cache2.get(key);
|
|
5834
|
+
if (entry) entry.lastSuccessAt = now;
|
|
5835
|
+
return;
|
|
5836
|
+
}
|
|
5837
|
+
cache2.set(key, { config: result.edgeConfig, etag: result.etag, lastSuccessAt: now });
|
|
5838
|
+
}).finally(() => {
|
|
5839
|
+
inflight2.delete(key);
|
|
5840
|
+
});
|
|
5841
|
+
inflight2.set(key, promise);
|
|
5842
|
+
return promise;
|
|
5843
|
+
}
|
|
5844
|
+
async function getEdgeConfig(config, counterpartyId, opts) {
|
|
5845
|
+
const ttlMs = opts?.ttlMs ?? DEFAULT_TTL_MS;
|
|
5846
|
+
const maxStaleMs = opts?.maxStaleMs ?? DEFAULT_MAX_STALE_MS;
|
|
5847
|
+
const key = cacheKey(config.apiBaseUrl, counterpartyId);
|
|
5848
|
+
const entry = cache2.get(key);
|
|
5849
|
+
if (entry) {
|
|
5850
|
+
const age = Date.now() - entry.lastSuccessAt;
|
|
5851
|
+
if (age > ttlMs) {
|
|
5852
|
+
revalidate(config, counterpartyId).catch(() => {
|
|
5853
|
+
});
|
|
5854
|
+
}
|
|
5855
|
+
return age > maxStaleMs ? degradeToObserve(entry.config) : entry.config;
|
|
5856
|
+
}
|
|
5857
|
+
await revalidate(config, counterpartyId).catch(() => {
|
|
5858
|
+
});
|
|
5859
|
+
return cache2.get(key)?.config ?? DEFAULT_EDGE_CONFIG;
|
|
5860
|
+
}
|
|
5861
|
+
function matchEdgePathRule(rules, path) {
|
|
5862
|
+
for (const rule of rules) {
|
|
5863
|
+
if (globToRegExp(rule.pattern).test(path)) return rule;
|
|
5864
|
+
}
|
|
5865
|
+
return void 0;
|
|
5866
|
+
}
|
|
5867
|
+
function globToRegExp(pattern) {
|
|
5868
|
+
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
|
|
5869
|
+
return new RegExp(`^${escaped}$`, "i");
|
|
5870
|
+
}
|
|
5871
|
+
function _resetEdgeConfigCache() {
|
|
5872
|
+
cache2.clear();
|
|
5873
|
+
inflight2.clear();
|
|
5874
|
+
}
|
|
5875
|
+
|
|
5876
|
+
// src/platform-signatures.ts
|
|
5877
|
+
var PLATFORM_AGENT_SIGNATURES = [
|
|
5878
|
+
{
|
|
5879
|
+
vendor: "claude",
|
|
5880
|
+
displayName: "Anthropic Claude",
|
|
5881
|
+
uaPatterns: [/claude/i, /anthropic/i],
|
|
5882
|
+
agentCardPatterns: [/anthropic\.com/i, /claude\.ai/i]
|
|
5883
|
+
},
|
|
5884
|
+
{
|
|
5885
|
+
vendor: "chatgpt",
|
|
5886
|
+
displayName: "OpenAI ChatGPT",
|
|
5887
|
+
uaPatterns: [/chatgpt/i, /openai/i, /gpt-?\d/i],
|
|
5888
|
+
agentCardPatterns: [/openai\.com/i, /chatgpt\.com/i]
|
|
5889
|
+
},
|
|
5890
|
+
{
|
|
5891
|
+
vendor: "gemini",
|
|
5892
|
+
displayName: "Google Gemini",
|
|
5893
|
+
uaPatterns: [/gemini/i, /google-gemini/i, /bard/i],
|
|
5894
|
+
agentCardPatterns: [/gemini\.google\.com/i, /ai\.google\.dev/i]
|
|
5895
|
+
},
|
|
5896
|
+
{
|
|
5897
|
+
vendor: "cursor",
|
|
5898
|
+
displayName: "Cursor",
|
|
5899
|
+
uaPatterns: [/cursor/i],
|
|
5900
|
+
agentCardPatterns: [/cursor\.sh/i, /cursor\.com/i]
|
|
5901
|
+
},
|
|
5902
|
+
{
|
|
5903
|
+
vendor: "goose",
|
|
5904
|
+
displayName: "Block Goose",
|
|
5905
|
+
uaPatterns: [/goose/i, /block-goose/i],
|
|
5906
|
+
agentCardPatterns: [/block\.xyz\/goose/i, /goose\.tools/i]
|
|
5907
|
+
}
|
|
5908
|
+
];
|
|
5909
|
+
function detectPlatformFingerprint(input) {
|
|
5910
|
+
const ua = input.userAgent ?? "";
|
|
5911
|
+
const cardUrl = input.agentCardUrl ?? "";
|
|
5912
|
+
for (const sig of PLATFORM_AGENT_SIGNATURES) {
|
|
5913
|
+
const uaMatch = sig.uaPatterns?.some((p) => p.test(ua));
|
|
5914
|
+
const cardMatch = sig.agentCardPatterns?.some((p) => p.test(cardUrl));
|
|
5915
|
+
if (uaMatch || cardMatch) {
|
|
5916
|
+
const uaBase = ua.split(/[\s/]/)[0]?.toLowerCase() ?? "";
|
|
5917
|
+
const cardHost = (() => {
|
|
5918
|
+
try {
|
|
5919
|
+
return cardUrl ? new URL(cardUrl).host : "";
|
|
5920
|
+
} catch {
|
|
5921
|
+
return "";
|
|
5922
|
+
}
|
|
5923
|
+
})();
|
|
5924
|
+
const fingerprintKey = `${sig.vendor}:${uaBase || cardHost || "unknown"}`;
|
|
5925
|
+
return {
|
|
5926
|
+
vendor: sig.vendor,
|
|
5927
|
+
fingerprintKey,
|
|
5928
|
+
displayName: sig.displayName
|
|
5929
|
+
};
|
|
5930
|
+
}
|
|
5931
|
+
}
|
|
5932
|
+
return void 0;
|
|
5933
|
+
}
|
|
5729
5934
|
// Annotate the CommonJS export names for ESM import in node:
|
|
5730
5935
|
0 && (module.exports = {
|
|
5731
5936
|
ACCESS_LEVEL_DESCRIPTIONS,
|
|
@@ -5735,35 +5940,46 @@ var VERSION = "3.4.0";
|
|
|
5735
5940
|
AstraSyncError,
|
|
5736
5941
|
AuthenticationError,
|
|
5737
5942
|
ChallengeHandler,
|
|
5943
|
+
DEFAULT_EDGE_CONFIG,
|
|
5738
5944
|
DEFAULT_TRUST_THRESHOLDS,
|
|
5739
5945
|
KYDRequiredError,
|
|
5946
|
+
PLATFORM_AGENT_SIGNATURES,
|
|
5740
5947
|
RegistrationDeniedError,
|
|
5741
5948
|
RegistrationExpiredError,
|
|
5742
5949
|
RegistrationTimeoutError,
|
|
5743
5950
|
TRUST_LEVEL_RANGES,
|
|
5744
5951
|
VERSION,
|
|
5952
|
+
_resetEdgeConfigCache,
|
|
5745
5953
|
agent,
|
|
5746
5954
|
authorizeSettlement,
|
|
5747
5955
|
awaitStepUpApproval,
|
|
5748
5956
|
buildGuidance,
|
|
5749
5957
|
clearCache,
|
|
5750
5958
|
createMcpMiddleware,
|
|
5959
|
+
degradeToObserve,
|
|
5960
|
+
detectPlatformFingerprint,
|
|
5751
5961
|
determineAccessLevel,
|
|
5752
5962
|
express,
|
|
5753
5963
|
extractCredentials,
|
|
5754
5964
|
extractMcpCredentials,
|
|
5965
|
+
fetchEdgeConfig,
|
|
5966
|
+
fetchRoutes,
|
|
5755
5967
|
getAccessLevelForScore,
|
|
5756
5968
|
getCachedWellKnownUrls,
|
|
5757
5969
|
getCapabilities,
|
|
5970
|
+
getEdgeConfig,
|
|
5758
5971
|
getTrustLevel,
|
|
5759
5972
|
getWellKnownUrls,
|
|
5760
5973
|
hasCredentials,
|
|
5761
5974
|
hasMinimumAccess,
|
|
5975
|
+
isEdgeConfig,
|
|
5976
|
+
matchEdgePathRule,
|
|
5762
5977
|
nextjs,
|
|
5763
5978
|
pollStepUpStatus,
|
|
5764
5979
|
prefetchWellKnown,
|
|
5765
5980
|
quickVerify,
|
|
5766
5981
|
recordDecision,
|
|
5982
|
+
reportUnregisteredAttempt,
|
|
5767
5983
|
sdk,
|
|
5768
5984
|
setMcpMeta,
|
|
5769
5985
|
transport,
|