@frontmcp/plugin-approval 1.8.0 → 1.8.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.
package/README.md CHANGED
@@ -4,7 +4,7 @@ Tool authorization workflow with PKCE webhook security for FrontMCP.
4
4
 
5
5
  ## Features
6
6
 
7
- - **Tool Approval Checking**: Automatic approval check before tool execution via hook
7
+ - **Tool Approval Checking**: Automatic approval check before tool execution via hook, registered by `ApprovalPlugin.init()` (no need to list `ApprovalCheckPlugin`)
8
8
  - **Multiple Approval Scopes**: SESSION, USER, TIME_LIMITED, TOOL_SPECIFIC, CONTEXT_SPECIFIC
9
9
  - **PKCE Webhook Security**: RFC 7636 compliant PKCE for secure external approval systems
10
10
  - **Recheck Mode**: Poll external API for approval status
@@ -47,13 +47,14 @@ const plugin = ApprovalPlugin.init({
47
47
  ### Using in Tools
48
48
 
49
49
  ```typescript
50
+ import { ApprovalScope } from '@frontmcp/plugin-approval';
50
51
  import { Tool, ToolContext } from '@frontmcp/sdk';
51
52
 
52
53
  @Tool({
53
54
  name: 'dangerous_operation',
54
55
  approval: {
55
56
  required: true,
56
- defaultScope: 'session',
57
+ defaultScope: ApprovalScope.SESSION,
57
58
  category: 'write',
58
59
  riskLevel: 'high',
59
60
  approvalMessage: 'Allow dangerous operation?',
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Who a call's approvals belong to.
3
+ *
4
+ * @module @frontmcp/plugin-approval
5
+ */
6
+ import { type FrontMcpContext } from '@frontmcp/sdk';
7
+ export interface ApprovalIdentity {
8
+ /** Key for session-scoped approvals. */
9
+ sessionId: string;
10
+ /** Key for user-scoped approvals, when the call has an authenticated principal. */
11
+ userId: string | undefined;
12
+ }
13
+ type ApprovalCallerContext = Pick<FrontMcpContext, 'verifiedSessionId' | 'authInfo'>;
14
+ /**
15
+ * The session and user that a call's approvals are read from and granted to.
16
+ *
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.
19
+ */
20
+ export declare function resolveApprovalIdentity(ctx: ApprovalCallerContext | undefined): ApprovalIdentity;
21
+ export {};
22
+ //# sourceMappingURL=approval.identity.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @module @frontmcp/plugin-approval
5
5
  */
6
- import { DynamicPlugin, ProviderType } from '@frontmcp/sdk';
7
- import type { StorageConfig, RootStorage, NamespacedStorage } from '@frontmcp/utils';
6
+ import { DynamicPlugin, type ProviderType } from '@frontmcp/sdk';
7
+ import type { NamespacedStorage, RootStorage, StorageConfig } from '@frontmcp/utils';
8
8
  import type { ApprovalMode } from './types';
9
9
  /**
10
10
  * Configuration options for ApprovalPlugin.
@@ -117,12 +117,6 @@ export default class ApprovalPlugin extends DynamicPlugin<ApprovalPluginOptions>
117
117
  * Dynamic providers based on plugin options.
118
118
  */
119
119
  static dynamicProviders: (options: ApprovalPluginOptions) => ProviderType[];
120
- /**
121
- * Get plugin metadata including nested plugins.
122
- */
123
- static getPluginMetadata(_options: ApprovalPluginOptions): {
124
- plugins?: unknown[];
125
- };
126
120
  }
127
121
  export { ApprovalPlugin };
128
122
  //# sourceMappingURL=approval.plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"approval.plugin.d.ts","sourceRoot":"","sources":["../src/approval.plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAU,YAAY,EAAoD,MAAM,eAAe,CAAC;AACtH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOrF,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;AAYH,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,CAoEjF;IAEF;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,qBAAqB,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE;CAInF;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,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"}