@frogbotai/plugin-usage-reports 0.25.0 → 0.27.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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frogbotai/plugin-usage-reports",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "Usage analytics reports for FrogBot.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Colby Gilbert",
|
|
@@ -38,7 +38,7 @@
|
|
|
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.
|
|
41
|
+
"frogbot": "0.27.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@payloadcms/ui": "3.90.1",
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
"react": "19.2.6",
|
|
48
48
|
"react-dom": "19.2.6",
|
|
49
49
|
"typescript": "5.6.2",
|
|
50
|
-
"frogbot": "0.
|
|
51
|
-
"@frogbotai/plugin-import-export": "0.
|
|
50
|
+
"frogbot": "0.27.0",
|
|
51
|
+
"@frogbotai/plugin-import-export": "0.27.0"
|
|
52
52
|
},
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
|
-
"build": "tsc -p tsconfig.json && cp src/client/styles.css dist/client/styles.css",
|
|
57
|
+
"build": "rm -rf dist && tsc -p tsconfig.json && cp src/client/styles.css dist/client/styles.css",
|
|
58
58
|
"clean": "rm -rf dist",
|
|
59
59
|
"typecheck": "tsc --noEmit"
|
|
60
60
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UsageReports.spec.d.ts","sourceRoot":"","sources":["../../src/client/UsageReports.spec.tsx"],"names":[],"mappings":""}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
|
3
|
-
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
4
|
-
import { UsageReports } from './UsageReports.js';
|
|
5
|
-
vi.mock('@payloadcms/ui', () => ({
|
|
6
|
-
useConfig: () => ({
|
|
7
|
-
config: { routes: { admin: '/admin', api: '/api' } },
|
|
8
|
-
}),
|
|
9
|
-
}));
|
|
10
|
-
const modelRows = [
|
|
11
|
-
{
|
|
12
|
-
key: 'small',
|
|
13
|
-
label: 'Small',
|
|
14
|
-
requestCount: 1,
|
|
15
|
-
inputTokens: 1,
|
|
16
|
-
outputTokens: 1,
|
|
17
|
-
cachedInputTokens: 0,
|
|
18
|
-
cacheWriteTokens: 0,
|
|
19
|
-
reasoningTokens: 0,
|
|
20
|
-
totalTokens: 2,
|
|
21
|
-
costUSD: 0.1,
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
key: 'large',
|
|
25
|
-
label: 'Large',
|
|
26
|
-
requestCount: 2,
|
|
27
|
-
inputTokens: 6,
|
|
28
|
-
outputTokens: 4,
|
|
29
|
-
cachedInputTokens: 0,
|
|
30
|
-
cacheWriteTokens: 0,
|
|
31
|
-
reasoningTokens: 0,
|
|
32
|
-
totalTokens: 10,
|
|
33
|
-
costUSD: 0.5,
|
|
34
|
-
},
|
|
35
|
-
];
|
|
36
|
-
describe('UsageReports', () => {
|
|
37
|
-
afterEach(() => vi.unstubAllGlobals());
|
|
38
|
-
it('loads the Firmware models/users and date range slice', async () => {
|
|
39
|
-
const fetch = vi.fn().mockResolvedValue(new Response(JSON.stringify({
|
|
40
|
-
groupBy: 'model',
|
|
41
|
-
from: '2026-01-01T00:00:00.000Z',
|
|
42
|
-
to: '2026-02-01T00:00:00.000Z',
|
|
43
|
-
rows: modelRows,
|
|
44
|
-
totals: {
|
|
45
|
-
requestCount: 3,
|
|
46
|
-
inputTokens: 7,
|
|
47
|
-
outputTokens: 5,
|
|
48
|
-
cachedInputTokens: 0,
|
|
49
|
-
cacheWriteTokens: 0,
|
|
50
|
-
reasoningTokens: 0,
|
|
51
|
-
totalTokens: 12,
|
|
52
|
-
costUSD: 0.6,
|
|
53
|
-
},
|
|
54
|
-
}), { status: 200 }));
|
|
55
|
-
vi.stubGlobal('fetch', fetch);
|
|
56
|
-
render(_jsx(UsageReports, {}));
|
|
57
|
-
expect(screen.getByRole('heading', { name: 'Usage Analytics' })).toBeTruthy();
|
|
58
|
-
expect(screen.getByRole('button', { name: 'Last 7 days' })).toBeTruthy();
|
|
59
|
-
await waitFor(() => expect(screen.getByText('Large')).toBeTruthy());
|
|
60
|
-
expect(fetch).toHaveBeenCalledWith(expect.stringContaining('/api/usage/report?groupBy=model'), expect.any(Object));
|
|
61
|
-
fireEvent.click(screen.getByRole('button', { name: 'Users' }));
|
|
62
|
-
await waitFor(() => expect(fetch).toHaveBeenCalledWith(expect.stringContaining('groupBy=user'), expect.any(Object)));
|
|
63
|
-
fireEvent.click(screen.getByRole('button', { name: 'Custom' }));
|
|
64
|
-
expect(screen.getByLabelText('From')).toBeTruthy();
|
|
65
|
-
expect(screen.getByLabelText('To')).toBeTruthy();
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
//# sourceMappingURL=UsageReports.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UsageReports.spec.js","sourceRoot":"","sources":["../../src/client/UsageReports.spec.tsx"],"names":[],"mappings":"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"}
|