@frontmcp/auth 1.9.1 → 1.9.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.
@@ -1 +1 @@
1
- {"version":3,"file":"authorities.context.d.ts","sourceRoot":"","sources":["../../src/authorities/authorities.context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE9F;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAelF;AA0BD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK;IAClE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAI9G;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGxF;AAED;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuC;IACrE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;gBAEhD,OAAO,GAAE,gCAAqC;IAM1D;;OAEG;IACH,KAAK,CACH,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,EAC/B,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACnC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAChC,4BAA4B;CAoEhC"}
1
+ {"version":3,"file":"authorities.context.d.ts","sourceRoot":"","sources":["../../src/authorities/authorities.context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE9F;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAelF;AA0BD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK;IAClE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAI9G;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGxF;AAQD;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuC;IACrE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;gBAEhD,OAAO,GAAE,gCAAqC;IAM1D;;OAEG;IACH,KAAK,CACH,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,EAC/B,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACnC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAc,GACxC,4BAA4B;CAoEhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"authorities.evaluator.d.ts","sourceRoot":"","sources":["../../src/authorities/authorities.evaluator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAEV,UAAU,EACV,4BAA4B,EAC5B,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,qBAAqB,CAAC;AAM7B;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,4BAA4B,GAAG,iBAAiB,CA4B/G;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,4BAA4B,GAChC,iBAAiB,CA4BnB;AA8FD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,4BAA4B,GAAG,iBAAiB,CAqCrG;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,4BAA4B,GAAG,MAAM,GAAG,SAAS,CAc3G;AAgDD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,EACnC,GAAG,EAAE,4BAA4B,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAS5B"}
1
+ {"version":3,"file":"authorities.evaluator.d.ts","sourceRoot":"","sources":["../../src/authorities/authorities.evaluator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAEV,UAAU,EACV,4BAA4B,EAC5B,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,qBAAqB,CAAC;AAM7B;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,4BAA4B,GAAG,iBAAiB,CA4B/G;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,4BAA4B,GAChC,iBAAiB,CA4BnB;AAqGD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,4BAA4B,GAAG,iBAAiB,CAsCrG;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,4BAA4B,GAAG,MAAM,GAAG,SAAS,CAc3G;AAgDD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,EACnC,GAAG,EAAE,4BAA4B,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAS5B"}
@@ -4,9 +4,10 @@
4
4
  * This is the recommended entry point — prefer `buildAuthContext()` over
5
5
  * directly constructing `FrontMcpAuthContextImpl`.
6
6
  */
7
- import type { AuthoritiesClaimsMapping } from '../authorities/authorities.profiles';
8
- import type { FrontMcpAuthContext, AuthContextPipe } from './frontmcp-auth-context';
9
- import type { AuthContextSourceInfo } from './frontmcp-auth-context.impl';
7
+ import { type ClaimsResolverFn } from '../authorities/authorities.context';
8
+ import { type AuthoritiesClaimsMapping } from '../authorities/authorities.profiles';
9
+ import { type AuthContextPipe, type FrontMcpAuthContext } from './frontmcp-auth-context';
10
+ import { type AuthContextSourceInfo } from './frontmcp-auth-context.impl';
10
11
  /**
11
12
  * Build a {@link FrontMcpAuthContext} from raw auth information.
12
13
  *
@@ -17,6 +18,7 @@ import type { AuthContextSourceInfo } from './frontmcp-auth-context.impl';
17
18
  * @param authInfo - Raw auth info (e.g., from MCP SDK AuthInfo, JWT payload, etc.)
18
19
  * @param claimsMapping - Optional IdP-specific claims mapping (Keycloak, Auth0, Okta, etc.)
19
20
  * @param pipes - Optional pipe functions that extract custom fields from claims
21
+ * @param claimsResolver - Optional resolver that decides the roles, permissions and claims (it wins over claimsMapping)
20
22
  * @returns A frozen, immutable FrontMcpAuthContext instance (with custom extensions if pipes provided)
21
23
  *
22
24
  * @example
@@ -34,6 +36,6 @@ import type { AuthContextSourceInfo } from './frontmcp-auth-context.impl';
34
36
  * ]);
35
37
  * ```
36
38
  */
37
- export declare function buildAuthContext(authInfo: AuthContextSourceInfo, claimsMapping?: AuthoritiesClaimsMapping): FrontMcpAuthContext;
38
- export declare function buildAuthContext(authInfo: AuthContextSourceInfo, claimsMapping: AuthoritiesClaimsMapping | undefined, pipes: AuthContextPipe[]): Promise<FrontMcpAuthContext>;
39
+ export declare function buildAuthContext(authInfo: AuthContextSourceInfo, claimsMapping?: AuthoritiesClaimsMapping, pipes?: undefined, claimsResolver?: ClaimsResolverFn): FrontMcpAuthContext;
40
+ export declare function buildAuthContext(authInfo: AuthContextSourceInfo, claimsMapping: AuthoritiesClaimsMapping | undefined, pipes: AuthContextPipe[], claimsResolver?: ClaimsResolverFn): Promise<FrontMcpAuthContext>;
39
41
  //# sourceMappingURL=frontmcp-auth-context.factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"frontmcp-auth-context.factory.d.ts","sourceRoot":"","sources":["../../src/context/frontmcp-auth-context.factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,qBAAqB,EAC/B,aAAa,CAAC,EAAE,wBAAwB,GACvC,mBAAmB,CAAC;AACvB,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,qBAAqB,EAC/B,aAAa,EAAE,wBAAwB,GAAG,SAAS,EACnD,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"frontmcp-auth-context.factory.d.ts","sourceRoot":"","sources":["../../src/context/frontmcp-auth-context.factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAA2B,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAEnG;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,qBAAqB,EAC/B,aAAa,CAAC,EAAE,wBAAwB,EACxC,KAAK,CAAC,EAAE,SAAS,EACjB,cAAc,CAAC,EAAE,gBAAgB,GAChC,mBAAmB,CAAC;AACvB,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,qBAAqB,EAC/B,aAAa,EAAE,wBAAwB,GAAG,SAAS,EACnD,KAAK,EAAE,eAAe,EAAE,EACxB,cAAc,CAAC,EAAE,gBAAgB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAAC"}
@@ -5,6 +5,7 @@
5
5
  * roles/permissions using the same `resolveDotPath` utility used by the
6
6
  * authorities engine, and exposes convenience query methods.
7
7
  */
8
+ import { type ClaimsResolverFn } from '../authorities/authorities.context';
8
9
  import type { AuthoritiesClaimsMapping } from '../authorities/authorities.profiles';
9
10
  import type { FrontMcpAuthContext, FrontMcpAuthUser } from './frontmcp-auth-context';
10
11
  /**
@@ -53,7 +54,7 @@ export declare class FrontMcpAuthContextImpl implements FrontMcpAuthContext {
53
54
  readonly claims: Readonly<Record<string, unknown>>;
54
55
  readonly roles: readonly string[];
55
56
  readonly permissions: readonly string[];
56
- constructor(source: AuthContextSourceInfo, claimsMapping?: AuthoritiesClaimsMapping);
57
+ constructor(source: AuthContextSourceInfo, claimsMapping?: AuthoritiesClaimsMapping, claimsResolver?: ClaimsResolverFn);
57
58
  hasRole(role: string): boolean;
58
59
  hasAllRoles(roles: readonly string[]): boolean;
59
60
  hasAnyRole(roles: readonly string[]): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"frontmcp-auth-context.impl.d.ts","sourceRoot":"","sources":["../../src/context/frontmcp-auth-context.impl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAErF;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,yDAAyD;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAgBD;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;gBAE5B,MAAM,EAAE,qBAAqB,EAAE,aAAa,CAAC,EAAE,wBAAwB;IA4DnF,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAI9C,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAI7C,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI1C,iBAAiB,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAI1D,gBAAgB,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAIzD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIhC,YAAY,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAIhD,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAM/C;;;OAGG;IACH,OAAO,CAAC,cAAc;CASvB"}
1
+ {"version":3,"file":"frontmcp-auth-context.impl.d.ts","sourceRoot":"","sources":["../../src/context/frontmcp-auth-context.impl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAErF;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,yDAAyD;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAgBD;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;gBAGtC,MAAM,EAAE,qBAAqB,EAC7B,aAAa,CAAC,EAAE,wBAAwB,EACxC,cAAc,CAAC,EAAE,gBAAgB;IAsEnC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAI9C,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAI7C,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI1C,iBAAiB,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAI1D,gBAAgB,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAIzD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIhC,YAAY,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAIhD,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO;IAM/C;;;OAGG;IACH,OAAO,CAAC,cAAc;CASvB"}
@@ -48,6 +48,8 @@ export interface AppAuthInfo {
48
48
  id: string;
49
49
  name: string;
50
50
  auth?: AuthOptions;
51
+ /** A remote app's `remoteAuth.mode`. */
52
+ remoteAuthMode?: string;
51
53
  }
52
54
  export declare function deriveProviderId(options: AuthOptions): string;
53
55
  export declare function detectAuthProviders(parentAuth: AuthOptions | undefined, apps: AppAuthInfo[]): AuthProviderDetectionResult;
@@ -1 +1 @@
1
- {"version":3,"file":"auth-provider-detection.d.ts","sourceRoot":"","sources":["../../src/detection/auth-provider-detection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOrD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;gCAOrC,CAAC;AAEH,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;gCAQ5C,CAAC;AAMH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAMD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAiB7D;AAyBD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,IAAI,EAAE,WAAW,EAAE,GAClB,2BAA2B,CA4E7B;AAcD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,UAAU,EAAE,WAAW,GAAG,SAAS,GAClC,OAAO,CAaT;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAGtG;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAGpG"}
1
+ {"version":3,"file":"auth-provider-detection.d.ts","sourceRoot":"","sources":["../../src/detection/auth-provider-detection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAcrD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;gCAOrC,CAAC;AAEH,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;gCAQ5C,CAAC;AAMH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,wCAAwC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAiB7D;AAyBD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,IAAI,EAAE,WAAW,EAAE,GAClB,2BAA2B,CA+F7B;AA6BD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,UAAU,EAAE,WAAW,GAAG,SAAS,GAClC,OAAO,CAaT;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAGtG;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAGpG"}
package/esm/index.mjs CHANGED
@@ -867,7 +867,8 @@ var JwksService = class {
867
867
  * 1) inline jwks (if provided) → cache & return
868
868
  * 2) cached & fresh (TTL) → return
869
869
  * 3) explicit jwksUri → fetch, cache, return
870
- * 4) discover jwks_uri → the issuer's OAuth authorization server
870
+ * 4) `<issuer>/.well-known/jwks.json` → fetch, cache, return
871
+ * 5) discover jwks_uri → the issuer's OAuth authorization server
871
872
  * metadata (RFC 8414), else its OpenID configuration (OpenID Connect
872
873
  * Discovery 1.0 §4, where Google, Okta, Auth0 and Entra publish it),
873
874
  * then fetch jwks_uri, cache, return
@@ -886,6 +887,8 @@ var JwksService = class {
886
887
  if (fromUri?.keys?.length) return fromUri;
887
888
  }
888
889
  const issuer = trimSlash(ref.issuerUrl);
890
+ const fromWellKnown = await this.tryFetchJwks(ref.id, `${issuer}/.well-known/jwks.json`);
891
+ if (fromWellKnown?.keys?.length) return fromWellKnown;
889
892
  for (const document of ["oauth-authorization-server", "openid-configuration"]) {
890
893
  const meta = await this.tryFetchAsMeta(`${issuer}/.well-known/${document}`);
891
894
  const uri = meta && typeof meta === "object" && meta["jwks_uri"] ? String(meta["jwks_uri"]) : void 0;
@@ -3935,7 +3938,8 @@ function deriveTypedUser(claims) {
3935
3938
  ...claims,
3936
3939
  iss: extractClaimValue(claims, "iss", isString) ?? "",
3937
3940
  sid: extractClaimValue(claims, "sid", isString),
3938
- sub: extractClaimValue(claims, "sub", isString) ?? "",
3941
+ // RFC 9068 §2.2: a client-credentials token names the client as its subject; some IdPs only put it in client_id / azp
3942
+ sub: extractClaimValue(claims, "sub", isString) ?? extractClaimValue(claims, "client_id", isString) ?? extractClaimValue(claims, "azp", isString) ?? "",
3939
3943
  exp: extractClaimValue(claims, "exp", isNumber),
3940
3944
  iat: extractClaimValue(claims, "iat", isNumber),
3941
3945
  aud: extractClaimValue(claims, "aud", isStringOrStringArray),
@@ -8760,9 +8764,17 @@ function detectAuthProviders(parentAuth, apps) {
8760
8764
  `Invalid auth configuration: Parent uses transparent mode but apps have their own auth providers. Transparent mode passes tokens through without modification, which is incompatible with multi-provider setups. Change parent auth to local or remote mode to properly manage tokens for each provider. Detected providers: ${[...providers.keys()].join(", ")}`
8761
8765
  );
8762
8766
  }
8763
- if (uniqueProviderCount > 1 && parentAuth && isPublicMode(parentAuth)) {
8764
- warnings.push(
8765
- `Parent uses public mode but apps have auth providers configured. App-level auth will be used, but consider using local or remote mode at parent for unified auth management.`
8767
+ const sharedEndpointUnenforced = !parentAuth || isPublicMode(parentAuth) || isStaticMode(parentAuth);
8768
+ const unenforcedAppIds = apps.filter((app) => app.auth && !isPublicMode(app.auth) && !staticParentEnforces(parentAuth, app.auth)).map((app) => app.id);
8769
+ if (sharedEndpointUnenforced && unenforcedAppIds.length > 0) {
8770
+ validationErrors.push(
8771
+ `App-level auth is not enforced on the shared endpoint of a server in ${parentAuth?.mode ?? "public"} mode, so the tools of ${unenforcedAppIds.join(", ")} would be served without it. Serve the app on its own endpoint with standalone: true or splitByApp: true, or run the server in local or remote mode with incrementalAuth enabled, which checks each tool call against the apps the caller has authorized (without incrementalAuth, local and remote mode do not check app grants per tool call).`
8772
+ );
8773
+ }
8774
+ const tokenMintingAppIds = apps.filter((app) => app.remoteAuthMode === "forward" && !(parentAuth && isTransparentMode(parentAuth))).map((app) => app.id);
8775
+ if (tokenMintingAppIds.length > 0) {
8776
+ validationErrors.push(
8777
+ `remoteAuth: { mode: 'forward' } on ${tokenMintingAppIds.join(", ")} would send the remote a token this server minted or holds itself: only a server in transparent mode receives its callers' tokens from the identity provider. Use remoteAuth: { mode: 'static', credentials } (or transportOptions.headers) for the remote, or run the server in transparent mode.`
8766
8778
  );
8767
8779
  }
8768
8780
  return {
@@ -8775,6 +8787,14 @@ function detectAuthProviders(parentAuth, apps) {
8775
8787
  warnings
8776
8788
  };
8777
8789
  }
8790
+ function staticParentEnforces(parentAuth, appAuth) {
8791
+ if (!parentAuth || !isStaticMode(parentAuth) || !isStaticMode(appAuth)) return false;
8792
+ const parent = staticAuthOptionsSchema.safeParse(parentAuth);
8793
+ const app = staticAuthOptionsSchema.safeParse(appAuth);
8794
+ if (!parent.success || !app.success) return false;
8795
+ const sameChallenge = parent.data.header.toLowerCase() === app.data.header.toLowerCase() && parent.data.scheme === app.data.scheme;
8796
+ return sameChallenge && parent.data.tokens.every((token) => app.data.tokens.includes(token));
8797
+ }
8778
8798
  function getProviderUrl(options) {
8779
8799
  if (isTransparentMode(options)) {
8780
8800
  return options.provider;
@@ -9115,6 +9135,16 @@ function isLoopbackRedirectUri(uri) {
9115
9135
  return false;
9116
9136
  }
9117
9137
 
9138
+ // libs/auth/src/utils/token-scopes.utils.ts
9139
+ function scopesFromClaims(claims) {
9140
+ const scopes = [claims?.scope, claims?.scp].flatMap((claim) => {
9141
+ if (typeof claim === "string") return claim.split(/\s+/).filter(Boolean);
9142
+ if (Array.isArray(claim)) return claim.filter((scope) => typeof scope === "string");
9143
+ return [];
9144
+ });
9145
+ return [...new Set(scopes)];
9146
+ }
9147
+
9118
9148
  // libs/auth/src/vault/auth-providers.types.ts
9119
9149
  import { z as z19 } from "@frontmcp/lazy-zod";
9120
9150
  var credentialScopeSchema = z19.enum(["global", "user", "session"]);
@@ -10132,6 +10162,7 @@ var LazyCredentialLoader = class {
10132
10162
  };
10133
10163
 
10134
10164
  // libs/auth/src/authorities/authorities.context.ts
10165
+ import { getEnv as getEnv4 } from "@frontmcp/utils";
10135
10166
  function resolveDotPath(obj, path) {
10136
10167
  if (path in obj) {
10137
10168
  return obj[path];
@@ -10172,6 +10203,10 @@ function signedInSubject(rawSub, mappedSub) {
10172
10203
  if (rawSub !== void 0 && isAnonymousSubject(rawSub)) return void 0;
10173
10204
  return [mappedSub, rawSub].find((candidate) => !isAnonymousSubject(candidate));
10174
10205
  }
10206
+ var runtimeEnv = new Proxy(
10207
+ {},
10208
+ { get: (_target, name) => typeof name === "string" ? getEnv4(name) : void 0 }
10209
+ );
10175
10210
  var AuthoritiesContextBuilder = class {
10176
10211
  claimsMapping;
10177
10212
  claimsResolver;
@@ -10184,7 +10219,7 @@ var AuthoritiesContextBuilder = class {
10184
10219
  /**
10185
10220
  * Build an evaluation context from AuthInfo and tool input.
10186
10221
  */
10187
- build(authInfo, input = {}, env = {}) {
10222
+ build(authInfo, input = {}, env = runtimeEnv) {
10188
10223
  if (this.claimsResolver) {
10189
10224
  const resolved = this.claimsResolver(authInfo);
10190
10225
  return {
@@ -10254,9 +10289,9 @@ var FrontMcpAuthContextImpl = class {
10254
10289
  claims;
10255
10290
  roles;
10256
10291
  permissions;
10257
- constructor(source, claimsMapping) {
10292
+ constructor(source, claimsMapping, claimsResolver) {
10258
10293
  const rawUser = resolveAuthUser(source);
10259
- const mappedSub = claimsMapping?.userId ? resolveDotPath(this.buildRawClaims(source), claimsMapping.userId) : void 0;
10294
+ const mappedSub = !claimsResolver && claimsMapping?.userId ? resolveDotPath(this.buildRawClaims(source), claimsMapping.userId) : void 0;
10260
10295
  const signedInSub = signedInSubject(rawUser.sub, mappedSub);
10261
10296
  const sub = signedInSub ?? (typeof rawUser.sub === "string" ? rawUser.sub : "");
10262
10297
  this.user = Object.freeze({
@@ -10274,6 +10309,13 @@ var FrontMcpAuthContextImpl = class {
10274
10309
  this.scopes = Object.freeze(
10275
10310
  Array.isArray(source.scopes) ? source.scopes.filter((s) => typeof s === "string") : []
10276
10311
  );
10312
+ if (claimsResolver) {
10313
+ const resolved = claimsResolver(source);
10314
+ this.claims = Object.freeze({ ...resolved.claims });
10315
+ this.roles = Object.freeze([...toStringArray2(resolved.roles)]);
10316
+ this.permissions = Object.freeze([...toStringArray2(resolved.permissions)]);
10317
+ return;
10318
+ }
10277
10319
  const rawClaims = this.buildRawClaims(source);
10278
10320
  this.claims = Object.freeze({ ...rawClaims });
10279
10321
  if (claimsMapping?.roles) {
@@ -10334,8 +10376,8 @@ var FrontMcpAuthContextImpl = class {
10334
10376
  };
10335
10377
 
10336
10378
  // libs/auth/src/context/frontmcp-auth-context.factory.ts
10337
- function buildAuthContext(authInfo, claimsMapping, pipes) {
10338
- const base = new FrontMcpAuthContextImpl(authInfo, claimsMapping);
10379
+ function buildAuthContext(authInfo, claimsMapping, pipes, claimsResolver) {
10380
+ const base = new FrontMcpAuthContextImpl(authInfo, claimsMapping, claimsResolver);
10339
10381
  if (!pipes || pipes.length === 0) {
10340
10382
  return base;
10341
10383
  }
@@ -10587,6 +10629,10 @@ function evaluateCondition(condition, envelope, ctx) {
10587
10629
  const expected = resolveValue(condition.value, ctx);
10588
10630
  return applyOperator(actual, condition.op, expected);
10589
10631
  }
10632
+ var REDACTED_ENV_VALUE = "[redacted]";
10633
+ function reportableActual(path, actual) {
10634
+ return path === "env" || path.startsWith("env.") ? REDACTED_ENV_VALUE : actual;
10635
+ }
10590
10636
  function evaluateAbac(policy, ctx) {
10591
10637
  const envelope = buildContextEnvelope(ctx);
10592
10638
  if (policy.match) {
@@ -10594,10 +10640,11 @@ function evaluateAbac(policy, ctx) {
10594
10640
  const actual = resolveDotPath(envelope, path);
10595
10641
  const expected = resolveValue(expectedRaw, ctx);
10596
10642
  if (expected === void 0 || actual !== expected) {
10643
+ const reported = reportableActual(path, actual);
10597
10644
  return {
10598
10645
  granted: false,
10599
- deniedBy: `attributes.match: '${path}' expected '${String(expected)}' but got '${String(actual)}'`,
10600
- denial: { kind: "attributes", path: "attributes.match", expected, actual },
10646
+ deniedBy: `attributes.match: '${path}' expected '${String(expected)}' but got '${String(reported)}'`,
10647
+ denial: { kind: "attributes", path: "attributes.match", expected, actual: reported },
10601
10648
  evaluatedPolicies: ["attributes.match"]
10602
10649
  };
10603
10650
  }
@@ -10608,7 +10655,7 @@ function evaluateAbac(policy, ctx) {
10608
10655
  const condition = policy.conditions[i];
10609
10656
  if (!evaluateCondition(condition, envelope, ctx)) {
10610
10657
  const expected = resolveValue(condition.value, ctx);
10611
- const actual = resolveDotPath(envelope, condition.path);
10658
+ const actual = reportableActual(condition.path, resolveDotPath(envelope, condition.path));
10612
10659
  return {
10613
10660
  granted: false,
10614
10661
  deniedBy: `attributes.conditions: '${condition.path}' failed '${condition.op}' check against '${String(expected)}'`,
@@ -11347,6 +11394,21 @@ var basicApplier = {
11347
11394
  function isFrontMcpCredentials(creds) {
11348
11395
  return typeof creds === "object" && creds !== null && "provider" in creds && typeof creds.provider === "string" && creds.provider.length > 0;
11349
11396
  }
11397
+ function providerHeadersCredentials(resolveHeaders) {
11398
+ return {
11399
+ async applyCredentials(_url, init) {
11400
+ const { credentials, ...cleanInit } = init;
11401
+ if (!isFrontMcpCredentials(credentials)) {
11402
+ return { init: typeof credentials === "string" ? init : cleanInit };
11403
+ }
11404
+ const headers = new Headers(cleanInit.headers);
11405
+ for (const [name, value] of Object.entries(await resolveHeaders(credentials.provider))) {
11406
+ headers.set(name, value);
11407
+ }
11408
+ return { init: { ...cleanInit, headers } };
11409
+ }
11410
+ };
11411
+ }
11350
11412
  var FetchCredentialMiddleware = class {
11351
11413
  constructor(tokenAccessor, appliers) {
11352
11414
  this.tokenAccessor = tokenAccessor;
@@ -11647,6 +11709,7 @@ export {
11647
11709
  privateKeyCredentialSchema,
11648
11710
  progressiveAuthStateSchema,
11649
11711
  providerConfigSchema,
11712
+ providerHeadersCredentials,
11650
11713
  publicAccessConfigSchema,
11651
11714
  publicAuthOptionsSchema,
11652
11715
  queryApplier,
@@ -11664,6 +11727,7 @@ export {
11664
11727
  resourceIdRefSchema,
11665
11728
  resourceScopesFor,
11666
11729
  safeDecrypt,
11730
+ scopesFromClaims,
11667
11731
  sealPendingLogin,
11668
11732
  secureStoreConfigSchema,
11669
11733
  secureStoreCustomBackendSchema,
package/esm/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontmcp/auth",
3
- "version": "1.9.1",
3
+ "version": "1.9.2",
4
4
  "description": "FrontMCP Auth - Authentication, session management, and credential vault",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "homepage": "https://docs.agentfront.dev",
@@ -47,8 +47,8 @@
47
47
  "node": ">=24.0.0"
48
48
  },
49
49
  "peerDependencies": {
50
- "@frontmcp/lazy-zod": "1.9.1",
51
- "@frontmcp/storage-sqlite": "1.9.1",
50
+ "@frontmcp/lazy-zod": "1.9.2",
51
+ "@frontmcp/storage-sqlite": "1.9.2",
52
52
  "@vercel/kv": "^3.0.0",
53
53
  "ioredis": "^5.0.0"
54
54
  },
@@ -64,8 +64,8 @@
64
64
  }
65
65
  },
66
66
  "dependencies": {
67
- "@frontmcp/di": "1.9.1",
68
- "@frontmcp/utils": "1.9.1",
67
+ "@frontmcp/di": "1.9.2",
68
+ "@frontmcp/utils": "1.9.2",
69
69
  "jose": "^6.0.0"
70
70
  },
71
71
  "devDependencies": {
@@ -70,6 +70,16 @@ export type FrontMcpFetchInit = Omit<RequestInit, 'credentials'> & {
70
70
  credentials?: FrontMcpCredentials | RequestCredentials;
71
71
  };
72
72
  export declare function isFrontMcpCredentials(creds: unknown): creds is FrontMcpCredentials;
73
+ /** What applies `credentials: { provider }` to an outgoing request. */
74
+ export interface FetchCredentialApplier {
75
+ applyCredentials(url: string, init: FrontMcpFetchInit): Promise<CredentialApplyResult>;
76
+ }
77
+ /**
78
+ * Applies the headers a provider's credential resolves to (what `this.authProviders.headers(provider)`
79
+ * returns), so each provider decides how its credential is sent. A provider without a credential adds
80
+ * none. The `credentials` object itself is never passed on to `fetch`.
81
+ */
82
+ export declare function providerHeadersCredentials(resolveHeaders: (providerName: string) => Promise<Record<string, string>>): FetchCredentialApplier;
73
83
  /**
74
84
  * Middleware that resolves upstream provider tokens and delegates to
75
85
  * the provider's CredentialApplier to inject them into outgoing requests.
@@ -86,7 +96,7 @@ export declare function isFrontMcpCredentials(creds: unknown): creds is FrontMcp
86
96
  * });
87
97
  * ```
88
98
  */
89
- export declare class FetchCredentialMiddleware {
99
+ export declare class FetchCredentialMiddleware implements FetchCredentialApplier {
90
100
  private readonly tokenAccessor;
91
101
  private readonly appliers;
92
102
  constructor(tokenAccessor: TokenAccessor, appliers?: Record<string, CredentialApplier>);
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-credential-middleware.d.ts","sourceRoot":"","sources":["../../src/fetch/fetch-credential-middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACtD;AAED;;;GAGG;AACH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,IAAI,EAAE,WAAW,CAAC;IAClB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,qBAAqB,CAAC;CAC7E;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,iBAM3B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAQpF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAQjE;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,iBAQ1B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG;IACjE,WAAW,CAAC,EAAE,mBAAmB,GAAG,kBAAkB,CAAC;CACxD,CAAC;AAMF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAQlF;AAMD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,yBAAyB;IAIlC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAHhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;gBAGvC,aAAa,EAAE,aAAa,EAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAK9C;;;OAGG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA8B7F"}
1
+ {"version":3,"file":"fetch-credential-middleware.d.ts","sourceRoot":"","sources":["../../src/fetch/fetch-credential-middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACtD;AAED;;;GAGG;AACH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,IAAI,EAAE,WAAW,CAAC;IAClB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,qBAAqB,CAAC;CAC7E;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,iBAM3B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAQpF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAQjE;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,iBAQ1B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG;IACjE,WAAW,CAAC,EAAE,mBAAmB,GAAG,kBAAkB,CAAC;CACxD,CAAC;AAMF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAQlF;AAMD,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACxF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACxE,sBAAsB,CAcxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,yBAA0B,YAAW,sBAAsB;IAIpE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAHhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;gBAGvC,aAAa,EAAE,aAAa,EAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAK9C;;;OAGG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA8B7F"}
package/fetch/index.d.ts CHANGED
@@ -5,6 +5,6 @@
5
5
  * fetch requests via the `credentials: { provider: '...' }` pattern.
6
6
  * Auth providers decide HOW to apply credentials (Bearer, API key, query param, basic).
7
7
  */
8
- export { FetchCredentialMiddleware, isFrontMcpCredentials, bearerApplier, basicApplier, headerApplier, queryApplier, } from './fetch-credential-middleware';
9
- export type { TokenAccessor, CredentialApplier, CredentialApplyResult, FrontMcpCredentials, FrontMcpFetchInit, } from './fetch-credential-middleware';
8
+ export { FetchCredentialMiddleware, providerHeadersCredentials, isFrontMcpCredentials, bearerApplier, basicApplier, headerApplier, queryApplier, } from './fetch-credential-middleware';
9
+ export type { FetchCredentialApplier, TokenAccessor, CredentialApplier, CredentialApplyResult, FrontMcpCredentials, FrontMcpFetchInit, } from './fetch-credential-middleware';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetch/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,+BAA+B,CAAC;AAEvC,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetch/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,+BAA+B,CAAC;AAEvC,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC"}
package/index.d.ts CHANGED
@@ -49,13 +49,13 @@ export * from './options';
49
49
  export { consentToolItemSchema, consentSelectionSchema, consentStateSchema, federatedProviderItemSchema, federatedLoginStateSchema, federatedSelectionSchema, } from './consent';
50
50
  export type { ConsentToolItem, ConsentSelection, ConsentState, FederatedProviderItem, FederatedLoginState, FederatedSelection, } from './consent';
51
51
  export * from './detection';
52
- export { buildWwwAuthenticate, buildPrmUrl, buildUnauthorizedHeader, buildInvalidTokenHeader, buildInsufficientScopeHeader, buildInvalidRequestHeader, parseWwwAuthenticate, validateAudience, createAudienceValidator, deriveExpectedAudience, AudienceValidator, deriveAuthorizationId, advertisedScopes, DEFAULT_ALLOWED_SCOPES, grantScopes, resourceScopesFor, isLoopbackRedirectUri, } from './utils';
52
+ export { buildWwwAuthenticate, buildPrmUrl, buildUnauthorizedHeader, buildInvalidTokenHeader, buildInsufficientScopeHeader, buildInvalidRequestHeader, parseWwwAuthenticate, validateAudience, createAudienceValidator, deriveExpectedAudience, AudienceValidator, deriveAuthorizationId, advertisedScopes, DEFAULT_ALLOWED_SCOPES, grantScopes, resourceScopesFor, scopesFromClaims, isLoopbackRedirectUri, } from './utils';
53
53
  export type { BearerErrorCode, ResourceScopeOptions, WwwAuthenticateOptions, AudienceValidationResult, AudienceValidatorOptions, } from './utils';
54
54
  export { type CredentialScope, type LoadingStrategy, type GetCredentialOptions, type ResolvedCredential, type CredentialFactoryContext, type CredentialFactory, type CredentialRefreshFn, type CredentialHeadersFn, type CredentialProviderConfig, type AuthProviderMapping, type CredentialCacheEntry, type VaultStorageKey, type AuthProvidersVaultOptions, type CredentialEventType, type CredentialEvent, type CacheStats, credentialScopeSchema, loadingStrategySchema, getCredentialOptionsSchema, credentialProviderConfigSchema, authProviderMappingSchema, authProvidersVaultOptionsSchema, extractCredentialExpiry, CredentialCache, type AuthProvidersAccessor, AUTH_PROVIDERS_ACCESSOR, AuthProvidersAccessorImpl, AuthProvidersRegistry, AUTH_PROVIDERS_REGISTRY, type NormalizedProviderConfig, AuthProvidersVault, AUTH_PROVIDERS_VAULT, EagerCredentialLoader, type EagerLoadResult, LazyCredentialLoader, } from './vault';
55
55
  export { type CimdLogger, noopLogger, clientMetadataDocumentSchema, cimdCacheConfigSchema, cimdSecurityConfigSchema, cimdNetworkConfigSchema, cimdConfigSchema, type ClientMetadataDocument, type ClientMetadataDocumentInput, type CimdCacheConfig, type CimdSecurityConfig, type CimdNetworkConfig, type CimdConfig, type CimdConfigInput, type CimdResolutionResult, CimdError, InvalidClientIdUrlError, CimdFetchError, CimdValidationError, CimdClientIdMismatchError, CimdSecurityError, RedirectUriMismatchError, CimdResponseTooLargeError, CimdDisabledError, isCimdClientId, validateClientIdUrl, checkSsrfProtection, hasOnlyLocalhostRedirectUris, InMemoryCimdCache, extractCacheHeaders, parseCacheHeaders, type CimdCacheEntry, type CacheableHeaders, CimdService, } from './cimd';
56
56
  export { FrontMcpAuthContextImpl, buildAuthContext } from './context';
57
57
  export type { FrontMcpAuthContext, FrontMcpAuthUser, AuthContextSourceInfo } from './context';
58
58
  export * from './authorities';
59
- export { FetchCredentialMiddleware, isFrontMcpCredentials, bearerApplier, basicApplier, headerApplier, queryApplier, } from './fetch';
60
- export type { TokenAccessor, CredentialApplier, FrontMcpCredentials, FrontMcpFetchInit } from './fetch';
59
+ export { FetchCredentialMiddleware, providerHeadersCredentials, isFrontMcpCredentials, bearerApplier, basicApplier, headerApplier, queryApplier, } from './fetch';
60
+ export type { FetchCredentialApplier, TokenAccessor, CredentialApplier, FrontMcpCredentials, FrontMcpFetchInit, } from './fetch';
61
61
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/index.js CHANGED
@@ -500,6 +500,7 @@ __export(index_exports, {
500
500
  privateKeyCredentialSchema: () => privateKeyCredentialSchema,
501
501
  progressiveAuthStateSchema: () => progressiveAuthStateSchema,
502
502
  providerConfigSchema: () => providerConfigSchema,
503
+ providerHeadersCredentials: () => providerHeadersCredentials,
503
504
  publicAccessConfigSchema: () => publicAccessConfigSchema,
504
505
  publicAuthOptionsSchema: () => publicAuthOptionsSchema,
505
506
  queryApplier: () => queryApplier,
@@ -517,6 +518,7 @@ __export(index_exports, {
517
518
  resourceIdRefSchema: () => resourceIdRefSchema,
518
519
  resourceScopesFor: () => resourceScopesFor,
519
520
  safeDecrypt: () => safeDecrypt,
521
+ scopesFromClaims: () => scopesFromClaims,
520
522
  sealPendingLogin: () => sealPendingLogin,
521
523
  secureStoreConfigSchema: () => secureStoreConfigSchema,
522
524
  secureStoreCustomBackendSchema: () => secureStoreCustomBackendSchema,
@@ -1207,7 +1209,8 @@ var JwksService = class {
1207
1209
  * 1) inline jwks (if provided) → cache & return
1208
1210
  * 2) cached & fresh (TTL) → return
1209
1211
  * 3) explicit jwksUri → fetch, cache, return
1210
- * 4) discover jwks_uri → the issuer's OAuth authorization server
1212
+ * 4) `<issuer>/.well-known/jwks.json` → fetch, cache, return
1213
+ * 5) discover jwks_uri → the issuer's OAuth authorization server
1211
1214
  * metadata (RFC 8414), else its OpenID configuration (OpenID Connect
1212
1215
  * Discovery 1.0 §4, where Google, Okta, Auth0 and Entra publish it),
1213
1216
  * then fetch jwks_uri, cache, return
@@ -1226,6 +1229,8 @@ var JwksService = class {
1226
1229
  if (fromUri?.keys?.length) return fromUri;
1227
1230
  }
1228
1231
  const issuer = trimSlash(ref.issuerUrl);
1232
+ const fromWellKnown = await this.tryFetchJwks(ref.id, `${issuer}/.well-known/jwks.json`);
1233
+ if (fromWellKnown?.keys?.length) return fromWellKnown;
1229
1234
  for (const document of ["oauth-authorization-server", "openid-configuration"]) {
1230
1235
  const meta = await this.tryFetchAsMeta(`${issuer}/.well-known/${document}`);
1231
1236
  const uri = meta && typeof meta === "object" && meta["jwks_uri"] ? String(meta["jwks_uri"]) : void 0;
@@ -4248,7 +4253,8 @@ function deriveTypedUser(claims) {
4248
4253
  ...claims,
4249
4254
  iss: extractClaimValue(claims, "iss", isString) ?? "",
4250
4255
  sid: extractClaimValue(claims, "sid", isString),
4251
- sub: extractClaimValue(claims, "sub", isString) ?? "",
4256
+ // RFC 9068 §2.2: a client-credentials token names the client as its subject; some IdPs only put it in client_id / azp
4257
+ sub: extractClaimValue(claims, "sub", isString) ?? extractClaimValue(claims, "client_id", isString) ?? extractClaimValue(claims, "azp", isString) ?? "",
4252
4258
  exp: extractClaimValue(claims, "exp", isNumber),
4253
4259
  iat: extractClaimValue(claims, "iat", isNumber),
4254
4260
  aud: extractClaimValue(claims, "aud", isStringOrStringArray),
@@ -9073,9 +9079,17 @@ function detectAuthProviders(parentAuth, apps) {
9073
9079
  `Invalid auth configuration: Parent uses transparent mode but apps have their own auth providers. Transparent mode passes tokens through without modification, which is incompatible with multi-provider setups. Change parent auth to local or remote mode to properly manage tokens for each provider. Detected providers: ${[...providers.keys()].join(", ")}`
9074
9080
  );
9075
9081
  }
9076
- if (uniqueProviderCount > 1 && parentAuth && isPublicMode(parentAuth)) {
9077
- warnings.push(
9078
- `Parent uses public mode but apps have auth providers configured. App-level auth will be used, but consider using local or remote mode at parent for unified auth management.`
9082
+ const sharedEndpointUnenforced = !parentAuth || isPublicMode(parentAuth) || isStaticMode(parentAuth);
9083
+ const unenforcedAppIds = apps.filter((app) => app.auth && !isPublicMode(app.auth) && !staticParentEnforces(parentAuth, app.auth)).map((app) => app.id);
9084
+ if (sharedEndpointUnenforced && unenforcedAppIds.length > 0) {
9085
+ validationErrors.push(
9086
+ `App-level auth is not enforced on the shared endpoint of a server in ${parentAuth?.mode ?? "public"} mode, so the tools of ${unenforcedAppIds.join(", ")} would be served without it. Serve the app on its own endpoint with standalone: true or splitByApp: true, or run the server in local or remote mode with incrementalAuth enabled, which checks each tool call against the apps the caller has authorized (without incrementalAuth, local and remote mode do not check app grants per tool call).`
9087
+ );
9088
+ }
9089
+ const tokenMintingAppIds = apps.filter((app) => app.remoteAuthMode === "forward" && !(parentAuth && isTransparentMode(parentAuth))).map((app) => app.id);
9090
+ if (tokenMintingAppIds.length > 0) {
9091
+ validationErrors.push(
9092
+ `remoteAuth: { mode: 'forward' } on ${tokenMintingAppIds.join(", ")} would send the remote a token this server minted or holds itself: only a server in transparent mode receives its callers' tokens from the identity provider. Use remoteAuth: { mode: 'static', credentials } (or transportOptions.headers) for the remote, or run the server in transparent mode.`
9079
9093
  );
9080
9094
  }
9081
9095
  return {
@@ -9088,6 +9102,14 @@ function detectAuthProviders(parentAuth, apps) {
9088
9102
  warnings
9089
9103
  };
9090
9104
  }
9105
+ function staticParentEnforces(parentAuth, appAuth) {
9106
+ if (!parentAuth || !isStaticMode(parentAuth) || !isStaticMode(appAuth)) return false;
9107
+ const parent = staticAuthOptionsSchema.safeParse(parentAuth);
9108
+ const app = staticAuthOptionsSchema.safeParse(appAuth);
9109
+ if (!parent.success || !app.success) return false;
9110
+ const sameChallenge = parent.data.header.toLowerCase() === app.data.header.toLowerCase() && parent.data.scheme === app.data.scheme;
9111
+ return sameChallenge && parent.data.tokens.every((token) => app.data.tokens.includes(token));
9112
+ }
9091
9113
  function getProviderUrl(options) {
9092
9114
  if (isTransparentMode(options)) {
9093
9115
  return options.provider;
@@ -9428,6 +9450,16 @@ function isLoopbackRedirectUri(uri) {
9428
9450
  return false;
9429
9451
  }
9430
9452
 
9453
+ // libs/auth/src/utils/token-scopes.utils.ts
9454
+ function scopesFromClaims(claims) {
9455
+ const scopes = [claims?.scope, claims?.scp].flatMap((claim) => {
9456
+ if (typeof claim === "string") return claim.split(/\s+/).filter(Boolean);
9457
+ if (Array.isArray(claim)) return claim.filter((scope) => typeof scope === "string");
9458
+ return [];
9459
+ });
9460
+ return [...new Set(scopes)];
9461
+ }
9462
+
9431
9463
  // libs/auth/src/vault/auth-providers.types.ts
9432
9464
  var import_lazy_zod19 = require("@frontmcp/lazy-zod");
9433
9465
  var credentialScopeSchema = import_lazy_zod19.z.enum(["global", "user", "session"]);
@@ -10445,6 +10477,7 @@ var LazyCredentialLoader = class {
10445
10477
  };
10446
10478
 
10447
10479
  // libs/auth/src/authorities/authorities.context.ts
10480
+ var import_utils47 = require("@frontmcp/utils");
10448
10481
  function resolveDotPath(obj, path) {
10449
10482
  if (path in obj) {
10450
10483
  return obj[path];
@@ -10485,6 +10518,10 @@ function signedInSubject(rawSub, mappedSub) {
10485
10518
  if (rawSub !== void 0 && isAnonymousSubject(rawSub)) return void 0;
10486
10519
  return [mappedSub, rawSub].find((candidate) => !isAnonymousSubject(candidate));
10487
10520
  }
10521
+ var runtimeEnv = new Proxy(
10522
+ {},
10523
+ { get: (_target, name) => typeof name === "string" ? (0, import_utils47.getEnv)(name) : void 0 }
10524
+ );
10488
10525
  var AuthoritiesContextBuilder = class {
10489
10526
  claimsMapping;
10490
10527
  claimsResolver;
@@ -10497,7 +10534,7 @@ var AuthoritiesContextBuilder = class {
10497
10534
  /**
10498
10535
  * Build an evaluation context from AuthInfo and tool input.
10499
10536
  */
10500
- build(authInfo, input = {}, env = {}) {
10537
+ build(authInfo, input = {}, env = runtimeEnv) {
10501
10538
  if (this.claimsResolver) {
10502
10539
  const resolved = this.claimsResolver(authInfo);
10503
10540
  return {
@@ -10567,9 +10604,9 @@ var FrontMcpAuthContextImpl = class {
10567
10604
  claims;
10568
10605
  roles;
10569
10606
  permissions;
10570
- constructor(source, claimsMapping) {
10607
+ constructor(source, claimsMapping, claimsResolver) {
10571
10608
  const rawUser = resolveAuthUser(source);
10572
- const mappedSub = claimsMapping?.userId ? resolveDotPath(this.buildRawClaims(source), claimsMapping.userId) : void 0;
10609
+ const mappedSub = !claimsResolver && claimsMapping?.userId ? resolveDotPath(this.buildRawClaims(source), claimsMapping.userId) : void 0;
10573
10610
  const signedInSub = signedInSubject(rawUser.sub, mappedSub);
10574
10611
  const sub = signedInSub ?? (typeof rawUser.sub === "string" ? rawUser.sub : "");
10575
10612
  this.user = Object.freeze({
@@ -10587,6 +10624,13 @@ var FrontMcpAuthContextImpl = class {
10587
10624
  this.scopes = Object.freeze(
10588
10625
  Array.isArray(source.scopes) ? source.scopes.filter((s) => typeof s === "string") : []
10589
10626
  );
10627
+ if (claimsResolver) {
10628
+ const resolved = claimsResolver(source);
10629
+ this.claims = Object.freeze({ ...resolved.claims });
10630
+ this.roles = Object.freeze([...toStringArray2(resolved.roles)]);
10631
+ this.permissions = Object.freeze([...toStringArray2(resolved.permissions)]);
10632
+ return;
10633
+ }
10590
10634
  const rawClaims = this.buildRawClaims(source);
10591
10635
  this.claims = Object.freeze({ ...rawClaims });
10592
10636
  if (claimsMapping?.roles) {
@@ -10647,8 +10691,8 @@ var FrontMcpAuthContextImpl = class {
10647
10691
  };
10648
10692
 
10649
10693
  // libs/auth/src/context/frontmcp-auth-context.factory.ts
10650
- function buildAuthContext(authInfo, claimsMapping, pipes) {
10651
- const base = new FrontMcpAuthContextImpl(authInfo, claimsMapping);
10694
+ function buildAuthContext(authInfo, claimsMapping, pipes, claimsResolver) {
10695
+ const base = new FrontMcpAuthContextImpl(authInfo, claimsMapping, claimsResolver);
10652
10696
  if (!pipes || pipes.length === 0) {
10653
10697
  return base;
10654
10698
  }
@@ -10900,6 +10944,10 @@ function evaluateCondition(condition, envelope, ctx) {
10900
10944
  const expected = resolveValue(condition.value, ctx);
10901
10945
  return applyOperator(actual, condition.op, expected);
10902
10946
  }
10947
+ var REDACTED_ENV_VALUE = "[redacted]";
10948
+ function reportableActual(path, actual) {
10949
+ return path === "env" || path.startsWith("env.") ? REDACTED_ENV_VALUE : actual;
10950
+ }
10903
10951
  function evaluateAbac(policy, ctx) {
10904
10952
  const envelope = buildContextEnvelope(ctx);
10905
10953
  if (policy.match) {
@@ -10907,10 +10955,11 @@ function evaluateAbac(policy, ctx) {
10907
10955
  const actual = resolveDotPath(envelope, path);
10908
10956
  const expected = resolveValue(expectedRaw, ctx);
10909
10957
  if (expected === void 0 || actual !== expected) {
10958
+ const reported = reportableActual(path, actual);
10910
10959
  return {
10911
10960
  granted: false,
10912
- deniedBy: `attributes.match: '${path}' expected '${String(expected)}' but got '${String(actual)}'`,
10913
- denial: { kind: "attributes", path: "attributes.match", expected, actual },
10961
+ deniedBy: `attributes.match: '${path}' expected '${String(expected)}' but got '${String(reported)}'`,
10962
+ denial: { kind: "attributes", path: "attributes.match", expected, actual: reported },
10914
10963
  evaluatedPolicies: ["attributes.match"]
10915
10964
  };
10916
10965
  }
@@ -10921,7 +10970,7 @@ function evaluateAbac(policy, ctx) {
10921
10970
  const condition = policy.conditions[i];
10922
10971
  if (!evaluateCondition(condition, envelope, ctx)) {
10923
10972
  const expected = resolveValue(condition.value, ctx);
10924
- const actual = resolveDotPath(envelope, condition.path);
10973
+ const actual = reportableActual(condition.path, resolveDotPath(envelope, condition.path));
10925
10974
  return {
10926
10975
  granted: false,
10927
10976
  deniedBy: `attributes.conditions: '${condition.path}' failed '${condition.op}' check against '${String(expected)}'`,
@@ -11660,6 +11709,21 @@ var basicApplier = {
11660
11709
  function isFrontMcpCredentials(creds) {
11661
11710
  return typeof creds === "object" && creds !== null && "provider" in creds && typeof creds.provider === "string" && creds.provider.length > 0;
11662
11711
  }
11712
+ function providerHeadersCredentials(resolveHeaders) {
11713
+ return {
11714
+ async applyCredentials(_url, init) {
11715
+ const { credentials, ...cleanInit } = init;
11716
+ if (!isFrontMcpCredentials(credentials)) {
11717
+ return { init: typeof credentials === "string" ? init : cleanInit };
11718
+ }
11719
+ const headers = new Headers(cleanInit.headers);
11720
+ for (const [name, value] of Object.entries(await resolveHeaders(credentials.provider))) {
11721
+ headers.set(name, value);
11722
+ }
11723
+ return { init: { ...cleanInit, headers } };
11724
+ }
11725
+ };
11726
+ }
11663
11727
  var FetchCredentialMiddleware = class {
11664
11728
  constructor(tokenAccessor, appliers) {
11665
11729
  this.tokenAccessor = tokenAccessor;
@@ -11961,6 +12025,7 @@ var FetchCredentialMiddleware = class {
11961
12025
  privateKeyCredentialSchema,
11962
12026
  progressiveAuthStateSchema,
11963
12027
  providerConfigSchema,
12028
+ providerHeadersCredentials,
11964
12029
  publicAccessConfigSchema,
11965
12030
  publicAuthOptionsSchema,
11966
12031
  queryApplier,
@@ -11978,6 +12043,7 @@ var FetchCredentialMiddleware = class {
11978
12043
  resourceIdRefSchema,
11979
12044
  resourceScopesFor,
11980
12045
  safeDecrypt,
12046
+ scopesFromClaims,
11981
12047
  sealPendingLogin,
11982
12048
  secureStoreConfigSchema,
11983
12049
  secureStoreCustomBackendSchema,
@@ -57,7 +57,8 @@ export declare class JwksService {
57
57
  * 1) inline jwks (if provided) → cache & return
58
58
  * 2) cached & fresh (TTL) → return
59
59
  * 3) explicit jwksUri → fetch, cache, return
60
- * 4) discover jwks_uri → the issuer's OAuth authorization server
60
+ * 4) `<issuer>/.well-known/jwks.json` → fetch, cache, return
61
+ * 5) discover jwks_uri → the issuer's OAuth authorization server
61
62
  * metadata (RFC 8414), else its OpenID configuration (OpenID Connect
62
63
  * Discovery 1.0 §4, where Google, Okta, Auth0 and Entra publish it),
63
64
  * then fetch jwks_uri, cache, return
@@ -1 +1 @@
1
- {"version":3,"file":"jwks.service.d.ts","sourceRoot":"","sources":["../../src/jwks/jwks.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAuD,KAAK,aAAa,EAAY,MAAM,MAAM,CAAC;AAczG,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAgDlG,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+C;IAEpE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,eAAe,CAAqB;IAG5C,OAAO,CAAC,eAAe,CAKrB;IAGF,OAAO,CAAC,YAAY,CAAiE;IAGrF,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,IAAI,CAAC,EAAE,kBAAkB;IAcrC;;;OAGG;YACW,iBAAiB;IAc/B,mFAAmF;IAC7E,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAQ7C;;;OAGG;IACG,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAmEnG;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;OAGG;YACW,iBAAiB;IAwG/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB,kEAAkE;IAClE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa;IAIvD;;;;;;;;;OASG;IACG,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IA8CpF,yEAAyE;IACnE,mBAAmB,IAAI,OAAO,CAAC,aAAa,CAAC;IAKnD,wEAAwE;IAClE,yBAAyB,IAAI,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,aAAa,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;YAShG,YAAY;YAaZ,cAAc;YAQd,SAAS;YAgET,qBAAqB;YAyBrB,yBAAyB;IA+DvC,OAAO,CAAC,WAAW;CAgBpB"}
1
+ {"version":3,"file":"jwks.service.d.ts","sourceRoot":"","sources":["../../src/jwks/jwks.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAuD,KAAK,aAAa,EAAY,MAAM,MAAM,CAAC;AAczG,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAgDlG,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+C;IAEpE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,eAAe,CAAqB;IAG5C,OAAO,CAAC,eAAe,CAKrB;IAGF,OAAO,CAAC,YAAY,CAAiE;IAGrF,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,IAAI,CAAC,EAAE,kBAAkB;IAcrC;;;OAGG;YACW,iBAAiB;IAc/B,mFAAmF;IAC7E,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAQ7C;;;OAGG;IACG,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAmEnG;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;OAGG;YACW,iBAAiB;IAwG/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB,kEAAkE;IAClE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa;IAIvD;;;;;;;;;;OAUG;IACG,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAgDpF,yEAAyE;IACnE,mBAAmB,IAAI,OAAO,CAAC,aAAa,CAAC;IAKnD,wEAAwE;IAClE,yBAAyB,IAAI,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,aAAa,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;YAShG,YAAY;YAaZ,cAAc;YAQd,SAAS;YAgET,qBAAqB;YAyBrB,yBAAyB;IA+DvC,OAAO,CAAC,WAAW;CAgBpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontmcp/auth",
3
- "version": "1.9.1",
3
+ "version": "1.9.2",
4
4
  "description": "FrontMCP Auth - Authentication, session management, and credential vault",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "homepage": "https://docs.agentfront.dev",
@@ -47,8 +47,8 @@
47
47
  "node": ">=24.0.0"
48
48
  },
49
49
  "peerDependencies": {
50
- "@frontmcp/lazy-zod": "1.9.1",
51
- "@frontmcp/storage-sqlite": "1.9.1",
50
+ "@frontmcp/lazy-zod": "1.9.2",
51
+ "@frontmcp/storage-sqlite": "1.9.2",
52
52
  "@vercel/kv": "^3.0.0",
53
53
  "ioredis": "^5.0.0"
54
54
  },
@@ -64,8 +64,8 @@
64
64
  }
65
65
  },
66
66
  "dependencies": {
67
- "@frontmcp/di": "1.9.1",
68
- "@frontmcp/utils": "1.9.1",
67
+ "@frontmcp/di": "1.9.2",
68
+ "@frontmcp/utils": "1.9.2",
69
69
  "jose": "^6.0.0"
70
70
  },
71
71
  "devDependencies": {
@@ -1 +1 @@
1
- {"version":3,"file":"auth-token.utils.d.ts","sourceRoot":"","sources":["../../../src/session/utils/auth-token.utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGxD;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlE;AAkBD,oDAAoD;AACpD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAe1E;AAED,uEAAuE;AACvE,MAAM,WAAW,4BAA4B;IAC3C,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,EACrC,WAAW,EAAE,MAAM,GAClB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAQ3D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAItE"}
1
+ {"version":3,"file":"auth-token.utils.d.ts","sourceRoot":"","sources":["../../../src/session/utils/auth-token.utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGxD;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlE;AAkBD,oDAAoD;AACpD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAoB1E;AAED,uEAAuE;AACvE,MAAM,WAAW,4BAA4B;IAC3C,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,EACrC,WAAW,EAAE,MAAM,GAClB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAQ3D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAItE"}
package/utils/index.d.ts CHANGED
@@ -8,4 +8,5 @@ export type { AudienceValidationResult, AudienceValidatorOptions } from './audie
8
8
  export { deriveAuthorizationId } from './authorization-id.utils';
9
9
  export { advertisedScopes, DEFAULT_ALLOWED_SCOPES, grantScopes, resourceScopesFor, type ResourceScopeOptions, } from './scope-grant.utils';
10
10
  export { isLoopbackRedirectUri } from './redirect-uri.utils';
11
+ export { scopesFromClaims } from './token-scopes.utils';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAE/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,iBAAiB,EACjB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAE/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,iBAAiB,EACjB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The scopes a token's claims grant: `scope` (RFC 9068 §2.2.3) and `scp` (Entra ID, Okta), each as
3
+ * a space-delimited string or an array, merged without duplicates.
4
+ *
5
+ * @param claims The token's claims (a JWT payload, or the verified user claim built from it).
6
+ */
7
+ export declare function scopesFromClaims(claims: {
8
+ scope?: unknown;
9
+ scp?: unknown;
10
+ } | undefined): string[];
11
+ //# sourceMappingURL=token-scopes.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-scopes.utils.d.ts","sourceRoot":"","sources":["../../src/utils/token-scopes.utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAOjG"}