@nordsym/apiclaw 1.7.23 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,126 @@
1
+ import { mutation } from "./_generated/server";
2
+ import { v } from "convex/values";
3
+
4
+ export const run = mutation({
5
+ args: {},
6
+ handler: async (ctx) => {
7
+ // 1. Create or find Pratham's workspace
8
+ const existing = await ctx.db
9
+ .query("workspaces")
10
+ .withIndex("by_email", (q) => q.eq("email", "pratham.kumar@apilayer.com"))
11
+ .first();
12
+
13
+ let workspaceId = existing?._id;
14
+
15
+ if (!workspaceId) {
16
+ workspaceId = await ctx.db.insert("workspaces", {
17
+ email: "pratham.kumar@apilayer.com",
18
+ workspaceName: "APILayer",
19
+ status: "active",
20
+ tier: "partner",
21
+ usageCount: 0,
22
+ usageLimit: 999999,
23
+ weeklyUsageLimit: 999999,
24
+ mainAgentName: "APILayer Partner",
25
+ createdAt: Date.now(),
26
+ updatedAt: Date.now(),
27
+ });
28
+ } else {
29
+ await ctx.db.patch(workspaceId, {
30
+ status: "active",
31
+ tier: "partner",
32
+ workspaceName: "APILayer",
33
+ updatedAt: Date.now(),
34
+ });
35
+ }
36
+
37
+ // 2. Migrate all logs from DEV (exact timestamps preserved)
38
+ const logs = [
39
+ { action: "discovery:news articles media", createdAt: 1774967391726, latencyMs: 23, provider: "apilayer", status: "success" },
40
+ { action: "discovery:geocoding address", createdAt: 1774967387957, latencyMs: 20, provider: "apilayer", status: "success" },
41
+ { action: "discovery:cryptocurrency bitcoin rates", createdAt: 1774967384524, latencyMs: 42, provider: "apilayer", status: "success" },
42
+ { action: "discovery:language detection", createdAt: 1774967381009, latencyMs: 24, provider: "apilayer", status: "success" },
43
+ { action: "discovery:financial news", createdAt: 1774967377825, latencyMs: 27, provider: "apilayer", status: "success" },
44
+ { action: "discovery:PDF convert HTML", createdAt: 1774967373814, latencyMs: 18, provider: "apilayer", status: "success" },
45
+ { action: "discovery:email verification", createdAt: 1774967370630, latencyMs: 20, provider: "apilayer", status: "success" },
46
+ { action: "discovery:screenshot website", createdAt: 1774967363406, latencyMs: 6, provider: "apilayer", status: "success" },
47
+ { action: "discovery:VAT validation", createdAt: 1774967355249, latencyMs: 6, provider: "apilayer", status: "success" },
48
+ { action: "discovery:flight aviation tracking", createdAt: 1774967352176, latencyMs: 21, provider: "apilayer", status: "success" },
49
+ { action: "discovery:IP geolocation", createdAt: 1774967347709, latencyMs: 32, provider: "apilayer", status: "success" },
50
+ { action: "discovery:currency exchange rates", createdAt: 1774967344273, latencyMs: 20, provider: "apilayer", status: "success" },
51
+ { action: "discovery:weather forecast", createdAt: 1774967340888, latencyMs: 18, provider: "apilayer", status: "success" },
52
+ { action: "discovery:news articles media", createdAt: 1774939258553, latencyMs: 19, provider: "apilayer", status: "success" },
53
+ { action: "discovery:geocoding address", createdAt: 1774939258311, latencyMs: 11, provider: "apilayer", status: "success" },
54
+ { action: "discovery:cryptocurrency bitcoin rates", createdAt: 1774939258096, latencyMs: 18, provider: "apilayer", status: "success" },
55
+ { action: "discovery:language detection", createdAt: 1774939257877, latencyMs: 15, provider: "apilayer", status: "success" },
56
+ { action: "discovery:financial news", createdAt: 1774939257704, latencyMs: 15, provider: "apilayer", status: "success" },
57
+ { action: "discovery:PDF convert HTML", createdAt: 1774939257462, latencyMs: 18, provider: "apilayer", status: "success" },
58
+ { action: "discovery:email verification", createdAt: 1774939257256, latencyMs: 15, provider: "apilayer", status: "success" },
59
+ { action: "discovery:screenshot website", createdAt: 1774939256831, latencyMs: 15, provider: "apilayer", status: "success" },
60
+ { action: "discovery:VAT validation", createdAt: 1774939256477, latencyMs: 12, provider: "apilayer", status: "success" },
61
+ { action: "discovery:flight aviation tracking", createdAt: 1774939256184, latencyMs: 11, provider: "apilayer", status: "success" },
62
+ { action: "discovery:IP geolocation", createdAt: 1774939255985, latencyMs: 10, provider: "apilayer", status: "success" },
63
+ { action: "discovery:currency exchange rates", createdAt: 1774939255834, latencyMs: 13, provider: "apilayer", status: "success" },
64
+ { action: "discovery:weather forecast", createdAt: 1774939255695, latencyMs: 18, provider: "apilayer", status: "success" },
65
+ { action: "coinlayer_live", createdAt: 1774892789576, latencyMs: 792, provider: "apilayer", status: "success" },
66
+ { action: "ipstack_lookup", createdAt: 1774892785050, latencyMs: 720, provider: "apilayer", status: "success" },
67
+ { action: "ipstack_lookup", createdAt: 1774892780343, latencyMs: 651, provider: "apilayer", status: "success" },
68
+ { action: "coinlayer_live", createdAt: 1774892775999, latencyMs: 712, provider: "apilayer", status: "success" },
69
+ { action: "coinlayer_live", createdAt: 1774892771405, latencyMs: 987, provider: "apilayer", status: "success" },
70
+ { action: "screenshot", createdAt: 1774890407860, latencyMs: 7721, provider: "apilayer", status: "success" },
71
+ { action: "exchange_rates", createdAt: 1774890396532, latencyMs: 695, provider: "apilayer", status: "error", errorMessage: "Unexpected token" },
72
+ { action: "discovery:news articles media", createdAt: 1774889743879, latencyMs: 17, provider: "apilayer", status: "success" },
73
+ { action: "discovery:geocoding address", createdAt: 1774889740816, latencyMs: 16, provider: "apilayer", status: "success" },
74
+ { action: "discovery:cryptocurrency bitcoin rates", createdAt: 1774889737259, latencyMs: 9, provider: "apilayer", status: "success" },
75
+ { action: "discovery:language detection", createdAt: 1774889733933, latencyMs: 33, provider: "apilayer", status: "success" },
76
+ { action: "discovery:financial news", createdAt: 1774889730874, latencyMs: 26, provider: "apilayer", status: "success" },
77
+ { action: "discovery:PDF convert HTML", createdAt: 1774889727684, latencyMs: 21, provider: "apilayer", status: "success" },
78
+ { action: "discovery:email verification", createdAt: 1774889723926, latencyMs: 21, provider: "apilayer", status: "success" },
79
+ { action: "discovery:screenshot website", createdAt: 1774889717576, latencyMs: 12, provider: "apilayer", status: "success" },
80
+ { action: "discovery:VAT validation", createdAt: 1774889710750, latencyMs: 14, provider: "apilayer", status: "success" },
81
+ { action: "discovery:flight aviation tracking", createdAt: 1774889707975, latencyMs: 19, provider: "apilayer", status: "success" },
82
+ { action: "discovery:IP geolocation", createdAt: 1774889705024, latencyMs: 13, provider: "apilayer", status: "success" },
83
+ { action: "discovery:currency exchange rates", createdAt: 1774889701843, latencyMs: 30, provider: "apilayer", status: "success" },
84
+ { action: "discovery:weather forecast", createdAt: 1774889699061, latencyMs: 54, provider: "apilayer", status: "success" },
85
+ { action: "discovery:foreign exchange forex rates fixer", createdAt: 1774886193681, latencyMs: 13, provider: "apilayer", status: "success" },
86
+ { action: "discovery:browser detection user agent device", createdAt: 1774886193179, latencyMs: 17, provider: "apilayer", status: "success" },
87
+ { action: "discovery:live news articles feed media", createdAt: 1774886192769, latencyMs: 12, provider: "apilayer", status: "success" },
88
+ { action: "discovery:geocoding address coordinates latitude", createdAt: 1774886192364, latencyMs: 9, provider: "apilayer", status: "success" },
89
+ { action: "discovery:cryptocurrency rates bitcoin ethereum", createdAt: 1774886191933, latencyMs: 9, provider: "apilayer", status: "success" },
90
+ { action: "discovery:language detection identify text", createdAt: 1774886190674, latencyMs: 13, provider: "apilayer", status: "success" },
91
+ { action: "discovery:financial news feed market", createdAt: 1774886190269, latencyMs: 13, provider: "apilayer", status: "success" },
92
+ { action: "discovery:PDF generation convert HTML document", createdAt: 1774886189845, latencyMs: 20, provider: "apilayer", status: "success" },
93
+ { action: "discovery:screenshot capture website page", createdAt: 1774886188241, latencyMs: 24, provider: "apilayer", status: "success" },
94
+ { action: "discovery:VAT number validation EU business", createdAt: 1774886187407, latencyMs: 16, provider: "apilayer", status: "success" },
95
+ { action: "discovery:flight tracking aviation status", createdAt: 1774886186950, latencyMs: 20, provider: "apilayer", status: "success" },
96
+ { action: "discovery:IP address geolocation location", createdAt: 1774886186635, latencyMs: 17, provider: "apilayer", status: "success" },
97
+ { action: "discovery:currency exchange rates conversion", createdAt: 1774886186135, latencyMs: 26, provider: "apilayer", status: "success" },
98
+ { action: "discovery:weather forecast temperature", createdAt: 1774886185916, latencyMs: 20, provider: "apilayer", status: "success" },
99
+ { action: "discovery:currency exchange rates", createdAt: 1774884654601, latencyMs: 12, provider: "apilayer", status: "success" },
100
+ { action: "discovery:weather forecast", createdAt: 1774884654441, latencyMs: 33, provider: "apilayer", status: "success" },
101
+ { action: "discovery:manual test from opus", createdAt: 1774884274160, latencyMs: 50, provider: "apilayer", status: "success" },
102
+ { action: "coinlayer_live", createdAt: 1774809262760, latencyMs: 641, provider: "apilayer", status: "success" },
103
+ { action: "ipstack_lookup", createdAt: 1774809261626, latencyMs: 663, provider: "apilayer", status: "success" },
104
+ { action: "fixer_latest", createdAt: 1774809261011, latencyMs: 747, provider: "apilayer", status: "error", errorMessage: "Request failed" },
105
+ { action: "weatherstack_current", createdAt: 1774808005255, latencyMs: 1181, provider: "apilayer", status: "success" },
106
+ ];
107
+
108
+ let inserted = 0;
109
+ for (const log of logs) {
110
+ await ctx.db.insert("apiLogs", {
111
+ workspaceId,
112
+ sessionToken: "migrated-from-dev",
113
+ provider: log.provider,
114
+ action: log.action,
115
+ status: log.status as "success" | "error",
116
+ latencyMs: log.latencyMs,
117
+ direction: "inbound",
118
+ errorMessage: (log as any).errorMessage,
119
+ createdAt: log.createdAt,
120
+ });
121
+ inserted++;
122
+ }
123
+
124
+ return { success: true, workspaceId, logsInserted: inserted };
125
+ },
126
+ });
package/convex/schema.ts CHANGED
@@ -47,7 +47,7 @@ export default defineSchema({
47
47
  workspaceName: v.optional(v.string()), // Display name (e.g., "APILayer", "My Team")
48
48
  passwordHash: v.optional(v.string()),
49
49
  status: v.string(), // "pending" | "active" | "suspended"
50
- tier: v.string(), // "free" | "pro" | "enterprise" | "backer"
50
+ tier: v.string(), // "free" | "pro" | "enterprise" | "backer" | "founder"
51
51
  usageCount: v.number(), // total API calls made (lifetime)
52
52
  usageLimit: v.number(), // max API calls for tier
53
53
  // Weekly usage (resets every Monday 00:00 UTC)
@@ -1,4 +1,13 @@
1
+ /**
2
+ * Public mutation called by MCP server (path: searchLogs:log)
3
+ */
4
+ export declare const log: any;
5
+ /**
6
+ * Get recent searches for a workspace (path: searchLogs:getRecent)
7
+ */
8
+ export declare const getRecent: any;
1
9
  export declare const logSearch: any;
2
10
  export declare const getTopQueries: any;
11
+ export declare const getStats: any;
3
12
  export declare const getZeroResultQueries: any;
4
13
  //# sourceMappingURL=searchLogs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"searchLogs.d.ts","sourceRoot":"","sources":["searchLogs.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS,KA8CpB,CAAC;AAGH,eAAO,MAAM,aAAa,KAkDxB,CAAC;AAGH,eAAO,MAAM,oBAAoB,KAuC/B,CAAC"}
1
+ {"version":3,"file":"searchLogs.d.ts","sourceRoot":"","sources":["searchLogs.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,GAAG,KA4Bd,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS,KA6BpB,CAAC;AAGH,eAAO,MAAM,SAAS,KA8CpB,CAAC;AAGH,eAAO,MAAM,aAAa,KAkDxB,CAAC;AAGH,eAAO,MAAM,QAAQ,KAyCnB,CAAC;AAGH,eAAO,MAAM,oBAAoB,KAuC/B,CAAC"}
@@ -1,5 +1,69 @@
1
- import { internalMutation, query } from "./_generated/server";
1
+ import { internalMutation, mutation, query } from "./_generated/server";
2
2
  import { v } from "convex/values";
3
+ /**
4
+ * Public mutation called by MCP server (path: searchLogs:log)
5
+ */
6
+ export const log = mutation({
7
+ args: {
8
+ sessionToken: v.string(),
9
+ query: v.string(),
10
+ resultCount: v.number(),
11
+ matchedProviders: v.optional(v.array(v.string())),
12
+ responseTimeMs: v.optional(v.number()),
13
+ subagentId: v.optional(v.string()),
14
+ },
15
+ handler: async (ctx, args) => {
16
+ const session = await ctx.db
17
+ .query("agentSessions")
18
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", args.sessionToken))
19
+ .first();
20
+ if (!session)
21
+ return { success: false };
22
+ await ctx.db.insert("searchLogs", {
23
+ workspaceId: session.workspaceId,
24
+ subagentId: args.subagentId,
25
+ query: args.query,
26
+ resultCount: args.resultCount,
27
+ hasResults: args.resultCount > 0,
28
+ matchedProviders: args.matchedProviders,
29
+ responseTimeMs: args.responseTimeMs || 0,
30
+ timestamp: Date.now(),
31
+ });
32
+ return { success: true };
33
+ },
34
+ });
35
+ /**
36
+ * Get recent searches for a workspace (path: searchLogs:getRecent)
37
+ */
38
+ export const getRecent = query({
39
+ args: {
40
+ token: v.string(),
41
+ limit: v.optional(v.number()),
42
+ },
43
+ handler: async (ctx, { token, limit = 50 }) => {
44
+ const session = await ctx.db
45
+ .query("agentSessions")
46
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", token))
47
+ .first();
48
+ if (!session)
49
+ return [];
50
+ const logs = await ctx.db
51
+ .query("searchLogs")
52
+ .withIndex("by_workspaceId", (q) => q.eq("workspaceId", session.workspaceId))
53
+ .order("desc")
54
+ .take(limit);
55
+ return logs.map((l) => ({
56
+ id: l._id,
57
+ query: l.query,
58
+ resultCount: l.resultCount,
59
+ hasResults: l.hasResults,
60
+ matchedProviders: l.matchedProviders || [],
61
+ responseTimeMs: l.responseTimeMs,
62
+ timestamp: l.timestamp,
63
+ subagentId: l.subagentId,
64
+ }));
65
+ },
66
+ });
3
67
  // Log a search query (uses existing searchLogs table schema)
4
68
  export const logSearch = internalMutation({
5
69
  args: {
@@ -93,6 +157,45 @@ export const getTopQueries = query({
93
157
  };
94
158
  },
95
159
  });
160
+ // Get search stats for a workspace (path: searchLogs:getStats)
161
+ export const getStats = query({
162
+ args: {
163
+ token: v.string(),
164
+ hoursBack: v.optional(v.number()),
165
+ },
166
+ handler: async (ctx, { token, hoursBack }) => {
167
+ const session = await ctx.db
168
+ .query("agentSessions")
169
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", token))
170
+ .first();
171
+ if (!session)
172
+ return { totalSearches: 0, zeroResultSearches: 0, avgResponseTimeMs: 0, successRate: 0, byDay: [] };
173
+ const since = hoursBack ? Date.now() - hoursBack * 60 * 60 * 1000 : 0;
174
+ const logs = await ctx.db
175
+ .query("searchLogs")
176
+ .withIndex("by_workspaceId", (q) => q.eq("workspaceId", session.workspaceId))
177
+ .collect();
178
+ const filtered = since > 0 ? logs.filter((l) => l.timestamp >= since) : logs;
179
+ const totalSearches = filtered.length;
180
+ const zeroResultSearches = filtered.filter((l) => !l.hasResults).length;
181
+ const avgResponseTimeMs = totalSearches > 0
182
+ ? Math.round(filtered.reduce((sum, l) => sum + (l.responseTimeMs || 0), 0) / totalSearches)
183
+ : 0;
184
+ const successRate = totalSearches > 0
185
+ ? Math.round(((totalSearches - zeroResultSearches) / totalSearches) * 1000) / 10
186
+ : 0;
187
+ // Per-day breakdown for chart
188
+ const byDayMap = {};
189
+ for (const log of filtered) {
190
+ const day = new Date(log.timestamp).toISOString().split("T")[0];
191
+ byDayMap[day] = (byDayMap[day] || 0) + 1;
192
+ }
193
+ const byDay = Object.entries(byDayMap)
194
+ .map(([date, searches]) => ({ date, searches }))
195
+ .sort((a, b) => a.date.localeCompare(b.date));
196
+ return { totalSearches, zeroResultSearches, avgResponseTimeMs, successRate, byDay };
197
+ },
198
+ });
96
199
  // Get searches with no results (API gaps)
97
200
  export const getZeroResultQueries = query({
98
201
  args: {
@@ -1 +1 @@
1
- {"version":3,"file":"searchLogs.js","sourceRoot":"","sources":["searchLogs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"searchLogs.js","sourceRoot":"","sources":["searchLogs.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,73 @@
1
- import { internalMutation, query } from "./_generated/server";
1
+ import { internalMutation, mutation, query } from "./_generated/server";
2
2
  import { v } from "convex/values";
3
3
 
4
+ /**
5
+ * Public mutation called by MCP server (path: searchLogs:log)
6
+ */
7
+ export const log = mutation({
8
+ args: {
9
+ sessionToken: v.string(),
10
+ query: v.string(),
11
+ resultCount: v.number(),
12
+ matchedProviders: v.optional(v.array(v.string())),
13
+ responseTimeMs: v.optional(v.number()),
14
+ subagentId: v.optional(v.string()),
15
+ },
16
+ handler: async (ctx, args) => {
17
+ const session = await ctx.db
18
+ .query("agentSessions")
19
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", args.sessionToken))
20
+ .first();
21
+ if (!session) return { success: false };
22
+
23
+ await ctx.db.insert("searchLogs", {
24
+ workspaceId: session.workspaceId,
25
+ subagentId: args.subagentId,
26
+ query: args.query,
27
+ resultCount: args.resultCount,
28
+ hasResults: args.resultCount > 0,
29
+ matchedProviders: args.matchedProviders,
30
+ responseTimeMs: args.responseTimeMs || 0,
31
+ timestamp: Date.now(),
32
+ });
33
+ return { success: true };
34
+ },
35
+ });
36
+
37
+ /**
38
+ * Get recent searches for a workspace (path: searchLogs:getRecent)
39
+ */
40
+ export const getRecent = query({
41
+ args: {
42
+ token: v.string(),
43
+ limit: v.optional(v.number()),
44
+ },
45
+ handler: async (ctx, { token, limit = 50 }) => {
46
+ const session = await ctx.db
47
+ .query("agentSessions")
48
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", token))
49
+ .first();
50
+ if (!session) return [];
51
+
52
+ const logs = await ctx.db
53
+ .query("searchLogs")
54
+ .withIndex("by_workspaceId", (q) => q.eq("workspaceId", session.workspaceId))
55
+ .order("desc")
56
+ .take(limit);
57
+
58
+ return logs.map((l) => ({
59
+ id: l._id,
60
+ query: l.query,
61
+ resultCount: l.resultCount,
62
+ hasResults: l.hasResults,
63
+ matchedProviders: l.matchedProviders || [],
64
+ responseTimeMs: l.responseTimeMs,
65
+ timestamp: l.timestamp,
66
+ subagentId: l.subagentId,
67
+ }));
68
+ },
69
+ });
70
+
4
71
  // Log a search query (uses existing searchLogs table schema)
5
72
  export const logSearch = internalMutation({
6
73
  args: {
@@ -103,6 +170,50 @@ export const getTopQueries = query({
103
170
  },
104
171
  });
105
172
 
173
+ // Get search stats for a workspace (path: searchLogs:getStats)
174
+ export const getStats = query({
175
+ args: {
176
+ token: v.string(),
177
+ hoursBack: v.optional(v.number()),
178
+ },
179
+ handler: async (ctx, { token, hoursBack }) => {
180
+ const session = await ctx.db
181
+ .query("agentSessions")
182
+ .withIndex("by_sessionToken", (q) => q.eq("sessionToken", token))
183
+ .first();
184
+ if (!session) return { totalSearches: 0, zeroResultSearches: 0, avgResponseTimeMs: 0, successRate: 0, byDay: [] };
185
+
186
+ const since = hoursBack ? Date.now() - hoursBack * 60 * 60 * 1000 : 0;
187
+
188
+ const logs = await ctx.db
189
+ .query("searchLogs")
190
+ .withIndex("by_workspaceId", (q) => q.eq("workspaceId", session.workspaceId))
191
+ .collect();
192
+
193
+ const filtered = since > 0 ? logs.filter((l) => l.timestamp >= since) : logs;
194
+ const totalSearches = filtered.length;
195
+ const zeroResultSearches = filtered.filter((l) => !l.hasResults).length;
196
+ const avgResponseTimeMs = totalSearches > 0
197
+ ? Math.round(filtered.reduce((sum, l) => sum + (l.responseTimeMs || 0), 0) / totalSearches)
198
+ : 0;
199
+ const successRate = totalSearches > 0
200
+ ? Math.round(((totalSearches - zeroResultSearches) / totalSearches) * 1000) / 10
201
+ : 0;
202
+
203
+ // Per-day breakdown for chart
204
+ const byDayMap: Record<string, number> = {};
205
+ for (const log of filtered) {
206
+ const day = new Date(log.timestamp).toISOString().split("T")[0];
207
+ byDayMap[day] = (byDayMap[day] || 0) + 1;
208
+ }
209
+ const byDay = Object.entries(byDayMap)
210
+ .map(([date, searches]) => ({ date, searches }))
211
+ .sort((a, b) => a.date.localeCompare(b.date));
212
+
213
+ return { totalSearches, zeroResultSearches, avgResponseTimeMs, successRate, byDay };
214
+ },
215
+ });
216
+
106
217
  // Get searches with no results (API gaps)
107
218
  export const getZeroResultQueries = query({
108
219
  args: {
@@ -29,4 +29,5 @@ export declare const adminGetFullWorkspace: any;
29
29
  */
30
30
  export declare const claimAnonymousUsage: any;
31
31
  export declare const adminUpdateEmail: any;
32
+ export declare const adminSetTier: any;
32
33
  //# sourceMappingURL=workspaces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["workspaces.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,eAAe,KAmB1B,CAAC;AAaH,eAAO,MAAM,eAAe,KA0K1B,CAAC;AAGH,eAAO,MAAM,UAAU,KAwBrB,CAAC;AAOH,eAAO,MAAM,qBAAqB,KAqGhC,CAAC;AASH,eAAO,MAAM,kBAAkB,KA2B7B,CAAC;AAGH,eAAO,MAAM,kBAAkB,KAM7B,CAAC;AAGH,eAAO,MAAM,kBAAkB,KA4B7B,CAAC;AAGH,eAAO,MAAM,WAAW,KA4BtB,CAAC;AAGH,eAAO,MAAM,iBAAiB,KA+D5B,CAAC;AAOH,eAAO,MAAM,kBAAkB,KAqC7B,CAAC;AAGH,eAAO,MAAM,MAAM,KAcjB,CAAC;AAOH,eAAO,MAAM,UAAU,KAqBrB,CAAC;AA0BH,eAAO,MAAM,cAAc,KAwEzB,CAAC;AAOH,eAAO,MAAM,aAAa,KAsDxB,CAAC;AAGH,eAAO,MAAM,aAAa,KAyBxB,CAAC;AAGH,eAAO,MAAM,UAAU,KAqBrB,CAAC;AAGH,eAAO,MAAM,YAAY,KAYvB,CAAC;AAOH,eAAO,MAAM,eAAe,KAiC1B,CAAC;AAGH,eAAO,MAAM,mBAAmB,KAwB9B,CAAC;AAGH,eAAO,MAAM,WAAW,KA4BtB,CAAC;AAGH,eAAO,MAAM,kBAAkB,KA2B7B,CAAC;AAgBH,eAAO,MAAM,kBAAkB,KAmC7B,CAAC;AAGH,eAAO,MAAM,sBAAsB,KAiBjC,CAAC;AAEH,eAAO,MAAM,kBAAkB,KAyB7B,CAAC;AAGH,eAAO,MAAM,qBAAqB,KA0BhC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,KAkC9B,CAAC;AAEH,eAAO,MAAM,gBAAgB,KAM3B,CAAC"}
1
+ {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["workspaces.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,eAAe,KAmB1B,CAAC;AAaH,eAAO,MAAM,eAAe,KA0K1B,CAAC;AAGH,eAAO,MAAM,UAAU,KAwBrB,CAAC;AAOH,eAAO,MAAM,qBAAqB,KAuGhC,CAAC;AASH,eAAO,MAAM,kBAAkB,KA2B7B,CAAC;AAGH,eAAO,MAAM,kBAAkB,KAM7B,CAAC;AAGH,eAAO,MAAM,kBAAkB,KA4B7B,CAAC;AAGH,eAAO,MAAM,WAAW,KA4BtB,CAAC;AAGH,eAAO,MAAM,iBAAiB,KA+D5B,CAAC;AAOH,eAAO,MAAM,kBAAkB,KAqC7B,CAAC;AAGH,eAAO,MAAM,MAAM,KAcjB,CAAC;AAOH,eAAO,MAAM,UAAU,KAqBrB,CAAC;AA0BH,eAAO,MAAM,cAAc,KAwEzB,CAAC;AAOH,eAAO,MAAM,aAAa,KAsDxB,CAAC;AAGH,eAAO,MAAM,aAAa,KAyBxB,CAAC;AAGH,eAAO,MAAM,UAAU,KAqBrB,CAAC;AAGH,eAAO,MAAM,YAAY,KAYvB,CAAC;AAOH,eAAO,MAAM,eAAe,KAiC1B,CAAC;AAGH,eAAO,MAAM,mBAAmB,KAwB9B,CAAC;AAGH,eAAO,MAAM,WAAW,KA4BtB,CAAC;AAGH,eAAO,MAAM,kBAAkB,KA2B7B,CAAC;AAgBH,eAAO,MAAM,kBAAkB,KAmC7B,CAAC;AAGH,eAAO,MAAM,sBAAsB,KAiBjC,CAAC;AAEH,eAAO,MAAM,kBAAkB,KAyB7B,CAAC;AAGH,eAAO,MAAM,qBAAqB,KA0BhC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,KAkC9B,CAAC;AAEH,eAAO,MAAM,gBAAgB,KAM3B,CAAC;AAEH,eAAO,MAAM,YAAY,KAMvB,CAAC"}
@@ -280,6 +280,8 @@ export const getWorkspaceDashboard = query({
280
280
  usagePercentage,
281
281
  stripeCustomerId: workspace.stripeCustomerId,
282
282
  createdAt: workspace.createdAt,
283
+ mainAgentName: workspace.mainAgentName,
284
+ mainAgentId: workspace.mainAgentId,
283
285
  },
284
286
  stats: {
285
287
  totalAgents: totalAgentCount,
@@ -979,4 +981,11 @@ export const adminUpdateEmail = mutation({
979
981
  return { success: true, email: newEmail };
980
982
  },
981
983
  });
984
+ export const adminSetTier = mutation({
985
+ args: { workspaceId: v.id("workspaces"), tier: v.string() },
986
+ handler: async (ctx, { workspaceId, tier }) => {
987
+ await ctx.db.patch(workspaceId, { tier, updatedAt: Date.now() });
988
+ return { success: true, tier };
989
+ },
990
+ });
982
991
  //# sourceMappingURL=workspaces.js.map