@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
package/dist/adapters/nextjs.mjs
CHANGED
|
@@ -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";
|
|
@@ -95,11 +95,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
|
|
|
95
95
|
// src/verify.ts
|
|
96
96
|
var DEFAULT_CONFIG = {
|
|
97
97
|
apiBaseUrl: "https://astrasync.ai/api",
|
|
98
|
-
// v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
|
|
99
|
-
// access). Pre-rename this defaulted to `'guidance'`, which combined with
|
|
100
|
-
// a route gated at `'guidance'` to silently let unverified traffic
|
|
101
|
-
// through (`hasMinimumAccess('guidance', 'guidance') === true`).
|
|
102
|
-
defaultAccessLevel: "none",
|
|
103
98
|
// minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
|
|
104
99
|
// cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
|
|
105
100
|
// default; the caller's explicit value is honoured for cacheable results.
|
|
@@ -256,6 +251,14 @@ function extractCredentials(headers, query) {
|
|
|
256
251
|
}
|
|
257
252
|
return credentials;
|
|
258
253
|
}
|
|
254
|
+
function mcpGuidance(urls) {
|
|
255
|
+
if (!urls?.mcpEndpoint) return void 0;
|
|
256
|
+
return {
|
|
257
|
+
endpoint: urls.mcpEndpoint,
|
|
258
|
+
discoveryUrl: urls.mcpDiscoveryUrl,
|
|
259
|
+
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."
|
|
260
|
+
};
|
|
261
|
+
}
|
|
259
262
|
function createGuidanceResponse(_config, reason, options = {}) {
|
|
260
263
|
const source = options.source ?? "no_credentials";
|
|
261
264
|
const isApiError = source === "api_error";
|
|
@@ -282,11 +285,17 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
282
285
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
283
286
|
documentationUrl: urls?.documentationUrl ?? "",
|
|
284
287
|
steps: [
|
|
288
|
+
// MCP steering leads when the hosted bridge is advertised — the
|
|
289
|
+
// connector is the agent-actionable path (keyless, human-approved).
|
|
290
|
+
...urls?.mcpEndpoint ? [
|
|
291
|
+
`Fastest path (inside an MCP host): add the AstraSync MCP connector at ${urls.mcpEndpoint} \u2014 keyless, human-approved registration`
|
|
292
|
+
] : [],
|
|
285
293
|
"Register for an AstraSync account",
|
|
286
294
|
"Create and register your agent",
|
|
287
295
|
"Add your ASTRA-ID to request headers",
|
|
288
296
|
"Retry your request"
|
|
289
|
-
]
|
|
297
|
+
],
|
|
298
|
+
...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
|
|
290
299
|
};
|
|
291
300
|
return {
|
|
292
301
|
// Round-18 G4: createGuidanceResponse fires for unverified-agent path or
|
|
@@ -294,13 +303,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
294
303
|
// policy is not evaluated (we never reached the gate).
|
|
295
304
|
identityVerified: false,
|
|
296
305
|
policyAllowed: false,
|
|
297
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
298
|
-
// Adapters additionally short-circuit on `!identityVerified ||
|
|
299
|
-
// !policyAllowed` before the gate check, but the access level still has
|
|
300
|
-
// to be honest at the data layer so downstream consumers (SDK adapters
|
|
301
|
-
// in other languages, custom integrations) inherit the correct
|
|
302
|
-
// semantics.
|
|
303
|
-
accessLevel: "none",
|
|
304
306
|
guidance,
|
|
305
307
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
306
308
|
// Round-10 (#47, O5): on API-error fallback, surface a typed failure so
|
|
@@ -394,7 +396,6 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
394
396
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
|
|
395
397
|
access: {
|
|
396
398
|
allowed: false,
|
|
397
|
-
accessLevel: "none",
|
|
398
399
|
reason: "endpoint_deactivated",
|
|
399
400
|
failures: [
|
|
400
401
|
{
|
|
@@ -457,7 +458,7 @@ async function verify(config, request, options) {
|
|
|
457
458
|
if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
|
|
458
459
|
deprecationWarningShown = true;
|
|
459
460
|
console.warn(
|
|
460
|
-
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access
|
|
461
|
+
"[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."
|
|
461
462
|
);
|
|
462
463
|
}
|
|
463
464
|
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
|
|
@@ -503,14 +504,6 @@ async function verify(config, request, options) {
|
|
|
503
504
|
const result2 = {
|
|
504
505
|
identityVerified: idVerifiedFromBackend,
|
|
505
506
|
policyAllowed: false,
|
|
506
|
-
// v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
|
|
507
|
-
// Pre-rename this hardcoded `'guidance'`, which conflated with the
|
|
508
|
-
// colocated `guidance: {...}` help-payload object below and let
|
|
509
|
-
// denied requests pass any route gated at `'guidance'` because
|
|
510
|
-
// `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
|
|
511
|
-
// ALSO short-circuit on `!identityVerified || !policyAllowed` before
|
|
512
|
-
// the gate check — belt-and-braces.
|
|
513
|
-
accessLevel: "none",
|
|
514
507
|
// 3.6.0: the server now emits top-level denialReasons on every deny
|
|
515
508
|
// path — prefer it verbatim; the failure-message reconstruction remains
|
|
516
509
|
// as the fallback for older backends.
|
|
@@ -521,7 +514,10 @@ async function verify(config, request, options) {
|
|
|
521
514
|
guidance: {
|
|
522
515
|
message: apiResponse.access?.reason || "Access denied by PDLSS policy",
|
|
523
516
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
524
|
-
documentationUrl: urls?.documentationUrl ?? ""
|
|
517
|
+
documentationUrl: urls?.documentationUrl ?? "",
|
|
518
|
+
// 5.1.0: anonymous callers land on this branch — steer MCP-hosted
|
|
519
|
+
// agents to the connector (this is what the edge deny body surfaces).
|
|
520
|
+
...mcpGuidance(urls) && { mcp: mcpGuidance(urls) }
|
|
525
521
|
},
|
|
526
522
|
verifiedAt: /* @__PURE__ */ new Date(),
|
|
527
523
|
// Extract sessionId so decisions can be recorded for denials too
|
|
@@ -559,7 +555,6 @@ async function verify(config, request, options) {
|
|
|
559
555
|
trustScore: apiResponse.organization.trustScore
|
|
560
556
|
} : void 0;
|
|
561
557
|
const verificationContext = apiResponse.verificationContext;
|
|
562
|
-
const accessLevel = apiResponse.access?.accessLevel ?? "standard";
|
|
563
558
|
const result = {
|
|
564
559
|
// 4.5.0 (probe F1): read idVerified from verificationContext with the
|
|
565
560
|
// SAME absent⇒false default as the deny branch. The previous `!== false`
|
|
@@ -571,7 +566,6 @@ async function verify(config, request, options) {
|
|
|
571
566
|
// this load-bearing must never be defaulted on.
|
|
572
567
|
identityVerified: apiResponse.verificationContext?.idVerified === true,
|
|
573
568
|
policyAllowed: true,
|
|
574
|
-
accessLevel,
|
|
575
569
|
agent,
|
|
576
570
|
developer,
|
|
577
571
|
organization,
|
|
@@ -598,7 +592,6 @@ async function verify(config, request, options) {
|
|
|
598
592
|
};
|
|
599
593
|
if (result.recommendation === "deny") {
|
|
600
594
|
result.policyAllowed = false;
|
|
601
|
-
result.accessLevel = "none";
|
|
602
595
|
result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
|
|
603
596
|
result.guidance = result.runtimeChallenge ? {
|
|
604
597
|
message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
|
|
@@ -1733,7 +1726,7 @@ function createMiddleware(options) {
|
|
|
1733
1726
|
beaconPassThrough?.(request, pathname);
|
|
1734
1727
|
return NextResponse.next();
|
|
1735
1728
|
}
|
|
1736
|
-
if (routeConfig.
|
|
1729
|
+
if (routeConfig.observe) {
|
|
1737
1730
|
beaconPassThrough?.(request, pathname);
|
|
1738
1731
|
return NextResponse.next();
|
|
1739
1732
|
}
|
|
@@ -1763,7 +1756,6 @@ function createMiddleware(options) {
|
|
|
1763
1756
|
const preCheckResult = {
|
|
1764
1757
|
identityVerified: false,
|
|
1765
1758
|
policyAllowed: false,
|
|
1766
|
-
accessLevel: "none",
|
|
1767
1759
|
denialReasons: preCheckFailures.map((f) => f.message),
|
|
1768
1760
|
guidance: {
|
|
1769
1761
|
message: "Request exceeds counterparty-defined PDLSS limits.",
|
|
@@ -1901,7 +1893,6 @@ function createMiddleware(options) {
|
|
|
1901
1893
|
}
|
|
1902
1894
|
response.headers.set("X-AstraSync-Identity-Verified", result.identityVerified.toString());
|
|
1903
1895
|
response.headers.set("X-AstraSync-Policy-Allowed", result.policyAllowed.toString());
|
|
1904
|
-
response.headers.set("X-AstraSync-Access-Level", result.accessLevel);
|
|
1905
1896
|
if (result.agent) {
|
|
1906
1897
|
response.headers.set("X-AstraSync-Agent-Id", result.agent.astraId);
|
|
1907
1898
|
}
|