@aauth/proxy 0.5.0 → 2.0.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/access-mode.d.ts +21 -0
- package/dist/access-mode.d.ts.map +1 -0
- package/dist/access-mode.js +64 -0
- package/dist/access-mode.js.map +1 -0
- package/dist/agent.d.ts +85 -6
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +408 -129
- package/dist/agent.js.map +1 -1
- package/dist/identity-local.d.ts.map +1 -1
- package/dist/identity-local.js +12 -2
- package/dist/identity-local.js.map +1 -1
- package/dist/identity.d.ts +1 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/jwt.d.ts +25 -0
- package/dist/jwt.d.ts.map +1 -0
- package/dist/jwt.js +77 -0
- package/dist/jwt.js.map +1 -0
- package/dist/resource.d.ts +8 -3
- package/dist/resource.d.ts.map +1 -1
- package/dist/resource.js +30 -10
- package/dist/resource.js.map +1 -1
- package/dist/store.d.ts +34 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +0 -0
- package/dist/store.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +62 -16
- package/dist/tools.js.map +1 -1
- package/dist/vocab/annotations.d.ts +30 -0
- package/dist/vocab/annotations.d.ts.map +1 -0
- package/dist/vocab/annotations.js +70 -0
- package/dist/vocab/annotations.js.map +1 -0
- package/dist/vocab/index.d.ts +1 -1
- package/dist/vocab/index.d.ts.map +1 -1
- package/dist/vocab/index.js +11 -5
- package/dist/vocab/index.js.map +1 -1
- package/dist/vocab/openapi.d.ts +4 -0
- package/dist/vocab/openapi.d.ts.map +1 -1
- package/dist/vocab/openapi.js +13 -0
- package/dist/vocab/openapi.js.map +1 -1
- package/dist/vocab/types.d.ts +18 -2
- package/dist/vocab/types.d.ts.map +1 -1
- package/dist/vocab/types.js +5 -2
- package/dist/vocab/types.js.map +1 -1
- package/package.json +2 -2
- package/dist/vocab/openapi-gateway.d.ts +0 -14
- package/dist/vocab/openapi-gateway.d.ts.map +0 -1
- package/dist/vocab/openapi-gateway.js +0 -70
- package/dist/vocab/openapi-gateway.js.map +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type KnownAccessMode = 'agent-token' | 'person-token' | 'session-token' | 'auth-token' | 'per-call';
|
|
2
|
+
export declare const KNOWN_ACCESS_MODES: readonly KnownAccessMode[];
|
|
3
|
+
export declare function isKnownAccessMode(v: string | undefined): v is KnownAccessMode;
|
|
4
|
+
export interface AgentSetup {
|
|
5
|
+
/** false when the agent token carries no `ps` claim. */
|
|
6
|
+
hasPersonServer: boolean;
|
|
7
|
+
}
|
|
8
|
+
export type AccessModePlan = {
|
|
9
|
+
kind: 'undeclared';
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'satisfiable';
|
|
12
|
+
mode: KnownAccessMode;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'unsatisfiable';
|
|
15
|
+
mode: KnownAccessMode;
|
|
16
|
+
reason: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function planAccessMode(declared: string | undefined, setup: AgentSetup): AccessModePlan;
|
|
19
|
+
/** One-line reason string for a plan, for surfacing to the LLM. */
|
|
20
|
+
export declare function planReason(plan: AccessModePlan): string | undefined;
|
|
21
|
+
//# sourceMappingURL=access-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-mode.d.ts","sourceRoot":"","sources":["../src/access-mode.ts"],"names":[],"mappings":"AAuBA,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,cAAc,GACd,eAAe,GACf,YAAY,GACZ,UAAU,CAAA;AAEd,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAMxD,CAAA;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,IAAI,eAAe,CAE7E;AAED,MAAM,WAAW,UAAU;IACzB,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAKpE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,cAAc,CA2B9F;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAEnE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// access_mode planning.
|
|
2
|
+
//
|
|
3
|
+
// `access_mode` is an IANA registry (protocol §Resource Metadata, §AAuth Access
|
|
4
|
+
// Mode Value Registry), not a closed list: -11 defines four values, R3 -02 adds
|
|
5
|
+
// `per-call`, and extensions may add more. Three outcomes, and only three:
|
|
6
|
+
//
|
|
7
|
+
// undeclared — absent, or a value this agent does not recognize. Call the
|
|
8
|
+
// resource and read the AAuth-Requirement it returns. NEVER an
|
|
9
|
+
// error: the declaration is advisory, the runtime requirement
|
|
10
|
+
// is authoritative.
|
|
11
|
+
// satisfiable — recognized, and this agent's setup can complete it. Plan
|
|
12
|
+
// against it and skip the speculative call.
|
|
13
|
+
// unsatisfiable — recognized, and this agent cannot complete it. Skip the
|
|
14
|
+
// resource (or operation) and say why. An agent whose agent
|
|
15
|
+
// token carries no `ps` claim cannot obtain a person token,
|
|
16
|
+
// and so cannot complete person-token, auth-token or per-call
|
|
17
|
+
// access — it should learn that here, not at a 401.
|
|
18
|
+
//
|
|
19
|
+
// Mirrors the `@aauth/protocol` surface named in the AAuth -11 package contract
|
|
20
|
+
// (planAccessMode / AgentSetup / AccessModePlan / KnownAccessMode). Kept local
|
|
21
|
+
// while @aauth/protocol is unpublished; swap the implementation for an import
|
|
22
|
+
// when it ships — the types are identical by construction.
|
|
23
|
+
export const KNOWN_ACCESS_MODES = [
|
|
24
|
+
'agent-token',
|
|
25
|
+
'person-token',
|
|
26
|
+
'session-token',
|
|
27
|
+
'auth-token',
|
|
28
|
+
'per-call',
|
|
29
|
+
];
|
|
30
|
+
export function isKnownAccessMode(v) {
|
|
31
|
+
return v !== undefined && KNOWN_ACCESS_MODES.includes(v);
|
|
32
|
+
}
|
|
33
|
+
const NO_PS = 'this agent token carries no `ps` claim, so the agent has no person server to obtain a person token from';
|
|
34
|
+
export function planAccessMode(declared, setup) {
|
|
35
|
+
if (!isKnownAccessMode(declared))
|
|
36
|
+
return { kind: 'undeclared' };
|
|
37
|
+
switch (declared) {
|
|
38
|
+
// Identity only: every request already carries an agent token.
|
|
39
|
+
case 'agent-token':
|
|
40
|
+
return { kind: 'satisfiable', mode: declared };
|
|
41
|
+
// Resource-managed: the resource runs its own consent flow and hands back a
|
|
42
|
+
// session token via AAuth-Access. No PS involved.
|
|
43
|
+
case 'session-token':
|
|
44
|
+
return { kind: 'satisfiable', mode: declared };
|
|
45
|
+
// All three need a person token, which only a person server issues. A
|
|
46
|
+
// resource MUST have verified a person token before it issues a resource
|
|
47
|
+
// token, so auth-token and per-call are unreachable without one too.
|
|
48
|
+
case 'person-token':
|
|
49
|
+
case 'auth-token':
|
|
50
|
+
case 'per-call':
|
|
51
|
+
return setup.hasPersonServer
|
|
52
|
+
? { kind: 'satisfiable', mode: declared }
|
|
53
|
+
: {
|
|
54
|
+
kind: 'unsatisfiable',
|
|
55
|
+
mode: declared,
|
|
56
|
+
reason: `access_mode "${declared}" requires a person token, and ${NO_PS}`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** One-line reason string for a plan, for surfacing to the LLM. */
|
|
61
|
+
export function planReason(plan) {
|
|
62
|
+
return plan.kind === 'unsatisfiable' ? plan.reason : undefined;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=access-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-mode.js","sourceRoot":"","sources":["../src/access-mode.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,iFAAiF;AACjF,gFAAgF;AAChF,sCAAsC;AACtC,6EAA6E;AAC7E,8DAA8D;AAC9D,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,sEAAsE;AACtE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,2DAA2D;AAS3D,MAAM,CAAC,MAAM,kBAAkB,GAA+B;IAC5D,aAAa;IACb,cAAc;IACd,eAAe;IACf,YAAY;IACZ,UAAU;CACX,CAAA;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAqB;IACrD,OAAO,CAAC,KAAK,SAAS,IAAK,kBAAwC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC;AAYD,MAAM,KAAK,GACT,yGAAyG,CAAA;AAE3G,MAAM,UAAU,cAAc,CAAC,QAA4B,EAAE,KAAiB;IAC5E,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;IAE/D,QAAQ,QAAQ,EAAE,CAAC;QACjB,+DAA+D;QAC/D,KAAK,aAAa;YAChB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;QAEhD,4EAA4E;QAC5E,kDAAkD;QAClD,KAAK,eAAe;YAClB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;QAEhD,sEAAsE;QACtE,yEAAyE;QACzE,qEAAqE;QACrE,KAAK,cAAc,CAAC;QACpB,KAAK,YAAY,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,eAAe;gBAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzC,CAAC,CAAC;oBACE,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,gBAAgB,QAAQ,kCAAkC,KAAK,EAAE;iBAC1E,CAAA;IACT,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,UAAU,CAAC,IAAoB;IAC7C,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AAChE,CAAC"}
|
package/dist/agent.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { fetch as signedFetch } from '@hellocoop/httpsig';
|
|
2
|
-
import type {
|
|
2
|
+
import type { KnownAccessMode } from './access-mode.js';
|
|
3
|
+
import type { L1Entry, PersonTokenStore } from './store.js';
|
|
3
4
|
export type AgentSigningKey = Parameters<typeof signedFetch>[1]['signingKey'];
|
|
4
5
|
/**
|
|
5
6
|
* Optional hints forwarded verbatim as extra body parameters in every POST to
|
|
6
|
-
* the PS token endpoint (
|
|
7
|
-
* those the host has learned about the user.
|
|
7
|
+
* the PS auth token endpoint (protocol §Agent Token Request). All fields are
|
|
8
|
+
* optional; include only those the host has learned about the user.
|
|
8
9
|
*/
|
|
9
10
|
export interface PSTokenHints {
|
|
10
11
|
login_hint?: string;
|
|
@@ -18,12 +19,32 @@ export interface PSTokenHints {
|
|
|
18
19
|
prompt?: string;
|
|
19
20
|
capabilities?: string[];
|
|
20
21
|
}
|
|
22
|
+
/** Opaque per-resource session token from the AAuth-Access header. */
|
|
23
|
+
export interface SessionTokenStore {
|
|
24
|
+
get(resource: string): Promise<string | undefined>;
|
|
25
|
+
set(resource: string, token: string): Promise<void>;
|
|
26
|
+
}
|
|
21
27
|
export interface ProxyConfig {
|
|
22
28
|
psUrl: string;
|
|
23
29
|
agentPrivateJwk: AgentSigningKey;
|
|
24
30
|
agentToken: string;
|
|
25
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* The mission this agent is operating under, as the base64url SHA-256 of the
|
|
33
|
+
* approved mission JSON. Forwarded to the PS's person token endpoint, which
|
|
34
|
+
* stamps it into the person token; from there the resource copies it into the
|
|
35
|
+
* resource token and the PS into the auth token. No PS implements
|
|
36
|
+
* `mission_endpoint` yet — the claim path is built regardless.
|
|
37
|
+
*/
|
|
38
|
+
missionS256?: string;
|
|
39
|
+
/** Extra parameters forwarded to every PS auth token endpoint request. */
|
|
26
40
|
psHints?: PSTokenHints;
|
|
41
|
+
/**
|
|
42
|
+
* Person-token cache. Keyed (resource, mission_s256); flushed whole when the
|
|
43
|
+
* agent's signing key changes. Defaults to a per-config in-memory store.
|
|
44
|
+
*/
|
|
45
|
+
personTokens?: PersonTokenStore;
|
|
46
|
+
/** Session-token store for `session-token` resources. Defaults to per-config memory. */
|
|
47
|
+
sessionTokens?: SessionTokenStore;
|
|
27
48
|
/**
|
|
28
49
|
* Called with each auth_token received from the PS before it is used.
|
|
29
50
|
* Hosts can use this to record or validate the PS sub across exchanges.
|
|
@@ -36,6 +57,10 @@ export interface InvokeArgs {
|
|
|
36
57
|
body?: unknown;
|
|
37
58
|
contentType?: string;
|
|
38
59
|
}
|
|
60
|
+
export interface InvokeOptions {
|
|
61
|
+
/** Overrides ProxyConfig.missionS256 for this call. */
|
|
62
|
+
missionS256?: string;
|
|
63
|
+
}
|
|
39
64
|
export interface Interaction {
|
|
40
65
|
url: string;
|
|
41
66
|
code: string;
|
|
@@ -48,13 +73,67 @@ export type InvokeResult = {
|
|
|
48
73
|
} | {
|
|
49
74
|
kind: 'interaction';
|
|
50
75
|
interaction: Interaction;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The resource (or this operation) declares an access mode this agent's setup
|
|
79
|
+
* cannot complete — typically `auth-token` or `person-token` at an agent whose
|
|
80
|
+
* agent token carries no `ps` claim. No request was made. Case (c) of the
|
|
81
|
+
* three-way access_mode plan: the agent learns this before planning rather
|
|
82
|
+
* than at a 401.
|
|
83
|
+
*/
|
|
84
|
+
| {
|
|
85
|
+
kind: 'skipped';
|
|
86
|
+
resource: string;
|
|
87
|
+
opId: string;
|
|
88
|
+
mode: KnownAccessMode;
|
|
89
|
+
reason: string;
|
|
51
90
|
};
|
|
52
91
|
export type InteractionHandler = (url: string, code: string) => Promise<void> | void;
|
|
53
92
|
export declare function makeAgentPoll(cfg: ProxyConfig): (url: string) => Promise<Response>;
|
|
93
|
+
interface PSMetadata {
|
|
94
|
+
/** Renamed from `token_endpoint` in -11. */
|
|
95
|
+
auth_token_endpoint: string;
|
|
96
|
+
/** New in -11, REQUIRED. */
|
|
97
|
+
person_token_endpoint?: string;
|
|
98
|
+
interaction_endpoint?: string;
|
|
99
|
+
mission_endpoint?: string;
|
|
100
|
+
}
|
|
101
|
+
type PersonTokenOutcome = {
|
|
102
|
+
kind: 'token';
|
|
103
|
+
personToken: string;
|
|
104
|
+
} | {
|
|
105
|
+
kind: 'interaction';
|
|
106
|
+
interaction: Interaction;
|
|
107
|
+
} | {
|
|
108
|
+
kind: 'result';
|
|
109
|
+
status: number;
|
|
110
|
+
body: unknown;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Obtain a person token for one resource, from cache or from the PS.
|
|
114
|
+
*
|
|
115
|
+
* A resource MUST have verified a person token before it issues a resource token,
|
|
116
|
+
* and the agent MUST present one on every authorization endpoint request
|
|
117
|
+
* (protocol §Person Token, §Authorization Endpoint Request) — so this sits in
|
|
118
|
+
* front of the whole authorize-first path, not only of `person-token` resources.
|
|
119
|
+
*
|
|
120
|
+
* The PS MAY require the user to approve the agent acting at this resource before
|
|
121
|
+
* issuing, and answers `202` with `requirement=interaction`. That is surfaced
|
|
122
|
+
* like any other interaction; the caller drives it and retries, and the second
|
|
123
|
+
* request gets a `200`.
|
|
124
|
+
*/
|
|
125
|
+
export declare function obtainPersonToken(cfg: ProxyConfig, ps: PSMetadata, resource: string, missionS256?: string): Promise<PersonTokenOutcome>;
|
|
126
|
+
/**
|
|
127
|
+
* Drop every cached person token. Call when the agent's signing key rotates —
|
|
128
|
+
* every person token binds the same key through `cnf`, so none of them survive.
|
|
129
|
+
* `obtainPersonToken` also detects rotation on its own via the key thumbprint;
|
|
130
|
+
* this is the explicit hook for a host that knows a rotation happened.
|
|
131
|
+
*/
|
|
132
|
+
export declare function flushPersonTokens(cfg: ProxyConfig): Promise<void>;
|
|
54
133
|
type Poller = (url: string) => Promise<Response>;
|
|
55
134
|
export declare function pollUntilDone(poll: Poller, locationUrl: string, timeoutMs?: number, onPoll?: (elapsedMs: number) => void | Promise<void>): Promise<Response>;
|
|
56
|
-
export declare function invokeAtResource(cfg: ProxyConfig, l1: L1Entry, operationId: string, args?: InvokeArgs): Promise<InvokeResult>;
|
|
57
|
-
export declare function invokeAtResourceComplete(cfg: ProxyConfig, l1: L1Entry, operationId: string, onInteraction: InteractionHandler, args?: InvokeArgs, maxRounds?: number, pollTimeoutMs?: number, onPoll?: (elapsedMs: number) => void | Promise<void
|
|
135
|
+
export declare function invokeAtResource(cfg: ProxyConfig, l1: L1Entry, operationId: string, args?: InvokeArgs, opts?: InvokeOptions): Promise<InvokeResult>;
|
|
136
|
+
export declare function invokeAtResourceComplete(cfg: ProxyConfig, l1: L1Entry, operationId: string, onInteraction: InteractionHandler, args?: InvokeArgs, maxRounds?: number, pollTimeoutMs?: number, onPoll?: (elapsedMs: number) => void | Promise<void>, opts?: InvokeOptions): Promise<{
|
|
58
137
|
status: number;
|
|
59
138
|
body: unknown;
|
|
60
139
|
}>;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|