@amalgm/core 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PURPOSE.md +19 -3
- package/README.md +4 -0
- package/dist/identity/index.d.ts +1 -0
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +1 -0
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/labels.d.ts +3 -2
- package/dist/identity/labels.d.ts.map +1 -1
- package/dist/identity/labels.js +3 -2
- package/dist/identity/labels.js.map +1 -1
- package/dist/identity/layout.d.ts +22 -12
- package/dist/identity/layout.d.ts.map +1 -1
- package/dist/identity/layout.js +35 -13
- package/dist/identity/layout.js.map +1 -1
- package/dist/identity/machine-setup.d.ts +162 -0
- package/dist/identity/machine-setup.d.ts.map +1 -0
- package/dist/identity/machine-setup.js +351 -0
- package/dist/identity/machine-setup.js.map +1 -0
- package/dist/identity/product-state.d.ts +1 -1
- package/dist/identity/product-state.d.ts.map +1 -1
- package/dist/supervision/index.d.ts +1 -0
- package/dist/supervision/index.d.ts.map +1 -1
- package/dist/supervision/index.js +1 -0
- package/dist/supervision/index.js.map +1 -1
- package/dist/supervision/installation-plan.d.ts +33 -0
- package/dist/supervision/installation-plan.d.ts.map +1 -0
- package/dist/supervision/installation-plan.js +101 -0
- package/dist/supervision/installation-plan.js.map +1 -0
- package/package.json +4 -2
package/PURPOSE.md
CHANGED
|
@@ -15,9 +15,10 @@ core. Everything else is not.**
|
|
|
15
15
|
Core owns exactly four things:
|
|
16
16
|
|
|
17
17
|
1. **Identity** — who this machine is, for which user, on which branch.
|
|
18
|
-
The
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
The `~/amalgm/users/<email>/` user ground and its reserved per-device
|
|
19
|
+
`.amalgm/machines/<device-id>/` control namespace, machine/instance
|
|
20
|
+
identity, auth-store contracts, and the branch-binding rule surfaces use
|
|
21
|
+
to decide whether they may attach.
|
|
21
22
|
2. **Transport** — the pipe. The local gateway's routing and admission
|
|
22
23
|
rules, the tunnel connection contract, and the event rail. The pipe
|
|
23
24
|
carries payloads it never interprets: sync semantics belong to
|
|
@@ -99,6 +100,21 @@ source until each module is cut over.
|
|
|
99
100
|
17. **Retirement is explicit subtraction.** Every retired Engine prefix stays
|
|
100
101
|
named as evidence but is absent from the active route table, so dead
|
|
101
102
|
compatibility surfaces cannot masquerade as unfinished product work.
|
|
103
|
+
18. **Machine setup is one trust rail with two entrances.** Browser polling and
|
|
104
|
+
an approved setup code converge before the same registration, credential
|
|
105
|
+
split, proxy-refresh, installation, canonical-runtime, and readiness path;
|
|
106
|
+
service selection is a downstream installation decision and an omitted
|
|
107
|
+
selector means every service in the verified release catalog.
|
|
108
|
+
19. **Every managed login includes Files.** Core and Files/Live are the minimum
|
|
109
|
+
managed installation: after machine trust, Core invokes one injected Live
|
|
110
|
+
user-ground convergence operation, and setup is not ready until that
|
|
111
|
+
operation proves cloud-backed identity and active watcher coverage.
|
|
112
|
+
20. **User ground and machine state never overlap.** Everything in
|
|
113
|
+
`users/<email>/` is eligible user ground except the reserved `.amalgm/`
|
|
114
|
+
directory and paths named by the tracked `.amalgmignore`; credentials,
|
|
115
|
+
SQLite databases, observer evidence, caches, runtimes, and logs live under
|
|
116
|
+
`.amalgm/machines/<device-id>/` and never enter registration. The new
|
|
117
|
+
layout is initialized cleanly rather than adopting a legacy mixed root.
|
|
102
118
|
|
|
103
119
|
## Five surfaces, one behavior
|
|
104
120
|
|
package/README.md
CHANGED
|
@@ -7,6 +7,10 @@ alive, and route traffic to everything else. Start with
|
|
|
7
7
|
[docs/responsibilities.md](docs/responsibilities.md) (every duty, and the
|
|
8
8
|
knife table mapping the engine monolith onto its target repos).
|
|
9
9
|
|
|
10
|
+
The evolving product contract for the top-level command, modular service
|
|
11
|
+
installation, and mandatory managed updates is
|
|
12
|
+
[docs/amalgm-cli.md](docs/amalgm-cli.md).
|
|
13
|
+
|
|
10
14
|
```
|
|
11
15
|
src/identity/ labels, layout grammar, ids, auth records
|
|
12
16
|
src/transport/ the auth boundary, ONE routing table, admission, ingress
|
package/dist/identity/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
package/dist/identity/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* 1. The LABEL partition ({@link normalizeRuntimeLabel} and its coercing
|
|
9
9
|
* twin {@link coerceRuntimeLabel}): `main | preview | local` — the
|
|
10
|
-
* identity that scopes state under `runtimes/<label>/`
|
|
11
|
-
* computer records may bind to this
|
|
10
|
+
* identity that scopes state under the machine's `runtimes/<label>/`
|
|
11
|
+
* control directory and decides which computer records may bind to this
|
|
12
|
+
* process.
|
|
12
13
|
* 2. The INFRA partition ({@link usesPreviewInfraDefaults}): main infra vs
|
|
13
14
|
* preview infra. Here `local`/`dev`/`development` land on the PREVIEW
|
|
14
15
|
* side — a development build must never default onto production
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/identity/labels.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/identity/labels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAExD;0DAC0D;AAC1D,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,YAAY,CAIzD,CAAC;AAMH;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,EAAE,CAOvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAK/D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAK9D;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK5F;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAEtE;AAMD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG5E;AAED;oEACoE;AACpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,mBAAmB,GAAG,OAAO,CAGjG;AAED;2EAC2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,EAC/C,YAAY,EAAE,YAAY,GACzB,OAAO,CAGT"}
|
package/dist/identity/labels.js
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* 1. The LABEL partition ({@link normalizeRuntimeLabel} and its coercing
|
|
9
9
|
* twin {@link coerceRuntimeLabel}): `main | preview | local` — the
|
|
10
|
-
* identity that scopes state under `runtimes/<label>/`
|
|
11
|
-
* computer records may bind to this
|
|
10
|
+
* identity that scopes state under the machine's `runtimes/<label>/`
|
|
11
|
+
* control directory and decides which computer records may bind to this
|
|
12
|
+
* process.
|
|
12
13
|
* 2. The INFRA partition ({@link usesPreviewInfraDefaults}): main infra vs
|
|
13
14
|
* preview infra. Here `local`/`dev`/`development` land on the PREVIEW
|
|
14
15
|
* side — a development build must never default onto production
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/identity/labels.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/identity/labels.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,15 +30,18 @@ export declare const USER_HOME_MANIFEST_NAME = "home.json";
|
|
|
30
30
|
/** User-home graph schema version (layout.js:38). Changing the declared
|
|
31
31
|
* exact graph changes the identity contract: a client must never accept a
|
|
32
32
|
* prior graph and silently invent a new managed child. */
|
|
33
|
-
export declare const USER_HOME_SCHEMA_VERSION =
|
|
33
|
+
export declare const USER_HOME_SCHEMA_VERSION = 3;
|
|
34
|
+
/** Root policy file. It is portable user ground and travels with the home
|
|
35
|
+
* whose enrollment policy it declares. */
|
|
36
|
+
export declare const USER_IGNORE_FILE_NAME = ".amalgmignore";
|
|
37
|
+
/** Reserved machine-local control directory inside a user home. Live rejects
|
|
38
|
+
* this namespace before evaluating user ignore rules. */
|
|
39
|
+
export declare const USER_CONTROL_DIR_NAME = ".amalgm";
|
|
34
40
|
/** Stable per-user product namespaces (layout.js:43-50). Their authority is
|
|
35
41
|
* NOT inferred from their path: user content and exact platform-managed
|
|
36
42
|
* targets are declared separately in the user-home declaration.
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* namespace to resolve it into ({@link resolveProductStateDir}). Additive
|
|
40
|
-
* only (axiom 7): the engine's six keep their bytes and order; it does NOT
|
|
41
|
-
* join the shipped user-home graph until the browser product declares it. */
|
|
43
|
+
* The new user-ground contract declares all seven roots. It does not import
|
|
44
|
+
* the Engine's older six-root home. */
|
|
42
45
|
export declare const PRIMITIVE_DIRS: readonly string[];
|
|
43
46
|
/**
|
|
44
47
|
* ONE sanitizer, two engine homes: runtime-identity.js:59-65
|
|
@@ -79,7 +82,7 @@ export interface ShippedUserHomeDeclaration extends UserHomeDeclaration {
|
|
|
79
82
|
readonly systemToolArtifacts: readonly UserHomeExactManagedDeclaration[];
|
|
80
83
|
}
|
|
81
84
|
/**
|
|
82
|
-
* The user-home graph the
|
|
85
|
+
* The user-home graph the managed product ships: the seven
|
|
83
86
|
* roots, one `<key>-root` managed node per root, the home manifest at
|
|
84
87
|
* `system/home.json`, `system/defaults`, `system/policy`, and the seven
|
|
85
88
|
* system tool artifacts. These CONTENTS are PRODUCT declarations, not
|
|
@@ -104,7 +107,7 @@ export interface UserHomeManifest {
|
|
|
104
107
|
}
|
|
105
108
|
/**
|
|
106
109
|
* The user-home manifest for a declaration (engine ensureUserHome's
|
|
107
|
-
* `manifestContents`, layout.js:137-146):
|
|
110
|
+
* `manifestContents`, layout.js:137-146): the current user-home schema, kind
|
|
108
111
|
* `amalgm-user-home`, and the declaration's entries with each
|
|
109
112
|
* `relativePath` published under the key name `path` — relative, so the
|
|
110
113
|
* manifest survives a moved or renamed user folder — and every managed
|
|
@@ -164,10 +167,17 @@ export declare function joinPathSegments(...segments: string[]): string;
|
|
|
164
167
|
* `.amalgm-user.json` files) reads the filesystem and stays host-side.
|
|
165
168
|
*/
|
|
166
169
|
export declare function scopedAmalgmDir(homeDir: string, userScope: unknown): string;
|
|
167
|
-
/**
|
|
168
|
-
|
|
170
|
+
/** The tracked ignore policy at the root of one user ground. */
|
|
171
|
+
export declare function userIgnoreFile(userDir: string): string;
|
|
172
|
+
/** The reserved, unregistered control namespace for one user. */
|
|
173
|
+
export declare function userControlDir(userDir: string): string;
|
|
174
|
+
/** Machine-local state for one physical device under one user's home. */
|
|
175
|
+
export declare function userMachineDir(userDir: string, deviceId: unknown): string;
|
|
176
|
+
/** Files/Live's machine-local databases and immutable content cache. */
|
|
177
|
+
export declare function liveMachineStateDir(userDir: string, deviceId: unknown): string;
|
|
178
|
+
/** Per-label runtime state inside the reserved per-device control namespace.
|
|
169
179
|
* The label must be one of the three — junk never names a state dir. */
|
|
170
|
-
export declare function runtimeStateDir(userDir: string, label: string): string;
|
|
180
|
+
export declare function runtimeStateDir(userDir: string, deviceId: unknown, label: string): string;
|
|
171
181
|
/** `runtime-state.json` inside a runtime state dir (runtime-paths.js:88-90). */
|
|
172
182
|
export declare function runtimeStateFile(stateDir: string): string;
|
|
173
183
|
/** `runtime-token.json` inside a runtime state dir (runtime-paths.js:92-94). */
|
|
@@ -181,7 +191,7 @@ export declare function computerRecordFile(dir: string): string;
|
|
|
181
191
|
* (engine config.js:37-40, proxy-token-store.js:25-28). */
|
|
182
192
|
export declare function computerAuthFile(dir: string): string;
|
|
183
193
|
/**
|
|
184
|
-
* A primitive root under the user dir (layout.js:414-419). Only the
|
|
194
|
+
* A primitive root under the user dir (layout.js:414-419). Only the seven
|
|
185
195
|
* declared namespaces exist; the refusal string is the ratified text.
|
|
186
196
|
*/
|
|
187
197
|
export declare function userPrimitiveRoot(userDir: string, kind: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/identity/layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D;qBACqB;AACrB,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AAEtD,gEAAgE;AAChE,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AAEtD,wDAAwD;AACxD,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;yCAEyC;AACzC,eAAO,MAAM,uBAAuB,cAAc,CAAC;AAEnD;;0DAE0D;AAC1D,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/identity/layout.ts"],"names":[],"mappings":"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"}
|
package/dist/identity/layout.js
CHANGED
|
@@ -30,15 +30,18 @@ export const USER_HOME_MANIFEST_NAME = 'home.json';
|
|
|
30
30
|
/** User-home graph schema version (layout.js:38). Changing the declared
|
|
31
31
|
* exact graph changes the identity contract: a client must never accept a
|
|
32
32
|
* prior graph and silently invent a new managed child. */
|
|
33
|
-
export const USER_HOME_SCHEMA_VERSION =
|
|
33
|
+
export const USER_HOME_SCHEMA_VERSION = 3;
|
|
34
|
+
/** Root policy file. It is portable user ground and travels with the home
|
|
35
|
+
* whose enrollment policy it declares. */
|
|
36
|
+
export const USER_IGNORE_FILE_NAME = '.amalgmignore';
|
|
37
|
+
/** Reserved machine-local control directory inside a user home. Live rejects
|
|
38
|
+
* this namespace before evaluating user ignore rules. */
|
|
39
|
+
export const USER_CONTROL_DIR_NAME = '.amalgm';
|
|
34
40
|
/** Stable per-user product namespaces (layout.js:43-50). Their authority is
|
|
35
41
|
* NOT inferred from their path: user content and exact platform-managed
|
|
36
42
|
* targets are declared separately in the user-home declaration.
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* namespace to resolve it into ({@link resolveProductStateDir}). Additive
|
|
40
|
-
* only (axiom 7): the engine's six keep their bytes and order; it does NOT
|
|
41
|
-
* join the shipped user-home graph until the browser product declares it. */
|
|
43
|
+
* The new user-ground contract declares all seven roots. It does not import
|
|
44
|
+
* the Engine's older six-root home. */
|
|
42
45
|
export const PRIMITIVE_DIRS = Object.freeze([
|
|
43
46
|
'agents',
|
|
44
47
|
'apps',
|
|
@@ -80,6 +83,7 @@ const USER_HOME_ROOTS = Object.freeze([
|
|
|
80
83
|
{ key: 'toolbox', relativePath: 'toolbox' },
|
|
81
84
|
{ key: 'workspaces', relativePath: 'workspaces' },
|
|
82
85
|
{ key: 'system', relativePath: 'system' },
|
|
86
|
+
{ key: 'browser', relativePath: 'browser' },
|
|
83
87
|
]);
|
|
84
88
|
// A Toolbox tool is one complete entity: its definition and actions travel
|
|
85
89
|
// in the same file. These names are deliberately stable and human-readable.
|
|
@@ -93,7 +97,7 @@ const SYSTEM_TOOL_ARTIFACTS = Object.freeze([
|
|
|
93
97
|
{ key: 'amalgm-browser', toolId: 'browser', relativePath: 'toolbox/amalgm-browser.json', rootKey: 'toolbox' },
|
|
94
98
|
]);
|
|
95
99
|
/**
|
|
96
|
-
* The user-home graph the
|
|
100
|
+
* The user-home graph the managed product ships: the seven
|
|
97
101
|
* roots, one `<key>-root` managed node per root, the home manifest at
|
|
98
102
|
* `system/home.json`, `system/defaults`, `system/policy`, and the seven
|
|
99
103
|
* system tool artifacts. These CONTENTS are PRODUCT declarations, not
|
|
@@ -116,7 +120,7 @@ export const shippedUserHomeDeclaration = Object.freeze({
|
|
|
116
120
|
});
|
|
117
121
|
/**
|
|
118
122
|
* The user-home manifest for a declaration (engine ensureUserHome's
|
|
119
|
-
* `manifestContents`, layout.js:137-146):
|
|
123
|
+
* `manifestContents`, layout.js:137-146): the current user-home schema, kind
|
|
120
124
|
* `amalgm-user-home`, and the declaration's entries with each
|
|
121
125
|
* `relativePath` published under the key name `path` — relative, so the
|
|
122
126
|
* manifest survives a moved or renamed user folder — and every managed
|
|
@@ -192,11 +196,29 @@ const join = joinPathSegments;
|
|
|
192
196
|
export function scopedAmalgmDir(homeDir, userScope) {
|
|
193
197
|
return join(homeDir, 'users', sanitizeScopeSegment(userScope));
|
|
194
198
|
}
|
|
195
|
-
/**
|
|
196
|
-
|
|
199
|
+
/** The tracked ignore policy at the root of one user ground. */
|
|
200
|
+
export function userIgnoreFile(userDir) {
|
|
201
|
+
return join(userDir, USER_IGNORE_FILE_NAME);
|
|
202
|
+
}
|
|
203
|
+
/** The reserved, unregistered control namespace for one user. */
|
|
204
|
+
export function userControlDir(userDir) {
|
|
205
|
+
return join(userDir, USER_CONTROL_DIR_NAME);
|
|
206
|
+
}
|
|
207
|
+
/** Machine-local state for one physical device under one user's home. */
|
|
208
|
+
export function userMachineDir(userDir, deviceId) {
|
|
209
|
+
const segment = sanitizeScopeSegment(deviceId, '');
|
|
210
|
+
if (!segment)
|
|
211
|
+
throw new Error('A device id is required for machine-local user state.');
|
|
212
|
+
return join(userControlDir(userDir), 'machines', segment);
|
|
213
|
+
}
|
|
214
|
+
/** Files/Live's machine-local databases and immutable content cache. */
|
|
215
|
+
export function liveMachineStateDir(userDir, deviceId) {
|
|
216
|
+
return join(userMachineDir(userDir, deviceId), 'live');
|
|
217
|
+
}
|
|
218
|
+
/** Per-label runtime state inside the reserved per-device control namespace.
|
|
197
219
|
* The label must be one of the three — junk never names a state dir. */
|
|
198
|
-
export function runtimeStateDir(userDir, label) {
|
|
199
|
-
return join(userDir, 'runtimes', assertRuntimeLabel(label));
|
|
220
|
+
export function runtimeStateDir(userDir, deviceId, label) {
|
|
221
|
+
return join(userMachineDir(userDir, deviceId), 'runtimes', assertRuntimeLabel(label));
|
|
200
222
|
}
|
|
201
223
|
/** `runtime-state.json` inside a runtime state dir (runtime-paths.js:88-90). */
|
|
202
224
|
export function runtimeStateFile(stateDir) {
|
|
@@ -221,7 +243,7 @@ export function computerAuthFile(dir) {
|
|
|
221
243
|
return join(dir, 'auth.json');
|
|
222
244
|
}
|
|
223
245
|
/**
|
|
224
|
-
* A primitive root under the user dir (layout.js:414-419). Only the
|
|
246
|
+
* A primitive root under the user dir (layout.js:414-419). Only the seven
|
|
225
247
|
* declared namespaces exist; the refusal string is the ratified text.
|
|
226
248
|
*/
|
|
227
249
|
export function userPrimitiveRoot(userDir, kind) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/identity/layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD;qBACqB;AACrB,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAEtD,gEAAgE;AAChE,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAEtD,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC;;yCAEyC;AACzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,WAAW,CAAC;AAEnD;;0DAE0D;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/identity/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The canonical Engine login sequence as one host-independent Core operation.
|
|
3
|
+
* HTTP, files, browser opening, clocks, installation, and runtime boot are
|
|
4
|
+
* ports. Service selection is deliberately absent from every auth request.
|
|
5
|
+
*/
|
|
6
|
+
import type { ClockIsoPort, ClockMsPort } from './ports.js';
|
|
7
|
+
import type { InstallationPlan, ReleaseCatalogVerifierPort, SignedReleaseCatalog } from '../supervision/installation-plan.js';
|
|
8
|
+
type Dict = Record<string, unknown>;
|
|
9
|
+
export type MachineSetupStage = 'device' | 'approval' | 'registration' | 'proxy_refresh' | 'catalog' | 'installation' | 'persistence' | 'user_ground' | 'runtime' | 'ready';
|
|
10
|
+
export declare class MachineSetupError extends Error {
|
|
11
|
+
readonly stage: MachineSetupStage;
|
|
12
|
+
readonly code: string;
|
|
13
|
+
readonly recoverable: boolean;
|
|
14
|
+
constructor(stage: MachineSetupStage, code: string, recoverable?: boolean, options?: ErrorOptions);
|
|
15
|
+
}
|
|
16
|
+
export interface DeviceIdentity {
|
|
17
|
+
readonly device_id: string;
|
|
18
|
+
readonly created_at: string;
|
|
19
|
+
}
|
|
20
|
+
export interface StoredMachine {
|
|
21
|
+
readonly publicRecord: Dict;
|
|
22
|
+
readonly secretAuth: Dict;
|
|
23
|
+
readonly installation: InstallationPlan;
|
|
24
|
+
readonly ready: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface DeviceStorePort {
|
|
27
|
+
load(): Promise<DeviceIdentity | null>;
|
|
28
|
+
save(device: DeviceIdentity): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
/** The host must commit publicRecord and secretAuth as one rollback-safe write. */
|
|
31
|
+
export interface MachineStorePort {
|
|
32
|
+
load(): Promise<StoredMachine | null>;
|
|
33
|
+
save(machine: StoredMachine): Promise<void>;
|
|
34
|
+
markReady(): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
export interface MachineControlPlanePort {
|
|
37
|
+
start(body: Dict): Promise<{
|
|
38
|
+
readonly device_code: string;
|
|
39
|
+
readonly setup_code: string;
|
|
40
|
+
readonly verification_url: string;
|
|
41
|
+
readonly expires_in: number;
|
|
42
|
+
readonly interval: number;
|
|
43
|
+
}>;
|
|
44
|
+
poll(body: Dict): Promise<{
|
|
45
|
+
readonly status: 'pending';
|
|
46
|
+
readonly interval?: number;
|
|
47
|
+
} | {
|
|
48
|
+
readonly status: 'registered' | 'expired' | 'denied';
|
|
49
|
+
} | {
|
|
50
|
+
readonly status: 'approved';
|
|
51
|
+
readonly computer_registration_token: string;
|
|
52
|
+
}>;
|
|
53
|
+
redeem(body: Dict): Promise<{
|
|
54
|
+
readonly computer_registration_token: string;
|
|
55
|
+
}>;
|
|
56
|
+
register(registrationToken: string, body: Dict): Promise<Dict>;
|
|
57
|
+
refreshProxy(computerAuthToken: string, body: Dict): Promise<Dict>;
|
|
58
|
+
}
|
|
59
|
+
export interface MachineCatalogPort {
|
|
60
|
+
load(): Promise<SignedReleaseCatalog>;
|
|
61
|
+
readonly verifier: ReleaseCatalogVerifierPort;
|
|
62
|
+
}
|
|
63
|
+
export interface InstalledRelease {
|
|
64
|
+
readonly id: string;
|
|
65
|
+
}
|
|
66
|
+
export interface InstallerPort {
|
|
67
|
+
install(plan: InstallationPlan): Promise<InstalledRelease>;
|
|
68
|
+
rollback(installed: InstalledRelease): Promise<void>;
|
|
69
|
+
}
|
|
70
|
+
export interface RuntimeEvidence {
|
|
71
|
+
readonly userId: string;
|
|
72
|
+
readonly computerId: string;
|
|
73
|
+
readonly deviceId: string;
|
|
74
|
+
readonly services: readonly string[];
|
|
75
|
+
readonly tunnelsAuthenticated: boolean;
|
|
76
|
+
readonly proxyContext: {
|
|
77
|
+
readonly userId: string;
|
|
78
|
+
readonly computerId: string;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export interface RunningRuntime {
|
|
82
|
+
readonly evidence: RuntimeEvidence;
|
|
83
|
+
stop(): Promise<void>;
|
|
84
|
+
}
|
|
85
|
+
export interface RuntimePort {
|
|
86
|
+
start(machine: StoredMachine): Promise<RunningRuntime>;
|
|
87
|
+
}
|
|
88
|
+
export type UserGroundMode = 'initialized' | 'materialized' | 'current';
|
|
89
|
+
/** Portable evidence returned by the injected Files/Live host. Core validates
|
|
90
|
+
* readiness and identity only; entity and content semantics remain Live's. */
|
|
91
|
+
export interface UserGroundEvidence {
|
|
92
|
+
readonly userId: string;
|
|
93
|
+
readonly userEmail: string;
|
|
94
|
+
readonly deviceId: string;
|
|
95
|
+
readonly localRoot: string;
|
|
96
|
+
readonly cloudHead: string;
|
|
97
|
+
readonly mode: UserGroundMode;
|
|
98
|
+
readonly entityCount: number;
|
|
99
|
+
readonly watcherRoots: number;
|
|
100
|
+
readonly watching: true;
|
|
101
|
+
}
|
|
102
|
+
export interface UserGroundPort {
|
|
103
|
+
converge(identity: {
|
|
104
|
+
readonly userId: string;
|
|
105
|
+
readonly userEmail: string;
|
|
106
|
+
readonly deviceId: string;
|
|
107
|
+
}): Promise<UserGroundEvidence>;
|
|
108
|
+
}
|
|
109
|
+
export interface SetupPresentationPort {
|
|
110
|
+
/** Interactive output, not a diagnostic/log sink. */
|
|
111
|
+
showSetup(input: {
|
|
112
|
+
readonly verificationUrl: string;
|
|
113
|
+
readonly setupCode: string;
|
|
114
|
+
}): Promise<void> | void;
|
|
115
|
+
}
|
|
116
|
+
export interface SetupDiagnosticsPort {
|
|
117
|
+
write(event: {
|
|
118
|
+
readonly stage: MachineSetupStage;
|
|
119
|
+
readonly status: 'started' | 'completed' | 'failed';
|
|
120
|
+
readonly code?: string;
|
|
121
|
+
}): void;
|
|
122
|
+
}
|
|
123
|
+
export interface MachineSetupPorts extends ClockIsoPort, ClockMsPort {
|
|
124
|
+
readonly deviceStore: DeviceStorePort;
|
|
125
|
+
readonly machineStore: MachineStorePort;
|
|
126
|
+
readonly controlPlane: MachineControlPlanePort;
|
|
127
|
+
readonly catalog: MachineCatalogPort;
|
|
128
|
+
readonly installer: InstallerPort;
|
|
129
|
+
readonly userGround: UserGroundPort;
|
|
130
|
+
readonly runtime: RuntimePort;
|
|
131
|
+
readonly presentation: SetupPresentationPort;
|
|
132
|
+
readonly diagnostics: SetupDiagnosticsPort;
|
|
133
|
+
randomUuid(): string;
|
|
134
|
+
sleep(ms: number): Promise<void>;
|
|
135
|
+
}
|
|
136
|
+
export interface JoinMachineInput {
|
|
137
|
+
readonly appUrl: string;
|
|
138
|
+
readonly name: string;
|
|
139
|
+
readonly platform: string;
|
|
140
|
+
readonly appVersion: string;
|
|
141
|
+
readonly runtimeLabel: string;
|
|
142
|
+
readonly branch: string;
|
|
143
|
+
readonly setupCode?: string;
|
|
144
|
+
readonly services?: readonly string[];
|
|
145
|
+
}
|
|
146
|
+
export interface ReadyMachine {
|
|
147
|
+
readonly status: 'ready';
|
|
148
|
+
readonly deviceId: string;
|
|
149
|
+
readonly computerId: string;
|
|
150
|
+
readonly userId: string;
|
|
151
|
+
readonly installation: InstallationPlan;
|
|
152
|
+
readonly userGround: UserGroundEvidence;
|
|
153
|
+
readonly runtime: RunningRuntime;
|
|
154
|
+
}
|
|
155
|
+
/** Exact canonical body shared by start, poll, redeem, and register. */
|
|
156
|
+
export declare function computerSetupBody(input: JoinMachineInput, deviceId: string): Dict;
|
|
157
|
+
/** Browser approval and --setup-code converge before this function registers. */
|
|
158
|
+
export declare function joinMachine(input: JoinMachineInput, ports: MachineSetupPorts): Promise<ReadyMachine>;
|
|
159
|
+
/** A later process starts from disk and refreshes copy-on-success only. */
|
|
160
|
+
export declare function resumeMachine(ports: MachineSetupPorts): Promise<ReadyMachine>;
|
|
161
|
+
export {};
|
|
162
|
+
//# sourceMappingURL=machine-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-setup.d.ts","sourceRoot":"","sources":["../../src/identity/machine-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The canonical Engine login sequence as one host-independent Core operation.
|
|
3
|
+
* HTTP, files, browser opening, clocks, installation, and runtime boot are
|
|
4
|
+
* ports. Service selection is deliberately absent from every auth request.
|
|
5
|
+
*/
|
|
6
|
+
import { authFromRecord, mergeRecordAuth, proxyTokenExpiresSoon, publicComputerRecord, refreshedProxyAuth, } from './auth-records.js';
|
|
7
|
+
import { assertSetupCode, isUsableDeviceId, npmDeviceId } from './ids.js';
|
|
8
|
+
import { resolveVerifiedInstallationPlan } from '../supervision/installation-plan.js';
|
|
9
|
+
const asDict = (value) => (value && typeof value === 'object' && !Array.isArray(value) ? value : null);
|
|
10
|
+
const stringValue = (value) => (typeof value === 'string' ? value.trim() : '');
|
|
11
|
+
export class MachineSetupError extends Error {
|
|
12
|
+
stage;
|
|
13
|
+
code;
|
|
14
|
+
recoverable;
|
|
15
|
+
constructor(stage, code, recoverable = false, options) {
|
|
16
|
+
super(`Machine setup failed during ${stage}: ${code}`, options);
|
|
17
|
+
this.name = 'MachineSetupError';
|
|
18
|
+
this.stage = stage;
|
|
19
|
+
this.code = code;
|
|
20
|
+
this.recoverable = recoverable;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function diagnostic(ports, stage, status, code) {
|
|
24
|
+
ports.diagnostics.write({ stage, status, ...(code ? { code } : {}) });
|
|
25
|
+
}
|
|
26
|
+
function setupFailure(stage, error) {
|
|
27
|
+
if (error instanceof MachineSetupError)
|
|
28
|
+
return error;
|
|
29
|
+
const code = stringValue(asDict(error)?.['code']) || 'operation_failed';
|
|
30
|
+
const recoverable = stage === 'approval' || stage === 'proxy_refresh' || stage === 'user_ground';
|
|
31
|
+
return new MachineSetupError(stage, code, recoverable, error instanceof Error ? { cause: error } : undefined);
|
|
32
|
+
}
|
|
33
|
+
async function stableDevice(ports) {
|
|
34
|
+
const existing = await ports.deviceStore.load();
|
|
35
|
+
if (existing && isUsableDeviceId(existing.device_id))
|
|
36
|
+
return existing;
|
|
37
|
+
const device = { device_id: npmDeviceId(ports.randomUuid()), created_at: ports.nowIso() };
|
|
38
|
+
await ports.deviceStore.save(device);
|
|
39
|
+
return device;
|
|
40
|
+
}
|
|
41
|
+
/** Exact canonical body shared by start, poll, redeem, and register. */
|
|
42
|
+
export function computerSetupBody(input, deviceId) {
|
|
43
|
+
return {
|
|
44
|
+
device_id: deviceId,
|
|
45
|
+
name: input.name,
|
|
46
|
+
platform: input.platform,
|
|
47
|
+
app_version: input.appVersion,
|
|
48
|
+
runtime_label: input.runtimeLabel,
|
|
49
|
+
branch: input.branch,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async function registrationToken(input, deviceId, ports) {
|
|
53
|
+
const body = computerSetupBody(input, deviceId);
|
|
54
|
+
if (input.setupCode !== undefined) {
|
|
55
|
+
const redeemed = await ports.controlPlane.redeem({
|
|
56
|
+
...body,
|
|
57
|
+
setup_code: assertSetupCode(input.setupCode),
|
|
58
|
+
});
|
|
59
|
+
const token = stringValue(redeemed.computer_registration_token);
|
|
60
|
+
if (!token)
|
|
61
|
+
throw new MachineSetupError('approval', 'missing_registration_token');
|
|
62
|
+
return token;
|
|
63
|
+
}
|
|
64
|
+
const started = await ports.controlPlane.start(body);
|
|
65
|
+
if (!stringValue(started.device_code)
|
|
66
|
+
|| !stringValue(started.setup_code)
|
|
67
|
+
|| !stringValue(started.verification_url)) {
|
|
68
|
+
throw new MachineSetupError('approval', 'invalid_start_response');
|
|
69
|
+
}
|
|
70
|
+
await ports.presentation.showSetup({
|
|
71
|
+
verificationUrl: started.verification_url,
|
|
72
|
+
setupCode: started.setup_code,
|
|
73
|
+
});
|
|
74
|
+
const deadline = ports.nowMs() + Math.max(60, Number(started.expires_in || 180)) * 1000;
|
|
75
|
+
let interval = Math.max(1, Number(started.interval || 2)) * 1000;
|
|
76
|
+
while (ports.nowMs() < deadline) {
|
|
77
|
+
const polled = await ports.controlPlane.poll({ ...body, device_code: started.device_code });
|
|
78
|
+
if (polled.status === 'approved') {
|
|
79
|
+
const token = stringValue(polled.computer_registration_token);
|
|
80
|
+
if (!token)
|
|
81
|
+
throw new MachineSetupError('approval', 'missing_registration_token');
|
|
82
|
+
return token;
|
|
83
|
+
}
|
|
84
|
+
if (polled.status !== 'pending') {
|
|
85
|
+
throw new MachineSetupError('approval', `setup_${polled.status}`, polled.status === 'expired');
|
|
86
|
+
}
|
|
87
|
+
interval = Math.max(1, Number(polled.interval || interval / 1000)) * 1000;
|
|
88
|
+
await ports.sleep(interval);
|
|
89
|
+
}
|
|
90
|
+
throw new MachineSetupError('approval', 'setup_timeout', true);
|
|
91
|
+
}
|
|
92
|
+
function registrationRecord(response, input, deviceId, nowIso) {
|
|
93
|
+
const registered = asDict(response);
|
|
94
|
+
if (!registered)
|
|
95
|
+
throw new MachineSetupError('registration', 'invalid_registration_response');
|
|
96
|
+
if (stringValue(registered['device_id']) !== deviceId) {
|
|
97
|
+
throw new MachineSetupError('registration', 'registered_device_mismatch');
|
|
98
|
+
}
|
|
99
|
+
for (const key of [
|
|
100
|
+
'computer_id', 'user_id', 'user_email', 'tunnel_token', 'tunnel_url', 'chat_tunnel_url',
|
|
101
|
+
'computer_auth_token',
|
|
102
|
+
]) {
|
|
103
|
+
if (!stringValue(registered[key])) {
|
|
104
|
+
throw new MachineSetupError('registration', `missing_${key}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
...registered,
|
|
109
|
+
app_url: input.appUrl,
|
|
110
|
+
name: input.name,
|
|
111
|
+
platform: input.platform,
|
|
112
|
+
app_version: input.appVersion,
|
|
113
|
+
runtime_label: input.runtimeLabel,
|
|
114
|
+
branch: input.branch,
|
|
115
|
+
registered_at: nowIso,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function userGroundIdentity(record) {
|
|
119
|
+
const identity = {
|
|
120
|
+
userId: stringValue(record['user_id']),
|
|
121
|
+
userEmail: stringValue(record['user_email']).toLowerCase(),
|
|
122
|
+
deviceId: stringValue(record['device_id']),
|
|
123
|
+
};
|
|
124
|
+
if (!identity.userId)
|
|
125
|
+
throw new MachineSetupError('user_ground', 'missing_user_id');
|
|
126
|
+
if (!identity.userEmail)
|
|
127
|
+
throw new MachineSetupError('user_ground', 'missing_user_email');
|
|
128
|
+
if (!identity.deviceId)
|
|
129
|
+
throw new MachineSetupError('user_ground', 'missing_device_id');
|
|
130
|
+
return identity;
|
|
131
|
+
}
|
|
132
|
+
function assertUserGround(identity, evidence) {
|
|
133
|
+
if (evidence.userId !== identity.userId) {
|
|
134
|
+
throw new MachineSetupError('user_ground', 'ground_user_mismatch');
|
|
135
|
+
}
|
|
136
|
+
if (evidence.userEmail.toLowerCase() !== identity.userEmail) {
|
|
137
|
+
throw new MachineSetupError('user_ground', 'ground_email_mismatch');
|
|
138
|
+
}
|
|
139
|
+
if (evidence.deviceId !== identity.deviceId) {
|
|
140
|
+
throw new MachineSetupError('user_ground', 'ground_device_mismatch');
|
|
141
|
+
}
|
|
142
|
+
if (!stringValue(evidence.localRoot)) {
|
|
143
|
+
throw new MachineSetupError('user_ground', 'ground_root_missing');
|
|
144
|
+
}
|
|
145
|
+
if (!/^[0-9a-f]{64}$/.test(evidence.cloudHead)) {
|
|
146
|
+
throw new MachineSetupError('user_ground', 'ground_cloud_head_invalid');
|
|
147
|
+
}
|
|
148
|
+
if (!['initialized', 'materialized', 'current'].includes(evidence.mode)) {
|
|
149
|
+
throw new MachineSetupError('user_ground', 'ground_mode_invalid');
|
|
150
|
+
}
|
|
151
|
+
if (!Number.isSafeInteger(evidence.entityCount) || evidence.entityCount < 1) {
|
|
152
|
+
throw new MachineSetupError('user_ground', 'ground_entities_missing');
|
|
153
|
+
}
|
|
154
|
+
if (evidence.watching !== true || !Number.isSafeInteger(evidence.watcherRoots)
|
|
155
|
+
|| evidence.watcherRoots < 1) {
|
|
156
|
+
throw new MachineSetupError('user_ground', 'ground_watchers_missing');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async function convergeUserGround(record, ports) {
|
|
160
|
+
const identity = userGroundIdentity(record);
|
|
161
|
+
const evidence = await ports.userGround.converge(identity);
|
|
162
|
+
assertUserGround(identity, evidence);
|
|
163
|
+
return evidence;
|
|
164
|
+
}
|
|
165
|
+
function authMachineToken(auth) {
|
|
166
|
+
return stringValue(asDict(asDict(auth)?.['machine'])?.['token']);
|
|
167
|
+
}
|
|
168
|
+
function authProxyToken(auth) {
|
|
169
|
+
return stringValue(asDict(asDict(auth)?.['proxy'])?.['token']);
|
|
170
|
+
}
|
|
171
|
+
async function ensureFreshProxy(record, auth, ports) {
|
|
172
|
+
if (authProxyToken(auth) && !proxyTokenExpiresSoon(auth, ports))
|
|
173
|
+
return auth;
|
|
174
|
+
const computerAuthToken = authMachineToken(auth);
|
|
175
|
+
if (!computerAuthToken) {
|
|
176
|
+
throw new MachineSetupError('proxy_refresh', 'missing_computer_auth_token', true);
|
|
177
|
+
}
|
|
178
|
+
const refreshed = await ports.controlPlane.refreshProxy(computerAuthToken, {
|
|
179
|
+
computer_id: stringValue(record['computer_id']),
|
|
180
|
+
device_id: stringValue(record['device_id']),
|
|
181
|
+
});
|
|
182
|
+
const next = refreshedProxyAuth({ record, auth, refreshed }, ports);
|
|
183
|
+
if (!authProxyToken(next) || proxyTokenExpiresSoon(next, ports)) {
|
|
184
|
+
throw new MachineSetupError('proxy_refresh', 'proxy_token_not_fresh', true);
|
|
185
|
+
}
|
|
186
|
+
return next;
|
|
187
|
+
}
|
|
188
|
+
function hydrated(machine) {
|
|
189
|
+
return mergeRecordAuth(machine.publicRecord, machine.secretAuth) || {};
|
|
190
|
+
}
|
|
191
|
+
function assertRuntime(machine, evidence) {
|
|
192
|
+
const record = hydrated(machine);
|
|
193
|
+
const userId = stringValue(record['user_id']);
|
|
194
|
+
const computerId = stringValue(record['computer_id']);
|
|
195
|
+
const deviceId = stringValue(record['device_id']);
|
|
196
|
+
if (evidence.userId !== userId)
|
|
197
|
+
throw new MachineSetupError('runtime', 'canonical_user_mismatch');
|
|
198
|
+
if (evidence.computerId !== computerId)
|
|
199
|
+
throw new MachineSetupError('runtime', 'computer_context_mismatch');
|
|
200
|
+
if (evidence.deviceId !== deviceId)
|
|
201
|
+
throw new MachineSetupError('runtime', 'device_context_mismatch');
|
|
202
|
+
if (!evidence.tunnelsAuthenticated)
|
|
203
|
+
throw new MachineSetupError('runtime', 'tunnels_not_authenticated');
|
|
204
|
+
if (evidence.proxyContext.userId !== userId || evidence.proxyContext.computerId !== computerId) {
|
|
205
|
+
throw new MachineSetupError('runtime', 'proxy_context_mismatch');
|
|
206
|
+
}
|
|
207
|
+
if (JSON.stringify(evidence.services) !== JSON.stringify(machine.installation.services)) {
|
|
208
|
+
throw new MachineSetupError('runtime', 'installation_not_healthy');
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
async function startVerified(machine, ports) {
|
|
212
|
+
const runtime = await ports.runtime.start(machine);
|
|
213
|
+
try {
|
|
214
|
+
assertRuntime(machine, runtime.evidence);
|
|
215
|
+
return runtime;
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
await runtime.stop().catch(() => undefined);
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/** Browser approval and --setup-code converge before this function registers. */
|
|
223
|
+
export async function joinMachine(input, ports) {
|
|
224
|
+
let stage = 'device';
|
|
225
|
+
let installed = null;
|
|
226
|
+
let runtime = null;
|
|
227
|
+
try {
|
|
228
|
+
diagnostic(ports, stage, 'started');
|
|
229
|
+
const device = await stableDevice(ports);
|
|
230
|
+
diagnostic(ports, stage, 'completed');
|
|
231
|
+
stage = 'approval';
|
|
232
|
+
diagnostic(ports, stage, 'started');
|
|
233
|
+
const token = await registrationToken(input, device.device_id, ports);
|
|
234
|
+
diagnostic(ports, stage, 'completed');
|
|
235
|
+
stage = 'registration';
|
|
236
|
+
diagnostic(ports, stage, 'started');
|
|
237
|
+
const registered = await ports.controlPlane.register(token, computerSetupBody(input, device.device_id));
|
|
238
|
+
const record = registrationRecord(registered, input, device.device_id, ports.nowIso());
|
|
239
|
+
diagnostic(ports, stage, 'completed');
|
|
240
|
+
stage = 'proxy_refresh';
|
|
241
|
+
diagnostic(ports, stage, 'started');
|
|
242
|
+
const auth = await ensureFreshProxy(record, authFromRecord(record, null, ports), ports);
|
|
243
|
+
diagnostic(ports, stage, 'completed');
|
|
244
|
+
stage = 'catalog';
|
|
245
|
+
diagnostic(ports, stage, 'started');
|
|
246
|
+
const catalog = await ports.catalog.load();
|
|
247
|
+
const installation = resolveVerifiedInstallationPlan(catalog, input.services, ports.catalog.verifier);
|
|
248
|
+
diagnostic(ports, stage, 'completed');
|
|
249
|
+
stage = 'installation';
|
|
250
|
+
diagnostic(ports, stage, 'started');
|
|
251
|
+
installed = await ports.installer.install(installation);
|
|
252
|
+
diagnostic(ports, stage, 'completed');
|
|
253
|
+
const stored = {
|
|
254
|
+
publicRecord: publicComputerRecord(record),
|
|
255
|
+
secretAuth: auth,
|
|
256
|
+
installation,
|
|
257
|
+
ready: false,
|
|
258
|
+
};
|
|
259
|
+
stage = 'persistence';
|
|
260
|
+
diagnostic(ports, stage, 'started');
|
|
261
|
+
await ports.machineStore.save(stored);
|
|
262
|
+
diagnostic(ports, stage, 'completed');
|
|
263
|
+
stage = 'user_ground';
|
|
264
|
+
diagnostic(ports, stage, 'started');
|
|
265
|
+
const userGround = await convergeUserGround(record, ports);
|
|
266
|
+
diagnostic(ports, stage, 'completed');
|
|
267
|
+
stage = 'runtime';
|
|
268
|
+
diagnostic(ports, stage, 'started');
|
|
269
|
+
const firstBoot = await ports.machineStore.load();
|
|
270
|
+
if (!firstBoot)
|
|
271
|
+
throw new MachineSetupError(stage, 'persisted_state_missing');
|
|
272
|
+
runtime = await startVerified(firstBoot, ports);
|
|
273
|
+
await runtime.stop();
|
|
274
|
+
runtime = null;
|
|
275
|
+
const restartBoot = await ports.machineStore.load();
|
|
276
|
+
if (!restartBoot)
|
|
277
|
+
throw new MachineSetupError(stage, 'restart_state_missing');
|
|
278
|
+
runtime = await startVerified(restartBoot, ports);
|
|
279
|
+
diagnostic(ports, stage, 'completed');
|
|
280
|
+
stage = 'ready';
|
|
281
|
+
diagnostic(ports, stage, 'started');
|
|
282
|
+
await ports.machineStore.markReady();
|
|
283
|
+
diagnostic(ports, stage, 'completed');
|
|
284
|
+
return {
|
|
285
|
+
status: 'ready',
|
|
286
|
+
deviceId: device.device_id,
|
|
287
|
+
computerId: stringValue(record['computer_id']),
|
|
288
|
+
userId: stringValue(record['user_id']),
|
|
289
|
+
installation,
|
|
290
|
+
userGround,
|
|
291
|
+
runtime,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
if (runtime)
|
|
296
|
+
await runtime.stop().catch(() => undefined);
|
|
297
|
+
if (installed)
|
|
298
|
+
await ports.installer.rollback(installed).catch(() => undefined);
|
|
299
|
+
const failure = setupFailure(stage, error);
|
|
300
|
+
diagnostic(ports, failure.stage, 'failed', failure.code);
|
|
301
|
+
throw failure;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/** A later process starts from disk and refreshes copy-on-success only. */
|
|
305
|
+
export async function resumeMachine(ports) {
|
|
306
|
+
let stage = 'persistence';
|
|
307
|
+
let runtime = null;
|
|
308
|
+
try {
|
|
309
|
+
const device = await stableDevice(ports);
|
|
310
|
+
const stored = await ports.machineStore.load();
|
|
311
|
+
if (!stored?.ready)
|
|
312
|
+
throw new MachineSetupError(stage, 'no_ready_machine', true);
|
|
313
|
+
const record = hydrated(stored);
|
|
314
|
+
if (stringValue(record['device_id']) !== device.device_id) {
|
|
315
|
+
throw new MachineSetupError(stage, 'stored_device_mismatch');
|
|
316
|
+
}
|
|
317
|
+
stage = 'proxy_refresh';
|
|
318
|
+
const auth = await ensureFreshProxy(record, stored.secretAuth, ports);
|
|
319
|
+
const current = auth === stored.secretAuth ? stored : { ...stored, secretAuth: auth };
|
|
320
|
+
if (current !== stored) {
|
|
321
|
+
stage = 'persistence';
|
|
322
|
+
await ports.machineStore.save(current);
|
|
323
|
+
}
|
|
324
|
+
stage = 'user_ground';
|
|
325
|
+
diagnostic(ports, stage, 'started');
|
|
326
|
+
const userGround = await convergeUserGround(record, ports);
|
|
327
|
+
diagnostic(ports, stage, 'completed');
|
|
328
|
+
stage = 'runtime';
|
|
329
|
+
const persisted = await ports.machineStore.load();
|
|
330
|
+
if (!persisted)
|
|
331
|
+
throw new MachineSetupError(stage, 'restart_state_missing');
|
|
332
|
+
runtime = await startVerified(persisted, ports);
|
|
333
|
+
return {
|
|
334
|
+
status: 'ready',
|
|
335
|
+
deviceId: device.device_id,
|
|
336
|
+
computerId: stringValue(record['computer_id']),
|
|
337
|
+
userId: stringValue(record['user_id']),
|
|
338
|
+
installation: persisted.installation,
|
|
339
|
+
userGround,
|
|
340
|
+
runtime,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
if (runtime)
|
|
345
|
+
await runtime.stop().catch(() => undefined);
|
|
346
|
+
const failure = setupFailure(stage, error);
|
|
347
|
+
diagnostic(ports, failure.stage, 'failed', failure.code);
|
|
348
|
+
throw failure;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=machine-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-setup.js","sourceRoot":"","sources":["../../src/identity/machine-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ export interface ProductStateDirInput {
|
|
|
25
25
|
readonly primitive: string;
|
|
26
26
|
/** An env-shaped bag of strings. The host passes process.env; tests pass literals. */
|
|
27
27
|
readonly env: EnvLike;
|
|
28
|
-
/** The amalgm root
|
|
28
|
+
/** The visible `~/amalgm` root, resolved by the host. */
|
|
29
29
|
readonly homedir: string;
|
|
30
30
|
/** The user scope; absent falls to the sanitizer's `local`, as everywhere. */
|
|
31
31
|
readonly scope?: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-state.d.ts","sourceRoot":"","sources":["../../src/identity/product-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU7D;AAED,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,
|
|
1
|
+
{"version":3,"file":"product-state.d.ts","sourceRoot":"","sources":["../../src/identity/product-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU7D;AAED,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAU1E"}
|
|
@@ -14,4 +14,5 @@ export { APP_HEALTH_POLICY, APP_ID_BODY_KEYS, APP_ID_REQUIRED_ERROR, APP_ID_REQU
|
|
|
14
14
|
export { APP_RESTART_POLICY, appExitDecision, explicitStartReset, recentCrashes, restartDelayMs, type AppDesiredState, type AppExitContext, type AppExitDecision, type AppStatus, } from './app-restart.js';
|
|
15
15
|
export { AUTO_UPDATE_ENV_OVERRIDES, AUTO_UPDATE_POLICY, AUTO_UPDATE_STATUSES, NOT_SERVICE_MANAGED_REASON, NPM_UPDATE_CACHE_DIRNAME, UPDATE_TARGET_MISMATCH, autoUpdateIdleBlockedReason, autoUpdateSupported, comparePrerelease, compareVersions, distTagCheckFailedMessage, envDisablesAutoUpdate, envFlag, globalPrefixForPackageRoot, installFailedMessage, noVersionMessage, npmEnv, npmFailureDetail, npmInstallArgs, npmInstallTag, numberFromEnvValue, parseSemver, resolveAutoUpdateTimings, restartSuppressedDetail, shouldAutoUpdate, updateTargetMismatchError, type AutoUpdateStatus, type RuntimeIdleStatus, type Semver, type UpdateTargetMismatchError, } from './update.js';
|
|
16
16
|
export { PS_LINE_PATTERN, RUNTIME_HEALTH_PATH, RUNTIME_INSTANCE_ARG_PATTERN, SUPERVISOR_COMMAND_SUFFIX, buildLaunchdPlist, buildSystemdUnit, buildWindowsStartupScript, commandLooksLikeAnySupervisor, commandLooksLikeRuntimeService, commandLooksLikeSupervisor, commandRuntimeInstanceId, decideOwnership, deferToExistingInstall, envMatchesAmalgmDir, launchdPlistPath, lockOwnedByAnother, normalizeMode, parsePort, parsePsLine, pathLooksLikeDesktopBundle, plistEscape, releaseAllowed, runtimeInstanceArg, runtimeLaunchServices, runtimePortsFromState, runtimePortsState, runtimeServiceMarkers, runtimeServiceSuffixes, serviceLabel, serviceLabelScope, serviceStateCanOwnRuntime, shellQuote, shippedRuntimeServices, stateMatchesRequest, systemdQuote, systemdUnavailableOutput, systemdUnitPath, vbsString, windowsStartupScriptPath, type OwnershipDecision, type ProcessIdentity, type RuntimeOwnerRecord, type RuntimeStatePorts, type ServiceDeclaration, type ServiceMode, type ServiceState, } from './service-registration.js';
|
|
17
|
+
export * from './installation-plan.js';
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/supervision/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,qBAAqB,EACrB,OAAO,EACP,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACvB,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,yBAAyB,GAC/B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,WAAW,EACX,0BAA0B,EAC1B,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,wBAAwB,EACxB,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/supervision/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,qBAAqB,EACrB,OAAO,EACP,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACvB,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,yBAAyB,GAC/B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,WAAW,EACX,0BAA0B,EAC1B,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,wBAAwB,EACxB,eAAe,EACf,SAAS,EACT,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC;AAEnC,cAAc,wBAAwB,CAAC"}
|
|
@@ -14,4 +14,5 @@ export { APP_HEALTH_POLICY, APP_ID_BODY_KEYS, APP_ID_REQUIRED_ERROR, APP_ID_REQU
|
|
|
14
14
|
export { APP_RESTART_POLICY, appExitDecision, explicitStartReset, recentCrashes, restartDelayMs, } from './app-restart.js';
|
|
15
15
|
export { AUTO_UPDATE_ENV_OVERRIDES, AUTO_UPDATE_POLICY, AUTO_UPDATE_STATUSES, NOT_SERVICE_MANAGED_REASON, NPM_UPDATE_CACHE_DIRNAME, UPDATE_TARGET_MISMATCH, autoUpdateIdleBlockedReason, autoUpdateSupported, comparePrerelease, compareVersions, distTagCheckFailedMessage, envDisablesAutoUpdate, envFlag, globalPrefixForPackageRoot, installFailedMessage, noVersionMessage, npmEnv, npmFailureDetail, npmInstallArgs, npmInstallTag, numberFromEnvValue, parseSemver, resolveAutoUpdateTimings, restartSuppressedDetail, shouldAutoUpdate, updateTargetMismatchError, } from './update.js';
|
|
16
16
|
export { PS_LINE_PATTERN, RUNTIME_HEALTH_PATH, RUNTIME_INSTANCE_ARG_PATTERN, SUPERVISOR_COMMAND_SUFFIX, buildLaunchdPlist, buildSystemdUnit, buildWindowsStartupScript, commandLooksLikeAnySupervisor, commandLooksLikeRuntimeService, commandLooksLikeSupervisor, commandRuntimeInstanceId, decideOwnership, deferToExistingInstall, envMatchesAmalgmDir, launchdPlistPath, lockOwnedByAnother, normalizeMode, parsePort, parsePsLine, pathLooksLikeDesktopBundle, plistEscape, releaseAllowed, runtimeInstanceArg, runtimeLaunchServices, runtimePortsFromState, runtimePortsState, runtimeServiceMarkers, runtimeServiceSuffixes, serviceLabel, serviceLabelScope, serviceStateCanOwnRuntime, shellQuote, shippedRuntimeServices, stateMatchesRequest, systemdQuote, systemdUnavailableOutput, systemdUnitPath, vbsString, windowsStartupScriptPath, } from './service-registration.js';
|
|
17
|
+
export * from './installation-plan.js';
|
|
17
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/supervision/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GAQnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,GAOpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,cAAc,GAKf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,qBAAqB,EACrB,OAAO,EACP,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACvB,gBAAgB,EAChB,yBAAyB,GAK1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,WAAW,EACX,0BAA0B,EAC1B,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,wBAAwB,EACxB,eAAe,EACf,SAAS,EACT,wBAAwB,GAQzB,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/supervision/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GAQnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,GAOpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,cAAc,GAKf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,qBAAqB,EACrB,OAAO,EACP,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACvB,gBAAgB,EAChB,yBAAyB,GAK1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,0BAA0B,EAC1B,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,WAAW,EACX,0BAA0B,EAC1B,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,wBAAwB,EACxB,eAAe,EACf,SAAS,EACT,wBAAwB,GAQzB,MAAM,2BAA2B,CAAC;AAEnC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installation is decided after machine trust. The release catalog is the
|
|
3
|
+
* authority for "all" and for dependency closure; auth credentials never are.
|
|
4
|
+
*/
|
|
5
|
+
export interface ReleaseService {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly dependencies: readonly string[];
|
|
8
|
+
}
|
|
9
|
+
export interface SignedReleaseCatalog {
|
|
10
|
+
readonly releaseId: string;
|
|
11
|
+
readonly keyId: string;
|
|
12
|
+
readonly services: readonly ReleaseService[];
|
|
13
|
+
readonly signature: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ReleaseCatalogVerifierPort {
|
|
16
|
+
verify(payload: string, signature: string, keyId: string): boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface InstallationPlan {
|
|
19
|
+
readonly releaseId: string;
|
|
20
|
+
readonly selection: 'all' | readonly string[];
|
|
21
|
+
readonly services: readonly string[];
|
|
22
|
+
}
|
|
23
|
+
/** Stable bytes signed by the release authority; the signature omits itself. */
|
|
24
|
+
export declare function releaseCatalogPayload(catalog: SignedReleaseCatalog): string;
|
|
25
|
+
export declare function assertVerifiedReleaseCatalog(catalog: SignedReleaseCatalog, verifier: ReleaseCatalogVerifierPort): void;
|
|
26
|
+
/**
|
|
27
|
+
* Omitted selector = every service in the signed release. Explicit selector =
|
|
28
|
+
* Core + Files, the named services, and their dependency closure. Dependencies
|
|
29
|
+
* always precede their consumers and each service appears once.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveInstallationPlan(catalog: SignedReleaseCatalog, requestedServices?: readonly string[]): InstallationPlan;
|
|
32
|
+
export declare function resolveVerifiedInstallationPlan(catalog: SignedReleaseCatalog, requestedServices: readonly string[] | undefined, verifier: ReleaseCatalogVerifierPort): InstallationPlan;
|
|
33
|
+
//# sourceMappingURL=installation-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-plan.d.ts","sourceRoot":"","sources":["../../src/supervision/installation-plan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACpE;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAmCD,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAO3E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,0BAA0B,GACnC,IAAI,CAKN;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,oBAAoB,EAC7B,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,GACpC,gBAAgB,CAkClB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,oBAAoB,EAC7B,iBAAiB,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAChD,QAAQ,EAAE,0BAA0B,GACnC,gBAAgB,CAGlB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installation is decided after machine trust. The release catalog is the
|
|
3
|
+
* authority for "all" and for dependency closure; auth credentials never are.
|
|
4
|
+
*/
|
|
5
|
+
function normalizedId(value, label) {
|
|
6
|
+
const id = typeof value === 'string' ? value.trim().toLowerCase() : '';
|
|
7
|
+
if (!/^[a-z][a-z0-9-]*$/.test(id))
|
|
8
|
+
throw new Error(`Invalid ${label} id.`);
|
|
9
|
+
return id;
|
|
10
|
+
}
|
|
11
|
+
function indexedServices(catalog) {
|
|
12
|
+
if (!String(catalog?.releaseId || '').trim())
|
|
13
|
+
throw new Error('Release catalog has no release id.');
|
|
14
|
+
if (!Array.isArray(catalog.services) || catalog.services.length === 0) {
|
|
15
|
+
throw new Error('Release catalog has no services.');
|
|
16
|
+
}
|
|
17
|
+
const services = new Map();
|
|
18
|
+
for (const service of catalog.services) {
|
|
19
|
+
const id = normalizedId(service?.id, 'service');
|
|
20
|
+
if (services.has(id))
|
|
21
|
+
throw new Error(`Release catalog repeats service "${id}".`);
|
|
22
|
+
const dependencies = Array.isArray(service.dependencies)
|
|
23
|
+
? service.dependencies.map((dependency) => normalizedId(dependency, 'dependency'))
|
|
24
|
+
: [];
|
|
25
|
+
services.set(id, dependencies);
|
|
26
|
+
}
|
|
27
|
+
if (!services.has('core') || !services.has('files')) {
|
|
28
|
+
throw new Error('Release catalog must contain the Core + Files baseline.');
|
|
29
|
+
}
|
|
30
|
+
for (const [id, dependencies] of services) {
|
|
31
|
+
for (const dependency of dependencies) {
|
|
32
|
+
if (!services.has(dependency)) {
|
|
33
|
+
throw new Error(`Service "${id}" depends on unknown service "${dependency}".`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return services;
|
|
38
|
+
}
|
|
39
|
+
/** Stable bytes signed by the release authority; the signature omits itself. */
|
|
40
|
+
export function releaseCatalogPayload(catalog) {
|
|
41
|
+
const services = indexedServices(catalog);
|
|
42
|
+
return JSON.stringify({
|
|
43
|
+
releaseId: String(catalog.releaseId).trim(),
|
|
44
|
+
keyId: String(catalog.keyId || '').trim(),
|
|
45
|
+
services: Array.from(services, ([id, dependencies]) => ({ id, dependencies: [...dependencies] })),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export function assertVerifiedReleaseCatalog(catalog, verifier) {
|
|
49
|
+
const payload = releaseCatalogPayload(catalog);
|
|
50
|
+
if (!catalog.signature || !verifier.verify(payload, catalog.signature, catalog.keyId)) {
|
|
51
|
+
throw new Error('Release catalog signature is invalid.');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Omitted selector = every service in the signed release. Explicit selector =
|
|
56
|
+
* Core + Files, the named services, and their dependency closure. Dependencies
|
|
57
|
+
* always precede their consumers and each service appears once.
|
|
58
|
+
*/
|
|
59
|
+
export function resolveInstallationPlan(catalog, requestedServices) {
|
|
60
|
+
const services = indexedServices(catalog);
|
|
61
|
+
const explicit = requestedServices !== undefined;
|
|
62
|
+
if (explicit && requestedServices.length === 0) {
|
|
63
|
+
throw new Error('An explicit service selection cannot be empty.');
|
|
64
|
+
}
|
|
65
|
+
const requested = explicit
|
|
66
|
+
? requestedServices.map((service) => normalizedId(service, 'requested service'))
|
|
67
|
+
: [...services.keys()];
|
|
68
|
+
for (const service of requested) {
|
|
69
|
+
if (!services.has(service))
|
|
70
|
+
throw new Error(`Unknown requested service "${service}".`);
|
|
71
|
+
}
|
|
72
|
+
const ordered = [];
|
|
73
|
+
const visiting = new Set();
|
|
74
|
+
const visited = new Set();
|
|
75
|
+
const visit = (id) => {
|
|
76
|
+
if (visited.has(id))
|
|
77
|
+
return;
|
|
78
|
+
if (visiting.has(id))
|
|
79
|
+
throw new Error(`Release catalog contains a dependency cycle at "${id}".`);
|
|
80
|
+
visiting.add(id);
|
|
81
|
+
for (const dependency of services.get(id) || [])
|
|
82
|
+
visit(dependency);
|
|
83
|
+
visiting.delete(id);
|
|
84
|
+
visited.add(id);
|
|
85
|
+
ordered.push(id);
|
|
86
|
+
};
|
|
87
|
+
visit('core');
|
|
88
|
+
visit('files');
|
|
89
|
+
for (const service of requested)
|
|
90
|
+
visit(service);
|
|
91
|
+
return {
|
|
92
|
+
releaseId: String(catalog.releaseId).trim(),
|
|
93
|
+
selection: explicit ? [...new Set(requested)] : 'all',
|
|
94
|
+
services: ordered,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function resolveVerifiedInstallationPlan(catalog, requestedServices, verifier) {
|
|
98
|
+
assertVerifiedReleaseCatalog(catalog, verifier);
|
|
99
|
+
return resolveInstallationPlan(catalog, requestedServices);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=installation-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-plan.js","sourceRoot":"","sources":["../../src/supervision/installation-plan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amalgm/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "The Amalgm kernel SDK — identity, transport, supervision, and host capability contracts behind host-injected adapters.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -63,7 +63,9 @@
|
|
|
63
63
|
"scripts": {
|
|
64
64
|
"build": "tsc -p tsconfig.json",
|
|
65
65
|
"test": "npm run build && node --test tests/",
|
|
66
|
-
"test:parity": "npm run build && node --test tests/parity/"
|
|
66
|
+
"test:parity": "npm run build && node --test tests/parity/",
|
|
67
|
+
"examine:machine-setup": "npm run build && node --test tests/supervision/installation-plan.test.js tests/machine-setup/examination.test.js",
|
|
68
|
+
"examine:user-ground": "npm run build && npm --prefix ../amalgm-live run build && node --test examinations/user-ground/login.examination.mjs"
|
|
67
69
|
},
|
|
68
70
|
"devDependencies": {
|
|
69
71
|
"typescript": "^5.7.3"
|