@astrale-os/sdk 0.6.0-beta.13 → 0.6.0-beta.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/deployment/adapter/adapter.d.ts +9 -11
- package/dist/deployment/adapter/legacy/adapter.d.ts +0 -10
- package/dist/deployment/adapter/legacy/deploy/context.d.ts +0 -2
- package/dist/deployment/adapter/legacy/deploy/result.d.ts +2 -3
- package/dist/deployment/adapter/legacy/index.d.ts +12 -12
- package/dist/deployment/adapter/legacy/prepare/context.d.ts +0 -2
- package/dist/deployment/adapter/release/context.d.ts +23 -3
- package/dist/deployment/adapter/release/index.d.ts +1 -0
- package/dist/deployment/adapter/release/list.d.ts +41 -0
- package/dist/deployment/adapter/release/list.js +1 -0
- package/dist/deployment/address/index.d.ts +1 -1
- package/dist/deployment/address/index.js +1 -0
- package/dist/deployment/address/summary.d.ts +31 -1
- package/dist/deployment/address/summary.js +117 -1
- package/dist/deployment/build/index.d.ts +1 -1
- package/dist/deployment/build/index.js +1 -1
- package/dist/deployment/build/manifest.d.ts +5 -0
- package/dist/deployment/build/manifest.js +10 -0
- package/dist/deployment/index.d.ts +1 -1
- package/dist/deployment/release/legacy/index.d.ts +17 -12
- package/dist/deployment/release/legacy/index.js +17 -12
- package/dist/deployment/verify/readiness/deployment.js +3 -13
- package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
- package/dist/deployment/verify/readiness/fetch.js +26 -0
- package/dist/deployment/verify/readiness/identity.d.ts +3 -6
- package/dist/deployment/verify/readiness/identity.js +3 -3
- package/dist/deployment/verify/readiness/index.d.ts +12 -8
- package/dist/deployment/verify/readiness/index.js +15 -4
- package/dist/deployment/verify/readiness/legacy/index.d.ts +2 -0
- package/dist/deployment/verify/readiness/legacy/index.js +2 -0
- package/dist/deployment/verify/readiness/legacy/publication.d.ts +12 -0
- package/dist/deployment/verify/readiness/legacy/publication.js +23 -0
- package/dist/deployment/verify/readiness/release.d.ts +8 -0
- package/dist/deployment/verify/readiness/release.js +22 -0
- package/dist/execution/identity/authentication.d.ts +14 -3
- package/dist/execution/identity/authentication.js +16 -7
- package/dist/execution/identity/callback.d.ts +5 -2
- package/dist/execution/identity/callback.js +11 -5
- package/dist/execution/identity/delivery.d.ts +11 -4
- package/dist/execution/identity/delivery.js +47 -20
- package/dist/execution/identity/identity.d.ts +12 -6
- package/dist/execution/identity/identity.js +3 -3
- package/dist/execution/invocation/admission/authentication.d.ts +1 -2
- package/dist/execution/invocation/admission/authentication.js +1 -2
- package/dist/execution/invocation/admission/authority.d.ts +10 -4
- package/dist/execution/invocation/admission/authority.js +5 -1
- package/dist/execution/invocation/invocation.js +51 -14
- package/dist/execution/runtime/index.d.ts +1 -0
- package/dist/execution/runtime/index.js +1 -0
- package/dist/execution/runtime/load.d.ts +3 -3
- package/dist/execution/runtime/load.js +3 -2
- package/dist/execution/runtime/release.d.ts +22 -0
- package/dist/execution/runtime/release.js +14 -0
- package/dist/execution/serve.d.ts +2 -2
- package/dist/execution/service/create.js +9 -7
- package/dist/execution/service/release.d.ts +2 -2
- package/dist/execution/service/release.js +3 -2
- package/dist/execution/service/service.d.ts +9 -5
- package/dist/execution/service/serving/delivery.d.ts +6 -0
- package/dist/execution/service/{publication → serving}/delivery.js +5 -1
- package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
- package/dist/execution/service/serving/installation.d.ts +4 -0
- package/dist/execution/service/serving/installation.js +9 -0
- package/dist/execution/service/serving/legacy/index.d.ts +15 -0
- package/dist/execution/service/serving/legacy/index.js +19 -0
- package/dist/execution/service/serving/source.d.ts +18 -0
- package/dist/execution/service/serving/source.js +19 -0
- package/dist/execution/workflows/run.js +1 -1
- package/dist/platform/versioning/name.d.ts +4 -3
- package/dist/platform/versioning/name.js +4 -3
- package/dist/project/define.js +58 -28
- package/dist/project/install-command.d.ts +10 -0
- package/dist/project/install-command.js +13 -0
- package/dist/project/project.d.ts +4 -2
- package/dist/tooling/cli/arguments.d.ts +1 -3
- package/dist/tooling/cli/arguments.js +51 -22
- package/dist/tooling/cli/commit.d.ts +23 -0
- package/dist/tooling/cli/commit.js +216 -0
- package/dist/tooling/cli/deploy-mode.d.ts +16 -13
- package/dist/tooling/cli/deploy-mode.js +45 -36
- package/dist/tooling/cli/deploy-result.d.ts +10 -7
- package/dist/tooling/cli/deploy-result.js +4 -3
- package/dist/tooling/cli/dotenv.d.ts +2 -2
- package/dist/tooling/cli/dotenv.js +3 -33
- package/dist/tooling/cli/help.js +73 -29
- package/dist/tooling/cli/immutable-deployment.d.ts +27 -0
- package/dist/tooling/cli/immutable-deployment.js +95 -0
- package/dist/tooling/cli/index.d.ts +3 -4
- package/dist/tooling/cli/index.js +2 -3
- package/dist/tooling/cli/legacy/deploy-result.d.ts +5 -3
- package/dist/tooling/cli/legacy/deploy-result.js +5 -3
- package/dist/tooling/cli/{development → legacy/development}/candidate.d.ts +3 -4
- package/dist/tooling/cli/{development → legacy/development}/candidate.js +7 -14
- package/dist/tooling/cli/legacy/development/deployment.d.ts +10 -0
- package/dist/tooling/cli/legacy/development/deployment.js +20 -0
- package/dist/tooling/cli/legacy/development/deprecation.d.ts +11 -0
- package/dist/tooling/cli/legacy/development/deprecation.js +13 -0
- package/dist/tooling/cli/legacy/development/develop.d.ts +15 -0
- package/dist/tooling/cli/legacy/development/develop.js +142 -0
- package/dist/tooling/cli/legacy/development/index.d.ts +21 -0
- package/dist/tooling/cli/legacy/development/index.js +21 -0
- package/dist/tooling/cli/legacy/development/report.d.ts +7 -0
- package/dist/tooling/cli/{development → legacy/development}/report.js +2 -5
- package/dist/tooling/cli/legacy/development/secrets-file.d.ts +2 -0
- package/dist/tooling/cli/legacy/development/secrets-file.js +33 -0
- package/dist/tooling/cli/legacy/stable-target-adapter.d.ts +5 -3
- package/dist/tooling/cli/legacy/stable-target-deploy.d.ts +40 -0
- package/dist/tooling/cli/legacy/stable-target-deploy.js +102 -0
- package/dist/tooling/cli/list.d.ts +114 -0
- package/dist/tooling/cli/list.js +297 -0
- package/dist/tooling/cli/orchestrate.d.ts +1 -1
- package/dist/tooling/cli/orchestrate.js +91 -95
- package/dist/tooling/cli/secrets.d.ts +9 -0
- package/dist/tooling/cli/secrets.js +19 -0
- package/package.json +7 -7
- package/dist/deployment/verify/readiness/publication.d.ts +0 -11
- package/dist/deployment/verify/readiness/publication.js +0 -41
- package/dist/execution/service/publication/delivery.d.ts +0 -2
- package/dist/execution/service/publication/installation.d.ts +0 -3
- package/dist/execution/service/publication/installation.js +0 -8
- package/dist/execution/service/publication/source.d.ts +0 -3
- package/dist/execution/service/publication/source.js +0 -11
- package/dist/tooling/cli/astrale/authority.d.ts +0 -5
- package/dist/tooling/cli/astrale/authority.js +0 -11
- package/dist/tooling/cli/astrale/executable.d.ts +0 -2
- package/dist/tooling/cli/astrale/executable.js +0 -47
- package/dist/tooling/cli/astrale/failure.d.ts +0 -6
- package/dist/tooling/cli/astrale/failure.js +0 -48
- package/dist/tooling/cli/astrale/instance.d.ts +0 -11
- package/dist/tooling/cli/astrale/instance.js +0 -52
- package/dist/tooling/cli/astrale/process.d.ts +0 -13
- package/dist/tooling/cli/astrale/process.js +0 -94
- package/dist/tooling/cli/astrale/version.d.ts +0 -18
- package/dist/tooling/cli/astrale/version.js +0 -55
- package/dist/tooling/cli/development/deployment.d.ts +0 -16
- package/dist/tooling/cli/development/deployment.js +0 -39
- package/dist/tooling/cli/development/develop.d.ts +0 -11
- package/dist/tooling/cli/development/develop.js +0 -243
- package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
- package/dist/tooling/cli/development/release-evidence.js +0 -10
- package/dist/tooling/cli/development/report.d.ts +0 -9
- package/dist/tooling/cli/development/session-file.d.ts +0 -53
- package/dist/tooling/cli/development/session-file.js +0 -337
- package/dist/tooling/cli/development/target-lock.d.ts +0 -16
- package/dist/tooling/cli/development/target-lock.js +0 -68
- package/dist/tooling/cli/development/view.d.ts +0 -28
- package/dist/tooling/cli/development/view.js +0 -151
- package/dist/tooling/cli/environment-release.d.ts +0 -24
- package/dist/tooling/cli/environment-release.js +0 -46
- package/dist/tooling/cli/evidence.d.ts +0 -14
- package/dist/tooling/cli/evidence.js +0 -53
- package/dist/tooling/cli/installation/index.d.ts +0 -2
- package/dist/tooling/cli/installation/index.js +0 -1
- package/dist/tooling/cli/installation/observation.d.ts +0 -10
- package/dist/tooling/cli/installation/observation.js +0 -44
- package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
- package/dist/tooling/cli/installation/reconcile.js +0 -122
- /package/dist/execution/service/{publication → serving}/index.js +0 -0
- /package/dist/tooling/cli/{credential.d.ts → legacy/development/credential.d.ts} +0 -0
- /package/dist/tooling/cli/{credential.js → legacy/development/credential.js} +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/lease.d.ts +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/lease.js +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/lifecycle.d.ts +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/lifecycle.js +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/project-imports.d.ts +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/project-imports.js +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/project-lock.d.ts +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/project-lock.js +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/rebuild.d.ts +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/rebuild.js +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/source-watch.d.ts +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/source-watch.js +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/sources.d.ts +0 -0
- /package/dist/tooling/cli/{development → legacy/development}/sources.js +0 -0
package/README.md
CHANGED
|
@@ -345,6 +345,10 @@ did not derive.
|
|
|
345
345
|
- **Record.** `acceptDeploymentRecord` admits a `DeploymentRecordV1` only when its provider
|
|
346
346
|
script is the label that its own fields derive. A host admits the record a deploy declares with
|
|
347
347
|
it before storing it, so every stored record decodes.
|
|
348
|
+
- **Platform summary.** `acceptPlatformDeploymentSummary` admits the `summary:<label>` a platform
|
|
349
|
+
dispatch namespace keeps beside `record:<label>`: the deployment's `DeploymentSummaryV1` without
|
|
350
|
+
its record, owned by `platform`, named by its label, with no provider version id and no
|
|
351
|
+
`lastCallAt` or `expiresAt`. `encodePlatformDeploymentSummary` gives its one canonical text.
|
|
348
352
|
|
|
349
353
|
```ts
|
|
350
354
|
import {
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FrozenConfigurationV1 } from '../address/index.js';
|
|
2
2
|
import type { Bundler } from './bundle/index.js';
|
|
3
|
-
import type { ArtifactSource, DeployContext, DeployResult,
|
|
4
|
-
import type { ConfigureContext, ListContext, Placement, PlacementContext, ReleaseDeployContext, ReleaseDeployResult, RetainContext } from './release/index.js';
|
|
3
|
+
import type { ArtifactSource, DeployContext, DeployResult, PrepareContext } from './legacy/index.js';
|
|
4
|
+
import type { ConfigureContext, ListContext, ListedDeployment, Placement, PlacementContext, ReleaseDeployContext, ReleaseDeployResult, RetainContext } from './release/index.js';
|
|
5
5
|
/** What `admit` receives when `defineProject` binds an adapter to one Environment. */
|
|
6
6
|
export interface AdapterEnvironmentContext {
|
|
7
7
|
readonly environment: string;
|
|
8
|
-
/**
|
|
9
|
-
* @deprecated Deploy-time installation, which the canonical path refuses (CT33). Replacement:
|
|
10
|
-
* `astrale domain install <url> -i <instance>` after `astrale-domain deploy <environment>`.
|
|
11
|
-
*/
|
|
12
|
-
readonly installation?: InstallationTarget;
|
|
13
8
|
}
|
|
14
9
|
/**
|
|
15
10
|
* A provider adapter (adapter interface v2). It bundles a Build without any Environment, freezes
|
|
@@ -37,8 +32,11 @@ export interface Adapter<Parameters extends object = object> {
|
|
|
37
32
|
placement(parameters: Parameters, context: PlacementContext): Promise<Placement>;
|
|
38
33
|
/** Create, or reuse, the immutable deployment of one sealed release. */
|
|
39
34
|
deployRelease(parameters: Parameters, context: ReleaseDeployContext): Promise<ReleaseDeployResult>;
|
|
40
|
-
/**
|
|
41
|
-
|
|
35
|
+
/**
|
|
36
|
+
* The deployments of one Environment of one origin the host keeps for the caller, each with
|
|
37
|
+
* where it is called. No effect at the host.
|
|
38
|
+
*/
|
|
39
|
+
list?(parameters: Parameters, context: ListContext): Promise<readonly ListedDeployment[]>;
|
|
42
40
|
/**
|
|
43
41
|
* Keep one published deployment where the host has no registry principal to mark it (a platform
|
|
44
42
|
* namespace). Called only after its Publication commits. Absent: the registry marks it (Admin's
|
|
@@ -66,7 +64,7 @@ export interface AdapterInput<Parameters extends object> {
|
|
|
66
64
|
configure(parameters: Parameters, context: ConfigureContext): FrozenConfigurationV1;
|
|
67
65
|
placement(parameters: Parameters, context: PlacementContext): Promise<Placement>;
|
|
68
66
|
deployRelease(parameters: Parameters, context: ReleaseDeployContext): Promise<ReleaseDeployResult>;
|
|
69
|
-
list?(parameters: Parameters, context: ListContext): Promise<readonly
|
|
67
|
+
list?(parameters: Parameters, context: ListContext): Promise<readonly ListedDeployment[]>;
|
|
70
68
|
retain?(parameters: Parameters, context: RetainContext): Promise<void>;
|
|
71
69
|
/** @deprecated Legacy direct-mode path (CT33) only. Replacement: `configure`, `placement`. */
|
|
72
70
|
prepare?(parameters: Parameters, context: PrepareContext): Promise<ArtifactSource>;
|
|
@@ -2,16 +2,6 @@ import type { AdapterEnvironmentContext } from '../adapter.js';
|
|
|
2
2
|
import type { Bundler } from '../bundle/index.js';
|
|
3
3
|
import type { DeployContext, DeployResult } from './deploy/index.js';
|
|
4
4
|
import type { ArtifactSource, PrepareContext } from './prepare/index.js';
|
|
5
|
-
/**
|
|
6
|
-
* The instance an Environment's `installation` installs on after each deploy.
|
|
7
|
-
*
|
|
8
|
-
* @deprecated Deploy-time installation. Replacement: `astrale domain install <url> -i <instance>`
|
|
9
|
-
* after `astrale-domain deploy <environment>`, which never installs.
|
|
10
|
-
*/
|
|
11
|
-
export interface InstallationTarget {
|
|
12
|
-
readonly instance: string;
|
|
13
|
-
readonly identity?: string;
|
|
14
|
-
}
|
|
15
5
|
/**
|
|
16
6
|
* A provider adapter on the contract before adapter interface v2: `prepare` places a build at one
|
|
17
7
|
* stable target per Environment and `deploy` replaces that target's code in place. It declares no
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { InstallationTarget } from '../adapter.js';
|
|
2
1
|
import type { PreparedArtifact } from '../prepare/index.js';
|
|
3
2
|
/**
|
|
4
3
|
* What a legacy `deploy` receives to replace one Environment's stable target in place.
|
|
@@ -9,7 +8,6 @@ import type { PreparedArtifact } from '../prepare/index.js';
|
|
|
9
8
|
export interface DeployContext {
|
|
10
9
|
readonly projectDir: string;
|
|
11
10
|
readonly environment: string;
|
|
12
|
-
readonly installation?: InstallationTarget;
|
|
13
11
|
/** Optional command-scoped identity override (`--as`). */
|
|
14
12
|
readonly identity?: string;
|
|
15
13
|
/** Optional command-scoped credential; trusted adapters must neither retain nor disclose it. */
|
|
@@ -9,7 +9,7 @@ import type { MutationKnowledge } from '../../release/index.js';
|
|
|
9
9
|
* @deprecated Legacy `prepare`/`deploy` contract (see `../index.ts`). Replacement:
|
|
10
10
|
* `ReleaseDeploymentPhase`; an immutable deployment is neither addressed nor installed by its deploy.
|
|
11
11
|
*/
|
|
12
|
-
export type DeploymentPhase = 'prerequisite' | 'provider' | 'addressing' | 'release' | 'configuration' | '
|
|
12
|
+
export type DeploymentPhase = 'prerequisite' | 'provider' | 'addressing' | 'release' | 'configuration' | 'readiness';
|
|
13
13
|
/**
|
|
14
14
|
* What a provider reports for the stable target it replaced.
|
|
15
15
|
*
|
|
@@ -43,13 +43,12 @@ export type AppliedProviderDeployment = {
|
|
|
43
43
|
* What a legacy `deploy` changed, effect by effect.
|
|
44
44
|
*
|
|
45
45
|
* @deprecated Legacy `prepare`/`deploy` contract (see `../index.ts`). Replacement:
|
|
46
|
-
* `FailedReleaseDeployResult.provider
|
|
46
|
+
* `FailedReleaseDeployResult.provider`.
|
|
47
47
|
*/
|
|
48
48
|
export interface DeploymentProgress {
|
|
49
49
|
readonly prerequisite: MutationKnowledge;
|
|
50
50
|
readonly provider: MutationKnowledge<ProviderDeploymentEvidence>;
|
|
51
51
|
readonly configuration: MutationKnowledge;
|
|
52
|
-
readonly installation: MutationKnowledge;
|
|
53
52
|
}
|
|
54
53
|
/**
|
|
55
54
|
* A stable target replaced in place and ready.
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The adapter contract before adapter interface v2: `prepare` places a build at one stable target
|
|
3
|
-
* per Environment, `deploy` replaces that target's code in place and
|
|
4
|
-
*
|
|
3
|
+
* per Environment, `deploy` replaces that target's code in place, and the stable target serves a
|
|
4
|
+
* v3 Publication under an issuer bound to it for life. Neither installs anything.
|
|
5
5
|
*
|
|
6
6
|
* @deprecated Replacement: `Adapter` (adapter interface v2): beside the same `bundler`, `configure`,
|
|
7
7
|
* `placement` and `deployRelease`, which deploys one sealed release as one immutable deployment,
|
|
8
8
|
* created or reused, and installs nothing.
|
|
9
9
|
*
|
|
10
10
|
* Short-term consumers: the legacy direct-mode path (CT33), which `astrale-domain deploy` and
|
|
11
|
-
* `astrale-domain dev` run through these operations:
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
11
|
+
* `astrale-domain dev` run through these operations: adapter-cloudflare direct mode (`route`,
|
|
12
|
+
* `workerName`, `identityIssuer`, `addressing`, `signingIdentity`, or no `namespace`), which serves
|
|
13
|
+
* the configurations of domains ai-gateway, closing, grc, integrations and issues (until SV15),
|
|
14
|
+
* domains organization (until it leaves direct mode, AM-147), the Services `beta` and `prod` (until
|
|
15
|
+
* SV12), `development` (until SV9) and frozen `admin-beta` (until D19) environments, shell (until
|
|
16
|
+
* SH2) and its frozen `legacy-v3` (until D22), and ui:domain (until UI1).
|
|
17
17
|
*
|
|
18
|
-
* Removal: D10, once no
|
|
19
|
-
* these types with `prepare`/`deploy`, `src/deployment/release/legacy`
|
|
20
|
-
* path.
|
|
18
|
+
* Removal: D10, once no configuration on any repository's main selects the direct-mode path
|
|
19
|
+
* (CT33, AM-147); it deletes these types with `prepare`/`deploy`, `src/deployment/release/legacy`
|
|
20
|
+
* and the stable-target CLI path.
|
|
21
21
|
*/
|
|
22
|
-
export type {
|
|
22
|
+
export type { LegacyAdapter, LegacyAdapterInput } from './adapter.js';
|
|
23
23
|
export type * from './prepare/index.js';
|
|
24
24
|
export type * from './deploy/index.js';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Build } from '../../../build/index.js';
|
|
2
2
|
import type { ResolvedRuntimeReference } from '../../../runtime/index.js';
|
|
3
3
|
import type { Bundle } from '../../bundle/index.js';
|
|
4
|
-
import type { InstallationTarget } from '../adapter.js';
|
|
5
4
|
/**
|
|
6
5
|
* What `prepare` receives to produce the artifact of one Environment's stable target.
|
|
7
6
|
*
|
|
@@ -11,7 +10,6 @@ import type { InstallationTarget } from '../adapter.js';
|
|
|
11
10
|
export interface PrepareContext<BuildValue extends Build = Build> {
|
|
12
11
|
readonly projectDir: string;
|
|
13
12
|
readonly environment: string;
|
|
14
|
-
readonly installation?: InstallationTarget;
|
|
15
13
|
/**
|
|
16
14
|
* Preparation purpose. Remote development and one-shot deployment both
|
|
17
15
|
* prepare complete release artifacts. Omitted by older custom callers means
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import type { DeploymentCommitV1, FrozenConfigurationV1, LineAddressing } from '../../address/index.js';
|
|
2
2
|
import type { Release } from '../../release/index.js';
|
|
3
3
|
import type { Bundle } from '../bundle/index.js';
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* What `configure` receives: the Environment whose configuration it freezes, and the names of the
|
|
6
|
+
* secrets its deployment binds. Never a secret value: a rotated value is not another configuration,
|
|
7
|
+
* a name added or removed is.
|
|
8
|
+
*/
|
|
5
9
|
export interface ConfigureContext {
|
|
6
10
|
readonly environment: string;
|
|
11
|
+
/**
|
|
12
|
+
* The names of the Environment's current secrets (the adapter's `secretsFile`), sorted and
|
|
13
|
+
* unique: exactly the secrets `deployRelease` receives, which the configuration declares in
|
|
14
|
+
* `bindings.secrets`.
|
|
15
|
+
*/
|
|
16
|
+
readonly secrets: readonly string[];
|
|
7
17
|
}
|
|
8
18
|
/**
|
|
9
19
|
* Where the host places the deployments of one Environment. `routingDomain` is the DNS name every
|
|
@@ -56,15 +66,25 @@ export interface ReleaseDeployContext {
|
|
|
56
66
|
* `DomainRelease` v4 the deployment serves at `release.json`, its `url` the deployment URL.
|
|
57
67
|
*/
|
|
58
68
|
readonly release: Release;
|
|
59
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* The commit this deploy runs from, which the record of a deployment it creates declares. The
|
|
71
|
+
* label does not cover it: a reused deployment keeps the record, and so the commit, of the deploy
|
|
72
|
+
* that created it, and an adapter never refuses a reuse for another commit.
|
|
73
|
+
*/
|
|
60
74
|
readonly commit: DeploymentCommitV1 | null;
|
|
61
75
|
/** Parent-owned lifecycle cancellation shared by every provider effect. */
|
|
62
76
|
readonly signal: AbortSignal;
|
|
63
77
|
}
|
|
64
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* What `list` receives: the origin and the Environment whose deployments the host lists for the
|
|
80
|
+
* caller. It answers without any effect at the host.
|
|
81
|
+
*/
|
|
65
82
|
export interface ListContext {
|
|
66
83
|
readonly origin: string;
|
|
84
|
+
readonly environment: string;
|
|
85
|
+
/** Parent-owned lifecycle cancellation. */
|
|
67
86
|
readonly signal: AbortSignal;
|
|
87
|
+
/** Optional command-scoped identity override (`--as`). */
|
|
68
88
|
readonly identity?: string;
|
|
69
89
|
}
|
|
70
90
|
/** What `retain` receives: the label of the published deployment to keep. */
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export type { ConfigureContext, ListContext, Placement, PlacementContext, ReleaseDeployContext, RetainContext, } from './context.js';
|
|
2
|
+
export type { DeploymentCallTarget, ListedDeployment } from './list.js';
|
|
2
3
|
export type { DeploymentSecretsState, FailedReleaseDeployResult, MutationKnowledge, ReadyReleaseDeployResult, ReleaseDeploymentPhase, ReleaseDeployResult, } from './result.js';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { DeploymentSummaryV1 } from '../../address/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Where one listed deployment is called on its host, so that an operator can act on that
|
|
4
|
+
* deployment alone, such as rotating one of its secrets in place (AM-4'):
|
|
5
|
+
*
|
|
6
|
+
* - `services`: a deployment Admin's Services hosts, called on the Admin instance with
|
|
7
|
+
* `astrale call "<path>.method.setSecret" --admin` (`--admin=<admin>` when `admin` names the
|
|
8
|
+
* Admin bookmark). `path` is the deployment's node, `@<id>`, qualified by its class:
|
|
9
|
+
* `@<id>::services.astrale.ai:class.CloudflareDeployment`.
|
|
10
|
+
* - `namespace`: a deployment of a platform dispatch namespace, which has no Services node: the
|
|
11
|
+
* namespace and the script the per-script tooling of that namespace takes.
|
|
12
|
+
*/
|
|
13
|
+
export type DeploymentCallTarget = {
|
|
14
|
+
readonly kind: 'services';
|
|
15
|
+
readonly path: string;
|
|
16
|
+
/** The Admin bookmark the deployment is reached through; the CLI's own Admin target when absent. */
|
|
17
|
+
readonly admin?: string;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: 'namespace';
|
|
20
|
+
readonly namespace: string;
|
|
21
|
+
readonly script: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* One deployment as an adapter's `list` returns it: what its host knows of it, its record as the
|
|
25
|
+
* host stores it, and where it is called. `lastCallAt`, and a preview's `expiresAt`, are as of the
|
|
26
|
+
* listing: an adapter whose host records calls only now and then reads the calls counted since, and
|
|
27
|
+
* one that cannot read them for want of a permission omits both rather than print stale values.
|
|
28
|
+
*
|
|
29
|
+
* The adapter does not admit the record. The listing admits it with `acceptDeploymentRecord`, and a
|
|
30
|
+
* record it refuses (one a host on an older SDK still admits, say) never fails the listing: that
|
|
31
|
+
* deployment is listed from the facts its host owns.
|
|
32
|
+
*/
|
|
33
|
+
export interface ListedDeployment extends Omit<DeploymentSummaryV1, 'record'> {
|
|
34
|
+
/**
|
|
35
|
+
* The record as the host stores it, unadmitted, whatever value that is (JSON `null` included).
|
|
36
|
+
* Absent when the host keeps no record of the deployment: a platform namespace keeps none until
|
|
37
|
+
* it activates the deployment.
|
|
38
|
+
*/
|
|
39
|
+
readonly record?: unknown;
|
|
40
|
+
readonly callTarget: DeploymentCallTarget;
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -2,4 +2,4 @@ export { configurationDigest, frozenConfiguration, FROZEN_CONFIGURATION_FORMAT,
|
|
|
2
2
|
export { DEPLOYMENT_LABEL, deploymentContent, deploymentLabel, deploymentUrl, parseDeploymentLabel, type DeploymentLabelParts, } from './label.js';
|
|
3
3
|
export { deploymentLine, lineFingerprint, readablePart, type DeploymentLineInput, type LineAddressing, } from './line.js';
|
|
4
4
|
export { acceptDeploymentRecord, DEPLOYMENT_RECORD_FORMAT, DEPLOYMENT_RECORD_VERSION, type DeploymentCommitV1, type DeploymentRecordV1, } from './record.js';
|
|
5
|
-
export type
|
|
5
|
+
export { acceptPlatformDeploymentSummary, encodePlatformDeploymentSummary, PLATFORM_OWNER, type DeploymentSummaryV1, type PlatformDeploymentSummaryV1, } from './summary.js';
|
|
@@ -2,3 +2,4 @@ export { configurationDigest, frozenConfiguration, FROZEN_CONFIGURATION_FORMAT,
|
|
|
2
2
|
export { DEPLOYMENT_LABEL, deploymentContent, deploymentLabel, deploymentUrl, parseDeploymentLabel, } from './label.js';
|
|
3
3
|
export { deploymentLine, lineFingerprint, readablePart, } from './line.js';
|
|
4
4
|
export { acceptDeploymentRecord, DEPLOYMENT_RECORD_FORMAT, DEPLOYMENT_RECORD_VERSION, } from './record.js';
|
|
5
|
+
export { acceptPlatformDeploymentSummary, encodePlatformDeploymentSummary, PLATFORM_OWNER, } from './summary.js';
|
|
@@ -17,10 +17,40 @@ export interface DeploymentSummaryV1 {
|
|
|
17
17
|
readonly retention: 'preview' | 'published';
|
|
18
18
|
readonly createdAt: string;
|
|
19
19
|
readonly lastCallAt?: string;
|
|
20
|
-
/** A preview's: 30 days after its
|
|
20
|
+
/** A preview's: 30 days after its activation or its last call, whichever is later (AM-123). */
|
|
21
21
|
readonly expiresAt?: string;
|
|
22
22
|
readonly retiredAt?: string;
|
|
23
23
|
readonly retirement?: 'expired' | 'withdrawn';
|
|
24
24
|
readonly signingKeyId: string;
|
|
25
25
|
readonly record: DeploymentRecordV1;
|
|
26
26
|
}
|
|
27
|
+
/** The owner every summary of a platform namespace names: the platform holds all of its lines. */
|
|
28
|
+
export declare const PLATFORM_OWNER = "platform";
|
|
29
|
+
/**
|
|
30
|
+
* `summary:<label>` in the routing KV of a platform dispatch namespace (CT20, AM-131): the
|
|
31
|
+
* `DeploymentSummaryV1` of one deployment without its record, which stays at `record:<label>`.
|
|
32
|
+
*
|
|
33
|
+
* Its writers are the deployer (`cloudflare({ namespace })`), which writes it once at activation,
|
|
34
|
+
* before `record:<label>`, then marks it published (`retain`), and the platform retirement tooling
|
|
35
|
+
* (SV6), which records a withdrawal. So it names the deployment by its label (`id` is the label),
|
|
36
|
+
* is owned by `platform`, is `active` until withdrawn, and carries no `lastCallAt` or `expiresAt`:
|
|
37
|
+
* nothing on the platform namespace keeps those clocks, and listings read them from the calls
|
|
38
|
+
* dataset (AM-133). It never carries a provider version id or a secret digest: an in-place secret
|
|
39
|
+
* write mints a new version id, which identifies nothing (OPS-2 X1).
|
|
40
|
+
*/
|
|
41
|
+
export type PlatformDeploymentSummaryV1 = Omit<DeploymentSummaryV1, 'record' | 'lastCallAt' | 'expiresAt' | 'state' | 'retirement'> & {
|
|
42
|
+
readonly state: 'active' | 'retiring' | 'retired';
|
|
43
|
+
readonly retirement?: 'withdrawn';
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Admit one platform deployment summary exactly. Any member outside its shape is refused, a
|
|
47
|
+
* provider version id or a clock among them; so is a summary whose id, line or URL is not its
|
|
48
|
+
* label's, whose owner is not the platform, or whose state and retirement disagree. A reader that
|
|
49
|
+
* meets a refused summary lists that label apart, never acting on it.
|
|
50
|
+
*/
|
|
51
|
+
export declare function acceptPlatformDeploymentSummary(input: unknown): PlatformDeploymentSummaryV1;
|
|
52
|
+
/**
|
|
53
|
+
* The canonical JSON (RFC 8785) of one admitted platform summary, as `summary:<label>` holds it:
|
|
54
|
+
* one summary has one text, so a writer that reads it back compares texts.
|
|
55
|
+
*/
|
|
56
|
+
export declare function encodePlatformDeploymentSummary(summary: PlatformDeploymentSummaryV1): string;
|
|
@@ -1 +1,117 @@
|
|
|
1
|
-
|
|
1
|
+
import { json } from '@astrale-os/kernel-dsl/value';
|
|
2
|
+
import { deploymentUrl, parseDeploymentLabel } from './label.js';
|
|
3
|
+
/** The owner every summary of a platform namespace names: the platform holds all of its lines. */
|
|
4
|
+
export const PLATFORM_OWNER = 'platform';
|
|
5
|
+
const REQUIRED = [
|
|
6
|
+
'id',
|
|
7
|
+
'url',
|
|
8
|
+
'label',
|
|
9
|
+
'line',
|
|
10
|
+
'owner',
|
|
11
|
+
'state',
|
|
12
|
+
'retention',
|
|
13
|
+
'createdAt',
|
|
14
|
+
'signingKeyId',
|
|
15
|
+
];
|
|
16
|
+
const RETIREMENT = ['retiredAt', 'retirement'];
|
|
17
|
+
const STATES = ['active', 'retiring', 'retired'];
|
|
18
|
+
const RETENTIONS = ['preview', 'published'];
|
|
19
|
+
/** An instant as `Date.prototype.toISOString` writes it, in UTC. */
|
|
20
|
+
const INSTANT = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/u;
|
|
21
|
+
/** An RFC 7638 JWK thumbprint: the base64url SHA-256 of the public key, 43 characters. */
|
|
22
|
+
const KEY_ID = /^[A-Za-z0-9_-]{43}$/u;
|
|
23
|
+
/**
|
|
24
|
+
* Admit one platform deployment summary exactly. Any member outside its shape is refused, a
|
|
25
|
+
* provider version id or a clock among them; so is a summary whose id, line or URL is not its
|
|
26
|
+
* label's, whose owner is not the platform, or whose state and retirement disagree. A reader that
|
|
27
|
+
* meets a refused summary lists that label apart, never acting on it.
|
|
28
|
+
*/
|
|
29
|
+
export function acceptPlatformDeploymentSummary(input) {
|
|
30
|
+
if (input === null || typeof input !== 'object' || Array.isArray(input))
|
|
31
|
+
invalid('members');
|
|
32
|
+
const value = input;
|
|
33
|
+
const keys = Reflect.ownKeys(value);
|
|
34
|
+
const retired = RETIREMENT.some((key) => Object.hasOwn(value, key));
|
|
35
|
+
const expected = retired ? [...REQUIRED, ...RETIREMENT] : REQUIRED;
|
|
36
|
+
if (keys.length !== expected.length || expected.some((key) => !Object.hasOwn(value, key))) {
|
|
37
|
+
invalid('members');
|
|
38
|
+
}
|
|
39
|
+
const label = text(value.label, 'label');
|
|
40
|
+
let line;
|
|
41
|
+
try {
|
|
42
|
+
line = parseDeploymentLabel(label).line;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
invalid('label');
|
|
46
|
+
}
|
|
47
|
+
if (value.id !== label)
|
|
48
|
+
invalid('id');
|
|
49
|
+
if (value.line !== line)
|
|
50
|
+
invalid('line');
|
|
51
|
+
const url = text(value.url, 'url');
|
|
52
|
+
if (!sameDeploymentUrl(url, label))
|
|
53
|
+
invalid('url');
|
|
54
|
+
if (value.owner !== PLATFORM_OWNER)
|
|
55
|
+
invalid('owner');
|
|
56
|
+
const state = value.state;
|
|
57
|
+
if (typeof state !== 'string' || !STATES.includes(state))
|
|
58
|
+
invalid('state');
|
|
59
|
+
if (retired !== (state !== 'active'))
|
|
60
|
+
invalid('state');
|
|
61
|
+
const retention = value.retention;
|
|
62
|
+
if (typeof retention !== 'string' || !RETENTIONS.includes(retention))
|
|
63
|
+
invalid('retention');
|
|
64
|
+
const createdAt = instant(value.createdAt, 'createdAt');
|
|
65
|
+
const signingKeyId = text(value.signingKeyId, 'signingKeyId');
|
|
66
|
+
if (!KEY_ID.test(signingKeyId))
|
|
67
|
+
invalid('signingKeyId');
|
|
68
|
+
if (retired && value.retirement !== 'withdrawn')
|
|
69
|
+
invalid('retirement');
|
|
70
|
+
return Object.freeze({
|
|
71
|
+
id: label,
|
|
72
|
+
url,
|
|
73
|
+
label,
|
|
74
|
+
line,
|
|
75
|
+
owner: PLATFORM_OWNER,
|
|
76
|
+
state: state,
|
|
77
|
+
retention: retention,
|
|
78
|
+
createdAt,
|
|
79
|
+
signingKeyId,
|
|
80
|
+
...(retired
|
|
81
|
+
? { retiredAt: instant(value.retiredAt, 'retiredAt'), retirement: 'withdrawn' }
|
|
82
|
+
: {}),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The canonical JSON (RFC 8785) of one admitted platform summary, as `summary:<label>` holds it:
|
|
87
|
+
* one summary has one text, so a writer that reads it back compares texts.
|
|
88
|
+
*/
|
|
89
|
+
export function encodePlatformDeploymentSummary(summary) {
|
|
90
|
+
return json.serialize(acceptPlatformDeploymentSummary(summary));
|
|
91
|
+
}
|
|
92
|
+
/** Whether `url` is exactly `https://<label>.<routing domain>` for some routing domain. */
|
|
93
|
+
function sameDeploymentUrl(url, label) {
|
|
94
|
+
const prefix = `https://${label}.`;
|
|
95
|
+
if (!url.startsWith(prefix))
|
|
96
|
+
return false;
|
|
97
|
+
try {
|
|
98
|
+
return deploymentUrl(label, url.slice(prefix.length)) === url;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function text(input, member) {
|
|
105
|
+
if (typeof input !== 'string' || input.length === 0)
|
|
106
|
+
invalid(member);
|
|
107
|
+
return input;
|
|
108
|
+
}
|
|
109
|
+
function instant(input, member) {
|
|
110
|
+
const value = text(input, member);
|
|
111
|
+
if (!INSTANT.test(value) || new Date(value).toISOString() !== value)
|
|
112
|
+
invalid(member);
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
function invalid(member) {
|
|
116
|
+
throw new TypeError(`Platform deployment summary has invalid ${member}.`);
|
|
117
|
+
}
|
|
@@ -2,6 +2,6 @@ export { isBuild } from './admission.js';
|
|
|
2
2
|
export { compile } from './compile.js';
|
|
3
3
|
export { material, generatedMaterial, restoreBuild, restoreGeneratedBuild, type BuildMaterial, type GeneratedBuildMaterial, } from './material.js';
|
|
4
4
|
export type { Build } from './build.js';
|
|
5
|
-
export { buildDigest, buildManifest, BUILD_MANIFEST_FORMAT, BUILD_MANIFEST_VERSION, type BuildDigest, type BuildManifestInput, type BuildManifestV1, } from './manifest.js';
|
|
5
|
+
export { acceptBuildDigest, buildDigest, buildManifest, BUILD_MANIFEST_FORMAT, BUILD_MANIFEST_VERSION, type BuildDigest, type BuildManifestInput, type BuildManifestV1, } from './manifest.js';
|
|
6
6
|
export * as frontend from './frontend/index.js';
|
|
7
7
|
export type { BuildBundle, BuildSchema } from './schema.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { isBuild } from './admission.js';
|
|
2
2
|
export { compile } from './compile.js';
|
|
3
3
|
export { material, generatedMaterial, restoreBuild, restoreGeneratedBuild, } from './material.js';
|
|
4
|
-
export { buildDigest, buildManifest, BUILD_MANIFEST_FORMAT, BUILD_MANIFEST_VERSION, } from './manifest.js';
|
|
4
|
+
export { acceptBuildDigest, buildDigest, buildManifest, BUILD_MANIFEST_FORMAT, BUILD_MANIFEST_VERSION, } from './manifest.js';
|
|
5
5
|
export * as frontend from './frontend/index.js';
|
|
@@ -51,4 +51,9 @@ export interface BuildManifestInput {
|
|
|
51
51
|
export declare function buildManifest(input: BuildManifestInput): BuildManifestV1;
|
|
52
52
|
/** `sha256` of the canonical JSON (RFC 8785) of one admitted build manifest. */
|
|
53
53
|
export declare function buildDigest(manifest: BuildManifestV1): BuildDigest;
|
|
54
|
+
/**
|
|
55
|
+
* Admit a build digest as it travels outside its manifest (a deployment binding, a record): exactly
|
|
56
|
+
* `sha256:` and 64 lowercase hex digits. Anything else throws, so a reader fails closed.
|
|
57
|
+
*/
|
|
58
|
+
export declare function acceptBuildDigest(input: unknown): BuildDigest;
|
|
54
59
|
export {};
|
|
@@ -30,6 +30,16 @@ export function buildManifest(input) {
|
|
|
30
30
|
export function buildDigest(manifest) {
|
|
31
31
|
return identify(json.encode(admit(manifest)), MANIFEST_MEDIA_TYPE).digest;
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Admit a build digest as it travels outside its manifest (a deployment binding, a record): exactly
|
|
35
|
+
* `sha256:` and 64 lowercase hex digits. Anything else throws, so a reader fails closed.
|
|
36
|
+
*/
|
|
37
|
+
export function acceptBuildDigest(input) {
|
|
38
|
+
if (typeof input !== 'string' || !DIGEST.test(input)) {
|
|
39
|
+
throw new TypeError('Build digest must be sha256: followed by 64 lowercase hex digits.');
|
|
40
|
+
}
|
|
41
|
+
return input;
|
|
42
|
+
}
|
|
33
43
|
function admit(input) {
|
|
34
44
|
if (input === null || typeof input !== 'object')
|
|
35
45
|
invalid();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { defineAdapter, defineDeployment, isAdapter } from './adapter/index.js';
|
|
2
|
-
export type { Adapter, AdapterEnvironmentContext, AdapterInput, AddressingPlan, ArtifactFile, ArtifactSource, Bundle, BundleContext, Bundler, BundleSource, ConfigureContext, DeployContext, DeploymentPhase, DeploymentProgress, DeploymentSecretsState, DeployResult, FailedDeployResult, FailedReleaseDeployResult,
|
|
2
|
+
export type { Adapter, AdapterEnvironmentContext, AdapterInput, AddressingPlan, ArtifactFile, ArtifactSource, Bundle, BundleContext, Bundler, BundleSource, ConfigureContext, DeployContext, DeploymentCallTarget, DeploymentPhase, DeploymentProgress, DeploymentSecretsState, DeployResult, FailedDeployResult, FailedReleaseDeployResult, LegacyAdapter, LegacyAdapterInput, ListContext, ListedDeployment, MutationKnowledge, Placement, PlacementContext, PreparedArtifact, PreparedArtifactFile, PrepareContext, ReadyDeployResult, ReadyReleaseDeployResult, ReleaseDeployContext, ReleaseDeploymentPhase, ReleaseDeployResult, RetainContext, } from './adapter/index.js';
|
|
3
3
|
export { compile, isBuild } from './build/index.js';
|
|
4
4
|
export type { Build, BuildBundle, BuildDigest, BuildManifestV1, BuildSchema, } from './build/index.js';
|
|
5
5
|
export { deploy } from './deploy.js';
|
|
@@ -8,22 +8,27 @@
|
|
|
8
8
|
* seal the `DomainRelease` v4 of an immutable deployment from its build digest and URL.
|
|
9
9
|
*
|
|
10
10
|
* Short-term consumers:
|
|
11
|
-
* - the direct-mode deploy path (`prepare`/`deploy` of adapter-cloudflare
|
|
12
|
-
*
|
|
11
|
+
* - the direct-mode deploy path (`prepare`/`deploy` of adapter-cloudflare, whose
|
|
12
|
+
* `DeployResult.release` is this Release) and the stable Worker that assembles its Release
|
|
13
13
|
* at runtime, which serve the direct-mode configurations of domains ai-gateway, closing, grc,
|
|
14
|
-
* integrations and issues (until SV15),
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
14
|
+
* integrations and issues (until SV15), domains organization (until it leaves direct mode,
|
|
15
|
+
* AM-147), the Services `beta` and `prod` (until SV12), `development` (until SV9) and frozen
|
|
16
|
+
* `admin-beta` (until D19) environments, shell (until SH2) and its frozen `legacy-v3` (until
|
|
17
|
+
* D22), and ui:domain (until UI1);
|
|
18
|
+
* - the stable-target branch of the SDK's serving surface, which serves this Release beside the v4
|
|
19
|
+
* one (`execution/runtime/release.ts` `ServedRelease`): its Kernel Server source
|
|
20
|
+
* (`execution/service/serving/legacy/`), the Delivery v1-only answer of a Publication
|
|
21
|
+
* (`execution/identity/delivery.ts`), its pinned-snapshot check
|
|
22
|
+
* (`execution/invocation/invocation.ts`), its readiness at `domain.json`
|
|
23
|
+
* (`deployment/verify/readiness/legacy/`) and the preflight of the direct-mode prepare path
|
|
24
|
+
* (`deployment/verify/preflight/publication.ts`);
|
|
21
25
|
* - the split-issuer option of `addressing` (`publicUrl` distinct from the issuer), used only by
|
|
22
26
|
* adapter-cloudflare direct mode (`identityIssuer`).
|
|
23
27
|
*
|
|
24
|
-
* Removal: D10, once no
|
|
25
|
-
* the
|
|
26
|
-
* deletes `prepare`/`deploy` and their
|
|
28
|
+
* Removal: D10, once no configuration on any repository's main selects the direct-mode path
|
|
29
|
+
* (CT33, AM-147); the serving surface already serves the v4 Release (S4b), canonical deploys reach
|
|
30
|
+
* adapters through `deployRelease` (S7a, CT23), and D10 deletes `prepare`/`deploy` and their
|
|
31
|
+
* `DeployResult` with every branch listed above.
|
|
27
32
|
*/
|
|
28
33
|
export { assemble } from './assemble.js';
|
|
29
34
|
export { isRelease } from './admission.js';
|
|
@@ -8,22 +8,27 @@
|
|
|
8
8
|
* seal the `DomainRelease` v4 of an immutable deployment from its build digest and URL.
|
|
9
9
|
*
|
|
10
10
|
* Short-term consumers:
|
|
11
|
-
* - the direct-mode deploy path (`prepare`/`deploy` of adapter-cloudflare
|
|
12
|
-
*
|
|
11
|
+
* - the direct-mode deploy path (`prepare`/`deploy` of adapter-cloudflare, whose
|
|
12
|
+
* `DeployResult.release` is this Release) and the stable Worker that assembles its Release
|
|
13
13
|
* at runtime, which serve the direct-mode configurations of domains ai-gateway, closing, grc,
|
|
14
|
-
* integrations and issues (until SV15),
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
14
|
+
* integrations and issues (until SV15), domains organization (until it leaves direct mode,
|
|
15
|
+
* AM-147), the Services `beta` and `prod` (until SV12), `development` (until SV9) and frozen
|
|
16
|
+
* `admin-beta` (until D19) environments, shell (until SH2) and its frozen `legacy-v3` (until
|
|
17
|
+
* D22), and ui:domain (until UI1);
|
|
18
|
+
* - the stable-target branch of the SDK's serving surface, which serves this Release beside the v4
|
|
19
|
+
* one (`execution/runtime/release.ts` `ServedRelease`): its Kernel Server source
|
|
20
|
+
* (`execution/service/serving/legacy/`), the Delivery v1-only answer of a Publication
|
|
21
|
+
* (`execution/identity/delivery.ts`), its pinned-snapshot check
|
|
22
|
+
* (`execution/invocation/invocation.ts`), its readiness at `domain.json`
|
|
23
|
+
* (`deployment/verify/readiness/legacy/`) and the preflight of the direct-mode prepare path
|
|
24
|
+
* (`deployment/verify/preflight/publication.ts`);
|
|
21
25
|
* - the split-issuer option of `addressing` (`publicUrl` distinct from the issuer), used only by
|
|
22
26
|
* adapter-cloudflare direct mode (`identityIssuer`).
|
|
23
27
|
*
|
|
24
|
-
* Removal: D10, once no
|
|
25
|
-
* the
|
|
26
|
-
* deletes `prepare`/`deploy` and their
|
|
28
|
+
* Removal: D10, once no configuration on any repository's main selects the direct-mode path
|
|
29
|
+
* (CT33, AM-147); the serving surface already serves the v4 Release (S4b), canonical deploys reach
|
|
30
|
+
* adapters through `deployRelease` (S7a, CT23), and D10 deletes `prepare`/`deploy` and their
|
|
31
|
+
* `DeployResult` with every branch listed above.
|
|
27
32
|
*/
|
|
28
33
|
export { assemble } from './assemble.js';
|
|
29
34
|
export { isRelease } from './admission.js';
|
|
@@ -15,23 +15,14 @@ export function verifyDeployment(artifact, input) {
|
|
|
15
15
|
progress.provider.kind !== 'applied' ||
|
|
16
16
|
progress.provider.evidence.issuer === undefined ||
|
|
17
17
|
!terminal(progress.prerequisite) ||
|
|
18
|
-
!terminal(progress.configuration)
|
|
19
|
-
!terminal(progress.installation)) {
|
|
18
|
+
!terminal(progress.configuration)) {
|
|
20
19
|
invalid();
|
|
21
20
|
}
|
|
22
21
|
return Object.freeze({ status: 'ready', phase: 'complete', progress, release });
|
|
23
22
|
}
|
|
24
23
|
if (input.status === 'failed') {
|
|
25
24
|
exact(input, ['status', 'phase', 'progress', 'error'], ['release']);
|
|
26
|
-
if (![
|
|
27
|
-
'prerequisite',
|
|
28
|
-
'provider',
|
|
29
|
-
'addressing',
|
|
30
|
-
'release',
|
|
31
|
-
'configuration',
|
|
32
|
-
'installation',
|
|
33
|
-
'readiness',
|
|
34
|
-
].includes(input.phase) ||
|
|
25
|
+
if (!['prerequisite', 'provider', 'addressing', 'release', 'configuration', 'readiness'].includes(input.phase) ||
|
|
35
26
|
!(input.error instanceof Error)) {
|
|
36
27
|
invalid();
|
|
37
28
|
}
|
|
@@ -59,12 +50,11 @@ function verifyRelease(artifact, release) {
|
|
|
59
50
|
function verifyProgress(artifact, input, release) {
|
|
60
51
|
if (input === null || typeof input !== 'object' || Array.isArray(input))
|
|
61
52
|
invalid();
|
|
62
|
-
exact(input, ['prerequisite', 'provider', 'configuration'
|
|
53
|
+
exact(input, ['prerequisite', 'provider', 'configuration']);
|
|
63
54
|
return Object.freeze({
|
|
64
55
|
prerequisite: knowledge(input.prerequisite),
|
|
65
56
|
provider: providerKnowledge(artifact, input.provider, release),
|
|
66
57
|
configuration: knowledge(input.configuration),
|
|
67
|
-
installation: knowledge(input.installation),
|
|
68
58
|
});
|
|
69
59
|
}
|
|
70
60
|
function providerKnowledge(artifact, input, release) {
|