@adonis-agora/agent
Version:
Governed, durable-backed AI agent (chat + tool-calling + governance) for AdonisJS — part of the Agora ecosystem.
47 lines • 2.07 kB
JavaScript
export async function resolveA2aAuth(auth, ctx) {
return typeof auth === 'function' ? auth(ctx) : auth;
}
/**
* Requires `@adonis-agora/authkit-server` 0.76 or later (its personal agents). Loaded lazily, like
* the MCP `authKitAuth` driver, so it is not a declared peer.
*
* Authenticate A2A callers with AuthKit's personal agents (`personalAgents` in `config/authkit.ts`):
* the agent's signed JWT, the delegation token beside it, the Agent Card security block, step-up
* links and signed receipts — all from `@adonis-agora/authkit-server`, loaded lazily.
*/
export function authKitPersonalAgents() {
return async ({ app }) => {
const authkit = (await import('@adonis-agora/authkit-server'));
const middleware = authkit.personalAgentAuth();
const delegableScopes = async () => {
const service = (await app.container.make('authkit.server'));
return { ...(service.config.personalAgents?.delegation?.scopes ?? {}) };
};
return {
async authenticate(ctx) {
let passed = false;
await middleware(ctx, async () => {
passed = true;
});
const caller = passed ? authkit.personalAgentOf(ctx) : null;
return caller
? {
issuer: caller.issuer,
sub: caller.sub,
name: caller.name,
delegation: caller.delegation,
}
: null;
},
cardSecurity: (ctx, interfaceUrl) => authkit.personalAgentSecurity(ctx, { interfaceUrl }),
async stepUp(ctx, missingScopes) {
if (Object.keys(await delegableScopes()).length === 0)
return null;
return authkit.personalAgentStepUp(ctx, missingScopes);
},
receipt: (ctx, input) => authkit.personalAgentReceipt(ctx, input),
delegableScopes,
};
};
}
//# sourceMappingURL=auth.js.map