@atlasauth/react 0.4.1 → 0.6.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.
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useApiKeys = useApiKeys;
4
+ exports.ApiKeys = ApiKeys;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("react");
7
+ const js_1 = require("@atlasauth/js");
8
+ const reverification_1 = require("./reverification");
9
+ const components_shared_1 = require("./components-shared");
10
+ function useApiKeys(options = {}) {
11
+ const { organizationId } = options;
12
+ const client = (0, components_shared_1.useMeClient)();
13
+ const reverification = (0, reverification_1.useReverification)();
14
+ const { withReverification } = reverification;
15
+ const [status, setStatus] = (0, react_1.useState)('loading');
16
+ const [error, setError] = (0, react_1.useState)(null);
17
+ const [list, setList] = (0, react_1.useState)({ data: [], allowedScopes: [], allowedClaims: [], maxActiveKeys: 0, activeCount: 0 });
18
+ const reload = (0, react_1.useCallback)(async () => {
19
+ try {
20
+ const next = await (0, js_1.listApiKeys)(client, { organizationId });
21
+ setList(next);
22
+ setStatus('ready');
23
+ setError(null);
24
+ }
25
+ catch (err) {
26
+ // A 403 on the LIST means the feature is off (or org keys are, or the role
27
+ // lacks the permission) — render nothing actionable rather than an error.
28
+ if (err instanceof js_1.ApiKeyRequestError && err.status === 403) {
29
+ setStatus('disabled');
30
+ setError(err.message);
31
+ return;
32
+ }
33
+ setStatus('error');
34
+ setError(err instanceof Error ? err.message : String(err));
35
+ }
36
+ }, [client, organizationId]);
37
+ (0, react_1.useEffect)(() => {
38
+ void reload();
39
+ }, [reload]);
40
+ const createKey = (0, react_1.useCallback)(async (input = {}) => {
41
+ const created = await withReverification(() => (0, js_1.createApiKey)(client, { ...input, ...(organizationId ? { organizationId } : {}) }));
42
+ await reload();
43
+ return created;
44
+ }, [client, organizationId, reload, withReverification]);
45
+ const renameKey = (0, react_1.useCallback)(async (id, name) => {
46
+ const updated = await (0, js_1.updateApiKey)(client, id, { name });
47
+ await reload();
48
+ return updated;
49
+ }, [client, reload]);
50
+ const revokeKey = (0, react_1.useCallback)(async (id) => {
51
+ await (0, js_1.revokeApiKey)(client, id);
52
+ await reload();
53
+ }, [client, reload]);
54
+ return {
55
+ status,
56
+ keys: list.data,
57
+ allowedScopes: list.allowedScopes,
58
+ allowedClaims: list.allowedClaims,
59
+ maxActiveKeys: list.maxActiveKeys,
60
+ activeCount: list.activeCount,
61
+ error,
62
+ reload,
63
+ createKey,
64
+ renameKey,
65
+ revokeKey,
66
+ reverification,
67
+ };
68
+ }
69
+ function formatLimit(value) {
70
+ if (value === null || value === undefined)
71
+ return '—';
72
+ if (typeof value === 'object')
73
+ return JSON.stringify(value);
74
+ return String(value);
75
+ }
76
+ /**
77
+ * Drop-in API key manager: list, create (with the reverification prompt when the
78
+ * session is stale), show the new secret once with a copy button, rename, and
79
+ * revoke with a confirmation step.
80
+ */
81
+ function ApiKeys(props) {
82
+ const { organizationId, onCreate, expiryOptionsDays = [0, 30, 90, 365] } = props;
83
+ const renderClaims = props.renderClaimsFields ?? props.claimsForm;
84
+ const api = useApiKeys({ organizationId });
85
+ const t = (0, components_shared_1.useText)();
86
+ const cardClass = (0, components_shared_1.useClass)('card', 'atlas-card');
87
+ const cls = (0, components_shared_1.useClasses)();
88
+ const [creating, setCreating] = (0, react_1.useState)(false);
89
+ const [name, setName] = (0, react_1.useState)('');
90
+ const [expiryDays, setExpiryDays] = (0, react_1.useState)(expiryOptionsDays[0] ?? 0);
91
+ const [scopes, setScopes] = (0, react_1.useState)([]);
92
+ const [claims, setClaims] = (0, react_1.useState)({});
93
+ const [busy, setBusy] = (0, react_1.useState)(false);
94
+ const [formError, setFormError] = (0, react_1.useState)(null);
95
+ const [secret, setSecret] = (0, react_1.useState)(null);
96
+ const [copied, setCopied] = (0, react_1.useState)(false);
97
+ const [renaming, setRenaming] = (0, react_1.useState)(null);
98
+ const [confirmRevoke, setConfirmRevoke] = (0, react_1.useState)(null);
99
+ const [password, setPassword] = (0, react_1.useState)('');
100
+ const [reauthError, setReauthError] = (0, react_1.useState)(null);
101
+ const claimsCtx = (0, react_1.useMemo)(() => ({
102
+ claims,
103
+ allowedClaims: api.allowedClaims,
104
+ setClaim: (claim, value) => setClaims((prev) => {
105
+ const next = { ...prev };
106
+ if (value === undefined)
107
+ delete next[claim];
108
+ else
109
+ next[claim] = value;
110
+ return next;
111
+ }),
112
+ }), [claims, api.allowedClaims]);
113
+ if (api.status === 'loading')
114
+ return null;
115
+ if (api.status === 'disabled') {
116
+ return ((0, jsx_runtime_1.jsxs)("section", { className: cardClass, "data-atlas": "api-keys", children: [(0, jsx_runtime_1.jsx)("h2", { className: cls('sectionTitle', 'atlas-section-title'), children: t('apiKeys.title') }), (0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), "data-atlas": "api-keys-disabled", children: t('apiKeys.disabled') })] }));
117
+ }
118
+ const now = Date.now();
119
+ const atCap = api.maxActiveKeys > 0 && api.activeCount >= api.maxActiveKeys;
120
+ const resetForm = () => {
121
+ setCreating(false);
122
+ setName('');
123
+ setExpiryDays(expiryOptionsDays[0] ?? 0);
124
+ setScopes([]);
125
+ setClaims({});
126
+ setFormError(null);
127
+ };
128
+ const submit = async () => {
129
+ setBusy(true);
130
+ setFormError(null);
131
+ try {
132
+ const created = await api.createKey({
133
+ ...(name.trim() ? { name: name.trim() } : {}),
134
+ ...(expiryDays > 0 ? { expiresInSeconds: expiryDays * 24 * 60 * 60 } : {}),
135
+ ...(scopes.length > 0 ? { scopes } : {}),
136
+ ...(Object.keys(claims).length > 0 ? { claims } : {}),
137
+ });
138
+ setSecret(created.secret);
139
+ setCopied(false);
140
+ resetForm();
141
+ onCreate?.(created);
142
+ }
143
+ catch (err) {
144
+ // A cancelled reverification is not an error worth showing.
145
+ if (!(err instanceof Error && err.message === 'Reverification cancelled.')) {
146
+ setFormError(err instanceof Error ? err.message : t('error.generic'));
147
+ }
148
+ }
149
+ finally {
150
+ setBusy(false);
151
+ }
152
+ };
153
+ const confirmIdentity = async () => {
154
+ setReauthError(null);
155
+ try {
156
+ await api.reverification.completeReverification({ strategy: 'password', password });
157
+ setPassword('');
158
+ }
159
+ catch (err) {
160
+ setReauthError(err instanceof Error ? err.message : t('error.generic'));
161
+ }
162
+ };
163
+ const copy = async () => {
164
+ if (!secret)
165
+ return;
166
+ try {
167
+ await navigator.clipboard?.writeText(secret);
168
+ setCopied(true);
169
+ }
170
+ catch {
171
+ /* the secret stays visible for manual copy */
172
+ }
173
+ };
174
+ const saveRename = async () => {
175
+ if (!renaming)
176
+ return;
177
+ setBusy(true);
178
+ try {
179
+ await api.renameKey(renaming.id, renaming.name.trim() || null);
180
+ setRenaming(null);
181
+ }
182
+ catch (err) {
183
+ setFormError(err instanceof Error ? err.message : t('error.generic'));
184
+ }
185
+ finally {
186
+ setBusy(false);
187
+ }
188
+ };
189
+ const revoke = async (id) => {
190
+ setBusy(true);
191
+ try {
192
+ await api.revokeKey(id);
193
+ setConfirmRevoke(null);
194
+ }
195
+ catch (err) {
196
+ setFormError(err instanceof Error ? err.message : t('error.generic'));
197
+ }
198
+ finally {
199
+ setBusy(false);
200
+ }
201
+ };
202
+ const statusOf = (key) => {
203
+ if (key.revoked_at)
204
+ return t('apiKeys.revoked');
205
+ if (key.expires_at && key.expires_at <= now)
206
+ return t('apiKeys.expired');
207
+ return null;
208
+ };
209
+ return ((0, jsx_runtime_1.jsxs)("section", { className: cardClass, "data-atlas": "api-keys", children: [(0, jsx_runtime_1.jsx)("h2", { className: cls('sectionTitle', 'atlas-section-title'), children: t('apiKeys.title') }), (0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), children: t(organizationId ? 'apiKeys.organizationSubtitle' : 'apiKeys.subtitle') }), api.error && api.status === 'error' ? ((0, jsx_runtime_1.jsx)("p", { className: cls('alert', 'atlas-alert'), role: "alert", children: api.error })) : null, secret ? ((0, jsx_runtime_1.jsxs)("div", { "data-atlas": "api-key-secret", role: "status", children: [(0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), children: (0, jsx_runtime_1.jsx)("strong", { children: t('apiKeys.secretTitle') }) }), (0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), children: t('apiKeys.secretHint') }), (0, jsx_runtime_1.jsx)("code", { "data-atlas": "api-key-secret-value", children: secret }), (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", onClick: () => void copy(), children: copied ? t('apiKeys.copied') : t('apiKeys.copy') }), (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", onClick: () => setSecret(null), children: t('apiKeys.done') })] })) : null, api.reverification.needsReverification ? ((0, jsx_runtime_1.jsxs)("div", { "data-atlas": "api-keys-reverification", role: "dialog", "aria-label": t('reverification.title'), children: [(0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), children: (0, jsx_runtime_1.jsx)("strong", { children: t('reverification.title') }) }), (0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), children: t('reverification.subtitle') }), (0, jsx_runtime_1.jsxs)("label", { className: cls('formField', 'atlas-field'), children: [(0, jsx_runtime_1.jsx)("span", { className: cls('formFieldLabel', 'atlas-field-label'), children: t('reverification.passwordLabel') }), (0, jsx_runtime_1.jsx)("input", { className: cls('formFieldInput', 'atlas-account-input'), type: "password", autoComplete: "current-password", value: password, onChange: (e) => setPassword(e.target.value) })] }), reauthError ? (0, jsx_runtime_1.jsx)("p", { className: cls('formFieldError', 'atlas-error'), role: "alert", children: reauthError }) : null, (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonPrimary', 'atlas-button'), type: "button", onClick: () => void confirmIdentity(), children: t('reverification.submit') }), (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", onClick: () => {
210
+ setPassword('');
211
+ setReauthError(null);
212
+ api.reverification.cancelReverification();
213
+ }, children: t('reverification.cancel') })] })) : null, api.keys.length === 0 ? ((0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), "data-atlas": "api-keys-empty", children: t('apiKeys.empty') })) : ((0, jsx_runtime_1.jsx)("ul", { className: cls('list', 'atlas-list'), "data-atlas": "api-keys-list", children: api.keys.map((key) => {
214
+ const state = statusOf(key);
215
+ const limits = key.limits && typeof key.limits === 'object' ? Object.entries(key.limits) : [];
216
+ return ((0, jsx_runtime_1.jsxs)("li", { className: cls('listItem', 'atlas-list-item'), "data-atlas": "api-key", children: [renaming?.id === key.id ? ((0, jsx_runtime_1.jsxs)("span", { children: [(0, jsx_runtime_1.jsx)("input", { className: cls('formFieldInput', 'atlas-account-input'), "aria-label": t('apiKeys.nameLabel'), value: renaming.name, onChange: (e) => setRenaming({ id: key.id, name: e.target.value }) }), (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", disabled: busy, onClick: () => void saveRename(), children: t('apiKeys.save') }), (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", onClick: () => setRenaming(null), children: t('apiKeys.cancel') })] })) : ((0, jsx_runtime_1.jsx)("strong", { children: key.name ?? t('apiKeys.unnamed') })), ' ', (0, jsx_runtime_1.jsxs)("code", { children: [key.prefix, "\u2026"] }), state ? (0, jsx_runtime_1.jsxs)("em", { children: [" \u2014 ", state] }) : null, (0, jsx_runtime_1.jsx)("div", { className: cls('text', 'atlas-text'), children: [
217
+ key.last_used_at
218
+ ? t('apiKeys.lastUsed', { date: new Date(key.last_used_at).toLocaleDateString() })
219
+ : t('apiKeys.neverUsed'),
220
+ key.expires_at ? t('apiKeys.expiresOn', { date: new Date(key.expires_at).toLocaleDateString() }) : null,
221
+ key.scopes && key.scopes.length > 0 ? key.scopes.join(', ') : null,
222
+ ]
223
+ .filter(Boolean)
224
+ .join(' · ') }), limits.length > 0 ? ((0, jsx_runtime_1.jsxs)("div", { className: cls('text', 'atlas-text'), "data-atlas": "api-key-limits", children: [t('apiKeys.limits'), ": ", limits.map(([k, v]) => `${k} ${formatLimit(v)}`).join(' · ')] })) : null, !key.revoked_at && renaming?.id !== key.id ? (confirmRevoke === key.id ? ((0, jsx_runtime_1.jsxs)("span", { "data-atlas": "api-key-revoke-confirm", children: [(0, jsx_runtime_1.jsx)("span", { className: cls('text', 'atlas-text'), children: t('apiKeys.revokeConfirm') }), (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", disabled: busy, onClick: () => void revoke(key.id), children: t('apiKeys.revokeConfirmButton') }), (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", onClick: () => setConfirmRevoke(null), children: t('apiKeys.cancel') })] })) : ((0, jsx_runtime_1.jsxs)("span", { children: [(0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", onClick: () => setRenaming({ id: key.id, name: key.name ?? '' }), children: t('apiKeys.rename') }), (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", onClick: () => setConfirmRevoke(key.id), children: t('apiKeys.revoke') })] }))) : null] }, key.id));
225
+ }) })), formError ? (0, jsx_runtime_1.jsx)("p", { className: cls('alert', 'atlas-alert'), role: "alert", children: formError }) : null, creating ? ((0, jsx_runtime_1.jsxs)("div", { "data-atlas": "api-key-create", children: [(0, jsx_runtime_1.jsxs)("label", { className: cls('formField', 'atlas-field'), children: [(0, jsx_runtime_1.jsx)("span", { className: cls('formFieldLabel', 'atlas-field-label'), children: t('apiKeys.nameLabel') }), (0, jsx_runtime_1.jsx)("input", { className: cls('formFieldInput', 'atlas-account-input'), value: name, maxLength: 100, placeholder: t('apiKeys.namePlaceholder'), onChange: (e) => setName(e.target.value) })] }), (0, jsx_runtime_1.jsxs)("label", { className: cls('formField', 'atlas-field'), children: [(0, jsx_runtime_1.jsx)("span", { className: cls('formFieldLabel', 'atlas-field-label'), children: t('apiKeys.expiresLabel') }), (0, jsx_runtime_1.jsx)("select", { className: cls('formFieldInput', 'atlas-account-input'), value: String(expiryDays), onChange: (e) => setExpiryDays(Number(e.target.value)), children: expiryOptionsDays.map((days) => ((0, jsx_runtime_1.jsx)("option", { value: String(days), children: days > 0 ? t('apiKeys.expiresDays', { days: String(days) }) : t('apiKeys.expiresNever') }, days))) })] }), api.allowedScopes.length > 0 ? ((0, jsx_runtime_1.jsxs)("fieldset", { className: cls('formField', 'atlas-field'), children: [(0, jsx_runtime_1.jsx)("legend", { className: cls('formFieldLabel', 'atlas-field-label'), children: t('apiKeys.scopesLabel') }), api.allowedScopes.map((scope) => ((0, jsx_runtime_1.jsxs)("label", { children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: scopes.includes(scope), onChange: (e) => setScopes((prev) => (e.target.checked ? [...prev, scope] : prev.filter((s) => s !== scope))) }), ' ', scope] }, scope)))] })) : null, renderClaims ? renderClaims(claimsCtx) : null, (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonPrimary', 'atlas-button'), type: "button", disabled: busy, onClick: () => void submit(), children: t('apiKeys.submit') }), (0, jsx_runtime_1.jsx)("button", { className: cls('formButtonSecondary', 'atlas-button-secondary'), type: "button", onClick: resetForm, children: t('apiKeys.cancel') })] })) : atCap ? ((0, jsx_runtime_1.jsx)("p", { className: cls('text', 'atlas-text'), "data-atlas": "api-keys-limit", children: t('apiKeys.limitReached', { max: String(api.maxActiveKeys) }) })) : ((0, jsx_runtime_1.jsx)("button", { className: cls('formButtonPrimary', 'atlas-button'), type: "button", onClick: () => setCreating(true), children: t('apiKeys.create') }))] }));
226
+ }
227
+ //# sourceMappingURL=api-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../src/api-keys.tsx"],"names":[],"mappings":"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"}
@@ -29,6 +29,20 @@ export interface DesignTokens {
29
29
  borderRadius?: string;
30
30
  fontFamily?: string;
31
31
  spacingUnit?: string;
32
+ /**
33
+ * Text and icon colour on a `colorPrimary` fill (the primary button label,
34
+ * the avatar initials). Defaults to white or near-black, whichever contrasts
35
+ * more with the resolved `colorPrimary`. With a design active, an explicit
36
+ * value overrides the design's primary ink.
37
+ */
38
+ colorTextOnPrimary?: string;
39
+ /**
40
+ * The keyboard focus ring (a solid 2px outline on `:focus-visible`). Defaults
41
+ * to the resolved `colorPrimary`; pick a colour with at least 3:1 contrast
42
+ * against `colorBackground`. With a design active, an explicit value replaces
43
+ * the design's ring colour.
44
+ */
45
+ colorFocusRing?: string;
32
46
  }
33
47
  /**
34
48
  * Every element a customer may target. Named for what it IS, not where it sits.
@@ -134,6 +148,8 @@ export declare const THEMES: {
134
148
  readonly colorBackground: "#14171c";
135
149
  readonly colorBorder: "#242932";
136
150
  readonly colorPrimary: "#6ea8fe";
151
+ readonly colorTextOnPrimary: string;
152
+ readonly colorFocusRing: "#6ea8fe";
137
153
  readonly colorDanger: string;
138
154
  readonly borderRadius: string;
139
155
  readonly fontFamily: string;
@@ -141,6 +157,8 @@ export declare const THEMES: {
141
157
  };
142
158
  readonly neobrutalist: {
143
159
  readonly colorPrimary: "#ffe600";
160
+ readonly colorTextOnPrimary: string;
161
+ readonly colorFocusRing: "#000000";
144
162
  readonly colorText: "#000000";
145
163
  readonly colorBackground: "#ffffff";
146
164
  readonly colorBorder: "#000000";
@@ -156,6 +174,15 @@ export declare const THEMES: {
156
174
  * Later wins, and `undefined` never overwrites. A customer setting one variable
157
175
  * on the dark theme expects the other eleven to stay dark, not silently revert
158
176
  * to the light defaults.
177
+ *
178
+ * `colorTextOnPrimary` and `colorFocusRing` follow the RESOLVED `colorPrimary`
179
+ * unless set explicitly in `variables` (a theme's own values are for its own
180
+ * primary): the label flips to whichever of white / near-black contrasts more,
181
+ * and the focus ring takes the primary — adjusted in lightness until it has 3:1
182
+ * contrast against `colorBackground` (WCAG 1.4.11), the way the label is picked
183
+ * for contrast. A base theme whose primary would make a poor ring on its own
184
+ * background (neobrutalist yellow on white) keeps its ring while its primary is
185
+ * unchanged. An explicit `colorFocusRing` is used as given.
159
186
  */
160
187
  export declare function resolveTokens(appearance?: Appearance): Required<DesignTokens>;
161
188
  /** Tokens as CSS custom properties, for the host DOM to inherit. */
@@ -26,6 +26,7 @@ exports.classFor = classFor;
26
26
  exports.explicitTokens = explicitTokens;
27
27
  exports.renderAppearance = renderAppearance;
28
28
  const runtime_1 = require("@atlasauth/design/runtime");
29
+ const contrast_1 = require("./contrast");
29
30
  var runtime_2 = require("@atlasauth/design/runtime");
30
31
  Object.defineProperty(exports, "instanceDesignFrom", { enumerable: true, get: function () { return runtime_2.instanceDesignFrom; } });
31
32
  Object.defineProperty(exports, "warnOnce", { enumerable: true, get: function () { return runtime_2.warnOnce; } });
@@ -46,6 +47,9 @@ exports.DEFAULT_TOKENS = {
46
47
  borderRadius: '8px',
47
48
  fontFamily: 'ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif',
48
49
  spacingUnit: '4px',
50
+ // Both derived from colorPrimary by resolveTokens unless set explicitly.
51
+ colorTextOnPrimary: '#ffffff',
52
+ colorFocusRing: '#5b5bd6',
49
53
  };
50
54
  /**
51
55
  * §10.3: "prebuilt themes shipped (default, dark, neobrutalist as a demo of the
@@ -61,10 +65,14 @@ exports.THEMES = {
61
65
  colorBackground: '#14171c',
62
66
  colorBorder: '#242932',
63
67
  colorPrimary: '#6ea8fe',
68
+ colorTextOnPrimary: (0, contrast_1.textOnPrimary)('#6ea8fe'),
69
+ colorFocusRing: '#6ea8fe',
64
70
  },
65
71
  neobrutalist: {
66
72
  ...exports.DEFAULT_TOKENS,
67
73
  colorPrimary: '#ffe600',
74
+ colorTextOnPrimary: (0, contrast_1.textOnPrimary)('#ffe600'),
75
+ colorFocusRing: '#000000',
68
76
  colorText: '#000000',
69
77
  colorBackground: '#ffffff',
70
78
  colorBorder: '#000000',
@@ -78,6 +86,15 @@ exports.THEMES = {
78
86
  * Later wins, and `undefined` never overwrites. A customer setting one variable
79
87
  * on the dark theme expects the other eleven to stay dark, not silently revert
80
88
  * to the light defaults.
89
+ *
90
+ * `colorTextOnPrimary` and `colorFocusRing` follow the RESOLVED `colorPrimary`
91
+ * unless set explicitly in `variables` (a theme's own values are for its own
92
+ * primary): the label flips to whichever of white / near-black contrasts more,
93
+ * and the focus ring takes the primary — adjusted in lightness until it has 3:1
94
+ * contrast against `colorBackground` (WCAG 1.4.11), the way the label is picked
95
+ * for contrast. A base theme whose primary would make a poor ring on its own
96
+ * background (neobrutalist yellow on white) keeps its ring while its primary is
97
+ * unchanged. An explicit `colorFocusRing` is used as given.
81
98
  */
82
99
  function resolveTokens(appearance) {
83
100
  const base = appearance?.baseTheme ? exports.THEMES[appearance.baseTheme] : exports.DEFAULT_TOKENS;
@@ -87,6 +104,13 @@ function resolveTokens(appearance) {
87
104
  if (value !== undefined)
88
105
  resolved[key] = value;
89
106
  }
107
+ const primaryChanged = resolved.colorPrimary !== base.colorPrimary;
108
+ if (overrides.colorTextOnPrimary === undefined) {
109
+ resolved.colorTextOnPrimary = (0, contrast_1.textOnPrimary)(resolved.colorPrimary);
110
+ }
111
+ if (overrides.colorFocusRing === undefined) {
112
+ resolved.colorFocusRing = (0, contrast_1.focusRingOn)(primaryChanged ? resolved.colorPrimary : base.colorFocusRing, resolved.colorBackground);
113
+ }
90
114
  return resolved;
91
115
  }
92
116
  /** Tokens as CSS custom properties, for the host DOM to inherit. */
@@ -136,11 +160,44 @@ function explicitTokens(appearance) {
136
160
  * variables inline, no stylesheet, no attributes.
137
161
  */
138
162
  function renderAppearance(appearance, instanceDesign, options = {}) {
139
- return (0, runtime_1.renderDesignAppearance)(appearance, instanceDesign, {
163
+ const out = (0, runtime_1.renderDesignAppearance)(appearance, instanceDesign, {
140
164
  tokens: explicitTokens(appearance),
141
165
  legacyStyle: () => cssVariables(resolveTokens(appearance)),
142
166
  frontendApi: options.frontendApi,
143
167
  warn: options.warn,
144
168
  });
169
+ if (!out.attributes['data-atlas-design'])
170
+ return out;
171
+ return { ...out, style: { ...out.style, ...designAccessibilityVariables(appearance, options.warn ?? runtime_1.warnOnce) } };
172
+ }
173
+ /** Characters an inline token may never contain (mirrors the design system's raw-token guard). */
174
+ const UNSAFE_INLINE = /[;{}<>\\]|\/\*|url\s*\(|expression\s*\(|@import|javascript:/i;
175
+ /**
176
+ * With a design active, the design supplies the primary ink and the focus ring,
177
+ * and the token defaults are not emitted. An EXPLICIT `colorTextOnPrimary` /
178
+ * `colorFocusRing` in `variables` still wins: they go inline on the root. The
179
+ * ring also sets `--atlas-focus-outline-color`, which the design-mode focus
180
+ * outline reads before falling back to the (solid) primary — the design's own
181
+ * `--atlas-color-focus-ring` is translucent, a glow colour, not an outline one.
182
+ */
183
+ function designAccessibilityVariables(appearance, warn) {
184
+ const vars = {};
185
+ const safe = (key, value) => {
186
+ if (value === undefined)
187
+ return false;
188
+ if (typeof value === 'string' && value.length <= 200 && !UNSAFE_INLINE.test(value))
189
+ return true;
190
+ warn(`appearance.variables.${key} is not a safe CSS value; ignored.`);
191
+ return false;
192
+ };
193
+ const ink = appearance?.variables?.colorTextOnPrimary;
194
+ if (safe('colorTextOnPrimary', ink))
195
+ vars['--atlas-color-text-on-primary'] = ink;
196
+ const ring = appearance?.variables?.colorFocusRing;
197
+ if (safe('colorFocusRing', ring)) {
198
+ vars['--atlas-color-focus-ring'] = ring;
199
+ vars['--atlas-focus-outline-color'] = ring;
200
+ }
201
+ return vars;
145
202
  }
146
203
  //# sourceMappingURL=appearance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"appearance.js","sourceRoot":"","sources":["../src/appearance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"appearance.js","sourceRoot":"","sources":["../src/appearance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type FlowCaptcha } from '@atlasauth/js';
2
+ /**
3
+ * The captcha half of the prebuilt `<SignIn>`/`<SignUp>`.
4
+ *
5
+ * Driven entirely by the instance's settings (`captchaFlows` from
6
+ * `/v1/appearance`), so switching captcha on in the dashboard makes the
7
+ * components render it with no code change. The widget itself is the shared
8
+ * `@atlasauth/js` renderer the embed widget also uses.
9
+ *
10
+ * Lifecycle: a visible/managed widget is drawn as soon as its slot mounts, so
11
+ * the user can solve it while filling in the form; an invisible one is executed
12
+ * only when the form is submitted. Tokens are single-use, so after a submit
13
+ * spent one the caller `reset()`s, which draws a fresh widget.
14
+ */
15
+ export interface CaptchaController {
16
+ /** Whether this flow renders a widget at all. */
17
+ needed: boolean;
18
+ /** Callback ref for the element the widget draws into. */
19
+ slotRef: (el: HTMLDivElement | null) => void;
20
+ /** The solved token, rendering/executing the widget first if needed. Null when
21
+ * no captcha is needed, or the provider failed (the server then refuses with
22
+ * CAPTCHA_REQUIRED, which the caller turns into a message). */
23
+ getToken(): Promise<string | null>;
24
+ /** Drop the (spent) widget and, for a visible one, draw a fresh one. */
25
+ reset(): void;
26
+ }
27
+ export declare function useCaptcha(flow: FlowCaptcha | undefined, options: {
28
+ /** Render at all — the caller's "this flow requires a token here" decision. */
29
+ active: boolean;
30
+ /** Draw the widget as soon as the slot mounts. Default: unless invisible. */
31
+ eager?: boolean;
32
+ /** Called with the token when an eagerly drawn widget is solved. */
33
+ onSolved?: (token: string) => void;
34
+ }): CaptchaController;
35
+ /** The element the widget draws into. Empty until the provider renders. */
36
+ export declare function CaptchaSlot({ controller }: {
37
+ controller: CaptchaController;
38
+ }): import("react").JSX.Element | null;
39
+ /**
40
+ * Swap the server's captcha refusals (CAPTCHA_REQUIRED / CAPTCHA_FAILED) for a
41
+ * localized, form-level message. Shared with the other framework SDKs.
42
+ */
43
+ export { localizeCaptchaErrors } from '@atlasauth/js';
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.localizeCaptchaErrors = void 0;
4
+ exports.useCaptcha = useCaptcha;
5
+ exports.CaptchaSlot = CaptchaSlot;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const js_1 = require("@atlasauth/js");
9
+ function useCaptcha(flow, options) {
10
+ const needed = options.active && !!flow && (0, js_1.isRenderableCaptcha)(flow.provider);
11
+ const eager = options.eager ?? flow?.widget !== 'invisible';
12
+ const container = (0, react_1.useRef)(null);
13
+ const handle = (0, react_1.useRef)(null);
14
+ const onSolved = (0, react_1.useRef)(options.onSolved);
15
+ onSolved.current = options.onSolved;
16
+ // The latest flow/needed, read by the stable callbacks below.
17
+ const flowKey = `${needed}|${flow?.provider ?? ''}|${flow?.siteKey ?? ''}|${flow?.widget ?? ''}|${eager}`;
18
+ const live = (0, react_1.useRef)({ flow, needed, eager, flowKey });
19
+ live.current = { flow, needed, eager, flowKey };
20
+ // The settings the current widget was drawn with, so a redraw happens only
21
+ // when they actually change.
22
+ const drawnKey = (0, react_1.useRef)(null);
23
+ const remove = (0, react_1.useCallback)(() => {
24
+ handle.current?.remove();
25
+ handle.current = null;
26
+ drawnKey.current = null;
27
+ }, []);
28
+ const mount = (0, react_1.useCallback)(() => {
29
+ const { flow: f, needed: n } = live.current;
30
+ const el = container.current;
31
+ remove();
32
+ if (!n || !f || !el)
33
+ return null;
34
+ const h = (0, js_1.renderCaptchaWidget)(f, el);
35
+ handle.current = h;
36
+ drawnKey.current = live.current.flowKey;
37
+ // Swallow here so a removed / failed widget is never an unhandled
38
+ // rejection; getToken() reads the same promise and reports it.
39
+ h.token.then((token) => {
40
+ if (handle.current === h)
41
+ onSolved.current?.(token);
42
+ }, () => undefined);
43
+ return h;
44
+ }, [remove]);
45
+ const slotRef = (0, react_1.useCallback)((el) => {
46
+ if (el === container.current)
47
+ return;
48
+ container.current = el;
49
+ if (!el) {
50
+ remove();
51
+ return;
52
+ }
53
+ if (live.current.needed && live.current.eager)
54
+ mount();
55
+ }, [mount, remove]);
56
+ // A settings change (the provider/site key arrived, or the flow switched on)
57
+ // while the slot is already mounted: redraw for the new config.
58
+ (0, react_1.useEffect)(() => {
59
+ if (!container.current)
60
+ return;
61
+ if (!live.current.needed || !live.current.eager)
62
+ remove();
63
+ else if (drawnKey.current !== flowKey)
64
+ mount();
65
+ }, [flowKey, mount, remove]);
66
+ (0, react_1.useEffect)(() => remove, [remove]);
67
+ const reset = (0, react_1.useCallback)(() => {
68
+ remove();
69
+ if (live.current.needed && live.current.eager)
70
+ mount();
71
+ }, [mount, remove]);
72
+ // The handle whose token a submit already took. Tokens are single-use, so the
73
+ // next getToken() draws a fresh widget instead of replaying it.
74
+ const spent = (0, react_1.useRef)(null);
75
+ const getToken = (0, react_1.useCallback)(async () => {
76
+ if (!live.current.needed)
77
+ return null;
78
+ let h = handle.current;
79
+ if (!h || spent.current === h)
80
+ h = mount();
81
+ if (!h)
82
+ return null;
83
+ try {
84
+ const token = await h.token;
85
+ spent.current = h;
86
+ return token;
87
+ }
88
+ catch {
89
+ // The provider errored / timed out: start over with a fresh widget.
90
+ if (handle.current === h)
91
+ reset();
92
+ return null;
93
+ }
94
+ }, [mount, reset]);
95
+ return { needed, slotRef, getToken, reset };
96
+ }
97
+ /** The element the widget draws into. Empty until the provider renders. */
98
+ function CaptchaSlot({ controller }) {
99
+ if (!controller.needed)
100
+ return null;
101
+ return (0, jsx_runtime_1.jsx)("div", { ref: controller.slotRef, className: "atlas-captcha", "data-atlas-captcha": "" });
102
+ }
103
+ /**
104
+ * Swap the server's captcha refusals (CAPTCHA_REQUIRED / CAPTCHA_FAILED) for a
105
+ * localized, form-level message. Shared with the other framework SDKs.
106
+ */
107
+ var js_2 = require("@atlasauth/js");
108
+ Object.defineProperty(exports, "localizeCaptchaErrors", { enumerable: true, get: function () { return js_2.localizeCaptchaErrors; } });
109
+ //# sourceMappingURL=captcha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../src/captcha.tsx"],"names":[],"mappings":"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"}
@@ -28,5 +28,7 @@ export type { ProfilePageProps, ProfileLinkProps } from './account';
28
28
  export { ActiveSessions, ProfileCard, ManageMfa, ManagePasskeys, UserProfile, } from './account';
29
29
  export { useWaitlist, Waitlist } from './waitlist';
30
30
  export { useReverification } from './reverification';
31
+ export type { ApiKeysProps, ApiKeysStatus, ApiKeyClaimsFieldsContext, UseApiKeysResult, CreateUserApiKeyInput, CreatedUserApiKey, UserApiKey, } from './api-keys';
32
+ export { ApiKeys, useApiKeys } from './api-keys';
31
33
  export type { CheckoutParams } from './billing';
32
34
  export { useBilling, useCheckout, useSubscription, useInvoices, usePaymentMethods, PricingTable, Invoices, EmbeddedCheckout, } from './billing';