@fentaris/edge 0.2.2 → 0.3.1
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 +34 -0
- package/dist/agent.d.ts +8 -3
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +134 -32
- package/dist/agent.js.map +1 -1
- package/dist/cli.d.ts +7 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +90 -5
- package/dist/cli.js.map +1 -1
- package/dist/daemon.d.ts +67 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +244 -0
- package/dist/daemon.js.map +1 -0
- package/dist/enrollment.d.ts +12 -1
- package/dist/enrollment.d.ts.map +1 -1
- package/dist/enrollment.js +43 -5
- package/dist/enrollment.js.map +1 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +71 -3
- package/dist/index.js.map +1 -1
- package/dist/installation.d.ts +232 -0
- package/dist/installation.d.ts.map +1 -0
- package/dist/installation.js +897 -0
- package/dist/installation.js.map +1 -0
- package/dist/localControl.d.ts +50 -0
- package/dist/localControl.d.ts.map +1 -0
- package/dist/localControl.js +150 -0
- package/dist/localControl.js.map +1 -0
- package/dist/platform.d.ts +4 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +31 -14
- package/dist/platform.js.map +1 -1
- package/dist/redaction.d.ts +2 -0
- package/dist/redaction.d.ts.map +1 -1
- package/dist/redaction.js +8 -0
- package/dist/redaction.js.map +1 -1
- package/dist/runtime.d.ts +27 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +190 -15
- package/dist/runtime.js.map +1 -1
- package/dist/service.d.ts +96 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +150 -0
- package/dist/service.js.map +1 -0
- package/dist/setup.d.ts +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +9 -2
- package/dist/setup.js.map +1 -1
- package/dist/supervisor.d.ts +4 -0
- package/dist/supervisor.d.ts.map +1 -1
- package/dist/supervisor.js +62 -16
- package/dist/supervisor.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,23 +1,41 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { realpathSync } from "node:fs";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
+
import path from "node:path";
|
|
4
5
|
import { createDefaultEdgeAgent, EdgeAgent, WebSocketEdgeConnectionClient } from "./agent.js";
|
|
5
6
|
import { runEdgeCli } from "./cli.js";
|
|
7
|
+
import { EdgePersistentAgent, FileEdgeSingletonLock } from "./daemon.js";
|
|
8
|
+
import { EdgeLocalControlServer, createEdgeLocalControlCredential, edgeLocalControlAddress } from "./localControl.js";
|
|
9
|
+
import { ProtectedJsonStore, defaultEdgePaths, nodeEdgePlatform } from "./platform.js";
|
|
10
|
+
import { edgeServiceAdapter } from "./service.js";
|
|
6
11
|
export { EdgeAgent, WebSocketEdgeConnectionClient, createDefaultEdgeAgent, runEdgeCli, };
|
|
7
12
|
export { EdgeEnrollmentService, HttpDeviceAuthorizationProvider, HttpEdgeEnrollmentClient, } from "./enrollment.js";
|
|
8
13
|
export { NodeProcessSupervisor, ProtectedFileCredentialStore, ProtectedJsonStore, defaultEdgePaths, nodeEdgePlatform, } from "./platform.js";
|
|
9
|
-
export { redactEdgeValue, safeEdgeError } from "./redaction.js";
|
|
14
|
+
export { redactEdgeValue, redactInstallerText, safeEdgeError } from "./redaction.js";
|
|
15
|
+
export { BoundedInstallerRunner, FetchInstallationDownloader, InstallationConsentManager, InstallationCoordinator, InstallationExecutionError, ManagedInstallationSourceResolver, NodeInstallationCommandExecutor, NodeInstallationVerificationService, ProtectedInstallationState, SecureTarExtractor, SharedInstallationProvider, TerminalInstallationConsent, buildInstallationReview, commandIsolationAdapter, createDefaultInstallationProviders, } from "./installation.js";
|
|
10
16
|
export { LocalSetupManager, NodeTerminalSetupPrompter, TerminalSetupProvider, } from "./setup.js";
|
|
11
17
|
export { EdgeWorkloadSupervisor, ExecutableAllowlistPolicy } from "./supervisor.js";
|
|
12
18
|
export { StdioEdgeWorkloadFactory } from "./stdioWorkload.js";
|
|
13
19
|
export { EdgeAgentRuntime } from "./runtime.js";
|
|
20
|
+
export { EdgePersistentAgent, FileEdgeSingletonLock, classifyReconnectError, reconnectDelay, } from "./daemon.js";
|
|
21
|
+
export { EdgeLocalControlServer, callEdgeLocalControl, createEdgeLocalControlCredential, edgeLocalControlAddress, } from "./localControl.js";
|
|
22
|
+
export { ForegroundEdgeServiceAdapter, LaunchdEdgeServiceAdapter, NodeEdgeServiceCommandRunner, NodeEdgeServiceFiles, SystemdUserEdgeServiceAdapter, WindowsUserEdgeServiceAdapter, edgeServiceAdapter, } from "./service.js";
|
|
14
23
|
export async function main(argv, options = {}) {
|
|
15
24
|
const io = options.io ?? {
|
|
16
25
|
out: (value) => console.log(value),
|
|
17
26
|
error: (value) => console.error(value),
|
|
18
27
|
};
|
|
28
|
+
const joinUrl = argv[0] === "join" && argv[1] && !argv[1].startsWith("-") ? argv[1] : undefined;
|
|
29
|
+
const paths = defaultEdgePaths();
|
|
30
|
+
const platform = nodeEdgePlatform(paths);
|
|
31
|
+
const enrolled = await platform.configStore.load();
|
|
19
32
|
const agent = options.agent ?? createDefaultEdgeAgent({
|
|
20
|
-
controlPlaneUrl: options.controlPlaneUrl
|
|
33
|
+
controlPlaneUrl: options.controlPlaneUrl
|
|
34
|
+
?? joinUrl
|
|
35
|
+
?? enrolled?.controlPlaneUrl
|
|
36
|
+
?? process.env.FENTARIS_EDGE_CONTROL_PLANE_URL
|
|
37
|
+
?? "",
|
|
38
|
+
platform,
|
|
21
39
|
onVerification: (request) => {
|
|
22
40
|
io.out(JSON.stringify({
|
|
23
41
|
verificationUri: request.verificationUri,
|
|
@@ -25,7 +43,53 @@ export async function main(argv, options = {}) {
|
|
|
25
43
|
}));
|
|
26
44
|
},
|
|
27
45
|
});
|
|
28
|
-
|
|
46
|
+
const service = edgeServiceAdapter({
|
|
47
|
+
serviceFile: process.platform === "darwin"
|
|
48
|
+
? path.join(process.env.HOME ?? paths.dataDir, "Library", "LaunchAgents", "dev.fentaris.edge.plist")
|
|
49
|
+
: path.join(process.env.HOME ?? paths.dataDir, ".config", "systemd", "user", "fentaris-edge.service"),
|
|
50
|
+
foregroundCommand: "fentaris edge run",
|
|
51
|
+
});
|
|
52
|
+
const definition = {
|
|
53
|
+
executable: process.execPath,
|
|
54
|
+
args: [process.argv[1] ?? "fentaris-edge", "run"],
|
|
55
|
+
environment: edgeServiceEnvironment(process.env),
|
|
56
|
+
};
|
|
57
|
+
const operations = {
|
|
58
|
+
installService: () => service.install(definition),
|
|
59
|
+
service: (operation) => operation === "install" ? service.install(definition) : service[operation](),
|
|
60
|
+
run: async () => {
|
|
61
|
+
const persistent = new EdgePersistentAgent({
|
|
62
|
+
agent,
|
|
63
|
+
lock: new FileEdgeSingletonLock(path.join(paths.dataDir, "agent.lock")),
|
|
64
|
+
statusStore: new ProtectedJsonStore(path.join(paths.dataDir, "status.json")),
|
|
65
|
+
});
|
|
66
|
+
const credentialStoreKey = "local-control-credential";
|
|
67
|
+
let credential = await platform.credentialStore.get(credentialStoreKey);
|
|
68
|
+
if (!credential) {
|
|
69
|
+
credential = createEdgeLocalControlCredential();
|
|
70
|
+
await platform.credentialStore.set(credentialStoreKey, credential);
|
|
71
|
+
}
|
|
72
|
+
const control = new EdgeLocalControlServer({
|
|
73
|
+
endpoint: { address: edgeLocalControlAddress(paths.dataDir), credential },
|
|
74
|
+
agent: persistent,
|
|
75
|
+
...(agent.installationControl() ? { installation: agent.installationControl() } : {}),
|
|
76
|
+
});
|
|
77
|
+
await persistent.start();
|
|
78
|
+
try {
|
|
79
|
+
await control.start();
|
|
80
|
+
await persistent.wait();
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
try {
|
|
84
|
+
await control.stop();
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
await persistent.stop();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
return runEdgeCli(argv, agent, io, operations);
|
|
29
93
|
}
|
|
30
94
|
export function isDirectCliInvocation(entrypointUrl = import.meta.url, argvPath = process.argv[1]) {
|
|
31
95
|
if (!argvPath)
|
|
@@ -45,4 +109,8 @@ function resolvePath(value) {
|
|
|
45
109
|
return value;
|
|
46
110
|
}
|
|
47
111
|
}
|
|
112
|
+
function edgeServiceEnvironment(environment) {
|
|
113
|
+
const stateDir = environment.FENTARIS_EDGE_STATE_DIR?.trim();
|
|
114
|
+
return stateDir ? { FENTARIS_EDGE_STATE_DIR: stateDir } : undefined;
|
|
115
|
+
}
|
|
48
116
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { type InstallationApprovalRecord, type InstallationArtifactRecord, type InstallationAttemptSummary, type InstallationDigest, type InstallationLifecycleSummary, type InstallationMutationLock, type InstallationProviderAdapter, type InstallationProviderContext, type InstallationProviderKind, type InstallationReasonCode, type InstallationRecipe, type InstallationResolvedSource, type InstallationSource, type InstalledArtifactReference, type EdgeInstallationTelemetry } from "@fentaris/core";
|
|
2
|
+
import type { CredentialStore, JsonStore } from "./platform.js";
|
|
3
|
+
export interface DurableInstallationAttempt extends InstallationAttemptSummary {
|
|
4
|
+
readonly deploymentId: string;
|
|
5
|
+
readonly desiredVersion: number;
|
|
6
|
+
readonly processIds?: readonly number[];
|
|
7
|
+
readonly diagnostics?: readonly string[];
|
|
8
|
+
}
|
|
9
|
+
export interface InstallationStateDocument {
|
|
10
|
+
readonly schemaVersion: 1;
|
|
11
|
+
readonly attempts: Readonly<Record<string, DurableInstallationAttempt>>;
|
|
12
|
+
readonly approvals: Readonly<Record<string, InstallationApprovalRecord>>;
|
|
13
|
+
readonly lifecycle: Readonly<Record<string, InstallationLifecycleSummary>>;
|
|
14
|
+
readonly artifacts: Readonly<Record<string, InstallationArtifactRecord>>;
|
|
15
|
+
readonly activePointers: Readonly<Record<string, InstallationDigest>>;
|
|
16
|
+
readonly retentionReferences: Readonly<Record<string, readonly InstallationDigest[]>>;
|
|
17
|
+
}
|
|
18
|
+
/** Protected durable installation state persisted atomically by the platform store. */
|
|
19
|
+
export declare class ProtectedInstallationState {
|
|
20
|
+
private readonly store;
|
|
21
|
+
private queue;
|
|
22
|
+
constructor(store: JsonStore<InstallationStateDocument>);
|
|
23
|
+
snapshot(): Promise<InstallationStateDocument>;
|
|
24
|
+
update<T>(mutation: (document: InstallationStateDocument) => readonly [InstallationStateDocument, T]): Promise<T>;
|
|
25
|
+
putAttempt(attempt: DurableInstallationAttempt): Promise<void>;
|
|
26
|
+
putApproval(approval: InstallationApprovalRecord): Promise<void>;
|
|
27
|
+
putLifecycle(value: InstallationLifecycleSummary): Promise<void>;
|
|
28
|
+
putArtifact(value: InstallationArtifactRecord): Promise<void>;
|
|
29
|
+
approval(digest: InstallationDigest, cleanup?: boolean): Promise<InstallationApprovalRecord | undefined>;
|
|
30
|
+
lifecycle(deploymentId: string): Promise<InstallationLifecycleSummary | undefined>;
|
|
31
|
+
artifact(digest: InstallationDigest): Promise<InstallationArtifactRecord | undefined>;
|
|
32
|
+
attempts(digest: InstallationDigest): Promise<readonly DurableInstallationAttempt[]>;
|
|
33
|
+
activate(deploymentId: string, artifact: InstallationArtifactRecord, retain: number): Promise<void>;
|
|
34
|
+
removeReference(deploymentId: string, digest: InstallationDigest): Promise<InstallationArtifactRecord | undefined>;
|
|
35
|
+
rollbackCandidate(deploymentId: string): Promise<InstallationArtifactRecord | undefined>;
|
|
36
|
+
clear(): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export interface InstallationReviewModel {
|
|
39
|
+
readonly approvalDigest: InstallationDigest;
|
|
40
|
+
readonly recipeDigest: InstallationDigest;
|
|
41
|
+
readonly provider: InstallationProviderKind;
|
|
42
|
+
readonly providerDetails: Readonly<Record<string, unknown>>;
|
|
43
|
+
readonly source?: Readonly<Record<string, unknown>>;
|
|
44
|
+
readonly entrypoint?: string;
|
|
45
|
+
readonly interpreter?: string;
|
|
46
|
+
readonly arguments: readonly string[];
|
|
47
|
+
readonly permissions: InstallationRecipe["permissions"];
|
|
48
|
+
readonly outputs: InstallationRecipe["outputs"];
|
|
49
|
+
readonly verification: InstallationRecipe["verification"];
|
|
50
|
+
readonly cleanup: InstallationRecipe["cleanup"];
|
|
51
|
+
}
|
|
52
|
+
/** Build exact bounded custom-install review material without credential values. */
|
|
53
|
+
export declare function buildInstallationReview(recipe: InstallationRecipe, localPolicy: unknown): InstallationReviewModel;
|
|
54
|
+
export declare class InstallationConsentManager {
|
|
55
|
+
private readonly state;
|
|
56
|
+
private readonly now;
|
|
57
|
+
constructor(state: ProtectedInstallationState, now?: () => number);
|
|
58
|
+
review(recipe: InstallationRecipe, localPolicy: unknown): InstallationReviewModel;
|
|
59
|
+
decide(review: InstallationReviewModel, decision: "approved" | "denied" | "revoked", cleanup?: boolean): Promise<void>;
|
|
60
|
+
decision(review: InstallationReviewModel, cleanup?: boolean): Promise<InstallationApprovalRecord | undefined>;
|
|
61
|
+
}
|
|
62
|
+
export interface InstallationReviewPrompter {
|
|
63
|
+
present(review: InstallationReviewModel): void | Promise<void>;
|
|
64
|
+
confirm(message: string): Promise<boolean>;
|
|
65
|
+
}
|
|
66
|
+
/** Interactive local approval flow that presents the complete bounded review. */
|
|
67
|
+
export declare class TerminalInstallationConsent {
|
|
68
|
+
private readonly consent;
|
|
69
|
+
private readonly prompt;
|
|
70
|
+
constructor(consent: InstallationConsentManager, prompt: InstallationReviewPrompter);
|
|
71
|
+
reviewAndDecide(recipe: InstallationRecipe, localPolicy: unknown, cleanup?: boolean): Promise<InstallationApprovalRecord>;
|
|
72
|
+
}
|
|
73
|
+
export interface InstallationIsolationAdapter {
|
|
74
|
+
readonly filesystem: boolean;
|
|
75
|
+
readonly network: boolean;
|
|
76
|
+
wrap(input: InstallerRunRequest): Promise<InstallerRunRequest>;
|
|
77
|
+
}
|
|
78
|
+
/** Build an enforceable platform adapter when an approved sandbox command is configured. */
|
|
79
|
+
export declare function commandIsolationAdapter(options?: {
|
|
80
|
+
readonly platform?: NodeJS.Platform;
|
|
81
|
+
readonly executable?: string;
|
|
82
|
+
}): InstallationIsolationAdapter;
|
|
83
|
+
export interface InstallerRunRequest {
|
|
84
|
+
readonly command: string;
|
|
85
|
+
readonly args?: readonly string[];
|
|
86
|
+
readonly cwd: string;
|
|
87
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
88
|
+
readonly secrets?: readonly string[];
|
|
89
|
+
readonly timeoutMs: number;
|
|
90
|
+
readonly maxOutputBytes: number;
|
|
91
|
+
readonly maxDiskBytes: number;
|
|
92
|
+
readonly allowedExecutables?: readonly string[];
|
|
93
|
+
readonly requireFilesystemIsolation?: boolean;
|
|
94
|
+
readonly requireNetworkIsolation?: boolean;
|
|
95
|
+
}
|
|
96
|
+
export interface InstallerRunResult {
|
|
97
|
+
readonly code: number;
|
|
98
|
+
readonly output: string;
|
|
99
|
+
readonly startedAt: number;
|
|
100
|
+
readonly finishedAt: number;
|
|
101
|
+
readonly pid?: number;
|
|
102
|
+
}
|
|
103
|
+
/** Process-tree supervised, bounded, no-elevation installer execution. */
|
|
104
|
+
export declare class BoundedInstallerRunner {
|
|
105
|
+
private readonly isolation;
|
|
106
|
+
private readonly now;
|
|
107
|
+
constructor(isolation?: InstallationIsolationAdapter, now?: () => number);
|
|
108
|
+
run(input: InstallerRunRequest): Promise<InstallerRunResult>;
|
|
109
|
+
}
|
|
110
|
+
export interface InstallationCommandExecutor {
|
|
111
|
+
run(command: string, args: readonly string[], options: {
|
|
112
|
+
cwd: string;
|
|
113
|
+
env?: Readonly<Record<string, string>>;
|
|
114
|
+
}): Promise<string>;
|
|
115
|
+
}
|
|
116
|
+
export declare class NodeInstallationCommandExecutor implements InstallationCommandExecutor {
|
|
117
|
+
private readonly runner;
|
|
118
|
+
constructor(runner?: BoundedInstallerRunner);
|
|
119
|
+
run(command: string, args: readonly string[], options: {
|
|
120
|
+
cwd: string;
|
|
121
|
+
env?: Readonly<Record<string, string>>;
|
|
122
|
+
}): Promise<string>;
|
|
123
|
+
}
|
|
124
|
+
export interface InstallationDownloadAdapter {
|
|
125
|
+
download(url: string, destination: string, credential?: string, maxBytes?: number): Promise<void>;
|
|
126
|
+
}
|
|
127
|
+
export declare class FetchInstallationDownloader implements InstallationDownloadAdapter {
|
|
128
|
+
download(url: string, destination: string, credential?: string, maxBytes?: number): Promise<void>;
|
|
129
|
+
}
|
|
130
|
+
/** Tar archive extraction with preflight type/path checks and post-extract containment. */
|
|
131
|
+
export declare class SecureTarExtractor {
|
|
132
|
+
private readonly commands;
|
|
133
|
+
constructor(commands?: InstallationCommandExecutor);
|
|
134
|
+
extract(archive: string, destination: string): Promise<void>;
|
|
135
|
+
}
|
|
136
|
+
export interface LocalInstallationGrantResolver {
|
|
137
|
+
resolve(grantRef: string): Promise<string>;
|
|
138
|
+
}
|
|
139
|
+
export interface EnterpriseInstallationResolver {
|
|
140
|
+
readonly adapter: string;
|
|
141
|
+
resolve(artifactRef: string, destination: string, credential?: string): Promise<void>;
|
|
142
|
+
}
|
|
143
|
+
/** Immutable Git/archive/inline/local/enterprise staging implementation. */
|
|
144
|
+
export declare class ManagedInstallationSourceResolver {
|
|
145
|
+
private readonly options;
|
|
146
|
+
constructor(options?: {
|
|
147
|
+
readonly commands?: InstallationCommandExecutor;
|
|
148
|
+
readonly downloader?: InstallationDownloadAdapter;
|
|
149
|
+
readonly extractor?: SecureTarExtractor;
|
|
150
|
+
readonly credentials?: CredentialStore;
|
|
151
|
+
readonly local?: LocalInstallationGrantResolver;
|
|
152
|
+
readonly enterprise?: readonly EnterpriseInstallationResolver[];
|
|
153
|
+
});
|
|
154
|
+
resolve(source: InstallationSource, destination: string): Promise<InstallationResolvedSource>;
|
|
155
|
+
private git;
|
|
156
|
+
private archive;
|
|
157
|
+
private inline;
|
|
158
|
+
private local;
|
|
159
|
+
private enterprise;
|
|
160
|
+
}
|
|
161
|
+
export interface InstallationVerificationService {
|
|
162
|
+
verify(recipe: InstallationRecipe, root: string): Promise<Readonly<Record<string, string>>>;
|
|
163
|
+
}
|
|
164
|
+
export declare class NodeInstallationVerificationService implements InstallationVerificationService {
|
|
165
|
+
verify(recipe: InstallationRecipe, root: string): Promise<Readonly<Record<string, string>>>;
|
|
166
|
+
}
|
|
167
|
+
export declare class SharedInstallationProvider implements InstallationProviderAdapter {
|
|
168
|
+
readonly kind: InstallationProviderKind;
|
|
169
|
+
private readonly source;
|
|
170
|
+
private readonly runner;
|
|
171
|
+
private readonly verifier;
|
|
172
|
+
constructor(kind: InstallationProviderKind, source: ManagedInstallationSourceResolver, runner: BoundedInstallerRunner, verifier?: InstallationVerificationService);
|
|
173
|
+
preflight(context: InstallationProviderContext): Promise<{
|
|
174
|
+
ready: boolean;
|
|
175
|
+
reasonCode?: undefined;
|
|
176
|
+
} | {
|
|
177
|
+
ready: boolean;
|
|
178
|
+
reasonCode: "manual-prerequisite-required";
|
|
179
|
+
}>;
|
|
180
|
+
install(context: InstallationProviderContext): Promise<void>;
|
|
181
|
+
verify(context: InstallationProviderContext): Promise<Readonly<Record<string, string>>>;
|
|
182
|
+
cleanup(context: InstallationProviderContext): Promise<void>;
|
|
183
|
+
}
|
|
184
|
+
export interface InstallationReconcileRequest {
|
|
185
|
+
readonly deploymentId: string;
|
|
186
|
+
readonly desiredVersion: number;
|
|
187
|
+
readonly launchDigest: string;
|
|
188
|
+
readonly recipe: InstallationRecipe;
|
|
189
|
+
readonly localPolicy?: unknown;
|
|
190
|
+
readonly explicitRetry?: boolean;
|
|
191
|
+
}
|
|
192
|
+
export interface InstallationCoordinatorOptions {
|
|
193
|
+
readonly state: ProtectedInstallationState;
|
|
194
|
+
readonly consent: InstallationConsentManager;
|
|
195
|
+
readonly lock: InstallationMutationLock;
|
|
196
|
+
readonly providers: ReadonlyMap<InstallationProviderKind, InstallationProviderAdapter>;
|
|
197
|
+
readonly installationRoot: string;
|
|
198
|
+
readonly stagingRoot: string;
|
|
199
|
+
readonly platform?: NodeJS.Platform;
|
|
200
|
+
readonly architecture?: string;
|
|
201
|
+
readonly now?: () => number;
|
|
202
|
+
readonly attemptId?: () => string;
|
|
203
|
+
readonly terminateProcess?: (pid: number) => Promise<void>;
|
|
204
|
+
readonly telemetry?: EdgeInstallationTelemetry;
|
|
205
|
+
}
|
|
206
|
+
/** Idempotent, crash-aware installation lifecycle coordinator. */
|
|
207
|
+
export declare class InstallationCoordinator {
|
|
208
|
+
private readonly options;
|
|
209
|
+
private readonly now;
|
|
210
|
+
private readonly attemptId;
|
|
211
|
+
constructor(options: InstallationCoordinatorOptions);
|
|
212
|
+
reconcile(request: InstallationReconcileRequest): Promise<InstallationLifecycleSummary>;
|
|
213
|
+
status(deploymentId: string): Promise<InstallationLifecycleSummary | undefined>;
|
|
214
|
+
review(recipe: InstallationRecipe, localPolicy?: unknown, cleanup?: boolean): InstallationReviewModel;
|
|
215
|
+
decide(recipe: InstallationRecipe, decision: "approved" | "denied" | "revoked", localPolicy?: unknown, cleanup?: boolean): Promise<InstallationApprovalRecord>;
|
|
216
|
+
recoverInterrupted(): Promise<readonly DurableInstallationAttempt[]>;
|
|
217
|
+
remove(deploymentId: string, recipe: InstallationRecipe, approveCleanup?: boolean): Promise<InstallationLifecycleSummary>;
|
|
218
|
+
rollback(deploymentId: string, request: InstallationReconcileRequest): Promise<InstallationLifecycleSummary>;
|
|
219
|
+
resolveArtifact(reference: InstalledArtifactReference): Promise<string>;
|
|
220
|
+
private transition;
|
|
221
|
+
private emit;
|
|
222
|
+
}
|
|
223
|
+
export declare function createDefaultInstallationProviders(options?: {
|
|
224
|
+
source?: ManagedInstallationSourceResolver;
|
|
225
|
+
runner?: BoundedInstallerRunner;
|
|
226
|
+
verifier?: InstallationVerificationService;
|
|
227
|
+
}): ReadonlyMap<InstallationProviderKind, InstallationProviderAdapter>;
|
|
228
|
+
export declare class InstallationExecutionError extends Error {
|
|
229
|
+
readonly reasonCode: InstallationReasonCode;
|
|
230
|
+
constructor(reasonCode: InstallationReasonCode, message: string);
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=installation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../src/installation.ts"],"names":[],"mappings":"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"}
|