@frogbotai/plugin-usage-reports 0.29.0 → 0.30.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.
@@ -1 +1 @@
1
- {"version":3,"file":"UsageReports.d.ts","sourceRoot":"","sources":["../../src/client/UsageReports.tsx"],"names":[],"mappings":"AAEA,OAAO,cAAc,CAAC;AAoDtB,wBAAgB,YAAY,4CAkM3B"}
1
+ {"version":3,"file":"UsageReports.d.ts","sourceRoot":"","sources":["../../src/client/UsageReports.tsx"],"names":[],"mappings":"AAEA,OAAO,cAAc,CAAC;AAqDtB,wBAAgB,YAAY,4CAkM3B"}
@@ -1,18 +1,32 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import './styles.css';
4
+ import { formatCostUSD } from '@frogbotai/next/client';
4
5
  import { useConfig } from '@payloadcms/ui';
5
6
  import { useEffect, useState } from 'react';
6
7
  const presets = [
7
- { label: 'Last 7 days', days: 7 },
8
- { label: 'Last 30 days', days: 30 },
9
- { label: 'Last 90 days', days: 90 },
8
+ {
9
+ label: 'Last 7 days',
10
+ days: 7
11
+ },
12
+ {
13
+ label: 'Last 30 days',
14
+ days: 30
15
+ },
16
+ {
17
+ label: 'Last 90 days',
18
+ days: 90
19
+ }
10
20
  ];
11
21
  function rangeForDays(days, label) {
12
22
  const to = new Date();
13
23
  const from = new Date(to);
14
24
  from.setUTCDate(from.getUTCDate() - days);
15
- return { from: from.toISOString(), to: to.toISOString(), label };
25
+ return {
26
+ from: from.toISOString(),
27
+ to: to.toISOString(),
28
+ label
29
+ };
16
30
  }
17
31
  function dateInput(value) {
18
32
  return value.slice(0, 10);
@@ -21,22 +35,19 @@ function customRange(from, to) {
21
35
  return {
22
36
  from: new Date(`${from}T00:00:00.000Z`).toISOString(),
23
37
  to: new Date(`${to}T23:59:59.999Z`).toISOString(),
24
- label: `${from} - ${to}`,
38
+ label: `${from} - ${to}`
25
39
  };
26
40
  }
27
41
  function formatTokens(value) {
28
- if (value >= 1_000_000_000)
29
- return `${(value / 1_000_000_000).toFixed(1)}B`;
30
- if (value >= 1_000_000)
31
- return `${(value / 1_000_000).toFixed(1)}M`;
32
- if (value >= 1_000)
33
- return `${(value / 1_000).toFixed(1)}K`;
42
+ if (value >= 1_000_000_000) return `${(value / 1_000_000_000).toFixed(1)}B`;
43
+ if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`;
44
+ if (value >= 1_000) return `${(value / 1_000).toFixed(1)}K`;
34
45
  return value.toLocaleString();
35
46
  }
36
47
  export function UsageReports() {
37
48
  const { config } = useConfig();
38
49
  const [groupBy, setGroupBy] = useState('model');
39
- const [range, setRange] = useState(() => rangeForDays(30, 'Last 30 days'));
50
+ const [range, setRange] = useState(()=>rangeForDays(30, 'Last 30 days'));
40
51
  const [showCustom, setShowCustom] = useState(false);
41
52
  const [customFrom, setCustomFrom] = useState(dateInput(range.from));
42
53
  const [customTo, setCustomTo] = useState(dateInput(range.to));
@@ -45,70 +56,256 @@ export function UsageReports() {
45
56
  const [loading, setLoading] = useState(true);
46
57
  const [sortField, setSortField] = useState(groupBy === 'model' ? 'totalTokens' : 'costUSD');
47
58
  const [ascending, setAscending] = useState(false);
48
- useEffect(() => {
59
+ useEffect(()=>{
49
60
  const controller = new AbortController();
50
- const params = new URLSearchParams({ groupBy, from: range.from, to: range.to });
61
+ const params = new URLSearchParams({
62
+ groupBy,
63
+ from: range.from,
64
+ to: range.to
65
+ });
51
66
  setLoading(true);
52
67
  setError(undefined);
53
- fetch(`${config.routes.api}/usage/report?${params}`, { signal: controller.signal })
54
- .then(async (response) => {
55
- if (!response.ok)
56
- throw new Error(`${response.status} ${response.statusText}`);
57
- setReport((await response.json()));
58
- })
59
- .catch((reason) => {
68
+ fetch(`${config.routes.api}/usage/report?${params}`, {
69
+ signal: controller.signal
70
+ }).then(async (response)=>{
71
+ if (!response.ok) throw new Error(`${response.status} ${response.statusText}`);
72
+ setReport(await response.json());
73
+ }).catch((reason)=>{
60
74
  if (!controller.signal.aborted) {
61
75
  setError(reason instanceof Error ? reason.message : 'Failed to load usage report');
62
76
  }
63
- })
64
- .finally(() => {
65
- if (!controller.signal.aborted)
66
- setLoading(false);
77
+ }).finally(()=>{
78
+ if (!controller.signal.aborted) setLoading(false);
67
79
  });
68
- return () => controller.abort();
69
- }, [config.routes.api, groupBy, range]);
70
- const rows = [...(report?.rows ?? [])].sort((a, b) => {
80
+ return ()=>controller.abort();
81
+ }, [
82
+ config.routes.api,
83
+ groupBy,
84
+ range
85
+ ]);
86
+ const rows = [
87
+ ...report?.rows ?? []
88
+ ].sort((a, b)=>{
71
89
  const left = a[sortField];
72
90
  const right = b[sortField];
73
91
  const result = typeof left === 'string' ? left.localeCompare(String(right)) : left - Number(right);
74
92
  return ascending ? result : -result;
75
93
  });
76
94
  const columns = [
77
- { field: 'label', label: groupBy === 'model' ? 'Model' : 'User', value: (row) => row.label },
78
- { field: 'requestCount', label: 'Requests', value: (row) => row.requestCount.toLocaleString() },
79
- { field: 'totalTokens', label: 'Total Tokens', value: (row) => formatTokens(row.totalTokens) },
80
- { field: 'inputTokens', label: 'Input', value: (row) => formatTokens(row.inputTokens) },
81
- { field: 'outputTokens', label: 'Output', value: (row) => formatTokens(row.outputTokens) },
95
+ {
96
+ field: 'label',
97
+ label: groupBy === 'model' ? 'Model' : 'User',
98
+ value: (row)=>row.label
99
+ },
100
+ {
101
+ field: 'requestCount',
102
+ label: 'Requests',
103
+ value: (row)=>row.requestCount.toLocaleString()
104
+ },
105
+ {
106
+ field: 'totalTokens',
107
+ label: 'Total Tokens',
108
+ value: (row)=>formatTokens(row.totalTokens)
109
+ },
110
+ {
111
+ field: 'inputTokens',
112
+ label: 'Input',
113
+ value: (row)=>formatTokens(row.inputTokens)
114
+ },
115
+ {
116
+ field: 'outputTokens',
117
+ label: 'Output',
118
+ value: (row)=>formatTokens(row.outputTokens)
119
+ },
82
120
  {
83
121
  field: 'cachedInputTokens',
84
122
  label: 'Cached',
85
- value: (row) => formatTokens(row.cachedInputTokens),
123
+ value: (row)=>formatTokens(row.cachedInputTokens)
86
124
  },
87
125
  {
88
126
  field: 'reasoningTokens',
89
127
  label: 'Reasoning',
90
- value: (row) => formatTokens(row.reasoningTokens),
128
+ value: (row)=>formatTokens(row.reasoningTokens)
91
129
  },
92
- { field: 'costUSD', label: 'Cost', value: (row) => `$${row.costUSD.toFixed(2)}` },
130
+ {
131
+ field: 'costUSD',
132
+ label: 'Cost',
133
+ value: (row)=>formatCostUSD(row.costUSD)
134
+ }
93
135
  ];
94
136
  function sort(field) {
95
- if (sortField === field)
96
- setAscending(!ascending);
137
+ if (sortField === field) setAscending(!ascending);
97
138
  else {
98
139
  setSortField(field);
99
140
  setAscending(false);
100
141
  }
101
142
  }
102
- return (_jsxs("div", { className: "usage-reports", children: [_jsxs("header", { className: "usage-reports__header", children: [_jsxs("div", { children: [_jsx("h1", { children: "Usage Analytics" }), _jsx("p", { children: range.label })] }), _jsxs("div", { className: "usage-reports__ranges", children: [presets.map((preset) => (_jsx("button", { type: "button", onClick: () => {
103
- setShowCustom(false);
104
- setRange(rangeForDays(preset.days, preset.label));
105
- }, children: preset.label }, preset.days))), _jsx("button", { type: "button", onClick: () => setShowCustom(!showCustom), children: "Custom" })] })] }), showCustom && (_jsxs("div", { className: "usage-reports__custom", children: [_jsxs("label", { children: ["From", _jsx("input", { type: "date", value: customFrom, onChange: (event) => setCustomFrom(event.target.value) })] }), _jsxs("label", { children: ["To", _jsx("input", { type: "date", value: customTo, onChange: (event) => setCustomTo(event.target.value) })] }), _jsx("button", { type: "button", disabled: !customFrom || !customTo || customFrom > customTo, onClick: () => {
143
+ return /*#__PURE__*/ _jsxs("div", {
144
+ className: "usage-reports",
145
+ children: [
146
+ /*#__PURE__*/ _jsxs("header", {
147
+ className: "usage-reports__header",
148
+ children: [
149
+ /*#__PURE__*/ _jsxs("div", {
150
+ children: [
151
+ /*#__PURE__*/ _jsx("h1", {
152
+ children: "Usage Analytics"
153
+ }),
154
+ /*#__PURE__*/ _jsx("p", {
155
+ children: range.label
156
+ })
157
+ ]
158
+ }),
159
+ /*#__PURE__*/ _jsxs("div", {
160
+ className: "usage-reports__ranges",
161
+ children: [
162
+ presets.map((preset)=>/*#__PURE__*/ _jsx("button", {
163
+ type: "button",
164
+ onClick: ()=>{
165
+ setShowCustom(false);
166
+ setRange(rangeForDays(preset.days, preset.label));
167
+ },
168
+ children: preset.label
169
+ }, preset.days)),
170
+ /*#__PURE__*/ _jsx("button", {
171
+ type: "button",
172
+ onClick: ()=>setShowCustom(!showCustom),
173
+ children: "Custom"
174
+ })
175
+ ]
176
+ })
177
+ ]
178
+ }),
179
+ showCustom && /*#__PURE__*/ _jsxs("div", {
180
+ className: "usage-reports__custom",
181
+ children: [
182
+ /*#__PURE__*/ _jsxs("label", {
183
+ children: [
184
+ "From",
185
+ /*#__PURE__*/ _jsx("input", {
186
+ type: "date",
187
+ value: customFrom,
188
+ onChange: (event)=>setCustomFrom(event.target.value)
189
+ })
190
+ ]
191
+ }),
192
+ /*#__PURE__*/ _jsxs("label", {
193
+ children: [
194
+ "To",
195
+ /*#__PURE__*/ _jsx("input", {
196
+ type: "date",
197
+ value: customTo,
198
+ onChange: (event)=>setCustomTo(event.target.value)
199
+ })
200
+ ]
201
+ }),
202
+ /*#__PURE__*/ _jsx("button", {
203
+ type: "button",
204
+ disabled: !customFrom || !customTo || customFrom > customTo,
205
+ onClick: ()=>{
106
206
  setRange(customRange(customFrom, customTo));
107
207
  setShowCustom(false);
108
- }, children: "Apply" })] })), _jsx("nav", { className: "usage-reports__tabs", "aria-label": "Usage report", children: ['model', 'user'].map((group) => (_jsx("button", { className: groupBy === group ? 'active' : '', type: "button", onClick: () => {
109
- setGroupBy(group);
110
- setSortField(group === 'model' ? 'totalTokens' : 'costUSD');
111
- setAscending(false);
112
- }, children: group === 'model' ? 'Models' : 'Users' }, group))) }), _jsxs("section", { className: "usage-reports__card", children: [_jsxs("div", { className: "usage-reports__totals", children: [_jsxs("span", { children: [_jsx("strong", { children: report?.totals.requestCount.toLocaleString() ?? '0' }), " requests"] }), _jsxs("span", { children: [_jsx("strong", { children: formatTokens(report?.totals.totalTokens ?? 0) }), " tokens"] }), _jsxs("span", { children: [_jsxs("strong", { children: ["$", (report?.totals.costUSD ?? 0).toFixed(2)] }), " cost"] })] }), loading && _jsx("p", { className: "usage-reports__state", children: "Loading usage..." }), error && (_jsxs("p", { className: "usage-reports__state usage-reports__error", children: ["Failed to load: ", error] })), !loading && !error && rows.length === 0 && (_jsx("p", { className: "usage-reports__state", children: "No usage in this date range." })), !loading && !error && rows.length > 0 && (_jsx("div", { className: "usage-reports__table-wrap", children: _jsxs("table", { children: [_jsx("thead", { children: _jsx("tr", { children: columns.map((column) => (_jsx("th", { children: _jsxs("button", { type: "button", onClick: () => sort(column.field), children: [column.label, sortField === column.field ? (ascending ? ' ▲' : ' ▼') : ''] }) }, column.field))) }) }), _jsx("tbody", { children: rows.map((row) => (_jsx("tr", { children: columns.map((column) => (_jsx("td", { children: column.value(row) }, column.field))) }, row.key))) })] }) }))] })] }));
208
+ },
209
+ children: "Apply"
210
+ })
211
+ ]
212
+ }),
213
+ /*#__PURE__*/ _jsx("nav", {
214
+ className: "usage-reports__tabs",
215
+ "aria-label": "Usage report",
216
+ children: [
217
+ 'model',
218
+ 'user'
219
+ ].map((group)=>/*#__PURE__*/ _jsx("button", {
220
+ className: groupBy === group ? 'active' : '',
221
+ type: "button",
222
+ onClick: ()=>{
223
+ setGroupBy(group);
224
+ setSortField(group === 'model' ? 'totalTokens' : 'costUSD');
225
+ setAscending(false);
226
+ },
227
+ children: group === 'model' ? 'Models' : 'Users'
228
+ }, group))
229
+ }),
230
+ /*#__PURE__*/ _jsxs("section", {
231
+ className: "usage-reports__card",
232
+ children: [
233
+ /*#__PURE__*/ _jsxs("div", {
234
+ className: "usage-reports__totals",
235
+ children: [
236
+ /*#__PURE__*/ _jsxs("span", {
237
+ children: [
238
+ /*#__PURE__*/ _jsx("strong", {
239
+ children: report?.totals.requestCount.toLocaleString() ?? '0'
240
+ }),
241
+ " requests"
242
+ ]
243
+ }),
244
+ /*#__PURE__*/ _jsxs("span", {
245
+ children: [
246
+ /*#__PURE__*/ _jsx("strong", {
247
+ children: formatTokens(report?.totals.totalTokens ?? 0)
248
+ }),
249
+ " tokens"
250
+ ]
251
+ }),
252
+ /*#__PURE__*/ _jsxs("span", {
253
+ children: [
254
+ /*#__PURE__*/ _jsx("strong", {
255
+ children: formatCostUSD(report?.totals.costUSD)
256
+ }),
257
+ " cost"
258
+ ]
259
+ })
260
+ ]
261
+ }),
262
+ loading && /*#__PURE__*/ _jsx("p", {
263
+ className: "usage-reports__state",
264
+ children: "Loading usage..."
265
+ }),
266
+ error && /*#__PURE__*/ _jsxs("p", {
267
+ className: "usage-reports__state usage-reports__error",
268
+ children: [
269
+ "Failed to load: ",
270
+ error
271
+ ]
272
+ }),
273
+ !loading && !error && rows.length === 0 && /*#__PURE__*/ _jsx("p", {
274
+ className: "usage-reports__state",
275
+ children: "No usage in this date range."
276
+ }),
277
+ !loading && !error && rows.length > 0 && /*#__PURE__*/ _jsx("div", {
278
+ className: "usage-reports__table-wrap",
279
+ children: /*#__PURE__*/ _jsxs("table", {
280
+ children: [
281
+ /*#__PURE__*/ _jsx("thead", {
282
+ children: /*#__PURE__*/ _jsx("tr", {
283
+ children: columns.map((column)=>/*#__PURE__*/ _jsx("th", {
284
+ children: /*#__PURE__*/ _jsxs("button", {
285
+ type: "button",
286
+ onClick: ()=>sort(column.field),
287
+ children: [
288
+ column.label,
289
+ sortField === column.field ? ascending ? ' ▲' : ' ▼' : ''
290
+ ]
291
+ })
292
+ }, column.field))
293
+ })
294
+ }),
295
+ /*#__PURE__*/ _jsx("tbody", {
296
+ children: rows.map((row)=>/*#__PURE__*/ _jsx("tr", {
297
+ children: columns.map((column)=>/*#__PURE__*/ _jsx("td", {
298
+ children: column.value(row)
299
+ }, column.field))
300
+ }, row.key))
301
+ })
302
+ ]
303
+ })
304
+ })
305
+ ]
306
+ })
307
+ ]
308
+ });
113
309
  }
310
+
114
311
  //# sourceMappingURL=UsageReports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UsageReports.js","sourceRoot":"","sources":["../../src/client/UsageReports.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAiB5C,MAAM,OAAO,GAAG;IACd,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE;IACjC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE;IACnC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE;CACpC,CAAC;AAEF,SAAS,YAAY,CAAC,IAAY,EAAE,KAAa;IAC/C,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,EAAU;IAC3C,OAAO;QACL,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,gBAAgB,CAAC,CAAC,WAAW,EAAE;QACrD,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,WAAW,EAAE;QACjD,KAAK,EAAE,GAAG,IAAI,MAAM,EAAE,EAAE;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,KAAK,IAAI,aAAa;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5E,IAAI,KAAK,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpE,IAAI,KAAK,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA8C,OAAO,CAAC,CAAC;IAC7F,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAY,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAe,CAAC;IACpD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAU,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CACxC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;IACF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAChF,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,iBAAiB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;aAChF,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC/E,SAAS,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgB,CAAC,CAAC;QACpD,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,MAAe,EAAE,EAAE;YACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/B,QAAQ,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC;YACrF,CAAC;QACH,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAExC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3B,MAAM,MAAM,GACV,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACtF,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAIR;QACH,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;QAC5F,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE;QAC/F,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QAC9F,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QACvF,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;QAC1F;YACE,KAAK,EAAE,mBAAmB;YAC1B,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC;SACpD;QACD;YACE,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC;SAClD;QACD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;KAClF,CAAC;IAEF,SAAS,IAAI,CAAC,KAAgB;QAC5B,IAAI,SAAS,KAAK,KAAK;YAAE,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;aAC7C,CAAC;YACJ,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,kBAAQ,SAAS,EAAC,uBAAuB,aACvC,0BACE,2CAAwB,EACxB,sBAAI,KAAK,CAAC,KAAK,GAAK,IAChB,EACN,eAAK,SAAS,EAAC,uBAAuB,aACnC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,iBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;oCACZ,aAAa,CAAC,KAAK,CAAC,CAAC;oCACrB,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gCACpD,CAAC,YAEA,MAAM,CAAC,KAAK,IAPR,MAAM,CAAC,IAAI,CAQT,CACV,CAAC,EACF,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,uBAEtD,IACL,IACC,EACR,UAAU,IAAI,CACb,eAAK,SAAS,EAAC,uBAAuB,aACpC,oCAEE,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GACtD,IACI,EACR,kCAEE,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GACpD,IACI,EACR,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,UAAU,IAAI,CAAC,QAAQ,IAAI,UAAU,GAAG,QAAQ,EAC3D,OAAO,EAAE,GAAG,EAAE;4BACZ,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;4BAC5C,aAAa,CAAC,KAAK,CAAC,CAAC;wBACvB,CAAC,sBAGM,IACL,CACP,EACD,cAAK,SAAS,EAAC,qBAAqB,gBAAY,cAAc,YAC1D,CAAC,OAAO,EAAE,MAAM,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3C,iBACE,SAAS,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAE5C,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;wBACZ,UAAU,CAAC,KAAK,CAAC,CAAC;wBAClB,YAAY,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wBAC5D,YAAY,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC,YAEA,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,IARlC,KAAK,CASH,CACV,CAAC,GACE,EACN,mBAAS,SAAS,EAAC,qBAAqB,aACtC,eAAK,SAAS,EAAC,uBAAuB,aACpC,2BACE,2BAAS,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,GAAG,GAAU,iBACjE,EACP,2BACE,2BAAS,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,GAAU,eAC3D,EACP,2BACE,kCAAU,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAU,aACvD,IACH,EACL,OAAO,IAAI,YAAG,SAAS,EAAC,sBAAsB,iCAAqB,EACnE,KAAK,IAAI,CACR,aAAG,SAAS,EAAC,2CAA2C,iCAAkB,KAAK,IAAK,CACrF,EACA,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAC1C,YAAG,SAAS,EAAC,sBAAsB,6CAAiC,CACrE,EACA,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CACxC,cAAK,SAAS,EAAC,2BAA2B,YACxC,4BACE,0BACE,uBACG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,uBACE,kBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aACpD,MAAM,CAAC,KAAK,EACZ,SAAS,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IACrD,IAJF,MAAM,CAAC,KAAK,CAKhB,CACN,CAAC,GACC,GACC,EACR,0BACG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,uBACG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,uBAAwB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAhC,MAAM,CAAC,KAAK,CAA0B,CAChD,CAAC,IAHK,GAAG,CAAC,GAAG,CAIX,CACN,CAAC,GACI,IACF,GACJ,CACP,IACO,IACN,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"sources":["../../src/client/UsageReports.tsx"],"names":["formatCostUSD","useConfig","useEffect","useState","presets","label","days","rangeForDays","to","Date","from","setUTCDate","getUTCDate","toISOString","dateInput","value","slice","customRange","formatTokens","toFixed","toLocaleString","UsageReports","config","groupBy","setGroupBy","range","setRange","showCustom","setShowCustom","customFrom","setCustomFrom","customTo","setCustomTo","report","setReport","error","setError","loading","setLoading","sortField","setSortField","ascending","setAscending","controller","AbortController","params","URLSearchParams","undefined","fetch","routes","api","signal","then","response","ok","Error","status","statusText","json","catch","reason","aborted","message","finally","abort","rows","sort","a","b","left","right","result","localeCompare","String","Number","columns","field","row","requestCount","totalTokens","inputTokens","outputTokens","cachedInputTokens","reasoningTokens","costUSD","div","className","header","h1","p","map","preset","button","type","onClick","input","onChange","event","target","disabled","nav","aria-label","group","section","span","strong","totals","length","table","thead","tr","column","th","tbody","td","key"],"mappings":"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","file":"UsageReports.js"}
package/dist/client.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { UsageReports } from './client/UsageReports.js';
2
+
2
3
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"sources":["../src/client.ts"],"names":["UsageReports"],"mappings":"AAAA,SAASA,YAAY,QAAQ,2BAA2B","file":"client.js"}
package/dist/index.js CHANGED
@@ -1,29 +1,38 @@
1
- const loggedIn = ({ req }) => Boolean(req.user);
1
+ const loggedIn = ({ req })=>Boolean(req.user);
2
2
  function idAndLabel(value) {
3
3
  if (typeof value === 'string' || typeof value === 'number') {
4
4
  const key = String(value);
5
- return { key, label: key };
5
+ return {
6
+ key,
7
+ label: key
8
+ };
6
9
  }
7
- if (!value || typeof value !== 'object')
8
- return;
10
+ if (!value || typeof value !== 'object') return;
9
11
  const record = value;
10
- if (record.id === undefined)
11
- return;
12
+ if (record.id === undefined) return;
12
13
  const key = String(record.id);
13
14
  const labelValue = record.name ?? record.email ?? record.title ?? record.id;
14
- return { key, label: String(labelValue) };
15
+ return {
16
+ key,
17
+ label: String(labelValue)
18
+ };
15
19
  }
16
20
  function groupValue(doc, groupBy) {
17
21
  if (groupBy === 'day') {
18
22
  const date = new Date(String(doc.requestedAt));
19
- if (Number.isNaN(date.getTime()))
20
- return;
23
+ if (Number.isNaN(date.getTime())) return;
21
24
  const key = date.toISOString().slice(0, 10);
22
- return { key, label: key };
25
+ return {
26
+ key,
27
+ label: key
28
+ };
23
29
  }
24
30
  if (groupBy === 'model') {
25
31
  const key = typeof doc.model === 'string' && doc.model ? doc.model : 'unknown';
26
- return { key, label: key };
32
+ return {
33
+ key,
34
+ label: key
35
+ };
27
36
  }
28
37
  return idAndLabel(doc[groupBy]);
29
38
  }
@@ -42,7 +51,7 @@ function emptyRow(key, label) {
42
51
  cacheWriteTokens: 0,
43
52
  reasoningTokens: 0,
44
53
  totalTokens: 0,
45
- costUSD: 0,
54
+ costUSD: 0
46
55
  };
47
56
  }
48
57
  function addDoc(row, doc) {
@@ -60,66 +69,86 @@ function parseRequest(req, groups) {
60
69
  const groupBy = search.get('groupBy');
61
70
  const fromDate = new Date(search.get('from') ?? '');
62
71
  const toDate = new Date(search.get('to') ?? '');
63
- if (!groupBy ||
64
- !groups.has(groupBy) ||
65
- Number.isNaN(fromDate.getTime()) ||
66
- Number.isNaN(toDate.getTime()) ||
67
- fromDate > toDate) {
72
+ if (!groupBy || !groups.has(groupBy) || Number.isNaN(fromDate.getTime()) || Number.isNaN(toDate.getTime()) || fromDate > toDate) {
68
73
  return;
69
74
  }
70
- return { groupBy, from: fromDate.toISOString(), to: toDate.toISOString() };
75
+ return {
76
+ groupBy,
77
+ from: fromDate.toISOString(),
78
+ to: toDate.toISOString()
79
+ };
71
80
  }
72
81
  function buildReportEndpoint({ slug, pageSize, groups, access }) {
73
82
  return {
74
83
  method: 'get',
75
84
  path: '/usage/report',
76
- handler: async (req) => {
77
- if (!req.user)
78
- return Response.json({ error: 'Unauthorized' }, { status: 401 });
79
- const permitted = await access({ req });
80
- if (permitted === false)
81
- return Response.json({ error: 'Forbidden' }, { status: 403 });
82
- const scope = permitted === true ? [] : [permitted];
85
+ handler: async (req)=>{
86
+ if (!req.user) return Response.json({
87
+ error: 'Unauthorized'
88
+ }, {
89
+ status: 401
90
+ });
91
+ const permitted = await access({
92
+ req
93
+ });
94
+ if (permitted === false) return Response.json({
95
+ error: 'Forbidden'
96
+ }, {
97
+ status: 403
98
+ });
99
+ const scope = permitted === true ? [] : [
100
+ permitted
101
+ ];
83
102
  const query = parseRequest(req, groups);
84
- if (!query)
85
- return Response.json({ error: 'Invalid groupBy or date range' }, { status: 400 });
103
+ if (!query) return Response.json({
104
+ error: 'Invalid groupBy or date range'
105
+ }, {
106
+ status: 400
107
+ });
86
108
  const rows = new Map();
87
109
  let page = 1;
88
- while (true) {
110
+ while(true){
89
111
  const result = await req.frogbot.find({
90
112
  collection: slug,
91
113
  where: {
92
114
  and: [
93
- { requestedAt: { greater_than_equal: query.from } },
94
- { requestedAt: { less_than_equal: query.to } },
95
- ...scope,
96
- ],
115
+ {
116
+ requestedAt: {
117
+ greater_than_equal: query.from
118
+ }
119
+ },
120
+ {
121
+ requestedAt: {
122
+ less_than_equal: query.to
123
+ }
124
+ },
125
+ ...scope
126
+ ]
97
127
  },
98
128
  page,
99
129
  limit: pageSize,
100
130
  depth: 1,
101
131
  sort: 'requestedAt',
102
132
  overrideAccess: true,
103
- req,
133
+ req
104
134
  });
105
- for (const value of result.docs) {
135
+ for (const value of result.docs){
106
136
  const doc = value;
107
137
  const group = groupValue(doc, query.groupBy);
108
- if (!group)
109
- continue;
138
+ if (!group) continue;
110
139
  const row = rows.get(group.key) ?? emptyRow(group.key, group.label);
111
- if (row.label === row.key && group.label !== group.key)
112
- row.label = group.label;
140
+ if (row.label === row.key && group.label !== group.key) row.label = group.label;
113
141
  addDoc(row, doc);
114
142
  rows.set(group.key, row);
115
143
  }
116
- if (!result.hasNextPage)
117
- break;
144
+ if (!result.hasNextPage) break;
118
145
  page = result.nextPage ?? page + 1;
119
146
  }
120
- const reportRows = [...rows.values()].sort((a, b) => b.costUSD - a.costUSD || b.totalTokens - a.totalTokens || a.label.localeCompare(b.label));
147
+ const reportRows = [
148
+ ...rows.values()
149
+ ].sort((a, b)=>b.costUSD - a.costUSD || b.totalTokens - a.totalTokens || a.label.localeCompare(b.label));
121
150
  const totals = emptyRow('', '');
122
- for (const row of reportRows) {
151
+ for (const row of reportRows){
123
152
  totals.requestCount += row.requestCount;
124
153
  totals.inputTokens += row.inputTokens;
125
154
  totals.outputTokens += row.outputTokens;
@@ -133,9 +162,9 @@ function buildReportEndpoint({ slug, pageSize, groups, access }) {
133
162
  return Response.json({
134
163
  ...query,
135
164
  rows: reportRows,
136
- totals: reportTotals,
165
+ totals: reportTotals
137
166
  });
138
- },
167
+ }
139
168
  };
140
169
  }
141
170
  export function usageReportsPlugin(options = {}) {
@@ -143,41 +172,59 @@ export function usageReportsPlugin(options = {}) {
143
172
  if (!Number.isInteger(pageSize) || pageSize < 1) {
144
173
  throw new Error('[plugin-usage-reports] pageSize must be a positive integer.');
145
174
  }
146
- return async (config) => {
147
- if (!config.ai)
148
- throw new Error('[plugin-usage-reports] AI configuration is required.');
149
- const existing = config.collections.find((collection) => collection.usageLog === true);
150
- const usage = existing ?? { slug: 'usage-logs', usageLog: true, fields: [] };
151
- const collections = existing
152
- ? config.collections.map((collection) => collection === existing
153
- ? { ...collection, admin: { ...collection.admin, groupBy: true } }
154
- : collection)
155
- : [...config.collections, { ...usage, admin: { groupBy: true } }];
156
- const groups = new Set(['day', 'model', 'user']);
157
- if (usage.fields.some((field) => 'name' in field && field.name === 'apiKey')) {
175
+ return async (config)=>{
176
+ if (!config.ai) throw new Error('[plugin-usage-reports] AI configuration is required.');
177
+ const existing = config.collections.find((collection)=>collection.usageLog === true);
178
+ const usage = existing ?? {
179
+ slug: 'usage-logs',
180
+ usageLog: true,
181
+ fields: []
182
+ };
183
+ const collections = existing ? config.collections.map((collection)=>collection === existing ? {
184
+ ...collection,
185
+ admin: {
186
+ ...collection.admin,
187
+ groupBy: true
188
+ }
189
+ } : collection) : [
190
+ ...config.collections,
191
+ {
192
+ ...usage,
193
+ admin: {
194
+ groupBy: true
195
+ }
196
+ }
197
+ ];
198
+ const groups = new Set([
199
+ 'day',
200
+ 'model',
201
+ 'user'
202
+ ]);
203
+ if (usage.fields.some((field)=>'name' in field && field.name === 'apiKey')) {
158
204
  groups.add('apiKey');
159
205
  }
160
206
  return {
161
207
  ...config,
162
208
  collections,
163
209
  endpoints: [
164
- ...(config.endpoints ?? []),
210
+ ...config.endpoints ?? [],
165
211
  buildReportEndpoint({
166
212
  slug: usage.slug,
167
213
  pageSize,
168
214
  groups,
169
- access: options.access ?? loggedIn,
170
- }),
215
+ access: options.access ?? loggedIn
216
+ })
171
217
  ],
172
218
  settings: [
173
- ...(config.settings ?? []),
219
+ ...config.settings ?? [],
174
220
  {
175
221
  label: 'Usage',
176
222
  path: 'usage',
177
- Component: '@frogbotai/plugin-usage-reports/client#UsageReports',
178
- },
179
- ],
223
+ Component: '@frogbotai/plugin-usage-reports/client#UsageReports'
224
+ }
225
+ ]
180
226
  };
181
227
  };
182
228
  }
229
+
183
230
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["loggedIn","req","Boolean","user","idAndLabel","value","key","String","label","record","id","undefined","labelValue","name","email","title","groupValue","doc","groupBy","date","Date","requestedAt","Number","isNaN","getTime","toISOString","slice","model","number","field","isFinite","emptyRow","requestCount","inputTokens","outputTokens","cachedInputTokens","cacheWriteTokens","reasoningTokens","totalTokens","costUSD","addDoc","row","parseRequest","groups","search","URL","url","searchParams","get","fromDate","toDate","has","from","to","buildReportEndpoint","slug","pageSize","access","method","path","handler","Response","json","error","status","permitted","scope","query","rows","Map","page","result","frogbot","find","collection","where","and","greater_than_equal","less_than_equal","limit","depth","sort","overrideAccess","docs","group","set","hasNextPage","nextPage","reportRows","values","a","b","localeCompare","totals","_key","_label","reportTotals","usageReportsPlugin","options","isInteger","Error","config","ai","existing","collections","usageLog","usage","fields","map","admin","Set","some","add","endpoints","settings","Component"],"mappings":"AA8BA,MAAMA,WAAmB,CAAC,EAAEC,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;AAEtD,SAASC,WAAWC,KAAc;IAChC,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,UAAU;QAC1D,MAAMC,MAAMC,OAAOF;QACnB,OAAO;YAAEC;YAAKE,OAAOF;QAAI;IAC3B;IACA,IAAI,CAACD,SAAS,OAAOA,UAAU,UAAU;IACzC,MAAMI,SAASJ;IACf,IAAII,OAAOC,EAAE,KAAKC,WAAW;IAC7B,MAAML,MAAMC,OAAOE,OAAOC,EAAE;IAC5B,MAAME,aAAaH,OAAOI,IAAI,IAAIJ,OAAOK,KAAK,IAAIL,OAAOM,KAAK,IAAIN,OAAOC,EAAE;IAC3E,OAAO;QAAEJ;QAAKE,OAAOD,OAAOK;IAAY;AAC1C;AAEA,SAASI,WAAWC,GAA4B,EAAEC,OAAyB;IACzE,IAAIA,YAAY,OAAO;QACrB,MAAMC,OAAO,IAAIC,KAAKb,OAAOU,IAAII,WAAW;QAC5C,IAAIC,OAAOC,KAAK,CAACJ,KAAKK,OAAO,KAAK;QAClC,MAAMlB,MAAMa,KAAKM,WAAW,GAAGC,KAAK,CAAC,GAAG;QACxC,OAAO;YAAEpB;YAAKE,OAAOF;QAAI;IAC3B;IACA,IAAIY,YAAY,SAAS;QACvB,MAAMZ,MAAM,OAAOW,IAAIU,KAAK,KAAK,YAAYV,IAAIU,KAAK,GAAGV,IAAIU,KAAK,GAAG;QACrE,OAAO;YAAErB;YAAKE,OAAOF;QAAI;IAC3B;IACA,OAAOF,WAAWa,GAAG,CAACC,QAAQ;AAChC;AAEA,SAASU,OAAOX,GAA4B,EAAEY,KAAa;IACzD,MAAMxB,QAAQiB,OAAOL,GAAG,CAACY,MAAM,IAAI;IACnC,OAAOP,OAAOQ,QAAQ,CAACzB,SAASA,QAAQ;AAC1C;AAEA,SAAS0B,SAASzB,GAAW,EAAEE,KAAa;IAC1C,OAAO;QACLF;QACAE;QACAwB,cAAc;QACdC,aAAa;QACbC,cAAc;QACdC,mBAAmB;QACnBC,kBAAkB;QAClBC,iBAAiB;QACjBC,aAAa;QACbC,SAAS;IACX;AACF;AAEA,SAASC,OAAOC,GAAmB,EAAExB,GAA4B;IAC/DwB,IAAIT,YAAY,IAAI;IACpBS,IAAIR,WAAW,IAAIL,OAAOX,KAAK;IAC/BwB,IAAIP,YAAY,IAAIN,OAAOX,KAAK;IAChCwB,IAAIN,iBAAiB,IAAIP,OAAOX,KAAK;IACrCwB,IAAIL,gBAAgB,IAAIR,OAAOX,KAAK;IACpCwB,IAAIJ,eAAe,IAAIT,OAAOX,KAAK;IACnCwB,IAAIH,WAAW,IAAIV,OAAOX,KAAK;IAC/BwB,IAAIF,OAAO,IAAIX,OAAOX,KAAK;AAC7B;AAEA,SAASyB,aAAazC,GAAmB,EAAE0C,MAAqC;IAC9E,MAAMC,SAAS,IAAIC,IAAI5C,IAAI6C,GAAG,IAAI,IAAI,oBAAoBC,YAAY;IACtE,MAAM7B,UAAU0B,OAAOI,GAAG,CAAC;IAC3B,MAAMC,WAAW,IAAI7B,KAAKwB,OAAOI,GAAG,CAAC,WAAW;IAChD,MAAME,SAAS,IAAI9B,KAAKwB,OAAOI,GAAG,CAAC,SAAS;IAC5C,IACE,CAAC9B,WACD,CAACyB,OAAOQ,GAAG,CAACjC,YACZI,OAAOC,KAAK,CAAC0B,SAASzB,OAAO,OAC7BF,OAAOC,KAAK,CAAC2B,OAAO1B,OAAO,OAC3ByB,WAAWC,QACX;QACA;IACF;IACA,OAAO;QAAEhC;QAASkC,MAAMH,SAASxB,WAAW;QAAI4B,IAAIH,OAAOzB,WAAW;IAAG;AAC3E;AASA,SAAS6B,oBAAoB,EAAEC,IAAI,EAAEC,QAAQ,EAAEb,MAAM,EAAEc,MAAM,EAAyB;IACpF,OAAO;QACLC,QAAQ;QACRC,MAAM;QACNC,SAAS,OAAO3D;YACd,IAAI,CAACA,IAAIE,IAAI,EAAE,OAAO0D,SAASC,IAAI,CAAC;gBAAEC,OAAO;YAAe,GAAG;gBAAEC,QAAQ;YAAI;YAC7E,MAAMC,YAAY,MAAMR,OAAO;gBAAExD;YAAI;YACrC,IAAIgE,cAAc,OAAO,OAAOJ,SAASC,IAAI,CAAC;gBAAEC,OAAO;YAAY,GAAG;gBAAEC,QAAQ;YAAI;YACpF,MAAME,QAA0CD,cAAc,OAAO,EAAE,GAAG;gBAACA;aAAU;YACrF,MAAME,QAAQzB,aAAazC,KAAK0C;YAChC,IAAI,CAACwB,OAAO,OAAON,SAASC,IAAI,CAAC;gBAAEC,OAAO;YAAgC,GAAG;gBAAEC,QAAQ;YAAI;YAC3F,MAAMI,OAAO,IAAIC;YACjB,IAAIC,OAAO;YACX,MAAO,KAAM;gBACX,MAAMC,SAAS,MAAMtE,IAAIuE,OAAO,CAACC,IAAI,CAAC;oBACpCC,YAAYnB;oBACZoB,OAAO;wBACLC,KAAK;4BACH;gCAAEvD,aAAa;oCAAEwD,oBAAoBV,MAAMf,IAAI;gCAAC;4BAAE;4BAClD;gCAAE/B,aAAa;oCAAEyD,iBAAiBX,MAAMd,EAAE;gCAAC;4BAAE;+BAC1Ca;yBACJ;oBACH;oBACAI;oBACAS,OAAOvB;oBACPwB,OAAO;oBACPC,MAAM;oBACNC,gBAAgB;oBAChBjF;gBACF;gBACA,KAAK,MAAMI,SAASkE,OAAOY,IAAI,CAAE;oBAC/B,MAAMlE,MAAMZ;oBACZ,MAAM+E,QAAQpE,WAAWC,KAAKkD,MAAMjD,OAAO;oBAC3C,IAAI,CAACkE,OAAO;oBACZ,MAAM3C,MAAM2B,KAAKpB,GAAG,CAACoC,MAAM9E,GAAG,KAAKyB,SAASqD,MAAM9E,GAAG,EAAE8E,MAAM5E,KAAK;oBAClE,IAAIiC,IAAIjC,KAAK,KAAKiC,IAAInC,GAAG,IAAI8E,MAAM5E,KAAK,KAAK4E,MAAM9E,GAAG,EAAEmC,IAAIjC,KAAK,GAAG4E,MAAM5E,KAAK;oBAC/EgC,OAAOC,KAAKxB;oBACZmD,KAAKiB,GAAG,CAACD,MAAM9E,GAAG,EAAEmC;gBACtB;gBACA,IAAI,CAAC8B,OAAOe,WAAW,EAAE;gBACzBhB,OAAOC,OAAOgB,QAAQ,IAAIjB,OAAO;YACnC;YACA,MAAMkB,aAAa;mBAAIpB,KAAKqB,MAAM;aAAG,CAACR,IAAI,CACxC,CAACS,GAAGC,IACFA,EAAEpD,OAAO,GAAGmD,EAAEnD,OAAO,IAAIoD,EAAErD,WAAW,GAAGoD,EAAEpD,WAAW,IAAIoD,EAAElF,KAAK,CAACoF,aAAa,CAACD,EAAEnF,KAAK;YAE3F,MAAMqF,SAAS9D,SAAS,IAAI;YAC5B,KAAK,MAAMU,OAAO+C,WAAY;gBAC5BK,OAAO7D,YAAY,IAAIS,IAAIT,YAAY;gBACvC6D,OAAO5D,WAAW,IAAIQ,IAAIR,WAAW;gBACrC4D,OAAO3D,YAAY,IAAIO,IAAIP,YAAY;gBACvC2D,OAAO1D,iBAAiB,IAAIM,IAAIN,iBAAiB;gBACjD0D,OAAOzD,gBAAgB,IAAIK,IAAIL,gBAAgB;gBAC/CyD,OAAOxD,eAAe,IAAII,IAAIJ,eAAe;gBAC7CwD,OAAOvD,WAAW,IAAIG,IAAIH,WAAW;gBACrCuD,OAAOtD,OAAO,IAAIE,IAAIF,OAAO;YAC/B;YACA,MAAM,EAAEjC,KAAKwF,IAAI,EAAEtF,OAAOuF,MAAM,EAAE,GAAGC,cAAc,GAAGH;YACtD,OAAOhC,SAASC,IAAI,CAAC;gBACnB,GAAGK,KAAK;gBACRC,MAAMoB;gBACNK,QAAQG;YACV;QACF;IACF;AACF;AAEA,OAAO,SAASC,mBAAmBC,UAAqC,CAAC,CAAC;IACxE,MAAM1C,WAAW0C,QAAQ1C,QAAQ,IAAI;IACrC,IAAI,CAAClC,OAAO6E,SAAS,CAAC3C,aAAaA,WAAW,GAAG;QAC/C,MAAM,IAAI4C,MAAM;IAClB;IACA,OAAO,OAAOC;QACZ,IAAI,CAACA,OAAOC,EAAE,EAAE,MAAM,IAAIF,MAAM;QAChC,MAAMG,WAAWF,OAAOG,WAAW,CAAC/B,IAAI,CAAC,CAACC,aAAeA,WAAW+B,QAAQ,KAAK;QACjF,MAAMC,QAAQH,YAAY;YAAEhD,MAAM;YAAckD,UAAU;YAAeE,QAAQ,EAAE;QAAC;QACpF,MAAMH,cAAcD,WAChBF,OAAOG,WAAW,CAACI,GAAG,CAAC,CAAClC,aACtBA,eAAe6B,WACX;gBAAE,GAAG7B,UAAU;gBAAEmC,OAAO;oBAAE,GAAGnC,WAAWmC,KAAK;oBAAE3F,SAAS;gBAAK;YAAE,IAC/DwD,cAEN;eAAI2B,OAAOG,WAAW;YAAE;gBAAE,GAAGE,KAAK;gBAAEG,OAAO;oBAAE3F,SAAS;gBAAK;YAAE;SAAE;QACnE,MAAMyB,SAAS,IAAImE,IAAsB;YAAC;YAAO;YAAS;SAAO;QACjE,IAAIJ,MAAMC,MAAM,CAACI,IAAI,CAAC,CAAClF,QAAU,UAAUA,SAASA,MAAMhB,IAAI,KAAK,WAAW;YAC5E8B,OAAOqE,GAAG,CAAC;QACb;QACA,OAAO;YACL,GAAGX,MAAM;YACTG;YACAS,WAAW;mBACLZ,OAAOY,SAAS,IAAI,EAAE;gBAC1B3D,oBAAoB;oBAClBC,MAAMmD,MAAMnD,IAAI;oBAChBC;oBACAb;oBACAc,QAAQyC,QAAQzC,MAAM,IAAIzD;gBAC5B;aACD;YACDkH,UAAU;mBACJb,OAAOa,QAAQ,IAAI,EAAE;gBACzB;oBACE1G,OAAO;oBACPmD,MAAM;oBACNwD,WAAW;gBACb;aACD;QACH;IACF;AACF","file":"index.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frogbotai/plugin-usage-reports",
3
- "version": "0.29.0",
3
+ "version": "0.30.0",
4
4
  "description": "Usage analytics reports for FrogBot.",
5
5
  "license": "MIT",
6
6
  "author": "Colby Gilbert",
@@ -38,7 +38,8 @@
38
38
  "@payloadcms/ui": "3.90.1",
39
39
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
40
40
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
41
- "frogbot": "0.29.0"
41
+ "frogbot": "0.30.0",
42
+ "@frogbotai/next": "0.30.0"
42
43
  },
43
44
  "devDependencies": {
44
45
  "@payloadcms/ui": "3.90.1",
@@ -47,14 +48,15 @@
47
48
  "react": "19.2.6",
48
49
  "react-dom": "19.2.6",
49
50
  "typescript": "5.6.2",
50
- "@frogbotai/plugin-import-export": "0.29.0",
51
- "frogbot": "0.29.0"
51
+ "@frogbotai/next": "0.30.0",
52
+ "@frogbotai/plugin-import-export": "0.30.0",
53
+ "frogbot": "0.30.0"
52
54
  },
53
55
  "publishConfig": {
54
56
  "access": "public"
55
57
  },
56
58
  "scripts": {
57
- "build": "rm -rf dist && tsc -p tsconfig.json && cp src/client/styles.css dist/client/styles.css",
59
+ "build": "node ../../../scripts/build-package.mjs --assets css",
58
60
  "clean": "rm -rf dist",
59
61
  "typecheck": "tsc --noEmit"
60
62
  }