@ankhorage/studio 0.6.9 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/authSettings.d.ts +1 -0
- package/dist/authSettings.d.ts.map +1 -1
- package/dist/authSettings.js.map +1 -1
- package/dist/core/StudioProvider.d.ts +5 -2
- package/dist/core/StudioProvider.d.ts.map +1 -1
- package/dist/core/StudioProvider.js +212 -16
- package/dist/core/StudioProvider.js.map +1 -1
- package/dist/core/studioManifestDraftModel.d.ts +13 -0
- package/dist/core/studioManifestDraftModel.d.ts.map +1 -0
- package/dist/core/studioManifestDraftModel.js +34 -0
- package/dist/core/studioManifestDraftModel.js.map +1 -0
- package/dist/core/studioManifestPersistenceModel.d.ts +21 -0
- package/dist/core/studioManifestPersistenceModel.d.ts.map +1 -0
- package/dist/core/studioManifestPersistenceModel.js +46 -0
- package/dist/core/studioManifestPersistenceModel.js.map +1 -0
- package/dist/host/http/authRoutes.d.ts.map +1 -1
- package/dist/host/http/authRoutes.js +0 -31
- package/dist/host/http/authRoutes.js.map +1 -1
- package/dist/host/http/secretRoutes.d.ts.map +1 -1
- package/dist/host/http/secretRoutes.js +1 -24
- package/dist/host/http/secretRoutes.js.map +1 -1
- package/dist/host/index.d.ts +1 -2
- package/dist/host/index.d.ts.map +1 -1
- package/dist/host/index.js +1 -2
- package/dist/host/index.js.map +1 -1
- package/dist/host/layout/layoutGenerator.d.ts.map +1 -1
- package/dist/host/layout/layoutGenerator.js +55 -37
- package/dist/host/layout/layoutGenerator.js.map +1 -1
- package/dist/host/layout/templates/rootLayout.d.ts.map +1 -1
- package/dist/host/layout/templates/rootLayout.js +99 -15
- package/dist/host/layout/templates/rootLayout.js.map +1 -1
- package/dist/host/secrets/projectSecretService.d.ts +2 -12
- package/dist/host/secrets/projectSecretService.d.ts.map +1 -1
- package/dist/host/secrets/projectSecretService.js +1 -61
- package/dist/host/secrets/projectSecretService.js.map +1 -1
- package/dist/index.d.ts +13 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/projectAuthApi.d.ts +0 -7
- package/dist/projectAuthApi.d.ts.map +1 -1
- package/dist/projectAuthApi.js +0 -34
- package/dist/projectAuthApi.js.map +1 -1
- package/dist/projectSecretApi.d.ts +1 -8
- package/dist/projectSecretApi.d.ts.map +1 -1
- package/dist/projectSecretApi.js +1 -8
- package/dist/projectSecretApi.js.map +1 -1
- package/dist/root.d.ts +2 -0
- package/dist/root.d.ts.map +1 -1
- package/dist/root.js +2 -0
- package/dist/root.js.map +1 -1
- package/dist/studioAdminRouteModel.d.ts +43 -9
- package/dist/studioAdminRouteModel.d.ts.map +1 -1
- package/dist/studioAdminRouteModel.js +176 -11
- package/dist/studioAdminRouteModel.js.map +1 -1
- package/dist/ui/admin/AnkhAdminPage.d.ts +7 -0
- package/dist/ui/admin/AnkhAdminPage.d.ts.map +1 -0
- package/dist/ui/admin/AnkhAdminPage.js +31 -0
- package/dist/ui/admin/AnkhAdminPage.js.map +1 -0
- package/dist/ui/admin/AnkhAdminShell.d.ts +6 -0
- package/dist/ui/admin/AnkhAdminShell.d.ts.map +1 -0
- package/dist/ui/admin/AnkhAdminShell.js +87 -0
- package/dist/ui/admin/AnkhAdminShell.js.map +1 -0
- package/dist/ui/admin/AuthAdminSession.d.ts +25 -0
- package/dist/ui/admin/AuthAdminSession.d.ts.map +1 -0
- package/dist/ui/admin/AuthAdminSession.js +96 -0
- package/dist/ui/admin/AuthAdminSession.js.map +1 -0
- package/dist/ui/admin/adminPagePrimitives.d.ts +34 -0
- package/dist/ui/admin/adminPagePrimitives.d.ts.map +1 -0
- package/dist/ui/admin/adminPagePrimitives.js +69 -0
- package/dist/ui/admin/adminPagePrimitives.js.map +1 -0
- package/dist/ui/admin/adminPageUtils.d.ts +4 -0
- package/dist/ui/admin/adminPageUtils.d.ts.map +1 -0
- package/dist/ui/admin/adminPageUtils.js +14 -0
- package/dist/ui/admin/adminPageUtils.js.map +1 -0
- package/dist/ui/admin/pages/ApisAdminPage.d.ts +7 -0
- package/dist/ui/admin/pages/ApisAdminPage.d.ts.map +1 -0
- package/dist/ui/admin/pages/ApisAdminPage.js +21 -0
- package/dist/ui/admin/pages/ApisAdminPage.js.map +1 -0
- package/dist/ui/admin/pages/AuthAdminPage.d.ts +10 -0
- package/dist/ui/admin/pages/AuthAdminPage.d.ts.map +1 -0
- package/dist/ui/admin/pages/AuthAdminPage.js +596 -0
- package/dist/ui/admin/pages/AuthAdminPage.js.map +1 -0
- package/dist/ui/admin/pages/OverviewAdminPage.d.ts +3 -0
- package/dist/ui/admin/pages/OverviewAdminPage.d.ts.map +1 -0
- package/dist/ui/admin/pages/OverviewAdminPage.js +16 -0
- package/dist/ui/admin/pages/OverviewAdminPage.js.map +1 -0
- package/dist/ui/admin/pages/PropertiesAdminPage.d.ts +5 -0
- package/dist/ui/admin/pages/PropertiesAdminPage.d.ts.map +1 -0
- package/dist/ui/admin/pages/PropertiesAdminPage.js +28 -0
- package/dist/ui/admin/pages/PropertiesAdminPage.js.map +1 -0
- package/dist/ui/admin/pages/SecretsAdminPage.d.ts +5 -0
- package/dist/ui/admin/pages/SecretsAdminPage.d.ts.map +1 -0
- package/dist/ui/{StudioAdminOverlay.js → admin/pages/SecretsAdminPage.js} +57 -44
- package/dist/ui/{StudioAdminOverlay.js.map → admin/pages/SecretsAdminPage.js.map} +1 -1
- package/dist/ui/admin/pages/ThemeAdminPage.d.ts +3 -0
- package/dist/ui/admin/pages/ThemeAdminPage.d.ts.map +1 -0
- package/dist/ui/admin/pages/ThemeAdminPage.js +51 -0
- package/dist/ui/admin/pages/ThemeAdminPage.js.map +1 -0
- package/dist/ui/admin/pages/adminAuthCredentialFlow.d.ts +32 -0
- package/dist/ui/admin/pages/adminAuthCredentialFlow.d.ts.map +1 -0
- package/dist/ui/admin/pages/adminAuthCredentialFlow.js +168 -0
- package/dist/ui/admin/pages/adminAuthCredentialFlow.js.map +1 -0
- package/dist/ui/admin/pages/adminAuthHealthFlow.d.ts +18 -0
- package/dist/ui/admin/pages/adminAuthHealthFlow.d.ts.map +1 -0
- package/dist/ui/admin/pages/adminAuthHealthFlow.js +24 -0
- package/dist/ui/admin/pages/adminAuthHealthFlow.js.map +1 -0
- package/dist/ui/admin/pages/adminAuthSessionModel.d.ts +67 -0
- package/dist/ui/admin/pages/adminAuthSessionModel.d.ts.map +1 -0
- package/dist/ui/admin/pages/adminAuthSessionModel.js +176 -0
- package/dist/ui/admin/pages/adminAuthSessionModel.js.map +1 -0
- package/dist/ui/admin/pages/adminDataSourceOperations.d.ts +10 -0
- package/dist/ui/admin/pages/adminDataSourceOperations.d.ts.map +1 -0
- package/dist/ui/admin/pages/adminDataSourceOperations.js +11 -0
- package/dist/ui/admin/pages/adminDataSourceOperations.js.map +1 -0
- package/dist/ui/admin/pages/adminThemeHarmony.d.ts +4 -0
- package/dist/ui/admin/pages/adminThemeHarmony.d.ts.map +1 -0
- package/dist/ui/admin/pages/adminThemeHarmony.js +12 -0
- package/dist/ui/admin/pages/adminThemeHarmony.js.map +1 -0
- package/dist/ui/admin/pages/adminThemeModel.d.ts +22 -0
- package/dist/ui/admin/pages/adminThemeModel.d.ts.map +1 -0
- package/dist/ui/admin/pages/adminThemeModel.js +22 -0
- package/dist/ui/admin/pages/adminThemeModel.js.map +1 -0
- package/dist/ui/useStudioAppBarAugmentation.d.ts +0 -1
- package/dist/ui/useStudioAppBarAugmentation.d.ts.map +1 -1
- package/dist/ui/useStudioAppBarAugmentation.js +20 -40
- package/dist/ui/useStudioAppBarAugmentation.js.map +1 -1
- package/package.json +2 -2
- package/dist/host/auth/projectAuthService.d.ts +0 -23
- package/dist/host/auth/projectAuthService.d.ts.map +0 -1
- package/dist/host/auth/projectAuthService.js +0 -63
- package/dist/host/auth/projectAuthService.js.map +0 -1
- package/dist/ui/StudioAdminOverlay.d.ts +0 -7
- package/dist/ui/StudioAdminOverlay.d.ts.map +0 -1
- package/dist/ui/StudioAuthSettingsOverlay.d.ts +0 -9
- package/dist/ui/StudioAuthSettingsOverlay.d.ts.map +0 -1
- package/dist/ui/StudioAuthSettingsOverlay.js +0 -607
- package/dist/ui/StudioAuthSettingsOverlay.js.map +0 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { DEFAULT_AUTH_FLOW } from '@ankhorage/contracts';
|
|
2
|
+
export async function persistStoredOAuthCredentialLink(args) {
|
|
3
|
+
let rollback;
|
|
4
|
+
args.mutateAuthSettings((current) => {
|
|
5
|
+
rollback = createStoredOAuthCredentialRollback(current, args.link);
|
|
6
|
+
return applyStoredOAuthCredentialLink(current, args.link);
|
|
7
|
+
});
|
|
8
|
+
try {
|
|
9
|
+
await args.flushManifest();
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
args.mutateAuthSettings((current) => rollbackStoredOAuthCredentialLink(current, rollback));
|
|
13
|
+
return {
|
|
14
|
+
ok: false,
|
|
15
|
+
pendingLink: args.link,
|
|
16
|
+
message: `${args.link.providerLabel} credentials were saved, but the Studio manifest link could not be persisted: ${args.toMessage(error)}`,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
await args.refreshHealth();
|
|
20
|
+
return { ok: true, message: args.link.successMessage };
|
|
21
|
+
}
|
|
22
|
+
export function patchLocalAuthDraftWithStoredOAuthCredentialLink(settings, link) {
|
|
23
|
+
return applyStoredOAuthCredentialLink(settings, link);
|
|
24
|
+
}
|
|
25
|
+
export async function persistStoredOAuthCredentialLinkAndPatchLocalDraft(args) {
|
|
26
|
+
const result = await args.persistCredentialLink(args.link);
|
|
27
|
+
if (result.ok) {
|
|
28
|
+
args.patchDraft((current) => patchLocalAuthDraftWithStoredOAuthCredentialLink(current, args.link));
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
export function applyStoredOAuthCredentialLink(settings, link) {
|
|
33
|
+
const nextSettings = settings ?? createDefaultAuthSettings();
|
|
34
|
+
const oauth = nextSettings.oauth ?? createDefaultOAuthSettings();
|
|
35
|
+
const existingProvider = oauth.providers.find((provider) => provider.id === link.providerId);
|
|
36
|
+
const nextProvider = existingProvider
|
|
37
|
+
? {
|
|
38
|
+
...existingProvider,
|
|
39
|
+
credentialsRef: link.credentialsRef,
|
|
40
|
+
}
|
|
41
|
+
: {
|
|
42
|
+
id: link.providerId,
|
|
43
|
+
...link.providerDefaults,
|
|
44
|
+
credentialsRef: link.credentialsRef,
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
...nextSettings,
|
|
48
|
+
oauth: {
|
|
49
|
+
...oauth,
|
|
50
|
+
providers: upsertOAuthProvider(oauth.providers, nextProvider),
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function createStoredOAuthCredentialRollback(settings, link) {
|
|
55
|
+
const oauth = settings?.oauth;
|
|
56
|
+
const previousProvider = oauth?.providers.find((provider) => provider.id === link.providerId) ?? null;
|
|
57
|
+
const nextSettings = applyStoredOAuthCredentialLink(settings, link);
|
|
58
|
+
const insertedProvider = nextSettings.oauth?.providers.find((provider) => provider.id === link.providerId) ??
|
|
59
|
+
{
|
|
60
|
+
id: link.providerId,
|
|
61
|
+
...link.providerDefaults,
|
|
62
|
+
credentialsRef: link.credentialsRef,
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
authExistedBefore: settings !== null,
|
|
66
|
+
oauthExistedBefore: oauth !== undefined,
|
|
67
|
+
providerId: link.providerId,
|
|
68
|
+
credentialsRef: link.credentialsRef,
|
|
69
|
+
previousProvider,
|
|
70
|
+
insertedProvider,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function rollbackStoredOAuthCredentialLink(settings, rollback) {
|
|
74
|
+
if (!settings?.oauth)
|
|
75
|
+
return settings;
|
|
76
|
+
const currentProvider = settings.oauth.providers.find((provider) => provider.id === rollback.providerId);
|
|
77
|
+
const { previousProvider } = rollback;
|
|
78
|
+
const providers = currentProvider?.credentialsRef === rollback.credentialsRef
|
|
79
|
+
? previousProvider !== null
|
|
80
|
+
? settings.oauth.providers.map((provider) => provider.id === rollback.providerId
|
|
81
|
+
? restoreProviderCredentialsRef(provider, previousProvider)
|
|
82
|
+
: provider)
|
|
83
|
+
: removeInsertedOrFailedCredentialsRef(settings.oauth.providers, rollback)
|
|
84
|
+
: settings.oauth.providers;
|
|
85
|
+
const nextSettings = {
|
|
86
|
+
...settings,
|
|
87
|
+
oauth: {
|
|
88
|
+
...settings.oauth,
|
|
89
|
+
providers,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
return removeTransactionIntroducedStructure(nextSettings, rollback);
|
|
93
|
+
}
|
|
94
|
+
function restoreProviderCredentialsRef(currentProvider, previousProvider) {
|
|
95
|
+
const { credentialsRef: _currentCredentialsRef, ...currentWithoutCredentialsRef } = currentProvider;
|
|
96
|
+
if (previousProvider.credentialsRef === undefined) {
|
|
97
|
+
return currentWithoutCredentialsRef;
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
...currentProvider,
|
|
101
|
+
credentialsRef: previousProvider.credentialsRef,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function removeInsertedOrFailedCredentialsRef(providers, rollback) {
|
|
105
|
+
return providers.flatMap((provider) => {
|
|
106
|
+
if (provider.id !== rollback.providerId)
|
|
107
|
+
return [provider];
|
|
108
|
+
if (areOAuthProvidersEqual(provider, rollback.insertedProvider))
|
|
109
|
+
return [];
|
|
110
|
+
const { credentialsRef: _credentialsRef, ...providerWithoutCredentialsRef } = provider;
|
|
111
|
+
return [providerWithoutCredentialsRef];
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function areOAuthProvidersEqual(left, right) {
|
|
115
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
116
|
+
}
|
|
117
|
+
function removeTransactionIntroducedStructure(settings, rollback) {
|
|
118
|
+
const withoutIntroducedOAuth = !rollback.oauthExistedBefore && settings.oauth && isDefaultOAuthSettings(settings.oauth)
|
|
119
|
+
? omitOAuth(settings)
|
|
120
|
+
: settings;
|
|
121
|
+
if (!rollback.authExistedBefore &&
|
|
122
|
+
withoutIntroducedOAuth.oauth === undefined &&
|
|
123
|
+
isDefaultAuthShell(withoutIntroducedOAuth)) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
return withoutIntroducedOAuth;
|
|
127
|
+
}
|
|
128
|
+
function omitOAuth(settings) {
|
|
129
|
+
const { oauth: _oauth, ...rest } = settings;
|
|
130
|
+
return rest;
|
|
131
|
+
}
|
|
132
|
+
function isDefaultOAuthSettings(oauth) {
|
|
133
|
+
return (oauth.enabled === false &&
|
|
134
|
+
oauth.callbackRoute === '/auth/callback' &&
|
|
135
|
+
oauth.providers.length === 0);
|
|
136
|
+
}
|
|
137
|
+
function isDefaultAuthShell(settings) {
|
|
138
|
+
return (settings.scope === 'none' &&
|
|
139
|
+
settings.provider === 'supabase' &&
|
|
140
|
+
JSON.stringify(settings.flow) === JSON.stringify(DEFAULT_AUTH_FLOW) &&
|
|
141
|
+
settings.signIn.identifiers.length === 1 &&
|
|
142
|
+
settings.signIn.identifiers[0] === 'email' &&
|
|
143
|
+
settings.signUp === undefined &&
|
|
144
|
+
settings.profile === undefined);
|
|
145
|
+
}
|
|
146
|
+
function createDefaultAuthSettings() {
|
|
147
|
+
return {
|
|
148
|
+
scope: 'none',
|
|
149
|
+
provider: 'supabase',
|
|
150
|
+
flow: { ...DEFAULT_AUTH_FLOW },
|
|
151
|
+
signIn: { identifiers: ['email'] },
|
|
152
|
+
oauth: createDefaultOAuthSettings(),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function createDefaultOAuthSettings() {
|
|
156
|
+
return {
|
|
157
|
+
enabled: false,
|
|
158
|
+
callbackRoute: '/auth/callback',
|
|
159
|
+
providers: [],
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function upsertOAuthProvider(providers, provider) {
|
|
163
|
+
const index = providers.findIndex((candidate) => candidate.id === provider.id);
|
|
164
|
+
if (index < 0)
|
|
165
|
+
return [...providers, provider];
|
|
166
|
+
return providers.map((candidate, candidateIndex) => candidateIndex === index ? provider : candidate);
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=adminAuthCredentialFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminAuthCredentialFlow.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminAuthCredentialFlow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ProjectAuthHealth } from '../../../projectAuthHealth';
|
|
2
|
+
export type AuthHealthRefreshResult = {
|
|
3
|
+
readonly applied: true;
|
|
4
|
+
readonly health: ProjectAuthHealth;
|
|
5
|
+
} | {
|
|
6
|
+
readonly applied: false;
|
|
7
|
+
readonly error?: unknown;
|
|
8
|
+
};
|
|
9
|
+
export declare class AuthHealthRefreshCoordinator {
|
|
10
|
+
private latestRequestId;
|
|
11
|
+
refresh(args: {
|
|
12
|
+
readonly loadHealth: () => Promise<ProjectAuthHealth>;
|
|
13
|
+
readonly onHealth: (health: ProjectAuthHealth) => void;
|
|
14
|
+
readonly onError: (error: unknown) => void;
|
|
15
|
+
}): Promise<AuthHealthRefreshResult>;
|
|
16
|
+
private isLatest;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=adminAuthHealthFlow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminAuthHealthFlow.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminAuthHealthFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,MAAM,uBAAuB,GAC/B;IACE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC,GACD;IACE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEN,qBAAa,4BAA4B;IACvC,OAAO,CAAC,eAAe,CAAK;IAEtB,OAAO,CAAC,IAAI,EAAE;QAClB,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACtD,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;QACvD,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;KAC5C,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAgBpC,OAAO,CAAC,QAAQ;CAGjB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class AuthHealthRefreshCoordinator {
|
|
2
|
+
latestRequestId = 0;
|
|
3
|
+
async refresh(args) {
|
|
4
|
+
const requestId = this.latestRequestId + 1;
|
|
5
|
+
this.latestRequestId = requestId;
|
|
6
|
+
try {
|
|
7
|
+
const health = await args.loadHealth();
|
|
8
|
+
if (!this.isLatest(requestId))
|
|
9
|
+
return { applied: false };
|
|
10
|
+
args.onHealth(health);
|
|
11
|
+
return { applied: true, health };
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (!this.isLatest(requestId))
|
|
15
|
+
return { applied: false, error };
|
|
16
|
+
args.onError(error);
|
|
17
|
+
return { applied: false, error };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
isLatest(requestId) {
|
|
21
|
+
return requestId === this.latestRequestId;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=adminAuthHealthFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminAuthHealthFlow.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminAuthHealthFlow.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,4BAA4B;IAC/B,eAAe,GAAG,CAAC,CAAC;IAE5B,KAAK,CAAC,OAAO,CAAC,IAIb;QACC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,SAAiB;QAChC,OAAO,SAAS,KAAK,IAAI,CAAC,eAAe,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { AuthOAuthProviderId } from '@ankhorage/contracts';
|
|
2
|
+
import type { StudioAuthSettings } from '../../../authSettings';
|
|
3
|
+
import type { StoredOAuthCredentialLink } from './adminAuthCredentialFlow';
|
|
4
|
+
export type AuthAdminWriteResult<T> = {
|
|
5
|
+
readonly ok: true;
|
|
6
|
+
readonly value: T;
|
|
7
|
+
} | {
|
|
8
|
+
readonly ok: false;
|
|
9
|
+
readonly reason: 'full_auth_save_busy' | 'credential_transaction_busy' | 'provider_busy' | 'credential_ref_busy' | 'credential_secret_cleanup_busy';
|
|
10
|
+
};
|
|
11
|
+
export declare class AuthAdminWriteCoordinator {
|
|
12
|
+
private fullAuthSaveActive;
|
|
13
|
+
private readonly activeProviderIds;
|
|
14
|
+
private readonly activeCredentialRefs;
|
|
15
|
+
private readonly activeCredentialSecretCleanupRefs;
|
|
16
|
+
isFullAuthSaveActive(): boolean;
|
|
17
|
+
isAnyCredentialTransactionActive(): boolean;
|
|
18
|
+
isProviderBusy(providerId: AuthOAuthProviderId): boolean;
|
|
19
|
+
isCredentialRefBusy(credentialsRef: string): boolean;
|
|
20
|
+
getBusyProviderIds(): ReadonlySet<AuthOAuthProviderId>;
|
|
21
|
+
getBusyCredentialRefs(): ReadonlySet<string>;
|
|
22
|
+
getBusyCredentialSecretCleanupRefs(): ReadonlySet<string>;
|
|
23
|
+
runFullAuthSave<T>(operation: () => Promise<T>): Promise<AuthAdminWriteResult<T>>;
|
|
24
|
+
runCredentialTransaction<T>(providerId: AuthOAuthProviderId, credentialsRef: string, operation: () => Promise<T>): Promise<AuthAdminWriteResult<T>>;
|
|
25
|
+
runCredentialSecretCleanup<T>(credentialsRef: string, operation: () => Promise<T>): Promise<AuthAdminWriteResult<T>>;
|
|
26
|
+
}
|
|
27
|
+
export declare class AuthAdminPendingCredentialRecoveryStore {
|
|
28
|
+
private readonly linksByProviderId;
|
|
29
|
+
list(): readonly StoredOAuthCredentialLink[];
|
|
30
|
+
get(providerId: AuthOAuthProviderId): StoredOAuthCredentialLink | null;
|
|
31
|
+
set(link: StoredOAuthCredentialLink): void;
|
|
32
|
+
clear(providerId: AuthOAuthProviderId): void;
|
|
33
|
+
clearByCredentialsRef(credentialsRef: string): readonly StoredOAuthCredentialLink[];
|
|
34
|
+
}
|
|
35
|
+
export interface AuthAdminProjectSessionSnapshot {
|
|
36
|
+
readonly pendingCredentialLinks: readonly StoredOAuthCredentialLink[];
|
|
37
|
+
readonly busyCredentialProviderIds: ReadonlySet<AuthOAuthProviderId>;
|
|
38
|
+
readonly busyCredentialRefs: ReadonlySet<string>;
|
|
39
|
+
readonly busyCredentialSecretCleanupRefs: ReadonlySet<string>;
|
|
40
|
+
readonly fullAuthSaveBusy: boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare class AuthAdminProjectSession {
|
|
43
|
+
readonly projectId: string;
|
|
44
|
+
private readonly writeCoordinator;
|
|
45
|
+
private readonly pendingRecovery;
|
|
46
|
+
constructor(projectId: string);
|
|
47
|
+
getSnapshot(): AuthAdminProjectSessionSnapshot;
|
|
48
|
+
setPendingCredentialLink(link: StoredOAuthCredentialLink): void;
|
|
49
|
+
clearPendingCredentialLink(providerId: AuthOAuthProviderId): void;
|
|
50
|
+
clearPendingCredentialLinksByCredentialsRef(credentialsRef: string): readonly StoredOAuthCredentialLink[];
|
|
51
|
+
runFullAuthSave<T>(operation: () => Promise<T>): Promise<AuthAdminWriteResult<T>>;
|
|
52
|
+
runCredentialTransaction<T>(providerId: AuthOAuthProviderId, credentialsRef: string, operation: () => Promise<T>): Promise<AuthAdminWriteResult<T>>;
|
|
53
|
+
runCredentialSecretCleanup<T>(credentialsRef: string, operation: () => Promise<T>): Promise<AuthAdminWriteResult<T>>;
|
|
54
|
+
}
|
|
55
|
+
export declare function clearPendingCredentialLinksForRemovedProjectSecret(args: {
|
|
56
|
+
readonly session: {
|
|
57
|
+
readonly clearPendingCredentialLinksByCredentialsRef: (credentialsRef: string) => readonly StoredOAuthCredentialLink[];
|
|
58
|
+
};
|
|
59
|
+
readonly environment: string;
|
|
60
|
+
readonly ref: string;
|
|
61
|
+
readonly removed: boolean;
|
|
62
|
+
}): readonly StoredOAuthCredentialLink[];
|
|
63
|
+
export declare function rebaseAuthDraftOntoCanonicalCredentialRefs(args: {
|
|
64
|
+
readonly draft: StudioAuthSettings;
|
|
65
|
+
readonly canonical: StudioAuthSettings | null;
|
|
66
|
+
}): StudioAuthSettings;
|
|
67
|
+
//# sourceMappingURL=adminAuthSessionModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminAuthSessionModel.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminAuthSessionModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
export class AuthAdminWriteCoordinator {
|
|
2
|
+
fullAuthSaveActive = false;
|
|
3
|
+
activeProviderIds = new Set();
|
|
4
|
+
activeCredentialRefs = new Set();
|
|
5
|
+
activeCredentialSecretCleanupRefs = new Set();
|
|
6
|
+
isFullAuthSaveActive() {
|
|
7
|
+
return this.fullAuthSaveActive;
|
|
8
|
+
}
|
|
9
|
+
isAnyCredentialTransactionActive() {
|
|
10
|
+
return this.activeProviderIds.size > 0;
|
|
11
|
+
}
|
|
12
|
+
isProviderBusy(providerId) {
|
|
13
|
+
return this.activeProviderIds.has(providerId);
|
|
14
|
+
}
|
|
15
|
+
isCredentialRefBusy(credentialsRef) {
|
|
16
|
+
return (this.activeCredentialRefs.has(credentialsRef) ||
|
|
17
|
+
this.activeCredentialSecretCleanupRefs.has(credentialsRef));
|
|
18
|
+
}
|
|
19
|
+
getBusyProviderIds() {
|
|
20
|
+
return new Set(this.activeProviderIds);
|
|
21
|
+
}
|
|
22
|
+
getBusyCredentialRefs() {
|
|
23
|
+
return new Set(this.activeCredentialRefs);
|
|
24
|
+
}
|
|
25
|
+
getBusyCredentialSecretCleanupRefs() {
|
|
26
|
+
return new Set(this.activeCredentialSecretCleanupRefs);
|
|
27
|
+
}
|
|
28
|
+
async runFullAuthSave(operation) {
|
|
29
|
+
if (this.fullAuthSaveActive)
|
|
30
|
+
return { ok: false, reason: 'full_auth_save_busy' };
|
|
31
|
+
if (this.activeProviderIds.size > 0) {
|
|
32
|
+
return { ok: false, reason: 'credential_transaction_busy' };
|
|
33
|
+
}
|
|
34
|
+
this.fullAuthSaveActive = true;
|
|
35
|
+
try {
|
|
36
|
+
return { ok: true, value: await operation() };
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
this.fullAuthSaveActive = false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async runCredentialTransaction(providerId, credentialsRef, operation) {
|
|
43
|
+
if (this.fullAuthSaveActive)
|
|
44
|
+
return { ok: false, reason: 'full_auth_save_busy' };
|
|
45
|
+
if (this.activeProviderIds.has(providerId))
|
|
46
|
+
return { ok: false, reason: 'provider_busy' };
|
|
47
|
+
if (this.activeCredentialRefs.has(credentialsRef)) {
|
|
48
|
+
return { ok: false, reason: 'credential_ref_busy' };
|
|
49
|
+
}
|
|
50
|
+
if (this.activeCredentialSecretCleanupRefs.has(credentialsRef)) {
|
|
51
|
+
return { ok: false, reason: 'credential_secret_cleanup_busy' };
|
|
52
|
+
}
|
|
53
|
+
this.activeProviderIds.add(providerId);
|
|
54
|
+
this.activeCredentialRefs.add(credentialsRef);
|
|
55
|
+
try {
|
|
56
|
+
return { ok: true, value: await operation() };
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
this.activeCredentialRefs.delete(credentialsRef);
|
|
60
|
+
this.activeProviderIds.delete(providerId);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async runCredentialSecretCleanup(credentialsRef, operation) {
|
|
64
|
+
if (this.activeCredentialRefs.has(credentialsRef)) {
|
|
65
|
+
return { ok: false, reason: 'credential_transaction_busy' };
|
|
66
|
+
}
|
|
67
|
+
if (this.activeCredentialSecretCleanupRefs.has(credentialsRef)) {
|
|
68
|
+
return { ok: false, reason: 'credential_secret_cleanup_busy' };
|
|
69
|
+
}
|
|
70
|
+
this.activeCredentialSecretCleanupRefs.add(credentialsRef);
|
|
71
|
+
try {
|
|
72
|
+
return { ok: true, value: await operation() };
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
this.activeCredentialSecretCleanupRefs.delete(credentialsRef);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export class AuthAdminPendingCredentialRecoveryStore {
|
|
80
|
+
linksByProviderId = new Map();
|
|
81
|
+
list() {
|
|
82
|
+
return [...this.linksByProviderId.values()];
|
|
83
|
+
}
|
|
84
|
+
get(providerId) {
|
|
85
|
+
return this.linksByProviderId.get(providerId) ?? null;
|
|
86
|
+
}
|
|
87
|
+
set(link) {
|
|
88
|
+
this.linksByProviderId.set(link.providerId, link);
|
|
89
|
+
}
|
|
90
|
+
clear(providerId) {
|
|
91
|
+
this.linksByProviderId.delete(providerId);
|
|
92
|
+
}
|
|
93
|
+
clearByCredentialsRef(credentialsRef) {
|
|
94
|
+
const cleared = [];
|
|
95
|
+
for (const link of this.linksByProviderId.values()) {
|
|
96
|
+
if (link.credentialsRef !== credentialsRef)
|
|
97
|
+
continue;
|
|
98
|
+
this.linksByProviderId.delete(link.providerId);
|
|
99
|
+
cleared.push(link);
|
|
100
|
+
}
|
|
101
|
+
return cleared;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export class AuthAdminProjectSession {
|
|
105
|
+
projectId;
|
|
106
|
+
writeCoordinator = new AuthAdminWriteCoordinator();
|
|
107
|
+
pendingRecovery = new AuthAdminPendingCredentialRecoveryStore();
|
|
108
|
+
constructor(projectId) {
|
|
109
|
+
this.projectId = projectId;
|
|
110
|
+
}
|
|
111
|
+
getSnapshot() {
|
|
112
|
+
return {
|
|
113
|
+
pendingCredentialLinks: this.pendingRecovery.list(),
|
|
114
|
+
busyCredentialProviderIds: this.writeCoordinator.getBusyProviderIds(),
|
|
115
|
+
busyCredentialRefs: this.writeCoordinator.getBusyCredentialRefs(),
|
|
116
|
+
busyCredentialSecretCleanupRefs: this.writeCoordinator.getBusyCredentialSecretCleanupRefs(),
|
|
117
|
+
fullAuthSaveBusy: this.writeCoordinator.isFullAuthSaveActive(),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
setPendingCredentialLink(link) {
|
|
121
|
+
this.pendingRecovery.set(link);
|
|
122
|
+
}
|
|
123
|
+
clearPendingCredentialLink(providerId) {
|
|
124
|
+
this.pendingRecovery.clear(providerId);
|
|
125
|
+
}
|
|
126
|
+
clearPendingCredentialLinksByCredentialsRef(credentialsRef) {
|
|
127
|
+
return this.pendingRecovery.clearByCredentialsRef(credentialsRef);
|
|
128
|
+
}
|
|
129
|
+
async runFullAuthSave(operation) {
|
|
130
|
+
return await this.writeCoordinator.runFullAuthSave(operation);
|
|
131
|
+
}
|
|
132
|
+
async runCredentialTransaction(providerId, credentialsRef, operation) {
|
|
133
|
+
return await this.writeCoordinator.runCredentialTransaction(providerId, credentialsRef, operation);
|
|
134
|
+
}
|
|
135
|
+
async runCredentialSecretCleanup(credentialsRef, operation) {
|
|
136
|
+
return await this.writeCoordinator.runCredentialSecretCleanup(credentialsRef, operation);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export function clearPendingCredentialLinksForRemovedProjectSecret(args) {
|
|
140
|
+
if (!args.removed || args.environment !== 'local')
|
|
141
|
+
return [];
|
|
142
|
+
return args.session.clearPendingCredentialLinksByCredentialsRef(args.ref);
|
|
143
|
+
}
|
|
144
|
+
export function rebaseAuthDraftOntoCanonicalCredentialRefs(args) {
|
|
145
|
+
const canonicalOauth = args.canonical?.oauth;
|
|
146
|
+
const canonicalProvidersById = new Map(canonicalOauth?.providers.map((provider) => [provider.id, provider]) ?? []);
|
|
147
|
+
const canonicalCredentialProviders = canonicalOauth?.providers.filter((provider) => provider.credentialsRef) ?? [];
|
|
148
|
+
if (!args.draft.oauth) {
|
|
149
|
+
if (canonicalCredentialProviders.length === 0 || !canonicalOauth)
|
|
150
|
+
return args.draft;
|
|
151
|
+
return {
|
|
152
|
+
...args.draft,
|
|
153
|
+
oauth: {
|
|
154
|
+
...canonicalOauth,
|
|
155
|
+
providers: canonicalCredentialProviders,
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const draftProviderIds = new Set(args.draft.oauth.providers.map((provider) => provider.id));
|
|
160
|
+
const rebasedDraftProviders = args.draft.oauth.providers.map((provider) => {
|
|
161
|
+
const canonicalCredentialsRef = canonicalProvidersById.get(provider.id)?.credentialsRef;
|
|
162
|
+
const { credentialsRef: _draftCredentialsRef, ...providerWithoutCredentialsRef } = provider;
|
|
163
|
+
return canonicalCredentialsRef
|
|
164
|
+
? { ...providerWithoutCredentialsRef, credentialsRef: canonicalCredentialsRef }
|
|
165
|
+
: providerWithoutCredentialsRef;
|
|
166
|
+
});
|
|
167
|
+
const missingCanonicalCredentialProviders = canonicalCredentialProviders.filter((provider) => !draftProviderIds.has(provider.id));
|
|
168
|
+
return {
|
|
169
|
+
...args.draft,
|
|
170
|
+
oauth: {
|
|
171
|
+
...args.draft.oauth,
|
|
172
|
+
providers: [...rebasedDraftProviders, ...missingCanonicalCredentialProviders],
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=adminAuthSessionModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminAuthSessionModel.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminAuthSessionModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DataSourceRegistry } from '@ankhorage/contracts';
|
|
2
|
+
export interface DataSourceOperationRow {
|
|
3
|
+
readonly sourceId: string;
|
|
4
|
+
readonly endpointId: string;
|
|
5
|
+
readonly operationId: string;
|
|
6
|
+
readonly kind: string;
|
|
7
|
+
readonly protocol: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function collectDataSourceOperationRows(dataSources: DataSourceRegistry): DataSourceOperationRow[];
|
|
10
|
+
//# sourceMappingURL=adminDataSourceOperations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminDataSourceOperations.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminDataSourceOperations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,kBAAkB,GAC9B,sBAAsB,EAAE,CAa1B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { readRecord, readString } from '../adminPageUtils';
|
|
2
|
+
export function collectDataSourceOperationRows(dataSources) {
|
|
3
|
+
return Object.entries(dataSources).flatMap(([sourceId, source]) => Object.entries(readRecord(source).endpoints ?? {}).flatMap(([endpointId, endpoint]) => Object.entries(readRecord(endpoint).operations ?? {}).map(([operationId, operation]) => ({
|
|
4
|
+
sourceId,
|
|
5
|
+
endpointId,
|
|
6
|
+
operationId,
|
|
7
|
+
kind: readString(readRecord(operation).intent) ?? 'operation',
|
|
8
|
+
protocol: readString(readRecord(operation).protocol) ?? readString(readRecord(endpoint).kind),
|
|
9
|
+
}))));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=adminDataSourceOperations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminDataSourceOperations.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminDataSourceOperations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAU3D,MAAM,UAAU,8BAA8B,CAC5C,WAA+B;IAE/B,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAChE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CACpF,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,QAAQ;QACR,UAAU;QACV,WAAW;QACX,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,WAAW;QAC7D,QAAQ,EACN,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;KACtF,CAAC,CAAC,CACJ,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ThemeModeConfig } from '@ankhorage/contracts';
|
|
2
|
+
export declare const SUPPORTED_COLOR_HARMONIES: readonly ["monochromatic", "analogous", "complementary", "triadic", "tetradic", "splitComplementary"];
|
|
3
|
+
export declare function formatHarmonyLabel(harmony: ThemeModeConfig['harmony']): string;
|
|
4
|
+
//# sourceMappingURL=adminThemeHarmony.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminThemeHarmony.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeHarmony.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,eAAO,MAAM,yBAAyB,uGAOoB,CAAC;AAE3D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,GAAG,MAAM,CAE9E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const SUPPORTED_COLOR_HARMONIES = [
|
|
2
|
+
'monochromatic',
|
|
3
|
+
'analogous',
|
|
4
|
+
'complementary',
|
|
5
|
+
'triadic',
|
|
6
|
+
'tetradic',
|
|
7
|
+
'splitComplementary',
|
|
8
|
+
];
|
|
9
|
+
export function formatHarmonyLabel(harmony) {
|
|
10
|
+
return harmony.replace(/([A-Z])/g, ' $1').replace(/^./, (value) => value.toUpperCase());
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=adminThemeHarmony.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminThemeHarmony.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeHarmony.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,eAAe;IACf,WAAW;IACX,eAAe;IACf,SAAS;IACT,UAAU;IACV,oBAAoB;CACoC,CAAC;AAE3D,MAAM,UAAU,kBAAkB,CAAC,OAAmC;IACpE,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ThemeConfig, ThemeModeConfig } from '@ankhorage/contracts';
|
|
2
|
+
import type { StudioMode } from '../../../index';
|
|
3
|
+
export interface ActiveThemeModeSelection {
|
|
4
|
+
readonly theme: ThemeConfig;
|
|
5
|
+
readonly mode: StudioMode;
|
|
6
|
+
readonly modeConfig: ThemeModeConfig;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveActiveThemeModeSelection(args: {
|
|
9
|
+
readonly themes: readonly ThemeConfig[];
|
|
10
|
+
readonly activeThemeId: string | undefined;
|
|
11
|
+
readonly surfaceMode: StudioMode;
|
|
12
|
+
}): ActiveThemeModeSelection | null;
|
|
13
|
+
export declare function createThemeModeUpdates(mode: StudioMode, updates: Partial<ThemeModeConfig>): {
|
|
14
|
+
readonly light?: Partial<ThemeModeConfig>;
|
|
15
|
+
readonly dark?: Partial<ThemeModeConfig>;
|
|
16
|
+
};
|
|
17
|
+
export declare function resolveZoraThemeSourceModeConfig(args: {
|
|
18
|
+
readonly theme: ThemeConfig;
|
|
19
|
+
readonly mode: StudioMode;
|
|
20
|
+
}): Pick<ThemeModeConfig, 'primaryColor' | 'harmony'>;
|
|
21
|
+
export declare function resolveZoraSurfaceThemeConfig(theme: ThemeConfig): ThemeConfig;
|
|
22
|
+
//# sourceMappingURL=adminThemeModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminThemeModel.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;CAClC,GAAG,wBAAwB,GAAG,IAAI,CAQlC;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CAAE,CAEzF;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE;IACrD,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,SAAS,CAAC,CAEpD;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAO7E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function resolveActiveThemeModeSelection(args) {
|
|
2
|
+
const theme = args.themes.find((candidate) => candidate.id === args.activeThemeId) ?? args.themes[0] ?? null;
|
|
3
|
+
if (!theme)
|
|
4
|
+
return null;
|
|
5
|
+
const modeConfig = theme[args.surfaceMode];
|
|
6
|
+
return { theme, mode: args.surfaceMode, modeConfig };
|
|
7
|
+
}
|
|
8
|
+
export function createThemeModeUpdates(mode, updates) {
|
|
9
|
+
return mode === 'dark' ? { dark: updates } : { light: updates };
|
|
10
|
+
}
|
|
11
|
+
export function resolveZoraThemeSourceModeConfig(args) {
|
|
12
|
+
return args.theme[args.mode];
|
|
13
|
+
}
|
|
14
|
+
export function resolveZoraSurfaceThemeConfig(theme) {
|
|
15
|
+
return {
|
|
16
|
+
id: theme.id,
|
|
17
|
+
name: theme.name,
|
|
18
|
+
light: { ...theme.light },
|
|
19
|
+
dark: { ...theme.dark },
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=adminThemeModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adminThemeModel.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeModel.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,+BAA+B,CAAC,IAI/C;IACC,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACjG,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE3C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAgB,EAChB,OAAiC;IAEjC,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,IAGhD;IACC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAkB;IAC9D,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE;KACxB,CAAC;AACJ,CAAC"}
|
|
@@ -3,7 +3,6 @@ export interface StudioAppBarAugmentation {
|
|
|
3
3
|
appMode?: unknown;
|
|
4
4
|
actions?: React.ReactNode;
|
|
5
5
|
overflow?: unknown;
|
|
6
|
-
overlay?: React.ReactNode;
|
|
7
6
|
}
|
|
8
7
|
export declare function useStudioAppBarAugmentation(): StudioAppBarAugmentation;
|
|
9
8
|
//# sourceMappingURL=useStudioAppBarAugmentation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStudioAppBarAugmentation.d.ts","sourceRoot":"","sources":["../../src/ui/useStudioAppBarAugmentation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useStudioAppBarAugmentation.d.ts","sourceRoot":"","sources":["../../src/ui/useStudioAppBarAugmentation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAS3C,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,2BAA2B,IAAI,wBAAwB,CA8BtE"}
|