@frogbotai/plugin-api-keys 0.14.0 → 0.16.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 +18 -2
- package/dist/client/ApiKeysManager.d.ts.map +1 -1
- package/dist/client/ApiKeysManager.js +5 -3
- package/dist/client/ApiKeysManager.js.map +1 -1
- package/dist/client/ApiKeysManager.spec.js +3 -3
- package/dist/client/ApiKeysManager.spec.js.map +1 -1
- package/dist/collection.d.ts +3 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +62 -23
- 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 +27 -12
- package/dist/fields.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +132 -33
- package/dist/index.js.map +1 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +5 -3
- package/dist/policy.js.map +1 -1
- package/dist/server/services.d.ts +3 -2
- package/dist/server/services.d.ts.map +1 -1
- package/dist/server/services.js +18 -10
- package/dist/server/services.js.map +1 -1
- package/dist/strategy.d.ts.map +1 -1
- package/dist/strategy.js +6 -2
- package/dist/strategy.js.map +1 -1
- package/package.json +6 -7
package/README.md
CHANGED
|
@@ -4,14 +4,13 @@ Add multiple named, independently revocable API keys to a FrogBot application.
|
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
6
|
import { apiKeysPlugin } from '@frogbotai/plugin-api-keys';
|
|
7
|
-
import { rolesPlugin } from '@frogbotai/plugin-roles';
|
|
8
7
|
import { buildConfig } from 'frogbot';
|
|
9
8
|
|
|
10
9
|
export default buildConfig({
|
|
11
10
|
secret: process.env.FROGBOT_SECRET!,
|
|
12
11
|
db: databaseAdapter,
|
|
13
12
|
collections: [{ slug: 'users', auth: true, fields: [] }],
|
|
14
|
-
plugins: [
|
|
13
|
+
plugins: [apiKeysPlugin()],
|
|
15
14
|
});
|
|
16
15
|
```
|
|
17
16
|
|
|
@@ -42,3 +41,20 @@ apiKeysPlugin({
|
|
|
42
41
|
```
|
|
43
42
|
|
|
44
43
|
Collection overrides merge with the generated fields, access, endpoints, hooks, admin components, and transforms applied by other plugins. The manager uses Payload controls without plugin CSS, so global admin styles continue to apply.
|
|
44
|
+
|
|
45
|
+
The plugin has no role system of its own. Keys are owner-scoped, and budget fields are read-only. To layer roles on top, install `@frogbotai/plugin-roles`, list it after `apiKeysPlugin()`, and pass `policyAccess` and `canRevokeAnyKey`:
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
import { allow, hasRole } from '@frogbotai/plugin-roles';
|
|
49
|
+
|
|
50
|
+
apiKeysPlugin({
|
|
51
|
+
policyAccess: allow('admin'),
|
|
52
|
+
canRevokeAnyKey: (req) => hasRole(req, 'admin', 'support'),
|
|
53
|
+
collection: {
|
|
54
|
+
access: {
|
|
55
|
+
read: allow('auditor', 'support', { role: 'member', own: 'owner' }),
|
|
56
|
+
update: allow('support', { role: 'member', own: 'owner' }),
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiKeysManager.d.ts","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ApiKeysManager.d.ts","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"AAEA,OAAO,cAAc,CAAC;AAiBtB,wBAAgB,cAAc,4CAsI7B;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,GACR,EAAE;IACD,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAC5E,2CAmEA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { Button, CopyIcon, Modal, TextInput, Tooltip, useConfig, useListQuery, useModal, useRouteCache } from '@payloadcms/ui';
|
|
4
|
-
import { useState } from 'react';
|
|
5
3
|
import './styles.css';
|
|
4
|
+
import { Button, CopyIcon, Modal, TextInput, Tooltip, useConfig, useListQuery, useModal, useRouteCache, } from '@payloadcms/ui';
|
|
5
|
+
import { useState } from 'react';
|
|
6
6
|
const modalSlug = 'create-api-key-modal';
|
|
7
7
|
export function ApiKeysManager() {
|
|
8
8
|
const { config } = useConfig();
|
|
@@ -83,7 +83,9 @@ export function RevokeApiKey({ rowData, }) {
|
|
|
83
83
|
async function revoke() {
|
|
84
84
|
setLoading(true);
|
|
85
85
|
setError(undefined);
|
|
86
|
-
const response = await fetch(`${config.routes.api}/${collectionSlug}/${rowData.id}/revoke`, {
|
|
86
|
+
const response = await fetch(`${config.routes.api}/${collectionSlug}/${rowData.id}/revoke`, {
|
|
87
|
+
method: 'POST',
|
|
88
|
+
});
|
|
87
89
|
setLoading(false);
|
|
88
90
|
if (!response.ok) {
|
|
89
91
|
const result = (await response.json());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiKeysManager.js","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,
|
|
1
|
+
{"version":3,"file":"ApiKeysManager.js","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,11 @@ const closeModal = vi.fn();
|
|
|
5
5
|
const openModal = vi.fn();
|
|
6
6
|
const clearRouteCache = vi.fn();
|
|
7
7
|
vi.mock('@payloadcms/ui', () => ({
|
|
8
|
-
Button: ({ children, ...props }) => _jsx("button", { ...props, children: children }),
|
|
8
|
+
Button: ({ children, ...props }) => (_jsx("button", { ...props, children: children })),
|
|
9
9
|
CopyIcon: () => _jsx("svg", { "data-testid": "copy-icon" }),
|
|
10
|
-
Modal: ({ children, className }) => _jsx("div", { className: className, role: "dialog", children: children }),
|
|
10
|
+
Modal: ({ children, className }) => (_jsx("div", { className: className, role: "dialog", children: children })),
|
|
11
11
|
TextInput: ({ label, ...props }) => _jsx("input", { "aria-label": label, ...props }),
|
|
12
|
-
Tooltip: ({ children, show }) =>
|
|
12
|
+
Tooltip: ({ children, show }) => show ? _jsx("span", { children: children }) : null,
|
|
13
13
|
useConfig: () => ({ config: { routes: { api: '/api' } } }),
|
|
14
14
|
useListQuery: () => ({ collectionSlug: 'api-keys' }),
|
|
15
15
|
useModal: () => ({ closeModal, openModal }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiKeysManager.spec.js","sourceRoot":"","sources":["../../src/client/ApiKeysManager.spec.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC3B,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1B,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAEhC,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAA2B,EAAE,EAAE,CAAC,oBAAY,KAAK,YAAG,QAAQ,GAAU;
|
|
1
|
+
{"version":3,"file":"ApiKeysManager.spec.js","sourceRoot":"","sources":["../../src/client/ApiKeysManager.spec.tsx"],"names":[],"mappings":"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"}
|
package/dist/collection.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { CollectionConfig } from 'frogbot';
|
|
1
|
+
import type { CollectionConfig, FieldAccess, 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
|
+
canRevokeAnyKey?: (req: FrogbotRequest) => boolean | Promise<boolean>;
|
|
7
9
|
collection?: Partial<CollectionConfig>;
|
|
8
10
|
existing?: CollectionConfig;
|
|
9
11
|
};
|
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,EAEV,gBAAgB,EAGhB,WAAW,EACX,cAAc,EACf,MAAM,SAAS,CAAC;AAKjB,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,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,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,CAoIpF"}
|
package/dist/collection.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { allow } from '@frogbotai/plugin-roles';
|
|
2
|
-
import { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
3
1
|
import { createPolicyFields } from './fields.js';
|
|
2
|
+
import { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
3
|
+
const ownKeys = ({ req }) => (req.user ? { owner: { equals: req.user.id } } : false);
|
|
4
4
|
function mergeFields(...groups) {
|
|
5
5
|
const fields = new Map();
|
|
6
6
|
for (const group of groups) {
|
|
@@ -11,7 +11,7 @@ function mergeFields(...groups) {
|
|
|
11
11
|
}
|
|
12
12
|
return [...fields.values()];
|
|
13
13
|
}
|
|
14
|
-
function createEndpoints({ collectionSlug, tokenPrefix }) {
|
|
14
|
+
function createEndpoints({ collectionSlug, tokenPrefix, canRevokeAnyKey, }) {
|
|
15
15
|
return [
|
|
16
16
|
{
|
|
17
17
|
method: 'post',
|
|
@@ -19,16 +19,19 @@ function createEndpoints({ collectionSlug, tokenPrefix }) {
|
|
|
19
19
|
handler: async (req) => {
|
|
20
20
|
if (!req.user)
|
|
21
21
|
return Response.json({ error: 'Authentication required' }, { status: 401 });
|
|
22
|
-
const body = (await req.json?.().catch(() => null) ?? null);
|
|
22
|
+
const body = ((await req.json?.().catch(() => null)) ?? null);
|
|
23
23
|
const name = typeof body?.name === 'string' ? body.name.trim() : '';
|
|
24
24
|
if (!name)
|
|
25
25
|
return Response.json({ error: 'Name is required' }, { status: 400 });
|
|
26
26
|
try {
|
|
27
|
-
return Response.json(await mintApiKey({ req, collectionSlug, tokenPrefix, name }), {
|
|
27
|
+
return Response.json(await mintApiKey({ req, collectionSlug, tokenPrefix, name }), {
|
|
28
|
+
status: 201,
|
|
29
|
+
});
|
|
28
30
|
}
|
|
29
31
|
catch (error) {
|
|
30
|
-
if (error instanceof ApiKeyServiceError && error.code === 'authentication_required')
|
|
32
|
+
if (error instanceof ApiKeyServiceError && error.code === 'authentication_required') {
|
|
31
33
|
return Response.json({ error: 'Authentication required' }, { status: 401 });
|
|
34
|
+
}
|
|
32
35
|
throw error;
|
|
33
36
|
}
|
|
34
37
|
},
|
|
@@ -40,17 +43,21 @@ function createEndpoints({ collectionSlug, tokenPrefix }) {
|
|
|
40
43
|
if (!req.user)
|
|
41
44
|
return Response.json({ error: 'Authentication required' }, { status: 401 });
|
|
42
45
|
const id = req.routeParams?.id;
|
|
43
|
-
if (typeof id !== 'string' || !id)
|
|
46
|
+
if (typeof id !== 'string' || !id) {
|
|
44
47
|
return Response.json({ error: 'API key not found' }, { status: 404 });
|
|
48
|
+
}
|
|
45
49
|
try {
|
|
46
|
-
const
|
|
50
|
+
const anyOwner = (await canRevokeAnyKey?.(req)) === true;
|
|
51
|
+
const { name: _name, owner: _owner, ...result } = await revokeApiKey({ req, collectionSlug, id, anyOwner });
|
|
47
52
|
return Response.json(result);
|
|
48
53
|
}
|
|
49
54
|
catch (error) {
|
|
50
|
-
if (error instanceof ApiKeyServiceError && error.code === 'authentication_required')
|
|
55
|
+
if (error instanceof ApiKeyServiceError && error.code === 'authentication_required') {
|
|
51
56
|
return Response.json({ error: 'Authentication required' }, { status: 401 });
|
|
52
|
-
|
|
57
|
+
}
|
|
58
|
+
if (error instanceof ApiKeyServiceError && error.code === 'not_found') {
|
|
53
59
|
return Response.json({ error: 'API key not found' }, { status: 404 });
|
|
60
|
+
}
|
|
54
61
|
throw error;
|
|
55
62
|
}
|
|
56
63
|
},
|
|
@@ -62,16 +69,20 @@ function createEndpoints({ collectionSlug, tokenPrefix }) {
|
|
|
62
69
|
if (!req.user)
|
|
63
70
|
return Response.json({ error: 'Authentication required' }, { status: 401 });
|
|
64
71
|
const id = req.routeParams?.id;
|
|
65
|
-
if (typeof id !== 'string' || !id)
|
|
72
|
+
if (typeof id !== 'string' || !id) {
|
|
66
73
|
return Response.json({ error: 'API key not found' }, { status: 404 });
|
|
74
|
+
}
|
|
67
75
|
try {
|
|
68
|
-
|
|
76
|
+
const anyOwner = (await canRevokeAnyKey?.(req)) === true;
|
|
77
|
+
return Response.json(await rotateApiKey({ req, collectionSlug, id, tokenPrefix, anyOwner }), { status: 201 });
|
|
69
78
|
}
|
|
70
79
|
catch (error) {
|
|
71
|
-
if (error instanceof ApiKeyServiceError && error.code === 'authentication_required')
|
|
80
|
+
if (error instanceof ApiKeyServiceError && error.code === 'authentication_required') {
|
|
72
81
|
return Response.json({ error: 'Authentication required' }, { status: 401 });
|
|
73
|
-
|
|
82
|
+
}
|
|
83
|
+
if (error instanceof ApiKeyServiceError && error.code === 'not_found') {
|
|
74
84
|
return Response.json({ error: 'API key not found' }, { status: 404 });
|
|
85
|
+
}
|
|
75
86
|
throw error;
|
|
76
87
|
}
|
|
77
88
|
},
|
|
@@ -79,14 +90,41 @@ function createEndpoints({ collectionSlug, tokenPrefix }) {
|
|
|
79
90
|
];
|
|
80
91
|
}
|
|
81
92
|
export function createApiKeysCollection(options) {
|
|
82
|
-
const { authCollection, collectionSlug, collection, existing, usageCollection } = options;
|
|
93
|
+
const { authCollection, collectionSlug, collection, existing, policyAccess, usageCollection } = options;
|
|
83
94
|
const fields = [
|
|
84
95
|
{ name: 'name', type: 'text', required: true },
|
|
85
|
-
{
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
96
|
+
{
|
|
97
|
+
name: 'owner',
|
|
98
|
+
type: 'relationship',
|
|
99
|
+
relationTo: authCollection,
|
|
100
|
+
required: true,
|
|
101
|
+
index: true,
|
|
102
|
+
access: { update: () => false },
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: 'prefix',
|
|
106
|
+
type: 'text',
|
|
107
|
+
required: true,
|
|
108
|
+
index: true,
|
|
109
|
+
access: { update: () => false },
|
|
110
|
+
admin: { readOnly: true },
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'tokenHash',
|
|
114
|
+
type: 'text',
|
|
115
|
+
required: true,
|
|
116
|
+
unique: true,
|
|
117
|
+
index: true,
|
|
118
|
+
access: { read: () => false, update: () => false },
|
|
119
|
+
admin: { hidden: true },
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'lastUsedAt',
|
|
123
|
+
type: 'date',
|
|
124
|
+
access: { update: () => false },
|
|
125
|
+
admin: { readOnly: true },
|
|
126
|
+
},
|
|
127
|
+
...createPolicyFields(true, policyAccess),
|
|
90
128
|
{
|
|
91
129
|
name: 'revokedAt',
|
|
92
130
|
type: 'date',
|
|
@@ -147,8 +185,8 @@ export function createApiKeysCollection(options) {
|
|
|
147
185
|
access: {
|
|
148
186
|
create: () => false,
|
|
149
187
|
delete: () => false,
|
|
150
|
-
read:
|
|
151
|
-
update:
|
|
188
|
+
read: ownKeys,
|
|
189
|
+
update: ownKeys,
|
|
152
190
|
...existing?.access,
|
|
153
191
|
...collection?.access,
|
|
154
192
|
},
|
|
@@ -156,7 +194,8 @@ export function createApiKeysCollection(options) {
|
|
|
156
194
|
useAsTitle: 'name',
|
|
157
195
|
...existing?.admin,
|
|
158
196
|
...collection?.admin,
|
|
159
|
-
defaultColumns: collection?.admin?.defaultColumns ??
|
|
197
|
+
defaultColumns: collection?.admin?.defaultColumns ??
|
|
198
|
+
existing?.admin?.defaultColumns ?? [
|
|
160
199
|
'name',
|
|
161
200
|
'prefix',
|
|
162
201
|
...(usageCollection ? ['totalCostUSD'] : []),
|
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 } from 'frogbot';
|
|
2
|
-
export declare function createPolicyFields(includeState: boolean): Field[];
|
|
1
|
+
import type { Field, FieldAccess } from 'frogbot';
|
|
2
|
+
export declare function createPolicyFields(includeState: boolean, policyAccess?: FieldAccess): 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,
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA0BlD,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,OAAO,EACrB,YAAY,GAAE,WAAkB,GAC/B,KAAK,EAAE,CAqCT"}
|
package/dist/fields.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function policyField(name, value) {
|
|
1
|
+
const deny = () => false;
|
|
2
|
+
function policyField(name, value, manage) {
|
|
4
3
|
return {
|
|
5
4
|
name,
|
|
6
5
|
type: 'group',
|
|
@@ -21,24 +20,40 @@ function policyField(name, value) {
|
|
|
21
20
|
],
|
|
22
21
|
};
|
|
23
22
|
}
|
|
24
|
-
export function createPolicyFields(includeState) {
|
|
23
|
+
export function createPolicyFields(includeState, policyAccess = deny) {
|
|
25
24
|
return [
|
|
26
|
-
policyField('monthlyBudget', { name: 'value', type: 'number', min: 0 }),
|
|
27
|
-
policyField('rpm', { name: 'value', type: 'number', min: 1 }),
|
|
28
|
-
policyField('tpm', { name: 'value', type: 'number', min: 1 }),
|
|
29
|
-
policyField('models', { name: 'value', type: 'json' }),
|
|
25
|
+
policyField('monthlyBudget', { name: 'value', type: 'number', min: 0 }, policyAccess),
|
|
26
|
+
policyField('rpm', { name: 'value', type: 'number', min: 1 }, policyAccess),
|
|
27
|
+
policyField('tpm', { name: 'value', type: 'number', min: 1 }, policyAccess),
|
|
28
|
+
policyField('models', { name: 'value', type: 'json' }, policyAccess),
|
|
30
29
|
{
|
|
31
30
|
name: 'budgetBehavior',
|
|
32
31
|
type: 'select',
|
|
33
32
|
defaultValue: 'block',
|
|
34
33
|
options: ['block', 'alert-only'],
|
|
35
|
-
access: { update:
|
|
34
|
+
access: { update: policyAccess },
|
|
36
35
|
},
|
|
37
36
|
...(includeState
|
|
38
37
|
? [
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
|
|
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
|
+
},
|
|
42
57
|
]
|
|
43
58
|
: []),
|
|
44
59
|
];
|
package/dist/fields.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAEA,MAAM,IAAI,GAAgB,GAAG,EAAE,CAAC,KAAK,CAAC;AAEtC,SAAS,WAAW,CAAC,IAAY,EAAE,KAAY,EAAE,MAAmB;IAClE,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;QAC1B,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,SAAS;gBACvB,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC;aAC5C;YACD;gBACE,GAAG,KAAK;gBACR,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE;aACxF;SACF;KACO,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,YAAqB,EACrB,eAA4B,IAAI;IAEhC,OAAO;QACL,WAAW,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC;QACrF,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC;QAC3E,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC;QAC3E,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC;QACpE;YACE,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,OAAO;YACrB,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC;YAChC,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;SACjC;QACD,GAAG,CAAC,YAAY;YACd,CAAC,CAAC;gBACE;oBACE,IAAI,EAAE,oBAAoB;oBAC1B,IAAI,EAAE,QAAiB;oBACvB,YAAY,EAAE,CAAC;oBACf,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;oBAC/B,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC1B;gBACD;oBACE,IAAI,EAAE,uBAAuB;oBAC7B,IAAI,EAAE,MAAe;oBACrB,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;oBAC/B,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC1B;gBACD;oBACE,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,MAAe;oBACrB,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;oBAC/B,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;iBACxB;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { CollectionConfig, Plugin } from 'frogbot';
|
|
2
|
-
export type {
|
|
3
|
-
export type { MintApiKeyOptions, RevokeApiKeyOptions, RotateApiKeyOptions } from './server/services.js';
|
|
1
|
+
import type { CollectionConfig, FieldAccess, FrogbotRequest, Plugin } from 'frogbot';
|
|
2
|
+
export type { EffectivePolicy, PolicyDefaults, PolicyDocument, PolicyMode, PolicyValue, } from './policy.js';
|
|
3
|
+
export type { MintApiKeyOptions, RevokeApiKeyOptions, RotateApiKeyOptions, } from './server/services.js';
|
|
4
4
|
export { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
5
|
-
export type {
|
|
5
|
+
export type { ApiKeyHeaderOptions, ApiKeyTokenOptions } from './server/token.js';
|
|
6
6
|
export { createApiKeyToken, extractApiKeyToken, getApiKeyPrefix, hashApiKeyToken, } from './server/token.js';
|
|
7
7
|
export type { ApiKeyStrategy } from './strategy.js';
|
|
8
8
|
export { isApiKeyStrategy } from './strategy.js';
|
|
@@ -12,6 +12,8 @@ export type ApiKeysPluginOptions = {
|
|
|
12
12
|
tokenPrefix?: string;
|
|
13
13
|
headerNames?: string[];
|
|
14
14
|
collection?: Partial<CollectionConfig>;
|
|
15
|
+
policyAccess?: FieldAccess;
|
|
16
|
+
canRevokeAnyKey?: (req: FrogbotRequest) => boolean | Promise<boolean>;
|
|
15
17
|
defaults?: import('./policy.js').PolicyDefaults;
|
|
16
18
|
alerts?: {
|
|
17
19
|
webhookURL: string;
|
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":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAQrF,YAAY,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,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,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,QAAQ,CAAC,EAAE,OAAO,aAAa,EAAE,cAAc,CAAC;IAChD,MAAM,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH,CAAC;AAQF,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAgUxE"}
|
package/dist/index.js
CHANGED
|
@@ -1,27 +1,37 @@
|
|
|
1
1
|
import { calculateModelCostUSD } from '@frogbotai/gateway';
|
|
2
|
-
import { BudgetExceededError, ModelNotAllowedError, RateLimitExceededError } from '@frogbotai/gateway/errors';
|
|
2
|
+
import { BudgetExceededError, ModelNotAllowedError, RateLimitExceededError, } from '@frogbotai/gateway/errors';
|
|
3
3
|
import { createApiKeysCollection } from './collection.js';
|
|
4
4
|
import { createPolicyFields } from './fields.js';
|
|
5
|
-
import { SerialQueue, SlidingWindowRateLimiter
|
|
5
|
+
import { resolvePolicy, SerialQueue, SlidingWindowRateLimiter } from './policy.js';
|
|
6
6
|
import { createApiKeyStrategy } from './strategy.js';
|
|
7
7
|
export { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
8
8
|
export { createApiKeyToken, extractApiKeyToken, getApiKeyPrefix, hashApiKeyToken, } from './server/token.js';
|
|
9
9
|
export { isApiKeyStrategy } from './strategy.js';
|
|
10
10
|
export function apiKeysPlugin(options = {}) {
|
|
11
11
|
for (const [name, value] of Object.entries(options.defaults ?? {})) {
|
|
12
|
-
if (name !== 'models' &&
|
|
12
|
+
if (name !== 'models' &&
|
|
13
|
+
name !== 'budgetBehavior' &&
|
|
14
|
+
(typeof value !== 'number' || !Number.isFinite(value) || value < 0)) {
|
|
13
15
|
throw new Error(`[plugin-api-keys] Default '${name}' must be a non-negative finite number.`);
|
|
16
|
+
}
|
|
14
17
|
}
|
|
15
|
-
if ((options.defaults?.rpm !== undefined && options.defaults.rpm < 1) ||
|
|
18
|
+
if ((options.defaults?.rpm !== undefined && options.defaults.rpm < 1) ||
|
|
19
|
+
(options.defaults?.tpm !== undefined && options.defaults.tpm < 1)) {
|
|
16
20
|
throw new Error('[plugin-api-keys] RPM and TPM defaults must be at least 1.');
|
|
17
|
-
|
|
21
|
+
}
|
|
22
|
+
if (options.defaults?.budgetBehavior !== undefined &&
|
|
23
|
+
!['block', 'alert-only'].includes(options.defaults.budgetBehavior)) {
|
|
18
24
|
throw new Error('[plugin-api-keys] Budget behavior must be block or alert-only.');
|
|
19
|
-
|
|
25
|
+
}
|
|
26
|
+
if (options.defaults?.models?.some((model) => !model.includes('/'))) {
|
|
20
27
|
throw new Error('[plugin-api-keys] Default models must use provider/model IDs.');
|
|
21
|
-
|
|
28
|
+
}
|
|
29
|
+
if (options.alerts && !options.alerts.webhookURL) {
|
|
22
30
|
throw new Error('[plugin-api-keys] Alert webhookURL is required.');
|
|
23
|
-
|
|
31
|
+
}
|
|
32
|
+
if (options.alerts?.thresholds?.some((threshold) => !Number.isFinite(threshold) || threshold <= 0 || threshold > 1)) {
|
|
24
33
|
throw new Error('[plugin-api-keys] Alert thresholds must be greater than 0 and at most 1.');
|
|
34
|
+
}
|
|
25
35
|
const limiter = new SlidingWindowRateLimiter();
|
|
26
36
|
const queue = new SerialQueue();
|
|
27
37
|
return (config) => {
|
|
@@ -31,23 +41,35 @@ export function apiKeysPlugin(options = {}) {
|
|
|
31
41
|
if (!auth || auth.auth === undefined || auth.auth === false) {
|
|
32
42
|
throw new Error(`[plugin-api-keys] Auth collection '${authCollection}' must exist and have auth enabled.`);
|
|
33
43
|
}
|
|
34
|
-
const reservedPolicyFields = new Set([
|
|
44
|
+
const reservedPolicyFields = new Set([
|
|
45
|
+
'monthlyBudget',
|
|
46
|
+
'rpm',
|
|
47
|
+
'tpm',
|
|
48
|
+
'models',
|
|
49
|
+
'budgetBehavior',
|
|
50
|
+
'spendThisPeriodUSD',
|
|
51
|
+
'budgetPeriodStartedAt',
|
|
52
|
+
'budgetAlertsSent',
|
|
53
|
+
]);
|
|
35
54
|
const collision = auth.fields.find((field) => 'name' in field && reservedPolicyFields.has(field.name));
|
|
36
|
-
if (collision && 'name' in collision)
|
|
55
|
+
if (collision && 'name' in collision) {
|
|
37
56
|
throw new Error(`[plugin-api-keys] Auth field '${collision.name}' is reserved.`);
|
|
57
|
+
}
|
|
38
58
|
const existing = config.collections.find((collection) => collection.slug === collectionSlug);
|
|
39
59
|
const usageLog = config.ai
|
|
40
|
-
? config.collections.find((item) => item.usageLog === true) ?? {
|
|
60
|
+
? (config.collections.find((item) => item.usageLog === true) ?? {
|
|
41
61
|
slug: 'usage-logs',
|
|
42
62
|
usageLog: true,
|
|
43
63
|
fields: [],
|
|
44
|
-
}
|
|
64
|
+
})
|
|
45
65
|
: undefined;
|
|
46
66
|
const collection = createApiKeysCollection({
|
|
47
67
|
authCollection,
|
|
48
68
|
collectionSlug,
|
|
49
69
|
tokenPrefix: options.tokenPrefix ?? 'fb',
|
|
50
70
|
usageCollection: usageLog?.slug,
|
|
71
|
+
policyAccess: options.policyAccess,
|
|
72
|
+
canRevokeAnyKey: options.canRevokeAnyKey,
|
|
51
73
|
collection: options.collection,
|
|
52
74
|
existing,
|
|
53
75
|
});
|
|
@@ -71,7 +93,7 @@ export function apiKeysPlugin(options = {}) {
|
|
|
71
93
|
const authConfig = typeof next.auth === 'object' ? next.auth : {};
|
|
72
94
|
next = {
|
|
73
95
|
...next,
|
|
74
|
-
fields: [...next.fields, ...createPolicyFields(true)],
|
|
96
|
+
fields: [...next.fields, ...createPolicyFields(true, options.policyAccess)],
|
|
75
97
|
auth: {
|
|
76
98
|
...authConfig,
|
|
77
99
|
strategies: [...(authConfig.strategies ?? []), strategy],
|
|
@@ -90,7 +112,11 @@ export function apiKeysPlugin(options = {}) {
|
|
|
90
112
|
await req.payload.update({
|
|
91
113
|
collection,
|
|
92
114
|
where: { id: { exists: true } },
|
|
93
|
-
data: {
|
|
115
|
+
data: {
|
|
116
|
+
spendThisPeriodUSD: 0,
|
|
117
|
+
budgetPeriodStartedAt: new Date().toISOString(),
|
|
118
|
+
budgetAlertsSent: [],
|
|
119
|
+
},
|
|
94
120
|
overrideAccess: true,
|
|
95
121
|
req,
|
|
96
122
|
});
|
|
@@ -103,12 +129,14 @@ export function apiKeysPlugin(options = {}) {
|
|
|
103
129
|
...config.jobs,
|
|
104
130
|
tasks: [...(config.jobs?.tasks ?? []), resetTask],
|
|
105
131
|
autoRun: typeof autoRun === 'function'
|
|
106
|
-
? async (payload) => [
|
|
132
|
+
? async (payload) => [
|
|
133
|
+
...(await autoRun(payload)),
|
|
134
|
+
{ allQueues: true, cron: '* * * * *' },
|
|
135
|
+
]
|
|
107
136
|
: [...(autoRun ?? []), { allQueues: true, cron: '* * * * *' }],
|
|
108
137
|
};
|
|
109
138
|
return {
|
|
110
139
|
...config,
|
|
111
|
-
_roles: { ...config._roles, required: true },
|
|
112
140
|
jobs: config.ai ? jobs : config.jobs,
|
|
113
141
|
collections: [
|
|
114
142
|
...collections,
|
|
@@ -129,34 +157,58 @@ export function apiKeysPlugin(options = {}) {
|
|
|
129
157
|
const apiKeyId = args.req?.user?.apiKeyId;
|
|
130
158
|
if (!args.req?.user)
|
|
131
159
|
return;
|
|
132
|
-
if (apiKeyId !== undefined)
|
|
133
|
-
args.context.usageFields = {
|
|
160
|
+
if (apiKeyId !== undefined) {
|
|
161
|
+
args.context.usageFields = {
|
|
162
|
+
...args.context.usageFields,
|
|
163
|
+
apiKey: apiKeyId,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
134
166
|
if (!args.req.frogbot?.findByID)
|
|
135
167
|
return;
|
|
136
|
-
const key = apiKeyId === undefined
|
|
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
|
+
}));
|
|
137
177
|
const user = args.req.user;
|
|
138
|
-
const policy = resolvePolicy({
|
|
178
|
+
const policy = resolvePolicy({
|
|
179
|
+
key: key,
|
|
180
|
+
user,
|
|
181
|
+
defaults: options.defaults,
|
|
182
|
+
});
|
|
139
183
|
const userPolicy = resolvePolicy({ user, defaults: options.defaults });
|
|
140
184
|
const subjects = [
|
|
141
185
|
apiKeyId === undefined ? undefined : { subject: `key:${apiKeyId}`, policy },
|
|
142
186
|
{ subject: `user:${args.req.user.id}`, policy: userPolicy },
|
|
143
187
|
].filter((value) => Boolean(value));
|
|
144
|
-
if (subjects.some(({ policy: current }) => current.budgetBehavior === 'block' &&
|
|
188
|
+
if (subjects.some(({ policy: current }) => current.budgetBehavior === 'block' &&
|
|
189
|
+
current.monthlyBudgetUSD !== undefined &&
|
|
190
|
+
current.spendThisPeriodUSD >= current.monthlyBudgetUSD)) {
|
|
145
191
|
throw new BudgetExceededError();
|
|
192
|
+
}
|
|
146
193
|
for (const { subject, policy: current } of subjects) {
|
|
147
194
|
const violation = limiter.admit(subject, current);
|
|
148
195
|
if (violation)
|
|
149
196
|
throw new RateLimitExceededError(violation);
|
|
150
197
|
}
|
|
151
|
-
Object.assign(args.context, {
|
|
198
|
+
Object.assign(args.context, {
|
|
199
|
+
policy,
|
|
200
|
+
policySubjects: subjects,
|
|
201
|
+
policyKey: key,
|
|
202
|
+
});
|
|
152
203
|
},
|
|
153
204
|
],
|
|
154
205
|
beforeUpstream: [
|
|
155
206
|
...(config.ai.hooks?.beforeUpstream ?? []),
|
|
156
207
|
(args) => {
|
|
157
208
|
const models = args.context.policy?.models;
|
|
158
|
-
if (models && !models.includes(args.model))
|
|
209
|
+
if (models && !models.includes(args.model)) {
|
|
159
210
|
throw new ModelNotAllowedError(args.model);
|
|
211
|
+
}
|
|
160
212
|
},
|
|
161
213
|
],
|
|
162
214
|
afterOperation: [
|
|
@@ -167,25 +219,72 @@ export function apiKeysPlugin(options = {}) {
|
|
|
167
219
|
if (!req?.user || args.error)
|
|
168
220
|
return;
|
|
169
221
|
const tokens = args.usage?.totalTokens ?? 0;
|
|
170
|
-
for (const { subject } of context.policySubjects ?? [])
|
|
222
|
+
for (const { subject } of context.policySubjects ?? []) {
|
|
171
223
|
limiter.settle(subject, tokens);
|
|
224
|
+
}
|
|
172
225
|
const cost = args.usage ? calculateModelCostUSD(args.model, args.usage) : 0;
|
|
173
226
|
if (cost <= 0)
|
|
174
227
|
return;
|
|
175
228
|
const targets = [
|
|
176
|
-
req.user.apiKeyId === undefined
|
|
229
|
+
req.user.apiKeyId === undefined
|
|
230
|
+
? undefined
|
|
231
|
+
: { collection: collectionSlug, id: req.user.apiKeyId },
|
|
177
232
|
{ collection: authCollection, id: req.user.id },
|
|
178
233
|
].filter((target) => Boolean(target));
|
|
179
234
|
await Promise.all(targets.map((target) => queue.run(`${target.collection}:${target.id}`, async () => {
|
|
180
|
-
const doc = await req.frogbot.findByID({
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
235
|
+
const doc = (await req.frogbot.findByID({
|
|
236
|
+
collection: target.collection,
|
|
237
|
+
id: target.id,
|
|
238
|
+
depth: 0,
|
|
239
|
+
overrideAccess: true,
|
|
240
|
+
req,
|
|
241
|
+
}));
|
|
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
|
+
});
|
|
184
257
|
const thresholds = options.alerts?.thresholds ?? [0.8, 1];
|
|
185
|
-
const crossed = policy.monthlyBudgetUSD === undefined
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
258
|
+
const crossed = policy.monthlyBudgetUSD === undefined
|
|
259
|
+
? []
|
|
260
|
+
: thresholds.filter((threshold) => spend / policy.monthlyBudgetUSD >= threshold &&
|
|
261
|
+
!sent.includes(threshold));
|
|
262
|
+
await req.frogbot.update({
|
|
263
|
+
collection: target.collection,
|
|
264
|
+
id: target.id,
|
|
265
|
+
data: {
|
|
266
|
+
spendThisPeriodUSD: spend,
|
|
267
|
+
budgetPeriodStartedAt: doc.budgetPeriodStartedAt ?? new Date().toISOString(),
|
|
268
|
+
budgetAlertsSent: [...sent, ...crossed],
|
|
269
|
+
},
|
|
270
|
+
overrideAccess: true,
|
|
271
|
+
req,
|
|
272
|
+
});
|
|
273
|
+
if (options.alerts && crossed.length) {
|
|
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
|
+
}
|
|
189
288
|
})));
|
|
190
289
|
},
|
|
191
290
|
],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAE9G,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAIrD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAElG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAsBjD,MAAM,UAAU,aAAa,CAAC,UAAgC,EAAE;IAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QACnE,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,gBAAgB,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,yCAAyC,CAAC,CAAC;IAC1N,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAC1N,IAAI,OAAO,CAAC,QAAQ,EAAE,cAAc,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAC5M,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACtJ,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrH,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IACjN,MAAM,OAAO,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;IAChC,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC;QACzD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,sCAAsC,cAAc,qCAAqC,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACrK,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,IAAI,KAAK,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACvG,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,SAAS,CAAC,IAAI,gBAAgB,CAAC,CAAC;QACvH,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAC7F,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE;YACxB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI;gBAC3D,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,EAAE;aACX;YACH,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,UAAU,GAAG,uBAAuB,CAAC;YACzC,cAAc;YACd,cAAc;YACd,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;YACxC,eAAe,EAAE,QAAQ,EAAE,IAAI;YAC/B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,oBAAoB,CAAC;YACpC,cAAc;YACd,cAAc;YACd,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;SACzC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,cAAuB;YAC7B,UAAU,EAAE,cAAc;YAC1B,KAAK,EAAE,IAAI;SACZ,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClD,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;gBAAE,IAAI,GAAG,UAAU,CAAC;YACpD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,IAAI,GAAG;oBACL,GAAG,IAAI;oBACP,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBACrD,IAAI,EAAE;wBACJ,GAAG,UAAU;wBACb,UAAU,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC;qBACzD;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,KAAK,QAAQ;gBAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;YAChF,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAkE;YAC/E,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;YACpE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;gBACzB,KAAK,MAAM,UAAU,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;oBAC1D,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;wBACvB,UAAU;wBACV,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;wBAC/B,IAAI,EAAE,EAAE,kBAAkB,EAAE,CAAC,EAAE,qBAAqB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE;wBACtG,cAAc,EAAE,IAAI;wBACpB,GAAG;qBACJ,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YACxB,CAAC;SACF,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;QACrC,MAAM,IAAI,GAAG;YACX,GAAG,MAAM,CAAC,IAAI;YACd,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC;YACjD,OAAO,EAAE,OAAO,OAAO,KAAK,UAAU;gBACpC,CAAC,CAAC,KAAK,EAAE,OAAsC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAoB,EAAE,CAAC;gBAClI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAoB,EAAE,CAAC;SAC1E,CAAC;QACF,OAAO;YACL,GAAG,MAAM;YACT,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC5C,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;YACpC,WAAW,EAAE;gBACX,GAAG,WAAW;gBACd,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBACjC,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACpD,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;oBACzC,CAAC,CAAC,EAAE,CAAC;aACR;YACD,GAAG,CAAC,MAAM,CAAC,EAAE;gBACX,CAAC,CAAC;oBACE,EAAE,EAAE;wBACF,GAAG,MAAM,CAAC,EAAE;wBACZ,KAAK,EAAE;4BACL,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK;4BAClB,eAAe,EAAE;gCACf,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,IAAI,EAAE,CAAC;gCAC3C,KAAK,EAAE,IAAI,EAAE,EAAE;oCACb,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC;oCAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI;wCAAE,OAAO;oCAC5B,IAAI,QAAQ,KAAK,SAAS;wCAAE,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,WAAmD,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;oCAClJ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ;wCAAE,OAAO;oCACxC,MAAM,GAAG,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,cAAuB,EAAE,EAAE,EAAE,QAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAA4B,CAAC;oCAC3N,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAsB,CAAC;oCAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,GAAG,EAAE,GAAiC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;oCAC3G,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;oCACvE,MAAM,QAAQ,GAAG;wCACf,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,EAAE,MAAM,EAAE;wCAC3E,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;qCAC5D,CAAC,MAAM,CAAC,CAAC,KAAK,EAA0E,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;oCAC5G,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,KAAK,OAAO,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,CAAC;wCAAE,MAAM,IAAI,mBAAmB,EAAE,CAAC;oCACpN,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;wCACpD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;wCAClD,IAAI,SAAS;4CAAE,MAAM,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC;oCAC7D,CAAC;oCACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAwB,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gCACrG,CAAC;6BACF;4BACD,cAAc,EAAE;gCACd,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,IAAI,EAAE,CAAC;gCAC1C,CAAC,IAAI,EAAE,EAAE;oCACP,MAAM,MAAM,GAAI,IAAI,CAAC,OAAyB,CAAC,MAAM,EAAE,MAAM,CAAC;oCAC9D,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;wCAAE,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gCACzF,CAAC;6BACF;4BACD,cAAc,EAAE;gCACd,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,IAAI,EAAE,CAAC;gCAC1C,KAAK,EAAE,IAAI,EAAE,EAAE;oCACb,MAAM,OAAO,GAAG,IAAI,CAAC,OAAwB,CAAC;oCAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;oCACrB,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK;wCAAE,OAAO;oCACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC;oCAC5C,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO,CAAC,cAAc,IAAI,EAAE;wCAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oCACxF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC5E,IAAI,IAAI,IAAI,CAAC;wCAAE,OAAO;oCACtB,MAAM,OAAO,GAAG;wCACd,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;wCACnG,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;qCAChD,CAAC,MAAM,CAAC,CAAC,MAAM,EAAyD,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oCAC7F,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;wCAClG,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,EAAW,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE,CAA4B,CAAC;wCAC3K,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;wCAC/F,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wCAC3I,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAA+B,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAmB,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;wCACnP,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;wCAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,gBAAiB,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;wCAC1K,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,EAAW,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,CAAC,qBAAqB,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,gBAAgB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;wCACpR,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;4CAAE,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;oCACrT,CAAC,CAAC,CAAC,CAAC,CAAC;gCACP,CAAC;6BACF;yBACF;qBACF;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
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,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE5D,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG;IAC7C,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAE5D,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAUjE;
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE5D,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG;IAC7C,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAE5D,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAUjE;AAcD,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,GAAG,eAAe,CAuBlB;AAID,qBAAa,wBAAwB;IAGvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAFhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;gBAE7B,GAAG,GAAE,MAAM,MAAiB;IAEzD,KAAK,CACH,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,GAAG,KAAK,CAAC,GAC3C;QAAE,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAejE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK7C,OAAO,CAAC,GAAG;CAOZ"}
|
package/dist/policy.js
CHANGED
|
@@ -32,7 +32,7 @@ export function resolvePolicy(args) {
|
|
|
32
32
|
? 0
|
|
33
33
|
: user?.monthlyBudget?.mode === 'custom'
|
|
34
34
|
? user.spendThisPeriodUSD
|
|
35
|
-
: key?.spendThisPeriodUSD ?? user?.spendThisPeriodUSD;
|
|
35
|
+
: (key?.spendThisPeriodUSD ?? user?.spendThisPeriodUSD);
|
|
36
36
|
return {
|
|
37
37
|
monthlyBudgetUSD: resolveValue(key?.monthlyBudget, user?.monthlyBudget, defaults.monthlyBudgetUSD),
|
|
38
38
|
rpm: resolveValue(key?.rpm, user?.rpm, defaults.rpm),
|
|
@@ -52,11 +52,13 @@ export class SlidingWindowRateLimiter {
|
|
|
52
52
|
const now = this.now();
|
|
53
53
|
const entry = this.get(subject, now);
|
|
54
54
|
const retry = (at) => Math.max(1, Math.ceil((at + 60_000 - now) / 1000));
|
|
55
|
-
if (policy.rpm !== undefined && entry.requests.length >= policy.rpm)
|
|
55
|
+
if (policy.rpm !== undefined && entry.requests.length >= policy.rpm) {
|
|
56
56
|
return { kind: 'rpm', retryAfterSeconds: retry(entry.requests[0]) };
|
|
57
|
+
}
|
|
57
58
|
const tokens = entry.tokens.reduce((sum, item) => sum + item.value, 0);
|
|
58
|
-
if (policy.tpm !== undefined && tokens >= policy.tpm)
|
|
59
|
+
if (policy.tpm !== undefined && tokens >= policy.tpm) {
|
|
59
60
|
return { kind: 'tpm', retryAfterSeconds: retry(entry.tokens[0]?.at ?? now) };
|
|
61
|
+
}
|
|
60
62
|
entry.requests.push(now);
|
|
61
63
|
return undefined;
|
|
62
64
|
}
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AA4BA,MAAM,OAAO,WAAW;IACL,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE5D,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,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;AAED,SAAS,YAAY,
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export type RevokeApiKeyOptions = {
|
|
|
9
9
|
req: FrogbotRequest;
|
|
10
10
|
collectionSlug: string;
|
|
11
11
|
id: string;
|
|
12
|
+
anyOwner?: boolean;
|
|
12
13
|
};
|
|
13
14
|
export declare class ApiKeyServiceError extends Error {
|
|
14
15
|
readonly code: 'authentication_required' | 'not_found';
|
|
@@ -24,14 +25,14 @@ export declare function mintApiKey(options: MintApiKeyOptions): Promise<{
|
|
|
24
25
|
export type RotateApiKeyOptions = RevokeApiKeyOptions & {
|
|
25
26
|
tokenPrefix: string;
|
|
26
27
|
};
|
|
27
|
-
export declare function rotateApiKey({ req, collectionSlug, id, tokenPrefix }: RotateApiKeyOptions): Promise<{
|
|
28
|
+
export declare function rotateApiKey({ req, collectionSlug, id, tokenPrefix, anyOwner, }: RotateApiKeyOptions): Promise<{
|
|
28
29
|
id: unknown;
|
|
29
30
|
name: string;
|
|
30
31
|
prefix: string;
|
|
31
32
|
token: string;
|
|
32
33
|
createdAt: unknown;
|
|
33
34
|
}>;
|
|
34
|
-
export declare function revokeApiKey({ req, collectionSlug, id }: RevokeApiKeyOptions): Promise<{
|
|
35
|
+
export declare function revokeApiKey({ req, collectionSlug, id, anyOwner }: RevokeApiKeyOptions): Promise<{
|
|
35
36
|
id: string | number;
|
|
36
37
|
name: string;
|
|
37
38
|
owner: string | number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/server/services.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/server/services.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,cAAc,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,cAAc,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,KAAK;aACf,IAAI,EAAE,yBAAyB,GAAG,WAAW;gBAA7C,IAAI,EAAE,yBAAyB,GAAG,WAAW;CAG1E;AAsBD,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB;;;;;;GAU1D;AAED,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,wBAAsB,YAAY,CAAC,EACjC,GAAG,EACH,cAAc,EACd,EAAE,EACF,WAAW,EACX,QAAQ,GACT,EAAE,mBAAmB;;;;;;GASrB;AAED,wBAAsB,YAAY,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,mBAAmB;;;;;GA+B5F"}
|
package/dist/server/services.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { hasRole } from '@frogbotai/plugin-roles';
|
|
2
1
|
import { createApiKeyToken, getApiKeyPrefix, hashApiKeyToken } from './token.js';
|
|
3
2
|
export class ApiKeyServiceError extends Error {
|
|
4
3
|
code;
|
|
@@ -7,15 +6,15 @@ export class ApiKeyServiceError extends Error {
|
|
|
7
6
|
this.code = code;
|
|
8
7
|
}
|
|
9
8
|
}
|
|
10
|
-
async function mintForOwner({ req, collectionSlug, tokenPrefix, name, owner }) {
|
|
9
|
+
async function mintForOwner({ req, collectionSlug, tokenPrefix, name, owner, }) {
|
|
11
10
|
const token = createApiKeyToken({ tokenPrefix });
|
|
12
11
|
const prefix = getApiKeyPrefix(token);
|
|
13
|
-
const doc = await req.frogbot.create({
|
|
12
|
+
const doc = (await req.frogbot.create({
|
|
14
13
|
collection: collectionSlug,
|
|
15
14
|
data: { name, owner, prefix, tokenHash: hashApiKeyToken(token) },
|
|
16
15
|
overrideAccess: true,
|
|
17
16
|
req,
|
|
18
|
-
});
|
|
17
|
+
}));
|
|
19
18
|
return { id: doc.id, name, prefix, token, createdAt: doc.createdAt };
|
|
20
19
|
}
|
|
21
20
|
export async function mintApiKey(options) {
|
|
@@ -30,11 +29,17 @@ export async function mintApiKey(options) {
|
|
|
30
29
|
owner,
|
|
31
30
|
});
|
|
32
31
|
}
|
|
33
|
-
export async function rotateApiKey({ req, collectionSlug, id, tokenPrefix }) {
|
|
34
|
-
const revoked = await revokeApiKey({ req, collectionSlug, id });
|
|
35
|
-
return mintForOwner({
|
|
32
|
+
export async function rotateApiKey({ req, collectionSlug, id, tokenPrefix, anyOwner, }) {
|
|
33
|
+
const revoked = await revokeApiKey({ req, collectionSlug, id, anyOwner });
|
|
34
|
+
return mintForOwner({
|
|
35
|
+
req,
|
|
36
|
+
collectionSlug,
|
|
37
|
+
tokenPrefix,
|
|
38
|
+
name: revoked.name,
|
|
39
|
+
owner: revoked.owner,
|
|
40
|
+
});
|
|
36
41
|
}
|
|
37
|
-
export async function revokeApiKey({ req, collectionSlug, id }) {
|
|
42
|
+
export async function revokeApiKey({ req, collectionSlug, id, anyOwner }) {
|
|
38
43
|
const owner = req.user?.id;
|
|
39
44
|
if (owner === undefined)
|
|
40
45
|
throw new ApiKeyServiceError('authentication_required');
|
|
@@ -44,12 +49,15 @@ export async function revokeApiKey({ req, collectionSlug, id }) {
|
|
|
44
49
|
limit: 1,
|
|
45
50
|
overrideAccess: true,
|
|
46
51
|
req,
|
|
47
|
-
where:
|
|
52
|
+
where: anyOwner
|
|
48
53
|
? { id: { equals: id } }
|
|
49
54
|
: { and: [{ id: { equals: id } }, { owner: { equals: owner } }] },
|
|
50
55
|
});
|
|
51
56
|
const key = result.docs[0];
|
|
52
|
-
if (!key ||
|
|
57
|
+
if (!key ||
|
|
58
|
+
(typeof key.id !== 'string' && typeof key.id !== 'number') ||
|
|
59
|
+
typeof key.name !== 'string' ||
|
|
60
|
+
(typeof key.owner !== 'string' && typeof key.owner !== 'number')) {
|
|
53
61
|
throw new ApiKeyServiceError('not_found');
|
|
54
62
|
}
|
|
55
63
|
const revokedAt = typeof key.revokedAt === 'string' ? key.revokedAt : new Date().toISOString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/server/services.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/server/services.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAgBjF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACf;IAA5B,YAA4B,IAA6C;QACvE,KAAK,CAAC,IAAI,CAAC,CAAC;QADc,SAAI,GAAJ,IAAI,CAAyC;IAEzE,CAAC;CACF;AAID,KAAK,UAAU,YAAY,CAAC,EAC1B,GAAG,EACH,cAAc,EACd,WAAW,EACX,IAAI,EACJ,KAAK,GACe;IACpB,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QACpC,UAAU,EAAE,cAAuB;QACnC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE;QAChE,cAAc,EAAE,IAAI;QACpB,GAAG;KACJ,CAAC,CAA4B,CAAC;IAC/B,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;IACnC,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;IACjF,OAAO,YAAY,CAAC;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAID,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,GAAG,EACH,cAAc,EACd,EAAE,EACF,WAAW,EACX,QAAQ,GACY;IACpB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1E,OAAO,YAAY,CAAC;QAClB,GAAG;QACH,cAAc;QACd,WAAW;QACX,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAuB;IAC3F,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;IAC3B,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;QACpC,UAAU,EAAE,cAAuB;QACnC,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,cAAc,EAAE,IAAI;QACpB,GAAG;QACH,KAAK,EAAE,QAAQ;YACb,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;YACxB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE;KACpE,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAwC,CAAC;IAClE,IACE,CAAC,GAAG;QACJ,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC;QAC1D,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,EAChE,CAAC;QACD,MAAM,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/F,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QACvB,UAAU,EAAE,cAAuB;QACnC,EAAE,EAAE,GAAG,CAAC,EAAW;QACnB,IAAI,EAAE,EAAE,SAAS,EAAE;QACnB,cAAc,EAAE,IAAI;QACpB,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;AACrE,CAAC"}
|
package/dist/strategy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAI3E,KAAK,eAAe,GAAG;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAI3E,KAAK,eAAe,GAAG;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAsD7E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAElE"}
|
package/dist/strategy.js
CHANGED
|
@@ -6,7 +6,8 @@ export function createApiKeyStrategy(options) {
|
|
|
6
6
|
name: 'api-key',
|
|
7
7
|
authenticate: async ({ headers, payload }) => {
|
|
8
8
|
const token = extractApiKeyToken(headers, { headerNames });
|
|
9
|
-
if (!token ||
|
|
9
|
+
if (!token ||
|
|
10
|
+
!new RegExp(`^${tokenPrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}_[A-Za-z0-9_-]{43}$`).test(token)) {
|
|
10
11
|
return { user: null };
|
|
11
12
|
}
|
|
12
13
|
const keys = await payload.find({
|
|
@@ -15,7 +16,10 @@ export function createApiKeyStrategy(options) {
|
|
|
15
16
|
limit: 1,
|
|
16
17
|
overrideAccess: true,
|
|
17
18
|
where: {
|
|
18
|
-
and: [
|
|
19
|
+
and: [
|
|
20
|
+
{ tokenHash: { equals: hashApiKeyToken(token) } },
|
|
21
|
+
{ revokedAt: { exists: false } },
|
|
22
|
+
],
|
|
19
23
|
},
|
|
20
24
|
});
|
|
21
25
|
const key = keys.docs[0];
|
package/dist/strategy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIxE,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAkB,CAAC;AASvD,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAC7E,MAAM,QAAQ,GAAmB;QAC/B,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YAC3D,
|
|
1
|
+
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIxE,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAkB,CAAC;AASvD,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAC7E,MAAM,QAAQ,GAAmB;QAC/B,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YAC3D,IACE,CAAC,KAAK;gBACN,CAAC,IAAI,MAAM,CACT,IAAI,WAAW,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAC5E,CAAC,IAAI,CAAC,KAAK,CAAC,EACb,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACxB,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAC9B,UAAU,EAAE,cAAc;gBAC1B,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,CAAC;gBACR,cAAc,EAAE,IAAI;gBACpB,KAAK,EAAE;oBACL,GAAG,EAAE;wBACH,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE;wBACjD,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;qBACjC;iBACF;aACF,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAiE,CAAC;YACzF,IAAI,CAAC,GAAG,EAAE,KAAK;gBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAEvC,MAAM,IAAI,GAAG,MAAM,OAAO;iBACvB,QAAQ,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;iBACvF,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAEjC,MAAM,OAAO,CAAC,MAAM,CAAC;gBACnB,UAAU,EAAE,cAAc;gBAC1B,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;gBAC9C,cAAc,EAAE,IAAI;aACrB,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI,EAAE;oBACJ,GAAG,IAAI;oBACP,UAAU,EAAE,cAAc;oBAC1B,SAAS,EAAE,SAAS;oBACpB,QAAQ,EAAE,GAAG,CAAC,EAAE;iBACjB;aACF,CAAC;QACJ,CAAC;KACF,CAAC;IACF,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frogbotai/plugin-api-keys",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "Multiple named API keys for FrogBot.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Colby Gilbert",
|
|
@@ -38,9 +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/
|
|
42
|
-
"frogbot": "0.
|
|
43
|
-
"@frogbotai/gateway": "0.14.0"
|
|
41
|
+
"@frogbotai/gateway": "0.16.0",
|
|
42
|
+
"frogbot": "0.16.0"
|
|
44
43
|
},
|
|
45
44
|
"devDependencies": {
|
|
46
45
|
"@payloadcms/ui": "3.85.1",
|
|
@@ -49,9 +48,9 @@
|
|
|
49
48
|
"react": "19.2.6",
|
|
50
49
|
"react-dom": "19.2.6",
|
|
51
50
|
"typescript": "5.6.2",
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"@frogbotai/plugin-roles": "0.
|
|
51
|
+
"@frogbotai/gateway": "0.16.0",
|
|
52
|
+
"frogbot": "0.16.0",
|
|
53
|
+
"@frogbotai/plugin-roles": "0.16.0"
|
|
55
54
|
},
|
|
56
55
|
"publishConfig": {
|
|
57
56
|
"access": "public"
|