@frogbotai/plugin-api-keys 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/client/ApiKeysManager.d.ts.map +1 -1
- package/dist/client/ApiKeysManager.js +29 -45
- package/dist/client/ApiKeysManager.js.map +1 -1
- package/dist/client/styles.css +6 -6
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +8 -1
- package/dist/collection.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.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 +12 -2
- package/dist/server/services.js.map +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ Authorization: Bearer fb_...
|
|
|
21
21
|
X-API-Key: fb_...
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
Plaintext keys are returned only when created. The collection stores SHA-256 hashes and supports multiple independently revoked keys per user.
|
|
24
|
+
Plaintext keys are returned only when created. The collection stores SHA-256 hashes and supports multiple independently revoked keys per user. Minting and rotating need a signed-in session: a request authenticated by an API key gets `403`, so a leaked key can't leave new keys behind. A key can still list, rename, and revoke keys.
|
|
25
25
|
|
|
26
26
|
A key has no budget or model limits of its own; requests use the owner's AI policy. With AI configured, usage rows include an optional `apiKey` relationship to the authenticating key. Cookie-authenticated requests omit it, and the relationship follows `collectionSlug`.
|
|
27
27
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiKeysManager.d.ts","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"AAEA,OAAO,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiKeysManager.d.ts","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"AAEA,OAAO,cAAc,CAAC;AAkBtB,wBAAgB,cAAc,4CAyJ7B;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,2CAkEA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import './styles.css';
|
|
4
|
-
import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogTitle, DialogTrigger, Input, Label, Tooltip
|
|
4
|
+
import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogTitle, DialogTrigger, Input, Label, Tooltip } from '@frogbotai/ui';
|
|
5
5
|
import { useConfig, useListQuery, useRouteCache } from '@frogbotai/ui/admin';
|
|
6
6
|
import { CopyIcon } from '@frogbotai/ui/icons';
|
|
7
7
|
import { useId, useState } from 'react';
|
|
@@ -94,51 +94,35 @@ export function ApiKeysManager() {
|
|
|
94
94
|
role: "alert",
|
|
95
95
|
children: "Key generated! Copy it now — you won't see it again."
|
|
96
96
|
}),
|
|
97
|
-
/*#__PURE__*/
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
children: [
|
|
124
|
-
/*#__PURE__*/ _jsx(TooltipTrigger, {
|
|
125
|
-
asChild: true,
|
|
126
|
-
children: /*#__PURE__*/ _jsx(Button, {
|
|
127
|
-
"aria-label": "Copy API key",
|
|
128
|
-
size: "icon",
|
|
129
|
-
type: "button",
|
|
130
|
-
variant: "ghost",
|
|
131
|
-
...copyHandlers('icon'),
|
|
132
|
-
children: /*#__PURE__*/ _jsx(CopyIcon, {})
|
|
133
|
-
})
|
|
134
|
-
}),
|
|
135
|
-
/*#__PURE__*/ _jsx(TooltipContent, {
|
|
136
|
-
children: copied ? 'Copied' : 'Copy'
|
|
137
|
-
})
|
|
138
|
-
]
|
|
97
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
98
|
+
className: "api-keys-dialog__token-row",
|
|
99
|
+
children: [
|
|
100
|
+
/*#__PURE__*/ _jsx(Tooltip, {
|
|
101
|
+
label: copied ? 'Copied' : 'Click to copy',
|
|
102
|
+
open: hoveredControl === 'token',
|
|
103
|
+
children: /*#__PURE__*/ _jsx("button", {
|
|
104
|
+
"aria-label": "Click to copy API key",
|
|
105
|
+
className: "api-keys-dialog__token",
|
|
106
|
+
type: "button",
|
|
107
|
+
...copyHandlers('token'),
|
|
108
|
+
children: /*#__PURE__*/ _jsx("code", {
|
|
109
|
+
children: token
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
}),
|
|
113
|
+
/*#__PURE__*/ _jsx(Tooltip, {
|
|
114
|
+
label: copied ? 'Copied' : 'Copy',
|
|
115
|
+
open: hoveredControl === 'icon',
|
|
116
|
+
children: /*#__PURE__*/ _jsx(Button, {
|
|
117
|
+
"aria-label": "Copy API key",
|
|
118
|
+
size: "icon",
|
|
119
|
+
type: "button",
|
|
120
|
+
variant: "ghost",
|
|
121
|
+
...copyHandlers('icon'),
|
|
122
|
+
children: /*#__PURE__*/ _jsx(CopyIcon, {})
|
|
139
123
|
})
|
|
140
|
-
|
|
141
|
-
|
|
124
|
+
})
|
|
125
|
+
]
|
|
142
126
|
})
|
|
143
127
|
]
|
|
144
128
|
}) : /*#__PURE__*/ _jsxs(_Fragment, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/ApiKeysManager.tsx"],"names":["Button","Dialog","DialogContent","DialogDescription","DialogFooter","DialogTitle","DialogTrigger","Input","Label","Tooltip","
|
|
1
|
+
{"version":3,"sources":["../../src/client/ApiKeysManager.tsx"],"names":["Button","Dialog","DialogContent","DialogDescription","DialogFooter","DialogTitle","DialogTrigger","Input","Label","Tooltip","useConfig","useListQuery","useRouteCache","CopyIcon","useId","useState","ApiKeysManager","config","collectionSlug","clearRouteCache","nameId","open","setOpen","name","setName","token","setToken","error","setError","loading","setLoading","copied","setCopied","hoveredControl","setHoveredControl","changeOpen","next","undefined","createKey","trim","response","fetch","routes","api","method","headers","body","JSON","stringify","result","json","ok","copyToken","navigator","clipboard","writeText","copyHandlers","control","onClick","onMouseEnter","onMouseLeave","onOpenChange","asChild","variant","type","className","withCloseButton","role","div","label","button","aria-label","code","size","htmlFor","id","placeholder","readOnly","value","onChange","event","target","onKeyDown","key","preventDefault","p","disabled","RevokeApiKey","rowData","revoked","setRevoked","revoke","revokedAt","span"],"mappings":"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","file":"ApiKeysManager.js"}
|
package/dist/client/styles.css
CHANGED
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
.fb-dialog__description.api-keys-dialog__warning {
|
|
14
|
-
color: var(--
|
|
14
|
+
color: var(--color-text);
|
|
15
15
|
font-weight: 600;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
.api-keys-dialog__error {
|
|
19
19
|
margin: 0;
|
|
20
|
-
color: var(--
|
|
20
|
+
color: var(--color-text-danger);
|
|
21
21
|
font-size: var(--fb-text-sm);
|
|
22
22
|
line-height: var(--fb-text-sm--line-height);
|
|
23
23
|
}
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
gap: 0.5rem;
|
|
29
29
|
min-width: 0;
|
|
30
30
|
padding: 0.25rem 0.25rem 0.25rem 1rem;
|
|
31
|
-
background: var(--
|
|
32
|
-
border: 1px solid var(--
|
|
31
|
+
background: var(--color-bg-secondary);
|
|
32
|
+
border: 1px solid var(--color-border);
|
|
33
33
|
border-radius: var(--fb-radius-lg);
|
|
34
34
|
transition: border-color 200ms ease-out;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
.api-keys-dialog__token-row:hover {
|
|
38
|
-
border-color: var(--
|
|
38
|
+
border-color: var(--special-border-translucent-strong);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.api-keys-dialog__token {
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
.api-keys-dialog__token:focus-visible {
|
|
56
|
-
outline: 2px solid var(--
|
|
56
|
+
outline: 2px solid var(--accessibility-focus-color);
|
|
57
57
|
outline-offset: 2px;
|
|
58
58
|
}
|
|
59
59
|
}
|
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,EAEL,KAAK,gBAAgB,EAIrB,KAAK,cAAc,EAEpB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAIrB,KAAK,cAAc,EAEpB,MAAM,SAAS,CAAC;AAYjB,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;AAyJF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAqHpF"}
|
package/dist/collection.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { moneyField } from 'frogbot';
|
|
2
|
-
import { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
2
|
+
import { ApiKeyServiceError, isApiKeyRequest, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
3
3
|
const MANAGER_COMPONENT = '@frogbotai/plugin-api-keys/client#ApiKeysManager';
|
|
4
|
+
const sessionRequired = ()=>Response.json({
|
|
5
|
+
error: 'An API key cannot mint or rotate API keys. Sign in to manage keys.'
|
|
6
|
+
}, {
|
|
7
|
+
status: 403
|
|
8
|
+
});
|
|
4
9
|
const ownKeys = ({ req })=>req.user ? {
|
|
5
10
|
owner: {
|
|
6
11
|
equals: req.user.id
|
|
@@ -64,6 +69,7 @@ function createEndpoints({ collectionSlug, tokenPrefix, canRevokeAnyKey }) {
|
|
|
64
69
|
}, {
|
|
65
70
|
status: 401
|
|
66
71
|
});
|
|
72
|
+
if (isApiKeyRequest(req)) return sessionRequired();
|
|
67
73
|
const body = await req.json?.().catch(()=>null) ?? null;
|
|
68
74
|
const name = typeof body?.name === 'string' ? body.name.trim() : '';
|
|
69
75
|
if (!name) return Response.json({
|
|
@@ -146,6 +152,7 @@ function createEndpoints({ collectionSlug, tokenPrefix, canRevokeAnyKey }) {
|
|
|
146
152
|
}, {
|
|
147
153
|
status: 401
|
|
148
154
|
});
|
|
155
|
+
if (isApiKeyRequest(req)) return sessionRequired();
|
|
149
156
|
const id = req.routeParams?.id;
|
|
150
157
|
if (typeof id !== 'string' || !id) {
|
|
151
158
|
return Response.json({
|
package/dist/collection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/collection.ts"],"names":["moneyField","ApiKeyServiceError","mintApiKey","revokeApiKey","rotateApiKey","MANAGER_COMPONENT","ownKeys","req","user","owner","equals","id","mergeFields","groups","fields","Map","group","field","key","name","JSON","stringify","set","values","createViews","usageCollection","views","length","type","defaultFields","components","beforeTable","index","findIndex","view","map","position","createEndpoints","collectionSlug","tokenPrefix","canRevokeAnyKey","method","path","handler","
|
|
1
|
+
{"version":3,"sources":["../src/collection.ts"],"names":["moneyField","ApiKeyServiceError","isApiKeyRequest","mintApiKey","revokeApiKey","rotateApiKey","MANAGER_COMPONENT","sessionRequired","Response","json","error","status","ownKeys","req","user","owner","equals","id","mergeFields","groups","fields","Map","group","field","key","name","JSON","stringify","set","values","createViews","usageCollection","views","length","type","defaultFields","components","beforeTable","index","findIndex","view","map","position","createEndpoints","collectionSlug","tokenPrefix","canRevokeAnyKey","method","path","handler","body","catch","trim","code","routeParams","anyOwner","_name","_owner","result","createApiKeysCollection","options","authCollection","collection","existing","required","relationTo","access","update","admin","readOnly","unique","read","hidden","condition","_","siblingData","Boolean","revokedAt","label","virtual","hooks","afterRead","data","undefined","frogbot","find","depth","overrideAccess","pagination","where","apiKey","docs","reduce","total","doc","cost","costUSD","Cell","endpoints","slug","labels","singular","plural","timestamps","versions","authorship","custom","internal","create","delete","icon","useAsTitle"],"mappings":"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","file":"collection.js"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAMlF,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,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;AAEF,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAmGxE"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { cascadeDelete } from 'frogbot/internal';
|
|
1
2
|
import { createApiKeysCollection } from './collection.js';
|
|
2
3
|
import { apiKeyMeHook, apiKeyStrategyName, createApiKeyStrategy } from './strategy.js';
|
|
3
4
|
export { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
|
|
@@ -43,7 +44,7 @@ export function apiKeysPlugin(options = {}) {
|
|
|
43
44
|
if (item.slug === collectionSlug) next = collection;
|
|
44
45
|
if (item.slug === authCollection) {
|
|
45
46
|
const authConfig = typeof next.auth === 'object' ? next.auth : {};
|
|
46
|
-
next = {
|
|
47
|
+
next = cascadeDelete({
|
|
47
48
|
...next,
|
|
48
49
|
auth: {
|
|
49
50
|
...authConfig,
|
|
@@ -59,7 +60,10 @@ export function apiKeysPlugin(options = {}) {
|
|
|
59
60
|
apiKeyMeHook
|
|
60
61
|
]
|
|
61
62
|
}
|
|
62
|
-
}
|
|
63
|
+
}, {
|
|
64
|
+
collection: collectionSlug,
|
|
65
|
+
field: 'owner'
|
|
66
|
+
});
|
|
63
67
|
}
|
|
64
68
|
if (item === usageLog) next = {
|
|
65
69
|
...next,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["createApiKeysCollection","apiKeyMeHook","apiKeyStrategyName","createApiKeyStrategy","ApiKeyServiceError","mintApiKey","revokeApiKey","rotateApiKey","createApiKeyToken","extractApiKeyToken","getApiKeyPrefix","hashApiKeyToken","isApiKeyStrategy","apiKeysPlugin","options","config","authCollection","collectionSlug","auth","collections","find","collection","slug","undefined","Error","existing","usageLog","ai","item","fields","tokenPrefix","usageCollection","canRevokeAnyKey","strategy","headerNames","usageField","name","type","relationTo","index","map","next","authConfig","strategies","hooks","me","includes","beforeOperation","req","context","user","apiKeyId","_strategy","usageFields","apiKey"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["cascadeDelete","createApiKeysCollection","apiKeyMeHook","apiKeyStrategyName","createApiKeyStrategy","ApiKeyServiceError","mintApiKey","revokeApiKey","rotateApiKey","createApiKeyToken","extractApiKeyToken","getApiKeyPrefix","hashApiKeyToken","isApiKeyStrategy","apiKeysPlugin","options","config","authCollection","collectionSlug","auth","collections","find","collection","slug","undefined","Error","existing","usageLog","ai","item","fields","tokenPrefix","usageCollection","canRevokeAnyKey","strategy","headerNames","usageField","name","type","relationTo","index","map","next","authConfig","strategies","hooks","me","field","includes","beforeOperation","req","context","user","apiKeyId","_strategy","usageFields","apiKey"],"mappings":"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","file":"index.js"}
|
|
@@ -12,9 +12,10 @@ export type RevokeApiKeyOptions = {
|
|
|
12
12
|
anyOwner?: boolean;
|
|
13
13
|
};
|
|
14
14
|
export declare class ApiKeyServiceError extends Error {
|
|
15
|
-
readonly code: 'authentication_required' | 'not_found';
|
|
16
|
-
constructor(code: 'authentication_required' | 'not_found');
|
|
15
|
+
readonly code: 'authentication_required' | 'not_found' | 'session_required';
|
|
16
|
+
constructor(code: 'authentication_required' | 'not_found' | 'session_required');
|
|
17
17
|
}
|
|
18
|
+
export declare function isApiKeyRequest(req: FrogBotRequest): boolean;
|
|
18
19
|
export declare function mintApiKey(options: MintApiKeyOptions): Promise<{
|
|
19
20
|
id: unknown;
|
|
20
21
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/server/services.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/server/services.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAK9C,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,GAAG,kBAAkB;gBAAlE,IAAI,EAAE,yBAAyB,GAAG,WAAW,GAAG,kBAAkB;CAG/F;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAE5D;AA+BD,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;;;;;;GAWrB;AAED,wBAAsB,YAAY,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,mBAAmB;;;;;GAmC5F"}
|
package/dist/server/services.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { apiKeyStrategyName } from '../strategy.js';
|
|
1
2
|
import { createApiKeyToken, getApiKeyPrefix, hashApiKeyToken } from './token.js';
|
|
2
3
|
export class ApiKeyServiceError extends Error {
|
|
3
4
|
code;
|
|
@@ -5,6 +6,15 @@ export class ApiKeyServiceError extends Error {
|
|
|
5
6
|
super(code), this.code = code;
|
|
6
7
|
}
|
|
7
8
|
}
|
|
9
|
+
export function isApiKeyRequest(req) {
|
|
10
|
+
return req.user?._strategy === apiKeyStrategyName;
|
|
11
|
+
}
|
|
12
|
+
function requireSessionOwner(req) {
|
|
13
|
+
const owner = req.user?.id;
|
|
14
|
+
if (owner === undefined) throw new ApiKeyServiceError('authentication_required');
|
|
15
|
+
if (isApiKeyRequest(req)) throw new ApiKeyServiceError('session_required');
|
|
16
|
+
return owner;
|
|
17
|
+
}
|
|
8
18
|
async function mintForOwner({ req, collectionSlug, tokenPrefix, name, owner }) {
|
|
9
19
|
const token = createApiKeyToken({
|
|
10
20
|
tokenPrefix
|
|
@@ -30,8 +40,7 @@ async function mintForOwner({ req, collectionSlug, tokenPrefix, name, owner }) {
|
|
|
30
40
|
};
|
|
31
41
|
}
|
|
32
42
|
export async function mintApiKey(options) {
|
|
33
|
-
const owner = options.req
|
|
34
|
-
if (owner === undefined) throw new ApiKeyServiceError('authentication_required');
|
|
43
|
+
const owner = requireSessionOwner(options.req);
|
|
35
44
|
return mintForOwner({
|
|
36
45
|
req: options.req,
|
|
37
46
|
collectionSlug: options.collectionSlug,
|
|
@@ -41,6 +50,7 @@ export async function mintApiKey(options) {
|
|
|
41
50
|
});
|
|
42
51
|
}
|
|
43
52
|
export async function rotateApiKey({ req, collectionSlug, id, tokenPrefix, anyOwner }) {
|
|
53
|
+
requireSessionOwner(req);
|
|
44
54
|
const revoked = await revokeApiKey({
|
|
45
55
|
req,
|
|
46
56
|
collectionSlug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/services.ts"],"names":["createApiKeyToken","getApiKeyPrefix","hashApiKeyToken","ApiKeyServiceError","Error","code","
|
|
1
|
+
{"version":3,"sources":["../../src/server/services.ts"],"names":["apiKeyStrategyName","createApiKeyToken","getApiKeyPrefix","hashApiKeyToken","ApiKeyServiceError","Error","code","isApiKeyRequest","req","user","_strategy","requireSessionOwner","owner","id","undefined","mintForOwner","collectionSlug","tokenPrefix","name","token","prefix","doc","frogbot","create","collection","data","tokenHash","overrideAccess","createdAt","mintApiKey","options","rotateApiKey","anyOwner","revoked","revokeApiKey","result","find","depth","limit","where","equals","and","key","docs","revokedAt","Date","toISOString","update"],"mappings":"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","file":"services.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frogbotai/plugin-api-keys",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
4
4
|
"description": "Multiple named API keys for FrogBot.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Colby Gilbert",
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"react": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
39
39
|
"react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
40
|
-
"@frogbotai/gateway": "0.
|
|
41
|
-
"
|
|
42
|
-
"
|
|
40
|
+
"@frogbotai/gateway": "0.36.0",
|
|
41
|
+
"@frogbotai/ui": "0.36.0",
|
|
42
|
+
"frogbot": "0.36.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@testing-library/react": "^16.3.0",
|
|
@@ -47,10 +47,10 @@
|
|
|
47
47
|
"react": "19.3.1",
|
|
48
48
|
"react-dom": "19.3.1",
|
|
49
49
|
"typescript": "6.0.3",
|
|
50
|
-
"@frogbotai/
|
|
51
|
-
"@frogbotai/
|
|
52
|
-
"@frogbotai/
|
|
53
|
-
"frogbot": "0.
|
|
50
|
+
"@frogbotai/gateway": "0.36.0",
|
|
51
|
+
"@frogbotai/ui": "0.36.0",
|
|
52
|
+
"@frogbotai/plugin-roles": "0.36.0",
|
|
53
|
+
"frogbot": "0.36.0"
|
|
54
54
|
},
|
|
55
55
|
"publishConfig": {
|
|
56
56
|
"access": "public"
|