@frogbotai/plugin-usage-reports 0.35.0 → 0.37.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/README.md +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -9
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -44,4 +44,4 @@ import { allow } from '@frogbotai/plugin-roles';
|
|
|
44
44
|
usageReportsPlugin({ access: allow('admin', 'finance', 'auditor') });
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
`groupBy=apiKey` is accepted
|
|
47
|
+
`groupBy=apiKey` is accepted when `@frogbotai/plugin-api-keys` is installed, in any order, or when the usage collection has an `apiKey` relationship.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Access, type Plugin } from 'frogbot';
|
|
2
2
|
export type UsageReportGroup = 'apiKey' | 'day' | 'model' | 'user';
|
|
3
3
|
export type UsageReportRow = {
|
|
4
4
|
key: string;
|
|
@@ -23,5 +23,14 @@ export type UsageReportsPluginOptions = {
|
|
|
23
23
|
pageSize?: number;
|
|
24
24
|
access?: Access;
|
|
25
25
|
};
|
|
26
|
+
type UsageReportsResolvedOptions = UsageReportsPluginOptions & {
|
|
27
|
+
pageSize: number;
|
|
28
|
+
};
|
|
29
|
+
declare module 'frogbot' {
|
|
30
|
+
interface RegisteredPlugins {
|
|
31
|
+
'plugin-usage-reports': UsageReportsResolvedOptions;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
26
34
|
export declare function usageReportsPlugin(options?: UsageReportsPluginOptions): Plugin;
|
|
35
|
+
export {};
|
|
27
36
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAKX,KAAK,MAAM,EACZ,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,2BAA2B,GAAG,yBAAyB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,iBAAiB;QACzB,sBAAsB,EAAE,2BAA2B,CAAC;KACrD;CACF;AAuND,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,MAAM,CAOlF"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { definePlugin } from 'frogbot';
|
|
1
2
|
const loggedIn = ({ req })=>Boolean(req.user);
|
|
2
3
|
function idAndLabel(value) {
|
|
3
4
|
if (typeof value === 'string' || typeof value === 'number') {
|
|
@@ -168,12 +169,9 @@ function buildReportEndpoint({ slug, pageSize, groups, access }) {
|
|
|
168
169
|
}
|
|
169
170
|
};
|
|
170
171
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
throw new Error('[plugin-usage-reports] pageSize must be a positive integer.');
|
|
175
|
-
}
|
|
176
|
-
return (config)=>{
|
|
172
|
+
const usageReports = definePlugin({
|
|
173
|
+
slug: 'plugin-usage-reports',
|
|
174
|
+
plugin: ({ config, options, plugins })=>{
|
|
177
175
|
if (!config.ai) throw new Error('[plugin-usage-reports] AI configuration is required.');
|
|
178
176
|
const existing = config.collections.find((collection)=>collection.usageLog === true);
|
|
179
177
|
const usage = existing ?? {
|
|
@@ -198,7 +196,7 @@ export function usageReportsPlugin(options = {}) {
|
|
|
198
196
|
'model',
|
|
199
197
|
'user'
|
|
200
198
|
]);
|
|
201
|
-
if (usage.fields.some((field)=>'name' in field && field.name === 'apiKey')) {
|
|
199
|
+
if (plugins['plugin-api-keys'] || usage.fields.some((field)=>'name' in field && field.name === 'apiKey')) {
|
|
202
200
|
groups.add('apiKey');
|
|
203
201
|
}
|
|
204
202
|
return {
|
|
@@ -208,7 +206,7 @@ export function usageReportsPlugin(options = {}) {
|
|
|
208
206
|
...config.endpoints ?? [],
|
|
209
207
|
buildReportEndpoint({
|
|
210
208
|
slug: usage.slug,
|
|
211
|
-
pageSize,
|
|
209
|
+
pageSize: options.pageSize,
|
|
212
210
|
groups,
|
|
213
211
|
access: options.access ?? loggedIn
|
|
214
212
|
})
|
|
@@ -222,7 +220,17 @@ export function usageReportsPlugin(options = {}) {
|
|
|
222
220
|
}
|
|
223
221
|
]
|
|
224
222
|
};
|
|
225
|
-
}
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
export function usageReportsPlugin(options = {}) {
|
|
226
|
+
const pageSize = options.pageSize ?? 5000;
|
|
227
|
+
if (!Number.isInteger(pageSize) || pageSize < 1) {
|
|
228
|
+
throw new Error('[plugin-usage-reports] pageSize must be a positive integer.');
|
|
229
|
+
}
|
|
230
|
+
return usageReports({
|
|
231
|
+
...options,
|
|
232
|
+
pageSize
|
|
233
|
+
});
|
|
226
234
|
}
|
|
227
235
|
|
|
228
236
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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","
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["definePlugin","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","usageReports","plugin","config","options","plugins","ai","Error","existing","collections","usageLog","usage","fields","map","admin","Set","some","add","endpoints","settings","Component","usageReportsPlugin","isInteger"],"mappings":"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","file":"index.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frogbotai/plugin-usage-reports",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.37.0",
|
|
4
4
|
"description": "Usage analytics reports for FrogBot.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Colby Gilbert",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"react": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
39
39
|
"react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
40
|
-
"frogbot": "0.
|
|
41
|
-
"@frogbotai/ui": "0.
|
|
40
|
+
"frogbot": "0.37.0",
|
|
41
|
+
"@frogbotai/ui": "0.37.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@testing-library/react": "^16.3.0",
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
"react": "19.3.1",
|
|
47
47
|
"react-dom": "19.3.1",
|
|
48
48
|
"typescript": "6.0.3",
|
|
49
|
-
"@frogbotai/plugin-import-export": "0.
|
|
50
|
-
"frogbot": "0.
|
|
51
|
-
"@frogbotai/ui": "0.
|
|
49
|
+
"@frogbotai/plugin-import-export": "0.37.0",
|
|
50
|
+
"frogbot": "0.37.0",
|
|
51
|
+
"@frogbotai/ui": "0.37.0"
|
|
52
52
|
},
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public"
|