@ankhorage/studio 0.2.0 → 0.3.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
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/studio
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v0.1.6](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v0.2.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
7
7
 
8
8
  Standalone Studio authoring package for Ankhorage apps.
9
9
 
@@ -0,0 +1,70 @@
1
+ import type { AuthOAuthProviderId } from '@ankhorage/contracts';
2
+ import type { SecretMetadata, SecretPayload } from '@ankhorage/contracts/secrets';
3
+ export interface ProjectSecretCreateInput {
4
+ readonly projectId: string;
5
+ readonly environment?: string;
6
+ readonly ref: string;
7
+ readonly kind: string;
8
+ readonly provider?: string;
9
+ readonly payload: SecretPayload;
10
+ }
11
+ export interface ProjectSecretReplaceInput {
12
+ readonly projectId: string;
13
+ readonly environment?: string;
14
+ readonly ref: string;
15
+ readonly payload: SecretPayload;
16
+ }
17
+ export interface ProjectSecretRemoveInput {
18
+ readonly projectId: string;
19
+ readonly environment?: string;
20
+ readonly ref: string;
21
+ }
22
+ export interface ConfigureProjectOAuthProviderInput {
23
+ readonly projectId: string;
24
+ readonly providerId: AuthOAuthProviderId;
25
+ readonly environment?: string;
26
+ readonly credentialsRef?: string;
27
+ readonly enabled?: boolean;
28
+ readonly label?: string;
29
+ readonly scopes?: readonly string[];
30
+ readonly callbackRoute?: string;
31
+ readonly payload: SecretPayload;
32
+ }
33
+ export type ConfigureProjectOAuthProviderResponse = {
34
+ readonly ok: true;
35
+ readonly state: 'saved';
36
+ readonly metadata: SecretMetadata;
37
+ readonly credentialsRef: string;
38
+ } | {
39
+ readonly ok: false;
40
+ readonly state: 'secret_write_failed' | 'secret_saved_manifest_failed';
41
+ readonly error: {
42
+ readonly code: string;
43
+ readonly message: string;
44
+ };
45
+ readonly metadata?: SecretMetadata;
46
+ readonly credentialsRef?: string;
47
+ };
48
+ export declare class ProjectSecretApiError extends Error {
49
+ readonly code: string;
50
+ readonly status: number;
51
+ constructor(args: {
52
+ readonly code: string;
53
+ readonly message: string;
54
+ readonly status: number;
55
+ });
56
+ }
57
+ export declare function listProjectSecrets(input: {
58
+ readonly projectId: string;
59
+ readonly environment?: string;
60
+ readonly kind?: string;
61
+ readonly provider?: string;
62
+ }): Promise<readonly SecretMetadata[]>;
63
+ export declare function createProjectSecret(input: ProjectSecretCreateInput): Promise<SecretMetadata>;
64
+ export declare function replaceProjectSecret(input: ProjectSecretReplaceInput): Promise<SecretMetadata>;
65
+ export declare function removeProjectSecret(input: ProjectSecretRemoveInput): Promise<void>;
66
+ export declare function configureProjectOAuthProvider(input: ConfigureProjectOAuthProviderInput): Promise<ConfigureProjectOAuthProviderResponse>;
67
+ export declare function parseProjectSecretListResponse(value: unknown): readonly SecretMetadata[];
68
+ export declare function parseProjectSecretMetadataResponse(value: unknown): SecretMetadata;
69
+ export declare function parseConfigureProjectOAuthProviderResponse(value: unknown): ConfigureProjectOAuthProviderResponse;
70
+ //# sourceMappingURL=projectSecretApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectSecretApi.d.ts","sourceRoot":"","sources":["../src/projectSecretApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ const FORBIDDEN_SECRET_RESPONSE_KEYS = new Set([
2
+ 'clientSecret',
3
+ 'payload',
4
+ 'privateKey',
5
+ 'rawValue',
6
+ 'secret',
7
+ 'secretValue',
8
+ 'token',
9
+ 'value',
10
+ ]);
11
+ export class ProjectSecretApiError extends Error {
12
+ code;
13
+ status;
14
+ constructor(args) {
15
+ super(args.message);
16
+ this.name = 'ProjectSecretApiError';
17
+ this.code = args.code;
18
+ this.status = args.status;
19
+ }
20
+ }
21
+ export async function listProjectSecrets(input) {
22
+ const query = createQuery({
23
+ environment: input.environment,
24
+ kind: input.kind,
25
+ provider: input.provider,
26
+ });
27
+ const value = await requestJson(`/projects/${encodeURIComponent(input.projectId)}/secrets${query}`);
28
+ return parseProjectSecretListResponse(value);
29
+ }
30
+ export async function createProjectSecret(input) {
31
+ const value = await requestJson(`/projects/${encodeURIComponent(input.projectId)}/secrets`, {
32
+ method: 'POST',
33
+ headers: { 'Content-Type': 'application/json' },
34
+ body: JSON.stringify({
35
+ environment: input.environment,
36
+ ref: input.ref,
37
+ kind: input.kind,
38
+ provider: input.provider,
39
+ payload: input.payload,
40
+ }),
41
+ });
42
+ return parseProjectSecretMetadataResponse(value);
43
+ }
44
+ export async function replaceProjectSecret(input) {
45
+ const value = await requestJson(`/projects/${encodeURIComponent(input.projectId)}/secrets`, {
46
+ method: 'PUT',
47
+ headers: { 'Content-Type': 'application/json' },
48
+ body: JSON.stringify({
49
+ environment: input.environment,
50
+ ref: input.ref,
51
+ payload: input.payload,
52
+ }),
53
+ });
54
+ return parseProjectSecretMetadataResponse(value);
55
+ }
56
+ export async function removeProjectSecret(input) {
57
+ const query = createQuery({ environment: input.environment, ref: input.ref });
58
+ const value = await requestJson(`/projects/${encodeURIComponent(input.projectId)}/secrets${query}`, { method: 'DELETE' });
59
+ parseProjectSecretRemoveResponse(value);
60
+ }
61
+ export async function configureProjectOAuthProvider(input) {
62
+ const value = await requestJson(`/projects/${encodeURIComponent(input.projectId)}/auth/oauth/${encodeURIComponent(input.providerId)}`, {
63
+ method: 'POST',
64
+ headers: { 'Content-Type': 'application/json' },
65
+ body: JSON.stringify({
66
+ environment: input.environment,
67
+ credentialsRef: input.credentialsRef,
68
+ enabled: input.enabled,
69
+ label: input.label,
70
+ scopes: input.scopes,
71
+ callbackRoute: input.callbackRoute,
72
+ payload: input.payload,
73
+ }),
74
+ }, true);
75
+ return parseConfigureProjectOAuthProviderResponse(value);
76
+ }
77
+ export function parseProjectSecretListResponse(value) {
78
+ const result = readResult(value);
79
+ if (!result.ok || !Array.isArray(result.data)) {
80
+ throw createInvalidResponseError('Secret list response was invalid.');
81
+ }
82
+ return result.data.map(parseSecretMetadata);
83
+ }
84
+ export function parseProjectSecretMetadataResponse(value) {
85
+ const result = readResult(value);
86
+ if (!result.ok) {
87
+ throw createInvalidResponseError('Secret metadata response was invalid.');
88
+ }
89
+ return parseSecretMetadata(result.data);
90
+ }
91
+ function parseProjectSecretRemoveResponse(value) {
92
+ const result = readResult(value);
93
+ if (!result.ok) {
94
+ throw createInvalidResponseError('Secret removal response was invalid.');
95
+ }
96
+ }
97
+ export function parseConfigureProjectOAuthProviderResponse(value) {
98
+ const record = asRecord(value);
99
+ if (record === null || typeof record.ok !== 'boolean') {
100
+ throw createInvalidResponseError('OAuth configuration response was invalid.');
101
+ }
102
+ if (record.ok) {
103
+ if (record.state !== 'saved' || typeof record.credentialsRef !== 'string') {
104
+ throw createInvalidResponseError('OAuth configuration response was invalid.');
105
+ }
106
+ return {
107
+ ok: true,
108
+ state: 'saved',
109
+ metadata: parseSecretMetadata(record.metadata),
110
+ credentialsRef: record.credentialsRef,
111
+ };
112
+ }
113
+ if (record.state !== 'secret_write_failed' && record.state !== 'secret_saved_manifest_failed') {
114
+ throw createInvalidResponseError('OAuth configuration response was invalid.');
115
+ }
116
+ return {
117
+ ok: false,
118
+ state: record.state,
119
+ error: parseError(record.error),
120
+ ...(record.metadata === undefined ? {} : { metadata: parseSecretMetadata(record.metadata) }),
121
+ ...(typeof record.credentialsRef === 'string' ? { credentialsRef: record.credentialsRef } : {}),
122
+ };
123
+ }
124
+ async function requestJson(path, init, allowStructuredFailure = false) {
125
+ const { API_BASE } = await import('./core/constants');
126
+ const response = await fetch(`${API_BASE}${path}`, init);
127
+ const value = await readJson(response);
128
+ if (!response.ok && !allowStructuredFailure) {
129
+ throw parseHttpError(value, response.status);
130
+ }
131
+ if (!response.ok && allowStructuredFailure) {
132
+ const record = asRecord(value);
133
+ if (record?.ok !== false) {
134
+ throw parseHttpError(value, response.status);
135
+ }
136
+ }
137
+ return value;
138
+ }
139
+ async function readJson(response) {
140
+ try {
141
+ return await response.json();
142
+ }
143
+ catch {
144
+ throw new ProjectSecretApiError({
145
+ code: 'invalid_response',
146
+ message: 'The Studio host returned a non-JSON secret response.',
147
+ status: response.status,
148
+ });
149
+ }
150
+ }
151
+ function parseHttpError(value, status) {
152
+ const record = asRecord(value);
153
+ const errorRecord = asRecord(record?.error);
154
+ const code = typeof errorRecord?.code === 'string'
155
+ ? errorRecord.code
156
+ : typeof record?.code === 'string'
157
+ ? record.code
158
+ : 'request_failed';
159
+ const message = typeof errorRecord?.message === 'string'
160
+ ? errorRecord.message
161
+ : typeof record?.error === 'string'
162
+ ? record.error
163
+ : 'The Studio secret request failed.';
164
+ return new ProjectSecretApiError({ code, message, status });
165
+ }
166
+ function readResult(value) {
167
+ const record = asRecord(value);
168
+ if (record === null || typeof record.ok !== 'boolean') {
169
+ throw createInvalidResponseError('Secret-store response was invalid.');
170
+ }
171
+ return { ok: record.ok, data: record.data };
172
+ }
173
+ function parseSecretMetadata(value) {
174
+ const record = asRecord(value);
175
+ if (record === null) {
176
+ throw createInvalidResponseError('Secret metadata was invalid.');
177
+ }
178
+ for (const key of Object.keys(record)) {
179
+ if (FORBIDDEN_SECRET_RESPONSE_KEYS.has(key)) {
180
+ throw createInvalidResponseError('Secret response unexpectedly contained a raw value field.');
181
+ }
182
+ }
183
+ const scope = asRecord(record.scope);
184
+ if (typeof record.ref !== 'string' ||
185
+ scope === null ||
186
+ typeof scope.projectId !== 'string' ||
187
+ typeof scope.environment !== 'string' ||
188
+ typeof record.kind !== 'string' ||
189
+ (record.provider !== undefined && typeof record.provider !== 'string') ||
190
+ !isStringArray(record.configuredFields) ||
191
+ typeof record.createdAt !== 'string' ||
192
+ typeof record.updatedAt !== 'string') {
193
+ throw createInvalidResponseError('Secret metadata was invalid.');
194
+ }
195
+ return {
196
+ ref: record.ref,
197
+ scope: { projectId: scope.projectId, environment: scope.environment },
198
+ kind: record.kind,
199
+ ...(typeof record.provider === 'string' ? { provider: record.provider } : {}),
200
+ configuredFields: [...record.configuredFields],
201
+ createdAt: record.createdAt,
202
+ updatedAt: record.updatedAt,
203
+ };
204
+ }
205
+ function parseError(value) {
206
+ const record = asRecord(value);
207
+ if (record === null || typeof record.code !== 'string' || typeof record.message !== 'string') {
208
+ throw createInvalidResponseError('Secret error response was invalid.');
209
+ }
210
+ return { code: record.code, message: record.message };
211
+ }
212
+ function createQuery(values) {
213
+ const params = new URLSearchParams();
214
+ for (const [key, value] of Object.entries(values)) {
215
+ const normalized = value?.trim();
216
+ if (normalized)
217
+ params.set(key, normalized);
218
+ }
219
+ const query = params.toString();
220
+ return query ? `?${query}` : '';
221
+ }
222
+ function asRecord(value) {
223
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
224
+ ? value
225
+ : null;
226
+ }
227
+ function isStringArray(value) {
228
+ return Array.isArray(value) && value.every((entry) => typeof entry === 'string');
229
+ }
230
+ function createInvalidResponseError(message) {
231
+ return new ProjectSecretApiError({ code: 'invalid_response', message, status: 502 });
232
+ }
233
+ //# sourceMappingURL=projectSecretApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectSecretApi.js","sourceRoot":"","sources":["../src/projectSecretApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { AppManifest } from '@ankhorage/contracts';
2
+ import React from 'react';
3
+ export type StudioPhase2AdminRoute = '/ankh/auth' | '/ankh/secrets';
4
+ export interface StudioAdminOverlayProps {
5
+ readonly route: StudioPhase2AdminRoute;
6
+ readonly projectId: string;
7
+ readonly manifest: AppManifest | null;
8
+ readonly onClose: () => void;
9
+ }
10
+ export declare function StudioAdminOverlay(props: StudioAdminOverlayProps): React.JSX.Element;
11
+ //# sourceMappingURL=StudioAdminOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StudioAdminOverlay.d.ts","sourceRoot":"","sources":["../../src/ui/StudioAdminOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAQ7E,OAAO,KAAoD,MAAM,OAAO,CAAC;AAsBzE,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,eAAe,CAAC;AAEpE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAcD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,qBAqChE"}
@@ -0,0 +1,359 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getSupabaseOAuthProviderDefinition, SUPABASE_OAUTH_PROVIDER_IDS, } from '@ankhorage/supabase-auth';
3
+ import { Heading, IconButton, Text, useZoraTheme } from '@ankhorage/zora';
4
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
5
+ import { ActivityIndicator, Alert, Pressable, ScrollView, StyleSheet, Switch, TextInput, View, } from 'react-native';
6
+ import { SafeAreaView } from 'react-native-safe-area-context';
7
+ import { configureProjectOAuthProvider, createProjectSecret, listProjectSecrets, ProjectSecretApiError, removeProjectSecret, replaceProjectSecret, } from '../projectSecretApi';
8
+ let nextFieldId = 1;
9
+ function createField(name = '') {
10
+ return { id: nextFieldId++, name, value: '' };
11
+ }
12
+ export function StudioAdminOverlay(props) {
13
+ const { route, projectId, manifest, onClose } = props;
14
+ const { theme } = useZoraTheme();
15
+ const authRoute = route === '/ankh/auth';
16
+ return (_jsxs(SafeAreaView, { style: [
17
+ styles.overlay,
18
+ { backgroundColor: theme.colors.background, borderColor: theme.colors.border },
19
+ ], children: [_jsxs(View, { style: [styles.header, { borderBottomColor: theme.colors.border }], children: [_jsxs(View, { style: styles.grow, children: [_jsx(Heading, { level: 2, text: authRoute ? 'Authentication' : 'Project secrets' }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: authRoute
20
+ ? 'Configure OAuth providers without exposing stored credentials.'
21
+ : 'Create, rotate, and explicitly remove server-side project secrets.' })] }), _jsx(IconButton, { icon: { name: 'close-outline' }, label: "Close administration", color: "neutral", variant: "ghost", onPress: onClose })] }), authRoute ? (_jsx(AuthAdmin, { projectId: projectId, manifest: manifest })) : (_jsx(SecretsAdmin, { projectId: projectId }))] }));
22
+ }
23
+ function SecretsAdmin({ projectId }) {
24
+ const inventory = useSecretInventory(projectId);
25
+ const [environment, setEnvironment] = useState('local');
26
+ const [ref, setRef] = useState('');
27
+ const [kind, setKind] = useState('api-key');
28
+ const [provider, setProvider] = useState('');
29
+ const [fields, setFields] = useState([createField('value')]);
30
+ const [replaceTarget, setReplaceTarget] = useState(null);
31
+ const [message, setMessage] = useState(null);
32
+ const [saving, setSaving] = useState(false);
33
+ const resetDraft = useCallback(() => {
34
+ setRef('');
35
+ setKind('api-key');
36
+ setProvider('');
37
+ setFields([createField('value')]);
38
+ setReplaceTarget(null);
39
+ }, []);
40
+ const updateField = useCallback((id, patch) => {
41
+ setFields((current) => current.map((field) => (field.id === id ? { ...field, ...patch } : field)));
42
+ }, []);
43
+ const beginRotation = useCallback((metadata) => {
44
+ setReplaceTarget(metadata);
45
+ setEnvironment(metadata.scope.environment);
46
+ setRef(metadata.ref);
47
+ setKind(metadata.kind);
48
+ setProvider(metadata.provider ?? '');
49
+ setFields(metadata.configuredFields.length > 0
50
+ ? metadata.configuredFields.map((name) => createField(name))
51
+ : [createField('value')]);
52
+ setMessage('Enter every field again. Rotation never merges browser-visible old values.');
53
+ }, []);
54
+ const save = useCallback(async () => {
55
+ const entries = fields.map((field) => [field.name.trim(), field.value]);
56
+ if (!ref.trim() || !kind.trim() || entries.some(([name, value]) => !name || !value)) {
57
+ setMessage('Reference, kind, field names, and all values are required.');
58
+ return;
59
+ }
60
+ setSaving(true);
61
+ setMessage(null);
62
+ try {
63
+ const payload = Object.freeze(Object.fromEntries(entries));
64
+ if (replaceTarget) {
65
+ await replaceProjectSecret({
66
+ projectId,
67
+ environment,
68
+ ref: replaceTarget.ref,
69
+ payload,
70
+ });
71
+ setMessage(`Rotated ${replaceTarget.ref}. No stored value was returned.`);
72
+ }
73
+ else {
74
+ await createProjectSecret({
75
+ projectId,
76
+ environment,
77
+ ref,
78
+ kind,
79
+ provider: provider.trim() || undefined,
80
+ payload,
81
+ });
82
+ setMessage(`Created ${ref.trim()}. Stored values cannot be viewed after save.`);
83
+ }
84
+ await inventory.refresh();
85
+ resetDraft();
86
+ }
87
+ catch (error) {
88
+ setMessage(toMessage(error));
89
+ }
90
+ finally {
91
+ setFields((current) => current.map((field) => ({ ...field, value: '' })));
92
+ setSaving(false);
93
+ }
94
+ }, [environment, fields, inventory, kind, projectId, provider, ref, replaceTarget, resetDraft]);
95
+ const confirmRemove = useCallback((metadata) => {
96
+ Alert.alert('Remove secret', `Remove ${metadata.ref}? Manifest references are not changed automatically.`, [
97
+ { text: 'Cancel', style: 'cancel' },
98
+ {
99
+ text: 'Remove',
100
+ style: 'destructive',
101
+ onPress: () => {
102
+ void removeProjectSecret({
103
+ projectId,
104
+ environment: metadata.scope.environment,
105
+ ref: metadata.ref,
106
+ })
107
+ .then(inventory.refresh)
108
+ .then(() => setMessage(`Removed ${metadata.ref}.`))
109
+ .catch((error) => setMessage(toMessage(error)));
110
+ },
111
+ },
112
+ ]);
113
+ }, [inventory.refresh, projectId]);
114
+ return (_jsxs(ScrollView, { contentContainerStyle: styles.content, keyboardShouldPersistTaps: "handled", children: [_jsxs(Card, { title: replaceTarget ? 'Rotate secret' : 'Create secret', children: [_jsx(Field, { label: "Environment", children: _jsx(Input, { value: environment, onChangeText: setEnvironment }) }), _jsx(Field, { label: "Logical reference", children: _jsx(Input, { value: ref, editable: !replaceTarget, autoCapitalize: "none", placeholder: "services/example", onChangeText: setRef }) }), _jsxs(View, { style: styles.columns, children: [_jsx(View, { style: styles.column, children: _jsx(Field, { label: "Kind", children: _jsx(Input, { value: kind, editable: !replaceTarget, onChangeText: setKind }) }) }), _jsx(View, { style: styles.column, children: _jsx(Field, { label: "Provider (optional)", children: _jsx(Input, { value: provider, editable: !replaceTarget, onChangeText: setProvider }) }) })] }), _jsx(Text, { weight: "semiBold", children: "Complete payload" }), fields.map((field) => (_jsxs(View, { style: styles.payloadRow, children: [_jsx(View, { style: styles.payloadName, children: _jsx(Input, { value: field.name, editable: !replaceTarget, autoCapitalize: "none", placeholder: "fieldName", onChangeText: (name) => updateField(field.id, { name }) }) }), _jsx(View, { style: styles.grow, children: _jsx(Input, { value: field.value, secureTextEntry: true, autoCapitalize: "none", placeholder: "New value", onChangeText: (value) => updateField(field.id, { value }) }) }), _jsx(IconButton, { icon: { name: 'remove-circle-outline' }, label: "Remove field", color: "danger", variant: "ghost", disabled: replaceTarget !== null || fields.length === 1, onPress: () => setFields((current) => current.filter((candidate) => candidate.id !== field.id)) })] }, field.id))), _jsxs(View, { style: styles.actions, children: [!replaceTarget ? (_jsx(SecondaryButton, { label: "Add field", onPress: () => setFields((current) => [...current, createField()]) })) : (_jsx(SecondaryButton, { label: "Cancel rotation", onPress: resetDraft })), _jsx(PrimaryButton, { label: replaceTarget ? 'Rotate secret' : 'Create secret', loading: saving, onPress: () => void save() })] }), message ? _jsx(Message, { text: message }) : null] }), _jsxs(Card, { title: "Secret inventory", children: [_jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "Only metadata and configured field names are available to the browser." }), inventory.loading ? _jsx(ActivityIndicator, {}) : null, inventory.error ? _jsx(Message, { text: inventory.error }) : null, inventory.items.map((metadata) => (_jsx(InventoryRow, { metadata: metadata, onRotate: () => beginRotation(metadata), onRemove: () => confirmRemove(metadata) }, `${metadata.scope.environment}:${metadata.ref}`))), !inventory.loading && inventory.items.length === 0 ? (_jsx(Text, { color: "neutral", emphasis: "muted", children: "No local project secrets configured." })) : null] })] }));
115
+ }
116
+ function AuthAdmin(props) {
117
+ const { projectId, manifest } = props;
118
+ const inventory = useSecretInventory(projectId);
119
+ const [providerId, setProviderId] = useState('google');
120
+ const [enabled, setEnabled] = useState(true);
121
+ const [label, setLabel] = useState('Google');
122
+ const [scopes, setScopes] = useState('openid, email, profile');
123
+ const [callbackRoute, setCallbackRoute] = useState('/auth/callback');
124
+ const [values, setValues] = useState({});
125
+ const [message, setMessage] = useState(null);
126
+ const [saving, setSaving] = useState(false);
127
+ const definition = getSupabaseOAuthProviderDefinition(providerId);
128
+ const providerConfig = manifest?.infra.auth?.oauth?.providers.find((provider) => provider.id === providerId);
129
+ const credentialsRef = providerConfig?.credentialsRef ?? `auth/oauth/${providerId}`;
130
+ const metadata = inventory.items.find((item) => item.ref === credentialsRef);
131
+ const requiredFields = definition?.secretFields.map((field) => field.name) ?? [];
132
+ const configured = metadata !== undefined &&
133
+ requiredFields.every((name) => metadata.configuredFields.includes(name));
134
+ useEffect(() => {
135
+ const currentDefinition = getSupabaseOAuthProviderDefinition(providerId);
136
+ const currentConfig = manifest?.infra.auth?.oauth?.providers.find((provider) => provider.id === providerId);
137
+ setEnabled(currentConfig?.enabled ?? true);
138
+ setLabel(currentConfig?.label ?? currentDefinition?.label ?? providerId);
139
+ setScopes((currentConfig?.scopes ?? currentDefinition?.defaultScopes ?? []).join(', '));
140
+ setCallbackRoute(manifest?.infra.auth?.oauth?.callbackRoute ?? '/auth/callback');
141
+ setValues({});
142
+ setMessage(null);
143
+ }, [manifest, providerId]);
144
+ const save = useCallback(async () => {
145
+ if (!definition) {
146
+ setMessage('The selected OAuth provider is not supported.');
147
+ return;
148
+ }
149
+ const entries = definition.secretFields.map((field) => [field.name, values[field.name] ?? '']);
150
+ if (entries.some(([, value]) => !value)) {
151
+ setMessage('Enter a complete credential payload. Existing values cannot be merged.');
152
+ return;
153
+ }
154
+ setSaving(true);
155
+ setMessage(null);
156
+ try {
157
+ const result = await configureProjectOAuthProvider({
158
+ projectId,
159
+ providerId: providerId,
160
+ environment: 'local',
161
+ credentialsRef,
162
+ enabled,
163
+ label,
164
+ scopes: scopes
165
+ .split(',')
166
+ .map((scope) => scope.trim())
167
+ .filter(Boolean),
168
+ callbackRoute,
169
+ payload: Object.freeze(Object.fromEntries(entries)),
170
+ });
171
+ setMessage(result.ok
172
+ ? `${definition.label} credentials saved through ${result.credentialsRef}.`
173
+ : result.error.message);
174
+ await inventory.refresh();
175
+ }
176
+ catch (error) {
177
+ setMessage(toMessage(error));
178
+ }
179
+ finally {
180
+ setValues({});
181
+ setSaving(false);
182
+ }
183
+ }, [
184
+ callbackRoute,
185
+ credentialsRef,
186
+ definition,
187
+ enabled,
188
+ inventory,
189
+ label,
190
+ projectId,
191
+ providerId,
192
+ scopes,
193
+ values,
194
+ ]);
195
+ return (_jsxs(ScrollView, { contentContainerStyle: styles.content, keyboardShouldPersistTaps: "handled", children: [_jsxs(Card, { title: "Authentication overview", children: [_jsx(KeyValue, { label: "Provider", value: manifest?.infra.auth?.provider ?? 'Not configured' }), _jsx(KeyValue, { label: "Sign-in identifiers", value: (manifest?.infra.auth?.signIn?.identifiers ?? ['email']).join(', ') }), _jsx(KeyValue, { label: "Sign-in route", value: manifest?.infra.auth?.flow?.signInRoute ?? 'Canonical default' }), _jsx(KeyValue, { label: "Profile table", value: manifest?.infra.auth?.profile?.table ?? 'Not configured' })] }), _jsxs(Card, { title: "OAuth provider credentials", children: [_jsx(View, { style: styles.providerTabs, children: SUPABASE_OAUTH_PROVIDER_IDS.map((id) => (_jsx(ProviderTab, { id: id, selected: id === providerId, configured: inventory.items.some((item) => item.ref === `auth/oauth/${id}`), onPress: () => setProviderId(id) }, id))) }), _jsxs(View, { style: styles.switchRow, children: [_jsxs(View, { style: styles.grow, children: [_jsxs(Text, { weight: "semiBold", children: ["Enable ", definition?.label ?? providerId] }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: "Disabling does not delete the stored secret." })] }), _jsx(Switch, { value: enabled, onValueChange: setEnabled })] }), _jsx(Field, { label: "Label", children: _jsx(Input, { value: label, onChangeText: setLabel }) }), _jsx(Field, { label: "Callback route", children: _jsx(Input, { value: callbackRoute, autoCapitalize: "none", onChangeText: setCallbackRoute }) }), _jsx(Field, { label: "Scopes (comma-separated)", children: _jsx(Input, { value: scopes, autoCapitalize: "none", onChangeText: setScopes }) }), _jsx(Text, { color: configured ? 'success' : 'warning', variant: "bodySmall", children: configured
196
+ ? `Configured fields: ${metadata?.configuredFields.join(', ')}`
197
+ : `Required fields: ${requiredFields.join(', ')}` }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: "Existing values are never loaded. Saving always performs a complete replacement." }), definition?.secretFields.map((field) => (_jsx(Field, { label: field.label, children: _jsx(Input, { value: values[field.name] ?? '', secureTextEntry: field.secret, autoCapitalize: "none", placeholder: configured ? 'Enter complete replacement value' : field.label, onChangeText: (value) => setValues((current) => ({ ...current, [field.name]: value })) }) }, field.name))), _jsx(View, { style: styles.actions, children: _jsx(PrimaryButton, { label: configured ? 'Replace credentials' : 'Save provider', loading: saving, onPress: () => void save() }) }), inventory.error ? _jsx(Message, { text: inventory.error }) : null, message ? _jsx(Message, { text: message }) : null] })] }));
198
+ }
199
+ function useSecretInventory(projectId) {
200
+ const [items, setItems] = useState([]);
201
+ const [loading, setLoading] = useState(true);
202
+ const [error, setError] = useState(null);
203
+ const refresh = useCallback(async () => {
204
+ setLoading(true);
205
+ try {
206
+ setItems(await listProjectSecrets({ projectId, environment: 'local' }));
207
+ setError(null);
208
+ }
209
+ catch (caught) {
210
+ setError(toMessage(caught));
211
+ }
212
+ finally {
213
+ setLoading(false);
214
+ }
215
+ }, [projectId]);
216
+ useEffect(() => {
217
+ void refresh();
218
+ }, [refresh]);
219
+ return useMemo(() => ({ items, loading, error, refresh }), [error, items, loading, refresh]);
220
+ }
221
+ function Card(props) {
222
+ const { theme } = useZoraTheme();
223
+ return (_jsxs(View, { style: [
224
+ styles.card,
225
+ { backgroundColor: theme.colors.surface, borderColor: theme.colors.border },
226
+ ], children: [_jsx(Heading, { level: 3, text: props.title }), props.children] }));
227
+ }
228
+ function Field(props) {
229
+ return (_jsxs(View, { style: styles.field, children: [_jsx(Text, { variant: "bodySmall", weight: "semiBold", children: props.label }), props.children] }));
230
+ }
231
+ function Input(props) {
232
+ const { theme } = useZoraTheme();
233
+ return (_jsx(TextInput, { ...props, placeholderTextColor: theme.colors.textMuted, style: [
234
+ styles.input,
235
+ {
236
+ color: theme.colors.text,
237
+ backgroundColor: theme.colors.background,
238
+ borderColor: theme.colors.border,
239
+ },
240
+ props.style,
241
+ ] }));
242
+ }
243
+ function InventoryRow(props) {
244
+ const { theme } = useZoraTheme();
245
+ const { metadata } = props;
246
+ return (_jsxs(View, { style: [styles.inventoryRow, { borderColor: theme.colors.border }], children: [_jsxs(View, { style: styles.grow, children: [_jsx(Text, { weight: "semiBold", children: metadata.ref }), _jsxs(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: [metadata.scope.environment, " \u00B7 ", metadata.kind, metadata.provider ? ` · ${metadata.provider}` : ''] }), _jsxs(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: ["Fields: ", metadata.configuredFields.join(', ') || 'none'] })] }), _jsxs(View, { style: styles.rowActions, children: [_jsx(SecondaryButton, { label: "Rotate", compact: true, onPress: props.onRotate }), _jsx(SecondaryButton, { label: "Remove", compact: true, danger: true, onPress: props.onRemove })] })] }));
247
+ }
248
+ function ProviderTab(props) {
249
+ const { theme } = useZoraTheme();
250
+ const definition = getSupabaseOAuthProviderDefinition(props.id);
251
+ return (_jsxs(Pressable, { onPress: props.onPress, style: [
252
+ styles.providerTab,
253
+ { borderColor: props.selected ? theme.colors.primary : theme.colors.border },
254
+ ], children: [_jsx(Text, { weight: "semiBold", children: definition?.label ?? props.id }), _jsx(Text, { color: props.configured ? 'success' : 'neutral', emphasis: "muted", variant: "caption", children: props.configured ? 'Configured' : 'Not configured' })] }));
255
+ }
256
+ function PrimaryButton(props) {
257
+ const { theme } = useZoraTheme();
258
+ return (_jsx(Pressable, { disabled: props.loading, onPress: props.onPress, style: [styles.primaryButton, { backgroundColor: theme.colors.primary }], children: props.loading ? (_jsx(ActivityIndicator, { color: "#ffffff" })) : (_jsx(Text, { emphasis: "inverse", weight: "semiBold", children: props.label })) }));
259
+ }
260
+ function SecondaryButton(props) {
261
+ const { theme } = useZoraTheme();
262
+ return (_jsx(Pressable, { onPress: props.onPress, style: [
263
+ styles.secondaryButton,
264
+ props.compact ? styles.compactButton : null,
265
+ { borderColor: theme.colors.border },
266
+ ], children: _jsx(Text, { color: props.danger ? 'danger' : 'neutral', variant: "bodySmall", weight: "semiBold", children: props.label }) }));
267
+ }
268
+ function KeyValue(props) {
269
+ return (_jsxs(View, { style: styles.keyValue, children: [_jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: props.label }), _jsx(Text, { align: "right", variant: "bodySmall", weight: "semiBold", children: props.value })] }));
270
+ }
271
+ function Message({ text }) {
272
+ const { theme } = useZoraTheme();
273
+ return (_jsx(View, { style: [styles.message, { borderColor: theme.colors.border }], children: _jsx(Text, { variant: "bodySmall", children: text }) }));
274
+ }
275
+ function toMessage(error) {
276
+ if (error instanceof ProjectSecretApiError || error instanceof Error)
277
+ return error.message;
278
+ return 'The Studio secret operation failed.';
279
+ }
280
+ const styles = StyleSheet.create({
281
+ overlay: {
282
+ ...StyleSheet.absoluteFillObject,
283
+ zIndex: 1000,
284
+ elevation: 24,
285
+ borderWidth: 1,
286
+ },
287
+ header: {
288
+ minHeight: 76,
289
+ paddingHorizontal: 20,
290
+ paddingVertical: 12,
291
+ borderBottomWidth: 1,
292
+ flexDirection: 'row',
293
+ alignItems: 'center',
294
+ gap: 16,
295
+ },
296
+ content: {
297
+ width: '100%',
298
+ maxWidth: 1040,
299
+ alignSelf: 'center',
300
+ padding: 20,
301
+ paddingBottom: 48,
302
+ gap: 20,
303
+ },
304
+ card: {
305
+ borderWidth: 1,
306
+ borderRadius: 14,
307
+ padding: 18,
308
+ gap: 14,
309
+ },
310
+ field: { gap: 6 },
311
+ input: {
312
+ minHeight: 44,
313
+ borderWidth: 1,
314
+ borderRadius: 9,
315
+ paddingHorizontal: 12,
316
+ paddingVertical: 10,
317
+ },
318
+ columns: { flexDirection: 'row', flexWrap: 'wrap', gap: 12 },
319
+ column: { flex: 1, minWidth: 220 },
320
+ payloadRow: { flexDirection: 'row', alignItems: 'center', gap: 8 },
321
+ payloadName: { width: 180 },
322
+ grow: { flex: 1 },
323
+ actions: { flexDirection: 'row', flexWrap: 'wrap', justifyContent: 'flex-end', gap: 10 },
324
+ primaryButton: {
325
+ minHeight: 42,
326
+ minWidth: 140,
327
+ borderRadius: 9,
328
+ paddingHorizontal: 16,
329
+ paddingVertical: 10,
330
+ alignItems: 'center',
331
+ justifyContent: 'center',
332
+ },
333
+ secondaryButton: {
334
+ minHeight: 42,
335
+ borderWidth: 1,
336
+ borderRadius: 9,
337
+ paddingHorizontal: 14,
338
+ paddingVertical: 10,
339
+ alignItems: 'center',
340
+ justifyContent: 'center',
341
+ },
342
+ compactButton: { minHeight: 34, paddingHorizontal: 10, paddingVertical: 6 },
343
+ message: { borderWidth: 1, borderRadius: 9, padding: 12 },
344
+ inventoryRow: {
345
+ borderWidth: 1,
346
+ borderRadius: 10,
347
+ padding: 12,
348
+ flexDirection: 'row',
349
+ flexWrap: 'wrap',
350
+ alignItems: 'center',
351
+ gap: 12,
352
+ },
353
+ rowActions: { flexDirection: 'row', gap: 8 },
354
+ providerTabs: { flexDirection: 'row', flexWrap: 'wrap', gap: 10 },
355
+ providerTab: { minWidth: 150, borderWidth: 1, borderRadius: 10, padding: 12, gap: 3 },
356
+ switchRow: { flexDirection: 'row', alignItems: 'center', gap: 16 },
357
+ keyValue: { flexDirection: 'row', justifyContent: 'space-between', gap: 16 },
358
+ });
359
+ //# sourceMappingURL=StudioAdminOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StudioAdminOverlay.js","sourceRoot":"","sources":["../../src/ui/StudioAdminOverlay.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type React from 'react';
1
+ import React from 'react';
2
2
  export interface StudioAppBarAugmentation {
3
3
  appMode?: unknown;
4
4
  actions?: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"useStudioAppBarAugmentation.d.ts","sourceRoot":"","sources":["../../src/ui/useStudioAppBarAugmentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,2BAA2B,IAAI,wBAAwB,CAEtE"}
1
+ {"version":3,"file":"useStudioAppBarAugmentation.d.ts","sourceRoot":"","sources":["../../src/ui/useStudioAppBarAugmentation.ts"],"names":[],"mappings":"AACA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAKrD,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,2BAA2B,IAAI,wBAAwB,CAgDtE"}
@@ -1,4 +1,41 @@
1
+ import { IconButton } from '@ankhorage/zora';
2
+ import React, { useCallback, useState } from 'react';
3
+ import { useStudio } from '../core/StudioContext';
4
+ import { StudioAdminOverlay } from './StudioAdminOverlay';
1
5
  export function useStudioAppBarAugmentation() {
2
- return {};
6
+ const studio = useStudio();
7
+ const [activeRoute, setActiveRoute] = useState(null);
8
+ const openRoute = useCallback((route) => {
9
+ studio.setActivePanelId(null);
10
+ setActiveRoute(route);
11
+ }, [studio]);
12
+ const closeOverlay = useCallback(() => {
13
+ setActiveRoute(null);
14
+ }, []);
15
+ const actions = React.createElement(React.Fragment, null, React.createElement(IconButton, {
16
+ icon: { name: 'shield-checkmark-outline' },
17
+ label: 'Authentication settings',
18
+ variant: 'ghost',
19
+ color: activeRoute === '/ankh/auth' ? 'primary' : 'neutral',
20
+ onPress: () => openRoute('/ankh/auth'),
21
+ }), React.createElement(IconButton, {
22
+ icon: { name: 'key-outline' },
23
+ label: 'Project secrets',
24
+ variant: 'ghost',
25
+ color: activeRoute === '/ankh/secrets' ? 'primary' : 'neutral',
26
+ onPress: () => openRoute('/ankh/secrets'),
27
+ }));
28
+ const overlay = activeRoute
29
+ ? React.createElement(StudioAdminOverlay, {
30
+ route: activeRoute,
31
+ projectId: studio.projectId,
32
+ manifest: studio.manifest,
33
+ onClose: closeOverlay,
34
+ })
35
+ : null;
36
+ return {
37
+ actions,
38
+ overlay,
39
+ };
3
40
  }
4
41
  //# sourceMappingURL=useStudioAppBarAugmentation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStudioAppBarAugmentation.js","sourceRoot":"","sources":["../../src/ui/useStudioAppBarAugmentation.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,2BAA2B;IACzC,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"useStudioAppBarAugmentation.js","sourceRoot":"","sources":["../../src/ui/useStudioAppBarAugmentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAA+B,MAAM,sBAAsB,CAAC;AASvF,MAAM,UAAU,2BAA2B;IACzC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgC,IAAI,CAAC,CAAC;IAEpF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,KAA6B,EAAE,EAAE;QAChC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9B,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,cAAc,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CACjC,KAAK,CAAC,QAAQ,EACd,IAAI,EACJ,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;QAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE;QAC1C,KAAK,EAAE,yBAAyB;QAChC,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC3D,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC;KACvC,CAAC,EACF,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;QAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;QAC7B,KAAK,EAAE,iBAAiB;QACxB,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,WAAW,KAAK,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC9D,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC;KAC1C,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,GAAG,WAAW;QACzB,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,kBAAkB,EAAE;YACtC,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,YAAY;SACtB,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IAET,OAAO;QACL,OAAO;QACP,OAAO;KAC2B,CAAC;AACvC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/studio",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Studio authoring package for Ankhorage apps",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ankhorage/studio#readme",