@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,6 +1,6 @@
|
|
|
1
1
|
import { AstraSyncGateway } from '../gateway/gateway.mjs';
|
|
2
|
-
import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-
|
|
3
|
-
import '../types-
|
|
2
|
+
import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-CoDjpbVY.mjs';
|
|
3
|
+
import '../types-CSHcByFX.mjs';
|
|
4
4
|
import '../metadata-capture.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AstraSyncGateway } from '../gateway/gateway.js';
|
|
2
|
-
import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-
|
|
3
|
-
import '../types-
|
|
2
|
+
import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-3UV7IZx7.js';
|
|
3
|
+
import '../types-CNBaZKxY.js';
|
|
4
4
|
import '../metadata-capture.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import 'express';
|
|
2
|
-
import '../types-
|
|
3
|
-
export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-
|
|
2
|
+
import '../types-CSHcByFX.mjs';
|
|
3
|
+
export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-KkBZBMqi.mjs';
|
|
4
4
|
import '../metadata-capture.mjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import 'express';
|
|
2
|
-
import '../types-
|
|
3
|
-
export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-
|
|
2
|
+
import '../types-CNBaZKxY.js';
|
|
3
|
+
export { c as createMiddleware, a as extractAstraSyncCredentials } from '../express-xK8pRrmj.js';
|
|
4
4
|
import '../metadata-capture.js';
|
package/dist/adapters/express.js
CHANGED
|
@@ -26,7 +26,7 @@ __export(express_exports, {
|
|
|
26
26
|
module.exports = __toCommonJS(express_exports);
|
|
27
27
|
|
|
28
28
|
// src/version.ts
|
|
29
|
-
var SDK_VERSION = "
|
|
29
|
+
var SDK_VERSION = "5.0.0";
|
|
30
30
|
|
|
31
31
|
// src/http.ts
|
|
32
32
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -104,7 +104,7 @@ async function awaitStepUpApproval(config, approval) {
|
|
|
104
104
|
return "timeout";
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
// src/
|
|
107
|
+
// src/trust-levels.ts
|
|
108
108
|
function getTrustLevel(score) {
|
|
109
109
|
if (score >= 80) return "PLATINUM";
|
|
110
110
|
if (score >= 60) return "GOLD";
|
|
@@ -174,11 +174,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
|
|
|
174
174
|
// src/verify.ts
|
|
175
175
|
var DEFAULT_CONFIG = {
|
|
176
176
|
apiBaseUrl: "https://astrasync.ai/api",
|
|
177
|
-
// v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
|
|
178
|
-
// access). Pre-rename this defaulted to `'guidance'`, which combined with
|
|
179
|
-
// a route gated at `'guidance'` to silently let unverified traffic
|
|
180
|
-
// through (`hasMinimumAccess('guidance', 'guidance') === true`).
|
|
181
|
-
defaultAccessLevel: "none",
|
|
182
177
|
// minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
|
|
183
178
|
// cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
|
|
184
179
|
// default; the caller's explicit value is honoured for cacheable results.
|
|
@@ -335,6 +330,14 @@ function extractCredentials(headers, query) {
|
|
|
335
330
|
}
|
|
336
331
|
return credentials;
|
|
337
332
|
}
|
|
333
|
+
function mcpGuidance(urls) {
|
|
334
|
+
if (!urls?.mcpEndpoint) return void 0;
|
|
335
|
+
return {
|
|
336
|
+
endpoint: urls.mcpEndpoint,
|
|
337
|
+
discoveryUrl: urls.mcpDiscoveryUrl,
|
|
338
|
+
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."
|
|
339
|
+
};
|
|
340
|
+
}
|
|
338
341
|
function createGuidanceResponse(_config, reason, options = {}) {
|
|
339
342
|
const source = options.source ?? "no_credentials";
|
|
340
343
|
const isApiError = source === "api_error";
|
|
@@ -361,11 +364,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
361
364
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
362
365
|
documentationUrl: urls?.documentationUrl ?? "",
|
|
363
366
|
steps: [
|
|
367
|
+
// MCP steering leads when the hosted bridge is advertised — the
|
|
368
|
+
// connector is the agent-actionable path (keyless, human-approved).
|
|
369
|
+
...urls?.mcpEndpoint ? [
|
|
370
|
+
`Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
|
|
371
|
+
] : [],
|
|
364
372
|
"Register for an AstraSync account",
|
|
365
373
|
"Create and register your agent",
|
|
366
374
|
"Add your ASTRA-ID to request headers",
|
|
367
375
|
"Retry your request"
|
|
368
|
-
]
|
|
376
|
+
],
|
|
377
|
+
...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
|
|
369
378
|
};
|
|
370
379
|
return {
|
|
371
380
|
// Round-18 G4: createGuidanceResponse fires for unverified-agent path or
|
|
@@ -373,13 +382,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
373
382
|
// policy is not evaluated (we never reached the gate).
|
|
374
383
|
identityVerified: false,
|
|
375
384
|
policyAllowed: false,
|
|
376
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
377
|
-
// Adapters additionally short-circuit on `!identityVerified ||
|
|
378
|
-
// !policyAllowed` before the gate check, but the access level still has
|
|
379
|
-
// to be honest at the data layer so downstream consumers (SDK adapters
|
|
380
|
-
// in other languages, custom integrations) inherit the correct
|
|
381
|
-
// semantics.
|
|
382
|
-
accessLevel: "none",
|
|
383
385
|
guidance,
|
|
384
386
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
385
387
|
// Round-10 (#47, O5): on API-error fallback, surface a typed failure so
|
|
@@ -473,7 +475,6 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
473
475
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
|
|
474
476
|
access: {
|
|
475
477
|
allowed: false,
|
|
476
|
-
accessLevel: "none",
|
|
477
478
|
reason: "endpoint_deactivated",
|
|
478
479
|
failures: [
|
|
479
480
|
{
|
|
@@ -536,7 +537,7 @@ async function verify(config, request, options) {
|
|
|
536
537
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
537
538
|
deprecationWarningShown = true;
|
|
538
539
|
console.warn(
|
|
539
|
-
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access
|
|
540
|
+
"[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."
|
|
540
541
|
);
|
|
541
542
|
}
|
|
542
543
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
|
|
@@ -582,14 +583,6 @@ async function verify(config, request, options) {
|
|
|
582
583
|
const result2 = {
|
|
583
584
|
identityVerified: idVerifiedFromBackend,
|
|
584
585
|
policyAllowed: false,
|
|
585
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
586
|
-
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
587
|
-
// colocated `guidance: {...}` help-payload object below and let
|
|
588
|
-
// denied requests pass any route gated at `'guidance'` because
|
|
589
|
-
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
590
|
-
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
591
|
-
// the gate check — belt-and-braces.
|
|
592
|
-
accessLevel: "none",
|
|
593
586
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
594
587
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
595
588
|
// as the fallback for older backends.
|
|
@@ -600,7 +593,10 @@ async function verify(config, request, options) {
|
|
|
600
593
|
guidance: {
|
|
601
594
|
message: apiResponse.access?.reason || "Access denied by PDLSS policy",
|
|
602
595
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
603
|
-
documentationUrl: urls?.documentationUrl ?? ""
|
|
596
|
+
documentationUrl: urls?.documentationUrl ?? "",
|
|
597
|
+
// 5.1.0: anonymous callers land on this branch — steer MCP-hosted
|
|
598
|
+
// agents to the connector (this is what the edge deny body surfaces).
|
|
599
|
+
...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
|
|
604
600
|
},
|
|
605
601
|
verifiedAt: /* @__PURE__ */ new Date(),
|
|
606
602
|
// Extract sessionId so decisions can be recorded for denials too
|
|
@@ -638,7 +634,6 @@ async function verify(config, request, options) {
|
|
|
638
634
|
trustScore: apiResponse.organization.trustScore
|
|
639
635
|
} : void 0;
|
|
640
636
|
const verificationContext = apiResponse.verificationContext;
|
|
641
|
-
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
642
637
|
const result = {
|
|
643
638
|
// 4.5.0 (probe F1): read idVerified from verificationContext with the
|
|
644
639
|
// SAME absent⇒false default as the deny branch. The previous `!== false`
|
|
@@ -650,7 +645,6 @@ async function verify(config, request, options) {
|
|
|
650
645
|
// this load-bearing must never be defaulted on.
|
|
651
646
|
identityVerified: apiResponse.verificationContext?.idVerified === true,
|
|
652
647
|
policyAllowed: true,
|
|
653
|
-
accessLevel,
|
|
654
648
|
agent,
|
|
655
649
|
developer,
|
|
656
650
|
organization,
|
|
@@ -677,7 +671,6 @@ async function verify(config, request, options) {
|
|
|
677
671
|
};
|
|
678
672
|
if (result.recommendation === "deny") {
|
|
679
673
|
result.policyAllowed = false;
|
|
680
|
-
result.accessLevel = "none";
|
|
681
674
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
|
|
682
675
|
result.guidance = result.runtimeChallenge ? {
|
|
683
676
|
message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
|
|
@@ -1617,7 +1610,6 @@ function defaultOnDenied(result, _req, res) {
|
|
|
1617
1610
|
error: {
|
|
1618
1611
|
code: !result.identityVerified ? "UNAUTHORIZED" : "INSUFFICIENT_ACCESS",
|
|
1619
1612
|
message: result.denialReasons?.[0] || "Access denied",
|
|
1620
|
-
accessLevel: result.accessLevel,
|
|
1621
1613
|
guidance: result.guidance,
|
|
1622
1614
|
// Round-10: aggregated per-dimension detail + correlation handle.
|
|
1623
1615
|
failures: result.failures,
|
|
@@ -1733,11 +1725,11 @@ function createMiddleware(options) {
|
|
|
1733
1725
|
}
|
|
1734
1726
|
const wellKnownUrls = config.apiBaseUrl ? await getWellKnownUrls(config.apiBaseUrl).catch(() => void 0) : void 0;
|
|
1735
1727
|
const credentials = customExtractCredentials ? customExtractCredentials(req) : defaultExtractCredentials(req);
|
|
1736
|
-
const shouldEnforce = routeConfig.
|
|
1737
|
-
if (routeConfig.
|
|
1728
|
+
const shouldEnforce = !routeConfig.observe;
|
|
1729
|
+
if (routeConfig.observe && (!config.evaluateAlwaysIfCredentialed || !credentials.astraId)) {
|
|
1738
1730
|
if (config.setPassThroughHeader) {
|
|
1739
1731
|
res.setHeader("X-Astra-Gateway-Mode", "unenforced");
|
|
1740
|
-
res.setHeader("X-Astra-Gateway-Reason", "route-
|
|
1732
|
+
res.setHeader("X-Astra-Gateway-Reason", "route-observe");
|
|
1741
1733
|
}
|
|
1742
1734
|
beaconPassThrough?.(req);
|
|
1743
1735
|
return next();
|
|
@@ -1774,7 +1766,6 @@ function createMiddleware(options) {
|
|
|
1774
1766
|
const result2 = {
|
|
1775
1767
|
identityVerified: false,
|
|
1776
1768
|
policyAllowed: false,
|
|
1777
|
-
accessLevel: "none",
|
|
1778
1769
|
denialReasons: preCheckFailures.map((f) => f.message),
|
|
1779
1770
|
guidance: {
|
|
1780
1771
|
message: "Request exceeds counterparty-defined PDLSS limits.",
|
|
@@ -1937,7 +1928,6 @@ function createMiddleware(options) {
|
|
|
1937
1928
|
const result = {
|
|
1938
1929
|
identityVerified: false,
|
|
1939
1930
|
policyAllowed: false,
|
|
1940
|
-
accessLevel: "none",
|
|
1941
1931
|
denialReasons: [`Verification middleware internal error: ${errorClass}`],
|
|
1942
1932
|
failures: [
|
|
1943
1933
|
{
|