@astrasyncai/verification-gateway 4.6.0 → 5.1.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/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 +25 -35
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +25 -35
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +2 -2
- package/dist/adapters/mcp.d.ts +2 -2
- package/dist/adapters/mcp.js +42 -67
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +41 -66
- 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 +23 -32
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +23 -32
- 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 +22 -126
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +22 -124
- 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/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 +23 -31
- package/dist/bin/astrasync-codex-hook.js +23 -31
- package/dist/bin/astrasync-guard.js +23 -31
- package/dist/bin/astrasync.js +28 -36
- package/dist/browser/background.js +23 -31
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +23 -31
- 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/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.d.mts +2 -2
- package/dist/codex/index.d.ts +2 -2
- package/dist/codex/index.js +23 -31
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +23 -31
- 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 +23 -31
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +23 -31
- 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-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 +12 -3
- package/dist/edge-core/index.d.ts +12 -3
- package/dist/edge-core/index.js +42 -36
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +42 -36
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/{express-DBtPKXOL.d.mts → express-KkBZBMqi.d.mts} +1 -1
- package/dist/{express-D-8Ks2Uo.d.ts → express-xK8pRrmj.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 +23 -31
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +23 -31
- 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-kGCGWd5x.d.mts → index-DIRzR5IS.d.mts} +1 -1
- package/dist/{index-DlZORQsb.d.ts → index-DLQ4Rcuc.d.ts} +1 -1
- package/dist/{index-CUfmJ1Dq.d.mts → index-GPDn_EGI.d.mts} +1 -1
- package/dist/{index-BND3kQev.d.ts → index-Hnz5VyMR.d.ts} +1 -1
- package/dist/index.d.mts +14 -10
- package/dist/index.d.ts +14 -10
- package/dist/index.js +44 -219
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +44 -212
- 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/local-evaluator/evaluator.js.map +1 -1
- package/dist/local-evaluator/evaluator.mjs.map +1 -1
- package/dist/{mcp-DToTlwIn.d.ts → mcp-DPpu4xQz.d.ts} +53 -52
- package/dist/{mcp-ZRN4kY3b.d.mts → mcp-Dju_Sr1o.d.mts} +53 -52
- package/dist/{nextjs-C0KASOy_.d.mts → nextjs-BuoDBN4g.d.mts} +1 -1
- package/dist/{nextjs-lwNvWYWT.d.ts → nextjs-rZKzY_8o.d.ts} +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/sdk-CdO6TIEf.d.mts +142 -0
- package/dist/sdk-DxHuIJBm.d.ts +142 -0
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- 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/{types-DhhJxKIC.d.ts → types-3UV7IZx7.d.ts} +1 -3
- package/dist/{types-CGPU7HLi.d.ts → types-CNBaZKxY.d.ts} +24 -50
- package/dist/{types-Cx9hTpKI.d.mts → types-CSHcByFX.d.mts} +24 -50
- package/dist/{types-CfSJLS4i.d.mts → types-CoDjpbVY.d.mts} +1 -3
- package/dist/ui/index.d.mts +2 -17
- package/dist/ui/index.d.ts +2 -17
- package/dist/ui/index.js +1 -43
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +1 -42
- package/dist/ui/index.mjs.map +1 -1
- package/dist/verify.d.mts +3 -4
- package/dist/verify.d.ts +3 -4
- package/dist/verify.js +22 -30
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +22 -30
- package/dist/verify.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/sdk-B4aodEwj.d.ts +0 -215
- package/dist/sdk-B9dSwum7.d.mts +0 -215
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/version.ts
|
|
2
|
-
var SDK_VERSION = "
|
|
2
|
+
var SDK_VERSION = "5.0.0";
|
|
3
3
|
|
|
4
4
|
// src/http.ts
|
|
5
5
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -77,7 +77,7 @@ async function awaitStepUpApproval(config, approval) {
|
|
|
77
77
|
return "timeout";
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
// src/
|
|
80
|
+
// src/trust-levels.ts
|
|
81
81
|
function getTrustLevel(score) {
|
|
82
82
|
if (score >= 80) return "PLATINUM";
|
|
83
83
|
if (score >= 60) return "GOLD";
|
|
@@ -147,11 +147,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
|
|
|
147
147
|
// src/verify.ts
|
|
148
148
|
var DEFAULT_CONFIG = {
|
|
149
149
|
apiBaseUrl: "https://astrasync.ai/api",
|
|
150
|
-
// v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
|
|
151
|
-
// access). Pre-rename this defaulted to `'guidance'`, which combined with
|
|
152
|
-
// a route gated at `'guidance'` to silently let unverified traffic
|
|
153
|
-
// through (`hasMinimumAccess('guidance', 'guidance') === true`).
|
|
154
|
-
defaultAccessLevel: "none",
|
|
155
150
|
// minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
|
|
156
151
|
// cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
|
|
157
152
|
// default; the caller's explicit value is honoured for cacheable results.
|
|
@@ -308,6 +303,14 @@ function extractCredentials(headers, query) {
|
|
|
308
303
|
}
|
|
309
304
|
return credentials;
|
|
310
305
|
}
|
|
306
|
+
function mcpGuidance(urls) {
|
|
307
|
+
if (!urls?.mcpEndpoint) return void 0;
|
|
308
|
+
return {
|
|
309
|
+
endpoint: urls.mcpEndpoint,
|
|
310
|
+
discoveryUrl: urls.mcpDiscoveryUrl,
|
|
311
|
+
message: "If you are operating inside an MCP-capable host (Claude, ChatGPT, Cursor, or any MCP client), add the AstraSync MCP connector instead of integrating these URLs by hand: registration through the connector is KEYLESS and HUMAN-APPROVED \u2014 your human approves in an in-chat card, and you never see, hold, or transmit an API key, password, or private key."
|
|
312
|
+
};
|
|
313
|
+
}
|
|
311
314
|
function createGuidanceResponse(_config, reason, options = {}) {
|
|
312
315
|
const source = options.source ?? "no_credentials";
|
|
313
316
|
const isApiError = source === "api_error";
|
|
@@ -334,11 +337,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
334
337
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
335
338
|
documentationUrl: urls?.documentationUrl ?? "",
|
|
336
339
|
steps: [
|
|
340
|
+
// MCP steering leads when the hosted bridge is advertised — the
|
|
341
|
+
// connector is the agent-actionable path (keyless, human-approved).
|
|
342
|
+
...urls?.mcpEndpoint ? [
|
|
343
|
+
`Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
|
|
344
|
+
] : [],
|
|
337
345
|
"Register for an AstraSync account",
|
|
338
346
|
"Create and register your agent",
|
|
339
347
|
"Add your ASTRA-ID to request headers",
|
|
340
348
|
"Retry your request"
|
|
341
|
-
]
|
|
349
|
+
],
|
|
350
|
+
...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
|
|
342
351
|
};
|
|
343
352
|
return {
|
|
344
353
|
// Round-18 G4: createGuidanceResponse fires for unverified-agent path or
|
|
@@ -346,13 +355,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
346
355
|
// policy is not evaluated (we never reached the gate).
|
|
347
356
|
identityVerified: false,
|
|
348
357
|
policyAllowed: false,
|
|
349
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
350
|
-
// Adapters additionally short-circuit on `!identityVerified ||
|
|
351
|
-
// !policyAllowed` before the gate check, but the access level still has
|
|
352
|
-
// to be honest at the data layer so downstream consumers (SDK adapters
|
|
353
|
-
// in other languages, custom integrations) inherit the correct
|
|
354
|
-
// semantics.
|
|
355
|
-
accessLevel: "none",
|
|
356
358
|
guidance,
|
|
357
359
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
358
360
|
// Round-10 (#47, O5): on API-error fallback, surface a typed failure so
|
|
@@ -446,7 +448,6 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
446
448
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
|
|
447
449
|
access: {
|
|
448
450
|
allowed: false,
|
|
449
|
-
accessLevel: "none",
|
|
450
451
|
reason: "endpoint_deactivated",
|
|
451
452
|
failures: [
|
|
452
453
|
{
|
|
@@ -509,7 +510,7 @@ async function verify(config, request, options) {
|
|
|
509
510
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
510
511
|
deprecationWarningShown = true;
|
|
511
512
|
console.warn(
|
|
512
|
-
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access
|
|
513
|
+
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access decisions (verified ID + runtime challenge + PDLSS + trust score). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
|
|
513
514
|
);
|
|
514
515
|
}
|
|
515
516
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
|
|
@@ -555,14 +556,6 @@ async function verify(config, request, options) {
|
|
|
555
556
|
const result2 = {
|
|
556
557
|
identityVerified: idVerifiedFromBackend,
|
|
557
558
|
policyAllowed: false,
|
|
558
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
559
|
-
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
560
|
-
// colocated `guidance: {...}` help-payload object below and let
|
|
561
|
-
// denied requests pass any route gated at `'guidance'` because
|
|
562
|
-
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
563
|
-
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
564
|
-
// the gate check — belt-and-braces.
|
|
565
|
-
accessLevel: "none",
|
|
566
559
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
567
560
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
568
561
|
// as the fallback for older backends.
|
|
@@ -573,7 +566,10 @@ async function verify(config, request, options) {
|
|
|
573
566
|
guidance: {
|
|
574
567
|
message: apiResponse.access?.reason || "Access denied by PDLSS policy",
|
|
575
568
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
576
|
-
documentationUrl: urls?.documentationUrl ?? ""
|
|
569
|
+
documentationUrl: urls?.documentationUrl ?? "",
|
|
570
|
+
// 5.1.0: anonymous callers land on this branch — steer MCP-hosted
|
|
571
|
+
// agents to the connector (this is what the edge deny body surfaces).
|
|
572
|
+
...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
|
|
577
573
|
},
|
|
578
574
|
verifiedAt: /* @__PURE__ */ new Date(),
|
|
579
575
|
// Extract sessionId so decisions can be recorded for denials too
|
|
@@ -611,7 +607,6 @@ async function verify(config, request, options) {
|
|
|
611
607
|
trustScore: apiResponse.organization.trustScore
|
|
612
608
|
} : void 0;
|
|
613
609
|
const verificationContext = apiResponse.verificationContext;
|
|
614
|
-
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
615
610
|
const result = {
|
|
616
611
|
// 4.5.0 (probe F1): read idVerified from verificationContext with the
|
|
617
612
|
// SAME absent⇒false default as the deny branch. The previous `!== false`
|
|
@@ -623,7 +618,6 @@ async function verify(config, request, options) {
|
|
|
623
618
|
// this load-bearing must never be defaulted on.
|
|
624
619
|
identityVerified: apiResponse.verificationContext?.idVerified === true,
|
|
625
620
|
policyAllowed: true,
|
|
626
|
-
accessLevel,
|
|
627
621
|
agent,
|
|
628
622
|
developer,
|
|
629
623
|
organization,
|
|
@@ -650,7 +644,6 @@ async function verify(config, request, options) {
|
|
|
650
644
|
};
|
|
651
645
|
if (result.recommendation === "deny") {
|
|
652
646
|
result.policyAllowed = false;
|
|
653
|
-
result.accessLevel = "none";
|
|
654
647
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
|
|
655
648
|
result.guidance = result.runtimeChallenge ? {
|
|
656
649
|
message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
|
|
@@ -1590,7 +1583,6 @@ function defaultOnDenied(result, _req, res) {
|
|
|
1590
1583
|
error: {
|
|
1591
1584
|
code: !result.identityVerified ? "UNAUTHORIZED" : "INSUFFICIENT_ACCESS",
|
|
1592
1585
|
message: result.denialReasons?.[0] || "Access denied",
|
|
1593
|
-
accessLevel: result.accessLevel,
|
|
1594
1586
|
guidance: result.guidance,
|
|
1595
1587
|
// Round-10: aggregated per-dimension detail + correlation handle.
|
|
1596
1588
|
failures: result.failures,
|
|
@@ -1706,11 +1698,11 @@ function createMiddleware(options) {
|
|
|
1706
1698
|
}
|
|
1707
1699
|
const wellKnownUrls = config.apiBaseUrl ? await getWellKnownUrls(config.apiBaseUrl).catch(() => void 0) : void 0;
|
|
1708
1700
|
const credentials = customExtractCredentials ? customExtractCredentials(req) : defaultExtractCredentials(req);
|
|
1709
|
-
const shouldEnforce = routeConfig.
|
|
1710
|
-
if (routeConfig.
|
|
1701
|
+
const shouldEnforce = !routeConfig.observe;
|
|
1702
|
+
if (routeConfig.observe && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
|
|
1711
1703
|
if (config.setPassThroughHeader) {
|
|
1712
1704
|
res.setHeader("X-Astra-Gateway-Mode", "unenforced");
|
|
1713
|
-
res.setHeader("X-Astra-Gateway-Reason", "route-
|
|
1705
|
+
res.setHeader("X-Astra-Gateway-Reason", "route-observe");
|
|
1714
1706
|
}
|
|
1715
1707
|
beaconPassThrough?.(req);
|
|
1716
1708
|
return next();
|
|
@@ -1747,7 +1739,6 @@ function createMiddleware(options) {
|
|
|
1747
1739
|
const result2 = {
|
|
1748
1740
|
identityVerified: false,
|
|
1749
1741
|
policyAllowed: false,
|
|
1750
|
-
accessLevel: "none",
|
|
1751
1742
|
denialReasons: preCheckFailures.map((f) => f.message),
|
|
1752
1743
|
guidance: {
|
|
1753
1744
|
message: "Request exceeds counterparty-defined PDLSS limits.",
|
|
@@ -1910,7 +1901,6 @@ function createMiddleware(options) {
|
|
|
1910
1901
|
const result = {
|
|
1911
1902
|
identityVerified: false,
|
|
1912
1903
|
policyAllowed: false,
|
|
1913
|
-
accessLevel: "none",
|
|
1914
1904
|
denialReasons: [`Verification middleware internal error: ${errorClass}`],
|
|
1915
1905
|
failures: [
|
|
1916
1906
|
{
|