@ankhorage/contracts 13.0.1 → 15.0.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/CHANGELOG.md +37 -0
- package/README.md +10 -2
- package/dist/appManifest/apis.d.ts +1 -0
- package/dist/appManifest/apis.d.ts.map +1 -1
- package/dist/appManifest/apis.js +17 -14
- package/dist/appManifest/apis.js.map +1 -1
- package/dist/appManifest/bindings.d.ts +3 -0
- package/dist/appManifest/bindings.d.ts.map +1 -1
- package/dist/appManifest/bindings.js +17 -1
- package/dist/appManifest/bindings.js.map +1 -1
- package/dist/appManifest/constants.d.ts +18 -0
- package/dist/appManifest/constants.d.ts.map +1 -0
- package/dist/appManifest/constants.js +18 -0
- package/dist/appManifest/constants.js.map +1 -0
- package/dist/appManifest/data.d.ts +4 -0
- package/dist/appManifest/data.d.ts.map +1 -1
- package/dist/appManifest/data.js +22 -3
- package/dist/appManifest/data.js.map +1 -1
- package/dist/appManifest/dataSources.d.ts +1 -0
- package/dist/appManifest/dataSources.d.ts.map +1 -1
- package/dist/appManifest/dataSources.js +7 -6
- package/dist/appManifest/dataSources.js.map +1 -1
- package/dist/appManifest/deploy.d.ts +1 -0
- package/dist/appManifest/deploy.d.ts.map +1 -1
- package/dist/appManifest/deploy.js +16 -13
- package/dist/appManifest/deploy.js.map +1 -1
- package/dist/appManifest/icon.d.ts.map +1 -1
- package/dist/appManifest/icon.js +2 -1
- package/dist/appManifest/icon.js.map +1 -1
- package/dist/appManifest/isAppManifest.d.ts +4 -0
- package/dist/appManifest/isAppManifest.d.ts.map +1 -0
- package/dist/appManifest/isAppManifest.js +69 -0
- package/dist/appManifest/isAppManifest.js.map +1 -0
- package/dist/appManifest/isAppStateSpec.d.ts +4 -0
- package/dist/appManifest/isAppStateSpec.d.ts.map +1 -0
- package/dist/appManifest/isAppStateSpec.js +9 -0
- package/dist/appManifest/isAppStateSpec.js.map +1 -0
- package/dist/appManifest/isManifestValue.d.ts +3 -0
- package/dist/appManifest/isManifestValue.d.ts.map +1 -0
- package/dist/appManifest/isManifestValue.js +15 -0
- package/dist/appManifest/isManifestValue.js.map +1 -0
- package/dist/appManifest/media.d.ts +1 -0
- package/dist/appManifest/media.d.ts.map +1 -1
- package/dist/appManifest/media.js +10 -8
- package/dist/appManifest/media.js.map +1 -1
- package/dist/appManifest/navigator.d.ts.map +1 -1
- package/dist/appManifest/navigator.js +7 -6
- package/dist/appManifest/navigator.js.map +1 -1
- package/dist/appManifest/navigatorOptions.d.ts +0 -2
- package/dist/appManifest/navigatorOptions.d.ts.map +1 -1
- package/dist/appManifest/navigatorOptions.js +8 -12
- package/dist/appManifest/navigatorOptions.js.map +1 -1
- package/dist/appManifest/parseAppManifest.d.ts +10 -0
- package/dist/appManifest/parseAppManifest.d.ts.map +1 -0
- package/dist/appManifest/parseAppManifest.js +14 -0
- package/dist/appManifest/parseAppManifest.js.map +1 -0
- package/dist/appManifest/screens.d.ts +4 -0
- package/dist/appManifest/screens.d.ts.map +1 -1
- package/dist/appManifest/screens.js +14 -2
- package/dist/appManifest/screens.js.map +1 -1
- package/dist/appManifest/splashScreen.d.ts +15 -0
- package/dist/appManifest/splashScreen.d.ts.map +1 -0
- package/dist/appManifest/splashScreen.js +2 -0
- package/dist/appManifest/splashScreen.js.map +1 -0
- package/dist/appManifest.d.ts +4 -18
- package/dist/appManifest.d.ts.map +1 -1
- package/dist/appManifest.js +2 -80
- package/dist/appManifest.js.map +1 -1
- package/dist/auth.d.ts +3 -2
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/deploy.d.ts +0 -9
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +0 -8
- package/dist/deploy.js.map +1 -1
- package/dist/environments.d.ts +4 -0
- package/dist/environments.d.ts.map +1 -0
- package/dist/environments.js +3 -0
- package/dist/environments.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/constants.d.ts +91 -0
- package/dist/infra/constants.d.ts.map +1 -0
- package/dist/infra/constants.js +91 -0
- package/dist/infra/constants.js.map +1 -0
- package/dist/infra/infraFields.d.ts +12 -0
- package/dist/infra/infraFields.d.ts.map +1 -0
- package/dist/infra/infraFields.js +14 -0
- package/dist/infra/infraFields.js.map +1 -0
- package/dist/infra/isInfraAdapterDescriptor.d.ts +4 -0
- package/dist/infra/isInfraAdapterDescriptor.d.ts.map +1 -0
- package/dist/infra/isInfraAdapterDescriptor.js +31 -0
- package/dist/infra/isInfraAdapterDescriptor.js.map +1 -0
- package/dist/infra/isInfraAuthSpec.d.ts +4 -0
- package/dist/infra/isInfraAuthSpec.d.ts.map +1 -0
- package/dist/infra/isInfraAuthSpec.js +75 -0
- package/dist/infra/isInfraAuthSpec.js.map +1 -0
- package/dist/infra/isInfraCredentialRef.d.ts +3 -0
- package/dist/infra/isInfraCredentialRef.d.ts.map +1 -0
- package/dist/infra/isInfraCredentialRef.js +10 -0
- package/dist/infra/isInfraCredentialRef.js.map +1 -0
- package/dist/infra/isInfraDeploymentSpec.d.ts +4 -0
- package/dist/infra/isInfraDeploymentSpec.d.ts.map +1 -0
- package/dist/infra/isInfraDeploymentSpec.js +66 -0
- package/dist/infra/isInfraDeploymentSpec.js.map +1 -0
- package/dist/infra/isInfraEnvironmentSpec.d.ts +4 -0
- package/dist/infra/isInfraEnvironmentSpec.d.ts.map +1 -0
- package/dist/infra/isInfraEnvironmentSpec.js +82 -0
- package/dist/infra/isInfraEnvironmentSpec.js.map +1 -0
- package/dist/infra/isInfraManifest.d.ts +4 -0
- package/dist/infra/isInfraManifest.d.ts.map +1 -0
- package/dist/infra/isInfraManifest.js +23 -0
- package/dist/infra/isInfraManifest.js.map +1 -0
- package/dist/infra/isInfraShape.d.ts +3 -0
- package/dist/infra/isInfraShape.d.ts.map +1 -0
- package/dist/infra/isInfraShape.js +10 -0
- package/dist/infra/isInfraShape.js.map +1 -0
- package/dist/infra/isInfraWorkloadHealth.d.ts +3 -0
- package/dist/infra/isInfraWorkloadHealth.d.ts.map +1 -0
- package/dist/infra/isInfraWorkloadHealth.js +37 -0
- package/dist/infra/isInfraWorkloadHealth.js.map +1 -0
- package/dist/infra/isInfraWorkloadSpec.d.ts +4 -0
- package/dist/infra/isInfraWorkloadSpec.d.ts.map +1 -0
- package/dist/infra/isInfraWorkloadSpec.js +70 -0
- package/dist/infra/isInfraWorkloadSpec.js.map +1 -0
- package/dist/infra/isInfraWorkloadValue.d.ts +3 -0
- package/dist/infra/isInfraWorkloadValue.d.ts.map +1 -0
- package/dist/infra/isInfraWorkloadValue.js +40 -0
- package/dist/infra/isInfraWorkloadValue.js.map +1 -0
- package/dist/infra/parseInfraManifest.d.ts +5 -0
- package/dist/infra/parseInfraManifest.d.ts.map +1 -0
- package/dist/infra/parseInfraManifest.js +17 -0
- package/dist/infra/parseInfraManifest.js.map +1 -0
- package/dist/infra/validateInfraAdapterSelection.d.ts +6 -0
- package/dist/infra/validateInfraAdapterSelection.d.ts.map +1 -0
- package/dist/infra/validateInfraAdapterSelection.js +36 -0
- package/dist/infra/validateInfraAdapterSelection.js.map +1 -0
- package/dist/infra.d.ts +16 -0
- package/dist/infra.d.ts.map +1 -0
- package/dist/infra.js +11 -0
- package/dist/infra.js.map +1 -0
- package/dist/media.d.ts +7 -6
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +5 -5
- package/dist/media.js.map +1 -1
- package/dist/state.d.ts +5 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js.map +1 -1
- package/dist/types/appManifest.d.ts +9 -0
- package/dist/types/appManifest.d.ts.map +1 -0
- package/dist/types/appManifest.js +2 -0
- package/dist/types/appManifest.js.map +1 -0
- package/dist/types/infraAdapters.d.ts +85 -0
- package/dist/types/infraAdapters.d.ts.map +1 -0
- package/dist/types/infraAdapters.js +2 -0
- package/dist/types/infraAdapters.js.map +1 -0
- package/dist/types/infraLifecycle.d.ts +107 -0
- package/dist/types/infraLifecycle.d.ts.map +1 -0
- package/dist/types/infraLifecycle.js +2 -0
- package/dist/types/infraLifecycle.js.map +1 -0
- package/dist/types/infraManifest.d.ts +142 -0
- package/dist/types/infraManifest.d.ts.map +1 -0
- package/dist/types/infraManifest.js +2 -0
- package/dist/types/infraManifest.js.map +1 -0
- package/dist/types/infraSecrets.d.ts +15 -0
- package/dist/types/infraSecrets.d.ts.map +1 -0
- package/dist/types/infraSecrets.js +2 -0
- package/dist/types/infraSecrets.js.map +1 -0
- package/dist/types/infraValidation.d.ts +5 -0
- package/dist/types/infraValidation.d.ts.map +1 -0
- package/dist/types/infraValidation.js +2 -0
- package/dist/types/infraValidation.js.map +1 -0
- package/dist/types/infraWorkload.d.ts +70 -0
- package/dist/types/infraWorkload.d.ts.map +1 -0
- package/dist/types/infraWorkload.js +2 -0
- package/dist/types/infraWorkload.js.map +1 -0
- package/dist/types.d.ts +8 -82
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -9
- package/dist/types.js.map +1 -1
- package/package.json +13 -3
- package/src/appManifest/apis.ts +18 -16
- package/src/appManifest/bindings.ts +18 -1
- package/src/appManifest/constants.ts +19 -0
- package/src/appManifest/data.ts +23 -9
- package/src/appManifest/dataSources.ts +8 -7
- package/src/appManifest/deploy.ts +17 -15
- package/src/appManifest/icon.ts +3 -1
- package/src/appManifest/isAppManifest.ts +95 -0
- package/src/appManifest/isAppStateSpec.ts +13 -0
- package/src/appManifest/isManifestValue.ts +19 -0
- package/src/appManifest/media.ts +11 -10
- package/src/appManifest/navigator.ts +7 -6
- package/src/appManifest/navigatorOptions.ts +9 -16
- package/src/appManifest/parseAppManifest.ts +15 -0
- package/src/appManifest/screens.ts +14 -2
- package/src/appManifest/splashScreen.test.ts +40 -0
- package/src/appManifest/splashScreen.ts +24 -0
- package/src/appManifest.test.ts +9 -5
- package/src/appManifest.ts +8 -106
- package/src/auth-flow-contract.test.ts +6 -10
- package/src/auth-oauth.test.ts +2 -2
- package/src/auth.ts +3 -2
- package/src/bindings.test.ts +5 -0
- package/src/contracts.test.ts +21 -39
- package/src/deploy.test.ts +13 -5
- package/src/deploy.ts +0 -11
- package/src/environments.ts +4 -0
- package/src/index.ts +2 -1
- package/src/infra/constants.ts +91 -0
- package/src/infra/infraFields.ts +20 -0
- package/src/infra/isInfraAdapterDescriptor.ts +37 -0
- package/src/infra/isInfraAuthSpec.ts +98 -0
- package/src/infra/isInfraCredentialRef.ts +11 -0
- package/src/infra/isInfraDeploymentSpec.ts +75 -0
- package/src/infra/isInfraEnvironmentSpec.ts +95 -0
- package/src/infra/isInfraManifest.ts +29 -0
- package/src/infra/isInfraShape.ts +16 -0
- package/src/infra/isInfraWorkloadHealth.ts +38 -0
- package/src/infra/isInfraWorkloadSpec.ts +87 -0
- package/src/infra/isInfraWorkloadValue.ts +41 -0
- package/src/infra/parseInfraManifest.ts +20 -0
- package/src/infra/validateInfraAdapterSelection.ts +42 -0
- package/src/infra-types.test.ts +78 -0
- package/src/infra-workload.test.ts +186 -0
- package/src/infra.test.ts +268 -0
- package/src/infra.ts +15 -0
- package/src/media.ts +12 -11
- package/src/profile-contract.test.ts +2 -3
- package/src/secrets.test.ts +19 -13
- package/src/state.ts +6 -0
- package/src/types/appManifest.ts +5 -0
- package/src/types/infraAdapters.ts +148 -0
- package/src/types/infraLifecycle.ts +105 -0
- package/src/types/infraManifest.ts +130 -0
- package/src/types/infraSecrets.ts +16 -0
- package/src/types/infraValidation.ts +2 -0
- package/src/types/infraWorkload.ts +64 -0
- package/src/types.ts +8 -103
- package/dist/appManifest/infra.d.ts +0 -2
- package/dist/appManifest/infra.d.ts.map +0 -1
- package/dist/appManifest/infra.js +0 -130
- package/dist/appManifest/infra.js.map +0 -1
- package/dist/appManifest/shared.d.ts +0 -8
- package/dist/appManifest/shared.d.ts.map +0 -1
- package/dist/appManifest/shared.js +0 -31
- package/dist/appManifest/shared.js.map +0 -1
- package/dist/secretManifest.d.ts +0 -11
- package/dist/secretManifest.d.ts.map +0 -1
- package/dist/secretManifest.js +0 -2
- package/dist/secretManifest.js.map +0 -1
- package/src/appManifest/infra.ts +0 -190
- package/src/appManifest/shared.ts +0 -40
- package/src/secretManifest.ts +0 -12
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { AppEnvironmentId } from '../environments';
|
|
2
|
+
import type { InfraAdapterId } from './infraManifest';
|
|
3
|
+
import type { InfraSecretReference } from './infraSecrets';
|
|
4
|
+
|
|
5
|
+
/** Identity must be verified before mutation; unowned resources must never be pruned. */
|
|
6
|
+
export interface InfraResourceIdentity {
|
|
7
|
+
readonly projectId: string;
|
|
8
|
+
readonly environment: AppEnvironmentId;
|
|
9
|
+
readonly adapter: InfraAdapterId;
|
|
10
|
+
readonly resourceId: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface InfraOwnedResource {
|
|
14
|
+
readonly identity: InfraResourceIdentity;
|
|
15
|
+
readonly externalId?: string;
|
|
16
|
+
readonly persistent: boolean;
|
|
17
|
+
readonly retention: 'retain' | 'delete-on-destroy';
|
|
18
|
+
readonly dependsOn: readonly InfraResourceIdentity[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface InfraDiagnostic {
|
|
22
|
+
readonly severity: 'info' | 'warning' | 'error';
|
|
23
|
+
readonly code: string;
|
|
24
|
+
/** Safe human-readable detail. Tokens and privileged values must be redacted by the producer. */
|
|
25
|
+
readonly message: string;
|
|
26
|
+
readonly path?: readonly (string | number)[];
|
|
27
|
+
readonly owner?: InfraResourceIdentity;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type InfraResult<T> =
|
|
31
|
+
| { readonly ok: true; readonly value: T; readonly diagnostics: readonly InfraDiagnostic[] }
|
|
32
|
+
| { readonly ok: false; readonly diagnostics: readonly InfraDiagnostic[] };
|
|
33
|
+
|
|
34
|
+
export interface InfraPlanAction {
|
|
35
|
+
readonly owner: InfraResourceIdentity;
|
|
36
|
+
readonly operation: 'create' | 'update' | 'delete' | 'retain' | 'noop';
|
|
37
|
+
readonly impact: 'none' | 'interrupts-service' | 'deletes-data';
|
|
38
|
+
readonly detail: string;
|
|
39
|
+
readonly dependsOn: readonly InfraResourceIdentity[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface InfraPlan {
|
|
43
|
+
readonly projectId: string;
|
|
44
|
+
readonly environment: AppEnvironmentId;
|
|
45
|
+
/** Ordered dependency-first; teardown consumers reverse dependency order. */
|
|
46
|
+
readonly actions: readonly InfraPlanAction[];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface InfraResourceStatus {
|
|
50
|
+
readonly owner: InfraResourceIdentity;
|
|
51
|
+
readonly state:
|
|
52
|
+
'absent' | 'pending' | 'ready' | 'degraded' | 'stopped' | 'retained' | 'failed' | 'unknown';
|
|
53
|
+
readonly detail?: string;
|
|
54
|
+
readonly diagnostics?: readonly InfraDiagnostic[];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface InfraStatus {
|
|
58
|
+
readonly projectId: string;
|
|
59
|
+
readonly environment: AppEnvironmentId;
|
|
60
|
+
readonly state: InfraResourceStatus['state'];
|
|
61
|
+
readonly resources: readonly InfraResourceStatus[];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** A privileged output has a reference, never a value field or environment export name. */
|
|
65
|
+
export type InfraOutput = { readonly owner: InfraResourceIdentity; readonly name: string } & (
|
|
66
|
+
| {
|
|
67
|
+
readonly visibility: 'public';
|
|
68
|
+
readonly value: string | number | boolean;
|
|
69
|
+
readonly environmentVariable?: string;
|
|
70
|
+
readonly reference?: never;
|
|
71
|
+
}
|
|
72
|
+
| {
|
|
73
|
+
readonly visibility: 'secret';
|
|
74
|
+
readonly reference: InfraSecretReference;
|
|
75
|
+
readonly value?: never;
|
|
76
|
+
readonly environmentVariable?: never;
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
export interface InfraGeneratedArtifact {
|
|
81
|
+
readonly owner: InfraResourceIdentity;
|
|
82
|
+
/** Project-relative file path validated by the writer before touching the filesystem. */
|
|
83
|
+
readonly path: string;
|
|
84
|
+
readonly content: string;
|
|
85
|
+
readonly executable?: boolean;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface InfraLedger {
|
|
89
|
+
readonly schemaVersion: 1;
|
|
90
|
+
readonly projectId: string;
|
|
91
|
+
readonly environment: AppEnvironmentId;
|
|
92
|
+
readonly resources: readonly InfraOwnedResource[];
|
|
93
|
+
readonly artifacts: readonly { readonly owner: InfraResourceIdentity; readonly path: string }[];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** No default environment or confirmation is possible for destruction. */
|
|
97
|
+
export interface InfraDestroyRequest {
|
|
98
|
+
readonly projectId: string;
|
|
99
|
+
readonly environment: AppEnvironmentId;
|
|
100
|
+
readonly confirmation: { readonly projectId: string; readonly environment: AppEnvironmentId };
|
|
101
|
+
/** Data deletion is a separate, explicit resource-scoped authorization in every environment. */
|
|
102
|
+
readonly persistence:
|
|
103
|
+
| { readonly policy: 'retain' }
|
|
104
|
+
| { readonly policy: 'delete'; readonly confirmedResources: readonly InfraResourceIdentity[] };
|
|
105
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import type { AuthFlowConfig, AuthOAuthConfig } from '../auth';
|
|
2
|
+
import type { ApiDefinitionList } from '../data';
|
|
3
|
+
import type { AppEnvironmentId } from '../environments';
|
|
4
|
+
import type { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from '../infra/constants';
|
|
5
|
+
import type { AuthProfileSpec, AuthScope, AuthSignInSpec, AuthSignUpSpec } from '../types';
|
|
6
|
+
import type { InfraControlPlaneCredentialRef } from './infraSecrets';
|
|
7
|
+
import type { InfraWorkloadSpec } from './infraWorkload';
|
|
8
|
+
|
|
9
|
+
export type InfraAdapterId = keyof typeof INFRA_ADAPTER_CATALOG;
|
|
10
|
+
export type InfraCapability =
|
|
11
|
+
(typeof INFRA_ADAPTER_CATALOG)[InfraAdapterId]['capabilities'][number];
|
|
12
|
+
export type InfraProviderFor<C extends InfraCapability> = {
|
|
13
|
+
[P in InfraAdapterId]: C extends (typeof INFRA_ADAPTER_CATALOG)[P]['capabilities'][number]
|
|
14
|
+
? P
|
|
15
|
+
: never;
|
|
16
|
+
}[InfraAdapterId];
|
|
17
|
+
export type InfraComputeProviderId = InfraProviderFor<'compute'>;
|
|
18
|
+
export type InfraRuntimeProviderId = keyof typeof INFRA_RUNTIME_COMPATIBILITY;
|
|
19
|
+
|
|
20
|
+
/** Non-secret provider configuration; credentials are resolved only at the execution boundary. */
|
|
21
|
+
export interface InfraComputeConfigMap {
|
|
22
|
+
readonly local: { readonly workingDirectory?: string };
|
|
23
|
+
readonly hetzner: {
|
|
24
|
+
readonly location: string;
|
|
25
|
+
readonly serverType?: string;
|
|
26
|
+
readonly image?: string;
|
|
27
|
+
readonly credentials?: InfraControlPlaneCredentialRef;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface InfraRuntimeConfigMap {
|
|
32
|
+
readonly minikube: {
|
|
33
|
+
readonly profile?: string;
|
|
34
|
+
readonly driver?: 'docker' | 'podman';
|
|
35
|
+
readonly cpus?: number;
|
|
36
|
+
readonly memoryMiB?: number;
|
|
37
|
+
};
|
|
38
|
+
readonly k3s: {
|
|
39
|
+
readonly version?: string;
|
|
40
|
+
readonly topology?: { readonly servers: number; readonly agents: number };
|
|
41
|
+
};
|
|
42
|
+
readonly 'docker-compose': { readonly projectName?: string };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export type InfraComputeSelection<P extends InfraComputeProviderId = InfraComputeProviderId> = {
|
|
46
|
+
[K in P]: { readonly provider: K } & InfraComputeConfigMap[K];
|
|
47
|
+
}[P];
|
|
48
|
+
export type InfraRuntimeSelection<P extends InfraRuntimeProviderId = InfraRuntimeProviderId> = {
|
|
49
|
+
[K in P]: { readonly provider: K } & InfraRuntimeConfigMap[K];
|
|
50
|
+
}[P];
|
|
51
|
+
|
|
52
|
+
/** A discriminated union derived from the runtime catalog, never a Cartesian product. */
|
|
53
|
+
export type InfraDeploymentSpec = {
|
|
54
|
+
[R in InfraRuntimeProviderId]: {
|
|
55
|
+
readonly compute: InfraComputeSelection<(typeof INFRA_RUNTIME_COMPATIBILITY)[R][number]>;
|
|
56
|
+
readonly runtime: InfraRuntimeSelection<R>;
|
|
57
|
+
};
|
|
58
|
+
}[InfraRuntimeProviderId];
|
|
59
|
+
|
|
60
|
+
export interface InfraDatabaseConfigMap {
|
|
61
|
+
readonly supabase: { readonly tier?: 'dev' | 'prod' };
|
|
62
|
+
}
|
|
63
|
+
export interface InfraObjectStorageConfigMap {
|
|
64
|
+
readonly supabase: { readonly buckets?: readonly string[] };
|
|
65
|
+
readonly r2: {
|
|
66
|
+
readonly buckets?: readonly string[];
|
|
67
|
+
readonly accountId?: string;
|
|
68
|
+
readonly credentials?: InfraControlPlaneCredentialRef;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export interface InfraAuthConfigMap {
|
|
72
|
+
readonly supabase: {
|
|
73
|
+
readonly scope?: AuthScope;
|
|
74
|
+
readonly flow?: AuthFlowConfig;
|
|
75
|
+
readonly signIn?: AuthSignInSpec;
|
|
76
|
+
readonly signUp?: AuthSignUpSpec;
|
|
77
|
+
readonly oauth?: AuthOAuthConfig;
|
|
78
|
+
readonly profile?: AuthProfileSpec;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export interface InfraAuthzConfigMap {
|
|
82
|
+
readonly cerbos: { readonly kind: 'RBAC' | 'ABAC' };
|
|
83
|
+
}
|
|
84
|
+
export interface InfraSecretStoreConfigMap {
|
|
85
|
+
readonly 'supabase-vault': { readonly schema?: string };
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export type InfraDatabaseSpec = {
|
|
89
|
+
[P in InfraProviderFor<'database'>]: { readonly provider: P } & InfraDatabaseConfigMap[P];
|
|
90
|
+
}[InfraProviderFor<'database'>];
|
|
91
|
+
export type InfraObjectStorageSpec = {
|
|
92
|
+
[P in InfraProviderFor<'objectStorage'>]: {
|
|
93
|
+
readonly provider: P;
|
|
94
|
+
} & InfraObjectStorageConfigMap[P];
|
|
95
|
+
}[InfraProviderFor<'objectStorage'>];
|
|
96
|
+
export type InfraAuthSpec = {
|
|
97
|
+
[P in InfraProviderFor<'auth'>]: { readonly provider: P } & InfraAuthConfigMap[P];
|
|
98
|
+
}[InfraProviderFor<'auth'>];
|
|
99
|
+
export type InfraAuthzSpec = {
|
|
100
|
+
[P in InfraProviderFor<'authz'>]: { readonly provider: P } & InfraAuthzConfigMap[P];
|
|
101
|
+
}[InfraProviderFor<'authz'>];
|
|
102
|
+
export type InfraSecretStoreSpec = {
|
|
103
|
+
[P in InfraProviderFor<'secretStore'>]: { readonly provider: P } & InfraSecretStoreConfigMap[P];
|
|
104
|
+
}[InfraProviderFor<'secretStore'>];
|
|
105
|
+
|
|
106
|
+
export interface InfraNetworkingSpec {
|
|
107
|
+
/** Public DNS name intent, not automatic DNS/CDN vendor provisioning. */
|
|
108
|
+
readonly domain?: string;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface InfraEnvironmentSpec {
|
|
112
|
+
readonly deployment: InfraDeploymentSpec;
|
|
113
|
+
readonly database?: InfraDatabaseSpec;
|
|
114
|
+
readonly objectStorage?: InfraObjectStorageSpec;
|
|
115
|
+
readonly auth?: InfraAuthSpec;
|
|
116
|
+
readonly authz?: InfraAuthzSpec;
|
|
117
|
+
readonly secretStore?: InfraSecretStoreSpec;
|
|
118
|
+
readonly networking?: InfraNetworkingSpec;
|
|
119
|
+
readonly workloads?: readonly InfraWorkloadSpec[];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export interface InfraManifest {
|
|
123
|
+
readonly environments: Readonly<
|
|
124
|
+
Record<'local', InfraEnvironmentSpec> &
|
|
125
|
+
Partial<Record<Exclude<AppEnvironmentId, 'local'>, InfraEnvironmentSpec>>
|
|
126
|
+
>;
|
|
127
|
+
readonly apis?: ApiDefinitionList;
|
|
128
|
+
readonly modules: readonly string[];
|
|
129
|
+
readonly modulesConfig?: Readonly<Record<string, unknown>>;
|
|
130
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AppEnvironmentId } from '../environments';
|
|
2
|
+
|
|
3
|
+
/** Bootstrap credentials cannot depend on the managed secret store being provisioned. */
|
|
4
|
+
export interface InfraControlPlaneCredentialRef {
|
|
5
|
+
readonly source: 'control-plane';
|
|
6
|
+
readonly name: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** Privileged values are never serialized into manifests, ledgers or normal outputs. */
|
|
10
|
+
export interface InfraSecretReference {
|
|
11
|
+
readonly source: 'secret-store';
|
|
12
|
+
readonly projectId: string;
|
|
13
|
+
readonly environment: AppEnvironmentId;
|
|
14
|
+
readonly ref: string;
|
|
15
|
+
readonly key: string;
|
|
16
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { InfraSecretReference } from './infraSecrets';
|
|
2
|
+
|
|
3
|
+
export interface InfraWorkloadArtifact {
|
|
4
|
+
readonly kind: 'image';
|
|
5
|
+
/** Prebuilt image, optionally pinned by digest. No registry/build provider requirement. */
|
|
6
|
+
readonly image: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type InfraWorkloadValue =
|
|
10
|
+
| { readonly kind: 'literal'; readonly value: string }
|
|
11
|
+
| { readonly kind: 'secret'; readonly reference: InfraSecretReference }
|
|
12
|
+
| { readonly kind: 'output'; readonly resourceId: string; readonly output: string };
|
|
13
|
+
|
|
14
|
+
export interface InfraWorkloadPort {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly port: number;
|
|
17
|
+
readonly protocol?: 'tcp' | 'udp';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type InfraWorkloadHealthSpec = {
|
|
21
|
+
readonly intervalSeconds?: number;
|
|
22
|
+
readonly timeoutSeconds?: number;
|
|
23
|
+
readonly failureThreshold?: number;
|
|
24
|
+
} & (
|
|
25
|
+
| { readonly kind: 'http'; readonly port: number; readonly path: string }
|
|
26
|
+
| { readonly kind: 'tcp'; readonly port: number }
|
|
27
|
+
| { readonly kind: 'command'; readonly command: readonly string[] }
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
export interface InfraWorkloadResourceSpec {
|
|
31
|
+
readonly cpuMillis?: number;
|
|
32
|
+
readonly memoryMiB?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface InfraWorkloadVolumeSpec {
|
|
36
|
+
readonly id: string;
|
|
37
|
+
readonly mountPath: string;
|
|
38
|
+
readonly sizeGiB: number;
|
|
39
|
+
/** Persistence survives down and is retained by default on destroy. */
|
|
40
|
+
readonly retention: 'retain' | 'delete-on-destroy';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Portable config/policy files; secret values are materialized by the runtime. */
|
|
44
|
+
export interface InfraWorkloadFileSpec {
|
|
45
|
+
readonly path: string;
|
|
46
|
+
readonly content: InfraWorkloadValue;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface InfraWorkloadSpec {
|
|
50
|
+
readonly id: string;
|
|
51
|
+
readonly artifact: InfraWorkloadArtifact;
|
|
52
|
+
readonly command?: readonly string[];
|
|
53
|
+
readonly args?: readonly string[];
|
|
54
|
+
readonly ports?: readonly InfraWorkloadPort[];
|
|
55
|
+
readonly environment?: Readonly<Record<string, InfraWorkloadValue>>;
|
|
56
|
+
readonly files?: readonly InfraWorkloadFileSpec[];
|
|
57
|
+
readonly health?: InfraWorkloadHealthSpec;
|
|
58
|
+
readonly resources?: InfraWorkloadResourceSpec;
|
|
59
|
+
readonly persistence?: readonly InfraWorkloadVolumeSpec[];
|
|
60
|
+
readonly exposure?: 'internal' | 'public';
|
|
61
|
+
readonly replicas?: number;
|
|
62
|
+
/** IDs in the composed desired-state graph; the orchestrator validates missing/cyclic edges. */
|
|
63
|
+
readonly dependsOn?: readonly string[];
|
|
64
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import type { ColorHarmony } from '@ankhorage/color-theory';
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { SplashScreenSpec } from './appManifest/splashScreen';
|
|
4
|
+
import type { AuthIdentifierKind, AuthSignUpField } from './auth';
|
|
4
5
|
import type {
|
|
5
6
|
BindingValueSource,
|
|
6
7
|
ComponentDataBindingRegistry,
|
|
7
8
|
ScreenDataLoaderDefinition,
|
|
8
9
|
} from './bindings';
|
|
9
|
-
import type {
|
|
10
|
+
import type { DataSourceRegistry } from './data';
|
|
10
11
|
import type { AppDeployManifest } from './deploy';
|
|
12
|
+
import type { InfraManifest } from './infra';
|
|
11
13
|
import type { MediaAssetReference, MediaManifest } from './media';
|
|
12
14
|
import type { AppNavigatorManifest } from './navigator';
|
|
13
15
|
import type { RepositoryManifest } from './repository';
|
|
14
16
|
import type { ScreenRequirements } from './requirements';
|
|
17
|
+
import type { AppStateSpec } from './state';
|
|
15
18
|
import type { ThemeGlobalTokenOverrides, ThemeRecipeOverrides } from './theme';
|
|
16
19
|
|
|
17
20
|
export interface ThemeModeConfig {
|
|
@@ -163,40 +166,9 @@ export const APP_CATEGORIES = [
|
|
|
163
166
|
] as const;
|
|
164
167
|
export type AppCategory = (typeof APP_CATEGORIES)[number];
|
|
165
168
|
|
|
166
|
-
export const DEPLOYMENT_TARGETS = ['minikube'] as const;
|
|
167
|
-
export type KnownDeploymentTarget = (typeof DEPLOYMENT_TARGETS)[number];
|
|
168
|
-
export type DeploymentTarget = KnownDeploymentTarget | (string & {});
|
|
169
|
-
|
|
170
|
-
export const DATABASE_PROVIDERS = ['supabase'] as const;
|
|
171
|
-
export type KnownDatabaseProvider = (typeof DATABASE_PROVIDERS)[number];
|
|
172
|
-
export type DatabaseProvider = KnownDatabaseProvider | (string & {});
|
|
173
|
-
|
|
174
|
-
export const DATABASE_TIERS = ['dev', 'prod'] as const;
|
|
175
|
-
export type DatabaseTier = (typeof DATABASE_TIERS)[number];
|
|
176
|
-
|
|
177
|
-
export const STORAGE_PROVIDERS = ['auto', 's3', 'r2'] as const;
|
|
178
|
-
export type StorageProvider = (typeof STORAGE_PROVIDERS)[number];
|
|
179
|
-
|
|
180
|
-
export const STATE_PROVIDERS = ['legend'] as const;
|
|
181
|
-
export type KnownStateProvider = (typeof STATE_PROVIDERS)[number];
|
|
182
|
-
export type StateProvider = KnownStateProvider | (string & {});
|
|
183
|
-
|
|
184
|
-
export const STATE_PERSISTENCE_MODES = ['none', 'local', 'secure', 'database'] as const;
|
|
185
|
-
export type StatePersistenceMode = (typeof STATE_PERSISTENCE_MODES)[number];
|
|
186
|
-
|
|
187
|
-
export const AUTHZ_KINDS = ['RBAC', 'ABAC'] as const;
|
|
188
|
-
export type AuthzKind = (typeof AUTHZ_KINDS)[number];
|
|
189
|
-
|
|
190
|
-
export const AUTHZ_ENGINES = ['cerbos', 'native'] as const;
|
|
191
|
-
export type AuthzEngine = (typeof AUTHZ_ENGINES)[number];
|
|
192
|
-
|
|
193
169
|
export const AUTH_SCOPES = ['global', 'none', 'integrated'] as const;
|
|
194
170
|
export type AuthScope = (typeof AUTH_SCOPES)[number];
|
|
195
171
|
|
|
196
|
-
export const AUTH_PROVIDERS = ['supabase'] as const;
|
|
197
|
-
export type KnownAuthProvider = (typeof AUTH_PROVIDERS)[number];
|
|
198
|
-
export type AuthProvider = KnownAuthProvider | (string & {});
|
|
199
|
-
|
|
200
172
|
export const AUTH_SIGN_IN_IDENTIFIERS = ['email', 'username', 'phone'] as const;
|
|
201
173
|
export type AuthSignInIdentifier = AuthIdentifierKind;
|
|
202
174
|
|
|
@@ -268,47 +240,6 @@ export interface ScreenSpec {
|
|
|
268
240
|
requires?: ScreenRequirements;
|
|
269
241
|
}
|
|
270
242
|
|
|
271
|
-
export type SplashScreenResizeMode = 'contain' | 'cover' | 'native';
|
|
272
|
-
|
|
273
|
-
export interface SplashScreenAssetSpec {
|
|
274
|
-
readonly image?: MediaAssetReference;
|
|
275
|
-
readonly imageWidth?: number;
|
|
276
|
-
readonly resizeMode?: SplashScreenResizeMode;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
export interface SplashScreenModeSpec extends SplashScreenAssetSpec {
|
|
280
|
-
readonly backgroundColor?: string;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
export interface SplashScreenSpec extends SplashScreenModeSpec {
|
|
284
|
-
readonly dark?: SplashScreenModeSpec;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
export interface DeploymentSpec {
|
|
288
|
-
target: DeploymentTarget;
|
|
289
|
-
monitoring: boolean;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
export interface DatabaseSpec {
|
|
293
|
-
provider: DatabaseProvider;
|
|
294
|
-
tier: DatabaseTier;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
export interface StorageSpec {
|
|
298
|
-
provider: StorageProvider;
|
|
299
|
-
buckets: string[];
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
export interface StateSpec {
|
|
303
|
-
readonly provider: StateProvider;
|
|
304
|
-
readonly persistence?: StatePersistenceMode;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
export interface AuthzSpec {
|
|
308
|
-
kind: AuthzKind;
|
|
309
|
-
engine: AuthzEngine;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
243
|
export interface AuthSignInSpec {
|
|
313
244
|
identifiers: AuthSignInIdentifier[];
|
|
314
245
|
}
|
|
@@ -327,34 +258,6 @@ export interface AuthProfileSpec {
|
|
|
327
258
|
updateStrategy?: AuthProfileUpdateStrategy;
|
|
328
259
|
}
|
|
329
260
|
|
|
330
|
-
export interface AuthSpec {
|
|
331
|
-
scope: AuthScope;
|
|
332
|
-
provider: AuthProvider;
|
|
333
|
-
authorization?: AuthzSpec;
|
|
334
|
-
flow?: AuthFlowConfig;
|
|
335
|
-
signIn?: AuthSignInSpec;
|
|
336
|
-
signUp?: AuthSignUpSpec;
|
|
337
|
-
oauth?: AuthOAuthConfig;
|
|
338
|
-
profile?: AuthProfileSpec;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
export interface NetworkingSpec {
|
|
342
|
-
domain?: string;
|
|
343
|
-
cdn: boolean;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
export interface InfraManifest {
|
|
347
|
-
deployment?: DeploymentSpec;
|
|
348
|
-
auth?: AuthSpec;
|
|
349
|
-
database?: DatabaseSpec;
|
|
350
|
-
storage?: StorageSpec;
|
|
351
|
-
state?: StateSpec;
|
|
352
|
-
networking?: NetworkingSpec;
|
|
353
|
-
apis?: ApiDefinitionList;
|
|
354
|
-
modules: string[];
|
|
355
|
-
modulesConfig?: Record<string, unknown>;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
261
|
export interface AppSettings {
|
|
359
262
|
localization: {
|
|
360
263
|
defaultLocale: string;
|
|
@@ -378,8 +281,10 @@ export interface AppManifest {
|
|
|
378
281
|
splashScreen?: SplashScreenSpec;
|
|
379
282
|
/** Studio-managed authoring media. Runtime/user uploads are intentionally separate. */
|
|
380
283
|
media?: MediaManifest;
|
|
381
|
-
/** App distribution desired state
|
|
284
|
+
/** App distribution desired state, separate from environment-specific infrastructure. */
|
|
382
285
|
deploy?: AppDeployManifest;
|
|
286
|
+
/** Application runtime state is not provisioned by Infra. */
|
|
287
|
+
state?: AppStateSpec;
|
|
383
288
|
infra: InfraManifest;
|
|
384
289
|
navigator: AppNavigatorManifest;
|
|
385
290
|
screens: Record<string, ScreenSpec>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../../src/appManifest/infra.ts"],"names":[],"mappings":"AAqCA,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAgBvD"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { AUTH_OAUTH_PROVIDER_IDS } from '../auth';
|
|
2
|
-
import { AUTH_PROFILE_CREATE_STRATEGIES, AUTH_PROFILE_PRIMARY_KEY_STRATEGIES, AUTH_PROFILE_UPDATE_STRATEGIES, AUTH_SCOPES, AUTH_SIGN_IN_IDENTIFIERS, AUTH_SIGN_UP_POLICIES, AUTHZ_ENGINES, AUTHZ_KINDS, DATABASE_TIERS, STATE_PERSISTENCE_MODES, STORAGE_PROVIDERS, } from '../types';
|
|
3
|
-
import { isApiDefinitionList } from './apis';
|
|
4
|
-
import { isIconSpec } from './icon';
|
|
5
|
-
import { isOptionalBoolean, isOptionalString, isRecord, isStringArray, isStringRecord, } from './shared';
|
|
6
|
-
const AUTH_OAUTH_PROVIDER_SET = new Set(AUTH_OAUTH_PROVIDER_IDS);
|
|
7
|
-
const AUTH_PROFILE_CREATE_STRATEGY_SET = new Set(AUTH_PROFILE_CREATE_STRATEGIES);
|
|
8
|
-
const AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET = new Set(AUTH_PROFILE_PRIMARY_KEY_STRATEGIES);
|
|
9
|
-
const AUTH_PROFILE_UPDATE_STRATEGY_SET = new Set(AUTH_PROFILE_UPDATE_STRATEGIES);
|
|
10
|
-
const AUTH_SCOPE_SET = new Set(AUTH_SCOPES);
|
|
11
|
-
const AUTH_SIGN_IN_IDENTIFIER_SET = new Set(AUTH_SIGN_IN_IDENTIFIERS);
|
|
12
|
-
const AUTH_SIGN_UP_POLICY_SET = new Set(AUTH_SIGN_UP_POLICIES);
|
|
13
|
-
const AUTHZ_ENGINE_SET = new Set(AUTHZ_ENGINES);
|
|
14
|
-
const AUTHZ_KIND_SET = new Set(AUTHZ_KINDS);
|
|
15
|
-
const DATABASE_TIER_SET = new Set(DATABASE_TIERS);
|
|
16
|
-
const STATE_PERSISTENCE_MODE_SET = new Set(STATE_PERSISTENCE_MODES);
|
|
17
|
-
const STORAGE_PROVIDER_SET = new Set(STORAGE_PROVIDERS);
|
|
18
|
-
export function isInfraManifest(value) {
|
|
19
|
-
return (isRecord(value) &&
|
|
20
|
-
(value.deployment === undefined || isDeploymentSpec(value.deployment)) &&
|
|
21
|
-
(value.auth === undefined || isAuthSpec(value.auth)) &&
|
|
22
|
-
(value.database === undefined || isDatabaseSpec(value.database)) &&
|
|
23
|
-
(value.storage === undefined || isStorageSpec(value.storage)) &&
|
|
24
|
-
(value.state === undefined || isStateSpec(value.state)) &&
|
|
25
|
-
(value.networking === undefined || isNetworkingSpec(value.networking)) &&
|
|
26
|
-
(value.apis === undefined || isApiDefinitionList(value.apis)) &&
|
|
27
|
-
Array.isArray(value.modules) &&
|
|
28
|
-
value.modules.every((moduleId) => typeof moduleId === 'string') &&
|
|
29
|
-
(value.modulesConfig === undefined || isRecord(value.modulesConfig)) &&
|
|
30
|
-
!('plugins' in value) &&
|
|
31
|
-
!('pluginsConfig' in value));
|
|
32
|
-
}
|
|
33
|
-
function isDeploymentSpec(value) {
|
|
34
|
-
return (isRecord(value) && typeof value.target === 'string' && typeof value.monitoring === 'boolean');
|
|
35
|
-
}
|
|
36
|
-
function isDatabaseSpec(value) {
|
|
37
|
-
return (isRecord(value) &&
|
|
38
|
-
typeof value.provider === 'string' &&
|
|
39
|
-
typeof value.tier === 'string' &&
|
|
40
|
-
DATABASE_TIER_SET.has(value.tier));
|
|
41
|
-
}
|
|
42
|
-
function isStorageSpec(value) {
|
|
43
|
-
return (isRecord(value) &&
|
|
44
|
-
typeof value.provider === 'string' &&
|
|
45
|
-
STORAGE_PROVIDER_SET.has(value.provider) &&
|
|
46
|
-
isStringArray(value.buckets));
|
|
47
|
-
}
|
|
48
|
-
function isStateSpec(value) {
|
|
49
|
-
return (isRecord(value) &&
|
|
50
|
-
typeof value.provider === 'string' &&
|
|
51
|
-
(value.persistence === undefined ||
|
|
52
|
-
(typeof value.persistence === 'string' && STATE_PERSISTENCE_MODE_SET.has(value.persistence))));
|
|
53
|
-
}
|
|
54
|
-
function isNetworkingSpec(value) {
|
|
55
|
-
return isRecord(value) && isOptionalString(value.domain) && typeof value.cdn === 'boolean';
|
|
56
|
-
}
|
|
57
|
-
function isAuthSpec(value) {
|
|
58
|
-
return (isRecord(value) &&
|
|
59
|
-
typeof value.scope === 'string' &&
|
|
60
|
-
AUTH_SCOPE_SET.has(value.scope) &&
|
|
61
|
-
typeof value.provider === 'string' &&
|
|
62
|
-
(value.authorization === undefined || isAuthzSpec(value.authorization)) &&
|
|
63
|
-
(value.flow === undefined || isAuthFlow(value.flow)) &&
|
|
64
|
-
(value.signIn === undefined || isAuthSignInSpec(value.signIn)) &&
|
|
65
|
-
(value.signUp === undefined || isAuthSignUpSpec(value.signUp)) &&
|
|
66
|
-
(value.oauth === undefined || isAuthOAuthConfig(value.oauth)) &&
|
|
67
|
-
(value.profile === undefined || isAuthProfileSpec(value.profile)));
|
|
68
|
-
}
|
|
69
|
-
function isAuthzSpec(value) {
|
|
70
|
-
return (isRecord(value) &&
|
|
71
|
-
typeof value.kind === 'string' &&
|
|
72
|
-
AUTHZ_KIND_SET.has(value.kind) &&
|
|
73
|
-
typeof value.engine === 'string' &&
|
|
74
|
-
AUTHZ_ENGINE_SET.has(value.engine));
|
|
75
|
-
}
|
|
76
|
-
function isAuthFlow(value) {
|
|
77
|
-
return (isRecord(value) &&
|
|
78
|
-
typeof value.signInRoute === 'string' &&
|
|
79
|
-
isOptionalString(value.signUpRoute) &&
|
|
80
|
-
isOptionalString(value.signOutRoute) &&
|
|
81
|
-
isOptionalString(value.forgotPasswordRoute) &&
|
|
82
|
-
isOptionalString(value.otpRoute) &&
|
|
83
|
-
typeof value.postSignInRoute === 'string' &&
|
|
84
|
-
isOptionalString(value.unauthorizedRoute));
|
|
85
|
-
}
|
|
86
|
-
function isAuthSignInSpec(value) {
|
|
87
|
-
return (isRecord(value) &&
|
|
88
|
-
Array.isArray(value.identifiers) &&
|
|
89
|
-
value.identifiers.every((identifier) => typeof identifier === 'string' && AUTH_SIGN_IN_IDENTIFIER_SET.has(identifier)));
|
|
90
|
-
}
|
|
91
|
-
function isAuthSignUpSpec(value) {
|
|
92
|
-
return (isRecord(value) &&
|
|
93
|
-
isStringArray(value.requiredFields) &&
|
|
94
|
-
(value.optionalFields === undefined || isStringArray(value.optionalFields)) &&
|
|
95
|
-
(value.signUpPolicy === undefined ||
|
|
96
|
-
(typeof value.signUpPolicy === 'string' && AUTH_SIGN_UP_POLICY_SET.has(value.signUpPolicy))));
|
|
97
|
-
}
|
|
98
|
-
function isAuthOAuthConfig(value) {
|
|
99
|
-
return (isRecord(value) &&
|
|
100
|
-
typeof value.enabled === 'boolean' &&
|
|
101
|
-
typeof value.callbackRoute === 'string' &&
|
|
102
|
-
Array.isArray(value.providers) &&
|
|
103
|
-
value.providers.every(isAuthOAuthProviderConfig));
|
|
104
|
-
}
|
|
105
|
-
function isAuthOAuthProviderConfig(value) {
|
|
106
|
-
return (isRecord(value) &&
|
|
107
|
-
typeof value.id === 'string' &&
|
|
108
|
-
(AUTH_OAUTH_PROVIDER_SET.has(value.id) || value.id.length > 0) &&
|
|
109
|
-
isOptionalString(value.label) &&
|
|
110
|
-
isOptionalBoolean(value.enabled) &&
|
|
111
|
-
(value.scopes === undefined || isStringArray(value.scopes)) &&
|
|
112
|
-
(value.queryParams === undefined || isStringRecord(value.queryParams)) &&
|
|
113
|
-
(value.icon === undefined || isIconSpec(value.icon)) &&
|
|
114
|
-
(value.credentialsRef === undefined || typeof value.credentialsRef === 'string'));
|
|
115
|
-
}
|
|
116
|
-
function isAuthProfileSpec(value) {
|
|
117
|
-
return (isRecord(value) &&
|
|
118
|
-
isStringArray(value.fields) &&
|
|
119
|
-
isOptionalString(value.table) &&
|
|
120
|
-
(value.primaryKey === undefined ||
|
|
121
|
-
(typeof value.primaryKey === 'string' &&
|
|
122
|
-
AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET.has(value.primaryKey))) &&
|
|
123
|
-
(value.createStrategy === undefined ||
|
|
124
|
-
(typeof value.createStrategy === 'string' &&
|
|
125
|
-
AUTH_PROFILE_CREATE_STRATEGY_SET.has(value.createStrategy))) &&
|
|
126
|
-
(value.updateStrategy === undefined ||
|
|
127
|
-
(typeof value.updateStrategy === 'string' &&
|
|
128
|
-
AUTH_PROFILE_UPDATE_STRATEGY_SET.has(value.updateStrategy))));
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=infra.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"infra.js","sourceRoot":"","sources":["../../src/appManifest/infra.ts"],"names":[],"mappings":"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","sourcesContent":["import { AUTH_OAUTH_PROVIDER_IDS } from '../auth';\nimport {\n AUTH_PROFILE_CREATE_STRATEGIES,\n AUTH_PROFILE_PRIMARY_KEY_STRATEGIES,\n AUTH_PROFILE_UPDATE_STRATEGIES,\n AUTH_SCOPES,\n AUTH_SIGN_IN_IDENTIFIERS,\n AUTH_SIGN_UP_POLICIES,\n AUTHZ_ENGINES,\n AUTHZ_KINDS,\n DATABASE_TIERS,\n STATE_PERSISTENCE_MODES,\n STORAGE_PROVIDERS,\n} from '../types';\nimport { isApiDefinitionList } from './apis';\nimport { isIconSpec } from './icon';\nimport {\n isOptionalBoolean,\n isOptionalString,\n isRecord,\n isStringArray,\n isStringRecord,\n} from './shared';\n\nconst AUTH_OAUTH_PROVIDER_SET = new Set<string>(AUTH_OAUTH_PROVIDER_IDS);\nconst AUTH_PROFILE_CREATE_STRATEGY_SET = new Set<string>(AUTH_PROFILE_CREATE_STRATEGIES);\nconst AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET = new Set<string>(AUTH_PROFILE_PRIMARY_KEY_STRATEGIES);\nconst AUTH_PROFILE_UPDATE_STRATEGY_SET = new Set<string>(AUTH_PROFILE_UPDATE_STRATEGIES);\nconst AUTH_SCOPE_SET = new Set<string>(AUTH_SCOPES);\nconst AUTH_SIGN_IN_IDENTIFIER_SET = new Set<string>(AUTH_SIGN_IN_IDENTIFIERS);\nconst AUTH_SIGN_UP_POLICY_SET = new Set<string>(AUTH_SIGN_UP_POLICIES);\nconst AUTHZ_ENGINE_SET = new Set<string>(AUTHZ_ENGINES);\nconst AUTHZ_KIND_SET = new Set<string>(AUTHZ_KINDS);\nconst DATABASE_TIER_SET = new Set<string>(DATABASE_TIERS);\nconst STATE_PERSISTENCE_MODE_SET = new Set<string>(STATE_PERSISTENCE_MODES);\nconst STORAGE_PROVIDER_SET = new Set<string>(STORAGE_PROVIDERS);\n\nexport function isInfraManifest(value: unknown): boolean {\n return (\n isRecord(value) &&\n (value.deployment === undefined || isDeploymentSpec(value.deployment)) &&\n (value.auth === undefined || isAuthSpec(value.auth)) &&\n (value.database === undefined || isDatabaseSpec(value.database)) &&\n (value.storage === undefined || isStorageSpec(value.storage)) &&\n (value.state === undefined || isStateSpec(value.state)) &&\n (value.networking === undefined || isNetworkingSpec(value.networking)) &&\n (value.apis === undefined || isApiDefinitionList(value.apis)) &&\n Array.isArray(value.modules) &&\n value.modules.every((moduleId) => typeof moduleId === 'string') &&\n (value.modulesConfig === undefined || isRecord(value.modulesConfig)) &&\n !('plugins' in value) &&\n !('pluginsConfig' in value)\n );\n}\n\nfunction isDeploymentSpec(value: unknown): boolean {\n return (\n isRecord(value) && typeof value.target === 'string' && typeof value.monitoring === 'boolean'\n );\n}\n\nfunction isDatabaseSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.provider === 'string' &&\n typeof value.tier === 'string' &&\n DATABASE_TIER_SET.has(value.tier)\n );\n}\n\nfunction isStorageSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.provider === 'string' &&\n STORAGE_PROVIDER_SET.has(value.provider) &&\n isStringArray(value.buckets)\n );\n}\n\nfunction isStateSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.provider === 'string' &&\n (value.persistence === undefined ||\n (typeof value.persistence === 'string' && STATE_PERSISTENCE_MODE_SET.has(value.persistence)))\n );\n}\n\nfunction isNetworkingSpec(value: unknown): boolean {\n return isRecord(value) && isOptionalString(value.domain) && typeof value.cdn === 'boolean';\n}\n\nfunction isAuthSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.scope === 'string' &&\n AUTH_SCOPE_SET.has(value.scope) &&\n typeof value.provider === 'string' &&\n (value.authorization === undefined || isAuthzSpec(value.authorization)) &&\n (value.flow === undefined || isAuthFlow(value.flow)) &&\n (value.signIn === undefined || isAuthSignInSpec(value.signIn)) &&\n (value.signUp === undefined || isAuthSignUpSpec(value.signUp)) &&\n (value.oauth === undefined || isAuthOAuthConfig(value.oauth)) &&\n (value.profile === undefined || isAuthProfileSpec(value.profile))\n );\n}\n\nfunction isAuthzSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.kind === 'string' &&\n AUTHZ_KIND_SET.has(value.kind) &&\n typeof value.engine === 'string' &&\n AUTHZ_ENGINE_SET.has(value.engine)\n );\n}\n\nfunction isAuthFlow(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.signInRoute === 'string' &&\n isOptionalString(value.signUpRoute) &&\n isOptionalString(value.signOutRoute) &&\n isOptionalString(value.forgotPasswordRoute) &&\n isOptionalString(value.otpRoute) &&\n typeof value.postSignInRoute === 'string' &&\n isOptionalString(value.unauthorizedRoute)\n );\n}\n\nfunction isAuthSignInSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n Array.isArray(value.identifiers) &&\n value.identifiers.every(\n (identifier) => typeof identifier === 'string' && AUTH_SIGN_IN_IDENTIFIER_SET.has(identifier),\n )\n );\n}\n\nfunction isAuthSignUpSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n isStringArray(value.requiredFields) &&\n (value.optionalFields === undefined || isStringArray(value.optionalFields)) &&\n (value.signUpPolicy === undefined ||\n (typeof value.signUpPolicy === 'string' && AUTH_SIGN_UP_POLICY_SET.has(value.signUpPolicy)))\n );\n}\n\nfunction isAuthOAuthConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.enabled === 'boolean' &&\n typeof value.callbackRoute === 'string' &&\n Array.isArray(value.providers) &&\n value.providers.every(isAuthOAuthProviderConfig)\n );\n}\n\nfunction isAuthOAuthProviderConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n (AUTH_OAUTH_PROVIDER_SET.has(value.id) || value.id.length > 0) &&\n isOptionalString(value.label) &&\n isOptionalBoolean(value.enabled) &&\n (value.scopes === undefined || isStringArray(value.scopes)) &&\n (value.queryParams === undefined || isStringRecord(value.queryParams)) &&\n (value.icon === undefined || isIconSpec(value.icon)) &&\n (value.credentialsRef === undefined || typeof value.credentialsRef === 'string')\n );\n}\n\nfunction isAuthProfileSpec(value: unknown): boolean {\n return (\n isRecord(value) &&\n isStringArray(value.fields) &&\n isOptionalString(value.table) &&\n (value.primaryKey === undefined ||\n (typeof value.primaryKey === 'string' &&\n AUTH_PROFILE_PRIMARY_KEY_STRATEGY_SET.has(value.primaryKey))) &&\n (value.createStrategy === undefined ||\n (typeof value.createStrategy === 'string' &&\n AUTH_PROFILE_CREATE_STRATEGY_SET.has(value.createStrategy))) &&\n (value.updateStrategy === undefined ||\n (typeof value.updateStrategy === 'string' &&\n AUTH_PROFILE_UPDATE_STRATEGY_SET.has(value.updateStrategy)))\n );\n}\n"]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
2
|
-
export declare function isOptionalString(value: unknown): boolean;
|
|
3
|
-
export declare function isOptionalNumber(value: unknown): boolean;
|
|
4
|
-
export declare function isOptionalBoolean(value: unknown): boolean;
|
|
5
|
-
export declare function isStringArray(value: unknown): value is string[];
|
|
6
|
-
export declare function isStringRecord(value: unknown): boolean;
|
|
7
|
-
export declare function isManifestValue(value: unknown): boolean;
|
|
8
|
-
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/appManifest/shared.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEtD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAevD"}
|