@astrale-os/sdk 0.6.0-beta.13 → 0.6.0-beta.14
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 +1 -6
- 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 +10 -8
- package/dist/deployment/adapter/legacy/prepare/context.d.ts +0 -2
- package/dist/deployment/adapter/release/context.d.ts +16 -2
- package/dist/deployment/address/index.d.ts +1 -1
- package/dist/deployment/address/index.js +1 -0
- package/dist/deployment/address/summary.d.ts +30 -0
- 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 +15 -10
- package/dist/deployment/release/legacy/index.js +15 -10
- 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 +7 -0
- package/dist/execution/identity/authentication.js +7 -1
- package/dist/execution/identity/delivery.d.ts +11 -4
- package/dist/execution/identity/delivery.js +47 -20
- package/dist/execution/identity/identity.d.ts +7 -3
- package/dist/execution/identity/identity.js +2 -2
- 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/project/define.js +57 -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 +0 -2
- package/dist/tooling/cli/arguments.js +22 -15
- 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 +19 -12
- package/dist/tooling/cli/deploy-mode.js +14 -32
- package/dist/tooling/cli/deploy-result.d.ts +10 -7
- package/dist/tooling/cli/deploy-result.js +4 -3
- package/dist/tooling/cli/development/candidate.d.ts +2 -3
- package/dist/tooling/cli/development/candidate.js +2 -9
- package/dist/tooling/cli/development/deployment.d.ts +2 -8
- package/dist/tooling/cli/development/deployment.js +2 -21
- package/dist/tooling/cli/development/develop.d.ts +4 -3
- package/dist/tooling/cli/development/develop.js +8 -112
- package/dist/tooling/cli/development/report.d.ts +1 -3
- package/dist/tooling/cli/development/report.js +1 -4
- package/dist/tooling/cli/help.js +28 -26
- 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 +2 -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/legacy/stable-target-adapter.d.ts +5 -3
- package/dist/tooling/cli/legacy/stable-target-deploy.d.ts +42 -0
- package/dist/tooling/cli/legacy/stable-target-deploy.js +104 -0
- package/dist/tooling/cli/orchestrate.js +46 -97
- package/dist/tooling/cli/secrets.d.ts +9 -0
- package/dist/tooling/cli/secrets.js +19 -0
- package/package.json +1 -1
- 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/release-evidence.d.ts +0 -4
- package/dist/tooling/cli/development/release-evidence.js +0 -10
- 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/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
1
|
import type { DeploymentSummaryV1, FrozenConfigurationV1 } from '../address/index.js';
|
|
2
2
|
import type { Bundler } from './bundle/index.js';
|
|
3
|
-
import type { ArtifactSource, DeployContext, DeployResult,
|
|
3
|
+
import type { ArtifactSource, DeployContext, DeployResult, PrepareContext } from './legacy/index.js';
|
|
4
4
|
import type { ConfigureContext, ListContext, 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
|
|
@@ -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,7 +1,7 @@
|
|
|
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,
|
|
@@ -11,14 +11,16 @@
|
|
|
11
11
|
* `astrale-domain dev` run through these operations:
|
|
12
12
|
* - adapter-cloudflare direct mode (`route`, `workerName`, `identityIssuer`, `addressing`,
|
|
13
13
|
* `signingIdentity`, or no `namespace`), which serves the configurations of domains ai-gateway,
|
|
14
|
-
* closing, grc, integrations and issues (until SV15),
|
|
15
|
-
* `
|
|
14
|
+
* closing, grc, integrations and issues (until SV15), domains organization (until it leaves
|
|
15
|
+
* direct mode, AM-147), the Services `beta` and `prod` (until SV12), `development` (until SV9)
|
|
16
|
+
* and frozen `admin-beta` (until D19) environments, shell (until SH2) and its frozen `legacy-v3`
|
|
17
|
+
* (until D22), and ui:domain (until UI1);
|
|
16
18
|
* - adapter-astrale, until S8 gives it `deployRelease`.
|
|
17
19
|
*
|
|
18
|
-
* Removal: D10, once no
|
|
19
|
-
* these types with `prepare`/`deploy`, `src/deployment/release/legacy`
|
|
20
|
-
* path.
|
|
20
|
+
* Removal: D10, once no configuration on any repository's main selects the direct-mode path
|
|
21
|
+
* (CT33, AM-147); it deletes these types with `prepare`/`deploy`, `src/deployment/release/legacy`
|
|
22
|
+
* and the stable-target CLI path.
|
|
21
23
|
*/
|
|
22
|
-
export type {
|
|
24
|
+
export type { LegacyAdapter, LegacyAdapterInput } from './adapter.js';
|
|
23
25
|
export type * from './prepare/index.js';
|
|
24
26
|
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,7 +66,11 @@ 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;
|
|
@@ -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';
|
|
@@ -24,3 +24,33 @@ export interface DeploymentSummaryV1 {
|
|
|
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, DeploymentPhase, DeploymentProgress, DeploymentSecretsState, DeployResult, FailedDeployResult, FailedReleaseDeployResult, LegacyAdapter, LegacyAdapterInput, ListContext, 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';
|
|
@@ -11,19 +11,24 @@
|
|
|
11
11
|
* - the direct-mode deploy path (`prepare`/`deploy` of adapter-cloudflare and adapter-astrale,
|
|
12
12
|
* whose `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';
|
|
@@ -11,19 +11,24 @@
|
|
|
11
11
|
* - the direct-mode deploy path (`prepare`/`deploy` of adapter-cloudflare and adapter-astrale,
|
|
12
12
|
* whose `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) {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type ReadinessFetch = (input: string, init: {
|
|
2
|
+
readonly redirect: 'error';
|
|
3
|
+
readonly signal?: AbortSignal;
|
|
4
|
+
}) => Promise<Response>;
|
|
5
|
+
export interface ReadinessOptions {
|
|
6
|
+
readonly fetch?: ReadinessFetch;
|
|
7
|
+
readonly signal?: AbortSignal;
|
|
8
|
+
}
|
|
9
|
+
export declare const MAXIMUM_DOCUMENT_BYTES: number;
|
|
10
|
+
export declare const MAXIMUM_BUNDLE_BYTES: number;
|
|
11
|
+
export declare function fetchRequired(fetcher: ReadinessFetch, url: string, signal: AbortSignal | undefined): Promise<Response>;
|
|
12
|
+
export declare function bounded(response: Response, url: string, maximum: number): Promise<ArrayBuffer>;
|
|
13
|
+
export declare function text(response: Response, url: string, maximum: number): Promise<string>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const MAXIMUM_DOCUMENT_BYTES = 1024 * 1024;
|
|
2
|
+
export const MAXIMUM_BUNDLE_BYTES = 16 * 1024 * 1024;
|
|
3
|
+
export async function fetchRequired(fetcher, url, signal) {
|
|
4
|
+
const response = await fetcher(url, {
|
|
5
|
+
redirect: 'error',
|
|
6
|
+
...(signal === undefined ? {} : { signal }),
|
|
7
|
+
});
|
|
8
|
+
if (!response.ok)
|
|
9
|
+
throw new Error(`GET ${url} returned ${response.status}.`);
|
|
10
|
+
return response;
|
|
11
|
+
}
|
|
12
|
+
export async function bounded(response, url, maximum) {
|
|
13
|
+
const bytes = await response.arrayBuffer();
|
|
14
|
+
if (bytes.byteLength > maximum)
|
|
15
|
+
throw new Error(`GET ${url} exceeded ${maximum} bytes.`);
|
|
16
|
+
return bytes;
|
|
17
|
+
}
|
|
18
|
+
export async function text(response, url, maximum) {
|
|
19
|
+
const bytes = await bounded(response, url, maximum);
|
|
20
|
+
try {
|
|
21
|
+
return new TextDecoder('utf-8', { fatal: true, ignoreBOM: false }).decode(bytes);
|
|
22
|
+
}
|
|
23
|
+
catch (cause) {
|
|
24
|
+
throw new Error(`GET ${url} returned invalid UTF-8.`, { cause });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { IssuerId } from '../../../platform/auth/index.js';
|
|
2
|
+
import type { ReadinessOptions } from './fetch.js';
|
|
3
3
|
/** Verify issuer discovery and at least one admitted signing key at the serving identity. */
|
|
4
|
-
export declare function verifyIdentity(
|
|
5
|
-
readonly fetch?: ReadinessFetch;
|
|
6
|
-
readonly signal?: AbortSignal;
|
|
7
|
-
}): Promise<void>;
|
|
4
|
+
export declare function verifyIdentity(serving: IssuerId, options?: ReadinessOptions): Promise<void>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { issuer } from '@astrale-os/kernel-protocol';
|
|
2
2
|
const MAXIMUM_IDENTITY_BYTES = 256 * 1024;
|
|
3
3
|
/** Verify issuer discovery and at least one admitted signing key at the serving identity. */
|
|
4
|
-
export async function verifyIdentity(
|
|
4
|
+
export async function verifyIdentity(serving, options = {}) {
|
|
5
5
|
const fetcher = options.fetch ?? globalThis.fetch;
|
|
6
|
-
const configurationUrl = new URL(issuer.paths(
|
|
7
|
-
const configuration = issuer.acceptConfiguration(await json(fetcher, configurationUrl.href, options.signal),
|
|
6
|
+
const configurationUrl = new URL(issuer.paths(serving).configuration, serving);
|
|
7
|
+
const configuration = issuer.acceptConfiguration(await json(fetcher, configurationUrl.href, options.signal), serving);
|
|
8
8
|
const keys = issuer.acceptKeySet(await json(fetcher, configuration.jwks_uri, options.signal), configuration.id_token_signing_alg_values_supported);
|
|
9
9
|
if (keys.keys.length === 0)
|
|
10
10
|
throw new Error('Serving issuer publishes no signing keys.');
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import type { Release } from '../../release/
|
|
2
|
-
import type
|
|
1
|
+
import type { Release } from '../../release/index.js';
|
|
2
|
+
import type * as legacy from '../../release/legacy/index.js';
|
|
3
|
+
import type { ReadinessOptions } from './fetch.js';
|
|
3
4
|
export { verifyDeployment } from './deployment.js';
|
|
4
5
|
export { verifyIdentity } from './identity.js';
|
|
5
|
-
export {
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
export type { ReadinessFetch, ReadinessOptions } from './fetch.js';
|
|
7
|
+
export { verifyPublication } from './legacy/index.js';
|
|
8
|
+
export { verifyRelease } from './release.js';
|
|
9
|
+
/**
|
|
10
|
+
* Read-only verification of one exact live Release and its serving identity: an immutable
|
|
11
|
+
* deployment's `release.json` (release digest and build digest), or a stable target's
|
|
12
|
+
* `domain.json` (deprecated, `legacy/`).
|
|
13
|
+
*/
|
|
14
|
+
export declare function readiness(release: Release | legacy.Release, options?: ReadinessOptions): Promise<void>;
|