@nordsym/apiclaw 1.0.0 → 1.1.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.
- package/AGENTS.md +74 -0
- package/HEARTBEAT.md +4 -0
- package/IDENTITY.md +22 -0
- package/README.md +197 -202
- package/SOUL.md +36 -0
- package/STATUS.md +237 -0
- package/TOOLS.md +36 -0
- package/USER.md +17 -0
- package/{backend/convex → convex}/_generated/api.d.ts +6 -6
- package/convex/credits.ts +211 -0
- package/convex/http.ts +490 -0
- package/convex/providers.ts +516 -0
- package/convex/purchases.ts +183 -0
- package/convex/schema.ts +180 -0
- package/convex.json +3 -0
- package/dist/credentials.d.ts +19 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +158 -0
- package/dist/credentials.js.map +1 -0
- package/dist/credits.d.ts +14 -11
- package/dist/credits.d.ts.map +1 -1
- package/dist/credits.js +151 -99
- package/dist/credits.js.map +1 -1
- package/dist/discovery.d.ts +7 -16
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +33 -40
- package/dist/discovery.js.map +1 -1
- package/dist/execute.d.ts +19 -0
- package/dist/execute.d.ts.map +1 -0
- package/dist/execute.js +285 -0
- package/dist/execute.js.map +1 -0
- package/dist/index.js +106 -30
- package/dist/index.js.map +1 -1
- package/dist/proxy.d.ts +6 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +19 -0
- package/dist/proxy.js.map +1 -0
- package/dist/registry/apis.json +95362 -202
- package/dist/registry/apis_expanded.json +100853 -0
- package/dist/stripe.d.ts +68 -0
- package/dist/stripe.d.ts.map +1 -0
- package/dist/stripe.js +196 -0
- package/dist/stripe.js.map +1 -0
- package/dist/test.d.ts +3 -2
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +105 -75
- package/dist/test.js.map +1 -1
- package/dist/types.d.ts +0 -28
- package/dist/types.d.ts.map +1 -1
- package/dist/webhook.d.ts +2 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +90 -0
- package/dist/webhook.js.map +1 -0
- package/landing/DESIGN.md +343 -0
- package/landing/package-lock.json +1190 -40
- package/landing/package.json +5 -2
- package/landing/public/android-chrome-192x192.png +0 -0
- package/landing/public/android-chrome-512x512.png +0 -0
- package/landing/public/apple-touch-icon.png +0 -0
- package/landing/public/demo.gif +0 -0
- package/landing/public/demo.mp4 +0 -0
- package/landing/public/favicon-16x16.png +0 -0
- package/landing/public/favicon-32x32.png +0 -0
- package/landing/public/favicon.ico +0 -0
- package/landing/public/favicon.svg +3 -0
- package/landing/public/icon.svg +47 -0
- package/landing/public/logo-mono.svg +37 -0
- package/landing/public/logo-simple.svg +45 -0
- package/landing/public/logo.svg +84 -0
- package/landing/public/og-image.png +0 -0
- package/landing/public/og-template.html +184 -0
- package/landing/public/site.webmanifest +31 -0
- package/landing/scripts/generate-assets.js +284 -0
- package/landing/scripts/generate-pngs.js +48 -0
- package/landing/scripts/generate-stats.js +42 -0
- package/landing/src/app/admin/page.tsx +348 -0
- package/landing/src/app/api/auth/magic-link/route.ts +73 -0
- package/landing/src/app/api/auth/session/route.ts +38 -0
- package/landing/src/app/api/auth/verify/route.ts +43 -0
- package/landing/src/app/api/og/route.tsx +74 -0
- package/landing/src/app/globals.css +439 -100
- package/landing/src/app/layout.tsx +37 -9
- package/landing/src/app/page.tsx +640 -552
- package/landing/src/app/providers/dashboard/login/page.tsx +176 -0
- package/landing/src/app/providers/dashboard/page.tsx +589 -0
- package/landing/src/app/providers/dashboard/verify/page.tsx +106 -0
- package/landing/src/app/providers/layout.tsx +14 -0
- package/landing/src/app/providers/page.tsx +402 -0
- package/landing/src/app/providers/register/page.tsx +670 -0
- package/landing/src/components/ProviderDashboard.tsx +794 -0
- package/landing/src/hooks/useDashboardData.ts +99 -0
- package/landing/src/lib/apis.json +116054 -0
- package/landing/src/lib/convex-client.ts +106 -0
- package/landing/src/lib/mock-data.ts +285 -0
- package/landing/src/lib/stats.json +6 -0
- package/landing/tailwind.config.ts +12 -11
- package/landing/tsconfig.tsbuildinfo +1 -0
- package/package.json +21 -20
- package/scripts/SYMBOT-FIX.md +238 -0
- package/scripts/demo-simulation.py +177 -0
- package/scripts/expand-more.py +502 -0
- package/scripts/expand-registry.py +434 -0
- package/scripts/history-sanitizer.ts +272 -0
- package/scripts/mass-scrape.py +1308 -0
- package/scripts/sync-and-deploy.sh +36 -0
- package/src/credentials.ts +177 -0
- package/src/credits.ts +190 -122
- package/src/discovery.ts +45 -58
- package/src/execute.ts +350 -0
- package/src/index.ts +113 -31
- package/src/proxy.ts +24 -0
- package/src/registry/apis.json +95362 -202
- package/src/registry/apis_expanded.json +100853 -0
- package/src/stripe.ts +243 -0
- package/src/test.ts +127 -89
- package/src/types.ts +0 -34
- package/src/webhook.ts +107 -0
- package/.github/ISSUE_TEMPLATE/add-api.yml +0 -123
- package/BRIEFING.md +0 -30
- package/backend/convex/apiKeys.ts +0 -75
- package/backend/convex/purchases.ts +0 -74
- package/backend/convex/schema.ts +0 -45
- package/backend/convex/transactions.ts +0 -57
- package/backend/convex/users.ts +0 -94
- package/backend/package-lock.json +0 -521
- package/backend/package.json +0 -15
- package/dist/registry/parse_apis.py +0 -146
- package/dist/revenuecat.d.ts +0 -61
- package/dist/revenuecat.d.ts.map +0 -1
- package/dist/revenuecat.js +0 -166
- package/dist/revenuecat.js.map +0 -1
- package/dist/webhooks/revenuecat.d.ts +0 -48
- package/dist/webhooks/revenuecat.d.ts.map +0 -1
- package/dist/webhooks/revenuecat.js +0 -119
- package/dist/webhooks/revenuecat.js.map +0 -1
- package/docs/revenuecat-setup.md +0 -89
- package/landing/src/app/api/keys/route.ts +0 -71
- package/landing/src/app/api/log/route.ts +0 -37
- package/landing/src/app/api/stats/route.ts +0 -37
- package/landing/src/app/page.tsx.bak +0 -567
- package/landing/src/components/AddKeyModal.tsx +0 -159
- package/newsletter-template.html +0 -71
- package/outreach/OUTREACH-SYSTEM.md +0 -211
- package/outreach/email-template.html +0 -179
- package/outreach/targets.md +0 -133
- package/src/registry/parse_apis.py +0 -146
- package/src/revenuecat.ts +0 -239
- package/src/webhooks/revenuecat.ts +0 -187
- /package/{backend/convex → convex}/README.md +0 -0
- /package/{backend/convex → convex}/_generated/api.js +0 -0
- /package/{backend/convex → convex}/_generated/dataModel.d.ts +0 -0
- /package/{backend/convex → convex}/_generated/server.d.ts +0 -0
- /package/{backend/convex → convex}/_generated/server.js +0 -0
- /package/{backend/convex → convex}/tsconfig.json +0 -0
package/dist/credits.js
CHANGED
|
@@ -1,41 +1,59 @@
|
|
|
1
|
-
// Credit system for
|
|
2
|
-
//
|
|
1
|
+
// Credit system for APIClaw
|
|
2
|
+
// Supports both in-memory (dev) and Convex (production) backends
|
|
3
|
+
import { getCredentials, hasRealCredentials } from './credentials.js';
|
|
3
4
|
import { randomUUID } from 'crypto';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
'
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
'
|
|
21
|
-
|
|
22
|
-
api_key: `BSA${randomUUID().replace(/-/g, '').toUpperCase().slice(0, 20)}`
|
|
23
|
-
}),
|
|
24
|
-
'openrouter': () => ({
|
|
25
|
-
type: 'bearer',
|
|
26
|
-
api_key: `sk-or-v1-${randomUUID().replace(/-/g, '')}`
|
|
27
|
-
}),
|
|
28
|
-
'elevenlabs': () => ({
|
|
29
|
-
type: 'api_key',
|
|
30
|
-
api_key: `${randomUUID().replace(/-/g, '')}`
|
|
31
|
-
})
|
|
5
|
+
// Configuration
|
|
6
|
+
const BACKEND = process.env.APICLAW_BACKEND === 'convex' ? 'convex' : 'memory';
|
|
7
|
+
const CONVEX_URL = process.env.CONVEX_URL || '';
|
|
8
|
+
const CONVEX_DEPLOY_KEY = process.env.CONVEX_DEPLOY_KEY || '';
|
|
9
|
+
// In-memory stores (for local development)
|
|
10
|
+
const agentCreditsStore = new Map();
|
|
11
|
+
const purchasesStore = new Map();
|
|
12
|
+
const usageStore = new Map();
|
|
13
|
+
// Provider that have real credentials available
|
|
14
|
+
const REAL_CREDENTIAL_PROVIDERS = ['46elks', 'twilio'];
|
|
15
|
+
// Credits per dollar by provider
|
|
16
|
+
const CREDITS_PER_DOLLAR = {
|
|
17
|
+
'46elks': 30, // ~30 SMS per dollar
|
|
18
|
+
'twilio': 25, // ~25 SMS per dollar
|
|
19
|
+
'resend': 1000, // ~1000 emails per dollar
|
|
20
|
+
'brave_search': 200, // ~200 searches per dollar
|
|
21
|
+
'openrouter': 100, // ~100k tokens per dollar (varies by model)
|
|
22
|
+
'elevenlabs': 3333 // ~3333 characters per dollar
|
|
32
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* Calculate credits based on provider pricing
|
|
26
|
+
*/
|
|
27
|
+
function calculateCredits(providerId, amountUsd) {
|
|
28
|
+
return Math.floor(amountUsd * (CREDITS_PER_DOLLAR[providerId] || 100));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Generate credentials for a provider
|
|
32
|
+
* Returns real credentials for supported providers, mock for others
|
|
33
|
+
*/
|
|
34
|
+
function generateCredentials(providerId) {
|
|
35
|
+
// Try to get real credentials first
|
|
36
|
+
const realCreds = getCredentials(providerId);
|
|
37
|
+
if (realCreds && hasRealCredentials(providerId)) {
|
|
38
|
+
console.log(`[APIClaw] Using REAL credentials for ${providerId}`);
|
|
39
|
+
return realCreds;
|
|
40
|
+
}
|
|
41
|
+
// Fall back to mock credentials
|
|
42
|
+
console.log(`[APIClaw] Using MOCK credentials for ${providerId}`);
|
|
43
|
+
return realCreds || {
|
|
44
|
+
type: 'api_key',
|
|
45
|
+
api_key: `mock_${providerId}_${randomUUID().slice(0, 8)}`
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// =============================================================================
|
|
49
|
+
// In-Memory Backend (for development)
|
|
50
|
+
// =============================================================================
|
|
33
51
|
/**
|
|
34
52
|
* Get or create agent credits account
|
|
35
53
|
*/
|
|
36
54
|
export function getAgentCredits(agentId) {
|
|
37
|
-
if (!
|
|
38
|
-
|
|
55
|
+
if (!agentCreditsStore.has(agentId)) {
|
|
56
|
+
agentCreditsStore.set(agentId, {
|
|
39
57
|
agent_id: agentId,
|
|
40
58
|
balance_usd: 0,
|
|
41
59
|
currency: 'USD',
|
|
@@ -43,7 +61,7 @@ export function getAgentCredits(agentId) {
|
|
|
43
61
|
updated_at: new Date().toISOString()
|
|
44
62
|
});
|
|
45
63
|
}
|
|
46
|
-
return
|
|
64
|
+
return agentCreditsStore.get(agentId);
|
|
47
65
|
}
|
|
48
66
|
/**
|
|
49
67
|
* Add credits to an agent's account
|
|
@@ -56,7 +74,7 @@ export function addCredits(agentId, amountUsd) {
|
|
|
56
74
|
}
|
|
57
75
|
/**
|
|
58
76
|
* Purchase API access
|
|
59
|
-
* Returns credentials
|
|
77
|
+
* Returns real credentials for 46elks and Twilio
|
|
60
78
|
*/
|
|
61
79
|
export function purchaseAPIAccess(agentId, providerId, amountUsd) {
|
|
62
80
|
const credits = getAgentCredits(agentId);
|
|
@@ -67,16 +85,19 @@ export function purchaseAPIAccess(agentId, providerId, amountUsd) {
|
|
|
67
85
|
error: `Insufficient balance. Have $${credits.balance_usd.toFixed(2)}, need $${amountUsd.toFixed(2)}`
|
|
68
86
|
};
|
|
69
87
|
}
|
|
70
|
-
// Check if provider
|
|
71
|
-
|
|
88
|
+
// Check if provider is supported
|
|
89
|
+
const providerCredentials = getCredentials(providerId);
|
|
90
|
+
if (!providerCredentials) {
|
|
72
91
|
return {
|
|
73
92
|
success: false,
|
|
74
|
-
error: `Unknown provider: ${providerId}`
|
|
93
|
+
error: `Unknown provider: ${providerId}. Supported: ${Object.keys(CREDITS_PER_DOLLAR).join(', ')}`
|
|
75
94
|
};
|
|
76
95
|
}
|
|
77
96
|
// Deduct credits
|
|
78
97
|
credits.balance_usd -= amountUsd;
|
|
79
98
|
credits.updated_at = new Date().toISOString();
|
|
99
|
+
// Generate credentials (real for 46elks/twilio, mock for others)
|
|
100
|
+
const credentials = generateCredentials(providerId);
|
|
80
101
|
// Create purchase record
|
|
81
102
|
const purchaseId = `pur_${randomUUID().slice(0, 12)}`;
|
|
82
103
|
const purchase = {
|
|
@@ -86,12 +107,12 @@ export function purchaseAPIAccess(agentId, providerId, amountUsd) {
|
|
|
86
107
|
amount_usd: amountUsd,
|
|
87
108
|
credits_purchased: calculateCredits(providerId, amountUsd),
|
|
88
109
|
status: 'active',
|
|
89
|
-
credentials
|
|
110
|
+
credentials,
|
|
90
111
|
created_at: new Date().toISOString()
|
|
91
112
|
};
|
|
92
|
-
|
|
113
|
+
purchasesStore.set(purchaseId, purchase);
|
|
93
114
|
// Initialize usage tracking
|
|
94
|
-
|
|
115
|
+
usageStore.set(purchaseId, {
|
|
95
116
|
purchase_id: purchaseId,
|
|
96
117
|
provider_id: providerId,
|
|
97
118
|
units_used: 0,
|
|
@@ -99,39 +120,28 @@ export function purchaseAPIAccess(agentId, providerId, amountUsd) {
|
|
|
99
120
|
cost_incurred_usd: 0,
|
|
100
121
|
last_used_at: new Date().toISOString()
|
|
101
122
|
});
|
|
123
|
+
// Flag if using real credentials
|
|
124
|
+
const isRealCredentials = hasRealCredentials(providerId);
|
|
125
|
+
console.log(`[APIClaw] Purchase complete: ${providerId} ($${amountUsd}) - Real credentials: ${isRealCredentials}`);
|
|
102
126
|
return { success: true, purchase };
|
|
103
127
|
}
|
|
104
|
-
/**
|
|
105
|
-
* Calculate credits based on provider pricing
|
|
106
|
-
*/
|
|
107
|
-
function calculateCredits(providerId, amountUsd) {
|
|
108
|
-
// Simplified credit calculation per provider
|
|
109
|
-
const creditsPerDollar = {
|
|
110
|
-
'46elks': 30, // ~30 SMS per dollar
|
|
111
|
-
'resend': 1000, // ~1000 emails per dollar
|
|
112
|
-
'brave_search': 200, // ~200 searches per dollar
|
|
113
|
-
'openrouter': 100, // ~100k tokens per dollar (varies by model)
|
|
114
|
-
'elevenlabs': 3333 // ~3333 characters per dollar
|
|
115
|
-
};
|
|
116
|
-
return Math.floor(amountUsd * (creditsPerDollar[providerId] || 100));
|
|
117
|
-
}
|
|
118
128
|
/**
|
|
119
129
|
* Get all purchases for an agent
|
|
120
130
|
*/
|
|
121
131
|
export function getAgentPurchases(agentId) {
|
|
122
|
-
return Array.from(
|
|
132
|
+
return Array.from(purchasesStore.values()).filter(p => p.agent_id === agentId);
|
|
123
133
|
}
|
|
124
134
|
/**
|
|
125
135
|
* Get usage for a purchase
|
|
126
136
|
*/
|
|
127
137
|
export function getUsage(purchaseId) {
|
|
128
|
-
return
|
|
138
|
+
return usageStore.get(purchaseId) || null;
|
|
129
139
|
}
|
|
130
140
|
/**
|
|
131
141
|
* Record usage (call this when API is used)
|
|
132
142
|
*/
|
|
133
143
|
export function recordUsage(purchaseId, unitsUsed, costUsd) {
|
|
134
|
-
const record =
|
|
144
|
+
const record = usageStore.get(purchaseId);
|
|
135
145
|
if (!record)
|
|
136
146
|
return null;
|
|
137
147
|
record.units_used += unitsUsed;
|
|
@@ -140,7 +150,7 @@ export function recordUsage(purchaseId, unitsUsed, costUsd) {
|
|
|
140
150
|
record.last_used_at = new Date().toISOString();
|
|
141
151
|
// Update purchase status if depleted
|
|
142
152
|
if (record.units_remaining === 0) {
|
|
143
|
-
const purchase =
|
|
153
|
+
const purchase = purchasesStore.get(purchaseId);
|
|
144
154
|
if (purchase)
|
|
145
155
|
purchase.status = 'exhausted';
|
|
146
156
|
}
|
|
@@ -154,56 +164,98 @@ export function getBalanceSummary(agentId) {
|
|
|
154
164
|
const agentPurchases = getAgentPurchases(agentId);
|
|
155
165
|
const activePurchases = agentPurchases.filter(p => p.status === 'active');
|
|
156
166
|
const totalSpent = agentPurchases.reduce((sum, p) => sum + p.amount_usd, 0);
|
|
167
|
+
// List providers with real credentials
|
|
168
|
+
const realCredentialProviders = REAL_CREDENTIAL_PROVIDERS.filter(p => hasRealCredentials(p));
|
|
157
169
|
return {
|
|
158
170
|
credits,
|
|
159
171
|
active_purchases: activePurchases,
|
|
160
|
-
total_spent_usd: totalSpent
|
|
172
|
+
total_spent_usd: totalSpent,
|
|
173
|
+
real_credentials_available: realCredentialProviders
|
|
161
174
|
};
|
|
162
175
|
}
|
|
163
176
|
/**
|
|
164
|
-
*
|
|
165
|
-
* Pro users: 2% fee
|
|
166
|
-
* Free users: 5% fee
|
|
177
|
+
* Check which providers have real credentials
|
|
167
178
|
*/
|
|
168
|
-
export
|
|
169
|
-
|
|
170
|
-
const feePercentage = isPro ? 0.02 : 0.05;
|
|
171
|
-
const feeAmount = Math.round(amountUsd * feePercentage * 100) / 100;
|
|
172
|
-
return {
|
|
173
|
-
amount_usd: amountUsd,
|
|
174
|
-
fee_percentage: feePercentage,
|
|
175
|
-
fee_amount_usd: feeAmount,
|
|
176
|
-
net_amount_usd: Math.round((amountUsd - feeAmount) * 100) / 100,
|
|
177
|
-
tier: isPro ? 'pro' : 'free',
|
|
178
|
-
};
|
|
179
|
+
export function getProvidersWithRealCredentials() {
|
|
180
|
+
return REAL_CREDENTIAL_PROVIDERS.filter(p => hasRealCredentials(p));
|
|
179
181
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
export async function purchaseAPIAccessWithFees(agentId, userId, providerId, amountUsd) {
|
|
184
|
-
// Calculate fees first
|
|
185
|
-
const fee = await calculateTransactionFee(userId, amountUsd);
|
|
186
|
-
// Total amount user pays = API cost + platform fee
|
|
187
|
-
const totalCost = amountUsd + fee.fee_amount_usd;
|
|
188
|
-
const credits = getAgentCredits(agentId);
|
|
189
|
-
if (credits.balance_usd < totalCost) {
|
|
190
|
-
return {
|
|
191
|
-
success: false,
|
|
192
|
-
error: `Insufficient balance. Have $${credits.balance_usd.toFixed(2)}, need $${totalCost.toFixed(2)} (includes ${fee.tier === 'pro' ? '2%' : '5%'} platform fee)`
|
|
193
|
-
};
|
|
182
|
+
async function convexQuery(path, args) {
|
|
183
|
+
if (!CONVEX_URL) {
|
|
184
|
+
return { error: 'Convex URL not configured' };
|
|
194
185
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
};
|
|
186
|
+
try {
|
|
187
|
+
const response = await fetch(`${CONVEX_URL}/api/query`, {
|
|
188
|
+
method: 'POST',
|
|
189
|
+
headers: {
|
|
190
|
+
'Content-Type': 'application/json',
|
|
191
|
+
...(CONVEX_DEPLOY_KEY ? { 'Authorization': `Convex ${CONVEX_DEPLOY_KEY}` } : {}),
|
|
192
|
+
},
|
|
193
|
+
body: JSON.stringify({ path, args }),
|
|
194
|
+
});
|
|
195
|
+
const result = await response.json();
|
|
196
|
+
return { data: result };
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
return { error: error instanceof Error ? error.message : 'Convex query failed' };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async function convexMutation(path, args) {
|
|
203
|
+
if (!CONVEX_URL) {
|
|
204
|
+
return { error: 'Convex URL not configured' };
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
const response = await fetch(`${CONVEX_URL}/api/mutation`, {
|
|
208
|
+
method: 'POST',
|
|
209
|
+
headers: {
|
|
210
|
+
'Content-Type': 'application/json',
|
|
211
|
+
...(CONVEX_DEPLOY_KEY ? { 'Authorization': `Convex ${CONVEX_DEPLOY_KEY}` } : {}),
|
|
212
|
+
},
|
|
213
|
+
body: JSON.stringify({ path, args }),
|
|
214
|
+
});
|
|
215
|
+
const result = await response.json();
|
|
216
|
+
return { data: result };
|
|
206
217
|
}
|
|
207
|
-
|
|
218
|
+
catch (error) {
|
|
219
|
+
return { error: error instanceof Error ? error.message : 'Convex mutation failed' };
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Convex-backed versions (async)
|
|
223
|
+
export async function getAgentCreditsAsync(agentId) {
|
|
224
|
+
if (BACKEND === 'memory') {
|
|
225
|
+
return getAgentCredits(agentId);
|
|
226
|
+
}
|
|
227
|
+
const result = await convexQuery('credits:getAgentCredits', { agentId });
|
|
228
|
+
return result.data || null;
|
|
229
|
+
}
|
|
230
|
+
export async function addCreditsAsync(agentId, amountUsd) {
|
|
231
|
+
if (BACKEND === 'memory') {
|
|
232
|
+
return addCredits(agentId, amountUsd);
|
|
233
|
+
}
|
|
234
|
+
const result = await convexMutation('credits:addCredits', { agentId, amountUsd });
|
|
235
|
+
return result.data || null;
|
|
236
|
+
}
|
|
237
|
+
export async function purchaseAPIAccessAsync(agentId, providerId, amountUsd) {
|
|
238
|
+
if (BACKEND === 'memory') {
|
|
239
|
+
return purchaseAPIAccess(agentId, providerId, amountUsd);
|
|
240
|
+
}
|
|
241
|
+
// Generate credentials server-side
|
|
242
|
+
const credentials = generateCredentials(providerId);
|
|
243
|
+
const result = await convexMutation('purchases:purchaseAccess', {
|
|
244
|
+
agentId,
|
|
245
|
+
providerId,
|
|
246
|
+
amountUsd,
|
|
247
|
+
credentials,
|
|
248
|
+
});
|
|
249
|
+
if (result.error) {
|
|
250
|
+
return { success: false, error: result.error };
|
|
251
|
+
}
|
|
252
|
+
return { success: true, purchase: result.data };
|
|
253
|
+
}
|
|
254
|
+
// Export backend info
|
|
255
|
+
export function getBackendInfo() {
|
|
256
|
+
return {
|
|
257
|
+
type: BACKEND,
|
|
258
|
+
convexUrl: BACKEND === 'convex' ? CONVEX_URL : null,
|
|
259
|
+
};
|
|
208
260
|
}
|
|
209
261
|
//# sourceMappingURL=credits.js.map
|
package/dist/credits.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credits.js","sourceRoot":"","sources":["../src/credits.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"credits.js","sourceRoot":"","sources":["../src/credits.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.d.ts
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export interface SimpleSearchResult {
|
|
3
|
-
api: SimpleAPI;
|
|
4
|
-
relevance_score: number;
|
|
5
|
-
match_reasons: string[];
|
|
6
|
-
}
|
|
1
|
+
import { APIProvider, SearchResult } from './types.js';
|
|
7
2
|
/**
|
|
8
3
|
* Discover APIs based on a natural language query
|
|
9
4
|
* MVP uses keyword matching; production would use embeddings
|
|
@@ -11,17 +6,17 @@ export interface SimpleSearchResult {
|
|
|
11
6
|
export declare function discoverAPIs(query: string, options?: {
|
|
12
7
|
category?: string;
|
|
13
8
|
maxResults?: number;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}):
|
|
9
|
+
maxPrice?: number;
|
|
10
|
+
region?: string;
|
|
11
|
+
}): SearchResult[];
|
|
17
12
|
/**
|
|
18
13
|
* Get detailed information about a specific API
|
|
19
14
|
*/
|
|
20
|
-
export declare function getAPIDetails(apiId: string):
|
|
15
|
+
export declare function getAPIDetails(apiId: string): APIProvider | null;
|
|
21
16
|
/**
|
|
22
17
|
* List all APIs in a category
|
|
23
18
|
*/
|
|
24
|
-
export declare function listByCategory(category: string):
|
|
19
|
+
export declare function listByCategory(category: string): APIProvider[];
|
|
25
20
|
/**
|
|
26
21
|
* Get all available categories
|
|
27
22
|
*/
|
|
@@ -29,9 +24,5 @@ export declare function getCategories(): string[];
|
|
|
29
24
|
/**
|
|
30
25
|
* Get all APIs
|
|
31
26
|
*/
|
|
32
|
-
export declare function getAllAPIs():
|
|
33
|
-
/**
|
|
34
|
-
* Get API count
|
|
35
|
-
*/
|
|
36
|
-
export declare function getAPICount(): number;
|
|
27
|
+
export declare function getAllAPIs(): APIProvider[];
|
|
37
28
|
//# sourceMappingURL=discovery.d.ts.map
|
package/dist/discovery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAavD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,GACL,YAAY,EAAE,CA6EhB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAE/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAE9D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,WAAW,EAAE,CAE1C"}
|
package/dist/discovery.js
CHANGED
|
@@ -5,68 +5,67 @@ import { fileURLToPath } from 'url';
|
|
|
5
5
|
import { dirname, join } from 'path';
|
|
6
6
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
7
|
const __dirname = dirname(__filename);
|
|
8
|
-
// Load APIs from registry
|
|
9
8
|
const apisData = JSON.parse(readFileSync(join(__dirname, 'registry', 'apis.json'), 'utf-8'));
|
|
10
9
|
const apis = apisData.apis;
|
|
11
|
-
console.error(`[APIvault] Loaded ${apis.length} APIs from registry`);
|
|
12
10
|
/**
|
|
13
11
|
* Discover APIs based on a natural language query
|
|
14
12
|
* MVP uses keyword matching; production would use embeddings
|
|
15
13
|
*/
|
|
16
14
|
export function discoverAPIs(query, options = {}) {
|
|
17
|
-
const { category, maxResults =
|
|
15
|
+
const { category, maxResults = 5, maxPrice, region } = options;
|
|
18
16
|
const queryLower = query.toLowerCase();
|
|
19
17
|
const queryWords = queryLower.split(/\s+/).filter(w => w.length > 2);
|
|
20
18
|
const results = [];
|
|
21
19
|
for (const api of apis) {
|
|
22
|
-
// Category filter
|
|
23
|
-
if (category && api.category
|
|
20
|
+
// Category filter
|
|
21
|
+
if (category && api.category !== category)
|
|
24
22
|
continue;
|
|
25
|
-
//
|
|
26
|
-
if (
|
|
27
|
-
continue;
|
|
28
|
-
// HTTPS filter
|
|
29
|
-
if (httpsOnly && !api.https)
|
|
23
|
+
// Region filter
|
|
24
|
+
if (region && !api.regions.includes(region) && !api.regions.includes('global'))
|
|
30
25
|
continue;
|
|
31
26
|
// Calculate relevance score
|
|
32
27
|
let score = 0;
|
|
33
28
|
const matchReasons = [];
|
|
29
|
+
// Check keywords
|
|
34
30
|
for (const word of queryWords) {
|
|
35
|
-
//
|
|
36
|
-
if (api.
|
|
37
|
-
score +=
|
|
38
|
-
matchReasons.push(`
|
|
31
|
+
// Direct keyword match
|
|
32
|
+
if (api.keywords.some(k => k.includes(word))) {
|
|
33
|
+
score += 10;
|
|
34
|
+
matchReasons.push(`keyword: ${word}`);
|
|
39
35
|
}
|
|
40
|
-
//
|
|
41
|
-
if (api.
|
|
36
|
+
// Capability match
|
|
37
|
+
if (api.capabilities.some(c => c.includes(word))) {
|
|
42
38
|
score += 15;
|
|
43
|
-
matchReasons.push(`
|
|
39
|
+
matchReasons.push(`capability: ${word}`);
|
|
40
|
+
}
|
|
41
|
+
// Name match
|
|
42
|
+
if (api.name.toLowerCase().includes(word)) {
|
|
43
|
+
score += 20;
|
|
44
|
+
matchReasons.push(`name: ${word}`);
|
|
44
45
|
}
|
|
45
46
|
// Description match
|
|
46
47
|
if (api.description.toLowerCase().includes(word)) {
|
|
47
|
-
score +=
|
|
48
|
+
score += 5;
|
|
48
49
|
matchReasons.push(`description: ${word}`);
|
|
49
50
|
}
|
|
50
|
-
//
|
|
51
|
-
if (api.
|
|
51
|
+
// Feature match
|
|
52
|
+
if (api.features.some(f => f.toLowerCase().includes(word))) {
|
|
52
53
|
score += 8;
|
|
53
|
-
matchReasons.push(`
|
|
54
|
+
matchReasons.push(`feature: ${word}`);
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
score += 1;
|
|
65
|
-
}
|
|
57
|
+
// Boost for high success rate
|
|
58
|
+
score += api.agent_success_rate * 10;
|
|
59
|
+
// Boost for low latency
|
|
60
|
+
score += Math.max(0, (1000 - api.avg_latency_ms) / 100);
|
|
61
|
+
// Boost for free tier
|
|
62
|
+
if (api.pricing.free_tier) {
|
|
63
|
+
score += 5;
|
|
64
|
+
matchReasons.push('has free tier');
|
|
66
65
|
}
|
|
67
66
|
if (score > 0) {
|
|
68
67
|
results.push({
|
|
69
|
-
api,
|
|
68
|
+
provider: api,
|
|
70
69
|
relevance_score: Math.round(score * 100) / 100,
|
|
71
70
|
match_reasons: [...new Set(matchReasons)]
|
|
72
71
|
});
|
|
@@ -86,13 +85,13 @@ export function getAPIDetails(apiId) {
|
|
|
86
85
|
* List all APIs in a category
|
|
87
86
|
*/
|
|
88
87
|
export function listByCategory(category) {
|
|
89
|
-
return apis.filter(api => api.category
|
|
88
|
+
return apis.filter(api => api.category === category);
|
|
90
89
|
}
|
|
91
90
|
/**
|
|
92
91
|
* Get all available categories
|
|
93
92
|
*/
|
|
94
93
|
export function getCategories() {
|
|
95
|
-
return [...new Set(apis.map(api => api.category))]
|
|
94
|
+
return [...new Set(apis.map(api => api.category))];
|
|
96
95
|
}
|
|
97
96
|
/**
|
|
98
97
|
* Get all APIs
|
|
@@ -100,10 +99,4 @@ export function getCategories() {
|
|
|
100
99
|
export function getAllAPIs() {
|
|
101
100
|
return apis;
|
|
102
101
|
}
|
|
103
|
-
/**
|
|
104
|
-
* Get API count
|
|
105
|
-
*/
|
|
106
|
-
export function getAPICount() {
|
|
107
|
-
return apis.length;
|
|
108
|
-
}
|
|
109
102
|
//# sourceMappingURL=discovery.js.map
|
package/dist/discovery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,8DAA8D;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* APIClaw Instant Connect - Execute API calls through connected providers
|
|
3
|
+
*/
|
|
4
|
+
interface ExecuteResult {
|
|
5
|
+
success: boolean;
|
|
6
|
+
provider: string;
|
|
7
|
+
action: string;
|
|
8
|
+
data?: unknown;
|
|
9
|
+
error?: string;
|
|
10
|
+
cost?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function getProviderActions(providerId: string): string[];
|
|
13
|
+
export declare function getConnectedProviders(): {
|
|
14
|
+
provider: string;
|
|
15
|
+
actions: string[];
|
|
16
|
+
}[];
|
|
17
|
+
export declare function executeAPICall(providerId: string, action: string, params: Record<string, any>): Promise<ExecuteResult>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,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;AA8PD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/D;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,GAC1B,OAAO,CAAC,aAAa,CAAC,CAgExB"}
|