@nordsym/apiclaw 1.8.6 → 1.8.7

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 (125) hide show
  1. package/README.md +4 -4
  2. package/apiclaw-README.md +12 -12
  3. package/convex/_generated/api.d.ts +4 -0
  4. package/convex/apiKeys.ts +220 -0
  5. package/convex/directCall.ts +49 -14
  6. package/convex/email.ts +5 -5
  7. package/convex/http.ts +598 -40
  8. package/convex/logs.ts +26 -22
  9. package/convex/migrateProviderWorkspaces.ts +154 -35
  10. package/convex/providers.ts +313 -203
  11. package/convex/schema.ts +50 -1
  12. package/convex/searchLogs.ts +2 -6
  13. package/convex/seedPratham.ts +1 -1
  14. package/convex/spendAlerts.ts +2 -2
  15. package/convex/stripeActions.ts +1 -1
  16. package/convex/updateAPIStatus.ts +2 -3
  17. package/convex/workspaceSettings.ts +136 -0
  18. package/dist/cli/commands/demo.js +2 -2
  19. package/dist/cli/commands/doctor.js +1 -1
  20. package/dist/cli/commands/login.js +1 -1
  21. package/dist/cli/commands/setup.js +2 -2
  22. package/dist/discovery.js +1 -1
  23. package/dist/execute.js +3 -3
  24. package/dist/index.js +13 -13
  25. package/dist/ui/errors.js +16 -16
  26. package/dist/ui/prompts.js +1 -1
  27. package/email-templates/filestack-provider-outreach.html +1 -1
  28. package/email-templates/partnership-template.html +1 -1
  29. package/email-templates/pratham-partnership-draft.html +2 -2
  30. package/package.json +2 -2
  31. package/reports/APIClaw-Session-Report-2026-04-05.pdf +0 -0
  32. package/reports/session-report-2026-04-05.html +433 -0
  33. package/src/cli/commands/demo.ts +2 -2
  34. package/src/cli/commands/doctor.ts +1 -1
  35. package/src/cli/commands/login.ts +1 -1
  36. package/src/cli/commands/setup.ts +2 -2
  37. package/src/discovery.ts +1 -1
  38. package/src/execute.ts +3 -3
  39. package/src/index.ts +14 -14
  40. package/src/ui/errors.ts +16 -16
  41. package/src/ui/prompts.ts +1 -1
  42. package/convex/adminActivate.d.ts +0 -3
  43. package/convex/adminActivate.js +0 -47
  44. package/convex/adminStats.d.ts +0 -9
  45. package/convex/adminStats.js +0 -280
  46. package/convex/agents.d.ts +0 -84
  47. package/convex/agents.js +0 -809
  48. package/convex/analytics.d.ts +0 -5
  49. package/convex/analytics.js +0 -167
  50. package/convex/backfillAnalytics.d.ts +0 -2
  51. package/convex/backfillAnalytics.js +0 -20
  52. package/convex/backfillSearchLogs.d.ts +0 -2
  53. package/convex/backfillSearchLogs.js +0 -29
  54. package/convex/billing.d.ts +0 -88
  55. package/convex/billing.js +0 -655
  56. package/convex/capabilities.d.ts +0 -9
  57. package/convex/capabilities.js +0 -145
  58. package/convex/chains.d.ts +0 -68
  59. package/convex/chains.js +0 -1105
  60. package/convex/credits.d.ts +0 -25
  61. package/convex/credits.js +0 -186
  62. package/convex/crons.d.ts +0 -3
  63. package/convex/crons.js +0 -17
  64. package/convex/debugFilestackLogs.d.ts +0 -2
  65. package/convex/debugFilestackLogs.js +0 -17
  66. package/convex/debugGetToken.d.ts +0 -2
  67. package/convex/debugGetToken.js +0 -18
  68. package/convex/directCall.d.ts +0 -72
  69. package/convex/directCall.js +0 -627
  70. package/convex/earnProgress.d.ts +0 -58
  71. package/convex/earnProgress.js +0 -649
  72. package/convex/email.d.ts +0 -14
  73. package/convex/email.js +0 -300
  74. package/convex/feedback.d.ts +0 -7
  75. package/convex/feedback.js +0 -227
  76. package/convex/http.d.ts +0 -3
  77. package/convex/http.js +0 -1408
  78. package/convex/inbound.d.ts +0 -2
  79. package/convex/inbound.js +0 -32
  80. package/convex/logs.d.ts +0 -48
  81. package/convex/logs.js +0 -621
  82. package/convex/migrateFilestack.d.ts +0 -2
  83. package/convex/migrateFilestack.js +0 -74
  84. package/convex/migratePartnersProd.d.ts +0 -8
  85. package/convex/migratePartnersProd.js +0 -165
  86. package/convex/migratePratham.d.ts +0 -2
  87. package/convex/migratePratham.js +0 -121
  88. package/convex/migrateProviderWorkspaces.d.ts +0 -2
  89. package/convex/migrateProviderWorkspaces.js +0 -55
  90. package/convex/mou.d.ts +0 -6
  91. package/convex/mou.js +0 -82
  92. package/convex/providerKeys.d.ts +0 -31
  93. package/convex/providerKeys.js +0 -257
  94. package/convex/providers.d.ts +0 -35
  95. package/convex/providers.js +0 -922
  96. package/convex/purchases.d.ts +0 -7
  97. package/convex/purchases.js +0 -157
  98. package/convex/ratelimit.d.ts +0 -4
  99. package/convex/ratelimit.js +0 -91
  100. package/convex/searchLogs.d.ts +0 -13
  101. package/convex/searchLogs.js +0 -246
  102. package/convex/seedAPILayerAPIs.d.ts +0 -7
  103. package/convex/seedAPILayerAPIs.js +0 -177
  104. package/convex/seedDirectCallConfigs.d.ts +0 -2
  105. package/convex/seedDirectCallConfigs.js +0 -324
  106. package/convex/seedPratham.d.ts +0 -6
  107. package/convex/seedPratham.js +0 -150
  108. package/convex/spendAlerts.d.ts +0 -36
  109. package/convex/spendAlerts.js +0 -380
  110. package/convex/stripeActions.d.ts +0 -19
  111. package/convex/stripeActions.js +0 -411
  112. package/convex/teams.d.ts +0 -21
  113. package/convex/teams.js +0 -215
  114. package/convex/telemetry.d.ts +0 -4
  115. package/convex/telemetry.js +0 -74
  116. package/convex/updateAPIStatus.d.ts +0 -6
  117. package/convex/updateAPIStatus.js +0 -40
  118. package/convex/usage.d.ts +0 -27
  119. package/convex/usage.js +0 -229
  120. package/convex/waitlist.d.ts +0 -4
  121. package/convex/waitlist.js +0 -49
  122. package/convex/webhooks.d.ts +0 -12
  123. package/convex/webhooks.js +0 -410
  124. package/convex/workspaces.d.ts +0 -33
  125. package/convex/workspaces.js +0 -991
@@ -1,8 +0,0 @@
1
- /**
2
- * Seed both partner providers (Filestack + APILayer) in PROD with:
3
- * - Provider record
4
- * - All providerAPIs
5
- * Run on prod: npx convex run migratePartnersProd:run --prod
6
- */
7
- export declare const run: any;
8
- //# sourceMappingURL=migratePartnersProd.d.ts.map
@@ -1,165 +0,0 @@
1
- import { mutation } from "./_generated/server";
2
- /**
3
- * Seed both partner providers (Filestack + APILayer) in PROD with:
4
- * - Provider record
5
- * - All providerAPIs
6
- * Run on prod: npx convex run migratePartnersProd:run --prod
7
- */
8
- export const run = mutation({
9
- args: {},
10
- handler: async (ctx) => {
11
- const now = Date.now();
12
- const results = {};
13
- // =====================================================================
14
- // 1. FILESTACK PROVIDER
15
- // =====================================================================
16
- let filestackProvider = await ctx.db
17
- .query("providers")
18
- .withIndex("by_email", (q) => q.eq("email", "marketing@filestack.com"))
19
- .first();
20
- if (!filestackProvider) {
21
- const id = await ctx.db.insert("providers", {
22
- email: "marketing@filestack.com",
23
- name: "Filestack",
24
- company: "Filestack",
25
- website: "https://filestack.com",
26
- status: "approved",
27
- stripeOnboardingComplete: false,
28
- createdAt: now,
29
- updatedAt: now,
30
- approvedAt: now,
31
- });
32
- filestackProvider = await ctx.db.get(id);
33
- }
34
- if (!filestackProvider)
35
- throw new Error("Filestack provider creation failed");
36
- const filestackAPIs = [
37
- { name: "File Upload API", description: "Reliable file upload from browser, mobile, or server", category: "storage" },
38
- { name: "Image Transformation API", description: "Resize, crop, convert, and process images on the fly", category: "storage" },
39
- { name: "CDN Delivery", description: "Deliver files globally via fast CDN", category: "storage" },
40
- { name: "File Storage Cloud", description: "Scalable cloud storage for any file type", category: "storage" },
41
- { name: "File Picker Widget", description: "Embeddable file picker UI for web apps", category: "storage" },
42
- { name: "Document Upload Processing", description: "Process documents (PDF, Word, Excel) on upload", category: "storage" },
43
- { name: "Virus Scan", description: "Scan uploaded files for malware and viruses in real-time", category: "security" },
44
- { name: "OCR Document Scan", description: "Extract text from scanned documents and images", category: "storage" },
45
- { name: "PDF to Image Convert", description: "Convert PDF pages to high-quality images", category: "storage" },
46
- { name: "File Management API", description: "List, move, copy, delete files programmatically", category: "storage" },
47
- ];
48
- let fsCreated = 0;
49
- for (const api of filestackAPIs) {
50
- const exists = await ctx.db
51
- .query("providerAPIs")
52
- .withIndex("by_providerId", (q) => q.eq("providerId", filestackProvider._id))
53
- .filter((q) => q.eq(q.field("name"), api.name))
54
- .first();
55
- if (!exists) {
56
- await ctx.db.insert("providerAPIs", {
57
- providerId: filestackProvider._id,
58
- name: api.name,
59
- description: api.description,
60
- category: api.category,
61
- pricingModel: "freemium",
62
- pricingNotes: "Free tier available",
63
- status: "approved",
64
- createdAt: now,
65
- approvedAt: now,
66
- discoveryCount: 0,
67
- });
68
- fsCreated++;
69
- }
70
- }
71
- results.filestack = {
72
- providerId: filestackProvider._id,
73
- apisCreated: fsCreated,
74
- apisTotal: filestackAPIs.length,
75
- };
76
- // =====================================================================
77
- // 2. APILAYER PROVIDER (Pratham)
78
- // =====================================================================
79
- let apiLayerProvider = await ctx.db
80
- .query("providers")
81
- .withIndex("by_email", (q) => q.eq("email", "pratham.kumar@apilayer.com"))
82
- .first();
83
- if (!apiLayerProvider) {
84
- const id = await ctx.db.insert("providers", {
85
- email: "pratham.kumar@apilayer.com",
86
- name: "APILayer",
87
- company: "APILayer",
88
- website: "https://apilayer.com",
89
- status: "approved",
90
- stripeOnboardingComplete: false,
91
- createdAt: now,
92
- updatedAt: now,
93
- approvedAt: now,
94
- });
95
- apiLayerProvider = await ctx.db.get(id);
96
- }
97
- if (!apiLayerProvider)
98
- throw new Error("APILayer provider creation failed");
99
- const apiLayerAPIs = [
100
- // Finance
101
- { name: "ExchangeRate API", description: "Real-time exchange rates and currency conversion", category: "finance" },
102
- { name: "Fixer API", description: "Foreign exchange rates & currency conversion", category: "finance" },
103
- { name: "Currencylayer", description: "Reliable exchange rates for your business", category: "finance" },
104
- { name: "Coinlayer", description: "Real-time crypto currency exchange rates", category: "finance" },
105
- { name: "Exchangerate.host", description: "Free exchange rates API", category: "finance" },
106
- { name: "VAT Layer", description: "EU VAT number validation", category: "finance" },
107
- { name: "Marketstack", description: "Real-time, intraday & historical market data", category: "finance" },
108
- // Geolocation
109
- { name: "AviationStack", description: "Real-time flight status & global aviation data", category: "geolocation" },
110
- { name: "Weatherstack", description: "Real-time & historical weather data", category: "geolocation" },
111
- { name: "IPstack", description: "Locate and identify website visitors by IP", category: "geolocation" },
112
- { name: "IPapi", description: "IP address geolocation lookup", category: "geolocation" },
113
- { name: "Positionstack", description: "Forward & reverse geocoding", category: "geolocation" },
114
- // News
115
- { name: "Mediastack", description: "Live news & blog articles", category: "news" },
116
- { name: "Finance News API", description: "Real-time financial news feed", category: "news" },
117
- { name: "World News API", description: "Extract news from any URL", category: "news" },
118
- // DevTools
119
- { name: "Email Verification API", description: "Verify email addresses in real-time", category: "devtools" },
120
- { name: "Number Verification API", description: "Validate phone numbers globally", category: "devtools" },
121
- { name: "Languagelayer", description: "Powerful language detection", category: "devtools" },
122
- { name: "Userstack", description: "Detect any browser, device & OS", category: "devtools" },
123
- { name: "Skills API", description: "Search skill database", category: "devtools" },
124
- { name: "Form API", description: "Form submission handling", category: "devtools" },
125
- // Scraping
126
- { name: "Scrapestack", description: "Real-time web scraping", category: "scraping" },
127
- { name: "Serpstack", description: "Google search results API", category: "scraping" },
128
- { name: "Advanced Scraper API", description: "Web scraping without the hassle", category: "scraping" },
129
- // Marketing/Business
130
- { name: "Screenshot Layer", description: "Capture website screenshots", category: "marketing" },
131
- { name: "Image Crop API", description: "Smart image cropping", category: "marketing" },
132
- { name: "PDF Layer", description: "High quality HTML to PDF conversion", category: "business" },
133
- ];
134
- let alCreated = 0;
135
- for (const api of apiLayerAPIs) {
136
- const exists = await ctx.db
137
- .query("providerAPIs")
138
- .withIndex("by_providerId", (q) => q.eq("providerId", apiLayerProvider._id))
139
- .filter((q) => q.eq(q.field("name"), api.name))
140
- .first();
141
- if (!exists) {
142
- await ctx.db.insert("providerAPIs", {
143
- providerId: apiLayerProvider._id,
144
- name: api.name,
145
- description: api.description,
146
- category: api.category,
147
- pricingModel: "freemium",
148
- pricingNotes: "Free tier available, paid tiers for higher limits",
149
- status: "approved",
150
- createdAt: now,
151
- approvedAt: now,
152
- discoveryCount: 0,
153
- });
154
- alCreated++;
155
- }
156
- }
157
- results.apilayer = {
158
- providerId: apiLayerProvider._id,
159
- apisCreated: alCreated,
160
- apisTotal: apiLayerAPIs.length,
161
- };
162
- return { success: true, ...results };
163
- },
164
- });
165
- //# sourceMappingURL=migratePartnersProd.js.map
@@ -1,2 +0,0 @@
1
- export declare const run: any;
2
- //# sourceMappingURL=migratePratham.d.ts.map
@@ -1,121 +0,0 @@
1
- import { mutation } from "./_generated/server";
2
- export const run = mutation({
3
- args: {},
4
- handler: async (ctx) => {
5
- // 1. Create or find Pratham's workspace
6
- const existing = await ctx.db
7
- .query("workspaces")
8
- .withIndex("by_email", (q) => q.eq("email", "pratham.kumar@apilayer.com"))
9
- .first();
10
- let workspaceId = existing?._id;
11
- if (!workspaceId) {
12
- workspaceId = await ctx.db.insert("workspaces", {
13
- email: "pratham.kumar@apilayer.com",
14
- workspaceName: "APILayer",
15
- status: "active",
16
- tier: "partner",
17
- usageCount: 0,
18
- usageLimit: 999999,
19
- weeklyUsageLimit: 999999,
20
- mainAgentName: "APILayer Partner",
21
- createdAt: Date.now(),
22
- updatedAt: Date.now(),
23
- });
24
- }
25
- else {
26
- await ctx.db.patch(workspaceId, {
27
- status: "active",
28
- tier: "partner",
29
- workspaceName: "APILayer",
30
- updatedAt: Date.now(),
31
- });
32
- }
33
- // 2. Migrate all logs from DEV (exact timestamps preserved)
34
- const logs = [
35
- { action: "discovery:news articles media", createdAt: 1774967391726, latencyMs: 23, provider: "apilayer", status: "success" },
36
- { action: "discovery:geocoding address", createdAt: 1774967387957, latencyMs: 20, provider: "apilayer", status: "success" },
37
- { action: "discovery:cryptocurrency bitcoin rates", createdAt: 1774967384524, latencyMs: 42, provider: "apilayer", status: "success" },
38
- { action: "discovery:language detection", createdAt: 1774967381009, latencyMs: 24, provider: "apilayer", status: "success" },
39
- { action: "discovery:financial news", createdAt: 1774967377825, latencyMs: 27, provider: "apilayer", status: "success" },
40
- { action: "discovery:PDF convert HTML", createdAt: 1774967373814, latencyMs: 18, provider: "apilayer", status: "success" },
41
- { action: "discovery:email verification", createdAt: 1774967370630, latencyMs: 20, provider: "apilayer", status: "success" },
42
- { action: "discovery:screenshot website", createdAt: 1774967363406, latencyMs: 6, provider: "apilayer", status: "success" },
43
- { action: "discovery:VAT validation", createdAt: 1774967355249, latencyMs: 6, provider: "apilayer", status: "success" },
44
- { action: "discovery:flight aviation tracking", createdAt: 1774967352176, latencyMs: 21, provider: "apilayer", status: "success" },
45
- { action: "discovery:IP geolocation", createdAt: 1774967347709, latencyMs: 32, provider: "apilayer", status: "success" },
46
- { action: "discovery:currency exchange rates", createdAt: 1774967344273, latencyMs: 20, provider: "apilayer", status: "success" },
47
- { action: "discovery:weather forecast", createdAt: 1774967340888, latencyMs: 18, provider: "apilayer", status: "success" },
48
- { action: "discovery:news articles media", createdAt: 1774939258553, latencyMs: 19, provider: "apilayer", status: "success" },
49
- { action: "discovery:geocoding address", createdAt: 1774939258311, latencyMs: 11, provider: "apilayer", status: "success" },
50
- { action: "discovery:cryptocurrency bitcoin rates", createdAt: 1774939258096, latencyMs: 18, provider: "apilayer", status: "success" },
51
- { action: "discovery:language detection", createdAt: 1774939257877, latencyMs: 15, provider: "apilayer", status: "success" },
52
- { action: "discovery:financial news", createdAt: 1774939257704, latencyMs: 15, provider: "apilayer", status: "success" },
53
- { action: "discovery:PDF convert HTML", createdAt: 1774939257462, latencyMs: 18, provider: "apilayer", status: "success" },
54
- { action: "discovery:email verification", createdAt: 1774939257256, latencyMs: 15, provider: "apilayer", status: "success" },
55
- { action: "discovery:screenshot website", createdAt: 1774939256831, latencyMs: 15, provider: "apilayer", status: "success" },
56
- { action: "discovery:VAT validation", createdAt: 1774939256477, latencyMs: 12, provider: "apilayer", status: "success" },
57
- { action: "discovery:flight aviation tracking", createdAt: 1774939256184, latencyMs: 11, provider: "apilayer", status: "success" },
58
- { action: "discovery:IP geolocation", createdAt: 1774939255985, latencyMs: 10, provider: "apilayer", status: "success" },
59
- { action: "discovery:currency exchange rates", createdAt: 1774939255834, latencyMs: 13, provider: "apilayer", status: "success" },
60
- { action: "discovery:weather forecast", createdAt: 1774939255695, latencyMs: 18, provider: "apilayer", status: "success" },
61
- { action: "coinlayer_live", createdAt: 1774892789576, latencyMs: 792, provider: "apilayer", status: "success" },
62
- { action: "ipstack_lookup", createdAt: 1774892785050, latencyMs: 720, provider: "apilayer", status: "success" },
63
- { action: "ipstack_lookup", createdAt: 1774892780343, latencyMs: 651, provider: "apilayer", status: "success" },
64
- { action: "coinlayer_live", createdAt: 1774892775999, latencyMs: 712, provider: "apilayer", status: "success" },
65
- { action: "coinlayer_live", createdAt: 1774892771405, latencyMs: 987, provider: "apilayer", status: "success" },
66
- { action: "screenshot", createdAt: 1774890407860, latencyMs: 7721, provider: "apilayer", status: "success" },
67
- { action: "exchange_rates", createdAt: 1774890396532, latencyMs: 695, provider: "apilayer", status: "error", errorMessage: "Unexpected token" },
68
- { action: "discovery:news articles media", createdAt: 1774889743879, latencyMs: 17, provider: "apilayer", status: "success" },
69
- { action: "discovery:geocoding address", createdAt: 1774889740816, latencyMs: 16, provider: "apilayer", status: "success" },
70
- { action: "discovery:cryptocurrency bitcoin rates", createdAt: 1774889737259, latencyMs: 9, provider: "apilayer", status: "success" },
71
- { action: "discovery:language detection", createdAt: 1774889733933, latencyMs: 33, provider: "apilayer", status: "success" },
72
- { action: "discovery:financial news", createdAt: 1774889730874, latencyMs: 26, provider: "apilayer", status: "success" },
73
- { action: "discovery:PDF convert HTML", createdAt: 1774889727684, latencyMs: 21, provider: "apilayer", status: "success" },
74
- { action: "discovery:email verification", createdAt: 1774889723926, latencyMs: 21, provider: "apilayer", status: "success" },
75
- { action: "discovery:screenshot website", createdAt: 1774889717576, latencyMs: 12, provider: "apilayer", status: "success" },
76
- { action: "discovery:VAT validation", createdAt: 1774889710750, latencyMs: 14, provider: "apilayer", status: "success" },
77
- { action: "discovery:flight aviation tracking", createdAt: 1774889707975, latencyMs: 19, provider: "apilayer", status: "success" },
78
- { action: "discovery:IP geolocation", createdAt: 1774889705024, latencyMs: 13, provider: "apilayer", status: "success" },
79
- { action: "discovery:currency exchange rates", createdAt: 1774889701843, latencyMs: 30, provider: "apilayer", status: "success" },
80
- { action: "discovery:weather forecast", createdAt: 1774889699061, latencyMs: 54, provider: "apilayer", status: "success" },
81
- { action: "discovery:foreign exchange forex rates fixer", createdAt: 1774886193681, latencyMs: 13, provider: "apilayer", status: "success" },
82
- { action: "discovery:browser detection user agent device", createdAt: 1774886193179, latencyMs: 17, provider: "apilayer", status: "success" },
83
- { action: "discovery:live news articles feed media", createdAt: 1774886192769, latencyMs: 12, provider: "apilayer", status: "success" },
84
- { action: "discovery:geocoding address coordinates latitude", createdAt: 1774886192364, latencyMs: 9, provider: "apilayer", status: "success" },
85
- { action: "discovery:cryptocurrency rates bitcoin ethereum", createdAt: 1774886191933, latencyMs: 9, provider: "apilayer", status: "success" },
86
- { action: "discovery:language detection identify text", createdAt: 1774886190674, latencyMs: 13, provider: "apilayer", status: "success" },
87
- { action: "discovery:financial news feed market", createdAt: 1774886190269, latencyMs: 13, provider: "apilayer", status: "success" },
88
- { action: "discovery:PDF generation convert HTML document", createdAt: 1774886189845, latencyMs: 20, provider: "apilayer", status: "success" },
89
- { action: "discovery:screenshot capture website page", createdAt: 1774886188241, latencyMs: 24, provider: "apilayer", status: "success" },
90
- { action: "discovery:VAT number validation EU business", createdAt: 1774886187407, latencyMs: 16, provider: "apilayer", status: "success" },
91
- { action: "discovery:flight tracking aviation status", createdAt: 1774886186950, latencyMs: 20, provider: "apilayer", status: "success" },
92
- { action: "discovery:IP address geolocation location", createdAt: 1774886186635, latencyMs: 17, provider: "apilayer", status: "success" },
93
- { action: "discovery:currency exchange rates conversion", createdAt: 1774886186135, latencyMs: 26, provider: "apilayer", status: "success" },
94
- { action: "discovery:weather forecast temperature", createdAt: 1774886185916, latencyMs: 20, provider: "apilayer", status: "success" },
95
- { action: "discovery:currency exchange rates", createdAt: 1774884654601, latencyMs: 12, provider: "apilayer", status: "success" },
96
- { action: "discovery:weather forecast", createdAt: 1774884654441, latencyMs: 33, provider: "apilayer", status: "success" },
97
- { action: "discovery:manual test from opus", createdAt: 1774884274160, latencyMs: 50, provider: "apilayer", status: "success" },
98
- { action: "coinlayer_live", createdAt: 1774809262760, latencyMs: 641, provider: "apilayer", status: "success" },
99
- { action: "ipstack_lookup", createdAt: 1774809261626, latencyMs: 663, provider: "apilayer", status: "success" },
100
- { action: "fixer_latest", createdAt: 1774809261011, latencyMs: 747, provider: "apilayer", status: "error", errorMessage: "Request failed" },
101
- { action: "weatherstack_current", createdAt: 1774808005255, latencyMs: 1181, provider: "apilayer", status: "success" },
102
- ];
103
- let inserted = 0;
104
- for (const log of logs) {
105
- await ctx.db.insert("apiLogs", {
106
- workspaceId,
107
- sessionToken: "migrated-from-dev",
108
- provider: log.provider,
109
- action: log.action,
110
- status: log.status,
111
- latencyMs: log.latencyMs,
112
- direction: "inbound",
113
- errorMessage: log.errorMessage,
114
- createdAt: log.createdAt,
115
- });
116
- inserted++;
117
- }
118
- return { success: true, workspaceId, logsInserted: inserted };
119
- },
120
- });
121
- //# sourceMappingURL=migratePratham.js.map
@@ -1,2 +0,0 @@
1
- export declare const run: any;
2
- //# sourceMappingURL=migrateProviderWorkspaces.d.ts.map
@@ -1,55 +0,0 @@
1
- import { mutation } from "./_generated/server";
2
- // Backfill workspaceId on providerAPIs rows that have providerId but no workspaceId
3
- export const run = mutation({
4
- args: {},
5
- handler: async (ctx) => {
6
- const results = {};
7
- const pairs = [
8
- {
9
- providerEmail: "pratham.kumar@apilayer.com",
10
- workspaceEmail: "pratham.kumar@apilayer.com",
11
- label: "APILayer",
12
- },
13
- {
14
- providerEmail: "marketing@filestack.com",
15
- workspaceEmail: "marketing@filestack.com",
16
- label: "Filestack",
17
- },
18
- ];
19
- for (const pair of pairs) {
20
- // Get provider
21
- const provider = await ctx.db
22
- .query("providers")
23
- .withIndex("by_email", (q) => q.eq("email", pair.providerEmail))
24
- .first();
25
- if (!provider) {
26
- results[pair.label] = -1;
27
- continue;
28
- }
29
- // Get workspace
30
- const workspace = await ctx.db
31
- .query("workspaces")
32
- .withIndex("by_email", (q) => q.eq("email", pair.workspaceEmail))
33
- .first();
34
- if (!workspace) {
35
- results[pair.label] = -2;
36
- continue;
37
- }
38
- // Get all providerAPIs for this provider
39
- const apis = await ctx.db
40
- .query("providerAPIs")
41
- .withIndex("by_providerId", (q) => q.eq("providerId", provider._id))
42
- .collect();
43
- let patched = 0;
44
- for (const api of apis) {
45
- if (!api.workspaceId) {
46
- await ctx.db.patch(api._id, { workspaceId: workspace._id });
47
- patched++;
48
- }
49
- }
50
- results[pair.label] = patched;
51
- }
52
- return results;
53
- },
54
- });
55
- //# sourceMappingURL=migrateProviderWorkspaces.js.map
package/convex/mou.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export declare const getByPartnerId: any;
2
- export declare const create: any;
3
- export declare const sign: any;
4
- export declare const list: any;
5
- export declare const remove: any;
6
- //# sourceMappingURL=mou.d.ts.map
package/convex/mou.js DELETED
@@ -1,82 +0,0 @@
1
- import { v } from "convex/values";
2
- import { query, mutation } from "./_generated/server";
3
- // Get MOU by partnerId
4
- export const getByPartnerId = query({
5
- args: { partnerId: v.string() },
6
- handler: async (ctx, args) => {
7
- return await ctx.db
8
- .query("mouDocuments")
9
- .withIndex("by_partnerId", (q) => q.eq("partnerId", args.partnerId))
10
- .first();
11
- },
12
- });
13
- // Create new MOU document
14
- export const create = mutation({
15
- args: {
16
- partnerId: v.string(),
17
- partnerName: v.string(),
18
- partnerEmail: v.string(),
19
- documentHtml: v.string(),
20
- },
21
- handler: async (ctx, args) => {
22
- return await ctx.db.insert("mouDocuments", {
23
- ...args,
24
- status: "pending",
25
- createdAt: Date.now(),
26
- });
27
- },
28
- });
29
- // Sign MOU
30
- export const sign = mutation({
31
- args: {
32
- partnerId: v.string(),
33
- signatureDataUrl: v.string(),
34
- signerName: v.string(),
35
- signerTitle: v.string(),
36
- signerIp: v.optional(v.string()),
37
- },
38
- handler: async (ctx, args) => {
39
- const mou = await ctx.db
40
- .query("mouDocuments")
41
- .withIndex("by_partnerId", (q) => q.eq("partnerId", args.partnerId))
42
- .first();
43
- if (!mou) {
44
- throw new Error("MOU not found");
45
- }
46
- if (mou.status === "signed") {
47
- throw new Error("MOU already signed");
48
- }
49
- await ctx.db.patch(mou._id, {
50
- status: "signed",
51
- signedAt: Date.now(),
52
- signatureDataUrl: args.signatureDataUrl,
53
- signerName: args.signerName,
54
- signerTitle: args.signerTitle,
55
- signerIp: args.signerIp,
56
- });
57
- return { success: true };
58
- },
59
- });
60
- // List all MOUs (admin)
61
- export const list = query({
62
- args: {},
63
- handler: async (ctx) => {
64
- return await ctx.db.query("mouDocuments").collect();
65
- },
66
- });
67
- // Delete MOU (admin)
68
- export const remove = mutation({
69
- args: { partnerId: v.string() },
70
- handler: async (ctx, args) => {
71
- const mou = await ctx.db
72
- .query("mouDocuments")
73
- .withIndex("by_partnerId", (q) => q.eq("partnerId", args.partnerId))
74
- .first();
75
- if (mou) {
76
- await ctx.db.delete(mou._id);
77
- return { success: true, deleted: args.partnerId };
78
- }
79
- return { success: false, message: "MOU not found" };
80
- },
81
- });
82
- //# sourceMappingURL=mou.js.map
@@ -1,31 +0,0 @@
1
- export declare const BYOK_PROVIDERS: readonly [{
2
- readonly id: "brave_search";
3
- readonly name: "Brave Search";
4
- readonly icon: "🔍";
5
- }, {
6
- readonly id: "openrouter";
7
- readonly name: "OpenRouter";
8
- readonly icon: "🤖";
9
- }, {
10
- readonly id: "elevenlabs";
11
- readonly name: "ElevenLabs";
12
- readonly icon: "🎙️";
13
- }, {
14
- readonly id: "twilio";
15
- readonly name: "Twilio";
16
- readonly icon: "📞";
17
- }, {
18
- readonly id: "resend";
19
- readonly name: "Resend";
20
- readonly icon: "📧";
21
- }, {
22
- readonly id: "e2b";
23
- readonly name: "E2B";
24
- readonly icon: "💻";
25
- }];
26
- export declare const addKey: any;
27
- export declare const removeKey: any;
28
- export declare const getKeys: any;
29
- export declare const getKeyForExecution: any;
30
- export declare const getSupportedProviders: any;
31
- //# sourceMappingURL=providerKeys.d.ts.map