@frogbotai/plugin-api-keys 0.9.0 → 0.11.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.
@@ -1,7 +1,9 @@
1
+ import './styles.css';
1
2
  export declare function ApiKeysManager(): import("react/jsx-runtime").JSX.Element;
2
- export declare function RevokeApiKey({ rowData }: {
3
+ export declare function RevokeApiKey({ rowData, }: {
3
4
  rowData: {
4
5
  id: string | number;
6
+ name?: string;
5
7
  revokedAt?: string | null;
6
8
  };
7
9
  }): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeysManager.d.ts","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,4CAgF7B;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,2CA6BxG"}
1
+ {"version":3,"file":"ApiKeysManager.d.ts","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"AAKA,OAAO,cAAc,CAAC;AAItB,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,2CA4DA"}
@@ -1,24 +1,35 @@
1
1
  'use client';
2
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Button, Modal, TextInput, useConfig, useListQuery, useModal } from '@payloadcms/ui';
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
4
  import { useState } from 'react';
5
+ import './styles.css';
5
6
  const modalSlug = 'create-api-key-modal';
6
7
  export function ApiKeysManager() {
7
8
  const { config } = useConfig();
8
- const { collectionSlug, query, refineListData } = useListQuery();
9
+ const { collectionSlug } = useListQuery();
9
10
  const { closeModal, openModal } = useModal();
11
+ const { clearRouteCache } = useRouteCache();
10
12
  const [name, setName] = useState('');
11
13
  const [token, setToken] = useState();
12
14
  const [error, setError] = useState();
13
15
  const [loading, setLoading] = useState(false);
14
- function close() {
15
- closeModal(modalSlug);
16
+ const [copied, setCopied] = useState(false);
17
+ const [hoveredControl, setHoveredControl] = useState();
18
+ function open() {
16
19
  setName('');
17
20
  setToken(undefined);
18
21
  setError(undefined);
19
- void refineListData(query);
22
+ setCopied(false);
23
+ openModal(modalSlug);
24
+ }
25
+ function close() {
26
+ closeModal(modalSlug);
27
+ if (token)
28
+ clearRouteCache();
20
29
  }
21
30
  async function createKey() {
31
+ if (loading || !name.trim())
32
+ return;
22
33
  setLoading(true);
23
34
  setError(undefined);
24
35
  const response = await fetch(`${config.routes.api}/${collectionSlug}/mint`, {
@@ -35,16 +46,40 @@ export function ApiKeysManager() {
35
46
  setToken(result.token);
36
47
  }
37
48
  async function copyToken() {
38
- if (token)
39
- await navigator.clipboard.writeText(token);
49
+ if (!token)
50
+ return;
51
+ await navigator.clipboard.writeText(token);
52
+ setCopied(true);
40
53
  }
41
- return (_jsxs(_Fragment, { children: [_jsx(Button, { buttonStyle: "secondary", onClick: () => openModal(modalSlug), type: "button", children: "Create API key" }), _jsx(Modal, { closeOnBlur: true, onClose: close, slug: modalSlug, children: _jsxs("div", { className: "confirmation-modal__wrapper", children: [_jsxs("div", { className: "confirmation-modal__content", children: [_jsx("h1", { children: "Create API Key" }), token ? (_jsxs(_Fragment, { children: [_jsx("p", { children: "This key is shown once. Copy it now." }), _jsx(TextInput, { label: "API key", path: "new-api-key", readOnly: true, value: token })] })) : (_jsx(TextInput, { label: "Key name", path: "api-key-name", value: name, onChange: (event) => setName(event.target.value) })), error ? _jsx("p", { role: "alert", children: error }) : null] }), _jsxs("div", { className: "confirmation-modal__controls", children: [token ? (_jsx(Button, { onClick: copyToken, type: "button", children: "Copy API key" })) : (_jsx(Button, { disabled: loading || !name.trim(), onClick: createKey, type: "button", children: "Create API key" })), _jsx(Button, { buttonStyle: "secondary", onClick: close, type: "button", children: "Dismiss" })] })] }) })] }));
54
+ function copyHandlers(control) {
55
+ return {
56
+ onClick: copyToken,
57
+ onMouseEnter: () => {
58
+ setHoveredControl(control);
59
+ setCopied(false);
60
+ },
61
+ onMouseLeave: () => {
62
+ setHoveredControl(undefined);
63
+ setCopied(false);
64
+ },
65
+ };
66
+ }
67
+ return (_jsxs(_Fragment, { children: [_jsx(Button, { buttonStyle: "secondary", margin: false, onClick: open, type: "button", children: "Create API key" }), _jsx(Modal, { className: "api-keys-modal", closeOnBlur: true, onClose: close, slug: modalSlug, children: _jsxs("div", { className: "api-keys-modal__wrapper", children: [_jsxs("div", { className: "api-keys-modal__content", children: [_jsx("h1", { children: "Create API Key" }), token ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "api-keys-modal__warning", role: "alert", children: "Key generated! Copy it now \u2014 you won't see it again." }), _jsxs("div", { className: "api-keys-modal__token-row", children: [_jsxs("button", { "aria-label": "Click to copy API key", className: "api-keys-clear-button api-keys-modal__token", type: "button", ...copyHandlers('token'), children: [_jsx("code", { children: token }), _jsx(Tooltip, { delay: copied ? 0 : undefined, show: hoveredControl === 'token', children: copied ? 'Copied' : 'Click to copy' })] }), _jsxs("button", { "aria-label": "Copy API key", className: "api-keys-clear-button api-keys-slide-up-1 api-keys-modal__copy", type: "button", ...copyHandlers('icon'), children: [_jsx(CopyIcon, {}), _jsx(Tooltip, { delay: copied ? 0 : undefined, show: hoveredControl === 'icon', children: copied ? 'Copied' : 'Copy' })] })] })] })) : (_jsx(TextInput, { label: "Key name", path: "api-key-name", placeholder: "Key name (e.g. My MacBook CLI)", readOnly: loading, value: name, onChange: (event) => setName(event.target.value), onKeyDown: (event) => {
68
+ if (event.key === 'Enter') {
69
+ event.preventDefault();
70
+ void createKey();
71
+ }
72
+ } })), error ? _jsx("p", { role: "alert", children: error }) : null] }), _jsxs("div", { className: "api-keys-modal__controls", children: [_jsx(Button, { buttonStyle: "secondary", onClick: close, type: "button", children: token ? 'Close' : 'Dismiss' }), token ? null : (_jsx(Button, { disabled: loading || !name.trim(), onClick: createKey, type: "button", children: loading ? 'Generating…' : 'Generate' }))] })] }) })] }));
42
73
  }
43
- export function RevokeApiKey({ rowData }) {
74
+ export function RevokeApiKey({ rowData, }) {
44
75
  const { config } = useConfig();
45
- const { collectionSlug, query, refineListData } = useListQuery();
76
+ const { collectionSlug } = useListQuery();
77
+ const { closeModal, openModal } = useModal();
78
+ const { clearRouteCache } = useRouteCache();
46
79
  const [loading, setLoading] = useState(false);
80
+ const [revoked, setRevoked] = useState(false);
47
81
  const [error, setError] = useState();
82
+ const confirmSlug = `revoke-api-key-modal-${rowData.id}`;
48
83
  async function revoke() {
49
84
  setLoading(true);
50
85
  setError(undefined);
@@ -55,10 +90,12 @@ export function RevokeApiKey({ rowData }) {
55
90
  setError(result.error ?? 'Unable to revoke API key');
56
91
  return;
57
92
  }
58
- await refineListData(query);
93
+ closeModal(confirmSlug);
94
+ setRevoked(true);
95
+ clearRouteCache();
59
96
  }
60
- if (rowData.revokedAt)
97
+ if (revoked || rowData.revokedAt)
61
98
  return _jsx("span", { children: "Revoked" });
62
- return (_jsxs(_Fragment, { children: [_jsx(Button, { buttonStyle: "secondary", disabled: loading, onClick: revoke, size: "small", type: "button", children: "Revoke" }), error ? _jsx("span", { role: "alert", children: error }) : null] }));
99
+ return (_jsxs(_Fragment, { children: [_jsx(Button, { margin: false, buttonStyle: "secondary", onClick: () => openModal(confirmSlug), size: "small", type: "button", children: "Revoke" }), _jsx(Modal, { className: "api-keys-modal", closeOnBlur: true, onClose: () => closeModal(confirmSlug), slug: confirmSlug, children: _jsxs("div", { className: "api-keys-modal__wrapper", children: [_jsxs("div", { className: "api-keys-modal__content", children: [_jsx("h1", { children: "Revoke API Key" }), _jsxs("p", { children: ["This will immediately disable ", rowData.name ?? 'this key', ". Any scripts or tools using this key will stop working. This cannot be undone."] }), error ? _jsx("p", { role: "alert", children: error }) : null] }), _jsxs("div", { className: "api-keys-modal__controls", children: [_jsx(Button, { buttonStyle: "secondary", onClick: () => closeModal(confirmSlug), type: "button", children: "Cancel" }), _jsx(Button, { disabled: loading, onClick: revoke, type: "button", children: loading ? 'Revoking…' : 'Revoke key' })] })] }) })] }));
63
100
  }
64
101
  //# sourceMappingURL=ApiKeysManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeysManager.js","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiKeysManager.js","sourceRoot":"","sources":["../../src/client/ApiKeysManager.tsx"],"names":[],"mappings":"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"}
@@ -3,14 +3,17 @@ import { fireEvent, render, screen, waitFor } from '@testing-library/react';
3
3
  import { beforeEach, describe, expect, it, vi } from 'vitest';
4
4
  const closeModal = vi.fn();
5
5
  const openModal = vi.fn();
6
- const refineListData = vi.fn();
6
+ const clearRouteCache = vi.fn();
7
7
  vi.mock('@payloadcms/ui', () => ({
8
8
  Button: ({ children, ...props }) => _jsx("button", { ...props, children: children }),
9
- Modal: ({ children }) => _jsx("div", { role: "dialog", children: children }),
9
+ CopyIcon: () => _jsx("svg", { "data-testid": "copy-icon" }),
10
+ Modal: ({ children, className }) => _jsx("div", { className: className, role: "dialog", children: children }),
10
11
  TextInput: ({ label, ...props }) => _jsx("input", { "aria-label": label, ...props }),
12
+ Tooltip: ({ children, show }) => (show ? _jsx("span", { children: children }) : null),
11
13
  useConfig: () => ({ config: { routes: { api: '/api' } } }),
12
- useListQuery: () => ({ collectionSlug: 'api-keys', query: { page: 1 }, refineListData }),
14
+ useListQuery: () => ({ collectionSlug: 'api-keys' }),
13
15
  useModal: () => ({ closeModal, openModal }),
16
+ useRouteCache: () => ({ clearRouteCache }),
14
17
  }));
15
18
  const { ApiKeysManager, RevokeApiKey } = await import('./ApiKeysManager.js');
16
19
  describe('API key controls', () => {
@@ -25,27 +28,78 @@ describe('API key controls', () => {
25
28
  json: () => Promise.resolve({ token: 'frogbot_secret' }),
26
29
  });
27
30
  render(_jsx(ApiKeysManager, {}));
28
- fireEvent.click(screen.getAllByRole('button', { name: 'Create API key' })[0]);
31
+ expect(screen.getByRole('dialog').className).toBe('api-keys-modal');
32
+ fireEvent.click(screen.getByRole('button', { name: 'Create API key' }));
29
33
  expect(openModal).toHaveBeenCalledWith('create-api-key-modal');
30
34
  fireEvent.change(screen.getByLabelText('Key name'), { target: { value: 'Deploy' } });
31
- fireEvent.click(screen.getAllByRole('button', { name: 'Create API key' })[1]);
32
- expect(await screen.findByText('This key is shown once. Copy it now.')).toBeTruthy();
33
- expect(screen.getByLabelText('API key').value).toBe('frogbot_secret');
35
+ fireEvent.click(screen.getByRole('button', { name: 'Generate' }));
36
+ expect(await screen.findByText("Key generated! Copy it now — you won't see it again.")).toBeTruthy();
37
+ expect(screen.getByText('frogbot_secret')).toBeTruthy();
34
38
  expect(fetch).toHaveBeenCalledWith('/api/api-keys/mint', expect.objectContaining({
35
39
  body: JSON.stringify({ name: 'Deploy' }),
36
40
  method: 'POST',
37
41
  }));
42
+ fireEvent.click(screen.getByRole('button', { name: 'Close' }));
43
+ expect(closeModal).toHaveBeenCalledWith('create-api-key-modal');
44
+ expect(clearRouteCache).toHaveBeenCalled();
45
+ });
46
+ it('generates on Enter in the key name input', async () => {
47
+ vi.mocked(fetch).mockResolvedValue({
48
+ ok: true,
49
+ json: () => Promise.resolve({ token: 'frogbot_secret' }),
50
+ });
51
+ render(_jsx(ApiKeysManager, {}));
52
+ fireEvent.change(screen.getByLabelText('Key name'), { target: { value: 'Deploy' } });
53
+ fireEvent.keyDown(screen.getByLabelText('Key name'), { key: 'Enter' });
54
+ expect(await screen.findByText('frogbot_secret')).toBeTruthy();
55
+ });
56
+ it('ignores Enter when the name is empty', () => {
57
+ render(_jsx(ApiKeysManager, {}));
58
+ fireEvent.keyDown(screen.getByLabelText('Key name'), { key: 'Enter' });
59
+ expect(fetch).not.toHaveBeenCalled();
60
+ });
61
+ it('copies the token with feedback', async () => {
62
+ vi.mocked(fetch).mockResolvedValue({
63
+ ok: true,
64
+ json: () => Promise.resolve({ token: 'frogbot_secret' }),
65
+ });
66
+ render(_jsx(ApiKeysManager, {}));
67
+ fireEvent.change(screen.getByLabelText('Key name'), { target: { value: 'Deploy' } });
68
+ fireEvent.click(screen.getByRole('button', { name: 'Generate' }));
69
+ await screen.findByText('frogbot_secret');
70
+ fireEvent.mouseEnter(screen.getByRole('button', { name: 'Copy API key' }));
71
+ fireEvent.click(screen.getByRole('button', { name: 'Copy API key' }));
72
+ await waitFor(() => expect(screen.getByText('Copied')).toBeTruthy());
73
+ expect(navigator.clipboard.writeText).toHaveBeenCalledWith('frogbot_secret');
74
+ expect(screen.getByTestId('copy-icon')).toBeTruthy();
75
+ });
76
+ it('does not clear the route cache when dismissed without a key', () => {
77
+ render(_jsx(ApiKeysManager, {}));
38
78
  fireEvent.click(screen.getByRole('button', { name: 'Dismiss' }));
39
79
  expect(closeModal).toHaveBeenCalledWith('create-api-key-modal');
40
- expect(refineListData).toHaveBeenCalledWith({ page: 1 });
80
+ expect(clearRouteCache).not.toHaveBeenCalled();
41
81
  });
42
- it('revokes an active key from its row', async () => {
82
+ it('confirms before revoking an active key', async () => {
43
83
  vi.mocked(fetch).mockResolvedValue({ ok: true });
44
- render(_jsx(RevokeApiKey, { rowData: { id: 'key-1' } }));
84
+ render(_jsx(RevokeApiKey, { rowData: { id: 'key-1', name: 'Deploy' } }));
45
85
  fireEvent.click(screen.getByRole('button', { name: 'Revoke' }));
46
- await waitFor(() => expect(refineListData).toHaveBeenCalledWith({ page: 1 }));
86
+ expect(openModal).toHaveBeenCalledWith('revoke-api-key-modal-key-1');
87
+ expect(screen.getByText('This will immediately disable Deploy. Any scripts or tools using this key will stop working. This cannot be undone.')).toBeTruthy();
88
+ expect(fetch).not.toHaveBeenCalled();
89
+ fireEvent.click(screen.getByRole('button', { name: 'Revoke key' }));
90
+ await waitFor(() => expect(screen.getByText('Revoked')).toBeTruthy());
91
+ expect(closeModal).toHaveBeenCalledWith('revoke-api-key-modal-key-1');
92
+ expect(clearRouteCache).toHaveBeenCalled();
47
93
  expect(fetch).toHaveBeenCalledWith('/api/api-keys/key-1/revoke', { method: 'POST' });
48
94
  });
95
+ it('cancels revocation without calling the endpoint', () => {
96
+ render(_jsx(RevokeApiKey, { rowData: { id: 'key-1', name: 'Deploy' } }));
97
+ fireEvent.click(screen.getByRole('button', { name: 'Revoke' }));
98
+ fireEvent.click(screen.getByRole('button', { name: 'Cancel' }));
99
+ expect(closeModal).toHaveBeenCalledWith('revoke-api-key-modal-key-1');
100
+ expect(fetch).not.toHaveBeenCalled();
101
+ expect(screen.getByRole('button', { name: 'Revoke' })).toBeTruthy();
102
+ });
49
103
  it('shows revoked keys without an action', () => {
50
104
  render(_jsx(RevokeApiKey, { rowData: { id: 'key-1', revokedAt: '2026-07-29' } }));
51
105
  expect(screen.getByText('Revoked')).toBeTruthy();
@@ -1 +1 @@
1
- {"version":3,"file":"ApiKeysManager.spec.js","sourceRoot":"","sources":["../../src/client/ApiKeysManager.spec.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiKeysManager.spec.js","sourceRoot":"","sources":["../../src/client/ApiKeysManager.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare function formatCostUSD(value: unknown): string;
2
+ export declare function CostUSDCell({ cellData }: {
3
+ cellData?: unknown;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ export declare function CostUSDField({ field, path }: {
6
+ field: {
7
+ label?: string;
8
+ };
9
+ path: string;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=CostUSD.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostUSD.d.ts","sourceRoot":"","sources":["../../src/client/CostUSD.tsx"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOpD;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,2CAE/D;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAAE,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,2CASxF"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { FieldLabel, useField } from '@payloadcms/ui';
4
+ export function formatCostUSD(value) {
5
+ return new Intl.NumberFormat('en-US', {
6
+ style: 'currency',
7
+ currency: 'USD',
8
+ minimumFractionDigits: 2,
9
+ maximumFractionDigits: 6,
10
+ }).format(typeof value === 'number' ? value : 0);
11
+ }
12
+ export function CostUSDCell({ cellData }) {
13
+ return _jsx("span", { children: formatCostUSD(cellData) });
14
+ }
15
+ export function CostUSDField({ field, path }) {
16
+ const { value } = useField({ path });
17
+ return (_jsxs("div", { className: "field-type number", children: [_jsx(FieldLabel, { label: field.label, path: path }), _jsx("div", { children: formatCostUSD(value) })] }));
18
+ }
19
+ //# sourceMappingURL=CostUSD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostUSD.js","sourceRoot":"","sources":["../../src/client/CostUSD.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QACpC,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,KAAK;QACf,qBAAqB,EAAE,CAAC;QACxB,qBAAqB,EAAE,CAAC;KACzB,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAA0B;IAC9D,OAAO,yBAAO,aAAa,CAAC,QAAQ,CAAC,GAAQ,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAA+C;IACvF,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,OAAO,CACL,eAAK,SAAS,EAAC,mBAAmB,aAChC,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,GAAI,EAC9C,wBAAM,aAAa,CAAC,KAAK,CAAC,GAAO,IAC7B,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CostUSD.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostUSD.spec.d.ts","sourceRoot":"","sources":["../../src/client/CostUSD.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { render, screen } from '@testing-library/react';
3
+ import { describe, expect, it, vi } from 'vitest';
4
+ vi.mock('@payloadcms/ui', () => ({
5
+ FieldLabel: () => null,
6
+ useField: () => ({ value: 0 }),
7
+ }));
8
+ const { CostUSDCell, formatCostUSD } = await import('./CostUSD.js');
9
+ describe('USD cost formatting', () => {
10
+ it('formats dollars with sub-cent precision', () => {
11
+ expect(formatCostUSD(12.5)).toBe('$12.50');
12
+ expect(formatCostUSD(0.000322618)).toBe('$0.000323');
13
+ });
14
+ it('renders formatted list cells', () => {
15
+ render(_jsx(CostUSDCell, { cellData: 1.2345678 }));
16
+ expect(screen.getByText('$1.234568')).toBeTruthy();
17
+ });
18
+ });
19
+ //# sourceMappingURL=CostUSD.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostUSD.spec.js","sourceRoot":"","sources":["../../src/client/CostUSD.spec.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI;IACtB,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;CAC/B,CAAC,CAAC,CAAC;AAEJ,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;AAEpE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,KAAC,WAAW,IAAC,QAAQ,EAAE,SAAS,GAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,89 @@
1
+ .api-keys-modal {
2
+ align-items: center;
3
+ backdrop-filter: blur(8px);
4
+ background: color-mix(in srgb, var(--theme-elevation-0) 80%, transparent);
5
+ display: flex;
6
+ height: 100%;
7
+ justify-content: center;
8
+ }
9
+
10
+ .api-keys-modal__wrapper {
11
+ background: var(--theme-elevation-50);
12
+ border: 1px solid var(--theme-elevation-150);
13
+ border-radius: var(--style-radius-m);
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: 24px;
17
+ max-width: 720px;
18
+ padding: 32px;
19
+ position: relative;
20
+ width: min(90vw, 720px);
21
+ z-index: 1;
22
+ }
23
+
24
+ .api-keys-modal__content {
25
+ display: flex;
26
+ flex-direction: column;
27
+ gap: 12px;
28
+ }
29
+
30
+ .api-keys-modal__content > * {
31
+ margin: 0;
32
+ }
33
+
34
+ .api-keys-modal__warning {
35
+ color: var(--theme-success-500);
36
+ font-weight: 600;
37
+ }
38
+
39
+ .api-keys-modal__token-row {
40
+ align-items: center;
41
+ background: var(--theme-elevation-0);
42
+ border: 1px solid var(--theme-elevation-150);
43
+ border-radius: var(--style-radius-m);
44
+ display: flex;
45
+ gap: 8px;
46
+ padding: 4px 4px 4px 16px;
47
+ transition: border-color 200ms ease-out;
48
+ }
49
+
50
+ .api-keys-modal__token-row:hover {
51
+ border-color: var(--theme-elevation-400);
52
+ }
53
+
54
+ .api-keys-modal__token {
55
+ flex: 1;
56
+ overflow-wrap: anywhere;
57
+ padding: 8px 0;
58
+ position: relative;
59
+ text-align: left;
60
+ }
61
+
62
+ .api-keys-modal__copy {
63
+ padding: 9px;
64
+ position: relative;
65
+ }
66
+
67
+ .api-keys-modal__controls {
68
+ display: flex;
69
+ gap: 12px;
70
+ }
71
+
72
+ .api-keys-clear-button {
73
+ background: none;
74
+ border: none;
75
+ box-shadow: none;
76
+ box-sizing: border-box;
77
+ cursor: pointer;
78
+ line-height: 1;
79
+ margin: 0;
80
+ outline: none;
81
+ }
82
+
83
+ .api-keys-slide-up-1 {
84
+ transition: transform 200ms ease-out;
85
+ }
86
+
87
+ .api-keys-slide-up-1:hover {
88
+ transform: translateY(-4px);
89
+ }
package/dist/client.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { ApiKeysManager, RevokeApiKey } from './client/ApiKeysManager.js';
2
+ export { CostUSDCell, CostUSDField } from './client/CostUSD.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,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/client.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { ApiKeysManager, RevokeApiKey } from './client/ApiKeysManager.js';
2
+ export { CostUSDCell, CostUSDField } from './client/CostUSD.js';
2
3
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -3,6 +3,7 @@ type CollectionOptions = {
3
3
  authCollection: string;
4
4
  collectionSlug: string;
5
5
  tokenPrefix: string;
6
+ usageCollection?: string;
6
7
  collection?: Partial<CollectionConfig>;
7
8
  existing?: CollectionConfig;
8
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAmC,MAAM,SAAS,CAAC;AAIjF,KAAK,iBAAiB,GAAG;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAgFF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CA+DpF"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAmC,MAAM,SAAS,CAAC;AAIjF,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,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAgFF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAyGpF"}
@@ -75,7 +75,7 @@ function createEndpoints({ collectionSlug, tokenPrefix }) {
75
75
  ];
76
76
  }
77
77
  export function createApiKeysCollection(options) {
78
- const { authCollection, collectionSlug, collection, existing } = options;
78
+ const { authCollection, collectionSlug, collection, existing, usageCollection } = options;
79
79
  const ownerAccess = ({ req }) => {
80
80
  const owner = getOwnerID(req);
81
81
  return owner === null ? false : { owner: { equals: owner } };
@@ -86,7 +86,49 @@ export function createApiKeysCollection(options) {
86
86
  { name: 'prefix', type: 'text', required: true, index: true, admin: { readOnly: true } },
87
87
  { name: 'tokenHash', type: 'text', required: true, unique: true, index: true, access: { read: () => false }, admin: { hidden: true } },
88
88
  { name: 'lastUsedAt', type: 'date', admin: { readOnly: true } },
89
- { name: 'revokedAt', type: 'date', index: true, admin: { readOnly: true } },
89
+ {
90
+ name: 'revokedAt',
91
+ type: 'date',
92
+ index: true,
93
+ admin: { readOnly: true, condition: (_, siblingData) => Boolean(siblingData.revokedAt) },
94
+ },
95
+ ...(usageCollection
96
+ ? [
97
+ {
98
+ name: 'totalCostUSD',
99
+ type: 'number',
100
+ label: 'Total Cost (USD)',
101
+ virtual: true,
102
+ admin: {
103
+ readOnly: true,
104
+ components: {
105
+ Cell: '@frogbotai/plugin-api-keys/client#CostUSDCell',
106
+ Field: '@frogbotai/plugin-api-keys/client#CostUSDField',
107
+ },
108
+ },
109
+ hooks: {
110
+ afterRead: [
111
+ async ({ data, req }) => {
112
+ if (data?.id === undefined)
113
+ return 0;
114
+ const result = await req.frogbot.find({
115
+ collection: usageCollection,
116
+ depth: 0,
117
+ overrideAccess: true,
118
+ pagination: false,
119
+ req,
120
+ where: { apiKey: { equals: data.id } },
121
+ });
122
+ return result.docs.reduce((total, doc) => {
123
+ const cost = doc.costUSD;
124
+ return total + (typeof cost === 'number' ? cost : 0);
125
+ }, 0);
126
+ },
127
+ ],
128
+ },
129
+ },
130
+ ]
131
+ : []),
90
132
  {
91
133
  name: 'actions',
92
134
  type: 'ui',
@@ -115,6 +157,7 @@ export function createApiKeysCollection(options) {
115
157
  defaultColumns: collection?.admin?.defaultColumns ?? existing?.admin?.defaultColumns ?? [
116
158
  'name',
117
159
  'prefix',
160
+ ...(usageCollection ? ['totalCostUSD'] : []),
118
161
  'lastUsedAt',
119
162
  'revokedAt',
120
163
  'actions',
@@ -1 +1 @@
1
- {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKxD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,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;CACxC,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAmFxE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKxD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,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;CACxC,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAoFxE"}
package/dist/index.js CHANGED
@@ -10,10 +10,18 @@ export function apiKeysPlugin(options = {}) {
10
10
  throw new Error(`[plugin-api-keys] Auth collection '${authCollection}' must exist and have auth enabled.`);
11
11
  }
12
12
  const existing = config.collections.find((collection) => collection.slug === collectionSlug);
13
+ const usageLog = config.ai
14
+ ? config.collections.find((item) => item.usageLog === true) ?? {
15
+ slug: 'usage-logs',
16
+ usageLog: true,
17
+ fields: [],
18
+ }
19
+ : undefined;
13
20
  const collection = createApiKeysCollection({
14
21
  authCollection,
15
22
  collectionSlug,
16
- tokenPrefix: options.tokenPrefix ?? 'fbt',
23
+ tokenPrefix: options.tokenPrefix ?? 'fb',
24
+ usageCollection: usageLog?.slug,
17
25
  collection: options.collection,
18
26
  existing,
19
27
  });
@@ -21,15 +29,8 @@ export function apiKeysPlugin(options = {}) {
21
29
  authCollection,
22
30
  collectionSlug,
23
31
  headerNames: options.headerNames,
24
- tokenPrefix: options.tokenPrefix ?? 'fbt',
32
+ tokenPrefix: options.tokenPrefix ?? 'fb',
25
33
  });
26
- const usageLog = config.ai
27
- ? config.collections.find((item) => item.usageLog === true) ?? {
28
- slug: 'usage-logs',
29
- usageLog: true,
30
- fields: [],
31
- }
32
- : undefined;
33
34
  const usageField = {
34
35
  name: 'apiKey',
35
36
  type: 'relationship',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/server/token.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,WAAmB,EAAE,GAAE,kBAAuB,GAAG,MAAM,CAE1F;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,EAAE,WAA2B,EAAE,GAAE,mBAAwB,GACxD,MAAM,GAAG,IAAI,CAWf"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/server/token.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,WAAkB,EAAE,GAAE,kBAAuB,GAAG,MAAM,CAEzF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,EAAE,WAA2B,EAAE,GAAE,mBAAwB,GACxD,MAAM,GAAG,IAAI,CAWf"}
@@ -1,5 +1,5 @@
1
1
  import { createHash, randomBytes } from 'node:crypto';
2
- export function createApiKeyToken({ tokenPrefix = 'fbt' } = {}) {
2
+ export function createApiKeyToken({ tokenPrefix = 'fb' } = {}) {
3
3
  return `${tokenPrefix}_${randomBytes(32).toString('base64url')}`;
4
4
  }
5
5
  export function hashApiKeyToken(token) {
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/server/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAUtD,MAAM,UAAU,iBAAiB,CAAC,EAAE,WAAW,GAAG,KAAK,KAAyB,EAAE;IAChF,OAAO,GAAG,WAAW,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,EAAE,WAAW,GAAG,CAAC,WAAW,CAAC,KAA0B,EAAE;IAEzD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,aAAa,EAAE,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;QAC9C,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/server/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAUtD,MAAM,UAAU,iBAAiB,CAAC,EAAE,WAAW,GAAG,IAAI,KAAyB,EAAE;IAC/E,OAAO,GAAG,WAAW,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,EAAE,WAAW,GAAG,CAAC,WAAW,CAAC,KAA0B,EAAE;IAEzD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,aAAa,EAAE,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;QAC9C,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frogbotai/plugin-api-keys",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "description": "Multiple named API keys for FrogBot.",
5
5
  "license": "MIT",
6
6
  "author": "Colby Gilbert",
@@ -28,12 +28,14 @@
28
28
  "files": [
29
29
  "dist"
30
30
  ],
31
- "sideEffects": false,
31
+ "sideEffects": [
32
+ "*.css"
33
+ ],
32
34
  "peerDependencies": {
33
35
  "@payloadcms/ui": "3.85.1",
34
36
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
35
37
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
36
- "frogbot": "0.9.0"
38
+ "frogbot": "0.11.0"
37
39
  },
38
40
  "devDependencies": {
39
41
  "@payloadcms/ui": "3.85.1",
@@ -42,13 +44,13 @@
42
44
  "react": "19.2.6",
43
45
  "react-dom": "19.2.6",
44
46
  "typescript": "5.6.2",
45
- "frogbot": "0.9.0"
47
+ "frogbot": "0.11.0"
46
48
  },
47
49
  "publishConfig": {
48
50
  "access": "public"
49
51
  },
50
52
  "scripts": {
51
- "build": "tsc -p tsconfig.json",
53
+ "build": "tsc -p tsconfig.json && cp src/client/styles.css dist/client/styles.css",
52
54
  "clean": "rm -rf dist",
53
55
  "typecheck": "tsc --noEmit"
54
56
  }