@nordsym/apiclaw 1.2.2 → 1.2.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/AGENTS.md +50 -33
- package/README.md +22 -12
- package/SOUL.md +60 -19
- package/STATUS.md +91 -169
- package/convex/_generated/api.d.ts +6 -0
- package/convex/directCall.ts +598 -0
- package/convex/providers.ts +341 -26
- package/convex/schema.ts +87 -0
- package/convex/usage.ts +260 -0
- package/convex/waitlist.ts +55 -0
- package/data/combined-02-26.json +22102 -0
- package/data/night-expansion-02-26-06-batch2.json +1898 -0
- package/data/night-expansion-02-26-06-batch3.json +1410 -0
- package/data/night-expansion-02-26-06.json +3146 -0
- package/data/night-expansion-02-26-full.json +9726 -0
- package/data/night-expansion-02-26-v2.json +330 -0
- package/data/night-expansion-02-26.json +171 -0
- package/dist/crypto.d.ts +7 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +67 -0
- package/dist/crypto.js.map +1 -0
- package/dist/execute-dynamic.d.ts +116 -0
- package/dist/execute-dynamic.d.ts.map +1 -0
- package/dist/execute-dynamic.js +456 -0
- package/dist/execute-dynamic.js.map +1 -0
- package/dist/execute.d.ts +2 -1
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +35 -5
- package/dist/execute.js.map +1 -1
- package/dist/index.js +33 -4
- package/dist/index.js.map +1 -1
- package/dist/registry/apis.json +2081 -3
- package/docs/PRD-customer-key-passthrough.md +184 -0
- package/landing/public/badges/available-on-apiclaw.svg +14 -0
- package/landing/scripts/generate-stats.js +75 -4
- package/landing/src/app/admin/page.tsx +1 -1
- package/landing/src/app/api/auth/magic-link/route.ts +1 -1
- package/landing/src/app/api/auth/session/route.ts +1 -1
- package/landing/src/app/api/auth/verify/route.ts +1 -1
- package/landing/src/app/api/og/route.tsx +5 -3
- package/landing/src/app/docs/page.tsx +5 -4
- package/landing/src/app/earn/page.tsx +14 -11
- package/landing/src/app/globals.css +16 -15
- package/landing/src/app/layout.tsx +2 -2
- package/landing/src/app/page.tsx +425 -254
- package/landing/src/app/providers/dashboard/[apiId]/actions/[actionId]/edit/page.tsx +600 -0
- package/landing/src/app/providers/dashboard/[apiId]/actions/new/page.tsx +583 -0
- package/landing/src/app/providers/dashboard/[apiId]/actions/page.tsx +301 -0
- package/landing/src/app/providers/dashboard/[apiId]/direct-call/page.tsx +659 -0
- package/landing/src/app/providers/dashboard/[apiId]/page.tsx +381 -0
- package/landing/src/app/providers/dashboard/[apiId]/test/page.tsx +418 -0
- package/landing/src/app/providers/dashboard/layout.tsx +292 -0
- package/landing/src/app/providers/dashboard/page.tsx +353 -290
- package/landing/src/app/providers/register/page.tsx +87 -10
- package/landing/src/components/AiClientDropdown.tsx +85 -0
- package/landing/src/components/ConfigHelperModal.tsx +113 -0
- package/landing/src/components/HeroTabs.tsx +187 -0
- package/landing/src/components/ShareIntegrationModal.tsx +198 -0
- package/landing/src/hooks/useDashboardData.ts +53 -1
- package/landing/src/lib/apis.json +46554 -174
- package/landing/src/lib/convex-client.ts +22 -3
- package/landing/src/lib/stats.json +4 -4
- package/landing/tsconfig.tsbuildinfo +1 -1
- package/night-expansion-02-26-06-batch2.py +368 -0
- package/night-expansion-02-26-06-batch3.py +299 -0
- package/night-expansion-02-26-06.py +756 -0
- package/package.json +1 -1
- package/scripts/bulk-add-public-apis-v2.py +418 -0
- package/scripts/night-expansion-02-26-v2.py +296 -0
- package/scripts/night-expansion-02-26.py +890 -0
- package/scripts/seed-complete-api.js +181 -0
- package/scripts/seed-demo-api.sh +44 -0
- package/src/crypto.ts +75 -0
- package/src/execute-dynamic.ts +589 -0
- package/src/execute.ts +41 -5
- package/src/index.ts +38 -4
- package/src/registry/apis.json +2081 -3
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* APIClaw Dynamic Executor
|
|
3
|
+
* Executes provider-configured actions via self-service Direct Call
|
|
4
|
+
*/
|
|
5
|
+
export interface ProviderDirectCallConfig {
|
|
6
|
+
_id: string;
|
|
7
|
+
providerId: string;
|
|
8
|
+
apiId: string;
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
authType: 'bearer' | 'basic' | 'api_key' | 'none';
|
|
11
|
+
authHeader: string;
|
|
12
|
+
authPrefix: string;
|
|
13
|
+
encryptedMasterKey: string;
|
|
14
|
+
rateLimitPerUser: number;
|
|
15
|
+
rateLimitPerDay: number;
|
|
16
|
+
pricePerRequest: number;
|
|
17
|
+
status: 'draft' | 'testing' | 'live';
|
|
18
|
+
allowCustomerKeys?: boolean;
|
|
19
|
+
requireCustomerKeys?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface ActionParam {
|
|
22
|
+
name: string;
|
|
23
|
+
type: 'string' | 'number' | 'boolean' | 'object';
|
|
24
|
+
required: boolean;
|
|
25
|
+
description: string;
|
|
26
|
+
default?: unknown;
|
|
27
|
+
in: 'body' | 'query' | 'path';
|
|
28
|
+
}
|
|
29
|
+
export interface ResponseMapping {
|
|
30
|
+
name: string;
|
|
31
|
+
path: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ProviderAction {
|
|
34
|
+
_id: string;
|
|
35
|
+
directCallId: string;
|
|
36
|
+
name: string;
|
|
37
|
+
displayName: string;
|
|
38
|
+
description: string;
|
|
39
|
+
method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
40
|
+
path: string;
|
|
41
|
+
params: ActionParam[];
|
|
42
|
+
responseMapping: ResponseMapping[];
|
|
43
|
+
enabled: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface ExecuteResult {
|
|
46
|
+
success: boolean;
|
|
47
|
+
provider: string;
|
|
48
|
+
action: string;
|
|
49
|
+
data?: unknown;
|
|
50
|
+
error?: string;
|
|
51
|
+
cost?: number;
|
|
52
|
+
latencyMs?: number;
|
|
53
|
+
}
|
|
54
|
+
interface UsageStats {
|
|
55
|
+
minute: number;
|
|
56
|
+
day: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check if a provider has dynamic (self-service) config
|
|
60
|
+
*/
|
|
61
|
+
export declare function hasDynamicConfig(providerId: string): Promise<boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* Fetch provider direct call configuration from Convex
|
|
64
|
+
*/
|
|
65
|
+
export declare function getProviderConfig(providerId: string): Promise<ProviderDirectCallConfig | null>;
|
|
66
|
+
/**
|
|
67
|
+
* Fetch action configuration from Convex
|
|
68
|
+
*/
|
|
69
|
+
export declare function getActionConfig(providerId: string, actionName: string): Promise<ProviderAction | null>;
|
|
70
|
+
/**
|
|
71
|
+
* Get user's current usage for rate limiting
|
|
72
|
+
*/
|
|
73
|
+
export declare function getUserUsage(userId: string, providerId: string): Promise<UsageStats>;
|
|
74
|
+
/**
|
|
75
|
+
* Build the full URL with path and query parameters
|
|
76
|
+
*/
|
|
77
|
+
export declare function buildUrl(baseUrl: string, path: string, params: Record<string, unknown>, paramDefs: ActionParam[]): string;
|
|
78
|
+
/**
|
|
79
|
+
* Build request body from parameters
|
|
80
|
+
*/
|
|
81
|
+
export declare function buildBody(params: Record<string, unknown>, paramDefs: ActionParam[]): string | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Build authentication headers based on auth type
|
|
84
|
+
*/
|
|
85
|
+
export declare function buildAuthHeaders(config: ProviderDirectCallConfig, decryptedKey: string): Record<string, string>;
|
|
86
|
+
/**
|
|
87
|
+
* Extract value from object using simple JSONPath-like expression
|
|
88
|
+
* Supports: $.field, $.field.nested, $.array[0], $.array[*].field
|
|
89
|
+
*/
|
|
90
|
+
export declare function extractJsonPath(data: unknown, path: string): unknown;
|
|
91
|
+
/**
|
|
92
|
+
* Map response data using configured response mappings
|
|
93
|
+
*/
|
|
94
|
+
export declare function mapResponse(data: unknown, responseMapping: ResponseMapping[]): Record<string, unknown>;
|
|
95
|
+
/**
|
|
96
|
+
* Log usage to Convex
|
|
97
|
+
*/
|
|
98
|
+
export declare function logUsage(params: {
|
|
99
|
+
userId: string;
|
|
100
|
+
providerId: string;
|
|
101
|
+
actionName: string;
|
|
102
|
+
timestamp: number;
|
|
103
|
+
success: boolean;
|
|
104
|
+
latencyMs: number;
|
|
105
|
+
creditsUsed: number;
|
|
106
|
+
}): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Main function: Execute a dynamically configured action
|
|
109
|
+
*/
|
|
110
|
+
export declare function executeDynamicAction(providerId: string, actionName: string, params: Record<string, unknown>, userId: string, customerKey?: string): Promise<ExecuteResult>;
|
|
111
|
+
/**
|
|
112
|
+
* List available actions for a dynamic provider
|
|
113
|
+
*/
|
|
114
|
+
export declare function listDynamicActions(providerId: string): Promise<string[]>;
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=execute-dynamic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-dynamic.d.ts","sourceRoot":"","sources":["../src/execute-dynamic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* APIClaw Dynamic Executor
|
|
3
|
+
* Executes provider-configured actions via self-service Direct Call
|
|
4
|
+
*/
|
|
5
|
+
import { decryptKey, validateBaseUrl } from './crypto.js';
|
|
6
|
+
// Convex HTTP API
|
|
7
|
+
const CONVEX_URL = process.env.NEXT_PUBLIC_CONVEX_URL || 'https://brilliant-puffin-712.eu-west-1.convex.cloud';
|
|
8
|
+
async function convexQuery(path, args) {
|
|
9
|
+
try {
|
|
10
|
+
const res = await fetch(`${CONVEX_URL}/api/query`, {
|
|
11
|
+
method: 'POST',
|
|
12
|
+
headers: { 'Content-Type': 'application/json' },
|
|
13
|
+
body: JSON.stringify({ path, args }),
|
|
14
|
+
});
|
|
15
|
+
if (!res.ok) {
|
|
16
|
+
console.error(`Convex query failed: ${res.status}`);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const data = await res.json();
|
|
20
|
+
return (data && typeof data === 'object' && 'value' in data) ? data.value : data;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error('Convex query error:', error);
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function convexMutation(path, args) {
|
|
28
|
+
try {
|
|
29
|
+
const res = await fetch(`${CONVEX_URL}/api/mutation`, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: { 'Content-Type': 'application/json' },
|
|
32
|
+
body: JSON.stringify({ path, args }),
|
|
33
|
+
});
|
|
34
|
+
return res.ok;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('Convex mutation error:', error);
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if a provider has dynamic (self-service) config
|
|
43
|
+
*/
|
|
44
|
+
export async function hasDynamicConfig(providerId) {
|
|
45
|
+
const config = await getProviderConfig(providerId);
|
|
46
|
+
return config !== null && config.status === 'live';
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Fetch provider direct call configuration from Convex
|
|
50
|
+
*/
|
|
51
|
+
export async function getProviderConfig(providerId) {
|
|
52
|
+
// First try by API slug (for agent execution by name)
|
|
53
|
+
const bySlug = await convexQuery('directCall:getByApiSlug', { slug: providerId });
|
|
54
|
+
// Check for error response from Convex (not a real config)
|
|
55
|
+
const bySlugAny = bySlug;
|
|
56
|
+
if (bySlug && !(bySlugAny.status === 'error' || bySlugAny.errorMessage)) {
|
|
57
|
+
return bySlug;
|
|
58
|
+
}
|
|
59
|
+
// Only try direct provider ID lookup if it looks like a Convex ID (starts with valid prefix)
|
|
60
|
+
// Convex IDs typically look like: k97xxx...
|
|
61
|
+
if (providerId.match(/^[a-z][a-z0-9]{2,}/)) {
|
|
62
|
+
const byId = await convexQuery('directCall:getDirectCallConfig', { providerId });
|
|
63
|
+
const byIdAny = byId;
|
|
64
|
+
if (byId && !(byIdAny.status === 'error' || byIdAny.errorMessage)) {
|
|
65
|
+
return byId;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Fetch action configuration from Convex
|
|
72
|
+
*/
|
|
73
|
+
export async function getActionConfig(providerId, actionName) {
|
|
74
|
+
// First get the direct call config to get directCallId
|
|
75
|
+
const config = await getProviderConfig(providerId);
|
|
76
|
+
if (!config)
|
|
77
|
+
return null;
|
|
78
|
+
return convexQuery('directCall:getActionByName', {
|
|
79
|
+
directCallId: config._id,
|
|
80
|
+
name: actionName
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get user's current usage for rate limiting
|
|
85
|
+
*/
|
|
86
|
+
export async function getUserUsage(userId, providerId) {
|
|
87
|
+
const usage = await convexQuery('usage:getUserUsage', { userId, providerId });
|
|
88
|
+
return usage || { minute: 0, day: 0 };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build the full URL with path and query parameters
|
|
92
|
+
*/
|
|
93
|
+
export function buildUrl(baseUrl, path, params, paramDefs) {
|
|
94
|
+
let finalPath = path;
|
|
95
|
+
const queryParams = new URLSearchParams();
|
|
96
|
+
for (const paramDef of paramDefs) {
|
|
97
|
+
const value = params[paramDef.name] ?? paramDef.default;
|
|
98
|
+
if (value === undefined)
|
|
99
|
+
continue;
|
|
100
|
+
const stringValue = typeof value === 'object' ? JSON.stringify(value) : String(value);
|
|
101
|
+
if (paramDef.in === 'path') {
|
|
102
|
+
// Replace path parameter: /users/{id} -> /users/123
|
|
103
|
+
finalPath = finalPath.replace(`{${paramDef.name}}`, encodeURIComponent(stringValue));
|
|
104
|
+
}
|
|
105
|
+
else if (paramDef.in === 'query') {
|
|
106
|
+
queryParams.set(paramDef.name, stringValue);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Ensure baseUrl doesn't end with slash and path starts with slash
|
|
110
|
+
const cleanBase = baseUrl.replace(/\/$/, '');
|
|
111
|
+
const cleanPath = finalPath.startsWith('/') ? finalPath : `/${finalPath}`;
|
|
112
|
+
const queryString = queryParams.toString();
|
|
113
|
+
return queryString ? `${cleanBase}${cleanPath}?${queryString}` : `${cleanBase}${cleanPath}`;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Build request body from parameters
|
|
117
|
+
*/
|
|
118
|
+
export function buildBody(params, paramDefs) {
|
|
119
|
+
const bodyParams = {};
|
|
120
|
+
for (const paramDef of paramDefs) {
|
|
121
|
+
if (paramDef.in === 'body') {
|
|
122
|
+
const value = params[paramDef.name] ?? paramDef.default;
|
|
123
|
+
if (value !== undefined) {
|
|
124
|
+
bodyParams[paramDef.name] = value;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (Object.keys(bodyParams).length === 0) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
return JSON.stringify(bodyParams);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Build authentication headers based on auth type
|
|
135
|
+
*/
|
|
136
|
+
export function buildAuthHeaders(config, decryptedKey) {
|
|
137
|
+
const headers = {
|
|
138
|
+
'Content-Type': 'application/json',
|
|
139
|
+
'User-Agent': 'APIClaw/1.0',
|
|
140
|
+
};
|
|
141
|
+
const headerName = config.authHeader || 'Authorization';
|
|
142
|
+
const prefix = config.authPrefix || '';
|
|
143
|
+
switch (config.authType) {
|
|
144
|
+
case 'bearer':
|
|
145
|
+
headers[headerName] = prefix ? `${prefix} ${decryptedKey}` : `Bearer ${decryptedKey}`;
|
|
146
|
+
break;
|
|
147
|
+
case 'basic':
|
|
148
|
+
// Assume decryptedKey is "username:password"
|
|
149
|
+
const base64 = Buffer.from(decryptedKey).toString('base64');
|
|
150
|
+
headers[headerName] = `Basic ${base64}`;
|
|
151
|
+
break;
|
|
152
|
+
case 'api_key':
|
|
153
|
+
// Custom header with the key directly
|
|
154
|
+
headers[headerName] = prefix ? `${prefix} ${decryptedKey}` : decryptedKey;
|
|
155
|
+
break;
|
|
156
|
+
case 'none':
|
|
157
|
+
// No auth header needed
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
return headers;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Extract value from object using simple JSONPath-like expression
|
|
164
|
+
* Supports: $.field, $.field.nested, $.array[0], $.array[*].field
|
|
165
|
+
*/
|
|
166
|
+
export function extractJsonPath(data, path) {
|
|
167
|
+
if (!path.startsWith('$')) {
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
const parts = path.slice(1).split('.').filter(Boolean);
|
|
171
|
+
let current = data;
|
|
172
|
+
for (const part of parts) {
|
|
173
|
+
if (current === null || current === undefined) {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
// Handle array index: field[0] or field[*]
|
|
177
|
+
const arrayMatch = part.match(/^(\w+)\[(\d+|\*)\]$/);
|
|
178
|
+
if (arrayMatch) {
|
|
179
|
+
const [, field, index] = arrayMatch;
|
|
180
|
+
if (typeof current !== 'object')
|
|
181
|
+
return undefined;
|
|
182
|
+
current = current[field];
|
|
183
|
+
if (!Array.isArray(current))
|
|
184
|
+
return undefined;
|
|
185
|
+
if (index === '*') {
|
|
186
|
+
// Return all elements (will need further processing)
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
current = current[parseInt(index)];
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
if (typeof current !== 'object')
|
|
195
|
+
return undefined;
|
|
196
|
+
current = current[part];
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return current;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Map response data using configured response mappings
|
|
203
|
+
*/
|
|
204
|
+
export function mapResponse(data, responseMapping) {
|
|
205
|
+
if (!responseMapping || responseMapping.length === 0) {
|
|
206
|
+
// No mapping configured, return raw data
|
|
207
|
+
return { raw: data };
|
|
208
|
+
}
|
|
209
|
+
const result = {};
|
|
210
|
+
for (const mapping of responseMapping) {
|
|
211
|
+
const value = extractJsonPath(data, mapping.path);
|
|
212
|
+
if (value !== undefined) {
|
|
213
|
+
result[mapping.name] = value;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return result;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Log usage to Convex
|
|
220
|
+
*/
|
|
221
|
+
export async function logUsage(params) {
|
|
222
|
+
await convexMutation('usage:logUsage', params);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Main function: Execute a dynamically configured action
|
|
226
|
+
*/
|
|
227
|
+
export async function executeDynamicAction(providerId, actionName, params, userId, customerKey) {
|
|
228
|
+
const startTime = Date.now();
|
|
229
|
+
// 1. Get provider config
|
|
230
|
+
const config = await getProviderConfig(providerId);
|
|
231
|
+
if (!config) {
|
|
232
|
+
return {
|
|
233
|
+
success: false,
|
|
234
|
+
provider: providerId,
|
|
235
|
+
action: actionName,
|
|
236
|
+
error: 'Provider not found'
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
if (config.status !== 'live') {
|
|
240
|
+
return {
|
|
241
|
+
success: false,
|
|
242
|
+
provider: providerId,
|
|
243
|
+
action: actionName,
|
|
244
|
+
error: 'Provider not available (not live)'
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
// 2. Validate base URL (SSRF prevention)
|
|
248
|
+
const urlValidation = validateBaseUrl(config.baseUrl);
|
|
249
|
+
if (!urlValidation.valid) {
|
|
250
|
+
return {
|
|
251
|
+
success: false,
|
|
252
|
+
provider: providerId,
|
|
253
|
+
action: actionName,
|
|
254
|
+
error: `Invalid provider URL: ${urlValidation.error}`
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// 3. Check rate limits
|
|
258
|
+
const usage = await getUserUsage(userId, providerId);
|
|
259
|
+
if (usage.minute >= config.rateLimitPerUser) {
|
|
260
|
+
return {
|
|
261
|
+
success: false,
|
|
262
|
+
provider: providerId,
|
|
263
|
+
action: actionName,
|
|
264
|
+
error: 'Rate limit exceeded (per minute)'
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
if (usage.day >= config.rateLimitPerDay) {
|
|
268
|
+
return {
|
|
269
|
+
success: false,
|
|
270
|
+
provider: providerId,
|
|
271
|
+
action: actionName,
|
|
272
|
+
error: 'Rate limit exceeded (daily)'
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
// 4. Get action config
|
|
276
|
+
const action = await getActionConfig(providerId, actionName);
|
|
277
|
+
if (!action) {
|
|
278
|
+
return {
|
|
279
|
+
success: false,
|
|
280
|
+
provider: providerId,
|
|
281
|
+
action: actionName,
|
|
282
|
+
error: 'Action not found'
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
if (!action.enabled) {
|
|
286
|
+
return {
|
|
287
|
+
success: false,
|
|
288
|
+
provider: providerId,
|
|
289
|
+
action: actionName,
|
|
290
|
+
error: 'Action is disabled'
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
// 5. Validate required parameters
|
|
294
|
+
for (const paramDef of action.params) {
|
|
295
|
+
if (paramDef.required && params[paramDef.name] === undefined && paramDef.default === undefined) {
|
|
296
|
+
return {
|
|
297
|
+
success: false,
|
|
298
|
+
provider: providerId,
|
|
299
|
+
action: actionName,
|
|
300
|
+
error: `Missing required parameter: ${paramDef.name}`
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// 6. Resolve API key (customer key takes priority over master key)
|
|
305
|
+
let apiKey;
|
|
306
|
+
let usingCustomerKey = false;
|
|
307
|
+
// Check if provider requires customer keys (like CoAccept)
|
|
308
|
+
const requiresCustomerKey = config.requireCustomerKeys === true;
|
|
309
|
+
const allowsCustomerKey = config.allowCustomerKeys !== false; // Default true
|
|
310
|
+
if (customerKey && allowsCustomerKey) {
|
|
311
|
+
// Customer provided their own key - use it, skip usage tracking
|
|
312
|
+
apiKey = customerKey;
|
|
313
|
+
usingCustomerKey = true;
|
|
314
|
+
}
|
|
315
|
+
else if (requiresCustomerKey) {
|
|
316
|
+
// Provider requires customer key but none provided
|
|
317
|
+
return {
|
|
318
|
+
success: false,
|
|
319
|
+
provider: providerId,
|
|
320
|
+
action: actionName,
|
|
321
|
+
error: 'This provider requires your own API key. Pass it via customer_key parameter.'
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
else if (config.encryptedMasterKey) {
|
|
325
|
+
// Use provider's master key - track usage for billing
|
|
326
|
+
try {
|
|
327
|
+
apiKey = decryptKey(config.encryptedMasterKey);
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
console.error('Failed to decrypt provider key:', error);
|
|
331
|
+
return {
|
|
332
|
+
success: false,
|
|
333
|
+
provider: providerId,
|
|
334
|
+
action: actionName,
|
|
335
|
+
error: 'Provider configuration error'
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
// No key available
|
|
341
|
+
return {
|
|
342
|
+
success: false,
|
|
343
|
+
provider: providerId,
|
|
344
|
+
action: actionName,
|
|
345
|
+
error: 'No API key available. Provide your own key via customer_key parameter.'
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
// 7. Build request
|
|
349
|
+
const url = buildUrl(config.baseUrl, action.path, params, action.params);
|
|
350
|
+
const headers = buildAuthHeaders(config, apiKey);
|
|
351
|
+
const body = action.method === 'GET' ? undefined : buildBody(params, action.params);
|
|
352
|
+
// 8. Execute request
|
|
353
|
+
let response;
|
|
354
|
+
try {
|
|
355
|
+
response = await fetch(url, {
|
|
356
|
+
method: action.method,
|
|
357
|
+
headers,
|
|
358
|
+
body,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
const latencyMs = Date.now() - startTime;
|
|
363
|
+
// Only log usage when using master key (for billing)
|
|
364
|
+
if (!usingCustomerKey) {
|
|
365
|
+
await logUsage({
|
|
366
|
+
userId,
|
|
367
|
+
providerId,
|
|
368
|
+
actionName,
|
|
369
|
+
timestamp: Date.now(),
|
|
370
|
+
success: false,
|
|
371
|
+
latencyMs,
|
|
372
|
+
creditsUsed: 0
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
return {
|
|
376
|
+
success: false,
|
|
377
|
+
provider: providerId,
|
|
378
|
+
action: actionName,
|
|
379
|
+
error: `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
380
|
+
latencyMs
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
const latencyMs = Date.now() - startTime;
|
|
384
|
+
// 9. Parse response
|
|
385
|
+
let data;
|
|
386
|
+
try {
|
|
387
|
+
const contentType = response.headers.get('content-type');
|
|
388
|
+
if (contentType?.includes('application/json')) {
|
|
389
|
+
data = await response.json();
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
data = await response.text();
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
data = null;
|
|
397
|
+
}
|
|
398
|
+
// 10. Log usage (only when using master key for billing)
|
|
399
|
+
if (!usingCustomerKey) {
|
|
400
|
+
await logUsage({
|
|
401
|
+
userId,
|
|
402
|
+
providerId,
|
|
403
|
+
actionName,
|
|
404
|
+
timestamp: Date.now(),
|
|
405
|
+
success: response.ok,
|
|
406
|
+
latencyMs,
|
|
407
|
+
creditsUsed: response.ok ? config.pricePerRequest : 0
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
// 11. Handle error response
|
|
411
|
+
if (!response.ok) {
|
|
412
|
+
let errorMessage = `HTTP ${response.status}`;
|
|
413
|
+
if (data && typeof data === 'object') {
|
|
414
|
+
const errorObj = data;
|
|
415
|
+
errorMessage = errorObj.message ||
|
|
416
|
+
errorObj.error ||
|
|
417
|
+
errorObj.detail ||
|
|
418
|
+
errorMessage;
|
|
419
|
+
}
|
|
420
|
+
return {
|
|
421
|
+
success: false,
|
|
422
|
+
provider: providerId,
|
|
423
|
+
action: actionName,
|
|
424
|
+
error: errorMessage,
|
|
425
|
+
latencyMs
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
// 12. Map response and return
|
|
429
|
+
const mappedData = mapResponse(data, action.responseMapping);
|
|
430
|
+
return {
|
|
431
|
+
success: true,
|
|
432
|
+
provider: providerId,
|
|
433
|
+
action: actionName,
|
|
434
|
+
data: mappedData,
|
|
435
|
+
cost: config.pricePerRequest,
|
|
436
|
+
latencyMs
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* List available actions for a dynamic provider
|
|
441
|
+
*/
|
|
442
|
+
export async function listDynamicActions(providerId) {
|
|
443
|
+
const config = await getProviderConfig(providerId);
|
|
444
|
+
if (!config || config.status !== 'live') {
|
|
445
|
+
return [];
|
|
446
|
+
}
|
|
447
|
+
const actions = await convexQuery('directCall:getActions', {
|
|
448
|
+
directCallId: config._id
|
|
449
|
+
});
|
|
450
|
+
if (!actions)
|
|
451
|
+
return [];
|
|
452
|
+
return actions
|
|
453
|
+
.filter(a => a.enabled)
|
|
454
|
+
.map(a => a.name);
|
|
455
|
+
}
|
|
456
|
+
//# sourceMappingURL=execute-dynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-dynamic.js","sourceRoot":"","sources":["../src/execute-dynamic.ts"],"names":[],"mappings":"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"}
|
package/dist/execute.d.ts
CHANGED
|
@@ -10,10 +10,11 @@ interface ExecuteResult {
|
|
|
10
10
|
cost?: number;
|
|
11
11
|
}
|
|
12
12
|
export declare function getProviderActions(providerId: string): string[];
|
|
13
|
+
export declare function getProviderActionsAsync(providerId: string): Promise<string[]>;
|
|
13
14
|
export declare function getConnectedProviders(): {
|
|
14
15
|
provider: string;
|
|
15
16
|
actions: string[];
|
|
16
17
|
}[];
|
|
17
|
-
export declare function executeAPICall(providerId: string, action: string, params: Record<string, any
|
|
18
|
+
export declare function executeAPICall(providerId: string, action: string, params: Record<string, any>, userId?: string, customerKey?: string): Promise<ExecuteResult>;
|
|
18
19
|
export {};
|
|
19
20
|
//# sourceMappingURL=execute.d.ts.map
|
package/dist/execute.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAmtBD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/D;AAGD,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASnF;AAGD,wBAAgB,qBAAqB,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,CAKjF;AAGD,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAqFxB"}
|