@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.
- package/approval/policy.d.ts +30 -0
- package/approval/policy.d.ts.map +1 -0
- package/approval.identity.d.ts +3 -5
- package/approval.identity.d.ts.map +1 -1
- package/approval.plugin.d.ts.map +1 -1
- package/esm/index.mjs +375 -239
- package/esm/package.json +4 -4
- package/hooks/approval-check.hook.d.ts +9 -2
- package/hooks/approval-check.hook.d.ts.map +1 -1
- package/index.js +389 -254
- package/package.json +4 -4
- package/services/approval.service.d.ts +17 -6
- package/services/approval.service.d.ts.map +1 -1
- package/stores/approval-storage.store.d.ts +30 -3
- package/stores/approval-storage.store.d.ts.map +1 -1
- package/stores/approval-store.interface.d.ts +11 -3
- package/stores/approval-store.interface.d.ts.map +1 -1
|
@@ -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"}
|
package/approval.identity.d.ts
CHANGED
|
@@ -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, '
|
|
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
|
-
*
|
|
18
|
-
*
|
|
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,
|
|
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"}
|
package/approval.plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.plugin.d.ts","sourceRoot":"","sources":["../src/approval.plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,
|
|
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"}
|