@frontmcp/plugin-approval 1.8.1 → 1.8.3

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.
@@ -0,0 +1,30 @@
1
+ /**
2
+ * A tool's approval policy (`allowedScopes`, `maxTtlMs`) applied to grants and to stored records.
3
+ *
4
+ * @module @frontmcp/plugin-approval
5
+ */
6
+ import { ApprovalScope, type ApprovalRecord, type ToolApprovalRequirement } from './types';
7
+ /** The tool's `approval` metadata, normalized: `true` requires a session approval, `false`/absent requires none. */
8
+ export declare function resolveApprovalRequirement(config: ToolApprovalRequirement | boolean | undefined): ToolApprovalRequirement;
9
+ /**
10
+ * When a record stops counting: its own `expiresAt`, or `grantedAt + maxTtlMs` when the tool caps
11
+ * approvals, whichever comes first. `undefined` means it never expires.
12
+ */
13
+ export declare function effectiveExpiresAt(record: ApprovalRecord, requirement: ToolApprovalRequirement): number | undefined;
14
+ /** Whether a record has expired, by its own expiry or by the tool's `maxTtlMs`. */
15
+ export declare function isApprovalExpired(record: ApprovalRecord, requirement: ToolApprovalRequirement, now: number): boolean;
16
+ /**
17
+ * Whether a stored approval lets the tool run: approved, of a scope the tool allows, and within
18
+ * its lifetime and the tool's `maxTtlMs`. Records written straight to the store, by an admin
19
+ * or an external approval system, are held to the same policy as grants through `this.approval`.
20
+ */
21
+ export declare function isApprovalUsable(record: ApprovalRecord, requirement: ToolApprovalRequirement, now: number): boolean;
22
+ /** A time-to-live must be a positive, finite number of milliseconds; anything else would never expire. */
23
+ export declare function assertValidTtl(ttlMs: number | undefined): void;
24
+ /**
25
+ * Checks a grant against the tool's policy and returns the ttl to store: a scope the tool doesn't
26
+ * allow throws `ApprovalScopeNotAllowedError`, a ttl above `maxTtlMs` throws, and a grant without
27
+ * a ttl on a tool with `maxTtlMs` is given `maxTtlMs`.
28
+ */
29
+ export declare function checkGrantAgainstPolicy(toolId: string, scope: ApprovalScope, ttlMs: number | undefined, requirement: ToolApprovalRequirement | undefined): number | undefined;
30
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/approval/policy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAiB,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAE1G,oHAAoH;AACpH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,uBAAuB,GAAG,OAAO,GAAG,SAAS,GACpD,uBAAuB,CAYzB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,uBAAuB,GAAG,MAAM,GAAG,SAAS,CAInH;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,uBAAuB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAGpH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,uBAAuB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAInH;AAED,0GAA0G;AAC1G,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAK9D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,EAAE,uBAAuB,GAAG,SAAS,GAC/C,MAAM,GAAG,SAAS,CAkBpB"}
@@ -10,14 +10,12 @@ export interface ApprovalIdentity {
10
10
  /** Key for user-scoped approvals, when the call has an authenticated principal. */
11
11
  userId: string | undefined;
12
12
  }
13
- type ApprovalCallerContext = Pick<FrontMcpContext, 'sessionId' | 'authInfo'>;
13
+ type ApprovalCallerContext = Pick<FrontMcpContext, 'verifiedSessionId' | 'authInfo'>;
14
14
  /**
15
15
  * The session and user that a call's approvals are read from and granted to.
16
16
  *
17
- * The stateless transport gives every request the same session id, so keying session
18
- * approvals on it let one caller's approval admit every other stateless caller. A stateless
19
- * call is keyed by its authenticated principal instead, and a call with neither a session nor
20
- * a principal gets a key of its own that no other call can match.
17
+ * Only a verified session keys session approvals; a stateless call (shared or per-request session
18
+ * id) is keyed by its principal, and a call with neither gets a key no other call can match.
21
19
  */
22
20
  export declare function resolveApprovalIdentity(ctx: ApprovalCallerContext | undefined): ApprovalIdentity;
23
21
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"approval.identity.d.ts","sourceRoot":"","sources":["../src/approval.identity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAG3E,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,KAAK,qBAAqB,GAAG,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC;AAM7E;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,qBAAqB,GAAG,SAAS,GAAG,gBAAgB,CAWhG"}
1
+ {"version":3,"file":"approval.identity.d.ts","sourceRoot":"","sources":["../src/approval.identity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,KAAK,qBAAqB,GAAG,IAAI,CAAC,eAAe,EAAE,mBAAmB,GAAG,UAAU,CAAC,CAAC;AAMrF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,qBAAqB,GAAG,SAAS,GAAG,gBAAgB,CAWhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"approval.plugin.d.ts","sourceRoot":"","sources":["../src/approval.plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EAKb,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM5C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;OAEG;IACH,eAAe,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAAC;IAElD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE;QACR,uCAAuC;QACvC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,4BAA4B;QAC5B,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;QAC5C,qCAAqC;QACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,+BAA+B;QAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;OAEG;IACH,OAAO,CAAC,EAAE;QACR,oCAAoC;QACpC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,qCAAqC;QACrC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,+BAA+B;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,2CAA2C;QAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IAEF;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAaH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,aAAa,CAAC,qBAAqB,CAAC;IAC9E,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAM1C;IAEF,OAAO,EAAE,qBAAqB,CAAC;gBAEnB,OAAO,GAAE,qBAA0B;IAQ/C;;OAEG;IACH,OAAgB,gBAAgB,GAAI,SAAS,qBAAqB,KAAG,YAAY,EAAE,CAiEjF;CACH;AAGD,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"approval.plugin.d.ts","sourceRoot":"","sources":["../src/approval.plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EAMb,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAUrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM5C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;OAEG;IACH,eAAe,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAAC;IAElD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE;QACR,uCAAuC;QACvC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,4BAA4B;QAC5B,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;QAC5C,qCAAqC;QACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,+BAA+B;QAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;OAEG;IACH,OAAO,CAAC,EAAE;QACR,oCAAoC;QACpC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,qCAAqC;QACrC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,+BAA+B;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,2CAA2C;QAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IAEF;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAaH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,aAAa,CAAC,qBAAqB,CAAC;IAC9E,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAM1C;IAEF,OAAO,EAAE,qBAAqB,CAAC;gBAEnB,OAAO,GAAE,qBAA0B;IAQ/C;;OAEG;IACH,OAAgB,gBAAgB,GAAI,SAAS,qBAAqB,KAAG,YAAY,EAAE,CAwEjF;CACH;AAGD,OAAO,EAAE,cAAc,EAAE,CAAC"}