@nordsym/apiclaw 1.8.7 → 1.8.9

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.
Files changed (156) hide show
  1. package/README.md +58 -30
  2. package/convex/adminActivate.d.ts +3 -0
  3. package/convex/adminActivate.d.ts.map +1 -1
  4. package/convex/adminActivate.js +46 -0
  5. package/convex/adminActivate.js.map +1 -1
  6. package/convex/adminActivate.ts +1 -2
  7. package/convex/adminStats.d.ts +9 -0
  8. package/convex/adminStats.d.ts.map +1 -1
  9. package/convex/adminStats.js +282 -0
  10. package/convex/adminStats.js.map +1 -1
  11. package/convex/adminStats.ts +5 -3
  12. package/convex/agents.d.ts +84 -0
  13. package/convex/agents.js +809 -0
  14. package/convex/analytics.d.ts +5 -0
  15. package/convex/analytics.js +167 -0
  16. package/convex/apiKeys.d.ts +6 -0
  17. package/convex/apiKeys.d.ts.map +1 -0
  18. package/convex/apiKeys.js +186 -0
  19. package/convex/apiKeys.js.map +1 -0
  20. package/convex/backfillAnalytics.d.ts +2 -0
  21. package/convex/backfillAnalytics.js +20 -0
  22. package/convex/backfillSearchLogs.d.ts +2 -0
  23. package/convex/backfillSearchLogs.js +29 -0
  24. package/convex/billing.d.ts +88 -0
  25. package/convex/billing.d.ts.map +1 -1
  26. package/convex/billing.js +643 -0
  27. package/convex/billing.js.map +1 -1
  28. package/convex/billing.ts +2 -14
  29. package/convex/capabilities.d.ts +9 -0
  30. package/convex/capabilities.js +145 -0
  31. package/convex/chains.d.ts +68 -0
  32. package/convex/chains.js +1105 -0
  33. package/convex/credits.d.ts +25 -0
  34. package/convex/credits.js +186 -0
  35. package/convex/crons.d.ts +3 -0
  36. package/convex/crons.js +17 -0
  37. package/convex/debugFilestackLogs.d.ts +2 -0
  38. package/convex/debugFilestackLogs.js +17 -0
  39. package/convex/debugGetToken.d.ts +2 -0
  40. package/convex/debugGetToken.js +18 -0
  41. package/convex/directCall.d.ts +72 -0
  42. package/convex/directCall.d.ts.map +1 -1
  43. package/convex/directCall.js +663 -0
  44. package/convex/directCall.js.map +1 -1
  45. package/convex/earnProgress.d.ts +58 -0
  46. package/convex/earnProgress.js +649 -0
  47. package/convex/email.d.ts +14 -0
  48. package/convex/email.js +300 -0
  49. package/convex/email.js.map +1 -1
  50. package/convex/feedback.d.ts +7 -0
  51. package/convex/feedback.js +227 -0
  52. package/convex/http.d.ts +3 -0
  53. package/convex/http.d.ts.map +1 -1
  54. package/convex/http.js +2135 -0
  55. package/convex/http.js.map +1 -1
  56. package/convex/http.ts +275 -3
  57. package/convex/inbound.d.ts +2 -0
  58. package/convex/inbound.js +32 -0
  59. package/convex/logs.d.ts +48 -0
  60. package/convex/logs.d.ts.map +1 -1
  61. package/convex/logs.js +623 -0
  62. package/convex/logs.js.map +1 -1
  63. package/convex/migrateFilestack.d.ts +2 -0
  64. package/convex/migrateFilestack.js +74 -0
  65. package/convex/migratePartnersProd.d.ts +8 -0
  66. package/convex/migratePartnersProd.js +165 -0
  67. package/convex/migratePratham.d.ts +2 -0
  68. package/convex/migratePratham.js +121 -0
  69. package/convex/migrateProviderWorkspaces.d.ts +13 -0
  70. package/convex/migrateProviderWorkspaces.d.ts.map +1 -1
  71. package/convex/migrateProviderWorkspaces.js +141 -0
  72. package/convex/migrateProviderWorkspaces.js.map +1 -1
  73. package/convex/mou.d.ts +6 -0
  74. package/convex/mou.js +82 -0
  75. package/convex/providerKeys.d.ts +31 -0
  76. package/convex/providerKeys.js +257 -0
  77. package/convex/providers.d.ts +35 -0
  78. package/convex/providers.d.ts.map +1 -1
  79. package/convex/providers.js +1027 -0
  80. package/convex/providers.js.map +1 -1
  81. package/convex/purchases.d.ts +7 -0
  82. package/convex/purchases.js +157 -0
  83. package/convex/ratelimit.d.ts +4 -0
  84. package/convex/ratelimit.js +91 -0
  85. package/convex/schema.ts +4 -4
  86. package/convex/searchLogs.d.ts +13 -0
  87. package/convex/searchLogs.d.ts.map +1 -1
  88. package/convex/searchLogs.js +241 -0
  89. package/convex/searchLogs.js.map +1 -1
  90. package/convex/seedAPILayerAPIs.d.ts +7 -0
  91. package/convex/seedAPILayerAPIs.js +177 -0
  92. package/convex/seedDirectCallConfigs.d.ts +2 -0
  93. package/convex/seedDirectCallConfigs.js +324 -0
  94. package/convex/seedPratham.d.ts +6 -0
  95. package/convex/seedPratham.d.ts.map +1 -1
  96. package/convex/seedPratham.js +149 -0
  97. package/convex/seedPratham.js.map +1 -1
  98. package/convex/seedPratham.ts +1 -2
  99. package/convex/spendAlerts.d.ts +36 -0
  100. package/convex/spendAlerts.js +380 -0
  101. package/convex/spendAlerts.js.map +1 -1
  102. package/convex/stripeActions.d.ts +19 -0
  103. package/convex/stripeActions.d.ts.map +1 -1
  104. package/convex/stripeActions.js +432 -0
  105. package/convex/stripeActions.js.map +1 -1
  106. package/convex/stripeActions.ts +25 -3
  107. package/convex/teams.d.ts +21 -0
  108. package/convex/teams.js +215 -0
  109. package/convex/telemetry.d.ts +4 -0
  110. package/convex/telemetry.js +74 -0
  111. package/convex/updateAPIStatus.d.ts +6 -0
  112. package/convex/updateAPIStatus.d.ts.map +1 -1
  113. package/convex/updateAPIStatus.js +39 -0
  114. package/convex/updateAPIStatus.js.map +1 -1
  115. package/convex/usage.d.ts +27 -0
  116. package/convex/usage.js +229 -0
  117. package/convex/waitlist.d.ts +4 -0
  118. package/convex/waitlist.js +49 -0
  119. package/convex/webhooks.d.ts +12 -0
  120. package/convex/webhooks.js +410 -0
  121. package/convex/workspaceSettings.d.ts +7 -0
  122. package/convex/workspaceSettings.d.ts.map +1 -0
  123. package/convex/workspaceSettings.js +128 -0
  124. package/convex/workspaceSettings.js.map +1 -0
  125. package/convex/workspaces.d.ts +33 -0
  126. package/convex/workspaces.d.ts.map +1 -1
  127. package/convex/workspaces.js +989 -0
  128. package/convex/workspaces.js.map +1 -1
  129. package/convex/workspaces.ts +18 -20
  130. package/dist/bin.js +0 -0
  131. package/dist/cli/commands/demo.js +1 -1
  132. package/dist/cli/commands/demo.js.map +1 -1
  133. package/dist/cli/commands/doctor.js.map +1 -1
  134. package/dist/cli/commands/login.js.map +1 -1
  135. package/dist/cli/commands/setup.js.map +1 -1
  136. package/dist/credentials.d.ts.map +1 -1
  137. package/dist/credentials.js +15 -0
  138. package/dist/credentials.js.map +1 -1
  139. package/dist/discovery.js.map +1 -1
  140. package/dist/execute.js.map +1 -1
  141. package/dist/index.js +1 -1
  142. package/dist/index.js.map +1 -1
  143. package/dist/mcp-analytics.js +1 -1
  144. package/dist/mcp-analytics.js.map +1 -1
  145. package/dist/open-apis.d.ts.map +1 -1
  146. package/dist/open-apis.js +94 -2
  147. package/dist/open-apis.js.map +1 -1
  148. package/dist/ui/errors.js.map +1 -1
  149. package/dist/ui/prompts.js.map +1 -1
  150. package/package.json +1 -1
  151. package/src/cli/commands/demo.ts +1 -1
  152. package/src/credentials.ts +16 -0
  153. package/src/index.ts +1 -1
  154. package/src/mcp-analytics.ts +1 -1
  155. package/src/open-apis.ts +114 -4
  156. package/src/types/convex-api.d.ts +20 -0
@@ -0,0 +1,324 @@
1
+ import { mutation } from "./_generated/server";
2
+ /**
3
+ * Seed Direct Call configs + actions for all 27 APILayer APIs
4
+ * Sets status: "live" and creates action records matching MCP proxy
5
+ *
6
+ * Run: npx convex run seedDirectCallConfigs:seed
7
+ */
8
+ const API_CONFIGS = {
9
+ "ExchangeRate API": {
10
+ baseUrl: "https://api.apilayer.com/exchangerates_data",
11
+ actions: [
12
+ { name: "exchange_rates", displayName: "Get Exchange Rates", description: "Get latest exchange rates", method: "GET", path: "/latest", params: [
13
+ { name: "base", type: "string", required: false, description: "Base currency (default: EUR)", in: "query" },
14
+ { name: "symbols", type: "string", required: false, description: "Comma-separated target currencies", in: "query" },
15
+ ] },
16
+ ],
17
+ },
18
+ "Marketstack": {
19
+ baseUrl: "http://api.marketstack.com/v1",
20
+ actions: [
21
+ { name: "market_data", displayName: "End of Day Data", description: "Get end-of-day stock market data", method: "GET", path: "/eod", params: [
22
+ { name: "symbols", type: "string", required: true, description: "Stock ticker symbol(s)", in: "query" },
23
+ ] },
24
+ ],
25
+ },
26
+ "AviationStack": {
27
+ baseUrl: "http://api.aviationstack.com/v1",
28
+ actions: [
29
+ { name: "aviation", displayName: "Flight Status", description: "Get real-time flight status", method: "GET", path: "/flights", params: [
30
+ { name: "flight_iata", type: "string", required: false, description: "Flight IATA code", in: "query" },
31
+ { name: "dep_iata", type: "string", required: false, description: "Departure airport IATA", in: "query" },
32
+ ] },
33
+ ],
34
+ },
35
+ "PDF Layer": {
36
+ baseUrl: "https://api.pdflayer.com/api",
37
+ actions: [
38
+ { name: "pdf_generate", displayName: "Generate PDF", description: "Convert HTML/URL to PDF", method: "POST", path: "/convert", params: [
39
+ { name: "document_url", type: "string", required: false, description: "URL to convert", in: "query" },
40
+ { name: "document_html", type: "string", required: false, description: "HTML to convert", in: "body" },
41
+ ] },
42
+ ],
43
+ },
44
+ "Screenshot Layer": {
45
+ baseUrl: "https://api.apilayer.com/screenshot",
46
+ actions: [
47
+ { name: "screenshot", displayName: "Capture Screenshot", description: "Capture website screenshot", method: "GET", path: "/capture", params: [
48
+ { name: "url", type: "string", required: true, description: "URL to screenshot", in: "query" },
49
+ ] },
50
+ ],
51
+ },
52
+ "Email Verification API": {
53
+ baseUrl: "https://api.apilayer.com/email_verification",
54
+ actions: [
55
+ { name: "verify_email", displayName: "Verify Email", description: "Verify email address validity", method: "GET", path: "/check", params: [
56
+ { name: "email", type: "string", required: true, description: "Email to verify", in: "query" },
57
+ ] },
58
+ ],
59
+ },
60
+ "Number Verification API": {
61
+ baseUrl: "https://api.apilayer.com/number_verification",
62
+ actions: [
63
+ { name: "verify_number", displayName: "Verify Number", description: "Validate phone number", method: "GET", path: "/validate", params: [
64
+ { name: "number", type: "string", required: true, description: "Phone number to validate", in: "query" },
65
+ ] },
66
+ ],
67
+ },
68
+ "VAT Layer": {
69
+ baseUrl: "https://api.apilayer.com/vat_layer",
70
+ actions: [
71
+ { name: "vat_check", displayName: "Validate VAT", description: "Validate EU VAT number", method: "GET", path: "/validate", params: [
72
+ { name: "vat_number", type: "string", required: true, description: "VAT number to validate", in: "query" },
73
+ ] },
74
+ ],
75
+ },
76
+ "World News API": {
77
+ baseUrl: "https://api.apilayer.com/world_news",
78
+ actions: [
79
+ { name: "world_news", displayName: "Extract News", description: "Extract news from URL", method: "GET", path: "/extract-news", params: [
80
+ { name: "url", type: "string", required: true, description: "News URL to extract", in: "query" },
81
+ ] },
82
+ ],
83
+ },
84
+ "Finance News API": {
85
+ baseUrl: "https://api.apilayer.com/financelayer",
86
+ actions: [
87
+ { name: "finance_news", displayName: "Financial News", description: "Get financial news feed", method: "GET", path: "/news", params: [
88
+ { name: "tickers", type: "string", required: false, description: "Stock tickers to filter", in: "query" },
89
+ ] },
90
+ ],
91
+ },
92
+ "Advanced Scraper API": {
93
+ baseUrl: "https://api.apilayer.com/adv_scraper",
94
+ actions: [
95
+ { name: "scrape", displayName: "Scrape URL", description: "Scrape web page content", method: "GET", path: "/scraper", params: [
96
+ { name: "url", type: "string", required: true, description: "URL to scrape", in: "query" },
97
+ ] },
98
+ ],
99
+ },
100
+ "Image Crop API": {
101
+ baseUrl: "https://api.apilayer.com/smart_crop",
102
+ actions: [
103
+ { name: "image_crop", displayName: "Smart Crop", description: "AI-powered image cropping", method: "POST", path: "/url", params: [
104
+ { name: "url", type: "string", required: true, description: "Image URL to crop", in: "query" },
105
+ ] },
106
+ ],
107
+ },
108
+ "Skills API": {
109
+ baseUrl: "https://api.apilayer.com/skills",
110
+ actions: [
111
+ { name: "skills", displayName: "Search Skills", description: "Search skill database", method: "GET", path: "/", params: [
112
+ { name: "q", type: "string", required: true, description: "Search query", in: "query" },
113
+ ] },
114
+ ],
115
+ },
116
+ "Form API": {
117
+ baseUrl: "https://api.apilayer.com/form_api",
118
+ actions: [
119
+ { name: "form_submit", displayName: "Submit Form", description: "Form submission handling", method: "POST", path: "/submit", params: [
120
+ { name: "endpoint", type: "string", required: true, description: "Form endpoint", in: "path" },
121
+ ] },
122
+ ],
123
+ },
124
+ "Fixer API": {
125
+ baseUrl: "http://data.fixer.io/api",
126
+ actions: [
127
+ { name: "fixer_convert", displayName: "Convert Currency", description: "Convert between currencies", method: "GET", path: "/convert", params: [
128
+ { name: "from", type: "string", required: true, description: "Source currency", in: "query" },
129
+ { name: "to", type: "string", required: true, description: "Target currency", in: "query" },
130
+ { name: "amount", type: "number", required: true, description: "Amount to convert", in: "query" },
131
+ ] },
132
+ { name: "fixer_latest", displayName: "Latest Rates", description: "Get latest exchange rates", method: "GET", path: "/latest", params: [
133
+ { name: "base", type: "string", required: false, description: "Base currency", in: "query" },
134
+ { name: "symbols", type: "string", required: false, description: "Target currencies", in: "query" },
135
+ ] },
136
+ ],
137
+ },
138
+ "Currencylayer": {
139
+ baseUrl: "http://api.currencylayer.com",
140
+ actions: [
141
+ { name: "currencylayer_live", displayName: "Live Rates", description: "Get live exchange rates", method: "GET", path: "/live", params: [
142
+ { name: "currencies", type: "string", required: false, description: "Target currencies", in: "query" },
143
+ ] },
144
+ { name: "currencylayer_convert", displayName: "Convert", description: "Convert currency amount", method: "GET", path: "/convert", params: [
145
+ { name: "from", type: "string", required: true, description: "Source currency", in: "query" },
146
+ { name: "to", type: "string", required: true, description: "Target currency", in: "query" },
147
+ { name: "amount", type: "number", required: true, description: "Amount", in: "query" },
148
+ ] },
149
+ ],
150
+ },
151
+ "Coinlayer": {
152
+ baseUrl: "http://api.coinlayer.com",
153
+ actions: [
154
+ { name: "coinlayer_live", displayName: "Live Crypto Rates", description: "Get live cryptocurrency rates", method: "GET", path: "/live", params: [
155
+ { name: "symbols", type: "string", required: false, description: "Crypto symbols", in: "query" },
156
+ ] },
157
+ ],
158
+ },
159
+ "Exchangerate.host": {
160
+ baseUrl: "https://api.exchangerate.host",
161
+ actions: [
162
+ { name: "exchangeratehost_latest", displayName: "Latest Rates", description: "Free exchange rates", method: "GET", path: "/latest", params: [
163
+ { name: "base", type: "string", required: false, description: "Base currency", in: "query" },
164
+ ] },
165
+ ],
166
+ },
167
+ "Weatherstack": {
168
+ baseUrl: "http://api.weatherstack.com",
169
+ actions: [
170
+ { name: "weatherstack_current", displayName: "Current Weather", description: "Get current weather data", method: "GET", path: "/current", params: [
171
+ { name: "query", type: "string", required: true, description: "Location (city, IP, coordinates)", in: "query" },
172
+ ] },
173
+ { name: "weatherstack_forecast", displayName: "Weather Forecast", description: "Get weather forecast", method: "GET", path: "/forecast", params: [
174
+ { name: "query", type: "string", required: true, description: "Location", in: "query" },
175
+ { name: "forecast_days", type: "number", required: false, description: "Days to forecast", in: "query" },
176
+ ] },
177
+ ],
178
+ },
179
+ "IPstack": {
180
+ baseUrl: "http://api.ipstack.com",
181
+ actions: [
182
+ { name: "ipstack_lookup", displayName: "IP Lookup", description: "Geolocate IP address", method: "GET", path: "/{ip}", params: [
183
+ { name: "ip", type: "string", required: true, description: "IP address to lookup", in: "path" },
184
+ ] },
185
+ ],
186
+ },
187
+ "IPapi": {
188
+ baseUrl: "http://api.ipapi.com",
189
+ actions: [
190
+ { name: "ipapi_lookup", displayName: "IP Geolocation", description: "IP address geolocation", method: "GET", path: "/{ip}", params: [
191
+ { name: "ip", type: "string", required: true, description: "IP address", in: "path" },
192
+ ] },
193
+ ],
194
+ },
195
+ "Positionstack": {
196
+ baseUrl: "http://api.positionstack.com/v1",
197
+ actions: [
198
+ { name: "positionstack_forward", displayName: "Forward Geocode", description: "Address to coordinates", method: "GET", path: "/forward", params: [
199
+ { name: "query", type: "string", required: true, description: "Address to geocode", in: "query" },
200
+ ] },
201
+ { name: "positionstack_reverse", displayName: "Reverse Geocode", description: "Coordinates to address", method: "GET", path: "/reverse", params: [
202
+ { name: "query", type: "string", required: true, description: "Lat,lng coordinates", in: "query" },
203
+ ] },
204
+ ],
205
+ },
206
+ "Languagelayer": {
207
+ baseUrl: "https://api.languagelayer.com",
208
+ actions: [
209
+ { name: "languagelayer_detect", displayName: "Detect Language", description: "Detect text language", method: "POST", path: "/detect", params: [
210
+ { name: "query", type: "string", required: true, description: "Text to analyze", in: "body" },
211
+ ] },
212
+ ],
213
+ },
214
+ "Scrapestack": {
215
+ baseUrl: "http://api.scrapestack.com",
216
+ actions: [
217
+ { name: "scrapestack_scrape", displayName: "Scrape Page", description: "Web scraping proxy", method: "GET", path: "/scrape", params: [
218
+ { name: "url", type: "string", required: true, description: "URL to scrape", in: "query" },
219
+ ] },
220
+ ],
221
+ },
222
+ "Serpstack": {
223
+ baseUrl: "http://api.serpstack.com",
224
+ actions: [
225
+ { name: "serpstack_search", displayName: "Search Google", description: "Google search results", method: "GET", path: "/search", params: [
226
+ { name: "query", type: "string", required: true, description: "Search query", in: "query" },
227
+ ] },
228
+ ],
229
+ },
230
+ "Mediastack": {
231
+ baseUrl: "http://api.mediastack.com/v1",
232
+ actions: [
233
+ { name: "mediastack_news", displayName: "Get News", description: "Live news articles", method: "GET", path: "/news", params: [
234
+ { name: "keywords", type: "string", required: false, description: "News keywords", in: "query" },
235
+ { name: "countries", type: "string", required: false, description: "Country codes", in: "query" },
236
+ ] },
237
+ ],
238
+ },
239
+ "Userstack": {
240
+ baseUrl: "http://api.userstack.com",
241
+ actions: [
242
+ { name: "userstack_detect", displayName: "Detect User Agent", description: "Parse user agent string", method: "GET", path: "/detect", params: [
243
+ { name: "ua", type: "string", required: true, description: "User agent string", in: "query" },
244
+ ] },
245
+ ],
246
+ },
247
+ };
248
+ export const seed = mutation({
249
+ args: {},
250
+ handler: async (ctx) => {
251
+ const providerId = "k97cvcvadnyz8x8m4we7xqmh1s83p0ph"; // APILayer provider ID
252
+ const now = Date.now();
253
+ // Get all provider APIs
254
+ const apis = await ctx.db
255
+ .query("providerAPIs")
256
+ .withIndex("by_providerId", (q) => q.eq("providerId", providerId))
257
+ .collect();
258
+ let configsCreated = 0;
259
+ let actionsCreated = 0;
260
+ for (const api of apis) {
261
+ const config = API_CONFIGS[api.name];
262
+ if (!config)
263
+ continue;
264
+ // Check if Direct Call config already exists
265
+ const existing = await ctx.db
266
+ .query("providerDirectCall")
267
+ .withIndex("by_apiId", (q) => q.eq("apiId", api._id))
268
+ .first();
269
+ let directCallId;
270
+ if (existing) {
271
+ // Update to live
272
+ await ctx.db.patch(existing._id, { status: "live", updatedAt: now, publishedAt: now });
273
+ directCallId = existing._id;
274
+ }
275
+ else {
276
+ // Create new config
277
+ directCallId = await ctx.db.insert("providerDirectCall", {
278
+ providerId,
279
+ apiId: api._id,
280
+ baseUrl: config.baseUrl,
281
+ authType: "bearer",
282
+ authHeader: "apikey",
283
+ authPrefix: "",
284
+ encryptedMasterKey: "managed-by-apiclaw",
285
+ rateLimitPerUser: 60,
286
+ rateLimitPerDay: 1000,
287
+ pricePerRequest: 0,
288
+ status: "live",
289
+ allowCustomerKeys: false,
290
+ requireCustomerKeys: false,
291
+ createdAt: now,
292
+ updatedAt: now,
293
+ publishedAt: now,
294
+ });
295
+ configsCreated++;
296
+ }
297
+ // Create actions (skip if already exist)
298
+ for (const action of config.actions) {
299
+ const existingAction = await ctx.db
300
+ .query("providerActions")
301
+ .withIndex("by_directCallId_name", (q) => q.eq("directCallId", directCallId).eq("name", action.name))
302
+ .first();
303
+ if (!existingAction) {
304
+ await ctx.db.insert("providerActions", {
305
+ directCallId,
306
+ name: action.name,
307
+ displayName: action.displayName,
308
+ description: action.description,
309
+ method: action.method,
310
+ path: action.path,
311
+ params: action.params,
312
+ responseMapping: [],
313
+ enabled: true,
314
+ createdAt: now,
315
+ updatedAt: now,
316
+ });
317
+ actionsCreated++;
318
+ }
319
+ }
320
+ }
321
+ return { success: true, configsCreated, actionsCreated, totalApis: apis.length };
322
+ },
323
+ });
324
+ //# sourceMappingURL=seedDirectCallConfigs.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Seed Pratham's workspace with all 27 APILayer APIs
3
+ * Run with: npx convex run seedPratham:seedPrathamWorkspace
4
+ */
5
+ export declare const seedPrathamWorkspace: any;
6
+ //# sourceMappingURL=seedPratham.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"seedPratham.d.ts","sourceRoot":"","sources":["seedPratham.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,eAAO,MAAM,oBAAoB,KAyJ/B,CAAC"}
1
+ {"version":3,"file":"seedPratham.d.ts","sourceRoot":"","sources":["seedPratham.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,eAAO,MAAM,oBAAoB,KAwJ/B,CAAC"}
@@ -0,0 +1,149 @@
1
+ import { mutation } from "./_generated/server";
2
+ /**
3
+ * Seed Pratham's workspace with all 27 APILayer APIs
4
+ * Run with: npx convex run seedPratham:seedPrathamWorkspace
5
+ */
6
+ export const seedPrathamWorkspace = mutation({
7
+ args: {},
8
+ handler: async (ctx) => {
9
+ const email = "gustav_hemmingsson@hotmail.com"; // Gustav's personal email for testing
10
+ // 1. Create or get workspace
11
+ let workspace = await ctx.db
12
+ .query("workspaces")
13
+ .withIndex("by_email", (q) => q.eq("email", email))
14
+ .first();
15
+ if (!workspace) {
16
+ const workspaceId = await ctx.db.insert("workspaces", {
17
+ email,
18
+ status: "active",
19
+ tier: "pro",
20
+ usageCount: 0,
21
+ usageLimit: -1, // unlimited
22
+ weeklyUsageCount: 0,
23
+ weeklyUsageLimit: -1, // unlimited
24
+ hourlyUsageCount: 0,
25
+ mainAgentName: "APILayer Dashboard",
26
+ createdAt: Date.now(),
27
+ updatedAt: Date.now(),
28
+ });
29
+ workspace = await ctx.db.get(workspaceId);
30
+ console.log(`✓ Created workspace for ${email}`);
31
+ }
32
+ else {
33
+ console.log(`✓ Workspace exists for ${email}`);
34
+ }
35
+ if (!workspace)
36
+ throw new Error("Failed to create workspace");
37
+ // 2. Create provider profile
38
+ let provider = await ctx.db
39
+ .query("providers")
40
+ .withIndex("by_email", (q) => q.eq("email", email))
41
+ .first();
42
+ if (!provider) {
43
+ const providerId = await ctx.db.insert("providers", {
44
+ email,
45
+ name: "Pratham (APILayer)",
46
+ company: "APILayer",
47
+ website: "https://apilayer.com",
48
+ status: "approved",
49
+ stripeOnboardingComplete: false,
50
+ createdAt: Date.now(),
51
+ updatedAt: Date.now(),
52
+ approvedAt: Date.now(),
53
+ });
54
+ provider = await ctx.db.get(providerId);
55
+ console.log(`✓ Created provider profile`);
56
+ }
57
+ else {
58
+ console.log(`✓ Provider profile exists`);
59
+ }
60
+ if (!provider)
61
+ throw new Error("Failed to create provider");
62
+ // 3. Create all 27 APILayer APIs
63
+ const apis = [
64
+ // Unified APIs (14)
65
+ { name: "ExchangeRate API", description: "Real-time exchange rates", category: "finance", action: "exchange_rates" },
66
+ { name: "Marketstack", description: "Real-time market data", category: "finance", action: "market_data" },
67
+ { name: "AviationStack", description: "Flight data API", category: "geolocation", action: "aviation" },
68
+ { name: "PDF Layer", description: "HTML to PDF conversion", category: "business", action: "pdf_generate" },
69
+ { name: "Screenshot Layer", description: "Website screenshots", category: "marketing", action: "screenshot" },
70
+ { name: "Email Verification API", description: "Verify email addresses", category: "devtools", action: "verify_email" },
71
+ { name: "Number Verification API", description: "Validate phone numbers", category: "devtools", action: "verify_number" },
72
+ { name: "VAT Layer", description: "VAT number validation", category: "finance", action: "vat_check" },
73
+ { name: "World News API", description: "Extract news from URLs", category: "news", action: "world_news" },
74
+ { name: "Finance News API", description: "Financial news feed", category: "news", action: "finance_news" },
75
+ { name: "Advanced Scraper API", description: "Web scraping", category: "scraping", action: "scrape" },
76
+ { name: "Image Crop API", description: "Smart image cropping", category: "marketing", action: "image_crop" },
77
+ { name: "Skills API", description: "Skill database search", category: "devtools", action: "skills" },
78
+ { name: "Form API", description: "Form submission handling", category: "devtools", action: "form_submit" },
79
+ // Legacy APIs (13)
80
+ { name: "Fixer API", description: "Currency conversion (legacy)", category: "finance", action: "fixer_convert" },
81
+ { name: "Fixer Latest Rates", description: "Latest exchange rates", category: "finance", action: "fixer_latest" },
82
+ { name: "Currencylayer Live", description: "Live currency rates", category: "finance", action: "currencylayer_live" },
83
+ { name: "Currencylayer Convert", description: "Currency conversion", category: "finance", action: "currencylayer_convert" },
84
+ { name: "Coinlayer", description: "Crypto exchange rates", category: "finance", action: "coinlayer_live" },
85
+ { name: "Exchangerate.host", description: "Exchange rates API", category: "finance", action: "exchangeratehost_latest" },
86
+ { name: "Weatherstack Current", description: "Current weather data", category: "geolocation", action: "weatherstack_current" },
87
+ { name: "Weatherstack Forecast", description: "Weather forecasts", category: "geolocation", action: "weatherstack_forecast" },
88
+ { name: "IPstack", description: "IP geolocation lookup", category: "geolocation", action: "ipstack_lookup" },
89
+ { name: "IPapi", description: "IP address lookup", category: "geolocation", action: "ipapi_lookup" },
90
+ { name: "Positionstack Forward", description: "Geocoding (address → coords)", category: "geolocation", action: "positionstack_forward" },
91
+ { name: "Positionstack Reverse", description: "Reverse geocoding (coords → address)", category: "geolocation", action: "positionstack_reverse" },
92
+ { name: "Languagelayer", description: "Language detection", category: "devtools", action: "languagelayer_detect" },
93
+ { name: "Scrapestack", description: "Web scraping service", category: "scraping", action: "scrapestack_scrape" },
94
+ { name: "Serpstack", description: "Google search results", category: "scraping", action: "serpstack_search" },
95
+ { name: "Mediastack", description: "News and blog articles", category: "news", action: "mediastack_news" },
96
+ { name: "Userstack", description: "User agent detection", category: "devtools", action: "userstack_detect" },
97
+ ];
98
+ let createdCount = 0;
99
+ let existingCount = 0;
100
+ for (const api of apis) {
101
+ // Check if already exists
102
+ const existing = await ctx.db
103
+ .query("providerAPIs")
104
+ .withIndex("by_providerId", (q) => q.eq("providerId", provider._id))
105
+ .filter((q) => q.eq(q.field("name"), api.name))
106
+ .first();
107
+ if (!existing) {
108
+ await ctx.db.insert("providerAPIs", {
109
+ providerId: provider._id,
110
+ name: api.name,
111
+ description: api.description,
112
+ category: api.category,
113
+ pricingModel: "freemium",
114
+ pricingNotes: "Free tier available, paid tiers for higher limits",
115
+ status: "approved",
116
+ createdAt: Date.now(),
117
+ approvedAt: Date.now(),
118
+ discoveryCount: 0,
119
+ });
120
+ createdCount++;
121
+ }
122
+ else {
123
+ existingCount++;
124
+ }
125
+ }
126
+ console.log(`✓ APIs: ${createdCount} created, ${existingCount} already existed`);
127
+ return {
128
+ success: true,
129
+ workspace: {
130
+ email: workspace.email,
131
+ tier: workspace.tier,
132
+ id: workspace._id,
133
+ },
134
+ provider: {
135
+ name: provider.name,
136
+ company: provider.company,
137
+ id: provider._id,
138
+ },
139
+ apis: {
140
+ total: apis.length,
141
+ created: createdCount,
142
+ existing: existingCount,
143
+ },
144
+ dashboardUrl: `https://apiclaw.cloud/workspace`,
145
+ loginInstructions: "Test account using Gustav's personal email. Magic link will be sent to gustav_hemmingsson@hotmail.com",
146
+ };
147
+ },
148
+ });
149
+ //# sourceMappingURL=seedPratham.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"seedPratham.js","sourceRoot":"","sources":["seedPratham.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seedPratham.js","sourceRoot":"","sources":["seedPratham.ts"],"names":[],"mappings":"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"}
@@ -20,13 +20,12 @@ export const seedPrathamWorkspace = mutation({
20
20
  const workspaceId = await ctx.db.insert("workspaces", {
21
21
  email,
22
22
  status: "active",
23
- tier: "backer", // Give him backer tier (unlimited)
23
+ tier: "pro",
24
24
  usageCount: 0,
25
25
  usageLimit: -1, // unlimited
26
26
  weeklyUsageCount: 0,
27
27
  weeklyUsageLimit: -1, // unlimited
28
28
  hourlyUsageCount: 0,
29
- backerUntil: new Date("2027-12-31").getTime(), // Backer until end of 2027
30
29
  mainAgentName: "APILayer Dashboard",
31
30
  createdAt: Date.now(),
32
31
  updatedAt: Date.now(),
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Update workspace budget settings
3
+ */
4
+ export declare const updateBudgetSettings: any;
5
+ /**
6
+ * Record spend and check budget alerts
7
+ * Called after each successful API execution
8
+ * Returns budget status for response
9
+ */
10
+ export declare const recordSpend: any;
11
+ /**
12
+ * Check budget before execution
13
+ * Returns { allowed: boolean, reason?: string }
14
+ */
15
+ export declare const checkBudget: any;
16
+ /**
17
+ * Get budget status for workspace dashboard
18
+ */
19
+ export declare const getBudgetStatus: any;
20
+ /**
21
+ * Get budget status by session token (for dashboard)
22
+ */
23
+ export declare const getBudgetStatusByToken: any;
24
+ /**
25
+ * Send budget alert email (80% warning)
26
+ */
27
+ export declare const sendBudgetAlertEmail: any;
28
+ /**
29
+ * Send budget exceeded email
30
+ */
31
+ export declare const sendBudgetExceededEmail: any;
32
+ /**
33
+ * Reset monthly spend for all workspaces (called by cron on 1st of month)
34
+ */
35
+ export declare const resetMonthlySpend: any;
36
+ //# sourceMappingURL=spendAlerts.d.ts.map