@nordsym/apiclaw 1.7.2 → 1.7.4

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 (230) hide show
  1. package/convex/_generated/api.d.ts +115 -0
  2. package/convex/_generated/api.js +23 -0
  3. package/convex/_generated/dataModel.d.ts +60 -0
  4. package/convex/_generated/server.d.ts +143 -0
  5. package/convex/_generated/server.js +93 -0
  6. package/convex/adminActivate.d.ts +3 -0
  7. package/convex/adminActivate.d.ts.map +1 -0
  8. package/convex/adminActivate.js +47 -0
  9. package/convex/adminActivate.js.map +1 -0
  10. package/convex/adminActivate.ts +54 -0
  11. package/convex/adminStats.d.ts +3 -0
  12. package/convex/adminStats.d.ts.map +1 -0
  13. package/convex/adminStats.js +42 -0
  14. package/convex/adminStats.js.map +1 -0
  15. package/convex/adminStats.ts +44 -0
  16. package/convex/agents.d.ts +76 -0
  17. package/convex/agents.d.ts.map +1 -0
  18. package/convex/agents.js +699 -0
  19. package/convex/agents.js.map +1 -0
  20. package/convex/agents.ts +814 -0
  21. package/convex/analytics.d.ts +5 -0
  22. package/convex/analytics.d.ts.map +1 -0
  23. package/convex/analytics.js +166 -0
  24. package/convex/analytics.js.map +1 -0
  25. package/convex/analytics.ts +186 -0
  26. package/convex/billing.d.ts +88 -0
  27. package/convex/billing.d.ts.map +1 -0
  28. package/convex/billing.js +655 -0
  29. package/convex/billing.js.map +1 -0
  30. package/convex/billing.ts +791 -0
  31. package/convex/capabilities.d.ts +9 -0
  32. package/convex/capabilities.d.ts.map +1 -0
  33. package/convex/capabilities.js +145 -0
  34. package/convex/capabilities.js.map +1 -0
  35. package/convex/capabilities.ts +157 -0
  36. package/convex/chains.d.ts +68 -0
  37. package/convex/chains.d.ts.map +1 -0
  38. package/convex/chains.js +1105 -0
  39. package/convex/chains.js.map +1 -0
  40. package/convex/chains.ts +1318 -0
  41. package/convex/credits.d.ts +25 -0
  42. package/convex/credits.d.ts.map +1 -0
  43. package/convex/credits.js +186 -0
  44. package/convex/credits.js.map +1 -0
  45. package/convex/credits.ts +211 -0
  46. package/convex/crons.d.ts +3 -0
  47. package/convex/crons.d.ts.map +1 -0
  48. package/convex/crons.js +17 -0
  49. package/convex/crons.js.map +1 -0
  50. package/convex/crons.ts +28 -0
  51. package/convex/directCall.d.ts +72 -0
  52. package/convex/directCall.d.ts.map +1 -0
  53. package/convex/directCall.js +627 -0
  54. package/convex/directCall.js.map +1 -0
  55. package/convex/directCall.ts +678 -0
  56. package/convex/earnProgress.d.ts +58 -0
  57. package/convex/earnProgress.d.ts.map +1 -0
  58. package/convex/earnProgress.js +649 -0
  59. package/convex/earnProgress.js.map +1 -0
  60. package/convex/earnProgress.ts +753 -0
  61. package/convex/email.d.ts +14 -0
  62. package/convex/email.d.ts.map +1 -0
  63. package/convex/email.js +300 -0
  64. package/convex/email.js.map +1 -0
  65. package/convex/email.ts +329 -0
  66. package/convex/feedback.d.ts +7 -0
  67. package/convex/feedback.d.ts.map +1 -0
  68. package/convex/feedback.js +227 -0
  69. package/convex/feedback.js.map +1 -0
  70. package/convex/feedback.ts +265 -0
  71. package/convex/http.d.ts +3 -0
  72. package/convex/http.d.ts.map +1 -0
  73. package/convex/http.js +1405 -0
  74. package/convex/http.js.map +1 -0
  75. package/convex/http.ts +1577 -0
  76. package/convex/inbound.d.ts +2 -0
  77. package/convex/inbound.d.ts.map +1 -0
  78. package/convex/inbound.js +32 -0
  79. package/convex/inbound.js.map +1 -0
  80. package/convex/inbound.ts +32 -0
  81. package/convex/logs.d.ts +38 -0
  82. package/convex/logs.d.ts.map +1 -0
  83. package/convex/logs.js +487 -0
  84. package/convex/logs.js.map +1 -0
  85. package/convex/logs.ts +550 -0
  86. package/convex/mou.d.ts +6 -0
  87. package/convex/mou.d.ts.map +1 -0
  88. package/convex/mou.js +82 -0
  89. package/convex/mou.js.map +1 -0
  90. package/convex/mou.ts +91 -0
  91. package/convex/providerKeys.d.ts +31 -0
  92. package/convex/providerKeys.d.ts.map +1 -0
  93. package/convex/providerKeys.js +257 -0
  94. package/convex/providerKeys.js.map +1 -0
  95. package/convex/providerKeys.ts +289 -0
  96. package/convex/providers.d.ts +32 -0
  97. package/convex/providers.d.ts.map +1 -0
  98. package/convex/providers.js +814 -0
  99. package/convex/providers.js.map +1 -0
  100. package/convex/providers.ts +909 -0
  101. package/convex/purchases.d.ts +7 -0
  102. package/convex/purchases.d.ts.map +1 -0
  103. package/convex/purchases.js +157 -0
  104. package/convex/purchases.js.map +1 -0
  105. package/convex/purchases.ts +183 -0
  106. package/convex/ratelimit.d.ts +4 -0
  107. package/convex/ratelimit.d.ts.map +1 -0
  108. package/convex/ratelimit.js +91 -0
  109. package/convex/ratelimit.js.map +1 -0
  110. package/convex/ratelimit.ts +104 -0
  111. package/convex/schema.ts +802 -0
  112. package/convex/searchLogs.d.ts +4 -0
  113. package/convex/searchLogs.d.ts.map +1 -0
  114. package/convex/searchLogs.js +129 -0
  115. package/convex/searchLogs.js.map +1 -0
  116. package/convex/searchLogs.ts +146 -0
  117. package/convex/seedAPILayerAPIs.d.ts +7 -0
  118. package/convex/seedAPILayerAPIs.d.ts.map +1 -0
  119. package/convex/seedAPILayerAPIs.js +177 -0
  120. package/convex/seedAPILayerAPIs.js.map +1 -0
  121. package/convex/seedAPILayerAPIs.ts +191 -0
  122. package/convex/seedDirectCallConfigs.d.ts +2 -0
  123. package/convex/seedDirectCallConfigs.d.ts.map +1 -0
  124. package/convex/seedDirectCallConfigs.js +324 -0
  125. package/convex/seedDirectCallConfigs.js.map +1 -0
  126. package/convex/seedDirectCallConfigs.ts +336 -0
  127. package/convex/seedPratham.d.ts +6 -0
  128. package/convex/seedPratham.d.ts.map +1 -0
  129. package/convex/seedPratham.js +150 -0
  130. package/convex/seedPratham.js.map +1 -0
  131. package/convex/seedPratham.ts +161 -0
  132. package/convex/spendAlerts.d.ts +36 -0
  133. package/convex/spendAlerts.d.ts.map +1 -0
  134. package/convex/spendAlerts.js +380 -0
  135. package/convex/spendAlerts.js.map +1 -0
  136. package/convex/spendAlerts.ts +442 -0
  137. package/convex/stripeActions.d.ts +19 -0
  138. package/convex/stripeActions.d.ts.map +1 -0
  139. package/convex/stripeActions.js +411 -0
  140. package/convex/stripeActions.js.map +1 -0
  141. package/convex/stripeActions.ts +512 -0
  142. package/convex/teams.d.ts +21 -0
  143. package/convex/teams.d.ts.map +1 -0
  144. package/convex/teams.js +215 -0
  145. package/convex/teams.js.map +1 -0
  146. package/convex/teams.ts +243 -0
  147. package/convex/telemetry.d.ts +4 -0
  148. package/convex/telemetry.d.ts.map +1 -0
  149. package/convex/telemetry.js +74 -0
  150. package/convex/telemetry.js.map +1 -0
  151. package/convex/telemetry.ts +81 -0
  152. package/convex/tsconfig.json +25 -0
  153. package/convex/updateAPIStatus.d.ts +6 -0
  154. package/convex/updateAPIStatus.d.ts.map +1 -0
  155. package/convex/updateAPIStatus.js +40 -0
  156. package/convex/updateAPIStatus.js.map +1 -0
  157. package/convex/updateAPIStatus.ts +45 -0
  158. package/convex/usage.d.ts +27 -0
  159. package/convex/usage.d.ts.map +1 -0
  160. package/convex/usage.js +229 -0
  161. package/convex/usage.js.map +1 -0
  162. package/convex/usage.ts +260 -0
  163. package/convex/waitlist.d.ts +4 -0
  164. package/convex/waitlist.d.ts.map +1 -0
  165. package/convex/waitlist.js +49 -0
  166. package/convex/waitlist.js.map +1 -0
  167. package/convex/waitlist.ts +55 -0
  168. package/convex/webhooks.d.ts +12 -0
  169. package/convex/webhooks.d.ts.map +1 -0
  170. package/convex/webhooks.js +410 -0
  171. package/convex/webhooks.js.map +1 -0
  172. package/convex/webhooks.ts +494 -0
  173. package/convex/workspaces.d.ts +31 -0
  174. package/convex/workspaces.d.ts.map +1 -0
  175. package/convex/workspaces.js +975 -0
  176. package/convex/workspaces.js.map +1 -0
  177. package/convex/workspaces.ts +1130 -0
  178. package/dist/bin.js +0 -0
  179. package/dist/capability-router.js +1 -1
  180. package/dist/capability-router.js.map +1 -1
  181. package/dist/execute.d.ts +2 -0
  182. package/dist/execute.d.ts.map +1 -1
  183. package/dist/execute.js +18 -4
  184. package/dist/execute.js.map +1 -1
  185. package/dist/http-api.js +1 -1
  186. package/dist/http-api.js.map +1 -1
  187. package/dist/index.js +1 -1
  188. package/dist/index.js.map +1 -1
  189. package/dist/mcp-analytics.d.ts +32 -0
  190. package/dist/mcp-analytics.d.ts.map +1 -0
  191. package/dist/mcp-analytics.js +130 -0
  192. package/dist/mcp-analytics.js.map +1 -0
  193. package/package.json +1 -1
  194. package/dist/chain-types.d.ts +0 -187
  195. package/dist/chain-types.d.ts.map +0 -1
  196. package/dist/chain-types.js +0 -33
  197. package/dist/chain-types.js.map +0 -1
  198. package/dist/registry/apis.json.bak +0 -248811
  199. package/dist/src/bin.js +0 -17
  200. package/dist/src/capability-router.js +0 -240
  201. package/dist/src/chainExecutor.js +0 -451
  202. package/dist/src/chainResolver.js +0 -518
  203. package/dist/src/cli/commands/doctor.js +0 -324
  204. package/dist/src/cli/commands/mcp-install.js +0 -255
  205. package/dist/src/cli/commands/restore.js +0 -259
  206. package/dist/src/cli/commands/setup.js +0 -205
  207. package/dist/src/cli/commands/uninstall.js +0 -188
  208. package/dist/src/cli/index.js +0 -111
  209. package/dist/src/cli.js +0 -302
  210. package/dist/src/confirmation.js +0 -240
  211. package/dist/src/credentials.js +0 -357
  212. package/dist/src/credits.js +0 -260
  213. package/dist/src/crypto.js +0 -66
  214. package/dist/src/discovery.js +0 -504
  215. package/dist/src/enterprise/env.js +0 -123
  216. package/dist/src/enterprise/script-generator.js +0 -460
  217. package/dist/src/execute-dynamic.js +0 -473
  218. package/dist/src/execute.js +0 -1727
  219. package/dist/src/index.js +0 -2062
  220. package/dist/src/metered.js +0 -80
  221. package/dist/src/open-apis.js +0 -276
  222. package/dist/src/proxy.js +0 -28
  223. package/dist/src/session.js +0 -86
  224. package/dist/src/stripe.js +0 -407
  225. package/dist/src/telemetry.js +0 -49
  226. package/dist/src/types.js +0 -2
  227. package/dist/src/utils/backup.js +0 -181
  228. package/dist/src/utils/config.js +0 -220
  229. package/dist/src/utils/os.js +0 -105
  230. package/dist/src/utils/paths.js +0 -159
@@ -0,0 +1,627 @@
1
+ import { v } from "convex/values";
2
+ import { mutation, query } from "./_generated/server";
3
+ // ============================================
4
+ // MUTATIONS
5
+ // ============================================
6
+ /**
7
+ * Save/update provider's Direct Call configuration
8
+ */
9
+ export const saveDirectCallConfig = mutation({
10
+ args: {
11
+ id: v.optional(v.id("providerDirectCall")),
12
+ providerId: v.id("providers"),
13
+ apiId: v.optional(v.id("providerAPIs")),
14
+ baseUrl: v.string(),
15
+ authType: v.string(),
16
+ authHeader: v.string(),
17
+ authPrefix: v.string(),
18
+ encryptedMasterKey: v.string(),
19
+ rateLimitPerUser: v.number(),
20
+ rateLimitPerDay: v.number(),
21
+ pricePerRequest: v.number(),
22
+ },
23
+ handler: async (ctx, args) => {
24
+ const now = Date.now();
25
+ if (args.id) {
26
+ // Update existing
27
+ await ctx.db.patch(args.id, {
28
+ baseUrl: args.baseUrl,
29
+ authType: args.authType,
30
+ authHeader: args.authHeader,
31
+ authPrefix: args.authPrefix,
32
+ encryptedMasterKey: args.encryptedMasterKey,
33
+ rateLimitPerUser: args.rateLimitPerUser,
34
+ rateLimitPerDay: args.rateLimitPerDay,
35
+ pricePerRequest: args.pricePerRequest,
36
+ updatedAt: now,
37
+ });
38
+ return args.id;
39
+ }
40
+ // Create new
41
+ return await ctx.db.insert("providerDirectCall", {
42
+ providerId: args.providerId,
43
+ apiId: args.apiId,
44
+ baseUrl: args.baseUrl,
45
+ authType: args.authType,
46
+ authHeader: args.authHeader,
47
+ authPrefix: args.authPrefix,
48
+ encryptedMasterKey: args.encryptedMasterKey,
49
+ rateLimitPerUser: args.rateLimitPerUser,
50
+ rateLimitPerDay: args.rateLimitPerDay,
51
+ pricePerRequest: args.pricePerRequest,
52
+ status: "draft",
53
+ createdAt: now,
54
+ updatedAt: now,
55
+ });
56
+ },
57
+ });
58
+ /**
59
+ * Save Direct Call config with token auth (used by frontend)
60
+ */
61
+ export const saveConfig = mutation({
62
+ args: {
63
+ token: v.string(),
64
+ config: v.object({
65
+ apiId: v.string(),
66
+ baseUrl: v.string(),
67
+ authType: v.string(),
68
+ authHeader: v.string(),
69
+ authPrefix: v.string(),
70
+ masterApiKey: v.optional(v.string()),
71
+ rateLimitPerUser: v.number(),
72
+ rateLimitPerDay: v.number(),
73
+ pricePerRequest: v.number(),
74
+ status: v.string(),
75
+ allowCustomerKeys: v.optional(v.boolean()),
76
+ requireCustomerKeys: v.optional(v.boolean()),
77
+ }),
78
+ },
79
+ handler: async (ctx, args) => {
80
+ // Verify session
81
+ const session = await ctx.db
82
+ .query("sessions")
83
+ .withIndex("by_token", (q) => q.eq("token", args.token))
84
+ .first();
85
+ if (!session || session.expiresAt < Date.now()) {
86
+ throw new Error("Invalid or expired session");
87
+ }
88
+ const now = Date.now();
89
+ const { config } = args;
90
+ // Check if config already exists for this API
91
+ const existing = await ctx.db
92
+ .query("providerDirectCall")
93
+ .filter((q) => q.eq(q.field("apiId"), config.apiId))
94
+ .first();
95
+ if (existing) {
96
+ // Update existing
97
+ const updateData = {
98
+ baseUrl: config.baseUrl,
99
+ authType: config.authType,
100
+ authHeader: config.authHeader,
101
+ authPrefix: config.authPrefix,
102
+ rateLimitPerUser: config.rateLimitPerUser,
103
+ rateLimitPerDay: config.rateLimitPerDay,
104
+ pricePerRequest: config.pricePerRequest,
105
+ status: config.status,
106
+ allowCustomerKeys: config.allowCustomerKeys ?? true,
107
+ requireCustomerKeys: config.requireCustomerKeys ?? false,
108
+ updatedAt: now,
109
+ };
110
+ // Only update master key if provided (not empty)
111
+ if (config.masterApiKey) {
112
+ updateData.encryptedMasterKey = config.masterApiKey; // In prod: encrypt this
113
+ }
114
+ await ctx.db.patch(existing._id, updateData);
115
+ return existing._id;
116
+ }
117
+ // Create new config
118
+ return await ctx.db.insert("providerDirectCall", {
119
+ providerId: session.providerId,
120
+ apiId: config.apiId,
121
+ baseUrl: config.baseUrl,
122
+ authType: config.authType,
123
+ authHeader: config.authHeader,
124
+ authPrefix: config.authPrefix,
125
+ encryptedMasterKey: config.masterApiKey || "",
126
+ rateLimitPerUser: config.rateLimitPerUser,
127
+ rateLimitPerDay: config.rateLimitPerDay,
128
+ pricePerRequest: config.pricePerRequest,
129
+ status: config.status,
130
+ allowCustomerKeys: config.allowCustomerKeys ?? true,
131
+ requireCustomerKeys: config.requireCustomerKeys ?? false,
132
+ createdAt: now,
133
+ updatedAt: now,
134
+ });
135
+ },
136
+ });
137
+ /**
138
+ * Create/update an action for a Direct Call config
139
+ */
140
+ export const saveAction = mutation({
141
+ args: {
142
+ id: v.optional(v.id("providerActions")),
143
+ directCallId: v.id("providerDirectCall"),
144
+ name: v.string(),
145
+ displayName: v.string(),
146
+ description: v.string(),
147
+ method: v.string(),
148
+ path: v.string(),
149
+ params: v.array(v.object({
150
+ name: v.string(),
151
+ type: v.string(),
152
+ required: v.boolean(),
153
+ description: v.string(),
154
+ default: v.optional(v.any()),
155
+ in: v.string(),
156
+ })),
157
+ responseMapping: v.array(v.object({
158
+ name: v.string(),
159
+ path: v.string(),
160
+ })),
161
+ enabled: v.boolean(),
162
+ },
163
+ handler: async (ctx, args) => {
164
+ const now = Date.now();
165
+ if (args.id) {
166
+ // Update existing
167
+ await ctx.db.patch(args.id, {
168
+ name: args.name,
169
+ displayName: args.displayName,
170
+ description: args.description,
171
+ method: args.method,
172
+ path: args.path,
173
+ params: args.params,
174
+ responseMapping: args.responseMapping,
175
+ enabled: args.enabled,
176
+ updatedAt: now,
177
+ });
178
+ return args.id;
179
+ }
180
+ // Create new
181
+ return await ctx.db.insert("providerActions", {
182
+ directCallId: args.directCallId,
183
+ name: args.name,
184
+ displayName: args.displayName,
185
+ description: args.description,
186
+ method: args.method,
187
+ path: args.path,
188
+ params: args.params,
189
+ responseMapping: args.responseMapping,
190
+ enabled: args.enabled,
191
+ createdAt: now,
192
+ updatedAt: now,
193
+ });
194
+ },
195
+ });
196
+ /**
197
+ * Delete an action
198
+ */
199
+ export const deleteAction = mutation({
200
+ args: {
201
+ id: v.id("providerActions"),
202
+ },
203
+ handler: async (ctx, args) => {
204
+ await ctx.db.delete(args.id);
205
+ return { success: true };
206
+ },
207
+ });
208
+ /**
209
+ * Publish Direct Call - set status to live
210
+ * Also marks apiListed earn progress for the provider's workspace
211
+ */
212
+ export const publishDirectCall = mutation({
213
+ args: {
214
+ id: v.id("providerDirectCall"),
215
+ },
216
+ handler: async (ctx, args) => {
217
+ const now = Date.now();
218
+ // Get the direct call config to find the provider
219
+ const config = await ctx.db.get(args.id);
220
+ if (!config) {
221
+ throw new Error("Direct Call config not found");
222
+ }
223
+ await ctx.db.patch(args.id, {
224
+ status: "live",
225
+ publishedAt: now,
226
+ updatedAt: now,
227
+ });
228
+ // Try to mark apiListed for earn progress
229
+ // First, get the provider to find their session/workspace
230
+ const provider = await ctx.db.get(config.providerId);
231
+ if (provider) {
232
+ // Find workspace by provider email
233
+ const workspace = await ctx.db
234
+ .query("workspaces")
235
+ .withIndex("by_email", (q) => q.eq("email", provider.email))
236
+ .first();
237
+ if (workspace) {
238
+ // Update earn progress
239
+ const earnProgress = await ctx.db
240
+ .query("earnProgress")
241
+ .withIndex("by_workspaceId", (q) => q.eq("workspaceId", workspace._id))
242
+ .first();
243
+ if (earnProgress && !earnProgress.apiListed) {
244
+ const newTotal = calculateEarnTotal({ ...earnProgress, apiListed: true });
245
+ await ctx.db.patch(earnProgress._id, {
246
+ apiListed: true,
247
+ apiListedAt: now,
248
+ totalEarned: newTotal,
249
+ updatedAt: now,
250
+ });
251
+ // Add 10 calls to workspace limit
252
+ await ctx.db.patch(workspace._id, {
253
+ usageLimit: workspace.usageLimit + 10,
254
+ updatedAt: now,
255
+ });
256
+ }
257
+ else if (!earnProgress) {
258
+ // Create earn progress with apiListed
259
+ await ctx.db.insert("earnProgress", {
260
+ workspaceId: workspace._id,
261
+ firstDirectCall: false,
262
+ apisUsed: [],
263
+ apisUsedComplete: false,
264
+ agentListed: false,
265
+ apiListed: true,
266
+ apiListedAt: now,
267
+ byokSetup: false,
268
+ githubStarred: false,
269
+ twitterFollowed: false,
270
+ referralCount: 0,
271
+ totalEarned: 10,
272
+ createdAt: now,
273
+ updatedAt: now,
274
+ });
275
+ // Add 10 calls to workspace limit
276
+ await ctx.db.patch(workspace._id, {
277
+ usageLimit: workspace.usageLimit + 10,
278
+ updatedAt: now,
279
+ });
280
+ }
281
+ }
282
+ }
283
+ return { success: true, publishedAt: now };
284
+ },
285
+ });
286
+ // Helper to calculate earn total (duplicated to avoid circular import)
287
+ function calculateEarnTotal(progress) {
288
+ let total = 0;
289
+ if (progress.firstDirectCall)
290
+ total += 15;
291
+ if (progress.apisUsedComplete)
292
+ total += 10;
293
+ if (progress.agentListed)
294
+ total += 10;
295
+ if (progress.apiListed)
296
+ total += 10;
297
+ if (progress.byokSetup)
298
+ total += 5;
299
+ if (progress.githubStarred)
300
+ total += 10;
301
+ if (progress.twitterFollowed)
302
+ total += 5;
303
+ total += (progress.referralCount || 0) * 10;
304
+ return total;
305
+ }
306
+ /**
307
+ * Set Direct Call status (draft, testing, live)
308
+ */
309
+ export const setStatus = mutation({
310
+ args: {
311
+ id: v.id("providerDirectCall"),
312
+ status: v.string(),
313
+ },
314
+ handler: async (ctx, args) => {
315
+ const now = Date.now();
316
+ const update = {
317
+ status: args.status,
318
+ updatedAt: now,
319
+ };
320
+ if (args.status === "live") {
321
+ update.publishedAt = now;
322
+ }
323
+ await ctx.db.patch(args.id, update);
324
+ return { success: true };
325
+ },
326
+ });
327
+ // ============================================
328
+ // QUERIES
329
+ // ============================================
330
+ /**
331
+ * Get Direct Call config by providerId
332
+ */
333
+ export const getDirectCallConfig = query({
334
+ args: {
335
+ providerId: v.id("providers"),
336
+ },
337
+ handler: async (ctx, args) => {
338
+ return await ctx.db
339
+ .query("providerDirectCall")
340
+ .withIndex("by_providerId", (q) => q.eq("providerId", args.providerId))
341
+ .first();
342
+ },
343
+ });
344
+ /**
345
+ * Get Direct Call config by ID
346
+ */
347
+ export const getDirectCallConfigById = query({
348
+ args: {
349
+ id: v.id("providerDirectCall"),
350
+ },
351
+ handler: async (ctx, args) => {
352
+ return await ctx.db.get(args.id);
353
+ },
354
+ });
355
+ /**
356
+ * Get Direct Call config by API ID
357
+ */
358
+ export const getDirectCallConfigByApiId = query({
359
+ args: {
360
+ apiId: v.string(), // Accept string since that's what frontend passes
361
+ },
362
+ handler: async (ctx, args) => {
363
+ return await ctx.db
364
+ .query("providerDirectCall")
365
+ .filter((q) => q.eq(q.field("apiId"), args.apiId))
366
+ .first();
367
+ },
368
+ });
369
+ /**
370
+ * Get all actions for a Direct Call config
371
+ */
372
+ export const getActions = query({
373
+ args: {
374
+ directCallId: v.id("providerDirectCall"),
375
+ },
376
+ handler: async (ctx, args) => {
377
+ return await ctx.db
378
+ .query("providerActions")
379
+ .withIndex("by_directCallId", (q) => q.eq("directCallId", args.directCallId))
380
+ .collect();
381
+ },
382
+ });
383
+ /**
384
+ * Get single action by directCallId + name
385
+ */
386
+ export const getActionByName = query({
387
+ args: {
388
+ directCallId: v.id("providerDirectCall"),
389
+ name: v.string(),
390
+ },
391
+ handler: async (ctx, args) => {
392
+ return await ctx.db
393
+ .query("providerActions")
394
+ .withIndex("by_directCallId_name", (q) => q.eq("directCallId", args.directCallId).eq("name", args.name))
395
+ .first();
396
+ },
397
+ });
398
+ /**
399
+ * Get action by ID
400
+ */
401
+ export const getActionById = query({
402
+ args: {
403
+ id: v.id("providerActions"),
404
+ },
405
+ handler: async (ctx, args) => {
406
+ return await ctx.db.get(args.id);
407
+ },
408
+ });
409
+ /**
410
+ * DEBUG: Get all Direct Call configs
411
+ */
412
+ export const getAllConfigs = query({
413
+ args: {},
414
+ handler: async (ctx) => {
415
+ return await ctx.db.query("providerDirectCall").collect();
416
+ },
417
+ });
418
+ /**
419
+ * Get all live Direct Call configs (for public API discovery)
420
+ */
421
+ export const getLiveConfigs = query({
422
+ args: {},
423
+ handler: async (ctx) => {
424
+ return await ctx.db
425
+ .query("providerDirectCall")
426
+ .withIndex("by_status", (q) => q.eq("status", "live"))
427
+ .collect();
428
+ },
429
+ });
430
+ /**
431
+ * Get Direct Call config by API ID (for test console)
432
+ */
433
+ export const getConfig = query({
434
+ args: {
435
+ apiId: v.string(),
436
+ },
437
+ handler: async (ctx, args) => {
438
+ // Try as providerAPIs ID first
439
+ const config = await ctx.db
440
+ .query("providerDirectCall")
441
+ .withIndex("by_apiId")
442
+ .filter((q) => q.eq(q.field("apiId"), args.apiId))
443
+ .first();
444
+ return config;
445
+ },
446
+ });
447
+ /**
448
+ * Get Direct Call config by API slug (for MCP/agent execution)
449
+ * Looks up API by name, then gets the Direct Call config
450
+ */
451
+ export const getByApiSlug = query({
452
+ args: {
453
+ slug: v.string(),
454
+ },
455
+ handler: async (ctx, args) => {
456
+ // Normalize slug (lowercase, replace spaces/dashes)
457
+ const normalizedSlug = args.slug.toLowerCase().replace(/[\s-]/g, '_');
458
+ // Find API by name (case-insensitive match)
459
+ const apis = await ctx.db.query("providerAPIs").collect();
460
+ const api = apis.find(a => a.name.toLowerCase().replace(/[\s-]/g, '_') === normalizedSlug ||
461
+ a.name.toLowerCase() === args.slug.toLowerCase());
462
+ if (!api) {
463
+ return null;
464
+ }
465
+ // Get Direct Call config for this API
466
+ const config = await ctx.db
467
+ .query("providerDirectCall")
468
+ .withIndex("by_apiId")
469
+ .filter((q) => q.eq(q.field("apiId"), api._id))
470
+ .first();
471
+ if (!config || config.status !== 'live') {
472
+ return null;
473
+ }
474
+ return {
475
+ ...config,
476
+ apiName: api.name,
477
+ apiSlug: normalizedSlug,
478
+ };
479
+ },
480
+ });
481
+ // ============================================
482
+ // TEST ACTION
483
+ // ============================================
484
+ /**
485
+ * Test an action by calling the actual provider API
486
+ * For V1: Provider passes their own test key
487
+ */
488
+ export const testAction = mutation({
489
+ args: {
490
+ token: v.string(),
491
+ directCallId: v.id("providerDirectCall"),
492
+ actionId: v.id("providerActions"),
493
+ params: v.record(v.string(), v.any()),
494
+ testKey: v.optional(v.string()),
495
+ },
496
+ handler: async (ctx, args) => {
497
+ const startTime = Date.now();
498
+ // 1. Verify provider session
499
+ const session = await ctx.db
500
+ .query("sessions")
501
+ .withIndex("by_token", (q) => q.eq("token", args.token))
502
+ .first();
503
+ if (!session || session.expiresAt < Date.now()) {
504
+ return {
505
+ success: false,
506
+ error: "Unauthorized - invalid or expired session",
507
+ latencyMs: Date.now() - startTime,
508
+ };
509
+ }
510
+ // 2. Get directCallConfig
511
+ const config = await ctx.db.get(args.directCallId);
512
+ if (!config) {
513
+ return {
514
+ success: false,
515
+ error: "Direct Call config not found",
516
+ latencyMs: Date.now() - startTime,
517
+ };
518
+ }
519
+ // Verify ownership
520
+ if (config.providerId !== session.providerId) {
521
+ return {
522
+ success: false,
523
+ error: "Unauthorized - you don't own this config",
524
+ latencyMs: Date.now() - startTime,
525
+ };
526
+ }
527
+ // 3. Get action
528
+ const action = await ctx.db.get(args.actionId);
529
+ if (!action) {
530
+ return {
531
+ success: false,
532
+ error: "Action not found",
533
+ latencyMs: Date.now() - startTime,
534
+ };
535
+ }
536
+ // 4. Get API key (use testKey if provided, else use stored key)
537
+ // Note: For production, encryptedMasterKey would need server-side decryption
538
+ // For V1 test console, we use testKey directly
539
+ const apiKey = args.testKey || config.encryptedMasterKey;
540
+ if (!apiKey) {
541
+ return {
542
+ success: false,
543
+ error: "No API key provided. Add a test key or configure master key.",
544
+ latencyMs: Date.now() - startTime,
545
+ };
546
+ }
547
+ // 5. Build URL with path params
548
+ let path = action.path;
549
+ const queryParams = {};
550
+ const bodyParams = {};
551
+ for (const paramDef of action.params) {
552
+ const value = args.params[paramDef.name];
553
+ if (value === undefined || value === "")
554
+ continue;
555
+ if (paramDef.in === "path") {
556
+ // Replace {paramName} in path
557
+ path = path.replace(`{${paramDef.name}}`, String(value));
558
+ }
559
+ else if (paramDef.in === "query") {
560
+ queryParams[paramDef.name] = String(value);
561
+ }
562
+ else if (paramDef.in === "body") {
563
+ bodyParams[paramDef.name] = value;
564
+ }
565
+ }
566
+ // Build full URL
567
+ let url = config.baseUrl.replace(/\/$/, "") + path;
568
+ const queryString = new URLSearchParams(queryParams).toString();
569
+ if (queryString) {
570
+ url += (url.includes("?") ? "&" : "?") + queryString;
571
+ }
572
+ // 6. Build headers with auth
573
+ const headers = {
574
+ "Content-Type": "application/json",
575
+ "Accept": "application/json",
576
+ };
577
+ // Add auth header
578
+ if (config.authType !== "none" && apiKey) {
579
+ const authValue = config.authPrefix
580
+ ? `${config.authPrefix}${apiKey}`
581
+ : apiKey;
582
+ headers[config.authHeader] = authValue;
583
+ }
584
+ // 7. Build fetch options
585
+ const fetchOptions = {
586
+ method: action.method,
587
+ headers,
588
+ };
589
+ // Add body for non-GET requests
590
+ if (action.method !== "GET" && Object.keys(bodyParams).length > 0) {
591
+ fetchOptions.body = JSON.stringify(bodyParams);
592
+ }
593
+ // 8. Execute request
594
+ try {
595
+ const response = await fetch(url, fetchOptions);
596
+ const latencyMs = Date.now() - startTime;
597
+ // Try to parse response as JSON, fallback to text
598
+ let data;
599
+ const contentType = response.headers.get("content-type") || "";
600
+ if (contentType.includes("application/json")) {
601
+ try {
602
+ data = await response.json();
603
+ }
604
+ catch {
605
+ data = await response.text();
606
+ }
607
+ }
608
+ else {
609
+ data = await response.text();
610
+ }
611
+ return {
612
+ success: response.ok,
613
+ status: response.status,
614
+ data,
615
+ latencyMs,
616
+ };
617
+ }
618
+ catch (error) {
619
+ return {
620
+ success: false,
621
+ error: error instanceof Error ? error.message : "Request failed",
622
+ latencyMs: Date.now() - startTime,
623
+ };
624
+ }
625
+ },
626
+ });
627
+ //# sourceMappingURL=directCall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directCall.js","sourceRoot":"","sources":["directCall.ts"],"names":[],"mappings":"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"}