@ankhorage/contracts 14.0.0 → 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 +31 -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.d.ts +3 -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 +7 -70
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -9
- package/dist/types.js.map +1 -1
- package/package.json +11 -2
- 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.test.ts +9 -5
- package/src/appManifest.ts +3 -107
- 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 -19
- 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 +7 -87
- 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,36 @@
|
|
|
1
|
+
import { INFRA_ADAPTER_CATALOG } from './constants';
|
|
2
|
+
import { isInfraAdapterDescriptor } from './isInfraAdapterDescriptor';
|
|
3
|
+
/** Validate supplied installed descriptors without imports or filesystem access; only selected packages matter. */
|
|
4
|
+
export function validateInfraAdapterSelection(environment, installed) {
|
|
5
|
+
const ids = new Set([
|
|
6
|
+
environment.deployment.compute.provider,
|
|
7
|
+
environment.deployment.runtime.provider,
|
|
8
|
+
environment.database?.provider,
|
|
9
|
+
environment.objectStorage?.provider,
|
|
10
|
+
environment.auth?.provider,
|
|
11
|
+
environment.authz?.provider,
|
|
12
|
+
environment.secretStore?.provider,
|
|
13
|
+
]);
|
|
14
|
+
const selected = Object.values(INFRA_ADAPTER_CATALOG).filter((entry) => ids.has(entry.id));
|
|
15
|
+
const descriptors = installed.filter(isInfraAdapterDescriptor);
|
|
16
|
+
const diagnostics = selected.flatMap((entry) => {
|
|
17
|
+
const matches = descriptors.filter((descriptor) => descriptor.id === entry.id);
|
|
18
|
+
return matches.length === 1
|
|
19
|
+
? []
|
|
20
|
+
: [
|
|
21
|
+
{
|
|
22
|
+
severity: 'error',
|
|
23
|
+
code: 'adapter_unavailable',
|
|
24
|
+
message: `Selected adapter ${entry.id} requires exactly one installed ${entry.package} descriptor matching Contracts config version ${entry.configVersion}; found ${matches.length}.`,
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
});
|
|
28
|
+
return diagnostics.length > 0
|
|
29
|
+
? { ok: false, diagnostics }
|
|
30
|
+
: {
|
|
31
|
+
ok: true,
|
|
32
|
+
value: descriptors.filter((descriptor) => ids.has(descriptor.id)),
|
|
33
|
+
diagnostics,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=validateInfraAdapterSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateInfraAdapterSelection.js","sourceRoot":"","sources":["../../src/infra/validateInfraAdapterSelection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,mHAAmH;AACnH,MAAM,UAAU,6BAA6B,CAC3C,WAAiC,EACjC,SAA6B;IAE7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;QAClB,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ;QACvC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ;QACvC,WAAW,CAAC,QAAQ,EAAE,QAAQ;QAC9B,WAAW,CAAC,aAAa,EAAE,QAAQ;QACnC,WAAW,CAAC,IAAI,EAAE,QAAQ;QAC1B,WAAW,CAAC,KAAK,EAAE,QAAQ;QAC3B,WAAW,CAAC,WAAW,EAAE,QAAQ;KAClC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC/D,MAAM,WAAW,GAA+B,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACzE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE;oBACE,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,oBAAoB,KAAK,CAAC,EAAE,mCAAmC,KAAK,CAAC,OAAO,iDAAiD,KAAK,CAAC,aAAa,WAAW,OAAO,CAAC,MAAM,GAAG;iBACtL;aACF,CAAC;IACR,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC;QAC3B,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;QAC5B,CAAC,CAAC;YACE,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACjE,WAAW;SACZ,CAAC;AACR,CAAC","sourcesContent":["import type { InfraAdapterDescriptor } from '../types/infraAdapters';\nimport type { InfraDiagnostic, InfraResult } from '../types/infraLifecycle';\nimport type { InfraEnvironmentSpec } from '../types/infraManifest';\nimport { INFRA_ADAPTER_CATALOG } from './constants';\nimport { isInfraAdapterDescriptor } from './isInfraAdapterDescriptor';\n\n/** Validate supplied installed descriptors without imports or filesystem access; only selected packages matter. */\nexport function validateInfraAdapterSelection(\n environment: InfraEnvironmentSpec,\n installed: readonly unknown[],\n): InfraResult<readonly InfraAdapterDescriptor[]> {\n const ids = new Set([\n environment.deployment.compute.provider,\n environment.deployment.runtime.provider,\n environment.database?.provider,\n environment.objectStorage?.provider,\n environment.auth?.provider,\n environment.authz?.provider,\n environment.secretStore?.provider,\n ]);\n const selected = Object.values(INFRA_ADAPTER_CATALOG).filter((entry) => ids.has(entry.id));\n const descriptors = installed.filter(isInfraAdapterDescriptor);\n const diagnostics: readonly InfraDiagnostic[] = selected.flatMap((entry) => {\n const matches = descriptors.filter((descriptor) => descriptor.id === entry.id);\n return matches.length === 1\n ? []\n : [\n {\n severity: 'error',\n code: 'adapter_unavailable',\n message: `Selected adapter ${entry.id} requires exactly one installed ${entry.package} descriptor matching Contracts config version ${entry.configVersion}; found ${matches.length}.`,\n },\n ];\n });\n return diagnostics.length > 0\n ? { ok: false, diagnostics }\n : {\n ok: true,\n value: descriptors.filter((descriptor) => ids.has(descriptor.id)),\n diagnostics,\n };\n}\n"]}
|
package/dist/infra.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Canonical standalone infrastructure contracts, catalog and side-effect-free validation. */
|
|
2
|
+
export { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infra/constants';
|
|
3
|
+
export { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor';
|
|
4
|
+
export { isInfraAuthSpec } from './infra/isInfraAuthSpec';
|
|
5
|
+
export { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec';
|
|
6
|
+
export { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec';
|
|
7
|
+
export { isInfraManifest } from './infra/isInfraManifest';
|
|
8
|
+
export { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec';
|
|
9
|
+
export { parseInfraManifest } from './infra/parseInfraManifest';
|
|
10
|
+
export { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection';
|
|
11
|
+
export type * from './types/infraAdapters';
|
|
12
|
+
export type * from './types/infraLifecycle';
|
|
13
|
+
export type * from './types/infraManifest';
|
|
14
|
+
export type * from './types/infraSecrets';
|
|
15
|
+
export type * from './types/infraWorkload';
|
|
16
|
+
//# sourceMappingURL=infra.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../src/infra.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,mBAAmB,uBAAuB,CAAC;AAC3C,mBAAmB,wBAAwB,CAAC;AAC5C,mBAAmB,uBAAuB,CAAC;AAC3C,mBAAmB,sBAAsB,CAAC;AAC1C,mBAAmB,uBAAuB,CAAC"}
|
package/dist/infra.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Canonical standalone infrastructure contracts, catalog and side-effect-free validation. */
|
|
2
|
+
export { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infra/constants';
|
|
3
|
+
export { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor';
|
|
4
|
+
export { isInfraAuthSpec } from './infra/isInfraAuthSpec';
|
|
5
|
+
export { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec';
|
|
6
|
+
export { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec';
|
|
7
|
+
export { isInfraManifest } from './infra/isInfraManifest';
|
|
8
|
+
export { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec';
|
|
9
|
+
export { parseInfraManifest } from './infra/parseInfraManifest';
|
|
10
|
+
export { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection';
|
|
11
|
+
//# sourceMappingURL=infra.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra.js","sourceRoot":"","sources":["../src/infra.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC","sourcesContent":["/** Canonical standalone infrastructure contracts, catalog and side-effect-free validation. */\nexport { INFRA_ADAPTER_CATALOG, INFRA_RUNTIME_COMPATIBILITY } from './infra/constants';\nexport { isInfraAdapterDescriptor } from './infra/isInfraAdapterDescriptor';\nexport { isInfraAuthSpec } from './infra/isInfraAuthSpec';\nexport { isInfraDeploymentSpec } from './infra/isInfraDeploymentSpec';\nexport { isInfraEnvironmentSpec } from './infra/isInfraEnvironmentSpec';\nexport { isInfraManifest } from './infra/isInfraManifest';\nexport { isInfraWorkloadSpec } from './infra/isInfraWorkloadSpec';\nexport { parseInfraManifest } from './infra/parseInfraManifest';\nexport { validateInfraAdapterSelection } from './infra/validateInfraAdapterSelection';\nexport type * from './types/infraAdapters';\nexport type * from './types/infraLifecycle';\nexport type * from './types/infraManifest';\nexport type * from './types/infraSecrets';\nexport type * from './types/infraWorkload';\n"]}
|
package/dist/media.d.ts
CHANGED
|
@@ -2,19 +2,19 @@ export declare const MEDIA_ASSET_KINDS: readonly ["image", "audio", "video", "fo
|
|
|
2
2
|
export type MediaAssetKind = (typeof MEDIA_ASSET_KINDS)[number];
|
|
3
3
|
export interface MediaStorageSource {
|
|
4
4
|
readonly kind: 'storage';
|
|
5
|
-
|
|
5
|
+
/*** Optional logical storage connection identifier for future multi-storage apps. */
|
|
6
6
|
readonly storageId?: string;
|
|
7
7
|
readonly bucket: string;
|
|
8
8
|
readonly path: string;
|
|
9
9
|
}
|
|
10
10
|
export interface MediaUrlSource {
|
|
11
11
|
readonly kind: 'url';
|
|
12
|
-
|
|
12
|
+
/*** Stable remote URL. Transient/local URL schemes are not canonical media sources. */
|
|
13
13
|
readonly url: string;
|
|
14
14
|
}
|
|
15
15
|
export interface MediaBundledSource {
|
|
16
16
|
readonly kind: 'bundled';
|
|
17
|
-
|
|
17
|
+
/*** App-relative bundled asset path resolved by the generated/runtime host. */
|
|
18
18
|
readonly path: string;
|
|
19
19
|
}
|
|
20
20
|
export type MediaAssetSource = MediaStorageSource | MediaUrlSource | MediaBundledSource;
|
|
@@ -26,7 +26,7 @@ export interface MediaAssetMetadata {
|
|
|
26
26
|
readonly height?: number;
|
|
27
27
|
readonly durationMs?: number;
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
/*** Canonical Studio-managed authoring media entry. */
|
|
30
30
|
export interface MediaAsset {
|
|
31
31
|
readonly id: string;
|
|
32
32
|
readonly name: string;
|
|
@@ -36,13 +36,14 @@ export interface MediaAsset {
|
|
|
36
36
|
readonly metadata?: MediaAssetMetadata;
|
|
37
37
|
}
|
|
38
38
|
export type MediaAssetRegistry = Readonly<Record<string, MediaAsset>>;
|
|
39
|
-
|
|
39
|
+
/*** App-authoring media pool. Runtime/user-generated uploads do not belong here. */
|
|
40
40
|
export interface MediaManifest {
|
|
41
41
|
readonly assets: MediaAssetRegistry;
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
/*** Stable component/property reference to one entry in `AppManifest.media.assets`. */
|
|
44
44
|
export interface MediaAssetReference {
|
|
45
45
|
readonly mediaId: string;
|
|
46
46
|
}
|
|
47
|
+
/*** Validate an authored media reference with exactly one enumerable key and a non-empty media ID. */
|
|
47
48
|
export declare function isMediaAssetReference(value: unknown): value is MediaAssetReference;
|
|
48
49
|
//# sourceMappingURL=media.d.ts.map
|
package/dist/media.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,sDAAuD,CAAC;AAEtF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,uFAAuF;IACvF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAExF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAEtE,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAED,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,sGAAsG;AACtG,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAOlF"}
|
package/dist/media.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { isRecord } from '@ankhorage/utility/object';
|
|
2
|
+
import { isNonEmptyString } from '@ankhorage/utility/string';
|
|
1
3
|
export const MEDIA_ASSET_KINDS = ['image', 'audio', 'video', 'font', 'file'];
|
|
4
|
+
/*** Validate an authored media reference with exactly one enumerable key and a non-empty media ID. */
|
|
2
5
|
export function isMediaAssetReference(value) {
|
|
3
|
-
return (
|
|
4
|
-
value !== null &&
|
|
5
|
-
!Array.isArray(value) &&
|
|
6
|
+
return (isRecord(value) &&
|
|
6
7
|
Object.keys(value).length === 1 &&
|
|
7
8
|
'mediaId' in value &&
|
|
8
|
-
|
|
9
|
-
value.mediaId.trim().length > 0);
|
|
9
|
+
isNonEmptyString(value.mediaId));
|
|
10
10
|
}
|
|
11
11
|
//# sourceMappingURL=media.js.map
|
package/dist/media.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAyDtF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CACL,
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAyDtF,sGAAsG;AACtG,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAC/B,SAAS,IAAI,KAAK;QAClB,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAChC,CAAC;AACJ,CAAC","sourcesContent":["import { isRecord } from '@ankhorage/utility/object';\nimport { isNonEmptyString } from '@ankhorage/utility/string';\n\nexport const MEDIA_ASSET_KINDS = ['image', 'audio', 'video', 'font', 'file'] as const;\n\nexport type MediaAssetKind = (typeof MEDIA_ASSET_KINDS)[number];\n\nexport interface MediaStorageSource {\n readonly kind: 'storage';\n /*** Optional logical storage connection identifier for future multi-storage apps. */\n readonly storageId?: string;\n readonly bucket: string;\n readonly path: string;\n}\n\nexport interface MediaUrlSource {\n readonly kind: 'url';\n /*** Stable remote URL. Transient/local URL schemes are not canonical media sources. */\n readonly url: string;\n}\n\nexport interface MediaBundledSource {\n readonly kind: 'bundled';\n /*** App-relative bundled asset path resolved by the generated/runtime host. */\n readonly path: string;\n}\n\nexport type MediaAssetSource = MediaStorageSource | MediaUrlSource | MediaBundledSource;\n\nexport interface MediaAssetMetadata {\n readonly originalFileName?: string;\n readonly sizeBytes?: number;\n readonly createdAt?: string;\n readonly width?: number;\n readonly height?: number;\n readonly durationMs?: number;\n}\n\n/*** Canonical Studio-managed authoring media entry. */\nexport interface MediaAsset {\n readonly id: string;\n readonly name: string;\n readonly kind: MediaAssetKind;\n readonly source: MediaAssetSource;\n readonly contentType?: string;\n readonly metadata?: MediaAssetMetadata;\n}\n\nexport type MediaAssetRegistry = Readonly<Record<string, MediaAsset>>;\n\n/*** App-authoring media pool. Runtime/user-generated uploads do not belong here. */\nexport interface MediaManifest {\n readonly assets: MediaAssetRegistry;\n}\n\n/*** Stable component/property reference to one entry in `AppManifest.media.assets`. */\nexport interface MediaAssetReference {\n readonly mediaId: string;\n}\n\n/*** Validate an authored media reference with exactly one enumerable key and a non-empty media ID. */\nexport function isMediaAssetReference(value: unknown): value is MediaAssetReference {\n return (\n isRecord(value) &&\n Object.keys(value).length === 1 &&\n 'mediaId' in value &&\n isNonEmptyString(value.mediaId)\n );\n}\n"]}
|
package/dist/state.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/** Legend currently implements in-memory state only; unsupported persistence cannot be selected. */
|
|
2
|
+
export interface AppStateSpec {
|
|
3
|
+
readonly provider: 'legend';
|
|
4
|
+
readonly persistence?: false;
|
|
5
|
+
}
|
|
1
6
|
export type StatePrimitive = string | number | boolean | null;
|
|
2
7
|
export type StateValue = StatePrimitive | readonly StateValue[] | {
|
|
3
8
|
readonly [key: string]: StateValue;
|
package/dist/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE9D,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,SAAS,UAAU,EAAE,GACrB;IACE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;CACpC,CAAC;AAEN,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,YAAY,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAC7D;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CACnB,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEN,MAAM,MAAM,WAAW,CAAC,MAAM,GAAG,IAAI,IACjC,YAAY,CAAC,MAAM,CAAC,GACpB;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC,CAAC;AAEN,MAAM,WAAW,aAAa,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU;IACnE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,IAAI,CAClE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,KAC5B,IAAI,CAAC;AAEV,MAAM,WAAW,iBAAiB;IAChC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAEhD,GAAG,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,EAAE,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9F,GAAG,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IACzF,SAAS,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,EAC9C,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAC9B,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAClC,MAAM,CAAC,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC;CACvC"}
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;CAC9B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE9D,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,SAAS,UAAU,EAAE,GACrB;IACE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;CACpC,CAAC;AAEN,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,YAAY,CAAC,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAC7D;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CACnB,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEN,MAAM,MAAM,WAAW,CAAC,MAAM,GAAG,IAAI,IACjC,YAAY,CAAC,MAAM,CAAC,GACpB;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC,CAAC;AAEN,MAAM,WAAW,aAAa,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU;IACnE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,IAAI,CAClE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,KAC5B,IAAI,CAAC;AAEV,MAAM,WAAW,iBAAiB;IAChC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAEhD,GAAG,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,EAAE,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9F,GAAG,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IACzF,SAAS,CAAC,MAAM,SAAS,UAAU,GAAG,UAAU,EAC9C,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAC9B,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAClC,MAAM,CAAC,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC;CACvC"}
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"","sourcesContent":["
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"","sourcesContent":["/** Legend currently implements in-memory state only; unsupported persistence cannot be selected. */\nexport interface AppStateSpec {\n readonly provider: 'legend';\n readonly persistence?: false;\n}\n\nexport type StatePrimitive = string | number | boolean | null;\n\nexport type StateValue =\n | StatePrimitive\n | readonly StateValue[]\n | {\n readonly [key: string]: StateValue;\n };\n\nexport type StatePath = string | readonly string[];\n\nexport interface StateAdapterCapabilities {\n readonly subscriptions: boolean;\n readonly computed: boolean;\n readonly persistence: boolean;\n}\n\nexport interface StateAdapterError {\n readonly code: string;\n readonly message: string;\n readonly cause?: unknown;\n}\n\nexport type StateSuccess<TValue = void> = [TValue] extends [void]\n ? {\n readonly ok: true;\n }\n : {\n readonly ok: true;\n readonly data: TValue;\n };\n\nexport type StateResult<TValue = void> =\n | StateSuccess<TValue>\n | {\n readonly ok: false;\n readonly error: StateAdapterError;\n };\n\nexport interface StateSnapshot<TValue extends StateValue = StateValue> {\n readonly path: StatePath;\n readonly value: TValue | undefined;\n}\n\nexport type StateListener<TValue extends StateValue = StateValue> = (\n snapshot: StateSnapshot<TValue>,\n) => void;\n\nexport interface StateSubscription {\n unsubscribe(): Promise<void> | void;\n}\n\nexport interface StateAdapter {\n readonly capabilities: StateAdapterCapabilities;\n\n get<TValue extends StateValue = StateValue>(path: StatePath): StateResult<TValue | undefined>;\n set<TValue extends StateValue = StateValue>(path: StatePath, value: TValue): StateResult;\n subscribe<TValue extends StateValue = StateValue>(\n path: StatePath,\n listener: StateListener<TValue>,\n ): StateResult<StateSubscription>;\n delete?(path: StatePath): StateResult;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appManifest.d.ts","sourceRoot":"","sources":["../../src/types/appManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,sBAAsB,GAC9B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appManifest.js","sourceRoot":"","sources":["../../src/types/appManifest.ts"],"names":[],"mappings":"","sourcesContent":["import type { AppManifest } from '../types';\n\nexport type AppManifestParseResult =\n | { readonly ok: true; readonly manifest: AppManifest }\n | { readonly ok: false; readonly message: string };\n"]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { AppEnvironmentId } from '../environments';
|
|
2
|
+
import type { INFRA_ADAPTER_CATALOG } from '../infra/constants';
|
|
3
|
+
import type { InfraDestroyRequest, InfraGeneratedArtifact, InfraLedger, InfraOutput, InfraOwnedResource, InfraPlanAction, InfraResourceStatus, InfraResult } from './infraLifecycle';
|
|
4
|
+
import type { InfraAdapterId, InfraComputeProviderId, InfraComputeSelection, InfraEnvironmentSpec, InfraRuntimeProviderId, InfraRuntimeSelection } from './infraManifest';
|
|
5
|
+
import type { InfraControlPlaneCredentialRef, InfraSecretReference } from './infraSecrets';
|
|
6
|
+
import type { InfraWorkloadSpec } from './infraWorkload';
|
|
7
|
+
/** Package exports must match this exact catalog entry; optional operations are advertised explicitly. */
|
|
8
|
+
export type InfraAdapterDescriptor<P extends InfraAdapterId = InfraAdapterId> = {
|
|
9
|
+
[K in P]: (typeof INFRA_ADAPTER_CATALOG)[K] & {
|
|
10
|
+
readonly operations?: readonly ('suspend' | 'resume' | 'generate' | 'diagnostics')[];
|
|
11
|
+
};
|
|
12
|
+
}[P];
|
|
13
|
+
export type InfraComputeTarget = {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly os: 'linux' | 'darwin' | 'windows';
|
|
16
|
+
readonly architecture: 'amd64' | 'arm64';
|
|
17
|
+
} & ({
|
|
18
|
+
readonly kind: 'local-host';
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: 'ssh-host';
|
|
21
|
+
readonly host: string;
|
|
22
|
+
readonly port: number;
|
|
23
|
+
readonly user: string;
|
|
24
|
+
readonly credential: InfraControlPlaneCredentialRef;
|
|
25
|
+
/** Expected host key supplied by the compute owner; runtimes must verify host authenticity. */
|
|
26
|
+
readonly hostKeyFingerprint: string;
|
|
27
|
+
});
|
|
28
|
+
/** Trusted execution-only ports. Implementations must not serialize resolved credential values. */
|
|
29
|
+
export interface InfraExecutionContext {
|
|
30
|
+
readonly projectId: string;
|
|
31
|
+
readonly environment: AppEnvironmentId;
|
|
32
|
+
readonly desired: InfraEnvironmentSpec;
|
|
33
|
+
readonly previous?: InfraLedger;
|
|
34
|
+
readonly signal?: AbortSignal;
|
|
35
|
+
readonly credentials: {
|
|
36
|
+
resolveAsync(reference: InfraControlPlaneCredentialRef): Promise<InfraResult<Readonly<Record<string, string>>>>;
|
|
37
|
+
};
|
|
38
|
+
readonly secrets: {
|
|
39
|
+
resolveAsync(reference: InfraSecretReference): Promise<InfraResult<string>>;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface InfraReconcileResult {
|
|
43
|
+
readonly resources: readonly InfraOwnedResource[];
|
|
44
|
+
readonly outputs: readonly InfraOutput[];
|
|
45
|
+
}
|
|
46
|
+
export interface InfraComputeAdapter<P extends InfraComputeProviderId = InfraComputeProviderId> {
|
|
47
|
+
readonly descriptor: InfraAdapterDescriptor<P>;
|
|
48
|
+
/** Read-only prerequisites, config and control-plane credential validation. */
|
|
49
|
+
validateAsync(context: InfraExecutionContext, selection: InfraComputeSelection<P>): Promise<InfraResult<null>>;
|
|
50
|
+
planAsync(context: InfraExecutionContext, selection: InfraComputeSelection<P>): Promise<InfraResult<readonly InfraPlanAction[]>>;
|
|
51
|
+
ensureAsync(context: InfraExecutionContext, selection: InfraComputeSelection<P>): Promise<InfraResult<InfraReconcileResult & {
|
|
52
|
+
readonly targets: readonly InfraComputeTarget[];
|
|
53
|
+
}>>;
|
|
54
|
+
statusAsync(context: InfraExecutionContext): Promise<InfraResult<readonly InfraResourceStatus[]>>;
|
|
55
|
+
destroyAsync(context: InfraExecutionContext, request: InfraDestroyRequest): Promise<InfraResult<InfraReconcileResult>>;
|
|
56
|
+
}
|
|
57
|
+
export interface InfraRuntimeDesiredState<P extends InfraRuntimeProviderId = InfraRuntimeProviderId> {
|
|
58
|
+
readonly selection: InfraRuntimeSelection<P>;
|
|
59
|
+
readonly targets: readonly InfraComputeTarget[];
|
|
60
|
+
readonly workloads: readonly InfraWorkloadSpec[];
|
|
61
|
+
}
|
|
62
|
+
export interface InfraRuntimeAdapter<P extends InfraRuntimeProviderId = InfraRuntimeProviderId> {
|
|
63
|
+
readonly descriptor: InfraAdapterDescriptor<P>;
|
|
64
|
+
/** Read-only prerequisites and desired-state validation; no cluster creation. */
|
|
65
|
+
validateAsync(context: InfraExecutionContext, desired: InfraRuntimeDesiredState<P>): Promise<InfraResult<null>>;
|
|
66
|
+
planAsync(context: InfraExecutionContext, desired: InfraRuntimeDesiredState<P>): Promise<InfraResult<readonly InfraPlanAction[]>>;
|
|
67
|
+
ensureAsync(context: InfraExecutionContext, desired: InfraRuntimeDesiredState<P>): Promise<InfraResult<InfraReconcileResult>>;
|
|
68
|
+
statusAsync(context: InfraExecutionContext): Promise<InfraResult<readonly InfraResourceStatus[]>>;
|
|
69
|
+
suspendAsync(context: InfraExecutionContext): Promise<InfraResult<InfraReconcileResult>>;
|
|
70
|
+
destroyAsync(context: InfraExecutionContext, request: InfraDestroyRequest): Promise<InfraResult<InfraReconcileResult>>;
|
|
71
|
+
generateAsync?(context: InfraExecutionContext, desired: InfraRuntimeDesiredState<P>): Promise<InfraResult<readonly InfraGeneratedArtifact[]>>;
|
|
72
|
+
}
|
|
73
|
+
/** A service can own several capabilities but contributes one deduplicated platform instance. */
|
|
74
|
+
export interface InfraServiceAdapter {
|
|
75
|
+
readonly descriptor: InfraAdapterDescriptor<'supabase' | 'cerbos' | 'r2' | 'supabase-vault'>;
|
|
76
|
+
/** Read-only service config, bootstrap credentials and dependency validation. */
|
|
77
|
+
validateAsync(context: InfraExecutionContext): Promise<InfraResult<null>>;
|
|
78
|
+
planAsync(context: InfraExecutionContext): Promise<InfraResult<readonly InfraPlanAction[]>>;
|
|
79
|
+
desiredWorkloadsAsync(context: InfraExecutionContext): Promise<InfraResult<readonly InfraWorkloadSpec[]>>;
|
|
80
|
+
reconcileAsync(context: InfraExecutionContext, runtimeOutputs: readonly InfraOutput[]): Promise<InfraResult<InfraReconcileResult>>;
|
|
81
|
+
statusAsync(context: InfraExecutionContext): Promise<InfraResult<readonly InfraResourceStatus[]>>;
|
|
82
|
+
destroyAsync(context: InfraExecutionContext, request: InfraDestroyRequest): Promise<InfraResult<InfraReconcileResult>>;
|
|
83
|
+
suspendAsync?(context: InfraExecutionContext): Promise<InfraResult<InfraReconcileResult>>;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=infraAdapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infraAdapters.d.ts","sourceRoot":"","sources":["../../src/types/infraAdapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infraAdapters.js","sourceRoot":"","sources":["../../src/types/infraAdapters.ts"],"names":[],"mappings":"","sourcesContent":["import type { AppEnvironmentId } from '../environments';\nimport type { INFRA_ADAPTER_CATALOG } from '../infra/constants';\nimport type {\n InfraDestroyRequest,\n InfraGeneratedArtifact,\n InfraLedger,\n InfraOutput,\n InfraOwnedResource,\n InfraPlanAction,\n InfraResourceStatus,\n InfraResult,\n} from './infraLifecycle';\nimport type {\n InfraAdapterId,\n InfraComputeProviderId,\n InfraComputeSelection,\n InfraEnvironmentSpec,\n InfraRuntimeProviderId,\n InfraRuntimeSelection,\n} from './infraManifest';\nimport type { InfraControlPlaneCredentialRef, InfraSecretReference } from './infraSecrets';\nimport type { InfraWorkloadSpec } from './infraWorkload';\n\n/** Package exports must match this exact catalog entry; optional operations are advertised explicitly. */\nexport type InfraAdapterDescriptor<P extends InfraAdapterId = InfraAdapterId> = {\n [K in P]: (typeof INFRA_ADAPTER_CATALOG)[K] & {\n readonly operations?: readonly ('suspend' | 'resume' | 'generate' | 'diagnostics')[];\n };\n}[P];\n\nexport type InfraComputeTarget = {\n readonly id: string;\n readonly os: 'linux' | 'darwin' | 'windows';\n readonly architecture: 'amd64' | 'arm64';\n} & (\n | { readonly kind: 'local-host' }\n | {\n readonly kind: 'ssh-host';\n readonly host: string;\n readonly port: number;\n readonly user: string;\n readonly credential: InfraControlPlaneCredentialRef;\n /** Expected host key supplied by the compute owner; runtimes must verify host authenticity. */\n readonly hostKeyFingerprint: string;\n }\n);\n\n/** Trusted execution-only ports. Implementations must not serialize resolved credential values. */\nexport interface InfraExecutionContext {\n readonly projectId: string;\n readonly environment: AppEnvironmentId;\n readonly desired: InfraEnvironmentSpec;\n readonly previous?: InfraLedger;\n readonly signal?: AbortSignal;\n readonly credentials: {\n resolveAsync(\n reference: InfraControlPlaneCredentialRef,\n ): Promise<InfraResult<Readonly<Record<string, string>>>>;\n };\n readonly secrets: {\n resolveAsync(reference: InfraSecretReference): Promise<InfraResult<string>>;\n };\n}\n\nexport interface InfraReconcileResult {\n readonly resources: readonly InfraOwnedResource[];\n readonly outputs: readonly InfraOutput[];\n}\n\nexport interface InfraComputeAdapter<P extends InfraComputeProviderId = InfraComputeProviderId> {\n readonly descriptor: InfraAdapterDescriptor<P>;\n /** Read-only prerequisites, config and control-plane credential validation. */\n validateAsync(\n context: InfraExecutionContext,\n selection: InfraComputeSelection<P>,\n ): Promise<InfraResult<null>>;\n planAsync(\n context: InfraExecutionContext,\n selection: InfraComputeSelection<P>,\n ): Promise<InfraResult<readonly InfraPlanAction[]>>;\n ensureAsync(\n context: InfraExecutionContext,\n selection: InfraComputeSelection<P>,\n ): Promise<\n InfraResult<InfraReconcileResult & { readonly targets: readonly InfraComputeTarget[] }>\n >;\n statusAsync(context: InfraExecutionContext): Promise<InfraResult<readonly InfraResourceStatus[]>>;\n destroyAsync(\n context: InfraExecutionContext,\n request: InfraDestroyRequest,\n ): Promise<InfraResult<InfraReconcileResult>>;\n}\n\nexport interface InfraRuntimeDesiredState<\n P extends InfraRuntimeProviderId = InfraRuntimeProviderId,\n> {\n readonly selection: InfraRuntimeSelection<P>;\n readonly targets: readonly InfraComputeTarget[];\n readonly workloads: readonly InfraWorkloadSpec[];\n}\n\nexport interface InfraRuntimeAdapter<P extends InfraRuntimeProviderId = InfraRuntimeProviderId> {\n readonly descriptor: InfraAdapterDescriptor<P>;\n /** Read-only prerequisites and desired-state validation; no cluster creation. */\n validateAsync(\n context: InfraExecutionContext,\n desired: InfraRuntimeDesiredState<P>,\n ): Promise<InfraResult<null>>;\n planAsync(\n context: InfraExecutionContext,\n desired: InfraRuntimeDesiredState<P>,\n ): Promise<InfraResult<readonly InfraPlanAction[]>>;\n ensureAsync(\n context: InfraExecutionContext,\n desired: InfraRuntimeDesiredState<P>,\n ): Promise<InfraResult<InfraReconcileResult>>;\n statusAsync(context: InfraExecutionContext): Promise<InfraResult<readonly InfraResourceStatus[]>>;\n suspendAsync(context: InfraExecutionContext): Promise<InfraResult<InfraReconcileResult>>;\n destroyAsync(\n context: InfraExecutionContext,\n request: InfraDestroyRequest,\n ): Promise<InfraResult<InfraReconcileResult>>;\n generateAsync?(\n context: InfraExecutionContext,\n desired: InfraRuntimeDesiredState<P>,\n ): Promise<InfraResult<readonly InfraGeneratedArtifact[]>>;\n}\n\n/** A service can own several capabilities but contributes one deduplicated platform instance. */\nexport interface InfraServiceAdapter {\n readonly descriptor: InfraAdapterDescriptor<'supabase' | 'cerbos' | 'r2' | 'supabase-vault'>;\n /** Read-only service config, bootstrap credentials and dependency validation. */\n validateAsync(context: InfraExecutionContext): Promise<InfraResult<null>>;\n planAsync(context: InfraExecutionContext): Promise<InfraResult<readonly InfraPlanAction[]>>;\n desiredWorkloadsAsync(\n context: InfraExecutionContext,\n ): Promise<InfraResult<readonly InfraWorkloadSpec[]>>;\n reconcileAsync(\n context: InfraExecutionContext,\n runtimeOutputs: readonly InfraOutput[],\n ): Promise<InfraResult<InfraReconcileResult>>;\n statusAsync(context: InfraExecutionContext): Promise<InfraResult<readonly InfraResourceStatus[]>>;\n destroyAsync(\n context: InfraExecutionContext,\n request: InfraDestroyRequest,\n ): Promise<InfraResult<InfraReconcileResult>>;\n suspendAsync?(context: InfraExecutionContext): Promise<InfraResult<InfraReconcileResult>>;\n}\n"]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { AppEnvironmentId } from '../environments';
|
|
2
|
+
import type { InfraAdapterId } from './infraManifest';
|
|
3
|
+
import type { InfraSecretReference } from './infraSecrets';
|
|
4
|
+
/** Identity must be verified before mutation; unowned resources must never be pruned. */
|
|
5
|
+
export interface InfraResourceIdentity {
|
|
6
|
+
readonly projectId: string;
|
|
7
|
+
readonly environment: AppEnvironmentId;
|
|
8
|
+
readonly adapter: InfraAdapterId;
|
|
9
|
+
readonly resourceId: string;
|
|
10
|
+
}
|
|
11
|
+
export interface InfraOwnedResource {
|
|
12
|
+
readonly identity: InfraResourceIdentity;
|
|
13
|
+
readonly externalId?: string;
|
|
14
|
+
readonly persistent: boolean;
|
|
15
|
+
readonly retention: 'retain' | 'delete-on-destroy';
|
|
16
|
+
readonly dependsOn: readonly InfraResourceIdentity[];
|
|
17
|
+
}
|
|
18
|
+
export interface InfraDiagnostic {
|
|
19
|
+
readonly severity: 'info' | 'warning' | 'error';
|
|
20
|
+
readonly code: string;
|
|
21
|
+
/** Safe human-readable detail. Tokens and privileged values must be redacted by the producer. */
|
|
22
|
+
readonly message: string;
|
|
23
|
+
readonly path?: readonly (string | number)[];
|
|
24
|
+
readonly owner?: InfraResourceIdentity;
|
|
25
|
+
}
|
|
26
|
+
export type InfraResult<T> = {
|
|
27
|
+
readonly ok: true;
|
|
28
|
+
readonly value: T;
|
|
29
|
+
readonly diagnostics: readonly InfraDiagnostic[];
|
|
30
|
+
} | {
|
|
31
|
+
readonly ok: false;
|
|
32
|
+
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
|
+
export interface InfraPlan {
|
|
42
|
+
readonly projectId: string;
|
|
43
|
+
readonly environment: AppEnvironmentId;
|
|
44
|
+
/** Ordered dependency-first; teardown consumers reverse dependency order. */
|
|
45
|
+
readonly actions: readonly InfraPlanAction[];
|
|
46
|
+
}
|
|
47
|
+
export interface InfraResourceStatus {
|
|
48
|
+
readonly owner: InfraResourceIdentity;
|
|
49
|
+
readonly state: 'absent' | 'pending' | 'ready' | 'degraded' | 'stopped' | 'retained' | 'failed' | 'unknown';
|
|
50
|
+
readonly detail?: string;
|
|
51
|
+
readonly diagnostics?: readonly InfraDiagnostic[];
|
|
52
|
+
}
|
|
53
|
+
export interface InfraStatus {
|
|
54
|
+
readonly projectId: string;
|
|
55
|
+
readonly environment: AppEnvironmentId;
|
|
56
|
+
readonly state: InfraResourceStatus['state'];
|
|
57
|
+
readonly resources: readonly InfraResourceStatus[];
|
|
58
|
+
}
|
|
59
|
+
/** A privileged output has a reference, never a value field or environment export name. */
|
|
60
|
+
export type InfraOutput = {
|
|
61
|
+
readonly owner: InfraResourceIdentity;
|
|
62
|
+
readonly name: string;
|
|
63
|
+
} & ({
|
|
64
|
+
readonly visibility: 'public';
|
|
65
|
+
readonly value: string | number | boolean;
|
|
66
|
+
readonly environmentVariable?: string;
|
|
67
|
+
readonly reference?: never;
|
|
68
|
+
} | {
|
|
69
|
+
readonly visibility: 'secret';
|
|
70
|
+
readonly reference: InfraSecretReference;
|
|
71
|
+
readonly value?: never;
|
|
72
|
+
readonly environmentVariable?: never;
|
|
73
|
+
});
|
|
74
|
+
export interface InfraGeneratedArtifact {
|
|
75
|
+
readonly owner: InfraResourceIdentity;
|
|
76
|
+
/** Project-relative file path validated by the writer before touching the filesystem. */
|
|
77
|
+
readonly path: string;
|
|
78
|
+
readonly content: string;
|
|
79
|
+
readonly executable?: boolean;
|
|
80
|
+
}
|
|
81
|
+
export interface InfraLedger {
|
|
82
|
+
readonly schemaVersion: 1;
|
|
83
|
+
readonly projectId: string;
|
|
84
|
+
readonly environment: AppEnvironmentId;
|
|
85
|
+
readonly resources: readonly InfraOwnedResource[];
|
|
86
|
+
readonly artifacts: readonly {
|
|
87
|
+
readonly owner: InfraResourceIdentity;
|
|
88
|
+
readonly path: string;
|
|
89
|
+
}[];
|
|
90
|
+
}
|
|
91
|
+
/** No default environment or confirmation is possible for destruction. */
|
|
92
|
+
export interface InfraDestroyRequest {
|
|
93
|
+
readonly projectId: string;
|
|
94
|
+
readonly environment: AppEnvironmentId;
|
|
95
|
+
readonly confirmation: {
|
|
96
|
+
readonly projectId: string;
|
|
97
|
+
readonly environment: AppEnvironmentId;
|
|
98
|
+
};
|
|
99
|
+
/** Data deletion is a separate, explicit resource-scoped authorization in every environment. */
|
|
100
|
+
readonly persistence: {
|
|
101
|
+
readonly policy: 'retain';
|
|
102
|
+
} | {
|
|
103
|
+
readonly policy: 'delete';
|
|
104
|
+
readonly confirmedResources: readonly InfraResourceIdentity[];
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=infraLifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infraLifecycle.d.ts","sourceRoot":"","sources":["../../src/types/infraLifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infraLifecycle.js","sourceRoot":"","sources":["../../src/types/infraLifecycle.ts"],"names":[],"mappings":"","sourcesContent":["import type { AppEnvironmentId } from '../environments';\nimport type { InfraAdapterId } from './infraManifest';\nimport type { InfraSecretReference } from './infraSecrets';\n\n/** Identity must be verified before mutation; unowned resources must never be pruned. */\nexport interface InfraResourceIdentity {\n readonly projectId: string;\n readonly environment: AppEnvironmentId;\n readonly adapter: InfraAdapterId;\n readonly resourceId: string;\n}\n\nexport interface InfraOwnedResource {\n readonly identity: InfraResourceIdentity;\n readonly externalId?: string;\n readonly persistent: boolean;\n readonly retention: 'retain' | 'delete-on-destroy';\n readonly dependsOn: readonly InfraResourceIdentity[];\n}\n\nexport interface InfraDiagnostic {\n readonly severity: 'info' | 'warning' | 'error';\n readonly code: string;\n /** Safe human-readable detail. Tokens and privileged values must be redacted by the producer. */\n readonly message: string;\n readonly path?: readonly (string | number)[];\n readonly owner?: InfraResourceIdentity;\n}\n\nexport type InfraResult<T> =\n | { readonly ok: true; readonly value: T; readonly diagnostics: readonly InfraDiagnostic[] }\n | { readonly ok: false; readonly diagnostics: readonly InfraDiagnostic[] };\n\nexport interface InfraPlanAction {\n readonly owner: InfraResourceIdentity;\n readonly operation: 'create' | 'update' | 'delete' | 'retain' | 'noop';\n readonly impact: 'none' | 'interrupts-service' | 'deletes-data';\n readonly detail: string;\n readonly dependsOn: readonly InfraResourceIdentity[];\n}\n\nexport interface InfraPlan {\n readonly projectId: string;\n readonly environment: AppEnvironmentId;\n /** Ordered dependency-first; teardown consumers reverse dependency order. */\n readonly actions: readonly InfraPlanAction[];\n}\n\nexport interface InfraResourceStatus {\n readonly owner: InfraResourceIdentity;\n readonly state:\n 'absent' | 'pending' | 'ready' | 'degraded' | 'stopped' | 'retained' | 'failed' | 'unknown';\n readonly detail?: string;\n readonly diagnostics?: readonly InfraDiagnostic[];\n}\n\nexport interface InfraStatus {\n readonly projectId: string;\n readonly environment: AppEnvironmentId;\n readonly state: InfraResourceStatus['state'];\n readonly resources: readonly InfraResourceStatus[];\n}\n\n/** A privileged output has a reference, never a value field or environment export name. */\nexport type InfraOutput = { readonly owner: InfraResourceIdentity; readonly name: string } & (\n | {\n readonly visibility: 'public';\n readonly value: string | number | boolean;\n readonly environmentVariable?: string;\n readonly reference?: never;\n }\n | {\n readonly visibility: 'secret';\n readonly reference: InfraSecretReference;\n readonly value?: never;\n readonly environmentVariable?: never;\n }\n);\n\nexport interface InfraGeneratedArtifact {\n readonly owner: InfraResourceIdentity;\n /** Project-relative file path validated by the writer before touching the filesystem. */\n readonly path: string;\n readonly content: string;\n readonly executable?: boolean;\n}\n\nexport interface InfraLedger {\n readonly schemaVersion: 1;\n readonly projectId: string;\n readonly environment: AppEnvironmentId;\n readonly resources: readonly InfraOwnedResource[];\n readonly artifacts: readonly { readonly owner: InfraResourceIdentity; readonly path: string }[];\n}\n\n/** No default environment or confirmation is possible for destruction. */\nexport interface InfraDestroyRequest {\n readonly projectId: string;\n readonly environment: AppEnvironmentId;\n readonly confirmation: { readonly projectId: string; readonly environment: AppEnvironmentId };\n /** Data deletion is a separate, explicit resource-scoped authorization in every environment. */\n readonly persistence:\n | { readonly policy: 'retain' }\n | { readonly policy: 'delete'; readonly confirmedResources: readonly InfraResourceIdentity[] };\n}\n"]}
|