@astrasyncai/verification-gateway 2.4.0 → 2.4.2
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 +137 -22
- 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 +37 -7
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +37 -7
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +1 -1
- package/dist/adapters/mcp.d.ts +1 -1
- package/dist/adapters/mcp.js +37 -7
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +37 -7
- 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 +30 -4
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +30 -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/adapters/sdk.js +30 -4
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +30 -4
- 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.js +163 -4
- package/dist/browser/background.js +30 -4
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +30 -4
- 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/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 +30 -4
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +30 -4
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/{express-4Vau6x6X.d.mts → express-DneHiMhu.d.mts} +1 -1
- package/dist/{express-Nq-wWICa.d.ts → express-DsiaQRFt.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 +30 -4
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +30 -4
- 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-DkyPV14Y.d.mts → index-C9yWlQ2Y.d.mts} +1 -1
- package/dist/{index-DiToN8gh.d.mts → index-DAGm-Sgf.d.mts} +1 -1
- package/dist/{index-B-EovXnY.d.ts → index-Dd4alF0l.d.ts} +1 -1
- package/dist/{index-CxwCN7AC.d.ts → index-NZiKvrtE.d.ts} +1 -1
- package/dist/index.d.mts +7 -7
- package/dist/index.d.ts +7 -7
- package/dist/index.js +37 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +37 -7
- 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-DO_4crcp.d.ts → nextjs-B4WmoiVm.d.ts} +1 -1
- package/dist/{nextjs-BTR7Oix-.d.mts → nextjs-vUuVCaBP.d.mts} +1 -1
- package/dist/registration/index.d.mts +174 -7
- package/dist/registration/index.d.ts +174 -7
- package/dist/registration/index.js +171 -6
- package/dist/registration/index.js.map +1 -1
- package/dist/registration/index.mjs +167 -5
- package/dist/registration/index.mjs.map +1 -1
- package/dist/{sdk-TnHXD-Oh.d.ts → sdk-BvWp4q2q.d.ts} +1 -1
- package/dist/{sdk-DSLCyXIX.d.mts → sdk-Cixo6pTV.d.mts} +1 -1
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- package/dist/{types-pU2O0BFq.d.mts → types-C_e1IZdU.d.mts} +1 -1
- package/dist/{types-BVp22KkN.d.mts → types-DLai3jly.d.mts} +16 -13
- package/dist/{types-BVp22KkN.d.ts → types-DLai3jly.d.ts} +16 -13
- package/dist/{types-DVCWReEN.d.ts → types-IUzu-A4u.d.ts} +1 -1
- package/dist/ui/index.d.mts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -217,8 +217,18 @@ function extractCredentials(headers, query) {
|
|
|
217
217
|
function hasCredentials(credentials) {
|
|
218
218
|
return !!(credentials.astraId || credentials.apiKey || credentials.jwt);
|
|
219
219
|
}
|
|
220
|
-
function createGuidanceResponse(config, reason) {
|
|
221
|
-
const
|
|
220
|
+
function createGuidanceResponse(config, reason, options = {}) {
|
|
221
|
+
const source = options.source ?? "no_credentials";
|
|
222
|
+
const isApiError = source === "api_error";
|
|
223
|
+
const guidance = isApiError ? {
|
|
224
|
+
message: "Verification is temporarily unavailable. Retry with exponential backoff; if the issue persists, contact support with the correlationId.",
|
|
225
|
+
registrationUrl: `${config.apiBaseUrl.replace("/api", "")}/register`,
|
|
226
|
+
documentationUrl: `${config.apiBaseUrl.replace("/api", "")}/docs/agent-access`,
|
|
227
|
+
steps: [
|
|
228
|
+
"Retry the request with exponential backoff",
|
|
229
|
+
"If failures persist, share the correlationId with support"
|
|
230
|
+
]
|
|
231
|
+
} : {
|
|
222
232
|
message: "This service verifies AI agents before granting access. Please register your agent with AstraSync.",
|
|
223
233
|
registrationUrl: `${config.apiBaseUrl.replace("/api", "")}/register`,
|
|
224
234
|
documentationUrl: `${config.apiBaseUrl.replace("/api", "")}/docs/agent-access`,
|
|
@@ -239,6 +249,18 @@ function createGuidanceResponse(config, reason) {
|
|
|
239
249
|
accessLevel: "none",
|
|
240
250
|
guidance,
|
|
241
251
|
denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
|
|
252
|
+
// Round-10 (#47, O5): on API-error fallback, surface a typed failure so
|
|
253
|
+
// partners (and their custom onDenied handlers) can branch on
|
|
254
|
+
// dimension. Without this, the synthesised stub was indistinguishable
|
|
255
|
+
// from a real policy deny.
|
|
256
|
+
failures: isApiError ? [
|
|
257
|
+
{
|
|
258
|
+
dimension: "verify_access.api_error",
|
|
259
|
+
message: reason ?? "Verification temporarily unavailable",
|
|
260
|
+
guidance: guidance.message
|
|
261
|
+
}
|
|
262
|
+
] : void 0,
|
|
263
|
+
correlationId: options.correlationId,
|
|
242
264
|
verifiedAt: /* @__PURE__ */ new Date()
|
|
243
265
|
};
|
|
244
266
|
}
|
|
@@ -313,7 +335,8 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
313
335
|
if (!response.ok) {
|
|
314
336
|
return {
|
|
315
337
|
success: false,
|
|
316
|
-
error: data.message || data.error || `API returned ${response.status}
|
|
338
|
+
error: data.message || data.error || `API returned ${response.status}`,
|
|
339
|
+
correlationId: typeof data?.correlationId === "string" ? data.correlationId : void 0
|
|
317
340
|
};
|
|
318
341
|
}
|
|
319
342
|
return data;
|
|
@@ -357,7 +380,10 @@ async function verify(config, request) {
|
|
|
357
380
|
}
|
|
358
381
|
const apiResponse = await callVerifyAccessAPI(mergedConfig, enrichedRequest);
|
|
359
382
|
if (!apiResponse.success) {
|
|
360
|
-
return createGuidanceResponse(mergedConfig, apiResponse.error
|
|
383
|
+
return createGuidanceResponse(mergedConfig, apiResponse.error, {
|
|
384
|
+
source: "api_error",
|
|
385
|
+
correlationId: apiResponse.correlationId
|
|
386
|
+
});
|
|
361
387
|
}
|
|
362
388
|
if (!apiResponse.access?.allowed) {
|
|
363
389
|
const aggregatedFailures = apiResponse.access?.failures;
|
|
@@ -689,13 +715,17 @@ function findRouteConfig(routes, path, method) {
|
|
|
689
715
|
}
|
|
690
716
|
function defaultOnDenied(result, _req, res) {
|
|
691
717
|
const statusCode = result.verified ? 403 : 401;
|
|
718
|
+
res.setHeader("X-Astra-Gateway-Mode", "enforced");
|
|
692
719
|
res.status(statusCode).json({
|
|
693
720
|
success: false,
|
|
694
721
|
error: {
|
|
695
722
|
code: result.verified ? "INSUFFICIENT_ACCESS" : "UNAUTHORIZED",
|
|
696
723
|
message: result.denialReasons?.[0] || "Access denied",
|
|
697
724
|
accessLevel: result.accessLevel,
|
|
698
|
-
guidance: result.guidance
|
|
725
|
+
guidance: result.guidance,
|
|
726
|
+
// Round-10: aggregated per-dimension detail + correlation handle.
|
|
727
|
+
failures: result.failures,
|
|
728
|
+
correlationId: result.correlationId
|
|
699
729
|
}
|
|
700
730
|
});
|
|
701
731
|
}
|
|
@@ -760,7 +790,7 @@ function createMiddleware(options) {
|
|
|
760
790
|
const routeConfig = findRouteConfig(cachedRoutes, req.path, req.method);
|
|
761
791
|
if (!routeConfig) {
|
|
762
792
|
if (config.setPassThroughHeader) {
|
|
763
|
-
res.setHeader("X-Astra-Gateway-Mode", "
|
|
793
|
+
res.setHeader("X-Astra-Gateway-Mode", "unenforced");
|
|
764
794
|
res.setHeader(
|
|
765
795
|
"X-Astra-Gateway-Reason",
|
|
766
796
|
cachedRoutes.length === 0 ? "no-policy" : "no-match"
|
|
@@ -770,7 +800,7 @@ function createMiddleware(options) {
|
|
|
770
800
|
}
|
|
771
801
|
if (routeConfig.minAccessLevel === "none") {
|
|
772
802
|
if (config.setPassThroughHeader) {
|
|
773
|
-
res.setHeader("X-Astra-Gateway-Mode", "
|
|
803
|
+
res.setHeader("X-Astra-Gateway-Mode", "unenforced");
|
|
774
804
|
res.setHeader("X-Astra-Gateway-Reason", "route-none");
|
|
775
805
|
}
|
|
776
806
|
return next();
|