@nordsym/apiclaw 1.2.9 → 1.3.0

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.
@@ -9,6 +9,7 @@
9
9
  */
10
10
 
11
11
  import type * as analytics from "../analytics.js";
12
+ import type * as capabilities from "../capabilities.js";
12
13
  import type * as credits from "../credits.js";
13
14
  import type * as directCall from "../directCall.js";
14
15
  import type * as http from "../http.js";
@@ -27,6 +28,7 @@ import type {
27
28
 
28
29
  declare const fullApi: ApiFromModules<{
29
30
  analytics: typeof analytics;
31
+ capabilities: typeof capabilities;
30
32
  credits: typeof credits;
31
33
  directCall: typeof directCall;
32
34
  http: typeof http;
@@ -0,0 +1,157 @@
1
+ import { v } from "convex/values";
2
+ import { query, mutation } from "./_generated/server";
3
+
4
+ // Get a capability by ID
5
+ export const getById = query({
6
+ args: { id: v.string() },
7
+ handler: async (ctx, args) => {
8
+ return await ctx.db
9
+ .query("capabilities")
10
+ .withIndex("by_capability_id", (q) => q.eq("id", args.id))
11
+ .first();
12
+ },
13
+ });
14
+
15
+ // List all capabilities
16
+ export const list = query({
17
+ args: {},
18
+ handler: async (ctx) => {
19
+ return await ctx.db.query("capabilities").collect();
20
+ },
21
+ });
22
+
23
+ // List capabilities by category
24
+ export const listByCategory = query({
25
+ args: { category: v.string() },
26
+ handler: async (ctx, args) => {
27
+ return await ctx.db
28
+ .query("capabilities")
29
+ .withIndex("by_category", (q) => q.eq("category", args.category))
30
+ .collect();
31
+ },
32
+ });
33
+
34
+ // Get providers for a capability (sorted by priority, filtered by enabled + healthy)
35
+ export const getProviders = query({
36
+ args: { capabilityId: v.string(), region: v.optional(v.string()) },
37
+ handler: async (ctx, args) => {
38
+ let providers = await ctx.db
39
+ .query("providerCapabilities")
40
+ .withIndex("by_capabilityId_enabled", (q) =>
41
+ q.eq("capabilityId", args.capabilityId).eq("enabled", true)
42
+ )
43
+ .collect();
44
+
45
+ // Filter by region if specified
46
+ if (args.region) {
47
+ providers = providers.filter(p => p.regions.includes(args.region!));
48
+ }
49
+
50
+ // Filter out unhealthy providers
51
+ providers = providers.filter(p => p.healthStatus !== "down");
52
+
53
+ // Sort by priority, then price, then latency
54
+ providers.sort((a, b) => {
55
+ if (a.priority !== b.priority) return a.priority - b.priority;
56
+ if (a.pricePerUnit !== b.pricePerUnit) return a.pricePerUnit - b.pricePerUnit;
57
+ return a.avgLatencyMs - b.avgLatencyMs;
58
+ });
59
+
60
+ return providers;
61
+ },
62
+ });
63
+
64
+ // Create a capability
65
+ export const create = mutation({
66
+ args: {
67
+ id: v.string(),
68
+ name: v.string(),
69
+ description: v.string(),
70
+ category: v.string(),
71
+ standardParams: v.array(v.object({
72
+ name: v.string(),
73
+ type: v.string(),
74
+ required: v.boolean(),
75
+ description: v.string(),
76
+ default: v.optional(v.any()),
77
+ })),
78
+ },
79
+ handler: async (ctx, args) => {
80
+ const now = Date.now();
81
+ return await ctx.db.insert("capabilities", {
82
+ ...args,
83
+ createdAt: now,
84
+ updatedAt: now,
85
+ });
86
+ },
87
+ });
88
+
89
+ // Add provider to capability
90
+ export const addProvider = mutation({
91
+ args: {
92
+ providerId: v.string(),
93
+ capabilityId: v.string(),
94
+ priority: v.number(),
95
+ regions: v.array(v.string()),
96
+ pricePerUnit: v.number(),
97
+ currency: v.string(),
98
+ avgLatencyMs: v.number(),
99
+ paramMapping: v.any(),
100
+ },
101
+ handler: async (ctx, args) => {
102
+ const now = Date.now();
103
+ return await ctx.db.insert("providerCapabilities", {
104
+ ...args,
105
+ enabled: true,
106
+ healthStatus: "healthy",
107
+ createdAt: now,
108
+ updatedAt: now,
109
+ });
110
+ },
111
+ });
112
+
113
+ // Update provider health status
114
+ export const updateHealth = mutation({
115
+ args: {
116
+ providerId: v.string(),
117
+ capabilityId: v.string(),
118
+ healthStatus: v.string(),
119
+ },
120
+ handler: async (ctx, args) => {
121
+ const mapping = await ctx.db
122
+ .query("providerCapabilities")
123
+ .withIndex("by_providerId", (q) => q.eq("providerId", args.providerId))
124
+ .filter((q) => q.eq(q.field("capabilityId"), args.capabilityId))
125
+ .first();
126
+
127
+ if (mapping) {
128
+ await ctx.db.patch(mapping._id, {
129
+ healthStatus: args.healthStatus,
130
+ lastHealthCheck: Date.now(),
131
+ updatedAt: Date.now(),
132
+ });
133
+ }
134
+ },
135
+ });
136
+
137
+ // Log capability usage
138
+ export const logUsage = mutation({
139
+ args: {
140
+ capabilityId: v.string(),
141
+ providerId: v.string(),
142
+ userId: v.string(),
143
+ action: v.string(),
144
+ success: v.boolean(),
145
+ fallbackUsed: v.boolean(),
146
+ fallbackReason: v.optional(v.string()),
147
+ latencyMs: v.number(),
148
+ cost: v.number(),
149
+ currency: v.string(),
150
+ },
151
+ handler: async (ctx, args) => {
152
+ return await ctx.db.insert("capabilityLogs", {
153
+ ...args,
154
+ timestamp: Date.now(),
155
+ });
156
+ },
157
+ });
package/convex/schema.ts CHANGED
@@ -267,6 +267,9 @@ export default defineSchema({
267
267
  path: v.string(), // JSON path, e.g. "data.id" or "results[0].name"
268
268
  })),
269
269
  enabled: v.boolean(),
270
+ // Confirmation settings for costly actions
271
+ requiresConfirmation: v.optional(v.boolean()), // If true, requires user confirmation before executing
272
+ estimatedCost: v.optional(v.string()), // Human-readable cost estimate, e.g. "~2-5 SEK per invoice"
270
273
  createdAt: v.number(),
271
274
  updatedAt: v.number(),
272
275
  })
@@ -304,4 +307,67 @@ export default defineSchema({
304
307
  })
305
308
  .index("by_email", ["email"])
306
309
  .index("by_type", ["type"]),
310
+
311
+ // ============================================
312
+ // CAPABILITY LAYER (abstraction over providers)
313
+ // ============================================
314
+
315
+ // Capability definitions (sms, email, invoice, search, etc.)
316
+ capabilities: defineTable({
317
+ id: v.string(), // "sms", "email", "invoice"
318
+ name: v.string(), // "SMS Messaging"
319
+ description: v.string(),
320
+ category: v.string(), // "communication", "business", "ai"
321
+ standardParams: v.array(v.object({
322
+ name: v.string(),
323
+ type: v.string(), // "string" | "number" | "boolean"
324
+ required: v.boolean(),
325
+ description: v.string(),
326
+ default: v.optional(v.any()),
327
+ })),
328
+ createdAt: v.number(),
329
+ updatedAt: v.number(),
330
+ })
331
+ .index("by_capability_id", ["id"])
332
+ .index("by_category", ["category"]),
333
+
334
+ // Provider → Capability mappings (which providers offer which capabilities)
335
+ providerCapabilities: defineTable({
336
+ providerId: v.string(), // "46elks", "twilio"
337
+ capabilityId: v.string(), // "sms"
338
+ priority: v.number(), // 1 = primary, 2 = fallback
339
+ regions: v.array(v.string()), // ["SE", "EU", "US"]
340
+ pricePerUnit: v.number(), // in smallest currency unit (cents/öre)
341
+ currency: v.string(), // "SEK", "USD"
342
+ avgLatencyMs: v.number(),
343
+ paramMapping: v.any(), // Record<string, string> - capability param → provider param
344
+ enabled: v.boolean(),
345
+ healthStatus: v.string(), // "healthy" | "degraded" | "down"
346
+ lastHealthCheck: v.optional(v.number()),
347
+ createdAt: v.number(),
348
+ updatedAt: v.number(),
349
+ })
350
+ .index("by_providerId", ["providerId"])
351
+ .index("by_capabilityId", ["capabilityId"])
352
+ .index("by_capabilityId_enabled", ["capabilityId", "enabled"])
353
+ .index("by_healthStatus", ["healthStatus"]),
354
+
355
+ // Capability usage logs (for analytics and billing)
356
+ capabilityLogs: defineTable({
357
+ capabilityId: v.string(),
358
+ providerId: v.string(),
359
+ userId: v.string(),
360
+ action: v.string(),
361
+ success: v.boolean(),
362
+ fallbackUsed: v.boolean(),
363
+ fallbackReason: v.optional(v.string()),
364
+ latencyMs: v.number(),
365
+ cost: v.number(),
366
+ currency: v.string(),
367
+ timestamp: v.number(),
368
+ })
369
+ .index("by_capabilityId", ["capabilityId"])
370
+ .index("by_providerId", ["providerId"])
371
+ .index("by_userId", ["userId"])
372
+ .index("by_timestamp", ["timestamp"]),
307
373
  });
@@ -0,0 +1,41 @@
1
+ /**
2
+ * APIClaw Capability Router
3
+ * Routes capability requests to the best available provider
4
+ */
5
+ interface CapabilityPreferences {
6
+ region?: string;
7
+ maxPrice?: number;
8
+ preferredProvider?: string;
9
+ fallback?: boolean;
10
+ }
11
+ interface CapabilityResult {
12
+ success: boolean;
13
+ capability: string;
14
+ action: string;
15
+ providerUsed?: string;
16
+ fallbackAttempted: boolean;
17
+ fallbackReason?: string;
18
+ data?: unknown;
19
+ error?: string;
20
+ cost?: number;
21
+ currency?: string;
22
+ latencyMs?: number;
23
+ }
24
+ /**
25
+ * Execute a capability request with automatic provider selection and fallback
26
+ */
27
+ export declare function executeCapability(capabilityId: string, action: string, params: Record<string, unknown>, userId: string, preferences?: CapabilityPreferences): Promise<CapabilityResult>;
28
+ /**
29
+ * List available capabilities
30
+ */
31
+ export declare function listCapabilities(): Promise<{
32
+ id: string;
33
+ name: string;
34
+ category: string;
35
+ }[]>;
36
+ /**
37
+ * Check if a capability exists
38
+ */
39
+ export declare function hasCapability(capabilityId: string): Promise<boolean>;
40
+ export {};
41
+ //# sourceMappingURL=capability-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-router.d.ts","sourceRoot":"","sources":["../src/capability-router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH,UAAU,qBAAqB;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4ED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,qBAA0B,GACtC,OAAO,CAAC,gBAAgB,CAAC,CAmJ3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAwBlG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB1E"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * APIClaw Capability Router
3
+ * Routes capability requests to the best available provider
4
+ */
5
+ import { executeAPICall } from './execute.js';
6
+ import { logAPICall } from './analytics.js';
7
+ // Convex HTTP API for capability queries
8
+ const CONVEX_URL = process.env.NEXT_PUBLIC_CONVEX_URL || 'https://adventurous-avocet-799.convex.cloud';
9
+ /**
10
+ * Query Convex for providers that support a capability
11
+ */
12
+ async function getProvidersForCapability(capabilityId, region) {
13
+ try {
14
+ const res = await fetch(`${CONVEX_URL}/api/query`, {
15
+ method: 'POST',
16
+ headers: { 'Content-Type': 'application/json' },
17
+ body: JSON.stringify({
18
+ path: 'capabilities:getProviders',
19
+ args: { capabilityId, region },
20
+ }),
21
+ });
22
+ if (!res.ok)
23
+ return [];
24
+ const data = await res.json();
25
+ if (Array.isArray(data))
26
+ return data;
27
+ return (data.value || []);
28
+ }
29
+ catch (e) {
30
+ console.error('Failed to fetch capability providers:', e);
31
+ return [];
32
+ }
33
+ }
34
+ /**
35
+ * Map capability params to provider-specific params
36
+ */
37
+ function mapParams(params, mapping) {
38
+ const result = {};
39
+ for (const [capParam, value] of Object.entries(params)) {
40
+ const providerParam = mapping[capParam] || capParam;
41
+ result[providerParam] = value;
42
+ }
43
+ return result;
44
+ }
45
+ /**
46
+ * Log capability usage to Convex
47
+ */
48
+ async function logCapabilityUsage(params) {
49
+ try {
50
+ await fetch(`${CONVEX_URL}/api/mutation`, {
51
+ method: 'POST',
52
+ headers: { 'Content-Type': 'application/json' },
53
+ body: JSON.stringify({
54
+ path: 'capabilities:logUsage',
55
+ args: params,
56
+ }),
57
+ });
58
+ }
59
+ catch (e) {
60
+ console.error('Failed to log capability usage:', e);
61
+ }
62
+ }
63
+ /**
64
+ * Execute a capability request with automatic provider selection and fallback
65
+ */
66
+ export async function executeCapability(capabilityId, action, params, userId, preferences = {}) {
67
+ const startTime = Date.now();
68
+ const enableFallback = preferences.fallback !== false; // Default true
69
+ // Get providers for this capability
70
+ const providers = await getProvidersForCapability(capabilityId, preferences.region);
71
+ if (providers.length === 0) {
72
+ return {
73
+ success: false,
74
+ capability: capabilityId,
75
+ action,
76
+ fallbackAttempted: false,
77
+ error: `No providers available for capability: ${capabilityId}`,
78
+ };
79
+ }
80
+ // Filter by max price if specified
81
+ let filteredProviders = providers;
82
+ if (preferences.maxPrice !== undefined) {
83
+ filteredProviders = providers.filter(p => p.pricePerUnit <= preferences.maxPrice);
84
+ }
85
+ // Prefer specific provider if requested
86
+ if (preferences.preferredProvider) {
87
+ const preferred = filteredProviders.find(p => p.providerId === preferences.preferredProvider);
88
+ if (preferred) {
89
+ filteredProviders = [preferred, ...filteredProviders.filter(p => p.providerId !== preferences.preferredProvider)];
90
+ }
91
+ }
92
+ if (filteredProviders.length === 0) {
93
+ return {
94
+ success: false,
95
+ capability: capabilityId,
96
+ action,
97
+ fallbackAttempted: false,
98
+ error: 'No providers match your preferences (region/price)',
99
+ };
100
+ }
101
+ // Try providers in order
102
+ let fallbackAttempted = false;
103
+ let lastError = '';
104
+ for (let i = 0; i < filteredProviders.length; i++) {
105
+ const provider = filteredProviders[i];
106
+ const isFirstAttempt = i === 0;
107
+ if (!isFirstAttempt) {
108
+ fallbackAttempted = true;
109
+ }
110
+ try {
111
+ // Map params to provider-specific format
112
+ const mappedParams = mapParams(params, provider.paramMapping || {});
113
+ // Execute via existing executeAPICall
114
+ const result = await executeAPICall(provider.providerId, action, mappedParams, userId);
115
+ const latencyMs = Date.now() - startTime;
116
+ if (result.success) {
117
+ // Log successful usage
118
+ logCapabilityUsage({
119
+ capabilityId,
120
+ providerId: provider.providerId,
121
+ userId,
122
+ action,
123
+ success: true,
124
+ fallbackUsed: fallbackAttempted,
125
+ fallbackReason: fallbackAttempted ? lastError : undefined,
126
+ latencyMs,
127
+ cost: provider.pricePerUnit,
128
+ currency: provider.currency,
129
+ });
130
+ // Also log to file-based analytics
131
+ logAPICall({
132
+ timestamp: new Date().toISOString(),
133
+ provider: provider.providerId,
134
+ action,
135
+ type: 'direct',
136
+ userId,
137
+ success: true,
138
+ latencyMs,
139
+ });
140
+ return {
141
+ success: true,
142
+ capability: capabilityId,
143
+ action,
144
+ providerUsed: provider.providerId,
145
+ fallbackAttempted,
146
+ fallbackReason: fallbackAttempted ? lastError : undefined,
147
+ data: result.data,
148
+ cost: provider.pricePerUnit,
149
+ currency: provider.currency,
150
+ latencyMs,
151
+ };
152
+ }
153
+ // Provider returned error, try next
154
+ lastError = result.error || 'Unknown error';
155
+ if (!enableFallback) {
156
+ break;
157
+ }
158
+ }
159
+ catch (e) {
160
+ lastError = e.message || 'Provider execution failed';
161
+ if (!enableFallback) {
162
+ break;
163
+ }
164
+ }
165
+ }
166
+ // All providers failed
167
+ const latencyMs = Date.now() - startTime;
168
+ logCapabilityUsage({
169
+ capabilityId,
170
+ providerId: filteredProviders[0].providerId,
171
+ userId,
172
+ action,
173
+ success: false,
174
+ fallbackUsed: fallbackAttempted,
175
+ fallbackReason: lastError,
176
+ latencyMs,
177
+ cost: 0,
178
+ currency: 'SEK',
179
+ });
180
+ return {
181
+ success: false,
182
+ capability: capabilityId,
183
+ action,
184
+ fallbackAttempted,
185
+ error: `All providers failed. Last error: ${lastError}`,
186
+ latencyMs,
187
+ };
188
+ }
189
+ /**
190
+ * List available capabilities
191
+ */
192
+ export async function listCapabilities() {
193
+ try {
194
+ const res = await fetch(`${CONVEX_URL}/api/query`, {
195
+ method: 'POST',
196
+ headers: { 'Content-Type': 'application/json' },
197
+ body: JSON.stringify({
198
+ path: 'capabilities:list',
199
+ args: {},
200
+ }),
201
+ });
202
+ if (!res.ok)
203
+ return [];
204
+ const data = await res.json();
205
+ const capabilities = Array.isArray(data) ? data : (data.value || []);
206
+ return capabilities.map(c => ({
207
+ id: c.id,
208
+ name: c.name,
209
+ category: c.category,
210
+ }));
211
+ }
212
+ catch (e) {
213
+ return [];
214
+ }
215
+ }
216
+ /**
217
+ * Check if a capability exists
218
+ */
219
+ export async function hasCapability(capabilityId) {
220
+ try {
221
+ const res = await fetch(`${CONVEX_URL}/api/query`, {
222
+ method: 'POST',
223
+ headers: { 'Content-Type': 'application/json' },
224
+ body: JSON.stringify({
225
+ path: 'capabilities:getById',
226
+ args: { id: capabilityId },
227
+ }),
228
+ });
229
+ if (!res.ok)
230
+ return false;
231
+ const data = await res.json();
232
+ if (data && typeof data === 'object' && 'value' in data) {
233
+ return !!data.value;
234
+ }
235
+ return !!data;
236
+ }
237
+ catch (e) {
238
+ return false;
239
+ }
240
+ }
241
+ //# sourceMappingURL=capability-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-router.js","sourceRoot":"","sources":["../src/capability-router.ts"],"names":[],"mappings":"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"}
@@ -20,9 +20,19 @@ export interface PendingAction {
20
20
  }
21
21
  export declare const CONFIRMATION_REQUIRED: Record<string, string[]>;
22
22
  /**
23
- * Check if an action requires confirmation
23
+ * Check if an action requires confirmation (hardcoded list only)
24
+ * For dynamic providers, use requiresConfirmationAsync
24
25
  */
25
26
  export declare function requiresConfirmation(provider: string, action: string): boolean;
27
+ /**
28
+ * Check if a dynamic provider action requires confirmation
29
+ * This is imported dynamically to avoid circular deps
30
+ */
31
+ export declare function requiresConfirmationAsync(provider: string, action: string): Promise<{
32
+ required: boolean;
33
+ estimatedCost?: string;
34
+ isDynamic?: boolean;
35
+ }>;
26
36
  /**
27
37
  * Generate a confirmation token and store the pending action
28
38
  */
@@ -1 +1 @@
1
- {"version":3,"file":"confirmation.d.ts","sourceRoot":"","sources":["../src/confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAU1D,CAAC;AAKF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,CAoBf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAapE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAQxE;AAcD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAarB;AA6DD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAiDvC"}
1
+ {"version":3,"file":"confirmation.d.ts","sourceRoot":"","sources":["../src/confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAU1D,CAAC;AAKF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG9E;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAsB7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,CAoBf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAapE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAQxE;AAcD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAarB;AA6DD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAiDvC"}
@@ -24,12 +24,39 @@ export const CONFIRMATION_REQUIRED = {
24
24
  // Token expiry time (5 minutes)
25
25
  const TOKEN_EXPIRY_MS = 5 * 60 * 1000;
26
26
  /**
27
- * Check if an action requires confirmation
27
+ * Check if an action requires confirmation (hardcoded list only)
28
+ * For dynamic providers, use requiresConfirmationAsync
28
29
  */
29
30
  export function requiresConfirmation(provider, action) {
30
31
  const actions = CONFIRMATION_REQUIRED[provider];
31
32
  return actions?.includes(action) ?? false;
32
33
  }
34
+ /**
35
+ * Check if a dynamic provider action requires confirmation
36
+ * This is imported dynamically to avoid circular deps
37
+ */
38
+ export async function requiresConfirmationAsync(provider, action) {
39
+ // First check hardcoded list
40
+ if (requiresConfirmation(provider, action)) {
41
+ return { required: true, isDynamic: false };
42
+ }
43
+ // Then check dynamic provider config
44
+ try {
45
+ const { getDynamicConfirmationConfig } = await import('./execute-dynamic.js');
46
+ const config = await getDynamicConfirmationConfig(provider, action);
47
+ if (config.required) {
48
+ return {
49
+ required: true,
50
+ estimatedCost: config.estimatedCost,
51
+ isDynamic: true
52
+ };
53
+ }
54
+ }
55
+ catch (e) {
56
+ // Dynamic config not available, that's ok
57
+ }
58
+ return { required: false };
59
+ }
33
60
  /**
34
61
  * Generate a confirmation token and store the pending action
35
62
  */
@@ -1 +1 @@
1
- {"version":3,"file":"confirmation.js","sourceRoot":"","sources":["../src/confirmation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confirmation.js","sourceRoot":"","sources":["../src/confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAarC,uEAAuE;AACvE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAyB,CAAC;AAExD,qDAAqD;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAA6B;IAC7D,mCAAmC;IACnC,QAAQ,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;IAE3C,gCAAgC;IAChC,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,MAAM,EAAE,CAAC,UAAU,CAAC;IAEpB,wDAAwD;IACxD,MAAM,EAAE,CAAC,YAAY,CAAC;CACvB,CAAC;AAEF,gCAAgC;AAChC,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,MAAc;IACnE,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAAgB,EAChB,MAAc;IAEd,6BAA6B;IAC7B,IAAI,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,4BAA4B,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,SAAS,EAAE,IAAI;aAChB,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,0CAA0C;IAC5C,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,MAAc,EACd,MAA2B,EAC3B,OAA4B,EAC5B,MAAe;IAEf,0BAA0B;IAC1B,cAAc,EAAE,CAAC;IAEjB,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,MAAM,OAAO,GAAkB;QAC7B,KAAK;QACL,QAAQ;QACR,MAAM;QACN,MAAM;QACN,OAAO;QACP,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG,GAAG,eAAe;QAChC,MAAM;KACP,CAAC;IAEF,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,OAAO,EAAE,CAAC;QACZ,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YAC5B,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,MAAc,EACd,MAA2B;IAE3B,uCAAuC;IACvC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtC;YACE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc,EAAE,MAA2B;IAC1E,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,IAAS,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1F,OAAO;YACL,IAAI,EAAE,SAAS;YACf,SAAS,EAAE;gBACT,IAAI,EAAE,MAAM,CAAC,cAAc;gBAC3B,KAAK,EAAE,MAAM,CAAC,eAAe;gBAC7B,UAAU,EAAE,MAAM,CAAC,gBAAgB;aACpC;YACD,MAAM,EAAE;gBACN,QAAQ,EAAE,WAAW;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;gBAC/B,UAAU,EAAE,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;gBACzD,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;gBACxD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;aACnC;YACD,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;gBAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC;gBAC5B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM;gBAC1C,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,cAAc,EAAE,6BAA6B;YAC7C,cAAc,EAAE,sBAAsB;SACvC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA2B;IACrD,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;IAEhD,OAAO;QACL,IAAI,EAAE,KAAK;QACX,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;QAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,aAAa;QAC7B,QAAQ;QACR,cAAc,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;KACvD,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA2B;IACvD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,qBAAqB;QAC1C,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;KACzE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,MAAc,EACd,MAA2B;IAE3B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,cAAc;oBAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACnE,IAAI,CAAC,MAAM,CAAC,eAAe;oBAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACrE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/E,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;gBACrE,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAEpE,wBAAwB;gBACxB,IAAI,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpE,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBACjD,CAAC;gBAED,mCAAmC;gBACnC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC1C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;oBACzB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC3B,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC;wBACpB,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM;QAER,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAErD,sCAAsC;YACtC,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM;QAER,KAAK,QAAQ;YACX,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACrF,MAAM;IACV,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACxE,CAAC"}
@@ -41,6 +41,8 @@ export interface ProviderAction {
41
41
  params: ActionParam[];
42
42
  responseMapping: ResponseMapping[];
43
43
  enabled: boolean;
44
+ requiresConfirmation?: boolean;
45
+ estimatedCost?: string;
44
46
  }
45
47
  export interface ExecuteResult {
46
48
  success: boolean;
@@ -67,6 +69,15 @@ export declare function getProviderConfig(providerId: string): Promise<ProviderD
67
69
  * Fetch action configuration from Convex
68
70
  */
69
71
  export declare function getActionConfig(providerId: string, actionName: string): Promise<ProviderAction | null>;
72
+ /**
73
+ * Check if a dynamic action requires confirmation (for costly actions)
74
+ * Returns action config if confirmation required, null otherwise
75
+ */
76
+ export declare function getDynamicConfirmationConfig(providerId: string, actionName: string): Promise<{
77
+ required: boolean;
78
+ action?: ProviderAction;
79
+ estimatedCost?: string;
80
+ }>;
70
81
  /**
71
82
  * Get user's current usage for rate limiting
72
83
  */