@astrale-os/sdk 0.6.0-beta.23 → 0.6.0-beta.25
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 +32 -38
- package/dist/application/action/context.d.ts +29 -25
- package/dist/application/action/index.d.ts +1 -1
- package/dist/application/define.d.ts +3 -1
- package/dist/application/define.js +16 -2
- package/dist/application/dependency/invoker.d.ts +5 -5
- package/dist/application/domain.d.ts +3 -1
- package/dist/application/index.d.ts +1 -1
- package/dist/application/integration/operation.d.ts +2 -2
- package/dist/application/mutation/index.d.ts +1 -1
- package/dist/application/query/composite/plan.d.ts +0 -4
- package/dist/application/query/composite/plan.js +0 -2
- package/dist/application/runtime/workflows.d.ts +1 -1
- package/dist/application/runtime/workflows.js +1 -4
- package/dist/application/view/define.js +4 -6
- package/dist/application/view/frontend.d.ts +2 -2
- package/dist/application/view/index.d.ts +1 -1
- package/dist/application/view/route.d.ts +0 -14
- package/dist/application/view/route.js +1 -64
- package/dist/application/workflow/context.d.ts +1 -1
- package/dist/application/workflow/define.d.ts +1 -1
- package/dist/application/workflow/define.js +1 -1
- package/dist/application/workflow/workflow.d.ts +1 -3
- package/dist/deployment/adapter/adapter.d.ts +3 -20
- package/dist/deployment/adapter/bundle/file.d.ts +1 -1
- package/dist/deployment/adapter/define.d.ts +4 -25
- package/dist/deployment/adapter/define.js +12 -44
- package/dist/deployment/adapter/index.d.ts +0 -2
- package/dist/deployment/adapter/release/list.d.ts +1 -2
- package/dist/deployment/address/summary.d.ts +3 -7
- package/dist/deployment/authoring.d.ts +0 -2
- package/dist/deployment/authoring.js +0 -1
- package/dist/deployment/build/build.d.ts +6 -0
- package/dist/deployment/build/compile.js +2 -0
- package/dist/deployment/build/frontend/compilation.d.ts +2 -4
- package/dist/deployment/build/frontend/compilation.js +0 -5
- package/dist/deployment/build/frontend/digest.js +1 -5
- package/dist/deployment/build/material.d.ts +2 -2
- package/dist/deployment/build/material.js +28 -13
- package/dist/deployment/deployment.d.ts +4 -8
- package/dist/deployment/index.d.ts +3 -5
- package/dist/deployment/index.js +1 -2
- package/dist/deployment/release/addressing.d.ts +2 -9
- package/dist/deployment/release/addressing.js +2 -3
- package/dist/deployment/release/index.d.ts +0 -2
- package/dist/deployment/release/index.js +0 -2
- package/dist/deployment/release/release.d.ts +1 -1
- package/dist/deployment/release/runtime.d.ts +0 -2
- package/dist/deployment/release/runtime.js +0 -2
- package/dist/deployment/release/served/index.d.ts +1 -2
- package/dist/deployment/release/served/index.js +7 -3
- package/dist/deployment/release/served/views.js +0 -1
- package/dist/deployment/verify/index.d.ts +2 -4
- package/dist/deployment/verify/index.js +1 -3
- package/dist/deployment/verify/preflight/index.d.ts +0 -12
- package/dist/deployment/verify/preflight/index.js +0 -12
- package/dist/deployment/verify/readiness/index.d.ts +2 -6
- package/dist/deployment/verify/readiness/index.js +3 -12
- package/dist/deployment/worker/response.d.ts +1 -4
- package/dist/deployment/worker/response.js +2 -8
- package/dist/execution/identity/authentication.d.ts +10 -1
- package/dist/execution/identity/authentication.js +21 -0
- package/dist/execution/identity/delivery.d.ts +2 -7
- package/dist/execution/identity/delivery.js +1 -23
- package/dist/execution/identity/identity.d.ts +2 -3
- package/dist/execution/identity/identity.js +5 -1
- package/dist/execution/index.d.ts +1 -3
- package/dist/execution/index.js +1 -2
- package/dist/execution/invocation/admission/authentication.d.ts +8 -5
- package/dist/execution/invocation/admission/authentication.js +39 -21
- package/dist/execution/invocation/admission/authority.d.ts +21 -6
- package/dist/execution/invocation/admission/authority.js +6 -4
- package/dist/execution/invocation/admission/index.d.ts +2 -2
- package/dist/execution/invocation/admission/index.js +1 -1
- package/dist/execution/invocation/dependency/bind.d.ts +2 -0
- package/dist/execution/invocation/dependency/bind.js +1 -2
- package/dist/execution/invocation/dispatch/context.d.ts +5 -5
- package/dist/execution/invocation/dispatch/context.js +16 -30
- package/dist/execution/invocation/dispatch/workflow.js +0 -4
- package/dist/execution/invocation/index.d.ts +2 -2
- package/dist/execution/invocation/index.js +1 -1
- package/dist/execution/invocation/integration/call.d.ts +2 -1
- package/dist/execution/invocation/integration/call.js +1 -1
- package/dist/execution/invocation/integration/clients.d.ts +1 -1
- package/dist/execution/invocation/invocation.js +3 -12
- package/dist/execution/invocation/result/errors.d.ts +0 -10
- package/dist/execution/invocation/result/errors.js +0 -17
- package/dist/execution/invocation/result/index.d.ts +2 -2
- package/dist/execution/invocation/result/index.js +1 -1
- package/dist/execution/runtime/release.d.ts +6 -11
- package/dist/execution/runtime/release.js +2 -9
- package/dist/execution/service/create.js +3 -1
- package/dist/execution/service/service.d.ts +2 -3
- package/dist/execution/service/serving/delivery.d.ts +1 -2
- package/dist/execution/service/serving/delivery.js +1 -2
- package/dist/execution/service/serving/source.d.ts +3 -10
- package/dist/execution/service/serving/source.js +1 -5
- package/dist/execution/workflows/index.d.ts +1 -1
- package/dist/execution/workflows/index.js +1 -1
- package/dist/execution/workflows/options.d.ts +0 -6
- package/dist/execution/workflows/options.js +0 -18
- package/dist/execution/workflows/receiver.d.ts +1 -2
- package/dist/execution/workflows/receiver.js +13 -20
- package/dist/execution/workflows/route.d.ts +1 -3
- package/dist/execution/workflows/route.js +4 -9
- package/dist/execution/workflows/run.d.ts +1 -1
- package/dist/execution/workflows/run.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/platform/graph/alias.d.ts +1 -5
- package/dist/platform/graph/alias.js +1 -5
- package/dist/platform/graph/document/index.d.ts +1 -1
- package/dist/platform/graph/document/index.js +1 -1
- package/dist/platform/graph/index.d.ts +1 -1
- package/dist/platform/graph/index.js +1 -1
- package/dist/platform/release/index.d.ts +1 -26
- package/dist/platform/release/index.js +1 -26
- package/dist/platform/schema/class-icon-svg.d.ts +9 -0
- package/dist/platform/schema/class-icon-svg.js +29 -0
- package/dist/platform/schema/class-icon.d.ts +3 -8
- package/dist/platform/schema/class-icon.js +2 -29
- package/dist/platform/schema/index.d.ts +1 -1
- package/dist/platform/schema/schema-authoring.d.ts +14 -7
- package/dist/platform/schema/schema-authoring.js +5 -1
- package/dist/project/admit.js +0 -4
- package/dist/project/install-command.d.ts +0 -4
- package/dist/project/install-command.js +1 -5
- package/dist/tooling/cli/deploy-mode.d.ts +3 -59
- package/dist/tooling/cli/deploy-mode.js +46 -122
- package/dist/tooling/cli/deploy-result.d.ts +10 -15
- package/dist/tooling/cli/help.js +9 -16
- package/dist/tooling/cli/immutable-deployment.d.ts +3 -3
- package/dist/tooling/cli/index.d.ts +1 -1
- package/dist/tooling/cli/list.d.ts +5 -7
- package/dist/tooling/cli/list.js +9 -61
- package/dist/tooling/cli/orchestrate.js +6 -16
- package/dist/tooling/cli/publish/index.d.ts +2 -2
- package/dist/tooling/cli/registry/client.js +1 -1
- package/dist/tooling/cli/secrets.d.ts +2 -2
- package/dist/tooling/linter/implementations/source/global.js +0 -1
- package/dist/tooling/linter/implementations/source/verifiers.js +0 -2
- package/dist/tooling/linter/policy/generated.js +2 -51
- package/dist/tooling/linter/requirements/registry.js +0 -6
- package/package.json +9 -8
- package/dist/application/query/execution/projection.d.ts +0 -3
- package/dist/application/query/execution/projection.js +0 -3
- package/dist/deployment/adapter/legacy/adapter.d.ts +0 -40
- package/dist/deployment/adapter/legacy/adapter.js +0 -1
- package/dist/deployment/adapter/legacy/deploy/context.d.ts +0 -19
- package/dist/deployment/adapter/legacy/deploy/context.js +0 -1
- package/dist/deployment/adapter/legacy/deploy/index.d.ts +0 -2
- package/dist/deployment/adapter/legacy/deploy/index.js +0 -1
- package/dist/deployment/adapter/legacy/deploy/result.d.ts +0 -89
- package/dist/deployment/adapter/legacy/deploy/result.js +0 -1
- package/dist/deployment/adapter/legacy/index.d.ts +0 -24
- package/dist/deployment/adapter/legacy/index.js +0 -1
- package/dist/deployment/adapter/legacy/prepare/artifact.d.ts +0 -43
- package/dist/deployment/adapter/legacy/prepare/artifact.js +0 -1
- package/dist/deployment/adapter/legacy/prepare/context.d.ts +0 -33
- package/dist/deployment/adapter/legacy/prepare/context.js +0 -1
- package/dist/deployment/adapter/legacy/prepare/index.d.ts +0 -2
- package/dist/deployment/adapter/legacy/prepare/index.js +0 -1
- package/dist/deployment/deploy.d.ts +0 -20
- package/dist/deployment/deploy.js +0 -31
- package/dist/deployment/release/legacy/admission.d.ts +0 -3
- package/dist/deployment/release/legacy/admission.js +0 -8
- package/dist/deployment/release/legacy/assemble.d.ts +0 -5
- package/dist/deployment/release/legacy/assemble.js +0 -20
- package/dist/deployment/release/legacy/index.d.ts +0 -35
- package/dist/deployment/release/legacy/index.js +0 -34
- package/dist/deployment/release/legacy/release.d.ts +0 -12
- package/dist/deployment/release/legacy/release.js +0 -1
- package/dist/deployment/release/legacy/seal.d.ts +0 -10
- package/dist/deployment/release/legacy/seal.js +0 -17
- package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
- package/dist/deployment/verify/preflight/artifact.js +0 -122
- package/dist/deployment/verify/preflight/publication.d.ts +0 -4
- package/dist/deployment/verify/preflight/publication.js +0 -15
- package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
- package/dist/deployment/verify/readiness/deployment.js +0 -143
- package/dist/deployment/verify/readiness/legacy/index.d.ts +0 -2
- package/dist/deployment/verify/readiness/legacy/index.js +0 -2
- package/dist/deployment/verify/readiness/legacy/publication.d.ts +0 -12
- package/dist/deployment/verify/readiness/legacy/publication.js +0 -23
- package/dist/execution/service/errors.d.ts +0 -3
- package/dist/execution/service/errors.js +0 -3
- package/dist/execution/service/serving/legacy/index.d.ts +0 -15
- package/dist/execution/service/serving/legacy/index.js +0 -19
- package/dist/tooling/cli/deprecations.d.ts +0 -9
- package/dist/tooling/cli/deprecations.js +0 -15
- package/dist/tooling/cli/legacy/deploy-result.d.ts +0 -28
- package/dist/tooling/cli/legacy/deploy-result.js +0 -37
- package/dist/tooling/cli/legacy/stable-target-adapter.d.ts +0 -21
- package/dist/tooling/cli/legacy/stable-target-adapter.js +0 -14
- package/dist/tooling/cli/legacy/stable-target-deploy.d.ts +0 -40
- package/dist/tooling/cli/legacy/stable-target-deploy.js +0 -102
- package/dist/tooling/cli/legacy/uploaded-build.d.ts +0 -11
- package/dist/tooling/cli/legacy/uploaded-build.js +0 -22
- package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
- package/dist/tooling/linter/implementations/source/migrations.js +0 -113
- package/dist/tooling/linter/qualification/index.d.ts +0 -10
- package/dist/tooling/linter/qualification/index.js +0 -2
- package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
- package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
- package/dist/tooling/linter/qualification/runner.d.ts +0 -3
- package/dist/tooling/linter/qualification/runner.js +0 -6
|
@@ -8,7 +8,6 @@ export function views(build, addressing) {
|
|
|
8
8
|
view: route.view,
|
|
9
9
|
href: new URL(route.path.replace(/^\//u, ''), base).href,
|
|
10
10
|
handshake: route.handshake,
|
|
11
|
-
...(route.iframe === undefined ? {} : { iframe: route.iframe }),
|
|
12
11
|
...(route.host === undefined ? {} : { host: route.host }),
|
|
13
12
|
})));
|
|
14
13
|
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export { preflight as verifyPreflight } from './preflight/index.js';
|
|
2
|
-
export { isPreparedArtifact } from './preflight/index.js';
|
|
3
1
|
export { bundle as verifyBundle, isBundle, uploadedBuild as verifyUploadedBuild, } from './preflight/index.js';
|
|
4
|
-
export type { BundleInput
|
|
5
|
-
export { readiness as verifyReadiness, readinessPaths
|
|
2
|
+
export type { BundleInput } from './preflight/index.js';
|
|
3
|
+
export { readiness as verifyReadiness, readinessPaths } from './readiness/index.js';
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
export { preflight as verifyPreflight } from './preflight/index.js';
|
|
2
|
-
export { isPreparedArtifact } from './preflight/index.js';
|
|
3
1
|
export { bundle as verifyBundle, isBundle, uploadedBuild as verifyUploadedBuild, } from './preflight/index.js';
|
|
4
|
-
export { readiness as verifyReadiness, readinessPaths
|
|
2
|
+
export { readiness as verifyReadiness, readinessPaths } from './readiness/index.js';
|
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
import type { ArtifactSource, PreparedArtifact } from '../../adapter/legacy/index.js';
|
|
2
|
-
import type { Build } from '../../build/index.js';
|
|
3
|
-
import type { ResolvedRuntimeReference } from '../../runtime/index.js';
|
|
4
|
-
export { artifact, isPreparedArtifact } from './artifact.js';
|
|
5
1
|
export { bundle, isBundle, uploadedBuild, type BundleInput } from './bundle.js';
|
|
6
2
|
export { build } from './build.js';
|
|
7
|
-
export { publication } from './publication.js';
|
|
8
|
-
export interface PreflightInput<BuildValue extends Build = Build> {
|
|
9
|
-
readonly build: BuildValue;
|
|
10
|
-
readonly runtime: ResolvedRuntimeReference;
|
|
11
|
-
readonly source: ArtifactSource;
|
|
12
|
-
}
|
|
13
|
-
/** Admit exact deployment material before any provider mutation. */
|
|
14
|
-
export declare function preflight<const BuildValue extends Build>(input: PreflightInput<BuildValue>): PreparedArtifact<BuildValue>;
|
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
import { artifact } from './artifact.js';
|
|
2
|
-
import { build as verifyBuild } from './build.js';
|
|
3
|
-
import { publication as verifyPublication } from './publication.js';
|
|
4
|
-
export { artifact, isPreparedArtifact } from './artifact.js';
|
|
5
1
|
export { bundle, isBundle, uploadedBuild } from './bundle.js';
|
|
6
2
|
export { build } from './build.js';
|
|
7
|
-
export { publication } from './publication.js';
|
|
8
|
-
/** Admit exact deployment material before any provider mutation. */
|
|
9
|
-
export function preflight(input) {
|
|
10
|
-
verifyBuild(input.build);
|
|
11
|
-
const prepared = artifact(input.build, input.runtime, input.source);
|
|
12
|
-
verifyPublication(prepared);
|
|
13
|
-
return prepared;
|
|
14
|
-
}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import type { Release } from '../../release/index.js';
|
|
2
|
-
import type * as legacy from '../../release/legacy/index.js';
|
|
3
2
|
import type { ReadinessOptions } from './fetch.js';
|
|
4
|
-
export { verifyDeployment } from './deployment.js';
|
|
5
3
|
export { verifyIdentity } from './identity.js';
|
|
6
4
|
export type { ReadinessFetch, ReadinessOptions } from './fetch.js';
|
|
7
|
-
export { verifyPublication } from './legacy/index.js';
|
|
8
5
|
export { verifyRelease } from './release.js';
|
|
9
6
|
/**
|
|
10
7
|
* Read-only verification of one exact live Release and its serving identity: an immutable
|
|
11
|
-
* deployment's
|
|
12
|
-
* `domain.json` (deprecated, `legacy/`).
|
|
8
|
+
* deployment's release.json (release digest and build digest).
|
|
13
9
|
*/
|
|
14
10
|
/**
|
|
15
11
|
* The local paths `readiness` reads of one immutable deployment, each answering 200 once the
|
|
@@ -18,4 +14,4 @@ export { verifyRelease } from './release.js';
|
|
|
18
14
|
* deployment probes these.
|
|
19
15
|
*/
|
|
20
16
|
export declare function readinessPaths(deployed: Release): readonly string[];
|
|
21
|
-
export declare function readiness(release: Release
|
|
17
|
+
export declare function readiness(release: Release, options?: ReadinessOptions): Promise<void>;
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import { issuer } from '@astrale-os/kernel-protocol';
|
|
2
2
|
import * as release from '@astrale-os/kernel-protocol/release';
|
|
3
3
|
import { verifyIdentity } from './identity.js';
|
|
4
|
-
import { verifyPublication } from './legacy/index.js';
|
|
5
4
|
import { verifyRelease } from './release.js';
|
|
6
|
-
export { verifyDeployment } from './deployment.js';
|
|
7
5
|
export { verifyIdentity } from './identity.js';
|
|
8
|
-
export { verifyPublication } from './legacy/index.js';
|
|
9
6
|
export { verifyRelease } from './release.js';
|
|
10
7
|
/**
|
|
11
8
|
* Read-only verification of one exact live Release and its serving identity: an immutable
|
|
12
|
-
* deployment's
|
|
13
|
-
* `domain.json` (deprecated, `legacy/`).
|
|
9
|
+
* deployment's release.json (release digest and build digest).
|
|
14
10
|
*/
|
|
15
11
|
/**
|
|
16
12
|
* The local paths `readiness` reads of one immutable deployment, each answering 200 once the
|
|
@@ -28,11 +24,6 @@ export function readinessPaths(deployed) {
|
|
|
28
24
|
]);
|
|
29
25
|
}
|
|
30
26
|
export async function readiness(release, options = {}) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
await verifyIdentity(release.url, options);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
await verifyPublication(release, options);
|
|
37
|
-
await verifyIdentity(release.addressing.issuer, options);
|
|
27
|
+
await verifyRelease(release, options);
|
|
28
|
+
await verifyIdentity(release.url, options);
|
|
38
29
|
}
|
|
@@ -84,10 +84,7 @@ export type WorkerDeploymentResult = {
|
|
|
84
84
|
};
|
|
85
85
|
readonly deployment: WorkerDeploymentSummary;
|
|
86
86
|
} | WorkerDeploymentRejection;
|
|
87
|
-
/**
|
|
88
|
-
* Admit the answer of a host's `hosting`: its routing domain. The `addressing: 'opaque'` an older
|
|
89
|
-
* Services answers beside it is admitted and dropped: every Service name is opaque.
|
|
90
|
-
*/
|
|
87
|
+
/** Admit the answer of a host's `hosting`: exactly its routing domain. */
|
|
91
88
|
export declare function decodeWorkerHosting(input: unknown): WorkerHostingV1;
|
|
92
89
|
/**
|
|
93
90
|
* Admit the answer of a deploy exactly: a deployment whose state reports the secret state it
|
|
@@ -23,18 +23,12 @@ const SECRETS_BY_STATE = Object.freeze({
|
|
|
23
23
|
created: Object.freeze(['bound']),
|
|
24
24
|
reused: Object.freeze(['updated', 'unchanged']),
|
|
25
25
|
});
|
|
26
|
-
/**
|
|
27
|
-
* Admit the answer of a host's `hosting`: its routing domain. The `addressing: 'opaque'` an older
|
|
28
|
-
* Services answers beside it is admitted and dropped: every Service name is opaque.
|
|
29
|
-
*/
|
|
26
|
+
/** Admit the answer of a host's `hosting`: exactly its routing domain. */
|
|
30
27
|
export function decodeWorkerHosting(input) {
|
|
31
|
-
const value = exact(input, ['routingDomain'], [
|
|
28
|
+
const value = exact(input, ['routingDomain'], [], 'hosting');
|
|
32
29
|
if (typeof value.routingDomain !== 'string' || !isDnsName(value.routingDomain)) {
|
|
33
30
|
invalid('hosting', 'routingDomain');
|
|
34
31
|
}
|
|
35
|
-
if (value.addressing !== undefined && value.addressing !== 'opaque') {
|
|
36
|
-
invalid('hosting', 'addressing');
|
|
37
|
-
}
|
|
38
32
|
return Object.freeze({ routingDomain: value.routingDomain });
|
|
39
33
|
}
|
|
40
34
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Fetch } from '@astrale-os/kernel-client';
|
|
2
2
|
import type { CredentialInput, IdentityId, IssuerId } from '../../platform/auth/index.js';
|
|
3
|
-
import type { AuthenticatedInvocation } from '../invocation/index.js';
|
|
3
|
+
import type { AuthenticatedInvocation, SelfInvocation } from '../invocation/index.js';
|
|
4
4
|
import type { InvocationAdmissionInput } from '../invocation/index.js';
|
|
5
5
|
import type { IdentityNetworkPolicy, VerificationBasis, VerificationBasisResolver } from './jwks.js';
|
|
6
6
|
import type { SigningMaterial } from './signing.js';
|
|
@@ -26,6 +26,15 @@ export declare function authenticate(credentialInput: CredentialInput, expectedK
|
|
|
26
26
|
readonly deadline: number;
|
|
27
27
|
readonly signal: AbortSignal;
|
|
28
28
|
}, configuration: AuthenticationConfiguration): Promise<AuthenticatedInvocation>;
|
|
29
|
+
/**
|
|
30
|
+
* The Domain's own authority toward the source Kernel of an admitted call that carries no
|
|
31
|
+
* credential. No caller credential bounds it: its callbacks live as long as the execution, exactly
|
|
32
|
+
* as the `self` half of an authenticated call does within its carrier.
|
|
33
|
+
*/
|
|
34
|
+
export declare function selfInvocation(kernel: IssuerId, execution: {
|
|
35
|
+
readonly deadline: number;
|
|
36
|
+
readonly signal: AbortSignal;
|
|
37
|
+
}, configuration: AuthenticationConfiguration): SelfInvocation;
|
|
29
38
|
/**
|
|
30
39
|
* The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`,
|
|
31
40
|
* which no caller credential carries: the run acts as its executor, never as its initiator. Every
|
|
@@ -78,6 +78,27 @@ export async function authenticate(credentialInput, expectedKernel, execution, c
|
|
|
78
78
|
},
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* The Domain's own authority toward the source Kernel of an admitted call that carries no
|
|
83
|
+
* credential. No caller credential bounds it: its callbacks live as long as the execution, exactly
|
|
84
|
+
* as the `self` half of an authenticated call does within its carrier.
|
|
85
|
+
*/
|
|
86
|
+
export function selfInvocation(kernel, execution, configuration) {
|
|
87
|
+
requireLive(execution);
|
|
88
|
+
const admitted = httpIssuer(kernel, configuration.policy.allowInsecureHttp === true);
|
|
89
|
+
admitEndpoint(invocationUrl(admitted), configuration.policy);
|
|
90
|
+
const session = callbackSession(admitted, selfIdentity, undefined, execution, configuration);
|
|
91
|
+
let closed = false;
|
|
92
|
+
return Object.freeze({
|
|
93
|
+
graph: Object.freeze({ self: bindSession(session, execution) }),
|
|
94
|
+
close() {
|
|
95
|
+
if (closed)
|
|
96
|
+
return;
|
|
97
|
+
closed = true;
|
|
98
|
+
session.close();
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
81
102
|
/**
|
|
82
103
|
* The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`,
|
|
83
104
|
* which no caller credential carries: the run acts as its executor, never as its initiator. Every
|
|
@@ -2,12 +2,7 @@ import type { release as serverRelease } from '@astrale-os/kernel-server';
|
|
|
2
2
|
import * as release from '@astrale-os/kernel-protocol/release';
|
|
3
3
|
import type { IssuerId } from '../../platform/auth/index.js';
|
|
4
4
|
import type { SigningMaterial } from './signing.js';
|
|
5
|
-
type Served = release.DomainRelease | release.legacy.Publication;
|
|
6
5
|
/**
|
|
7
|
-
* Create one stateless, nonce-bound public Delivery provider for the exact
|
|
8
|
-
* serves. It answers in the request's version: a Delivery v2 carrying the release for a v2
|
|
9
|
-
* request, and a Delivery v1 carrying the Publication (a release's frozen v3 projection) for the
|
|
10
|
-
* deprecated v1 request. A stable target's Publication answers v1 only.
|
|
6
|
+
* Create one stateless, nonce-bound public Delivery v2 provider for the exact deployment release.
|
|
11
7
|
*/
|
|
12
|
-
export declare function releaseDelivery(signing: SigningMaterial, issuer: IssuerId, subject: string, deployed:
|
|
13
|
-
export {};
|
|
8
|
+
export declare function releaseDelivery(signing: SigningMaterial, issuer: IssuerId, subject: string, deployed: release.DomainRelease): serverRelease.delivery.Provider;
|
|
@@ -2,34 +2,12 @@ import * as release from '@astrale-os/kernel-protocol/release';
|
|
|
2
2
|
import { SignJWT } from 'jose';
|
|
3
3
|
const ATTESTATION_TTL_SECONDS = 60;
|
|
4
4
|
/**
|
|
5
|
-
* Create one stateless, nonce-bound public Delivery provider for the exact
|
|
6
|
-
* serves. It answers in the request's version: a Delivery v2 carrying the release for a v2
|
|
7
|
-
* request, and a Delivery v1 carrying the Publication (a release's frozen v3 projection) for the
|
|
8
|
-
* deprecated v1 request. A stable target's Publication answers v1 only.
|
|
5
|
+
* Create one stateless, nonce-bound public Delivery v2 provider for the exact deployment release.
|
|
9
6
|
*/
|
|
10
7
|
export function releaseDelivery(signing, issuer, subject, deployed) {
|
|
11
|
-
const projection = deployed.version === 4 ? release.legacy.publication(deployed) : deployed;
|
|
12
8
|
return Object.freeze({
|
|
13
9
|
async create(request, context) {
|
|
14
10
|
context.signal.throwIfAborted();
|
|
15
|
-
if (request.version === 1) {
|
|
16
|
-
const attestation = await attest(signing, issuer, subject, request.kernel, {
|
|
17
|
-
purpose: release.legacy.delivery.PURPOSE,
|
|
18
|
-
nonce: request.nonce,
|
|
19
|
-
etag: projection.etag,
|
|
20
|
-
schemaRevision: projection.schema.revision,
|
|
21
|
-
});
|
|
22
|
-
context.signal.throwIfAborted();
|
|
23
|
-
return release.legacy.delivery.accept({
|
|
24
|
-
format: 'astrale.domain.delivery',
|
|
25
|
-
version: 1,
|
|
26
|
-
publication: projection,
|
|
27
|
-
attestation,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
if (deployed.version !== 4) {
|
|
31
|
-
throw new TypeError('A Publication-backed deployment answers Delivery v1 only.');
|
|
32
|
-
}
|
|
33
11
|
const attestation = await attest(signing, issuer, subject, request.kernel, {
|
|
34
12
|
purpose: release.delivery.PURPOSE,
|
|
35
13
|
nonce: request.nonce,
|
|
@@ -12,10 +12,9 @@ export interface Identity extends Issuer, InvocationAuthority {
|
|
|
12
12
|
readonly subject: string;
|
|
13
13
|
readonly tokenExchange?: exchange.Provider;
|
|
14
14
|
/**
|
|
15
|
-
* Delivery for the exact
|
|
16
|
-
* over its frozen v3 projection, or v1 over a stable target's Publication.
|
|
15
|
+
* Delivery v2 for the exact release this deployment serves.
|
|
17
16
|
*/
|
|
18
|
-
delivery(served: releaseProtocol.DomainRelease
|
|
17
|
+
delivery(served: releaseProtocol.DomainRelease): release.delivery.Provider;
|
|
19
18
|
/**
|
|
20
19
|
* The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`
|
|
21
20
|
* (`ctx.execution.id`), which no caller credential carries; its credentials name `executionId` in
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { admit, authenticate, executorSession } from './authentication.js';
|
|
1
|
+
import { admit, authenticate, executorSession, selfInvocation } from './authentication.js';
|
|
2
2
|
import { releaseDelivery } from './delivery.js';
|
|
3
3
|
import { httpIssuer } from './errors.js';
|
|
4
4
|
import { maximumExchangeTtl, tokenExchange } from './exchange.js';
|
|
@@ -53,6 +53,7 @@ export function createIdentity(input) {
|
|
|
53
53
|
admit: (request) => admit(request, configuration),
|
|
54
54
|
executor: (kernel, executionId, execution) => executorSession(kernel, executionId, execution, configuration),
|
|
55
55
|
authenticate: (request) => authenticate(request.credential, request.via.issuer, request.context.execution, configuration),
|
|
56
|
+
self: async (request) => selfInvocation(request.via.issuer, request.context.execution, configuration),
|
|
56
57
|
});
|
|
57
58
|
}
|
|
58
59
|
export function identity(input) {
|
|
@@ -68,6 +69,7 @@ export function identity(input) {
|
|
|
68
69
|
'delivery',
|
|
69
70
|
'admit',
|
|
70
71
|
'authenticate',
|
|
72
|
+
'self',
|
|
71
73
|
'executor',
|
|
72
74
|
]);
|
|
73
75
|
if (Reflect.ownKeys(input).some((key) => !allowed.has(key)) ||
|
|
@@ -77,6 +79,7 @@ export function identity(input) {
|
|
|
77
79
|
typeof input.delivery !== 'function' ||
|
|
78
80
|
typeof input.admit !== 'function' ||
|
|
79
81
|
typeof input.authenticate !== 'function' ||
|
|
82
|
+
typeof input.self !== 'function' ||
|
|
80
83
|
(input.executor !== undefined && typeof input.executor !== 'function')) {
|
|
81
84
|
invalid();
|
|
82
85
|
}
|
|
@@ -95,6 +98,7 @@ export function identity(input) {
|
|
|
95
98
|
delivery: receiver.delivery.bind(receiver),
|
|
96
99
|
admit: receiver.admit.bind(receiver),
|
|
97
100
|
authenticate: receiver.authenticate.bind(receiver),
|
|
101
|
+
self: receiver.self.bind(receiver),
|
|
98
102
|
...(receiver.executor === undefined ? {} : { executor: receiver.executor.bind(receiver) }),
|
|
99
103
|
});
|
|
100
104
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
export { serve } from './serve.js';
|
|
2
2
|
export type { ExecutionContext, ServedDomain, ServeInput } from './serve.js';
|
|
3
3
|
export { createIdentity, maximumExchangeTtl, type ExchangeOptions, type Identity, type IdentityInput, } from './identity/index.js';
|
|
4
|
-
export { InvocationError } from './invocation/index.js';
|
|
5
|
-
export type { InvocationErrorCode } from './invocation/index.js';
|
|
6
4
|
export type { DurableEngine, DurableServing, DurableServingProvider } from './workflows/index.js';
|
|
7
|
-
export { isCanonicalDurableRequest
|
|
5
|
+
export { isCanonicalDurableRequest } from './workflows/route.js';
|
package/dist/execution/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { serve } from './serve.js';
|
|
2
2
|
export { createIdentity, maximumExchangeTtl, } from './identity/index.js';
|
|
3
|
-
export {
|
|
4
|
-
export { isCanonicalDurableRequest, isLegacyDurableRequest } from './workflows/route.js';
|
|
3
|
+
export { isCanonicalDurableRequest } from './workflows/route.js';
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { HandlerRequest } from '@astrale-os/kernel-server';
|
|
2
2
|
import type { AnonymousCaller, ResolvedCallable } from '../../../application/action/index.js';
|
|
3
3
|
import type { Domain } from '../../../platform/schema/index.js';
|
|
4
|
-
import type { AuthenticatedInvocation, InvocationAuthority } from './authority.js';
|
|
5
|
-
|
|
4
|
+
import type { AuthenticatedInvocation, InvocationAuthority, SelfInvocation } from './authority.js';
|
|
5
|
+
/** A call without a credential: no caller, and the installed Domain's own capabilities. */
|
|
6
|
+
export interface AnonymousInvocation extends SelfInvocation {
|
|
6
7
|
readonly caller: AnonymousCaller;
|
|
7
|
-
readonly kernel: null;
|
|
8
|
-
readonly graph: null;
|
|
9
|
-
close(): void;
|
|
10
8
|
}
|
|
11
9
|
export type InvocationAuthentication = AnonymousInvocation | AuthenticatedInvocation;
|
|
10
|
+
/**
|
|
11
|
+
* The sessions one invocation holds toward its source Kernel: the Domain's own always, its
|
|
12
|
+
* caller's only when the call carried a credential.
|
|
13
|
+
*/
|
|
14
|
+
export type InvocationSessions = InvocationAuthentication['graph'];
|
|
12
15
|
export declare function authentication(callable: ResolvedCallable, request: HandlerRequest, domain: Domain, authority: InvocationAuthority): Promise<InvocationAuthentication>;
|
|
@@ -3,16 +3,12 @@ import { bindSession } from '../../../platform/client/session/index.js';
|
|
|
3
3
|
import { NodeId } from '../../../platform/graph/node/index.js';
|
|
4
4
|
import { protocolError } from '../result/index.js';
|
|
5
5
|
import { requireVia } from './authority.js';
|
|
6
|
-
const ANONYMOUS = Object.freeze({
|
|
7
|
-
caller: Object.freeze({ kind: 'anonymous' }),
|
|
8
|
-
kernel: null,
|
|
9
|
-
graph: null,
|
|
10
|
-
close() { },
|
|
11
|
-
});
|
|
6
|
+
const ANONYMOUS = Object.freeze({ kind: 'anonymous' });
|
|
12
7
|
export async function authentication(callable, request, domain, authority) {
|
|
13
8
|
const credential = request.credential;
|
|
14
|
-
if (callable.auth === 'anonymous' && credential === undefined)
|
|
15
|
-
return
|
|
9
|
+
if (callable.auth === 'anonymous' && credential === undefined) {
|
|
10
|
+
return anonymous(await authority.self({ via: requireVia(request), domain, context: request.context }));
|
|
11
|
+
}
|
|
16
12
|
if (credential === undefined) {
|
|
17
13
|
throw protocolError('AUTH_MISSING', 'Authentication is required.');
|
|
18
14
|
}
|
|
@@ -35,7 +31,7 @@ export async function authentication(callable, request, domain, authority) {
|
|
|
35
31
|
invalid();
|
|
36
32
|
}
|
|
37
33
|
const caller = admitCaller(authenticated.caller);
|
|
38
|
-
const graphInput = admitGraph(authenticated.graph);
|
|
34
|
+
const graphInput = admitGraph(authenticated.graph, ['caller', 'self']);
|
|
39
35
|
const graph = Object.freeze({
|
|
40
36
|
caller: bindSession(graphInput.caller),
|
|
41
37
|
self: bindSession(graphInput.self),
|
|
@@ -43,24 +39,46 @@ export async function authentication(callable, request, domain, authority) {
|
|
|
43
39
|
return Object.freeze({ caller, graph, close });
|
|
44
40
|
}
|
|
45
41
|
catch (cause) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
42
|
+
rejectClosing(close, cause);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Admit the Domain's own capabilities for a call that carries no credential. */
|
|
46
|
+
function anonymous(own) {
|
|
47
|
+
let close;
|
|
48
|
+
try {
|
|
49
|
+
close = captureClose(own);
|
|
50
|
+
if (own === null ||
|
|
51
|
+
typeof own !== 'object' ||
|
|
52
|
+
Array.isArray(own) ||
|
|
53
|
+
Reflect.ownKeys(own).some((key) => key !== 'graph' && key !== 'close') ||
|
|
54
|
+
close === undefined) {
|
|
55
|
+
invalid();
|
|
53
56
|
}
|
|
57
|
+
const graph = Object.freeze({ self: bindSession(admitGraph(own.graph, ['self']).self) });
|
|
58
|
+
return Object.freeze({ caller: ANONYMOUS, graph, close });
|
|
59
|
+
}
|
|
60
|
+
catch (cause) {
|
|
61
|
+
rejectClosing(close, cause);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Release whatever the authority opened before refusing its invalid capabilities. */
|
|
65
|
+
function rejectClosing(close, cause) {
|
|
66
|
+
if (close === undefined)
|
|
54
67
|
invalid(cause);
|
|
68
|
+
try {
|
|
69
|
+
close();
|
|
70
|
+
}
|
|
71
|
+
catch (cleanup) {
|
|
72
|
+
throw new AggregateError([cause, cleanup], 'Invocation authority returned invalid capabilities and cleanup failed.');
|
|
55
73
|
}
|
|
74
|
+
invalid(cause);
|
|
56
75
|
}
|
|
57
|
-
function admitGraph(input) {
|
|
76
|
+
function admitGraph(input, modes) {
|
|
58
77
|
if (input === null ||
|
|
59
78
|
typeof input !== 'object' ||
|
|
60
79
|
Array.isArray(input) ||
|
|
61
|
-
!Object.hasOwn(input,
|
|
62
|
-
|
|
63
|
-
Reflect.ownKeys(input).some((key) => key !== 'caller' && key !== 'self')) {
|
|
80
|
+
modes.some((mode) => !Object.hasOwn(input, mode)) ||
|
|
81
|
+
Reflect.ownKeys(input).some((key) => !modes.includes(key))) {
|
|
64
82
|
invalid();
|
|
65
83
|
}
|
|
66
84
|
return input;
|
|
@@ -134,6 +152,6 @@ function optionalTime(input) {
|
|
|
134
152
|
return input === undefined || (typeof input === 'number' && Number.isFinite(input));
|
|
135
153
|
}
|
|
136
154
|
function invalid(cause) {
|
|
137
|
-
const message = 'Invocation authority returned invalid
|
|
155
|
+
const message = 'Invocation authority returned invalid capabilities.';
|
|
138
156
|
throw cause === undefined ? new TypeError(message) : new TypeError(message, { cause });
|
|
139
157
|
}
|
|
@@ -6,13 +6,18 @@ import type { Domain } from '../../../platform/schema/index.js';
|
|
|
6
6
|
export interface InvocationAdmissionInput {
|
|
7
7
|
readonly call: invocation.Call;
|
|
8
8
|
readonly credential?: string;
|
|
9
|
-
readonly via: invocation.Via
|
|
9
|
+
readonly via: invocation.Via;
|
|
10
10
|
readonly domain: Domain;
|
|
11
11
|
readonly context: InvocationContext;
|
|
12
12
|
}
|
|
13
13
|
export interface InvocationAuthenticationInput {
|
|
14
14
|
readonly credential: string;
|
|
15
|
-
readonly via: invocation.Via
|
|
15
|
+
readonly via: invocation.Via;
|
|
16
|
+
readonly domain: Domain;
|
|
17
|
+
readonly context: InvocationContext;
|
|
18
|
+
}
|
|
19
|
+
export interface InvocationSelfInput {
|
|
20
|
+
readonly via: invocation.Via;
|
|
16
21
|
readonly domain: Domain;
|
|
17
22
|
readonly context: InvocationContext;
|
|
18
23
|
}
|
|
@@ -22,6 +27,11 @@ export interface AuthenticatedInvocation {
|
|
|
22
27
|
readonly graph: Readonly<Record<'caller' | 'self', BoundClientSession>>;
|
|
23
28
|
close(): void;
|
|
24
29
|
}
|
|
30
|
+
/** The Domain's own capabilities, before the SDK admits them for a call without a credential. */
|
|
31
|
+
export interface SelfInvocation {
|
|
32
|
+
readonly graph: Readonly<Record<'self', BoundClientSession>>;
|
|
33
|
+
close(): void;
|
|
34
|
+
}
|
|
25
35
|
export interface InvocationAuthority {
|
|
26
36
|
/**
|
|
27
37
|
* The source Kernel's `Function.admit` of a remote call: resolves to the admitted target, or
|
|
@@ -30,12 +40,17 @@ export interface InvocationAuthority {
|
|
|
30
40
|
*/
|
|
31
41
|
admit(input: InvocationAdmissionInput): Promise<unknown>;
|
|
32
42
|
authenticate(input: InvocationAuthenticationInput): Promise<AuthenticatedInvocation>;
|
|
43
|
+
/**
|
|
44
|
+
* The Domain's own authority toward the source Kernel, for an admitted call to an `anonymous`
|
|
45
|
+
* callable that carries no credential: its handler acts as the installed Domain, never as a
|
|
46
|
+
* caller.
|
|
47
|
+
*/
|
|
48
|
+
self(input: InvocationSelfInput): Promise<SelfInvocation>;
|
|
33
49
|
}
|
|
34
|
-
/** Capture the execution Identity capability and receiver-bind
|
|
50
|
+
/** Capture the execution Identity capability and receiver-bind its privileged operations. */
|
|
35
51
|
export declare function authority(input: InvocationAuthority): InvocationAuthority;
|
|
36
52
|
/**
|
|
37
53
|
* The routed witness of a remote call, already admitted by the Kernel Server against the served
|
|
38
|
-
* snapshot: the exact
|
|
39
|
-
* (a release's exact projection, or a stable target's Publication).
|
|
54
|
+
* snapshot: the exact ReleaseRef of this immutable deployment.
|
|
40
55
|
*/
|
|
41
|
-
export declare function requireVia(request: HandlerRequest): invocation.Via
|
|
56
|
+
export declare function requireVia(request: HandlerRequest): invocation.Via;
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import { protocolError } from '../result/index.js';
|
|
2
|
-
/** Capture the execution Identity capability and receiver-bind
|
|
2
|
+
/** Capture the execution Identity capability and receiver-bind its privileged operations. */
|
|
3
3
|
export function authority(input) {
|
|
4
4
|
if (input === null || typeof input !== 'object' || Array.isArray(input))
|
|
5
5
|
invalid();
|
|
6
|
-
if (typeof input.admit !== 'function' ||
|
|
6
|
+
if (typeof input.admit !== 'function' ||
|
|
7
|
+
typeof input.authenticate !== 'function' ||
|
|
8
|
+
typeof input.self !== 'function') {
|
|
7
9
|
invalid();
|
|
8
10
|
}
|
|
9
11
|
const receiver = Object.freeze({ ...input });
|
|
10
12
|
return Object.freeze({
|
|
11
13
|
admit: receiver.admit.bind(receiver),
|
|
12
14
|
authenticate: receiver.authenticate.bind(receiver),
|
|
15
|
+
self: receiver.self.bind(receiver),
|
|
13
16
|
});
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
19
|
* The routed witness of a remote call, already admitted by the Kernel Server against the served
|
|
17
|
-
* snapshot: the exact
|
|
18
|
-
* (a release's exact projection, or a stable target's Publication).
|
|
20
|
+
* snapshot: the exact ReleaseRef of this immutable deployment.
|
|
19
21
|
*/
|
|
20
22
|
export function requireVia(request) {
|
|
21
23
|
if (request.via === undefined) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { authority, requireVia } from './authority.js';
|
|
2
|
-
export type { AuthenticatedInvocation, InvocationAdmissionInput, InvocationAuthenticationInput, InvocationAuthority, } from './authority.js';
|
|
3
|
-
export { authentication, type InvocationAuthentication } from './authentication.js';
|
|
2
|
+
export type { AuthenticatedInvocation, InvocationAdmissionInput, InvocationAuthenticationInput, InvocationAuthority, InvocationSelfInput, SelfInvocation, } from './authority.js';
|
|
3
|
+
export { authentication, type AnonymousInvocation, type InvocationAuthentication, type InvocationSessions, } from './authentication.js';
|
|
4
4
|
export { input } from './input.js';
|
|
5
5
|
export { target, type InvocationTarget } from './target.js';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { HandlerDependencies } from '../../../application/dependency/index.js';
|
|
2
2
|
import type { BoundClientSession } from '../../../platform/client/session/index.js';
|
|
3
3
|
import type { Domain } from '../../../platform/schema/index.js';
|
|
4
|
+
import type { InvocationSessions } from '../admission/index.js';
|
|
4
5
|
/** Bind each explicit authority to its admitted session; metadata remains inert. */
|
|
5
6
|
export declare function bindDependencies<D extends Domain>(domain: D, sessions: Readonly<Record<'caller' | 'self', BoundClientSession>>): HandlerDependencies<D>;
|
|
7
|
+
export declare function bindDependencies<D extends Domain>(domain: D, sessions: InvocationSessions): HandlerDependencies<D> | HandlerDependencies<D, 'self'>;
|
|
@@ -3,14 +3,13 @@ import { isBinaryInput } from '@astrale-os/kernel-dsl/v1/language';
|
|
|
3
3
|
import { reference } from '../../../platform/client/session/index.js';
|
|
4
4
|
import { NodeId } from '../../../platform/graph/node/index.js';
|
|
5
5
|
import { Path } from '../../../platform/graph/path/index.js';
|
|
6
|
-
/** Bind each explicit authority to its admitted session; metadata remains inert. */
|
|
7
6
|
export function bindDependencies(domain, sessions) {
|
|
8
7
|
const dependencies = Object.create(null);
|
|
9
8
|
for (const [alias, dependency] of Object.entries(domain.dependencies)) {
|
|
10
9
|
if (dependency.origin === 'kernel.astrale.ai')
|
|
11
10
|
continue;
|
|
12
11
|
dependencies[alias] = Object.freeze({
|
|
13
|
-
caller: bindDependency(dependency, sessions.caller),
|
|
12
|
+
...('caller' in sessions ? { caller: bindDependency(dependency, sessions.caller) } : {}),
|
|
14
13
|
self: bindDependency(dependency, sessions.self),
|
|
15
14
|
});
|
|
16
15
|
}
|
|
@@ -12,11 +12,11 @@ export interface DispatchContext {
|
|
|
12
12
|
readonly input: unknown;
|
|
13
13
|
readonly body?: ActionBinaryInput;
|
|
14
14
|
readonly caller: Caller;
|
|
15
|
-
readonly dependencies: HandlerDependencies<Domain> |
|
|
16
|
-
readonly kernel: DomainKernelSessions |
|
|
17
|
-
readonly graph: DomainGraphExecutors |
|
|
18
|
-
readonly query
|
|
19
|
-
readonly mutate
|
|
15
|
+
readonly dependencies: HandlerDependencies<Domain> | HandlerDependencies<Domain, 'self'>;
|
|
16
|
+
readonly kernel: DomainKernelSessions | DomainKernelSessions<'self'>;
|
|
17
|
+
readonly graph: DomainGraphExecutors | DomainGraphExecutors<Domain, 'self'>;
|
|
18
|
+
readonly query: QueryExecutor;
|
|
19
|
+
readonly mutate: MutationExecutor;
|
|
20
20
|
readonly integrations: Readonly<Record<string, unknown>>;
|
|
21
21
|
readonly execution: ActionExecution;
|
|
22
22
|
readonly self?: NodeId;
|