@prompteryx/mcp-server 1.1.1 → 1.1.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,13 +1,25 @@
1
1
  /**
2
2
  * Usage Enforcement
3
3
  *
4
- * Pre-checks subscription limits before every tool call and
5
- * records usage after successful execution.
6
- * Mirrors the checks in lib/subscription-config.ts and
7
- * app/api/cloud-execute/route.ts from the main platform.
4
+ * Pre-checks the user's balances before every tool call and records usage
5
+ * after successful execution. The platform routes stay the source of truth
6
+ * for hard limits (AI credits are charged per step, Connect Hub calls are
7
+ * reserved atomically); this is the early, friendly check.
8
+ *
9
+ * Founder decision (19 Sep 2026): access follows the BALANCE, never the plan
10
+ * tier. Since 1 Oct 2026 the balances come from the platform as
11
+ * `auth.balances` (plan allowance left + purchased top-ups):
12
+ * - AI credits = `aiCredits` (plan) + `purchasedAiCredits`. The previous
13
+ * check, `aiCreditsIncluded - aiCreditsUsedThisMonth`, subtracted usage
14
+ * twice (`aiCredits` is already the remaining plan balance) and ignored
15
+ * purchased credits — users with credits left were refused.
16
+ * - cloud minutes = plan minutes left + `purchasedMinutesBalance`.
17
+ * - Connect Hub = plan calls left + `purchasedConnectHubCredits`
18
+ * (+ legacy `purchasedConnectHubCalls`).
19
+ * Older platform builds send no `balances`; the legacy fields are then used.
8
20
  */
9
21
  import type { AuthContext } from './api-key-auth.js';
10
- export type ToolCategory = 'browser' | 'ai-agent' | 'integration' | 'workflow' | 'data';
22
+ export type ToolCategory = 'browser' | 'ai-agent' | 'integration' | 'connect-hub' | 'workflow' | 'data';
11
23
  export interface UsageCheckResult {
12
24
  allowed: boolean;
13
25
  reason?: string;
@@ -22,6 +34,15 @@ export declare function getTierFeatures(tier: string): {
22
34
  recordToWorkflow: boolean;
23
35
  maxIntegrationServices: number;
24
36
  };
37
+ /** Spendable AI credits (plan + purchased). */
38
+ export declare function aiCreditsRemaining(auth: AuthContext): number;
39
+ /**
40
+ * Spendable cloud-browser minutes: a number, `Infinity` when unmetered, or
41
+ * null when unknown (legacy platform reporting no allowance) — null never blocks.
42
+ */
43
+ export declare function cloudMinutesRemaining(auth: AuthContext): number | null;
44
+ /** Spendable Connect Hub calls (plan + purchased), or null when the platform did not say. */
45
+ export declare function connectHubCallsRemaining(auth: AuthContext): number | null;
25
46
  export declare function enforceUsageLimits(auth: AuthContext, category: ToolCategory, executionMode?: 'cloud' | 'local'): UsageCheckResult;
26
47
  /**
27
48
  * Records usage by calling the platform API.
@@ -32,9 +53,5 @@ export declare function recordUsage(apiKey: string, apiUrl: string, usage: {
32
53
  aiCreditsUsed?: number;
33
54
  executionCount?: number;
34
55
  }): Promise<void>;
35
- export declare function formatUsageRemaining(auth: AuthContext): {
36
- cloudBrowserMinutes: number;
37
- aiCredits: number;
38
- executions: number;
39
- };
56
+ export declare function formatUsageRemaining(auth: AuthContext): Record<string, string | number | null>;
40
57
  //# sourceMappingURL=usage-enforcer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage-enforcer.d.ts","sourceRoot":"","sources":["../../src/auth/usage-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AAExF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsDD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM;kBAnD5B,OAAO;aACZ,OAAO;aACP,OAAO;oBACA,OAAO;cACb,OAAO;oBACD,OAAO;sBACL,OAAO;4BACD,MAAM;EA8C/B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,YAAY,EACtB,aAAa,GAAE,OAAO,GAAG,OAAiB,GACzC,gBAAgB,CA6DlB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;IACL,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GACA,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW;;;;EAMrD"}
1
+ {"version":3,"file":"usage-enforcer.d.ts","sourceRoot":"","sources":["../../src/auth/usage-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AAExG,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsDD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM;kBAnD5B,OAAO;aACZ,OAAO;aACP,OAAO;oBACA,OAAO;cACb,OAAO;oBACD,OAAO;sBACL,OAAO;4BACD,MAAM;EA8C/B;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAG5D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAMtE;AAED,6FAA6F;AAC7F,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAGzE;AAYD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,YAAY,EACtB,aAAa,GAAE,OAAO,GAAG,OAAiB,GACzC,gBAAgB,CA+DlB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;IACL,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GACA,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,0CAUrD"}
@@ -1,10 +1,22 @@
1
1
  /**
2
2
  * Usage Enforcement
3
3
  *
4
- * Pre-checks subscription limits before every tool call and
5
- * records usage after successful execution.
6
- * Mirrors the checks in lib/subscription-config.ts and
7
- * app/api/cloud-execute/route.ts from the main platform.
4
+ * Pre-checks the user's balances before every tool call and records usage
5
+ * after successful execution. The platform routes stay the source of truth
6
+ * for hard limits (AI credits are charged per step, Connect Hub calls are
7
+ * reserved atomically); this is the early, friendly check.
8
+ *
9
+ * Founder decision (19 Sep 2026): access follows the BALANCE, never the plan
10
+ * tier. Since 1 Oct 2026 the balances come from the platform as
11
+ * `auth.balances` (plan allowance left + purchased top-ups):
12
+ * - AI credits = `aiCredits` (plan) + `purchasedAiCredits`. The previous
13
+ * check, `aiCreditsIncluded - aiCreditsUsedThisMonth`, subtracted usage
14
+ * twice (`aiCredits` is already the remaining plan balance) and ignored
15
+ * purchased credits — users with credits left were refused.
16
+ * - cloud minutes = plan minutes left + `purchasedMinutesBalance`.
17
+ * - Connect Hub = plan calls left + `purchasedConnectHubCredits`
18
+ * (+ legacy `purchasedConnectHubCalls`).
19
+ * Older platform builds send no `balances`; the legacy fields are then used.
8
20
  */
9
21
  const TIER_FEATURES = {
10
22
  free: {
@@ -51,42 +63,77 @@ const TIER_FEATURES = {
51
63
  export function getTierFeatures(tier) {
52
64
  return TIER_FEATURES[tier] ?? TIER_FEATURES.free;
53
65
  }
66
+ /** Spendable AI credits (plan + purchased). */
67
+ export function aiCreditsRemaining(auth) {
68
+ if (auth.balances)
69
+ return Math.max(0, auth.balances.aiCredits.total);
70
+ return (auth.aiCreditsIncluded ?? 0) - (auth.aiCreditsUsedThisMonth ?? 0);
71
+ }
72
+ /**
73
+ * Spendable cloud-browser minutes: a number, `Infinity` when unmetered, or
74
+ * null when unknown (legacy platform reporting no allowance) — null never blocks.
75
+ */
76
+ export function cloudMinutesRemaining(auth) {
77
+ const m = auth.balances?.cloudBrowserMinutes;
78
+ if (m)
79
+ return m.remaining == null ? Infinity : Math.max(0, m.remaining);
80
+ const allowed = auth.cloudBrowserMinutesAllowed ?? 0;
81
+ if (!(allowed > 0))
82
+ return null;
83
+ return allowed - (auth.monthlyUsage?.cloudBrowserMinutes ?? 0);
84
+ }
85
+ /** Spendable Connect Hub calls (plan + purchased), or null when the platform did not say. */
86
+ export function connectHubCallsRemaining(auth) {
87
+ const c = auth.balances?.connectHubCalls;
88
+ return c ? Math.max(0, c.remaining) : null;
89
+ }
90
+ function minutesExhaustedReason(auth, agent) {
91
+ const m = auth.balances?.cloudBrowserMinutes;
92
+ const detail = m
93
+ ? `${m.planRemaining ?? 0} plan + ${m.purchased} purchased minutes left`
94
+ : `${auth.monthlyUsage?.cloudBrowserMinutes ?? 0}/${auth.cloudBrowserMinutesAllowed ?? 0} this month`;
95
+ return agent
96
+ ? `The AI browser agent runs in a cloud browser and your cloud minutes are exhausted (${detail}). Top up, upgrade, or use local mode.`
97
+ : `Cloud browser minutes exhausted (${detail}). Top up or upgrade at prompteryx.ai/pricing, or switch to local execution mode with the Prompteryx Desktop App.`;
98
+ }
54
99
  export function enforceUsageLimits(auth, category, executionMode = 'cloud') {
55
- // Browser tools using cloud need cloud minutes. Founder decision (19 Sep
56
- // 2026): access follows the BALANCE, not the plan tier. Any account with
57
- // cloud minutes (or a top-up) may use the cloud browser through the
58
- // developer surfaces; the platform routes remain the source of truth for
59
- // hard limits, so this is only a friendly early check.
100
+ // Operator accounts are uncapped on every platform route too.
101
+ if (auth.balances?.unlimited)
102
+ return { allowed: true };
103
+ // Browser tools in the cloud spend cloud minutes (plan, then purchased).
60
104
  if (category === 'browser' && executionMode === 'cloud') {
61
- const allowed = auth.cloudBrowserMinutesAllowed ?? 0;
62
- const used = auth.monthlyUsage?.cloudBrowserMinutes ?? 0;
63
- if (allowed > 0 && used >= allowed) {
64
- return {
65
- allowed: false,
66
- reason: `Cloud browser minutes exhausted (${used}/${allowed} this month). Top up or upgrade at prompteryx.ai/pricing, or switch to local execution mode with the Prompteryx Desktop App.`,
67
- };
105
+ const left = cloudMinutesRemaining(auth);
106
+ if (left !== null && left <= 0) {
107
+ return { allowed: false, reason: minutesExhaustedReason(auth, false) };
68
108
  }
69
109
  }
70
110
  // AI agent needs credits (balance-based, regardless of plan tier)
71
111
  if (category === 'ai-agent') {
72
- const remaining = (auth.aiCreditsIncluded ?? 0) - (auth.aiCreditsUsedThisMonth ?? 0);
73
- if (remaining <= 0) {
112
+ if (aiCreditsRemaining(auth) <= 0) {
74
113
  return {
75
114
  allowed: false,
76
115
  reason: 'AI credits exhausted. Buy more at prompteryx.ai (Settings > AI Credits) or upgrade your plan.',
77
116
  };
78
117
  }
79
118
  if (executionMode === 'cloud') {
80
- const allowed = auth.cloudBrowserMinutesAllowed ?? 0;
81
- const used = auth.monthlyUsage?.cloudBrowserMinutes ?? 0;
82
- if (allowed > 0 && used >= allowed) {
83
- return {
84
- allowed: false,
85
- reason: `The AI browser agent runs in a cloud browser and your cloud minutes are exhausted (${used}/${allowed}). Top up, upgrade, or use local mode.`,
86
- };
119
+ const left = cloudMinutesRemaining(auth);
120
+ if (left !== null && left <= 0) {
121
+ return { allowed: false, reason: minutesExhaustedReason(auth, true) };
87
122
  }
88
123
  }
89
124
  }
125
+ // Connect Hub actions spend Connect Hub calls (plan, then purchased). The
126
+ // platform reserves each call atomically (429 on a cap); this is the early check.
127
+ if (category === 'connect-hub') {
128
+ const left = connectHubCallsRemaining(auth);
129
+ if (left !== null && left <= 0) {
130
+ return {
131
+ allowed: false,
132
+ reason: 'Connect Hub calls exhausted for this month. Add Connect Hub calls on the Subscription page at prompteryx.ai, or wait for the monthly reset.',
133
+ };
134
+ }
135
+ return { allowed: true };
136
+ }
90
137
  // Workflow execution counts
91
138
  if (category === 'workflow') {
92
139
  if (auth.monthlyUsage.executions >= auth.monthlyExecutionsAllowed) {
@@ -128,10 +175,15 @@ export async function recordUsage(apiKey, apiUrl, usage) {
128
175
  }
129
176
  }
130
177
  export function formatUsageRemaining(auth) {
131
- return {
132
- cloudBrowserMinutes: auth.cloudBrowserMinutesAllowed - auth.monthlyUsage.cloudBrowserMinutes,
133
- aiCredits: auth.aiCreditsIncluded - auth.aiCreditsUsedThisMonth,
178
+ const minutes = cloudMinutesRemaining(auth);
179
+ const out = {
180
+ cloudBrowserMinutes: minutes === Infinity ? 'unlimited' : minutes ?? auth.cloudBrowserMinutesAllowed - auth.monthlyUsage.cloudBrowserMinutes,
181
+ aiCredits: aiCreditsRemaining(auth),
134
182
  executions: auth.monthlyExecutionsAllowed - auth.monthlyUsage.executions,
135
183
  };
184
+ const ch = connectHubCallsRemaining(auth);
185
+ if (ch !== null)
186
+ out.connectHubCalls = ch;
187
+ return out;
136
188
  }
137
189
  //# sourceMappingURL=usage-enforcer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage-enforcer.js","sourceRoot":"","sources":["../../src/auth/usage-enforcer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-enforcer.js","sourceRoot":"","sources":["../../src/auth/usage-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAWH,MAAM,aAAa,GASd;IACH,IAAI,EAAE;QACJ,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,KAAK;QACd,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,KAAK;QACf,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;QACvB,sBAAsB,EAAE,CAAC;KAC1B;IACD,OAAO,EAAE;QACP,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,IAAI;QACtB,sBAAsB,EAAE,QAAQ;KACjC;IACD,GAAG,EAAE;QACH,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,IAAI;QACtB,sBAAsB,EAAE,QAAQ;KACjC;IACD,UAAU,EAAE;QACV,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,IAAI;QACtB,sBAAsB,EAAE,QAAQ;KACjC;CACF,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAiB;IACrD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IAC7C,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,wBAAwB,CAAC,IAAiB;IACxD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC;IACzC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAiB,EAAE,KAAc;IAC/D,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IAC7C,MAAM,MAAM,GAAG,CAAC;QACd,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,yBAAyB;QACxE,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,mBAAmB,IAAI,CAAC,IAAI,IAAI,CAAC,0BAA0B,IAAI,CAAC,aAAa,CAAC;IACxG,OAAO,KAAK;QACV,CAAC,CAAC,sFAAsF,MAAM,wCAAwC;QACtI,CAAC,CAAC,oCAAoC,MAAM,mHAAmH,CAAC;AACpK,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAiB,EACjB,QAAsB,EACtB,gBAAmC,OAAO;IAE1C,8DAA8D;IAC9D,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAEvD,yEAAyE;IACzE,IAAI,QAAQ,KAAK,SAAS,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,+FAA+F;aACxG,CAAC;QACJ,CAAC;QACD,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,kFAAkF;IAClF,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,6IAA6I;aACtJ,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,4BAA4B;IAC5B,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,oCAAoC,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,wBAAwB,2CAA2C;aACrJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,oCAAoC,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,wBAAwB,IAAI;aAC9G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,MAAc,EACd,KAIC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,MAAM,sBAAsB,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM;gBACnB,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;IACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAiB;IACpD,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,GAAG,GAA2C;QAClD,mBAAmB,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB;QAC5I,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC;QACnC,UAAU,EAAE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU;KACzE,CAAC;IACF,MAAM,EAAE,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,EAAE,KAAK,IAAI;QAAE,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC;IAC1C,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-resources.d.ts","sourceRoot":"","sources":["../../src/resources/workflow-resources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,WAAW,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,QAwFxE"}
1
+ {"version":3,"file":"workflow-resources.d.ts","sourceRoot":"","sources":["../../src/resources/workflow-resources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,WAAW,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,QA0FxE"}
@@ -70,6 +70,8 @@ export function registerResources(server, ctx) {
70
70
  monthlyExecutionsAllowed: auth.monthlyExecutionsAllowed,
71
71
  },
72
72
  remaining,
73
+ // Plan allowance left + purchased top-ups, as the platform reports them.
74
+ ...(auth.balances ? { balances: auth.balances } : {}),
73
75
  }, null, 2),
74
76
  mimeType: 'application/json',
75
77
  }],
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-resources.js","sourceRoot":"","sources":["../../src/resources/workflow-resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-resources.js","sourceRoot":"","sources":["../../src/resources/workflow-resources.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -20,7 +20,18 @@ export interface ServerConfig {
20
20
  * every session would add another pair of process listeners.
21
21
  */
22
22
  registerSignalHandlers?: boolean;
23
+ /**
24
+ * Whether the cloud browser_* tools may open Browserbase sessions with the
25
+ * BROWSERBASE_* keys in this process's environment. Default true: the stdio
26
+ * binary runs on the user's machine with the user's own environment. The
27
+ * hosted endpoint (/api/mcp) runs inside the Prompteryx server, whose keys are
28
+ * admin-testing-only (Browserbase is not an approved subprocessor for customer
29
+ * data — SOC 2 CC9.2), so it passes true only for admin API keys.
30
+ */
31
+ allowBrowserbase?: boolean;
23
32
  }
33
+ /** Why a hosted, non-admin MCP session cannot open a Browserbase-backed cloud browser. */
34
+ export declare const BROWSERBASE_ADMIN_ONLY_MESSAGE: string;
24
35
  export declare function createPrompterxServer(config: ServerConfig): Promise<{
25
36
  server: McpServer;
26
37
  cleanup: () => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYpE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAID,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,YAAY;;;GAwG/D"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,0FAA0F;AAC1F,eAAO,MAAM,8BAA8B,QAIqD,CAAC;AAIjG,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,YAAY;;;GAiH/D"}
package/dist/server.js CHANGED
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
8
  import { authenticate, refreshAuthContext } from './auth/api-key-auth.js';
9
+ import { recordUsage } from './auth/usage-enforcer.js';
9
10
  import { BrowserSessionManager } from './tools/browser-session-manager.js';
10
11
  import { registerBrowserTools } from './tools/browser-tools.js';
11
12
  import { registerWorkflowTools } from './tools/workflow-tools.js';
@@ -15,6 +16,11 @@ import { registerConnectHubTools } from './tools/connect-hub-tools.js';
15
16
  import { registerAiBrowserTools } from './tools/ai-browser-tools.js';
16
17
  import { registerDataTools } from './tools/data-tools.js';
17
18
  import { registerResources } from './resources/workflow-resources.js';
19
+ /** Why a hosted, non-admin MCP session cannot open a Browserbase-backed cloud browser. */
20
+ export const BROWSERBASE_ADMIN_ONLY_MESSAGE = 'The direct browser_* tools are not available on the hosted Prompteryx MCP endpoint for this account: ' +
21
+ 'their cloud browser (Browserbase) is limited to Prompteryx admin testing. Use browser_ai_action (it runs ' +
22
+ 'on the Prompteryx cloud browser), run a saved workflow, or run the MCP server locally with ' +
23
+ 'PROMPTERYX_EXECUTION_MODE=local to drive your own Chrome through the Prompteryx desktop app.';
18
24
  const AUTH_REFRESH_INTERVAL_MS = 60_000; // Refresh auth context every 60 seconds
19
25
  export async function createPrompterxServer(config) {
20
26
  const { apiKey, apiUrl, executionMode, sessionTimeout, } = config;
@@ -44,21 +50,31 @@ export async function createPrompterxServer(config) {
44
50
  // Create MCP server
45
51
  const server = new McpServer({
46
52
  name: 'prompteryx',
47
- version: '1.1.1',
53
+ version: '1.1.2',
48
54
  }, {
49
55
  capabilities: {
50
56
  tools: {},
51
57
  resources: {},
52
58
  },
53
59
  });
54
- // Browser session manager (shared across browser tools and AI browser)
55
- const sessionManager = new BrowserSessionManager(sessionTimeout ?? 300_000);
60
+ // Browser session manager (shared across browser tools and AI browser).
61
+ // Every cloud session's minutes are reported when it closes, however it
62
+ // closes (tool, idle timeout, end of the MCP session).
63
+ const sessionManager = new BrowserSessionManager(sessionTimeout ?? 300_000, async (minutesUsed) => {
64
+ if (executionMode === 'cloud')
65
+ await recordUsage(apiKey, apiUrl, { cloudBrowserMinutes: minutesUsed });
66
+ });
67
+ // SOC 2 CC9.2: with allowBrowserbase === false (hosted endpoint, non-admin key)
68
+ // the platform's Browserbase keys are never read or sent, and opening a cloud
69
+ // page fails with BROWSERBASE_ADMIN_ONLY_MESSAGE before any Browserbase call.
70
+ const browserbaseAllowed = config.allowBrowserbase !== false;
56
71
  const cloudConfig = () => ({
57
72
  apiKey,
58
73
  apiUrl,
59
- browserbaseProjectId: process.env.BROWSERBASE_PROJECT_ID ?? '',
60
- browserbaseApiKey: process.env.BROWSERBASE_API_KEY ?? '',
74
+ browserbaseProjectId: browserbaseAllowed ? (process.env.BROWSERBASE_PROJECT_ID ?? '') : '',
75
+ browserbaseApiKey: browserbaseAllowed ? (process.env.BROWSERBASE_API_KEY ?? '') : '',
61
76
  browserbaseContextId: authContext.browserbaseContextId,
77
+ browserbaseDisabledReason: browserbaseAllowed ? undefined : BROWSERBASE_ADMIN_ONLY_MESSAGE,
62
78
  stealth: config.stealthMode,
63
79
  videoRecording: config.videoRecording,
64
80
  });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -7,18 +7,18 @@
7
7
  */
8
8
  import { defineTool } from '../utils/tool-annotations.js';
9
9
  import { z } from 'zod';
10
- import { enforceUsageLimits, recordUsage, formatUsageRemaining } from '../auth/usage-enforcer.js';
10
+ import { enforceUsageLimits, recordUsage, formatUsageRemaining, aiCreditsRemaining } from '../auth/usage-enforcer.js';
11
11
  import { formatError } from '../utils/output-formatter.js';
12
12
  export function registerAiBrowserTools(server, ctx) {
13
13
  // browser_ai_action
14
- defineTool(server, 'browser_ai_action', 'AI Browser Agent: Give a natural language instruction and the AI will see the screen and perform complex multi-step browser actions. Uses Gemini Computer Use model. Consumes AI credits.', {
14
+ defineTool(server, 'browser_ai_action', 'AI Browser Agent: Give a natural language instruction and the AI will see the screen and perform complex multi-step browser actions. Runs in a cloud browser (default model gemini-3.5-flash). Consumes AI credits and cloud-browser minutes. Say where to start inside the instruction.', {
15
15
  instruction: z.string().describe('Natural language instruction (e.g. "Log into my dashboard and download the monthly report")'),
16
16
  maxSteps: z.number().optional().describe('Maximum number of AI actions to perform (default: 10)'),
17
17
  cloudProfileId: z.string().optional().describe('Reuse a saved cloud profile (its cookies/logins). Omit to use your default cloud profile; pass persistContext:false for a clean throwaway browser.'),
18
18
  persistContext: z.boolean().optional().describe('Persist cookies/logins at session close. Defaults true; set false for an ephemeral run.'),
19
19
  viewport: z.object({ width: z.number(), height: z.number() }).optional().describe('Viewport size (default 1440x900).'),
20
- model: z.string().optional().describe('Vision model id (e.g. gemini-3-flash-preview).'),
21
- aiVision: z.string().optional().describe('Screenshot resolution "WxH" (e.g. 320x200). Lower = fewer tokens = cheaper.'),
20
+ model: z.string().optional().describe('Browser-agent model id, e.g. gemini-3.5-flash (default), gemini-3.7-flash, claude-sonnet-5-5-vision. Unknown ids are refused with the valid list.'),
21
+ aiVision: z.string().optional().describe('AI Vision quality preset: ultra-saver, low, saver, efficient, balanced, detailed, enhanced, precision, max-precision. Lower = cheaper and faster; higher = reads small text better.'),
22
22
  recordSession: z.boolean().optional().describe('Record the run to an MP4.'),
23
23
  }, async ({ instruction, maxSteps, cloudProfileId, persistContext, viewport, model, aiVision, recordSession }) => {
24
24
  // Check AI agent credits
@@ -68,7 +68,7 @@ export function registerAiBrowserTools(server, ctx) {
68
68
  stepsPerformed: data.steps?.length ?? 0,
69
69
  actions: data.steps?.map((s) => s.action) ?? [],
70
70
  creditsUsed: data.creditsUsed ?? 0,
71
- creditsRemaining: ctx.getAuth().aiCreditsIncluded - ctx.getAuth().aiCreditsUsedThisMonth - (data.creditsUsed ?? 0),
71
+ creditsRemaining: Math.max(0, aiCreditsRemaining(ctx.getAuth()) - (data.creditsUsed ?? 0)),
72
72
  }, null, 2),
73
73
  });
74
74
  // Final screenshot if available
@@ -1 +1 @@
1
- {"version":3,"file":"ai-browser-tools.js","sourceRoot":"","sources":["../../src/tools/ai-browser-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-browser-tools.js","sourceRoot":"","sources":["../../src/tools/ai-browser-tools.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,12 @@ export interface CloudSessionConfig {
26
26
  browserbaseProjectId: string;
27
27
  browserbaseApiKey: string;
28
28
  browserbaseContextId?: string;
29
+ /**
30
+ * Set when this session may not use Browserbase (the hosted endpoint for a
31
+ * non-admin key — SOC 2 CC9.2). Opening a cloud page then throws this message
32
+ * without contacting Browserbase.
33
+ */
34
+ browserbaseDisabledReason?: string;
29
35
  viewport?: {
30
36
  width: number;
31
37
  height: number;
@@ -41,7 +47,15 @@ export declare class BrowserSessionManager {
41
47
  private session;
42
48
  private timeoutTimer;
43
49
  private timeoutMs;
44
- constructor(timeoutMs?: number);
50
+ private onCloudSessionClosed?;
51
+ /**
52
+ * `onCloudSessionClosed` fires once for EVERY cloud session that closes —
53
+ * browser_close, the idle timeout, a replaced session and server cleanup —
54
+ * so its minutes are always reported. (1 Oct 2026: only the browser_close
55
+ * tool reported minutes, so sessions that idled out or ended with the MCP
56
+ * session were never billed.)
57
+ */
58
+ constructor(timeoutMs?: number, onCloudSessionClosed?: (minutesUsed: number) => Promise<void> | void);
45
59
  get activeSession(): SessionInfo | null;
46
60
  get hasSession(): boolean;
47
61
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"browser-session-manager.d.ts","sourceRoot":"","sources":["../../src/tools/browser-session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAA2B;IAIlD,IAAI,aAAa,IAAI,WAAW,GAAG,IAAI,CAEtC;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;OAEG;IACG,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;IAiD5E;;OAEG;YACW,wBAAwB;IAuCtC;;OAEG;IACG,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwC5E;;OAEG;IACH,OAAO,IAAI,IAAI;IASf;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAK3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAuC/C,OAAO,CAAC,YAAY;CAMrB"}
1
+ {"version":3,"file":"browser-session-manager.d.ts","sourceRoot":"","sources":["../../src/tools/browser-session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,oBAAoB,CAAC,CAAgD;IAE7E;;;;;;OAMG;gBACS,SAAS,GAAE,MAA2B,EAAE,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKxH,IAAI,aAAa,IAAI,WAAW,GAAG,IAAI,CAEtC;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;OAEG;IACG,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsD5E;;OAEG;YACW,wBAAwB;IAuCtC;;OAEG;IACG,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwC5E;;OAEG;IACH,OAAO,IAAI,IAAI;IASf;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAK3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IA6C/C,OAAO,CAAC,YAAY;CAMrB"}
@@ -14,8 +14,17 @@ export class BrowserSessionManager {
14
14
  session = null;
15
15
  timeoutTimer = null;
16
16
  timeoutMs;
17
- constructor(timeoutMs = SESSION_TIMEOUT_MS) {
17
+ onCloudSessionClosed;
18
+ /**
19
+ * `onCloudSessionClosed` fires once for EVERY cloud session that closes —
20
+ * browser_close, the idle timeout, a replaced session and server cleanup —
21
+ * so its minutes are always reported. (1 Oct 2026: only the browser_close
22
+ * tool reported minutes, so sessions that idled out or ended with the MCP
23
+ * session were never billed.)
24
+ */
25
+ constructor(timeoutMs = SESSION_TIMEOUT_MS, onCloudSessionClosed) {
18
26
  this.timeoutMs = timeoutMs;
27
+ this.onCloudSessionClosed = onCloudSessionClosed;
19
28
  }
20
29
  get activeSession() {
21
30
  return this.session;
@@ -32,6 +41,10 @@ export class BrowserSessionManager {
32
41
  this.resetTimeout();
33
42
  return this.session;
34
43
  }
44
+ // SOC 2 CC9.2: refuse before any Browserbase call when this session may not use it.
45
+ if (config.browserbaseDisabledReason) {
46
+ throw new Error(config.browserbaseDisabledReason);
47
+ }
35
48
  // Clean up any existing session first
36
49
  await this.close();
37
50
  const { chromium } = await import('playwright-core');
@@ -193,7 +206,14 @@ export class BrowserSessionManager {
193
206
  catch { /* best effort */ }
194
207
  }
195
208
  this.session = null;
196
- return { minutesUsed: Math.ceil(minutesUsed) };
209
+ const billed = Math.ceil(minutesUsed);
210
+ if (mode === 'cloud' && billed > 0 && this.onCloudSessionClosed) {
211
+ try {
212
+ await this.onCloudSessionClosed(billed);
213
+ }
214
+ catch { /* best effort — never fail a close on usage reporting */ }
215
+ }
216
+ return { minutesUsed: billed };
197
217
  }
198
218
  resetTimeout() {
199
219
  if (this.timeoutTimer)
@@ -1 +1 @@
1
- {"version":3,"file":"browser-session-manager.js","sourceRoot":"","sources":["../../src/tools/browser-session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-session-manager.js","sourceRoot":"","sources":["../../src/tools/browser-session-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"browser-tools.d.ts","sourceRoot":"","sources":["../../src/tools/browser-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAI9F,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,WAAW,CAAC;IAC3B,cAAc,EAAE,qBAAqB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,WAAW,EAAE,MAAM,kBAAkB,CAAC;CACvC;AA4BD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,QAwV/E"}
1
+ {"version":3,"file":"browser-tools.d.ts","sourceRoot":"","sources":["../../src/tools/browser-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAI9F,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,WAAW,CAAC;IAC3B,cAAc,EAAE,qBAAqB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,WAAW,EAAE,MAAM,kBAAkB,CAAC;CACvC;AA4BD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,QAuV/E"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { defineTool } from '../utils/tool-annotations.js';
8
8
  import { z } from 'zod';
9
- import { enforceUsageLimits, recordUsage, formatUsageRemaining } from '../auth/usage-enforcer.js';
9
+ import { enforceUsageLimits, formatUsageRemaining } from '../auth/usage-enforcer.js';
10
10
  import { executeBrowserAction } from '../execution/cloud-executor.js';
11
11
  import { formatError } from '../utils/output-formatter.js';
12
12
  function withUsageCheck(ctx, category, fn) {
@@ -256,10 +256,9 @@ export function registerBrowserTools(server, ctx) {
256
256
  });
257
257
  // browser_close
258
258
  defineTool(server, 'browser_close', 'Close the browser session and release resources. Reports cloud minutes used.', {}, async () => {
259
+ // Minutes are reported by the session manager's close hook (every
260
+ // close path), so this tool must not report them a second time.
259
261
  const { minutesUsed } = await ctx.sessionManager.close();
260
- if (minutesUsed > 0 && ctx.executionMode === 'cloud') {
261
- await recordUsage(ctx.apiKey, ctx.apiUrl, { cloudBrowserMinutes: minutesUsed });
262
- }
263
262
  return {
264
263
  content: [{
265
264
  type: 'text',