@frogbotai/plugin-api-keys 0.16.0 → 0.17.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/dist/collection.d.ts +1 -2
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +1 -3
- package/dist/collection.js.map +1 -1
- package/dist/fields.d.ts +2 -2
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +9 -55
- package/dist/fields.js.map +1 -1
- package/dist/index.d.ts +2 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +59 -167
- package/dist/index.js.map +1 -1
- package/dist/policy.d.ts +3 -37
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +0 -63
- package/dist/policy.js.map +1 -1
- package/package.json +6 -6
package/dist/collection.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type { CollectionConfig,
|
|
1
|
+
import type { CollectionConfig, FrogbotRequest } from 'frogbot';
|
|
2
2
|
type CollectionOptions = {
|
|
3
3
|
authCollection: string;
|
|
4
4
|
collectionSlug: string;
|
|
5
5
|
tokenPrefix: string;
|
|
6
6
|
usageCollection?: string;
|
|
7
|
-
policyAccess?: FieldAccess;
|
|
8
7
|
canRevokeAnyKey?: (req: FrogbotRequest) => boolean | Promise<boolean>;
|
|
9
8
|
collection?: Partial<CollectionConfig>;
|
|
10
9
|
existing?: CollectionConfig;
|
package/dist/collection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,gBAAgB,EAAmB,cAAc,EAAE,MAAM,SAAS,CAAC;AAIzF,KAAK,iBAAiB,GAAG;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAkGF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAkIpF"}
|
package/dist/collection.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createPolicyFields } from './fields.js';
|
|
2
1
|
import { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
3
2
|
const ownKeys = ({ req }) => (req.user ? { owner: { equals: req.user.id } } : false);
|
|
4
3
|
function mergeFields(...groups) {
|
|
@@ -90,7 +89,7 @@ function createEndpoints({ collectionSlug, tokenPrefix, canRevokeAnyKey, }) {
|
|
|
90
89
|
];
|
|
91
90
|
}
|
|
92
91
|
export function createApiKeysCollection(options) {
|
|
93
|
-
const { authCollection, collectionSlug, collection, existing,
|
|
92
|
+
const { authCollection, collectionSlug, collection, existing, usageCollection } = options;
|
|
94
93
|
const fields = [
|
|
95
94
|
{ name: 'name', type: 'text', required: true },
|
|
96
95
|
{
|
|
@@ -124,7 +123,6 @@ export function createApiKeysCollection(options) {
|
|
|
124
123
|
access: { update: () => false },
|
|
125
124
|
admin: { readOnly: true },
|
|
126
125
|
},
|
|
127
|
-
...createPolicyFields(true, policyAccess),
|
|
128
126
|
{
|
|
129
127
|
name: 'revokedAt',
|
|
130
128
|
type: 'date',
|
package/dist/collection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
|
package/dist/fields.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { Field
|
|
2
|
-
export declare function createPolicyFields(
|
|
1
|
+
import type { Field } from 'frogbot';
|
|
2
|
+
export declare function createPolicyFields(modelIDs: string[]): Field[];
|
|
3
3
|
//# sourceMappingURL=fields.d.ts.map
|
package/dist/fields.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAa9D"}
|
package/dist/fields.js
CHANGED
|
@@ -1,61 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
function policyField(name, value, manage) {
|
|
3
|
-
return {
|
|
4
|
-
name,
|
|
5
|
-
type: 'group',
|
|
6
|
-
access: { update: manage },
|
|
7
|
-
fields: [
|
|
8
|
-
{
|
|
9
|
-
name: 'mode',
|
|
10
|
-
type: 'select',
|
|
11
|
-
defaultValue: 'inherit',
|
|
12
|
-
required: true,
|
|
13
|
-
options: ['inherit', 'custom', 'unlimited'],
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
...value,
|
|
17
|
-
name: 'value',
|
|
18
|
-
admin: { ...value.admin, condition: (_, siblingData) => siblingData.mode === 'custom' },
|
|
19
|
-
},
|
|
20
|
-
],
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export function createPolicyFields(includeState, policyAccess = deny) {
|
|
1
|
+
export function createPolicyFields(modelIDs) {
|
|
24
2
|
return [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
policyField('tpm', { name: 'value', type: 'number', min: 1 }, policyAccess),
|
|
28
|
-
policyField('models', { name: 'value', type: 'json' }, policyAccess),
|
|
3
|
+
{ name: 'monthlyBudget', label: 'Monthly Budget (USD)', type: 'number', min: 0 },
|
|
4
|
+
{ name: 'models', type: 'select', hasMany: true, options: modelIDs },
|
|
29
5
|
{
|
|
30
|
-
name: '
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
access: { update:
|
|
6
|
+
name: 'spendThisPeriodUSD',
|
|
7
|
+
label: 'Monthly Spend (USD)',
|
|
8
|
+
type: 'number',
|
|
9
|
+
defaultValue: 0,
|
|
10
|
+
access: { update: () => false },
|
|
11
|
+
admin: { readOnly: true },
|
|
35
12
|
},
|
|
36
|
-
...(includeState
|
|
37
|
-
? [
|
|
38
|
-
{
|
|
39
|
-
name: 'spendThisPeriodUSD',
|
|
40
|
-
type: 'number',
|
|
41
|
-
defaultValue: 0,
|
|
42
|
-
access: { update: () => false },
|
|
43
|
-
admin: { readOnly: true },
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: 'budgetPeriodStartedAt',
|
|
47
|
-
type: 'date',
|
|
48
|
-
access: { update: () => false },
|
|
49
|
-
admin: { readOnly: true },
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
name: 'budgetAlertsSent',
|
|
53
|
-
type: 'json',
|
|
54
|
-
access: { update: () => false },
|
|
55
|
-
admin: { hidden: true },
|
|
56
|
-
},
|
|
57
|
-
]
|
|
58
|
-
: []),
|
|
59
13
|
];
|
|
60
14
|
}
|
|
61
15
|
//# sourceMappingURL=fields.js.map
|
package/dist/fields.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAEA,MAAM,
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,QAAkB;IACnD,OAAO;QACL,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE;QAChF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE;QACpE;YACE,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,qBAAqB;YAC5B,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;YAC/B,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC1B;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export type {
|
|
1
|
+
import { type CollectionConfig, type FrogbotRequest, type Plugin } from 'frogbot';
|
|
2
|
+
export type { PolicyDocument } from './policy.js';
|
|
3
3
|
export type { MintApiKeyOptions, RevokeApiKeyOptions, RotateApiKeyOptions, } from './server/services.js';
|
|
4
4
|
export { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
5
5
|
export type { ApiKeyHeaderOptions, ApiKeyTokenOptions } from './server/token.js';
|
|
@@ -12,14 +12,7 @@ export type ApiKeysPluginOptions = {
|
|
|
12
12
|
tokenPrefix?: string;
|
|
13
13
|
headerNames?: string[];
|
|
14
14
|
collection?: Partial<CollectionConfig>;
|
|
15
|
-
policyAccess?: FieldAccess;
|
|
16
15
|
canRevokeAnyKey?: (req: FrogbotRequest) => boolean | Promise<boolean>;
|
|
17
|
-
defaults?: import('./policy.js').PolicyDefaults;
|
|
18
|
-
alerts?: {
|
|
19
|
-
webhookURL: string;
|
|
20
|
-
thresholds?: number[];
|
|
21
|
-
headers?: Record<string, string>;
|
|
22
|
-
};
|
|
23
16
|
};
|
|
24
17
|
export declare function apiKeysPlugin(options?: ApiKeysPluginOptions): Plugin;
|
|
25
18
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAEnB,KAAK,MAAM,EACZ,MAAM,SAAS,CAAC;AAQjB,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClG,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvE,CAAC;AAsBF,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAyKxE"}
|
package/dist/index.js
CHANGED
|
@@ -1,56 +1,45 @@
|
|
|
1
|
-
import { calculateModelCostUSD } from '@frogbotai/gateway';
|
|
2
|
-
import { BudgetExceededError, ModelNotAllowedError
|
|
1
|
+
import { calculateCostUSD, calculateModelCostUSD } from '@frogbotai/gateway';
|
|
2
|
+
import { BudgetExceededError, ModelNotAllowedError } from '@frogbotai/gateway/errors';
|
|
3
|
+
import { getConfiguredModelIds, } from 'frogbot';
|
|
3
4
|
import { createApiKeysCollection } from './collection.js';
|
|
4
5
|
import { createPolicyFields } from './fields.js';
|
|
5
|
-
import {
|
|
6
|
+
import { SerialQueue } from './policy.js';
|
|
6
7
|
import { createApiKeyStrategy } from './strategy.js';
|
|
7
8
|
export { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
8
9
|
export { createApiKeyToken, extractApiKeyToken, getApiKeyPrefix, hashApiKeyToken, } from './server/token.js';
|
|
9
10
|
export { isApiKeyStrategy } from './strategy.js';
|
|
11
|
+
function isPricedCustomProvider(entry) {
|
|
12
|
+
return (typeof entry === 'object' &&
|
|
13
|
+
entry !== null &&
|
|
14
|
+
'type' in entry &&
|
|
15
|
+
entry.type === 'openai-compatible' &&
|
|
16
|
+
'models' in entry &&
|
|
17
|
+
Array.isArray(entry.models));
|
|
18
|
+
}
|
|
10
19
|
export function apiKeysPlugin(options = {}) {
|
|
11
|
-
for (const [name, value] of Object.entries(options.defaults ?? {})) {
|
|
12
|
-
if (name !== 'models' &&
|
|
13
|
-
name !== 'budgetBehavior' &&
|
|
14
|
-
(typeof value !== 'number' || !Number.isFinite(value) || value < 0)) {
|
|
15
|
-
throw new Error(`[plugin-api-keys] Default '${name}' must be a non-negative finite number.`);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
if ((options.defaults?.rpm !== undefined && options.defaults.rpm < 1) ||
|
|
19
|
-
(options.defaults?.tpm !== undefined && options.defaults.tpm < 1)) {
|
|
20
|
-
throw new Error('[plugin-api-keys] RPM and TPM defaults must be at least 1.');
|
|
21
|
-
}
|
|
22
|
-
if (options.defaults?.budgetBehavior !== undefined &&
|
|
23
|
-
!['block', 'alert-only'].includes(options.defaults.budgetBehavior)) {
|
|
24
|
-
throw new Error('[plugin-api-keys] Budget behavior must be block or alert-only.');
|
|
25
|
-
}
|
|
26
|
-
if (options.defaults?.models?.some((model) => !model.includes('/'))) {
|
|
27
|
-
throw new Error('[plugin-api-keys] Default models must use provider/model IDs.');
|
|
28
|
-
}
|
|
29
|
-
if (options.alerts && !options.alerts.webhookURL) {
|
|
30
|
-
throw new Error('[plugin-api-keys] Alert webhookURL is required.');
|
|
31
|
-
}
|
|
32
|
-
if (options.alerts?.thresholds?.some((threshold) => !Number.isFinite(threshold) || threshold <= 0 || threshold > 1)) {
|
|
33
|
-
throw new Error('[plugin-api-keys] Alert thresholds must be greater than 0 and at most 1.');
|
|
34
|
-
}
|
|
35
|
-
const limiter = new SlidingWindowRateLimiter();
|
|
36
20
|
const queue = new SerialQueue();
|
|
37
21
|
return (config) => {
|
|
38
22
|
const authCollection = options.authCollection ?? 'users';
|
|
39
23
|
const collectionSlug = options.collectionSlug ?? 'api-keys';
|
|
24
|
+
const configuredCosts = new Map();
|
|
25
|
+
for (const [provider, entry] of Object.entries(config.ai?.providers ?? {})) {
|
|
26
|
+
if (!isPricedCustomProvider(entry))
|
|
27
|
+
continue;
|
|
28
|
+
for (const model of entry.models) {
|
|
29
|
+
if (!model.cost)
|
|
30
|
+
continue;
|
|
31
|
+
configuredCosts.set(`${provider}/${model.id}`, {
|
|
32
|
+
input: model.cost.input ?? 0,
|
|
33
|
+
output: model.cost.output ?? 0,
|
|
34
|
+
...(model.cost.cache_read !== undefined && { cache_read: model.cost.cache_read }),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
40
38
|
const auth = config.collections.find((collection) => collection.slug === authCollection);
|
|
41
39
|
if (!auth || auth.auth === undefined || auth.auth === false) {
|
|
42
40
|
throw new Error(`[plugin-api-keys] Auth collection '${authCollection}' must exist and have auth enabled.`);
|
|
43
41
|
}
|
|
44
|
-
const reservedPolicyFields = new Set([
|
|
45
|
-
'monthlyBudget',
|
|
46
|
-
'rpm',
|
|
47
|
-
'tpm',
|
|
48
|
-
'models',
|
|
49
|
-
'budgetBehavior',
|
|
50
|
-
'spendThisPeriodUSD',
|
|
51
|
-
'budgetPeriodStartedAt',
|
|
52
|
-
'budgetAlertsSent',
|
|
53
|
-
]);
|
|
42
|
+
const reservedPolicyFields = new Set(['monthlyBudget', 'models', 'spendThisPeriodUSD']);
|
|
54
43
|
const collision = auth.fields.find((field) => 'name' in field && reservedPolicyFields.has(field.name));
|
|
55
44
|
if (collision && 'name' in collision) {
|
|
56
45
|
throw new Error(`[plugin-api-keys] Auth field '${collision.name}' is reserved.`);
|
|
@@ -68,7 +57,6 @@ export function apiKeysPlugin(options = {}) {
|
|
|
68
57
|
collectionSlug,
|
|
69
58
|
tokenPrefix: options.tokenPrefix ?? 'fb',
|
|
70
59
|
usageCollection: usageLog?.slug,
|
|
71
|
-
policyAccess: options.policyAccess,
|
|
72
60
|
canRevokeAnyKey: options.canRevokeAnyKey,
|
|
73
61
|
collection: options.collection,
|
|
74
62
|
existing,
|
|
@@ -93,11 +81,8 @@ export function apiKeysPlugin(options = {}) {
|
|
|
93
81
|
const authConfig = typeof next.auth === 'object' ? next.auth : {};
|
|
94
82
|
next = {
|
|
95
83
|
...next,
|
|
96
|
-
fields: [...next.fields, ...createPolicyFields(
|
|
97
|
-
auth: {
|
|
98
|
-
...authConfig,
|
|
99
|
-
strategies: [...(authConfig.strategies ?? []), strategy],
|
|
100
|
-
},
|
|
84
|
+
fields: [...next.fields, ...createPolicyFields(getConfiguredModelIds(config.ai))],
|
|
85
|
+
auth: { ...authConfig, strategies: [...(authConfig.strategies ?? []), strategy] },
|
|
101
86
|
};
|
|
102
87
|
}
|
|
103
88
|
if (item === usageLog)
|
|
@@ -108,33 +93,17 @@ export function apiKeysPlugin(options = {}) {
|
|
|
108
93
|
slug: 'frogbot-reset-ai-budgets',
|
|
109
94
|
schedule: [{ cron: '0 0 1 * *', queue: 'frogbot-reset-ai-budgets' }],
|
|
110
95
|
handler: async ({ req }) => {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
budgetAlertsSent: [],
|
|
119
|
-
},
|
|
120
|
-
overrideAccess: true,
|
|
121
|
-
req,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
96
|
+
await req.payload.update({
|
|
97
|
+
collection: authCollection,
|
|
98
|
+
where: { id: { exists: true } },
|
|
99
|
+
data: { spendThisPeriodUSD: 0 },
|
|
100
|
+
overrideAccess: true,
|
|
101
|
+
req,
|
|
102
|
+
});
|
|
124
103
|
return { output: {} };
|
|
125
104
|
},
|
|
126
105
|
};
|
|
127
|
-
const
|
|
128
|
-
const jobs = {
|
|
129
|
-
...config.jobs,
|
|
130
|
-
tasks: [...(config.jobs?.tasks ?? []), resetTask],
|
|
131
|
-
autoRun: typeof autoRun === 'function'
|
|
132
|
-
? async (payload) => [
|
|
133
|
-
...(await autoRun(payload)),
|
|
134
|
-
{ allQueues: true, cron: '* * * * *' },
|
|
135
|
-
]
|
|
136
|
-
: [...(autoRun ?? []), { allQueues: true, cron: '* * * * *' }],
|
|
137
|
-
};
|
|
106
|
+
const jobs = { ...config.jobs, tasks: [...(config.jobs?.tasks ?? []), resetTask] };
|
|
138
107
|
return {
|
|
139
108
|
...config,
|
|
140
109
|
jobs: config.ai ? jobs : config.jobs,
|
|
@@ -154,51 +123,18 @@ export function apiKeysPlugin(options = {}) {
|
|
|
154
123
|
beforeOperation: [
|
|
155
124
|
...(config.ai.hooks?.beforeOperation ?? []),
|
|
156
125
|
async (args) => {
|
|
157
|
-
const apiKeyId = args.req?.user?.apiKeyId;
|
|
158
126
|
if (!args.req?.user)
|
|
159
127
|
return;
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
apiKey: apiKeyId,
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
if (!args.req.frogbot?.findByID)
|
|
167
|
-
return;
|
|
168
|
-
const key = apiKeyId === undefined
|
|
169
|
-
? undefined
|
|
170
|
-
: (await args.req.frogbot.findByID({
|
|
171
|
-
collection: collectionSlug,
|
|
172
|
-
id: apiKeyId,
|
|
173
|
-
depth: 0,
|
|
174
|
-
overrideAccess: true,
|
|
175
|
-
req: args.req,
|
|
176
|
-
}));
|
|
177
|
-
const user = args.req.user;
|
|
178
|
-
const policy = resolvePolicy({
|
|
179
|
-
key: key,
|
|
180
|
-
user,
|
|
181
|
-
defaults: options.defaults,
|
|
182
|
-
});
|
|
183
|
-
const userPolicy = resolvePolicy({ user, defaults: options.defaults });
|
|
184
|
-
const subjects = [
|
|
185
|
-
apiKeyId === undefined ? undefined : { subject: `key:${apiKeyId}`, policy },
|
|
186
|
-
{ subject: `user:${args.req.user.id}`, policy: userPolicy },
|
|
187
|
-
].filter((value) => Boolean(value));
|
|
188
|
-
if (subjects.some(({ policy: current }) => current.budgetBehavior === 'block' &&
|
|
189
|
-
current.monthlyBudgetUSD !== undefined &&
|
|
190
|
-
current.spendThisPeriodUSD >= current.monthlyBudgetUSD)) {
|
|
128
|
+
const policy = args.req.user;
|
|
129
|
+
if (policy.monthlyBudget !== undefined &&
|
|
130
|
+
(policy.spendThisPeriodUSD ?? 0) >= policy.monthlyBudget) {
|
|
191
131
|
throw new BudgetExceededError();
|
|
192
132
|
}
|
|
193
|
-
for (const { subject, policy: current } of subjects) {
|
|
194
|
-
const violation = limiter.admit(subject, current);
|
|
195
|
-
if (violation)
|
|
196
|
-
throw new RateLimitExceededError(violation);
|
|
197
|
-
}
|
|
198
133
|
Object.assign(args.context, {
|
|
199
134
|
policy,
|
|
200
|
-
|
|
201
|
-
|
|
135
|
+
...('apiKeyId' in policy && typeof policy.apiKeyId === 'string'
|
|
136
|
+
? { usageFields: { apiKey: policy.apiKeyId } }
|
|
137
|
+
: {}),
|
|
202
138
|
});
|
|
203
139
|
},
|
|
204
140
|
],
|
|
@@ -206,7 +142,7 @@ export function apiKeysPlugin(options = {}) {
|
|
|
206
142
|
...(config.ai.hooks?.beforeUpstream ?? []),
|
|
207
143
|
(args) => {
|
|
208
144
|
const models = args.context.policy?.models;
|
|
209
|
-
if (models && !models.includes(args.model)) {
|
|
145
|
+
if (models?.length && !models.includes(args.model)) {
|
|
210
146
|
throw new ModelNotAllowedError(args.model);
|
|
211
147
|
}
|
|
212
148
|
},
|
|
@@ -214,78 +150,34 @@ export function apiKeysPlugin(options = {}) {
|
|
|
214
150
|
afterOperation: [
|
|
215
151
|
...(config.ai.hooks?.afterOperation ?? []),
|
|
216
152
|
async (args) => {
|
|
217
|
-
const context = args.context;
|
|
218
153
|
const req = args.req;
|
|
219
154
|
if (!req?.user || args.error)
|
|
220
155
|
return;
|
|
221
|
-
const
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
156
|
+
const userId = req.user.id;
|
|
157
|
+
const configuredCost = configuredCosts.get(args.model);
|
|
158
|
+
const cost = args.usage
|
|
159
|
+
? configuredCost
|
|
160
|
+
? calculateCostUSD(args.usage, configuredCost)
|
|
161
|
+
: calculateModelCostUSD(args.model, args.usage)
|
|
162
|
+
: 0;
|
|
226
163
|
if (cost <= 0)
|
|
227
164
|
return;
|
|
228
|
-
|
|
229
|
-
req.
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
{ collection: authCollection, id: req.user.id },
|
|
233
|
-
].filter((target) => Boolean(target));
|
|
234
|
-
await Promise.all(targets.map((target) => queue.run(`${target.collection}:${target.id}`, async () => {
|
|
235
|
-
const doc = (await req.frogbot.findByID({
|
|
236
|
-
collection: target.collection,
|
|
237
|
-
id: target.id,
|
|
165
|
+
await queue.run(String(userId), async () => {
|
|
166
|
+
const user = (await req.frogbot.findByID({
|
|
167
|
+
collection: authCollection,
|
|
168
|
+
id: userId,
|
|
238
169
|
depth: 0,
|
|
239
170
|
overrideAccess: true,
|
|
240
171
|
req,
|
|
241
172
|
}));
|
|
242
|
-
const spend = (typeof doc.spendThisPeriodUSD === 'number'
|
|
243
|
-
? doc.spendThisPeriodUSD
|
|
244
|
-
: 0) + cost;
|
|
245
|
-
const sent = Array.isArray(doc.budgetAlertsSent)
|
|
246
|
-
? doc.budgetAlertsSent.filter((value) => typeof value === 'number')
|
|
247
|
-
: [];
|
|
248
|
-
const policy = resolvePolicy({
|
|
249
|
-
key: (target.collection === collectionSlug
|
|
250
|
-
? doc
|
|
251
|
-
: context.policyKey),
|
|
252
|
-
user: (target.collection === authCollection
|
|
253
|
-
? doc
|
|
254
|
-
: req.user),
|
|
255
|
-
defaults: options.defaults,
|
|
256
|
-
});
|
|
257
|
-
const thresholds = options.alerts?.thresholds ?? [0.8, 1];
|
|
258
|
-
const crossed = policy.monthlyBudgetUSD === undefined
|
|
259
|
-
? []
|
|
260
|
-
: thresholds.filter((threshold) => spend / policy.monthlyBudgetUSD >= threshold &&
|
|
261
|
-
!sent.includes(threshold));
|
|
262
173
|
await req.frogbot.update({
|
|
263
|
-
collection:
|
|
264
|
-
id:
|
|
265
|
-
data: {
|
|
266
|
-
spendThisPeriodUSD: spend,
|
|
267
|
-
budgetPeriodStartedAt: doc.budgetPeriodStartedAt ?? new Date().toISOString(),
|
|
268
|
-
budgetAlertsSent: [...sent, ...crossed],
|
|
269
|
-
},
|
|
174
|
+
collection: authCollection,
|
|
175
|
+
id: userId,
|
|
176
|
+
data: { spendThisPeriodUSD: (user.spendThisPeriodUSD ?? 0) + cost },
|
|
270
177
|
overrideAccess: true,
|
|
271
178
|
req,
|
|
272
179
|
});
|
|
273
|
-
|
|
274
|
-
await fetch(options.alerts.webhookURL, {
|
|
275
|
-
method: 'POST',
|
|
276
|
-
headers: {
|
|
277
|
-
'content-type': 'application/json',
|
|
278
|
-
...options.alerts.headers,
|
|
279
|
-
},
|
|
280
|
-
body: JSON.stringify({
|
|
281
|
-
subject: target,
|
|
282
|
-
spendThisPeriodUSD: spend,
|
|
283
|
-
monthlyBudgetUSD: policy.monthlyBudgetUSD,
|
|
284
|
-
thresholds: crossed,
|
|
285
|
-
}),
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
})));
|
|
180
|
+
});
|
|
289
181
|
},
|
|
290
182
|
],
|
|
291
183
|
},
|
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,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.d.ts
CHANGED
|
@@ -1,45 +1,11 @@
|
|
|
1
|
-
export type PolicyMode = 'inherit' | 'custom' | 'unlimited';
|
|
2
|
-
export type PolicyValue<T> = {
|
|
3
|
-
mode?: PolicyMode;
|
|
4
|
-
value?: T;
|
|
5
|
-
};
|
|
6
1
|
export type PolicyDocument = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
tpm?: PolicyValue<number>;
|
|
10
|
-
models?: PolicyValue<string[]>;
|
|
11
|
-
spendThisPeriodUSD?: number;
|
|
12
|
-
budgetBehavior?: 'block' | 'alert-only';
|
|
13
|
-
};
|
|
14
|
-
export type PolicyDefaults = {
|
|
15
|
-
monthlyBudgetUSD?: number;
|
|
16
|
-
rpm?: number;
|
|
17
|
-
tpm?: number;
|
|
2
|
+
apiKeyId?: string;
|
|
3
|
+
monthlyBudget?: number;
|
|
18
4
|
models?: string[];
|
|
19
|
-
|
|
20
|
-
};
|
|
21
|
-
export type EffectivePolicy = PolicyDefaults & {
|
|
22
|
-
spendThisPeriodUSD: number;
|
|
5
|
+
spendThisPeriodUSD?: number;
|
|
23
6
|
};
|
|
24
7
|
export declare class SerialQueue {
|
|
25
8
|
private readonly updates;
|
|
26
|
-
get pending(): number;
|
|
27
9
|
run(subject: string, update: () => Promise<void>): Promise<void>;
|
|
28
10
|
}
|
|
29
|
-
export declare function resolvePolicy(args: {
|
|
30
|
-
key?: PolicyDocument;
|
|
31
|
-
user?: PolicyDocument;
|
|
32
|
-
defaults?: PolicyDefaults;
|
|
33
|
-
}): EffectivePolicy;
|
|
34
|
-
export declare class SlidingWindowRateLimiter {
|
|
35
|
-
private readonly now;
|
|
36
|
-
private readonly windows;
|
|
37
|
-
constructor(now?: () => number);
|
|
38
|
-
admit(subject: string, policy: Pick<EffectivePolicy, 'rpm' | 'tpm'>): {
|
|
39
|
-
kind: 'rpm' | 'tpm';
|
|
40
|
-
retryAfterSeconds: number;
|
|
41
|
-
} | undefined;
|
|
42
|
-
settle(subject: string, tokens: number): void;
|
|
43
|
-
private get;
|
|
44
|
-
}
|
|
45
11
|
//# sourceMappingURL=policy.d.ts.map
|
package/dist/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAE5D,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAUjE"}
|
package/dist/policy.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
export class SerialQueue {
|
|
2
2
|
updates = new Map();
|
|
3
|
-
get pending() {
|
|
4
|
-
return this.updates.size;
|
|
5
|
-
}
|
|
6
3
|
run(subject, update) {
|
|
7
4
|
const next = (this.updates.get(subject) ?? Promise.resolve()).then(update, update);
|
|
8
5
|
let owner;
|
|
@@ -15,64 +12,4 @@ export class SerialQueue {
|
|
|
15
12
|
return next;
|
|
16
13
|
}
|
|
17
14
|
}
|
|
18
|
-
function resolveValue(key, user, fallback) {
|
|
19
|
-
for (const policy of [key, user]) {
|
|
20
|
-
if (policy?.mode === 'unlimited')
|
|
21
|
-
return undefined;
|
|
22
|
-
if (policy?.mode === 'custom')
|
|
23
|
-
return policy.value;
|
|
24
|
-
}
|
|
25
|
-
return fallback;
|
|
26
|
-
}
|
|
27
|
-
export function resolvePolicy(args) {
|
|
28
|
-
const { key, user, defaults = {} } = args;
|
|
29
|
-
const budgetSpend = key?.monthlyBudget?.mode === 'custom'
|
|
30
|
-
? key.spendThisPeriodUSD
|
|
31
|
-
: key?.monthlyBudget?.mode === 'unlimited'
|
|
32
|
-
? 0
|
|
33
|
-
: user?.monthlyBudget?.mode === 'custom'
|
|
34
|
-
? user.spendThisPeriodUSD
|
|
35
|
-
: (key?.spendThisPeriodUSD ?? user?.spendThisPeriodUSD);
|
|
36
|
-
return {
|
|
37
|
-
monthlyBudgetUSD: resolveValue(key?.monthlyBudget, user?.monthlyBudget, defaults.monthlyBudgetUSD),
|
|
38
|
-
rpm: resolveValue(key?.rpm, user?.rpm, defaults.rpm),
|
|
39
|
-
tpm: resolveValue(key?.tpm, user?.tpm, defaults.tpm),
|
|
40
|
-
models: resolveValue(key?.models, user?.models, defaults.models),
|
|
41
|
-
budgetBehavior: key?.budgetBehavior ?? user?.budgetBehavior ?? defaults.budgetBehavior ?? 'block',
|
|
42
|
-
spendThisPeriodUSD: budgetSpend ?? 0,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
export class SlidingWindowRateLimiter {
|
|
46
|
-
now;
|
|
47
|
-
windows = new Map();
|
|
48
|
-
constructor(now = Date.now) {
|
|
49
|
-
this.now = now;
|
|
50
|
-
}
|
|
51
|
-
admit(subject, policy) {
|
|
52
|
-
const now = this.now();
|
|
53
|
-
const entry = this.get(subject, now);
|
|
54
|
-
const retry = (at) => Math.max(1, Math.ceil((at + 60_000 - now) / 1000));
|
|
55
|
-
if (policy.rpm !== undefined && entry.requests.length >= policy.rpm) {
|
|
56
|
-
return { kind: 'rpm', retryAfterSeconds: retry(entry.requests[0]) };
|
|
57
|
-
}
|
|
58
|
-
const tokens = entry.tokens.reduce((sum, item) => sum + item.value, 0);
|
|
59
|
-
if (policy.tpm !== undefined && tokens >= policy.tpm) {
|
|
60
|
-
return { kind: 'tpm', retryAfterSeconds: retry(entry.tokens[0]?.at ?? now) };
|
|
61
|
-
}
|
|
62
|
-
entry.requests.push(now);
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
settle(subject, tokens) {
|
|
66
|
-
if (tokens <= 0)
|
|
67
|
-
return;
|
|
68
|
-
this.get(subject, this.now()).tokens.push({ at: this.now(), value: tokens });
|
|
69
|
-
}
|
|
70
|
-
get(subject, now) {
|
|
71
|
-
const entry = this.windows.get(subject) ?? { requests: [], tokens: [] };
|
|
72
|
-
entry.requests = entry.requests.filter((at) => at > now - 60_000);
|
|
73
|
-
entry.tokens = entry.tokens.filter(({ at }) => at > now - 60_000);
|
|
74
|
-
this.windows.set(subject, entry);
|
|
75
|
-
return entry;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
15
|
//# sourceMappingURL=policy.js.map
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,WAAW;IACL,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE5D,GAAG,CAAC,OAAe,EAAE,MAA2B;QAC9C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnF,IAAI,KAAoB,CAAC;QACzB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxE,CAAC,CAAC;QACF,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frogbotai/plugin-api-keys",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "Multiple named API keys for FrogBot.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Colby Gilbert",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"@payloadcms/ui": "3.85.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
|
-
"@frogbotai/gateway": "0.
|
|
42
|
-
"frogbot": "0.
|
|
41
|
+
"@frogbotai/gateway": "0.17.0",
|
|
42
|
+
"frogbot": "0.17.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@payloadcms/ui": "3.85.1",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"react": "19.2.6",
|
|
49
49
|
"react-dom": "19.2.6",
|
|
50
50
|
"typescript": "5.6.2",
|
|
51
|
-
"@frogbotai/gateway": "0.
|
|
52
|
-
"frogbot": "0.
|
|
53
|
-
"@frogbotai/plugin-roles": "0.
|
|
51
|
+
"@frogbotai/gateway": "0.17.0",
|
|
52
|
+
"frogbot": "0.17.0",
|
|
53
|
+
"@frogbotai/plugin-roles": "0.17.0"
|
|
54
54
|
},
|
|
55
55
|
"publishConfig": {
|
|
56
56
|
"access": "public"
|