@nordsym/apiclaw 1.7.3 → 1.7.5

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 (219) 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 +48 -0
  82. package/convex/logs.d.ts.map +1 -0
  83. package/convex/logs.js +592 -0
  84. package/convex/logs.js.map +1 -0
  85. package/convex/logs.ts +662 -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 +805 -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/index.js +9 -0
  180. package/dist/index.js.map +1 -1
  181. package/package.json +1 -1
  182. package/src/index.ts +10 -0
  183. package/dist/chain-types.d.ts +0 -187
  184. package/dist/chain-types.d.ts.map +0 -1
  185. package/dist/chain-types.js +0 -33
  186. package/dist/chain-types.js.map +0 -1
  187. package/dist/registry/apis.json.bak +0 -248811
  188. package/dist/src/bin.js +0 -17
  189. package/dist/src/capability-router.js +0 -240
  190. package/dist/src/chainExecutor.js +0 -451
  191. package/dist/src/chainResolver.js +0 -518
  192. package/dist/src/cli/commands/doctor.js +0 -324
  193. package/dist/src/cli/commands/mcp-install.js +0 -255
  194. package/dist/src/cli/commands/restore.js +0 -259
  195. package/dist/src/cli/commands/setup.js +0 -205
  196. package/dist/src/cli/commands/uninstall.js +0 -188
  197. package/dist/src/cli/index.js +0 -111
  198. package/dist/src/cli.js +0 -302
  199. package/dist/src/confirmation.js +0 -240
  200. package/dist/src/credentials.js +0 -357
  201. package/dist/src/credits.js +0 -260
  202. package/dist/src/crypto.js +0 -66
  203. package/dist/src/discovery.js +0 -504
  204. package/dist/src/enterprise/env.js +0 -123
  205. package/dist/src/enterprise/script-generator.js +0 -460
  206. package/dist/src/execute-dynamic.js +0 -473
  207. package/dist/src/execute.js +0 -1727
  208. package/dist/src/index.js +0 -2062
  209. package/dist/src/metered.js +0 -80
  210. package/dist/src/open-apis.js +0 -276
  211. package/dist/src/proxy.js +0 -28
  212. package/dist/src/session.js +0 -86
  213. package/dist/src/stripe.js +0 -407
  214. package/dist/src/telemetry.js +0 -49
  215. package/dist/src/types.js +0 -2
  216. package/dist/src/utils/backup.js +0 -181
  217. package/dist/src/utils/config.js +0 -220
  218. package/dist/src/utils/os.js +0 -105
  219. package/dist/src/utils/paths.js +0 -159
package/convex/logs.js ADDED
@@ -0,0 +1,592 @@
1
+ import { v } from "convex/values";
2
+ import { mutation, query } from "./_generated/server";
3
+ // ============================================
4
+ // MUTATIONS
5
+ // ============================================
6
+ /**
7
+ * Create a log entry for an API call
8
+ * Called after each Direct Call execution
9
+ */
10
+ export const createLog = mutation({
11
+ args: {
12
+ token: v.string(),
13
+ provider: v.string(),
14
+ action: v.string(),
15
+ status: v.union(v.literal("success"), v.literal("error")),
16
+ latencyMs: v.number(),
17
+ errorMessage: v.optional(v.string()),
18
+ subagentId: v.optional(v.string()), // from X-APIClaw-Subagent header
19
+ },
20
+ handler: async (ctx, args) => {
21
+ // Verify session and get workspace
22
+ const session = await ctx.db
23
+ .query("agentSessions")
24
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", args.token))
25
+ .first();
26
+ if (!session) {
27
+ throw new Error("Invalid session token");
28
+ }
29
+ // Create log entry
30
+ return await ctx.db.insert("apiLogs", {
31
+ workspaceId: session.workspaceId,
32
+ sessionToken: args.token,
33
+ subagentId: args.subagentId,
34
+ provider: args.provider,
35
+ action: args.action,
36
+ status: args.status,
37
+ latencyMs: args.latencyMs,
38
+ errorMessage: args.errorMessage,
39
+ createdAt: Date.now(),
40
+ });
41
+ },
42
+ });
43
+ /**
44
+ * Internal log creation (when workspaceId is already known)
45
+ * Used by execute functions that have already verified the session
46
+ */
47
+ export const createLogInternal = mutation({
48
+ args: {
49
+ workspaceId: v.id("workspaces"),
50
+ sessionToken: v.string(),
51
+ provider: v.string(),
52
+ action: v.string(),
53
+ status: v.union(v.literal("success"), v.literal("error")),
54
+ latencyMs: v.number(),
55
+ errorMessage: v.optional(v.string()),
56
+ subagentId: v.optional(v.string()), // from X-APIClaw-Subagent header
57
+ },
58
+ handler: async (ctx, args) => {
59
+ return await ctx.db.insert("apiLogs", {
60
+ workspaceId: args.workspaceId,
61
+ sessionToken: args.sessionToken,
62
+ subagentId: args.subagentId,
63
+ provider: args.provider,
64
+ action: args.action,
65
+ status: args.status,
66
+ latencyMs: args.latencyMs,
67
+ errorMessage: args.errorMessage,
68
+ createdAt: Date.now(),
69
+ });
70
+ },
71
+ });
72
+ /**
73
+ * Log an inbound call to a provider's workspace
74
+ * Called when someone uses an API that belongs to another workspace
75
+ */
76
+ export const logProviderCall = mutation({
77
+ args: {
78
+ provider: v.string(),
79
+ action: v.string(),
80
+ status: v.union(v.literal("success"), v.literal("error")),
81
+ latencyMs: v.number(),
82
+ callerWorkspaceId: v.string(),
83
+ subagentId: v.optional(v.string()),
84
+ errorMessage: v.optional(v.string()),
85
+ },
86
+ handler: async (ctx, args) => {
87
+ // Map provider to workspace email
88
+ const providerEmailMap = {
89
+ apilayer: "gustav_hemmingsson@hotmail.com",
90
+ };
91
+ const providerEmail = providerEmailMap[args.provider];
92
+ if (!providerEmail)
93
+ return null; // no workspace for this provider
94
+ const workspace = await ctx.db
95
+ .query("workspaces")
96
+ .withIndex("by_email", (q) => q.eq("email", providerEmail))
97
+ .first();
98
+ if (!workspace)
99
+ return null;
100
+ return await ctx.db.insert("apiLogs", {
101
+ workspaceId: workspace._id,
102
+ sessionToken: "",
103
+ provider: args.provider,
104
+ action: args.action,
105
+ status: args.status,
106
+ latencyMs: args.latencyMs,
107
+ direction: "inbound",
108
+ callerWorkspaceId: args.callerWorkspaceId,
109
+ subagentId: args.subagentId,
110
+ errorMessage: args.errorMessage,
111
+ createdAt: Date.now(),
112
+ });
113
+ },
114
+ });
115
+ /**
116
+ * Get analytics for a provider workspace (inbound calls to their APIs)
117
+ * Used by API Analytics tab in workspace dashboard
118
+ */
119
+ export const getProviderAnalytics = query({
120
+ args: {
121
+ token: v.string(),
122
+ hoursBack: v.optional(v.number()),
123
+ },
124
+ handler: async (ctx, { token, hoursBack = 168 }) => {
125
+ const session = await ctx.db
126
+ .query("agentSessions")
127
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", token))
128
+ .first();
129
+ if (!session)
130
+ return null;
131
+ const since = Date.now() - hoursBack * 60 * 60 * 1000;
132
+ // Get all logs for this workspace
133
+ const allLogs = await ctx.db
134
+ .query("apiLogs")
135
+ .withIndex("by_workspaceId", (q) => q.eq("workspaceId", session.workspaceId))
136
+ .collect();
137
+ const periodLogs = allLogs.filter((l) => l.createdAt >= since);
138
+ const inboundLogs = periodLogs.filter((l) => l.direction === "inbound");
139
+ const outboundLogs = periodLogs.filter((l) => l.direction !== "inbound");
140
+ // Daily buckets
141
+ const byDay = {};
142
+ periodLogs.forEach((l) => {
143
+ const day = new Date(l.createdAt).toISOString().split("T")[0];
144
+ byDay[day] = (byDay[day] || 0) + 1;
145
+ });
146
+ // By provider
147
+ const byProvider = {};
148
+ periodLogs.forEach((l) => {
149
+ if (!byProvider[l.provider])
150
+ byProvider[l.provider] = { calls: 0, success: 0 };
151
+ byProvider[l.provider].calls++;
152
+ if (l.status === "success")
153
+ byProvider[l.provider].success++;
154
+ });
155
+ // Unique callers (for inbound)
156
+ const uniqueCallers = new Set(inboundLogs.map((l) => l.callerWorkspaceId).filter(Boolean)).size;
157
+ return {
158
+ totalCalls: periodLogs.length,
159
+ inboundCalls: inboundLogs.length,
160
+ outboundCalls: outboundLogs.length,
161
+ uniqueCallers,
162
+ byDay: Object.entries(byDay)
163
+ .map(([date, calls]) => ({ date, calls }))
164
+ .sort((a, b) => a.date.localeCompare(b.date)),
165
+ byProvider: Object.entries(byProvider)
166
+ .map(([provider, stats]) => ({ provider, ...stats }))
167
+ .sort((a, b) => b.calls - a.calls),
168
+ successRate: periodLogs.length > 0
169
+ ? (periodLogs.filter((l) => l.status === "success").length / periodLogs.length) * 100
170
+ : 100,
171
+ avgLatency: periodLogs.length > 0
172
+ ? periodLogs.reduce((sum, l) => sum + l.latencyMs, 0) / periodLogs.length
173
+ : 0,
174
+ };
175
+ },
176
+ });
177
+ // ============================================
178
+ // HELPER: Get month start
179
+ // ============================================
180
+ function getMonthStart() {
181
+ const now = new Date();
182
+ return new Date(now.getUTCFullYear(), now.getUTCMonth(), 1, 0, 0, 0, 0).getTime();
183
+ }
184
+ /**
185
+ * Combined log creation + spend tracking (PRD 2.6)
186
+ * Creates log entry, tracks spend, returns budget status
187
+ * Returns shouldSendAlert: true if 80% threshold crossed (caller should send email)
188
+ */
189
+ export const createLogWithSpend = mutation({
190
+ args: {
191
+ workspaceId: v.id("workspaces"),
192
+ sessionToken: v.string(),
193
+ provider: v.string(),
194
+ action: v.string(),
195
+ status: v.union(v.literal("success"), v.literal("error")),
196
+ latencyMs: v.number(),
197
+ costCents: v.number(), // Cost in USD cents
198
+ errorMessage: v.optional(v.string()),
199
+ subagentId: v.optional(v.string()),
200
+ },
201
+ handler: async (ctx, args) => {
202
+ const now = Date.now();
203
+ const monthStart = getMonthStart();
204
+ // 1. Create log entry
205
+ const logId = await ctx.db.insert("apiLogs", {
206
+ workspaceId: args.workspaceId,
207
+ sessionToken: args.sessionToken,
208
+ subagentId: args.subagentId,
209
+ provider: args.provider,
210
+ action: args.action,
211
+ status: args.status,
212
+ latencyMs: args.latencyMs,
213
+ errorMessage: args.errorMessage,
214
+ createdAt: now,
215
+ });
216
+ // 2. Track spend if successful call with cost
217
+ if (args.status === "success" && args.costCents > 0) {
218
+ const workspace = await ctx.db.get(args.workspaceId);
219
+ if (!workspace) {
220
+ return { logId, spendTracked: false };
221
+ }
222
+ // Reset monthly spend if new month
223
+ let currentSpend = workspace.monthlySpendCents || 0;
224
+ if (!workspace.lastSpendResetAt || workspace.lastSpendResetAt < monthStart) {
225
+ currentSpend = 0;
226
+ }
227
+ // Add new spend
228
+ const newSpend = currentSpend + args.costCents;
229
+ const budgetCap = workspace.budgetCap;
230
+ // Update workspace
231
+ await ctx.db.patch(args.workspaceId, {
232
+ monthlySpendCents: newSpend,
233
+ lastSpendResetAt: monthStart,
234
+ updatedAt: now,
235
+ });
236
+ // Check if we need to send alert (80% threshold)
237
+ let shouldSendAlert = false;
238
+ let budgetExceeded = false;
239
+ if (budgetCap && budgetCap > 0) {
240
+ const threshold = budgetCap * 0.8;
241
+ const alertAlreadySentThisMonth = workspace.budgetAlertSentAt &&
242
+ workspace.budgetAlertSentAt >= monthStart;
243
+ // Check if at 80% and alert not yet sent
244
+ if (newSpend >= threshold && !alertAlreadySentThisMonth) {
245
+ shouldSendAlert = true;
246
+ await ctx.db.patch(args.workspaceId, {
247
+ budgetAlertSentAt: now,
248
+ });
249
+ }
250
+ // Check if budget exceeded
251
+ if (newSpend >= budgetCap) {
252
+ budgetExceeded = true;
253
+ }
254
+ }
255
+ return {
256
+ logId,
257
+ spendTracked: true,
258
+ currentSpendCents: newSpend,
259
+ budgetCapCents: budgetCap || null,
260
+ budgetPercentage: budgetCap ? Math.round((newSpend / budgetCap) * 100) : null,
261
+ shouldSendAlert,
262
+ budgetExceeded,
263
+ email: workspace.email,
264
+ };
265
+ }
266
+ return { logId, spendTracked: false };
267
+ },
268
+ });
269
+ // ============================================
270
+ // QUERIES
271
+ // ============================================
272
+ /**
273
+ * Get logs for a workspace with pagination and filters
274
+ */
275
+ export const getLogs = query({
276
+ args: {
277
+ token: v.string(),
278
+ limit: v.optional(v.number()),
279
+ cursor: v.optional(v.number()), // createdAt timestamp for pagination
280
+ status: v.optional(v.union(v.literal("success"), v.literal("error"), v.literal("all"))),
281
+ provider: v.optional(v.string()),
282
+ subagentId: v.optional(v.string()), // filter by subagent
283
+ },
284
+ handler: async (ctx, args) => {
285
+ const limit = args.limit ?? 50;
286
+ const status = args.status ?? "all";
287
+ const provider = args.provider;
288
+ const subagentId = args.subagentId;
289
+ const cursor = args.cursor;
290
+ // Verify session
291
+ const session = await ctx.db
292
+ .query("agentSessions")
293
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", args.token))
294
+ .first();
295
+ if (!session) {
296
+ return { logs: [], hasMore: false };
297
+ }
298
+ // Get logs for workspace
299
+ let query = ctx.db
300
+ .query("apiLogs")
301
+ .withIndex("by_workspaceId_createdAt", (q) => q.eq("workspaceId", session.workspaceId))
302
+ .order("desc");
303
+ // Apply cursor (pagination)
304
+ if (cursor) {
305
+ query = query.filter((q) => q.lt(q.field("createdAt"), cursor));
306
+ }
307
+ // Collect more than limit to check hasMore
308
+ const allLogs = await query.take(limit + 1);
309
+ // Apply filters in-memory (Convex doesn't support complex compound filters)
310
+ let filteredLogs = allLogs;
311
+ if (status !== "all") {
312
+ filteredLogs = filteredLogs.filter((log) => log.status === status);
313
+ }
314
+ if (provider && provider !== "all") {
315
+ filteredLogs = filteredLogs.filter((log) => log.provider === provider);
316
+ }
317
+ // Filter by subagent
318
+ if (subagentId) {
319
+ if (subagentId === "main") {
320
+ // Main agent calls (no subagentId)
321
+ filteredLogs = filteredLogs.filter((log) => !log.subagentId);
322
+ }
323
+ else {
324
+ filteredLogs = filteredLogs.filter((log) => log.subagentId === subagentId);
325
+ }
326
+ }
327
+ const hasMore = filteredLogs.length > limit;
328
+ const logs = filteredLogs.slice(0, limit);
329
+ return {
330
+ logs: logs.map((log) => ({
331
+ id: log._id,
332
+ provider: log.provider,
333
+ action: log.action,
334
+ status: log.status,
335
+ latencyMs: log.latencyMs,
336
+ errorMessage: log.errorMessage,
337
+ subagentId: log.subagentId || null,
338
+ createdAt: log.createdAt,
339
+ })),
340
+ hasMore,
341
+ nextCursor: logs.length > 0 ? logs[logs.length - 1].createdAt : undefined,
342
+ };
343
+ },
344
+ });
345
+ /**
346
+ * Get aggregated log stats for workspace
347
+ */
348
+ export const getLogStats = query({
349
+ args: {
350
+ token: v.string(),
351
+ periodDays: v.optional(v.number()),
352
+ },
353
+ handler: async (ctx, args) => {
354
+ const periodDays = args.periodDays ?? 7;
355
+ // Verify session
356
+ const session = await ctx.db
357
+ .query("agentSessions")
358
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", args.token))
359
+ .first();
360
+ if (!session) {
361
+ return {
362
+ totalCalls: 0,
363
+ successCount: 0,
364
+ errorCount: 0,
365
+ successRate: 0,
366
+ avgLatency: 0,
367
+ byProvider: [],
368
+ byDay: [],
369
+ };
370
+ }
371
+ const now = Date.now();
372
+ const periodStart = now - periodDays * 24 * 60 * 60 * 1000;
373
+ // Get all logs for this workspace in the period
374
+ const logs = await ctx.db
375
+ .query("apiLogs")
376
+ .withIndex("by_workspaceId_createdAt", (q) => q.eq("workspaceId", session.workspaceId))
377
+ .filter((q) => q.gte(q.field("createdAt"), periodStart))
378
+ .collect();
379
+ const totalCalls = logs.length;
380
+ const successCount = logs.filter((l) => l.status === "success").length;
381
+ const errorCount = logs.filter((l) => l.status === "error").length;
382
+ const successRate = totalCalls > 0 ? (successCount / totalCalls) * 100 : 0;
383
+ const totalLatency = logs.reduce((sum, l) => sum + l.latencyMs, 0);
384
+ const avgLatency = totalCalls > 0 ? Math.round(totalLatency / totalCalls) : 0;
385
+ // Group by provider
386
+ const byProviderMap = {};
387
+ for (const log of logs) {
388
+ if (!byProviderMap[log.provider]) {
389
+ byProviderMap[log.provider] = { calls: 0, success: 0, error: 0, latency: 0 };
390
+ }
391
+ byProviderMap[log.provider].calls++;
392
+ byProviderMap[log.provider].latency += log.latencyMs;
393
+ if (log.status === "success") {
394
+ byProviderMap[log.provider].success++;
395
+ }
396
+ else {
397
+ byProviderMap[log.provider].error++;
398
+ }
399
+ }
400
+ const byProvider = Object.entries(byProviderMap)
401
+ .map(([provider, data]) => ({
402
+ provider,
403
+ calls: data.calls,
404
+ successRate: data.calls > 0 ? (data.success / data.calls) * 100 : 0,
405
+ avgLatency: data.calls > 0 ? Math.round(data.latency / data.calls) : 0,
406
+ }))
407
+ .sort((a, b) => b.calls - a.calls);
408
+ // Group by day
409
+ const byDayMap = {};
410
+ for (const log of logs) {
411
+ const day = new Date(log.createdAt).toISOString().split("T")[0];
412
+ if (!byDayMap[day]) {
413
+ byDayMap[day] = { calls: 0, success: 0, error: 0 };
414
+ }
415
+ byDayMap[day].calls++;
416
+ if (log.status === "success") {
417
+ byDayMap[day].success++;
418
+ }
419
+ else {
420
+ byDayMap[day].error++;
421
+ }
422
+ }
423
+ const byDay = Object.entries(byDayMap)
424
+ .map(([date, data]) => ({
425
+ date,
426
+ calls: data.calls,
427
+ success: data.success,
428
+ error: data.error,
429
+ }))
430
+ .sort((a, b) => a.date.localeCompare(b.date));
431
+ // Get unique providers and agents for filter dropdowns
432
+ const providers = [...new Set(logs.map((l) => l.provider))].sort();
433
+ const agents = [...new Set(logs.map((l) => l.subagentId || "main"))].sort();
434
+ return {
435
+ totalCalls,
436
+ successCount,
437
+ errorCount,
438
+ successRate: Math.round(successRate * 10) / 10,
439
+ avgLatency,
440
+ byProvider,
441
+ byDay,
442
+ providers,
443
+ agents,
444
+ };
445
+ },
446
+ });
447
+ /**
448
+ * Get unique providers for filter dropdown
449
+ */
450
+ export const getProviders = query({
451
+ args: {
452
+ token: v.string(),
453
+ },
454
+ handler: async (ctx, args) => {
455
+ // Verify session
456
+ const session = await ctx.db
457
+ .query("agentSessions")
458
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", args.token))
459
+ .first();
460
+ if (!session) {
461
+ return [];
462
+ }
463
+ // Get all logs for this workspace
464
+ const logs = await ctx.db
465
+ .query("apiLogs")
466
+ .withIndex("by_workspaceId", (q) => q.eq("workspaceId", session.workspaceId))
467
+ .collect();
468
+ // Get unique providers
469
+ const providers = [...new Set(logs.map((l) => l.provider))].sort();
470
+ return providers;
471
+ },
472
+ });
473
+ /**
474
+ * Get logs for a specific subagent
475
+ */
476
+ export const getBySubagent = query({
477
+ args: {
478
+ token: v.string(),
479
+ subagentId: v.string(),
480
+ limit: v.optional(v.number()),
481
+ },
482
+ handler: async (ctx, { token, subagentId, limit = 20 }) => {
483
+ // Verify session
484
+ const session = await ctx.db
485
+ .query("agentSessions")
486
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", token))
487
+ .first();
488
+ if (!session)
489
+ return null;
490
+ // Get API logs for this subagent
491
+ const apiLogs = await ctx.db
492
+ .query("apiLogs")
493
+ .withIndex("by_subagentId", (q) => q.eq("subagentId", subagentId))
494
+ .order("desc")
495
+ .take(limit);
496
+ // Get search logs for this subagent
497
+ const searchLogs = await ctx.db
498
+ .query("searchLogs")
499
+ .filter((q) => q.eq(q.field("subagentId"), subagentId))
500
+ .order("desc")
501
+ .take(limit);
502
+ // Merge and sort by timestamp
503
+ const combined = [
504
+ ...apiLogs.map(l => ({
505
+ ...l,
506
+ type: "direct_call",
507
+ timestamp: l.createdAt
508
+ })),
509
+ ...searchLogs.map(l => ({
510
+ ...l,
511
+ type: "search",
512
+ timestamp: l.timestamp
513
+ })),
514
+ ].sort((a, b) => (b.timestamp || 0) - (a.timestamp || 0));
515
+ return combined.slice(0, limit);
516
+ },
517
+ });
518
+ /**
519
+ * Clear all logs for a workspace (admin cleanup)
520
+ */
521
+ export const clearWorkspaceLogs = mutation({
522
+ args: {
523
+ token: v.string(),
524
+ },
525
+ handler: async (ctx, { token }) => {
526
+ const session = await ctx.db
527
+ .query("agentSessions")
528
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", token))
529
+ .first();
530
+ if (!session)
531
+ throw new Error("Invalid session");
532
+ // Delete all apiLogs
533
+ const apiLogs = await ctx.db
534
+ .query("apiLogs")
535
+ .withIndex("by_workspaceId", (q) => q.eq("workspaceId", session.workspaceId))
536
+ .collect();
537
+ for (const log of apiLogs) {
538
+ await ctx.db.delete(log._id);
539
+ }
540
+ // Delete all searchLogs
541
+ const searchLogs = await ctx.db
542
+ .query("searchLogs")
543
+ .withIndex("by_workspaceId", (q) => q.eq("workspaceId", session.workspaceId))
544
+ .collect();
545
+ for (const log of searchLogs) {
546
+ await ctx.db.delete(log._id);
547
+ }
548
+ return {
549
+ deleted: {
550
+ apiLogs: apiLogs.length,
551
+ searchLogs: searchLogs.length
552
+ }
553
+ };
554
+ },
555
+ });
556
+ // Log proxy API calls from external agents (Hivr bees)
557
+ export const createProxyLog = mutation({
558
+ args: {
559
+ workspaceId: v.id("workspaces"),
560
+ provider: v.string(),
561
+ action: v.string(),
562
+ subagentId: v.optional(v.string()),
563
+ sessionToken: v.optional(v.string()),
564
+ },
565
+ handler: async (ctx, { workspaceId, provider, action, subagentId, sessionToken }) => {
566
+ const now = Date.now();
567
+ await ctx.db.insert("apiLogs", {
568
+ workspaceId,
569
+ provider,
570
+ action,
571
+ subagentId: subagentId || "unknown",
572
+ sessionToken: sessionToken || "proxy",
573
+ status: "success",
574
+ latencyMs: 0, // Proxy calls don't track latency
575
+ createdAt: now,
576
+ });
577
+ // Update workspace lastActiveAt (main agent activity)
578
+ await ctx.db.patch(workspaceId, { lastActiveAt: now });
579
+ // If this is a subagent call, update that subagent's timestamp
580
+ if (subagentId && subagentId !== "unknown" && subagentId !== "main") {
581
+ const subagent = await ctx.db
582
+ .query("subagents")
583
+ .withIndex("by_workspaceId_subagentId", (q) => q.eq("workspaceId", workspaceId).eq("subagentId", subagentId))
584
+ .first();
585
+ if (subagent) {
586
+ await ctx.db.patch(subagent._id, { lastActiveAt: now });
587
+ }
588
+ }
589
+ return { success: true };
590
+ },
591
+ });
592
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["logs.ts"],"names":[],"mappings":"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"}