@agent-native/core 0.30.4 → 0.30.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"build-server.d.ts","sourceRoot":"","sources":["../../src/mcp/build-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-server.d.ts","sourceRoot":"","sources":["../../src/mcp/build-server.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ import { buildDeepLink, toAbsoluteOpenUrl, toDesktopOpenUrl, } from "../server/d
25
25
  import { isAgentNativeOpenDeepLink, withCollapsedAgentSidebarParam, } from "../shared/agent-sidebar-url.js";
26
26
  import { MCP_APP_CHAT_BRIDGE_QUERY_PARAM } from "../shared/embed-auth.js";
27
27
  import { getBuiltinCrossAppTools } from "./builtin-tools.js";
28
- import { MCP_CONNECT_SCOPE } from "./connect-store.js";
28
+ import { MCP_CONNECT_OAUTH_CLIENT_ID, MCP_CONNECT_SCOPE, } from "./connect-store.js";
29
29
  import { getConfiguredAppBasePath } from "../server/app-base-path.js";
30
30
  import { hasMcpOAuthScope, verifyMcpOAuthAccessToken, } from "./oauth-token.js";
31
31
  function isActionVisibleForOAuthScope(entry, scopes) {
@@ -1015,10 +1015,13 @@ export async function createMCPServerForRequest(config, identity, requestMeta) {
1015
1015
  }
1016
1016
  try {
1017
1017
  const result = await entry.run(args ?? {});
1018
- const rawResult = isMcpActionResult(result) ? result.raw : result;
1019
- const resultForClient = isMcpActionResult(result)
1020
- ? result.text
1021
- : result;
1018
+ const mcpResult = isMcpActionResult(result) ? result : null;
1019
+ const rawResult = mcpResult ? mcpResult.raw : result;
1020
+ const resultForClient = mcpResult ? mcpResult.text : result;
1021
+ const mcpResultIsError = !!mcpResult &&
1022
+ !!mcpResult.raw &&
1023
+ typeof mcpResult.raw === "object" &&
1024
+ mcpResult.raw.isError === true;
1022
1025
  const mcpAppResource = await resolveMcpAppResourceSafely(config, name, entry, requestMeta);
1023
1026
  const rawResultForClient = mcpAppResource
1024
1027
  ? await withServerMintedMcpAppEmbedStart(rawResult, requestMeta)
@@ -1054,6 +1057,7 @@ export async function createMCPServerForRequest(config, identity, requestMeta) {
1054
1057
  content.push(block);
1055
1058
  return {
1056
1059
  content,
1060
+ ...(mcpResultIsError ? { isError: true } : {}),
1057
1061
  ...(structuredContent ? { structuredContent } : {}),
1058
1062
  ...(Object.keys(responseMeta).length > 0
1059
1063
  ? { _meta: responseMeta }
@@ -1232,6 +1236,22 @@ async function verifyA2AJwtForMcp(token) {
1232
1236
  }
1233
1237
  return null;
1234
1238
  }
1239
+ async function isConnectTokenAllowed(jti) {
1240
+ if (!jti)
1241
+ return false;
1242
+ try {
1243
+ const { isJtiRevoked, touchTokenUsed } = await import("./connect-store.js");
1244
+ if (await isJtiRevoked(jti))
1245
+ return false;
1246
+ // Best-effort usage telemetry — never blocks / throws.
1247
+ void touchTokenUsed(jti);
1248
+ }
1249
+ catch {
1250
+ // Store import / lookup failed — fail open. Signature verification already
1251
+ // passed; this only gates explicit revokes.
1252
+ }
1253
+ return true;
1254
+ }
1235
1255
  /**
1236
1256
  * Verify the inbound auth header. Returns:
1237
1257
  * - { authed: true, identity } when verified — `identity` is derived from
@@ -1257,13 +1277,17 @@ export async function verifyAuth(authHeader, ownerEmailHeader, options = {}) {
1257
1277
  // established that this is a loopback/local dev request. Still honour an
1258
1278
  // owner hint there so the local install/connect flow stays tenant-scoped.
1259
1279
  const accessTokens = getAccessTokens();
1260
- const hasA2ASecret = !!process.env.A2A_SECRET;
1280
+ const hasA2ASecret = !!process.env.A2A_SECRET?.trim();
1261
1281
  const token = authHeader?.startsWith("Bearer ")
1262
1282
  ? authHeader.slice(7)
1263
1283
  : undefined;
1264
1284
  if (token) {
1265
1285
  const oauthIdentity = await verifyMcpOAuthAccessToken(token, options.resourceUrl);
1266
1286
  if (oauthIdentity) {
1287
+ if (oauthIdentity.clientId === MCP_CONNECT_OAUTH_CLIENT_ID &&
1288
+ !(await isConnectTokenAllowed(oauthIdentity.jti))) {
1289
+ return { authed: false };
1290
+ }
1267
1291
  return {
1268
1292
  authed: true,
1269
1293
  identity: {
@@ -1308,21 +1332,9 @@ export async function verifyAuth(authHeader, ownerEmailHeader, options = {}) {
1308
1332
  // cryptographically verified, so failing open here only widens the
1309
1333
  // explicit-revoke gate, never the trust boundary.
1310
1334
  if (tokenScope === MCP_CONNECT_SCOPE) {
1311
- if (typeof payload.jti !== "string" || !payload.jti) {
1335
+ if (!(await isConnectTokenAllowed(payload.jti))) {
1312
1336
  return { authed: false };
1313
1337
  }
1314
- const jti = payload.jti;
1315
- try {
1316
- const { isJtiRevoked, touchTokenUsed } = await import("./connect-store.js");
1317
- if (await isJtiRevoked(jti)) {
1318
- return { authed: false };
1319
- }
1320
- // Best-effort usage telemetry — never blocks / throws.
1321
- void touchTokenUsed(jti);
1322
- }
1323
- catch {
1324
- // Store import / lookup failed — fail open (see comment above).
1325
- }
1326
1338
  }
1327
1339
  return {
1328
1340
  authed: true,