@frogbotai/plugin-api-keys 0.36.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,7 +23,7 @@ X-API-Key: fb_...
23
23
 
24
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
- 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`.
26
+ The plugin adds no budget or model limits; requests use the owner's AI policy. With `@frogbotai/plugin-ai-policy` on the same auth collection, each key also gets a model list and monthly cap inside its owner's, set in a collapsed Limits section of the create dialog. Other plugins add such fields to the keys collection: `mint` accepts them as `data`, `rotate` copies them from the revoked key, and server components registered under `admin.custom['plugin-api-keys'].createFields` render in the dialog's Limits section, reading and setting values with `useCreateKeyData()` from `@frogbotai/plugin-api-keys/client`. 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
 
28
28
  Build and start-only workflows must run `frogbot generate:importmap` after adding the plugin. Add it as a `prebuild` step when CI invokes `next build` directly. If the server console reports a component missing from the import map, run `frogbot generate:importmap` and rebuild, or restart `frogbot dev`.
29
29
 
@@ -42,7 +42,7 @@ apiKeysPlugin({
42
42
 
43
43
  Collection overrides merge with the generated fields, access, endpoints, hooks, admin components, and transforms applied by other plugins. The manager uses the default admin components, and the token dialog ships a small stylesheet built on the admin theme variables.
44
44
 
45
- The plugin has no role system of its own. Keys are owner-scoped. To layer roles on top, install `@frogbotai/plugin-roles`, list it after `apiKeysPlugin()`, and pass `canRevokeAnyKey` and collection access:
45
+ The plugin has no role system of its own. Keys are owner-scoped. To layer roles on top, install `@frogbotai/plugin-roles` and pass `canRevokeAnyKey` and collection access:
46
46
 
47
47
  ```ts
48
48
  import { allow, hasRole } from '@frogbotai/plugin-roles';
@@ -1,5 +1,11 @@
1
1
  import './styles.css';
2
- export declare function ApiKeysManager(): import("react/jsx-runtime").JSX.Element;
2
+ import { type ReactNode } from 'react';
3
+ export type ApiKeysManagerProps = {
4
+ collectionSlug?: string;
5
+ /** Fields other plugins register, shown in the create dialog's Limits section. */
6
+ createFields?: ReactNode[];
7
+ };
8
+ export declare function ApiKeysManager(props: ApiKeysManagerProps): import("react/jsx-runtime").JSX.Element;
3
9
  export declare function RevokeApiKey({ rowData, }: {
4
10
  rowData: {
5
11
  id: string | number;
@@ -1 +1 @@
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
+ {"version":3,"file":"ApiKeysManager.d.ts","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"AAEA,OAAO,cAAc,CAAC;AAmBtB,OAAO,EAAE,KAAK,SAAS,EAA4B,MAAM,OAAO,CAAC;AAIjE,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;CAC5B,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAiLxD;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,17 +1,20 @@
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 } from '@frogbotai/ui';
4
+ import { Button, Collapsible, CollapsibleContent, CollapsibleTrigger, 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
- import { useId, useState } from 'react';
8
- export function ApiKeysManager() {
7
+ import { useId, useMemo, useState } from 'react';
8
+ import { CreateKeyDataContext } from './createKeyData.js';
9
+ export function ApiKeysManager(props) {
9
10
  const { config } = useConfig();
10
- const { collectionSlug } = useListQuery();
11
+ const listQuery = useListQuery();
12
+ const collectionSlug = props.collectionSlug ?? listQuery.collectionSlug;
11
13
  const { clearRouteCache } = useRouteCache();
12
14
  const nameId = useId();
13
15
  const [open, setOpen] = useState(false);
14
16
  const [name, setName] = useState('');
17
+ const [data, setData] = useState({});
15
18
  const [token, setToken] = useState();
16
19
  const [error, setError] = useState();
17
20
  const [loading, setLoading] = useState(false);
@@ -20,6 +23,7 @@ export function ApiKeysManager() {
20
23
  function changeOpen(next) {
21
24
  if (next) {
22
25
  setName('');
26
+ setData({});
23
27
  setToken(undefined);
24
28
  setError(undefined);
25
29
  setCopied(false);
@@ -38,7 +42,10 @@ export function ApiKeysManager() {
38
42
  headers: {
39
43
  'content-type': 'application/json'
40
44
  },
41
- body: JSON.stringify({
45
+ body: JSON.stringify(Object.keys(data).length > 0 ? {
46
+ name,
47
+ data
48
+ } : {
42
49
  name
43
50
  })
44
51
  });
@@ -55,6 +62,15 @@ export function ApiKeysManager() {
55
62
  await navigator.clipboard.writeText(token);
56
63
  setCopied(true);
57
64
  }
65
+ const createKeyData = useMemo(()=>({
66
+ data,
67
+ setValue: (field, value)=>setData((current)=>({
68
+ ...current,
69
+ [field]: value
70
+ }))
71
+ }), [
72
+ data
73
+ ]);
58
74
  function copyHandlers(control) {
59
75
  return {
60
76
  onClick: copyToken,
@@ -151,7 +167,23 @@ export function ApiKeysManager() {
151
167
  }
152
168
  })
153
169
  ]
154
- })
170
+ }),
171
+ props.createFields?.length ? /*#__PURE__*/ _jsxs(Collapsible, {
172
+ className: "api-keys-dialog__limits",
173
+ children: [
174
+ /*#__PURE__*/ _jsx(CollapsibleTrigger, {
175
+ className: "api-keys-dialog__limits-trigger",
176
+ children: "Limits"
177
+ }),
178
+ /*#__PURE__*/ _jsx(CollapsibleContent, {
179
+ className: "api-keys-dialog__limits-content",
180
+ children: /*#__PURE__*/ _jsx(CreateKeyDataContext, {
181
+ value: createKeyData,
182
+ children: props.createFields
183
+ })
184
+ })
185
+ ]
186
+ }) : null
155
187
  ]
156
188
  }),
157
189
  error ? /*#__PURE__*/ _jsx("p", {
@@ -1 +1 @@
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"}
1
+ {"version":3,"sources":["../../src/client/ApiKeysManager.tsx"],"names":["Button","Collapsible","CollapsibleContent","CollapsibleTrigger","Dialog","DialogContent","DialogDescription","DialogFooter","DialogTitle","DialogTrigger","Input","Label","Tooltip","useConfig","useListQuery","useRouteCache","CopyIcon","useId","useMemo","useState","CreateKeyDataContext","ApiKeysManager","props","config","listQuery","collectionSlug","clearRouteCache","nameId","open","setOpen","name","setName","data","setData","token","setToken","error","setError","loading","setLoading","copied","setCopied","hoveredControl","setHoveredControl","changeOpen","next","undefined","createKey","trim","response","fetch","routes","api","method","headers","body","JSON","stringify","Object","keys","length","result","json","ok","copyToken","navigator","clipboard","writeText","createKeyData","setValue","field","value","current","copyHandlers","control","onClick","onMouseEnter","onMouseLeave","onOpenChange","asChild","variant","type","className","withCloseButton","role","div","label","button","aria-label","code","size","htmlFor","id","placeholder","readOnly","onChange","event","target","onKeyDown","key","preventDefault","createFields","p","disabled","RevokeApiKey","rowData","revoked","setRevoked","revoke","revokedAt","span"],"mappings":"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","file":"ApiKeysManager.js"}
@@ -0,0 +1,9 @@
1
+ export type CreateKeyData = {
2
+ /** Values posted to `mint` as `data`. */
3
+ data: Record<string, unknown>;
4
+ setValue: (field: string, value: unknown) => void;
5
+ };
6
+ export declare const CreateKeyDataContext: import("react").Context<CreateKeyData | null>;
7
+ /** Reads and sets the `data` the create dialog mints the key with, from a registered create field. */
8
+ export declare function useCreateKeyData(): CreateKeyData;
9
+ //# sourceMappingURL=createKeyData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createKeyData.d.ts","sourceRoot":"","sources":["../../src/client/createKeyData.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,oBAAoB,+CAA4C,CAAC;AAE9E,sGAAsG;AACtG,wBAAgB,gBAAgB,IAAI,aAAa,CAMhD"}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { createContext, useContext } from 'react';
3
+ export const CreateKeyDataContext = /*#__PURE__*/ createContext(null);
4
+ /** Reads and sets the `data` the create dialog mints the key with, from a registered create field. */ export function useCreateKeyData() {
5
+ const value = useContext(CreateKeyDataContext);
6
+ if (!value) throw new Error('useCreateKeyData must be used inside the API key create dialog.');
7
+ return value;
8
+ }
9
+
10
+ //# sourceMappingURL=createKeyData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/client/createKeyData.tsx"],"names":["createContext","useContext","CreateKeyDataContext","useCreateKeyData","value","Error"],"mappings":"AAAA;AAEA,SAASA,aAAa,EAAEC,UAAU,QAAQ,QAAQ;AAQlD,OAAO,MAAMC,qCAAuBF,cAAoC,MAAM;AAE9E,oGAAoG,GACpG,OAAO,SAASG;IACd,MAAMC,QAAQH,WAAWC;IAEzB,IAAI,CAACE,OAAO,MAAM,IAAIC,MAAM;IAE5B,OAAOD;AACT","file":"createKeyData.js"}
@@ -10,6 +10,20 @@
10
10
  gap: 0.5rem;
11
11
  }
12
12
 
13
+ .fb-collapsible__trigger.api-keys-dialog__limits-trigger {
14
+ width: 100%;
15
+ cursor: pointer;
16
+ }
17
+
18
+ .fb-collapsible__content.api-keys-dialog__limits-content {
19
+ display: flex;
20
+ flex-direction: column;
21
+ gap: 1rem;
22
+ padding: 0.75rem 0.25rem 0;
23
+ overflow: visible;
24
+ box-shadow: none;
25
+ }
26
+
13
27
  .fb-dialog__description.api-keys-dialog__warning {
14
28
  color: var(--color-text);
15
29
  font-weight: 600;
package/dist/client.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export { ApiKeysManager, RevokeApiKey } from './client/ApiKeysManager.js';
1
+ export { ApiKeysManager, type ApiKeysManagerProps, RevokeApiKey } from './client/ApiKeysManager.js';
2
+ export { type CreateKeyData, useCreateKeyData } from './client/createKeyData.js';
2
3
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,KAAK,aAAa,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/client.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { ApiKeysManager, RevokeApiKey } from './client/ApiKeysManager.js';
2
+ export { useCreateKeyData } from './client/createKeyData.js';
2
3
 
3
4
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts"],"names":["ApiKeysManager","RevokeApiKey"],"mappings":"AAAA,SAASA,cAAc,EAAEC,YAAY,QAAQ,6BAA6B","file":"client.js"}
1
+ {"version":3,"sources":["../src/client.ts"],"names":["ApiKeysManager","RevokeApiKey","useCreateKeyData"],"mappings":"AAAA,SAASA,cAAc,EAA4BC,YAAY,QAAQ,6BAA6B;AACpG,SAA6BC,gBAAgB,QAAQ,4BAA4B","file":"client.js"}
@@ -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;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"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EAIrB,KAAK,cAAc,EAEpB,MAAM,SAAS,CAAC;AAejB,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;AA4LF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAsHpF"}
@@ -1,11 +1,21 @@
1
- import { moneyField } from 'frogbot';
1
+ import { APIError, moneyField } from 'frogbot';
2
2
  import { ApiKeyServiceError, isApiKeyRequest, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
3
- const MANAGER_COMPONENT = '@frogbotai/plugin-api-keys/client#ApiKeysManager';
3
+ const managerComponent = (collectionSlug)=>({
4
+ path: '@frogbotai/plugin-api-keys/rsc#ApiKeysManagerServer',
5
+ clientProps: {
6
+ collectionSlug
7
+ }
8
+ });
4
9
  const sessionRequired = ()=>Response.json({
5
10
  error: 'An API key cannot mint or rotate API keys. Sign in to manage keys.'
6
11
  }, {
7
12
  status: 403
8
13
  });
14
+ function describeError(error) {
15
+ const details = error.data?.errors;
16
+ const messages = details?.map(({ message })=>message).filter((message)=>typeof message === 'string');
17
+ return messages?.length ? messages.join(' ') : error.message;
18
+ }
9
19
  const ownKeys = ({ req })=>req.user ? {
10
20
  owner: {
11
21
  equals: req.user.id
@@ -23,7 +33,8 @@ function mergeFields(...groups) {
23
33
  ...fields.values()
24
34
  ];
25
35
  }
26
- function createViews({ usageCollection, views }) {
36
+ function createViews({ collectionSlug, usageCollection, views }) {
37
+ const manager = managerComponent(collectionSlug);
27
38
  if (!views?.length) {
28
39
  return [
29
40
  {
@@ -39,8 +50,8 @@ function createViews({ usageCollection, views }) {
39
50
  'actions'
40
51
  ],
41
52
  components: {
42
- beforeTable: [
43
- MANAGER_COMPONENT
53
+ actions: [
54
+ manager
44
55
  ]
45
56
  }
46
57
  }
@@ -51,9 +62,9 @@ function createViews({ usageCollection, views }) {
51
62
  ...view,
52
63
  components: {
53
64
  ...view.components,
54
- beforeTable: [
55
- MANAGER_COMPONENT,
56
- ...view.components?.beforeTable ?? []
65
+ actions: [
66
+ manager,
67
+ ...view.components?.actions ?? []
57
68
  ]
58
69
  }
59
70
  } : view);
@@ -77,12 +88,21 @@ function createEndpoints({ collectionSlug, tokenPrefix, canRevokeAnyKey }) {
77
88
  }, {
78
89
  status: 400
79
90
  });
91
+ const data = body?.data ?? {};
92
+ if (typeof data !== 'object' || data === null || Array.isArray(data)) {
93
+ return Response.json({
94
+ error: 'data must be an object'
95
+ }, {
96
+ status: 400
97
+ });
98
+ }
80
99
  try {
81
100
  return Response.json(await mintApiKey({
82
101
  req,
83
102
  collectionSlug,
84
103
  tokenPrefix,
85
- name
104
+ name,
105
+ data: data
86
106
  }), {
87
107
  status: 201
88
108
  });
@@ -94,6 +114,13 @@ function createEndpoints({ collectionSlug, tokenPrefix, canRevokeAnyKey }) {
94
114
  status: 401
95
115
  });
96
116
  }
117
+ if (error instanceof APIError && error.status < 500) {
118
+ return Response.json({
119
+ error: describeError(error)
120
+ }, {
121
+ status: error.status
122
+ });
123
+ }
97
124
  throw error;
98
125
  }
99
126
  }
@@ -337,6 +364,7 @@ export function createApiKeysCollection(options) {
337
364
  ...collection?.admin?.components
338
365
  },
339
366
  views: createViews({
367
+ collectionSlug,
340
368
  usageCollection,
341
369
  views: collection?.admin?.views ?? existing?.admin?.views
342
370
  })
@@ -1 +1 @@
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"}
1
+ {"version":3,"sources":["../src/collection.ts"],"names":["APIError","moneyField","ApiKeyServiceError","isApiKeyRequest","mintApiKey","revokeApiKey","rotateApiKey","managerComponent","collectionSlug","path","clientProps","sessionRequired","Response","json","error","status","describeError","details","data","errors","messages","map","message","filter","length","join","ownKeys","req","user","owner","equals","id","mergeFields","groups","fields","Map","group","field","key","name","JSON","stringify","set","values","createViews","usageCollection","views","manager","type","defaultFields","components","actions","index","findIndex","view","position","createEndpoints","tokenPrefix","canRevokeAnyKey","method","handler","body","catch","trim","Array","isArray","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","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 CHANGED
@@ -12,5 +12,12 @@ export type ApiKeysPluginOptions = {
12
12
  collection?: Partial<CollectionConfig>;
13
13
  canRevokeAnyKey?: (req: FrogBotRequest) => boolean | Promise<boolean>;
14
14
  };
15
+ /** `apiKeysPlugin` options with defaults filled, read by other plugins through `plugins['plugin-api-keys']`. */
16
+ export type ApiKeysResolvedOptions = ApiKeysPluginOptions & Required<Pick<ApiKeysPluginOptions, 'authCollection' | 'collectionSlug' | 'headerNames' | 'tokenPrefix'>>;
17
+ declare module 'frogbot' {
18
+ interface RegisteredPlugins {
19
+ 'plugin-api-keys': ApiKeysResolvedOptions;
20
+ }
21
+ }
15
22
  export declare function apiKeysPlugin(options?: ApiKeysPluginOptions): Plugin;
16
23
  //# sourceMappingURL=index.d.ts.map
@@ -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;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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAgB,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAMhG,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,gHAAgH;AAChH,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,GACvD,QAAQ,CACN,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,aAAa,GAAG,aAAa,CAAC,CAChG,CAAC;AAEJ,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,iBAAiB;QACzB,iBAAiB,EAAE,sBAAsB,CAAC;KAC3C;CACF;AAuGD,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAQxE"}
package/dist/index.js CHANGED
@@ -1,13 +1,14 @@
1
+ import { definePlugin } from 'frogbot';
1
2
  import { cascadeDelete } from 'frogbot/internal';
2
3
  import { createApiKeysCollection } from './collection.js';
3
4
  import { apiKeyMeHook, apiKeyStrategyName, createApiKeyStrategy } from './strategy.js';
4
5
  export { ApiKeyServiceError, mintApiKey, revokeApiKey, rotateApiKey } from './server/services.js';
5
6
  export { createApiKeyToken, extractApiKeyToken, getApiKeyPrefix, hashApiKeyToken } from './server/token.js';
6
7
  export { isApiKeyStrategy } from './strategy.js';
7
- export function apiKeysPlugin(options = {}) {
8
- return (config)=>{
9
- const authCollection = options.authCollection ?? 'users';
10
- const collectionSlug = options.collectionSlug ?? 'api-keys';
8
+ const apiKeys = definePlugin({
9
+ slug: 'plugin-api-keys',
10
+ plugin: ({ config, options })=>{
11
+ const { authCollection, collectionSlug, headerNames, tokenPrefix } = options;
11
12
  const auth = config.collections.find((collection)=>collection.slug === authCollection);
12
13
  if (!auth || auth.auth === undefined || auth.auth === false) {
13
14
  throw new Error(`[plugin-api-keys] Auth collection '${authCollection}' must exist and have auth enabled.`);
@@ -21,7 +22,7 @@ export function apiKeysPlugin(options = {}) {
21
22
  const collection = createApiKeysCollection({
22
23
  authCollection,
23
24
  collectionSlug,
24
- tokenPrefix: options.tokenPrefix ?? 'fb',
25
+ tokenPrefix,
25
26
  usageCollection: usageLog?.slug,
26
27
  canRevokeAnyKey: options.canRevokeAnyKey,
27
28
  collection: options.collection,
@@ -30,8 +31,8 @@ export function apiKeysPlugin(options = {}) {
30
31
  const strategy = createApiKeyStrategy({
31
32
  authCollection,
32
33
  collectionSlug,
33
- headerNames: options.headerNames,
34
- tokenPrefix: options.tokenPrefix ?? 'fb'
34
+ headerNames,
35
+ tokenPrefix
35
36
  });
36
37
  const usageField = {
37
38
  name: 'apiKey',
@@ -109,7 +110,18 @@ export function apiKeysPlugin(options = {}) {
109
110
  }
110
111
  }
111
112
  };
112
- };
113
+ }
114
+ });
115
+ export function apiKeysPlugin(options = {}) {
116
+ return apiKeys({
117
+ ...options,
118
+ authCollection: options.authCollection ?? 'users',
119
+ collectionSlug: options.collectionSlug ?? 'api-keys',
120
+ headerNames: options.headerNames ?? [
121
+ 'x-api-key'
122
+ ],
123
+ tokenPrefix: options.tokenPrefix ?? 'fb'
124
+ });
113
125
  }
114
126
 
115
127
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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"}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["definePlugin","cascadeDelete","createApiKeysCollection","apiKeyMeHook","apiKeyStrategyName","createApiKeyStrategy","ApiKeyServiceError","mintApiKey","revokeApiKey","rotateApiKey","createApiKeyToken","extractApiKeyToken","getApiKeyPrefix","hashApiKeyToken","isApiKeyStrategy","apiKeys","slug","plugin","config","options","authCollection","collectionSlug","headerNames","tokenPrefix","auth","collections","find","collection","undefined","Error","existing","usageLog","ai","item","fields","usageCollection","canRevokeAnyKey","strategy","usageField","name","type","relationTo","index","map","next","authConfig","strategies","hooks","me","field","includes","beforeOperation","req","context","user","apiKeyId","_strategy","usageFields","apiKey","apiKeysPlugin"],"mappings":"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","file":"index.js"}
package/dist/rsc.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ import { RenderServerComponent } from '@frogbotai/ui/admin/rsc';
2
+ type RenderArgs = Parameters<typeof RenderServerComponent>[0];
3
+ type KeysCollectionAdmin = {
4
+ custom?: {
5
+ 'plugin-api-keys'?: {
6
+ createFields?: RenderArgs['Component'][];
7
+ };
8
+ };
9
+ };
10
+ export type ApiKeysManagerServerProps = {
11
+ collectionSlug: string;
12
+ i18n?: unknown;
13
+ payload: {
14
+ collections: Record<string, {
15
+ config: {
16
+ admin?: KeysCollectionAdmin;
17
+ };
18
+ } | undefined>;
19
+ importMap: RenderArgs['importMap'];
20
+ };
21
+ req?: unknown;
22
+ user?: unknown;
23
+ };
24
+ /**
25
+ * Renders the create dialog with the fields other plugins register on the keys collection under
26
+ * `admin.custom['plugin-api-keys'].createFields`. Each one gets the signed-in `user` and `req`.
27
+ */
28
+ export declare function ApiKeysManagerServer({ collectionSlug, i18n, payload, req, user, }: ApiKeysManagerServerProps): import("react/jsx-runtime").JSX.Element;
29
+ export {};
30
+ //# sourceMappingURL=rsc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../src/rsc.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9D,KAAK,mBAAmB,GAAG;IACzB,MAAM,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CAC/E,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE;gBAAE,KAAK,CAAC,EAAE,mBAAmB,CAAA;aAAE,CAAA;SAAE,GAAG,SAAS,CAAC,CAAC;QACrF,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;KACpC,CAAC;IACF,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,cAAc,EACd,IAAI,EACJ,OAAO,EACP,GAAG,EACH,IAAI,GACL,EAAE,yBAAyB,2CAoB3B"}
package/dist/rsc.js ADDED
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { RenderServerComponent } from '@frogbotai/ui/admin/rsc';
3
+ import { ApiKeysManager } from './client/ApiKeysManager.js';
4
+ /**
5
+ * Renders the create dialog with the fields other plugins register on the keys collection under
6
+ * `admin.custom['plugin-api-keys'].createFields`. Each one gets the signed-in `user` and `req`.
7
+ */ export function ApiKeysManagerServer({ collectionSlug, i18n, payload, req, user }) {
8
+ const components = payload.collections[collectionSlug]?.config.admin?.custom?.['plugin-api-keys']?.createFields ?? [];
9
+ const createFields = components.map((Component, index)=>RenderServerComponent({
10
+ Component,
11
+ importMap: payload.importMap,
12
+ key: `create-field-${index}`,
13
+ serverProps: {
14
+ collectionSlug,
15
+ i18n,
16
+ payload,
17
+ req,
18
+ user
19
+ }
20
+ }));
21
+ return /*#__PURE__*/ _jsx(ApiKeysManager, {
22
+ collectionSlug: collectionSlug,
23
+ createFields: createFields.length > 0 ? createFields : undefined
24
+ });
25
+ }
26
+
27
+ //# sourceMappingURL=rsc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc.tsx"],"names":["RenderServerComponent","ApiKeysManager","ApiKeysManagerServer","collectionSlug","i18n","payload","req","user","components","collections","config","admin","custom","createFields","map","Component","index","importMap","key","serverProps","length","undefined"],"mappings":";AAAA,SAASA,qBAAqB,QAAQ,0BAA0B;AAEhE,SAASC,cAAc,QAAQ,6BAA6B;AAmB5D;;;CAGC,GACD,OAAO,SAASC,qBAAqB,EACnCC,cAAc,EACdC,IAAI,EACJC,OAAO,EACPC,GAAG,EACHC,IAAI,EACsB;IAC1B,MAAMC,aACJH,QAAQI,WAAW,CAACN,eAAe,EAAEO,OAAOC,OAAOC,QAAQ,CAAC,kBAAkB,EAAEC,gBAChF,EAAE;IAEJ,MAAMA,eAAeL,WAAWM,GAAG,CAAC,CAACC,WAAWC,QAC9ChB,sBAAsB;YACpBe;YACAE,WAAWZ,QAAQY,SAAS;YAC5BC,KAAK,CAAC,aAAa,EAAEF,OAAO;YAC5BG,aAAa;gBAAEhB;gBAAgBC;gBAAMC;gBAASC;gBAAKC;YAAK;QAC1D;IAGF,qBACE,KAACN;QACCE,gBAAgBA;QAChBU,cAAcA,aAAaO,MAAM,GAAG,IAAIP,eAAeQ;;AAG7D","file":"rsc.js"}
@@ -4,6 +4,11 @@ export type MintApiKeyOptions = {
4
4
  collectionSlug: string;
5
5
  tokenPrefix: string;
6
6
  name: string;
7
+ /**
8
+ * Values for fields other plugins add to the keys collection. They're written with access
9
+ * overridden, so their validation and hooks run but their field access doesn't.
10
+ */
11
+ data?: Record<string, unknown>;
7
12
  };
8
13
  export type RevokeApiKeyOptions = {
9
14
  req: FrogBotRequest;
@@ -23,9 +28,19 @@ export declare function mintApiKey(options: MintApiKeyOptions): Promise<{
23
28
  token: string;
24
29
  createdAt: unknown;
25
30
  }>;
31
+ export declare function revokeApiKey(options: RevokeApiKeyOptions): Promise<{
32
+ id: string | number;
33
+ name: string;
34
+ owner: string | number;
35
+ revokedAt: string;
36
+ }>;
26
37
  export type RotateApiKeyOptions = RevokeApiKeyOptions & {
27
38
  tokenPrefix: string;
28
39
  };
40
+ /**
41
+ * Revokes the key, then mints one with its name, owner and every field another plugin added, with
42
+ * `req.context.apiKeyRotatedFrom` set to the revoked key's ID.
43
+ */
29
44
  export declare function rotateApiKey({ req, collectionSlug, id, tokenPrefix, anyOwner, }: RotateApiKeyOptions): Promise<{
30
45
  id: unknown;
31
46
  name: string;
@@ -33,10 +48,4 @@ export declare function rotateApiKey({ req, collectionSlug, id, tokenPrefix, any
33
48
  token: string;
34
49
  createdAt: unknown;
35
50
  }>;
36
- export declare function revokeApiKey({ req, collectionSlug, id, anyOwner }: RevokeApiKeyOptions): Promise<{
37
- id: string | number;
38
- name: string;
39
- owner: string | number;
40
- revokedAt: string;
41
- }>;
42
51
  //# sourceMappingURL=services.d.ts.map
@@ -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;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"}
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;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,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;AAIF,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;AAuDD,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB;;;;;;GAW1D;AAyCD,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB;;;;;GAI9D;AAED,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF;;;GAGG;AACH,wBAAsB,YAAY,CAAC,EACjC,GAAG,EACH,cAAc,EACd,EAAE,EACF,WAAW,EACX,QAAQ,GACT,EAAE,mBAAmB;;;;;;GAarB"}
@@ -15,7 +15,23 @@ function requireSessionOwner(req) {
15
15
  if (isApiKeyRequest(req)) throw new ApiKeyServiceError('session_required');
16
16
  return owner;
17
17
  }
18
- async function mintForOwner({ req, collectionSlug, tokenPrefix, name, owner }) {
18
+ const ownFields = new Set([
19
+ 'id',
20
+ 'createdAt',
21
+ 'updatedAt',
22
+ 'name',
23
+ 'owner',
24
+ 'prefix',
25
+ 'tokenHash',
26
+ 'lastUsedAt',
27
+ 'revokedAt',
28
+ 'totalCostUSD',
29
+ 'actions'
30
+ ]);
31
+ function foreignData(data) {
32
+ return Object.fromEntries(Object.entries(data ?? {}).filter(([key])=>!ownFields.has(key)));
33
+ }
34
+ async function mintForOwner({ req, collectionSlug, tokenPrefix, name, owner, data, context }) {
19
35
  const token = createApiKeyToken({
20
36
  tokenPrefix
21
37
  });
@@ -23,13 +39,17 @@ async function mintForOwner({ req, collectionSlug, tokenPrefix, name, owner }) {
23
39
  const doc = await req.frogbot.create({
24
40
  collection: collectionSlug,
25
41
  data: {
42
+ ...foreignData(data),
26
43
  name,
27
44
  owner,
28
45
  prefix,
29
46
  tokenHash: hashApiKeyToken(token)
30
47
  },
31
48
  overrideAccess: true,
32
- req
49
+ req,
50
+ ...context && {
51
+ context
52
+ }
33
53
  });
34
54
  return {
35
55
  id: doc.id,
@@ -46,26 +66,11 @@ export async function mintApiKey(options) {
46
66
  collectionSlug: options.collectionSlug,
47
67
  tokenPrefix: options.tokenPrefix,
48
68
  name: options.name,
49
- owner
50
- });
51
- }
52
- export async function rotateApiKey({ req, collectionSlug, id, tokenPrefix, anyOwner }) {
53
- requireSessionOwner(req);
54
- const revoked = await revokeApiKey({
55
- req,
56
- collectionSlug,
57
- id,
58
- anyOwner
59
- });
60
- return mintForOwner({
61
- req,
62
- collectionSlug,
63
- tokenPrefix,
64
- name: revoked.name,
65
- owner: revoked.owner
69
+ owner,
70
+ data: options.data
66
71
  });
67
72
  }
68
- export async function revokeApiKey({ req, collectionSlug, id, anyOwner }) {
73
+ async function revokeKey({ req, collectionSlug, id, anyOwner }) {
69
74
  const owner = req.user?.id;
70
75
  if (owner === undefined) throw new ApiKeyServiceError('authentication_required');
71
76
  const result = await req.frogbot.find({
@@ -107,6 +112,13 @@ export async function revokeApiKey({ req, collectionSlug, id, anyOwner }) {
107
112
  overrideAccess: true,
108
113
  req
109
114
  });
115
+ return {
116
+ key: key,
117
+ revokedAt
118
+ };
119
+ }
120
+ export async function revokeApiKey(options) {
121
+ const { key, revokedAt } = await revokeKey(options);
110
122
  return {
111
123
  id: key.id,
112
124
  name: key.name,
@@ -114,5 +126,28 @@ export async function revokeApiKey({ req, collectionSlug, id, anyOwner }) {
114
126
  revokedAt
115
127
  };
116
128
  }
129
+ /**
130
+ * Revokes the key, then mints one with its name, owner and every field another plugin added, with
131
+ * `req.context.apiKeyRotatedFrom` set to the revoked key's ID.
132
+ */ export async function rotateApiKey({ req, collectionSlug, id, tokenPrefix, anyOwner }) {
133
+ requireSessionOwner(req);
134
+ const { key } = await revokeKey({
135
+ req,
136
+ collectionSlug,
137
+ id,
138
+ anyOwner
139
+ });
140
+ return mintForOwner({
141
+ req,
142
+ collectionSlug,
143
+ tokenPrefix,
144
+ name: key.name,
145
+ owner: key.owner,
146
+ data: key,
147
+ context: {
148
+ apiKeyRotatedFrom: key.id
149
+ }
150
+ });
151
+ }
117
152
 
118
153
  //# sourceMappingURL=services.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"sources":["../../src/server/services.ts"],"names":["apiKeyStrategyName","createApiKeyToken","getApiKeyPrefix","hashApiKeyToken","ApiKeyServiceError","Error","code","isApiKeyRequest","req","user","_strategy","requireSessionOwner","owner","id","undefined","ownFields","Set","foreignData","data","Object","fromEntries","entries","filter","key","has","mintForOwner","collectionSlug","tokenPrefix","name","context","token","prefix","doc","frogbot","create","collection","tokenHash","overrideAccess","createdAt","mintApiKey","options","revokeKey","anyOwner","result","find","depth","limit","where","equals","and","docs","revokedAt","Date","toISOString","update","revokeApiKey","rotateApiKey","apiKeyRotatedFrom"],"mappings":"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","file":"services.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAI9D,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAI5C,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,YAAY,CA+D3E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAEhE;AAED,eAAO,MAAM,YAAY,EAAE,gBAI1B,CAAC"}
1
+ {"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../src/strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAI9D,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAI5C,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,YAAY,CA8D3E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAEhE;AAED,eAAO,MAAM,YAAY,EAAE,gBAI1B,CAAC"}
package/dist/strategy.js CHANGED
@@ -48,6 +48,7 @@ export function createApiKeyStrategy(options) {
48
48
  if (!user) return {
49
49
  user: null
50
50
  };
51
+ const { tokenHash: _tokenHash, ...apiKey } = key;
51
52
  await frogbot.update({
52
53
  collection: collectionSlug,
53
54
  id: key.id,
@@ -62,12 +63,7 @@ export function createApiKeyStrategy(options) {
62
63
  collection: authCollection,
63
64
  _strategy: apiKeyStrategyName,
64
65
  apiKeyId: key.id,
65
- ...key.capture !== undefined ? {
66
- capture: key.capture
67
- } : {},
68
- ...typeof key.captureSampleRate === 'number' ? {
69
- captureSampleRate: key.captureSampleRate
70
- } : {}
66
+ apiKey
71
67
  }
72
68
  };
73
69
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/strategy.ts"],"names":["extractApiKeyToken","hashApiKeyToken","apiKeyStrategyName","apiKeyStrategies","WeakSet","createApiKeyStrategy","options","authCollection","collectionSlug","headerNames","tokenPrefix","strategy","name","authenticate","frogbot","headers","token","user","keys","find","collection","depth","limit","overrideAccess","where","and","tokenHash","equals","revokedAt","exists","key","docs","id","owner","findByID","catch","update","data","lastUsedAt","Date","toISOString","_strategy","apiKeyId","capture","undefined","captureSampleRate","add","isApiKeyStrategy","has","apiKeyMeHook"],"mappings":"AAEA,SAASA,kBAAkB,EAAEC,eAAe,QAAQ,oBAAoB;AAExE,OAAO,MAAMC,qBAAqB,UAAU;AAE5C,MAAMC,mBAAmB,IAAIC;AAS7B,OAAO,SAASC,qBAAqBC,OAAwB;IAC3D,MAAM,EAAEC,cAAc,EAAEC,cAAc,EAAEC,WAAW,EAAEC,WAAW,EAAE,GAAGJ;IACrE,MAAMK,WAAyB;QAC7BC,MAAMV;QACNW,cAAc,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAE;YACvC,MAAMC,QAAQhB,mBAAmBe,SAAS;gBAAEN;gBAAaC;YAAY;YAErE,IAAI,CAACM,OAAO,OAAO;gBAAEC,MAAM;YAAK;YAEhC,MAAMC,OAAO,MAAMJ,QAAQK,IAAI,CAAC;gBAC9BC,YAAYZ;gBACZa,OAAO;gBACPC,OAAO;gBACPC,gBAAgB;gBAChBC,OAAO;oBACLC,KAAK;wBACH;4BAAEC,WAAW;gCAAEC,QAAQ1B,gBAAgBe;4BAAO;wBAAE;wBAChD;4BAAEY,WAAW;gCAAEC,QAAQ;4BAAM;wBAAE;qBAChC;gBACH;YACF;YAEA,MAAMC,MAAMZ,KAAKa,IAAI,CAAC,EAAE;YAExB,IACE,CAACD,OACA,OAAOA,IAAIE,EAAE,KAAK,YAAY,OAAOF,IAAIE,EAAE,KAAK,YAChD,OAAOF,IAAIG,KAAK,KAAK,YAAY,OAAOH,IAAIG,KAAK,KAAK,UACvD;gBACA,OAAO;oBAAEhB,MAAM;gBAAK;YACtB;YAEA,MAAMA,OAAO,MAAMH,QAChBoB,QAAQ,CAAC;gBAAEd,YAAYb;gBAAgByB,IAAIF,IAAIG,KAAK;gBAAEZ,OAAO;gBAAGE,gBAAgB;YAAK,GACrFY,KAAK,CAAC,IAAM;YAEf,IAAI,CAAClB,MAAM,OAAO;gBAAEA,MAAM;YAAK;YAE/B,MAAMH,QAAQsB,MAAM,CAAC;gBACnBhB,YAAYZ;gBACZwB,IAAIF,IAAIE,EAAE;gBACVK,MAAM;oBAAEC,YAAY,IAAIC,OAAOC,WAAW;gBAAG;gBAC7CjB,gBAAgB;YAClB;YAEA,OAAO;gBACLN,MAAM;oBACJ,GAAGA,IAAI;oBACPG,YAAYb;oBACZkC,WAAWvC;oBACXwC,UAAUZ,IAAIE,EAAE;oBAChB,GAAIF,IAAIa,OAAO,KAAKC,YAAY;wBAAED,SAASb,IAAIa,OAAO;oBAAC,IAAI,CAAC,CAAC;oBAC7D,GAAI,OAAOb,IAAIe,iBAAiB,KAAK,WACjC;wBAAEA,mBAAmBf,IAAIe,iBAAiB;oBAAC,IAC3C,CAAC,CAAC;gBACR;YACF;QACF;IACF;IAEA1C,iBAAiB2C,GAAG,CAACnC;IAErB,OAAOA;AACT;AAEA,OAAO,SAASoC,iBAAiBpC,QAAsB;IACrD,OAAOR,iBAAiB6C,GAAG,CAACrC;AAC9B;AAEA,OAAO,MAAMsC,eAAiC,CAAC,EAAEhC,IAAI,EAAE;IACrD,IAAIA,MAAMwB,cAAcvC,oBAAoB;IAE5C,OAAO;QAAEe;IAAK;AAChB,EAAE","file":"strategy.js"}
1
+ {"version":3,"sources":["../src/strategy.ts"],"names":["extractApiKeyToken","hashApiKeyToken","apiKeyStrategyName","apiKeyStrategies","WeakSet","createApiKeyStrategy","options","authCollection","collectionSlug","headerNames","tokenPrefix","strategy","name","authenticate","frogbot","headers","token","user","keys","find","collection","depth","limit","overrideAccess","where","and","tokenHash","equals","revokedAt","exists","key","docs","id","owner","findByID","catch","_tokenHash","apiKey","update","data","lastUsedAt","Date","toISOString","_strategy","apiKeyId","add","isApiKeyStrategy","has","apiKeyMeHook"],"mappings":"AAEA,SAASA,kBAAkB,EAAEC,eAAe,QAAQ,oBAAoB;AAExE,OAAO,MAAMC,qBAAqB,UAAU;AAE5C,MAAMC,mBAAmB,IAAIC;AAS7B,OAAO,SAASC,qBAAqBC,OAAwB;IAC3D,MAAM,EAAEC,cAAc,EAAEC,cAAc,EAAEC,WAAW,EAAEC,WAAW,EAAE,GAAGJ;IACrE,MAAMK,WAAyB;QAC7BC,MAAMV;QACNW,cAAc,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAE;YACvC,MAAMC,QAAQhB,mBAAmBe,SAAS;gBAAEN;gBAAaC;YAAY;YAErE,IAAI,CAACM,OAAO,OAAO;gBAAEC,MAAM;YAAK;YAEhC,MAAMC,OAAO,MAAMJ,QAAQK,IAAI,CAAC;gBAC9BC,YAAYZ;gBACZa,OAAO;gBACPC,OAAO;gBACPC,gBAAgB;gBAChBC,OAAO;oBACLC,KAAK;wBACH;4BAAEC,WAAW;gCAAEC,QAAQ1B,gBAAgBe;4BAAO;wBAAE;wBAChD;4BAAEY,WAAW;gCAAEC,QAAQ;4BAAM;wBAAE;qBAChC;gBACH;YACF;YAEA,MAAMC,MAAMZ,KAAKa,IAAI,CAAC,EAAE;YAExB,IACE,CAACD,OACA,OAAOA,IAAIE,EAAE,KAAK,YAAY,OAAOF,IAAIE,EAAE,KAAK,YAChD,OAAOF,IAAIG,KAAK,KAAK,YAAY,OAAOH,IAAIG,KAAK,KAAK,UACvD;gBACA,OAAO;oBAAEhB,MAAM;gBAAK;YACtB;YAEA,MAAMA,OAAO,MAAMH,QAChBoB,QAAQ,CAAC;gBAAEd,YAAYb;gBAAgByB,IAAIF,IAAIG,KAAK;gBAAEZ,OAAO;gBAAGE,gBAAgB;YAAK,GACrFY,KAAK,CAAC,IAAM;YAEf,IAAI,CAAClB,MAAM,OAAO;gBAAEA,MAAM;YAAK;YAE/B,MAAM,EAAES,WAAWU,UAAU,EAAE,GAAGC,QAAQ,GAAGP;YAE7C,MAAMhB,QAAQwB,MAAM,CAAC;gBACnBlB,YAAYZ;gBACZwB,IAAIF,IAAIE,EAAE;gBACVO,MAAM;oBAAEC,YAAY,IAAIC,OAAOC,WAAW;gBAAG;gBAC7CnB,gBAAgB;YAClB;YAEA,OAAO;gBACLN,MAAM;oBACJ,GAAGA,IAAI;oBACPG,YAAYb;oBACZoC,WAAWzC;oBACX0C,UAAUd,IAAIE,EAAE;oBAChBK;gBACF;YACF;QACF;IACF;IAEAlC,iBAAiB0C,GAAG,CAAClC;IAErB,OAAOA;AACT;AAEA,OAAO,SAASmC,iBAAiBnC,QAAsB;IACrD,OAAOR,iBAAiB4C,GAAG,CAACpC;AAC9B;AAEA,OAAO,MAAMqC,eAAiC,CAAC,EAAE/B,IAAI,EAAE;IACrD,IAAIA,MAAM0B,cAAczC,oBAAoB;IAE5C,OAAO;QAAEe;IAAK;AAChB,EAAE","file":"strategy.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frogbotai/plugin-api-keys",
3
- "version": "0.36.0",
3
+ "version": "0.37.0",
4
4
  "description": "Multiple named API keys for FrogBot.",
5
5
  "license": "MIT",
6
6
  "author": "Colby Gilbert",
@@ -23,6 +23,11 @@
23
23
  "import": "./dist/client.js",
24
24
  "types": "./dist/client.d.ts",
25
25
  "default": "./dist/client.js"
26
+ },
27
+ "./rsc": {
28
+ "import": "./dist/rsc.js",
29
+ "types": "./dist/rsc.d.ts",
30
+ "default": "./dist/rsc.js"
26
31
  }
27
32
  },
28
33
  "files": [
@@ -37,9 +42,9 @@
37
42
  "peerDependencies": {
38
43
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
39
44
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
40
- "@frogbotai/gateway": "0.36.0",
41
- "@frogbotai/ui": "0.36.0",
42
- "frogbot": "0.36.0"
45
+ "@frogbotai/gateway": "0.37.0",
46
+ "@frogbotai/ui": "0.37.0",
47
+ "frogbot": "0.37.0"
43
48
  },
44
49
  "devDependencies": {
45
50
  "@testing-library/react": "^16.3.0",
@@ -47,10 +52,10 @@
47
52
  "react": "19.3.1",
48
53
  "react-dom": "19.3.1",
49
54
  "typescript": "6.0.3",
50
- "@frogbotai/gateway": "0.36.0",
51
- "@frogbotai/ui": "0.36.0",
52
- "@frogbotai/plugin-roles": "0.36.0",
53
- "frogbot": "0.36.0"
55
+ "@frogbotai/plugin-roles": "0.37.0",
56
+ "@frogbotai/gateway": "0.37.0",
57
+ "frogbot": "0.37.0",
58
+ "@frogbotai/ui": "0.37.0"
54
59
  },
55
60
  "publishConfig": {
56
61
  "access": "public"