@amalgm/live 0.2.26 → 0.2.28
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 +52 -29
- package/README.md +1 -2
- package/dist/contracts/index.d.ts +0 -1
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +0 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/detection/record-proposal.d.ts +3 -2
- package/dist/detection/record-proposal.d.ts.map +1 -1
- package/dist/detection/record-proposal.js +9 -7
- package/dist/detection/record-proposal.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/machines/index.d.ts +0 -2
- package/dist/machines/index.d.ts.map +1 -1
- package/dist/machines/index.js +0 -2
- package/dist/machines/index.js.map +1 -1
- package/dist/records/authority.d.ts +23 -0
- package/dist/records/authority.d.ts.map +1 -0
- package/dist/records/authority.js +28 -0
- package/dist/records/authority.js.map +1 -0
- package/dist/records/codec.d.ts +6 -0
- package/dist/records/codec.d.ts.map +1 -0
- package/dist/records/codec.js +42 -0
- package/dist/records/codec.js.map +1 -0
- package/dist/records/contracts.d.ts +46 -0
- package/dist/records/contracts.d.ts.map +1 -0
- package/dist/records/contracts.js +114 -0
- package/dist/records/contracts.js.map +1 -0
- package/dist/records/inbox.d.ts +18 -0
- package/dist/records/inbox.d.ts.map +1 -0
- package/dist/records/inbox.js +34 -0
- package/dist/records/inbox.js.map +1 -0
- package/dist/records/index.d.ts +7 -0
- package/dist/records/index.d.ts.map +1 -0
- package/dist/records/index.js +7 -0
- package/dist/records/index.js.map +1 -0
- package/dist/records/outbox.d.ts +20 -0
- package/dist/records/outbox.d.ts.map +1 -0
- package/dist/records/outbox.js +44 -0
- package/dist/records/outbox.js.map +1 -0
- package/dist/registration/user-ground.d.ts +5 -2
- package/dist/registration/user-ground.d.ts.map +1 -1
- package/dist/registration/user-ground.js +14 -3
- package/dist/registration/user-ground.js.map +1 -1
- package/dist/watching/suspicion.d.ts.map +1 -1
- package/dist/watching/suspicion.js +29 -1
- package/dist/watching/suspicion.js.map +1 -1
- package/dist-cjs/contracts/binding.js +26 -0
- package/dist-cjs/contracts/binding.js.map +1 -0
- package/dist-cjs/contracts/content.js +99 -0
- package/dist-cjs/contracts/content.js.map +1 -0
- package/dist-cjs/contracts/docs.js +56 -0
- package/dist-cjs/contracts/docs.js.map +1 -0
- package/dist-cjs/contracts/events.js +44 -0
- package/dist-cjs/contracts/events.js.map +1 -0
- package/dist-cjs/contracts/frames/gateway.js +39 -0
- package/dist-cjs/contracts/frames/gateway.js.map +1 -0
- package/dist-cjs/contracts/frames/stream.js +20 -0
- package/dist-cjs/contracts/frames/stream.js.map +1 -0
- package/dist-cjs/contracts/frames/tunnel.js +60 -0
- package/dist-cjs/contracts/frames/tunnel.js.map +1 -0
- package/dist-cjs/contracts/index.js +34 -0
- package/dist-cjs/contracts/index.js.map +1 -0
- package/dist-cjs/contracts/presence.js +38 -0
- package/dist-cjs/contracts/presence.js.map +1 -0
- package/dist-cjs/contracts/resources.js +114 -0
- package/dist-cjs/contracts/resources.js.map +1 -0
- package/dist-cjs/contracts/snapshot.js +31 -0
- package/dist-cjs/contracts/snapshot.js.map +1 -0
- package/dist-cjs/contracts/validate.js +34 -0
- package/dist-cjs/contracts/validate.js.map +1 -0
- package/dist-cjs/detection/adapter-contract.js +168 -0
- package/dist-cjs/detection/adapter-contract.js.map +1 -0
- package/dist-cjs/detection/batch.js +71 -0
- package/dist-cjs/detection/batch.js.map +1 -0
- package/dist-cjs/detection/classify.js +48 -0
- package/dist-cjs/detection/classify.js.map +1 -0
- package/dist-cjs/detection/content.js +122 -0
- package/dist-cjs/detection/content.js.map +1 -0
- package/dist-cjs/detection/continuity.js +88 -0
- package/dist-cjs/detection/continuity.js.map +1 -0
- package/dist-cjs/detection/diff.js +193 -0
- package/dist-cjs/detection/diff.js.map +1 -0
- package/dist-cjs/detection/echo.js +25 -0
- package/dist-cjs/detection/echo.js.map +1 -0
- package/dist-cjs/detection/enrollment.js +189 -0
- package/dist-cjs/detection/enrollment.js.map +1 -0
- package/dist-cjs/detection/index.js +57 -0
- package/dist-cjs/detection/index.js.map +1 -0
- package/dist-cjs/detection/record-proposal.js +170 -0
- package/dist-cjs/detection/record-proposal.js.map +1 -0
- package/dist-cjs/detection/refusal.js +44 -0
- package/dist-cjs/detection/refusal.js.map +1 -0
- package/dist-cjs/detection/repository.js +67 -0
- package/dist-cjs/detection/repository.js.map +1 -0
- package/dist-cjs/detection/territory.js +82 -0
- package/dist-cjs/detection/territory.js.map +1 -0
- package/dist-cjs/detection/watch-boundary.js +51 -0
- package/dist-cjs/detection/watch-boundary.js.map +1 -0
- package/dist-cjs/entities/bytes.js +92 -0
- package/dist-cjs/entities/bytes.js.map +1 -0
- package/dist-cjs/entities/cloud.js +171 -0
- package/dist-cjs/entities/cloud.js.map +1 -0
- package/dist-cjs/entities/index.js +39 -0
- package/dist-cjs/entities/index.js.map +1 -0
- package/dist-cjs/entities/moves.js +85 -0
- package/dist-cjs/entities/moves.js.map +1 -0
- package/dist-cjs/entities/repo-states.js +256 -0
- package/dist-cjs/entities/repo-states.js.map +1 -0
- package/dist-cjs/entities/rules.js +216 -0
- package/dist-cjs/entities/rules.js.map +1 -0
- package/dist-cjs/entities/types.js +44 -0
- package/dist-cjs/entities/types.js.map +1 -0
- package/dist-cjs/files/commands.js +120 -0
- package/dist-cjs/files/commands.js.map +1 -0
- package/dist-cjs/files/index.js +19 -0
- package/dist-cjs/files/index.js.map +1 -0
- package/dist-cjs/index.js +39 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/machines/arbitration.js +41 -0
- package/dist-cjs/machines/arbitration.js.map +1 -0
- package/dist-cjs/machines/backoff.js +38 -0
- package/dist-cjs/machines/backoff.js.map +1 -0
- package/dist-cjs/machines/bootstrap.js +110 -0
- package/dist-cjs/machines/bootstrap.js.map +1 -0
- package/dist-cjs/machines/chunks.js +72 -0
- package/dist-cjs/machines/chunks.js.map +1 -0
- package/dist-cjs/machines/index.js +28 -0
- package/dist-cjs/machines/index.js.map +1 -0
- package/dist-cjs/machines/presence.js +53 -0
- package/dist-cjs/machines/presence.js.map +1 -0
- package/dist-cjs/merge/index.js +25 -0
- package/dist-cjs/merge/index.js.map +1 -0
- package/dist-cjs/merge/merge3.js +191 -0
- package/dist-cjs/merge/merge3.js.map +1 -0
- package/dist-cjs/package.json +1 -0
- package/dist-cjs/records/authority.js +31 -0
- package/dist-cjs/records/authority.js.map +1 -0
- package/dist-cjs/records/codec.js +48 -0
- package/dist-cjs/records/codec.js.map +1 -0
- package/dist-cjs/records/contracts.js +121 -0
- package/dist-cjs/records/contracts.js.map +1 -0
- package/dist-cjs/records/inbox.js +37 -0
- package/dist-cjs/records/inbox.js.map +1 -0
- package/dist-cjs/records/index.js +23 -0
- package/dist-cjs/records/index.js.map +1 -0
- package/dist-cjs/records/outbox.js +48 -0
- package/dist-cjs/records/outbox.js.map +1 -0
- package/dist-cjs/registration/index.js +19 -0
- package/dist-cjs/registration/index.js.map +1 -0
- package/dist-cjs/registration/user-ground.js +183 -0
- package/dist-cjs/registration/user-ground.js.map +1 -0
- package/dist-cjs/transfer/artifacts.js +75 -0
- package/dist-cjs/transfer/artifacts.js.map +1 -0
- package/dist-cjs/transfer/batches.js +44 -0
- package/dist-cjs/transfer/batches.js.map +1 -0
- package/dist-cjs/transfer/download.js +88 -0
- package/dist-cjs/transfer/download.js.map +1 -0
- package/dist-cjs/transfer/index.js +21 -0
- package/dist-cjs/transfer/index.js.map +1 -0
- package/dist-cjs/transfer/parallel.js +35 -0
- package/dist-cjs/transfer/parallel.js.map +1 -0
- package/dist-cjs/transfer/upload.js +161 -0
- package/dist-cjs/transfer/upload.js.map +1 -0
- package/dist-cjs/watching/coverage.js +54 -0
- package/dist-cjs/watching/coverage.js.map +1 -0
- package/dist-cjs/watching/index.js +24 -0
- package/dist-cjs/watching/index.js.map +1 -0
- package/dist-cjs/watching/suspicion.js +105 -0
- package/dist-cjs/watching/suspicion.js.map +1 -0
- package/dist-cjs/workspace/api.js +66 -0
- package/dist-cjs/workspace/api.js.map +1 -0
- package/dist-cjs/workspace/identity.js +32 -0
- package/dist-cjs/workspace/identity.js.map +1 -0
- package/dist-cjs/workspace/index.js +14 -0
- package/dist-cjs/workspace/index.js.map +1 -0
- package/dist-cjs/workspace/memory-store.js +21 -0
- package/dist-cjs/workspace/memory-store.js.map +1 -0
- package/dist-cjs/workspace/registry.js +98 -0
- package/dist-cjs/workspace/registry.js.map +1 -0
- package/dist-cjs/workspace/types.js +3 -0
- package/dist-cjs/workspace/types.js.map +1 -0
- package/package.json +30 -8
- package/dist/contracts/mutation.d.ts +0 -51
- package/dist/contracts/mutation.d.ts.map +0 -1
- package/dist/contracts/mutation.js +0 -55
- package/dist/contracts/mutation.js.map +0 -1
- package/dist/machines/journal.d.ts +0 -63
- package/dist/machines/journal.d.ts.map +0 -1
- package/dist/machines/journal.js +0 -71
- package/dist/machines/journal.js.map +0 -1
- package/dist/machines/ordering.d.ts +0 -53
- package/dist/machines/ordering.d.ts.map +0 -1
- package/dist/machines/ordering.js +0 -87
- package/dist/machines/ordering.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-proposal.js","sourceRoot":"","sources":["../../src/detection/record-proposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A REFUSAL: the boundary understood the request and declined it.
|
|
4
|
+
* Ratified by entity-implementation.md ("A refusal is named where it is
|
|
5
|
+
* raised").
|
|
6
|
+
*
|
|
7
|
+
* Two things can go wrong when a caller asks for something, and they
|
|
8
|
+
* mean opposite things:
|
|
9
|
+
*
|
|
10
|
+
* a refusal the request named ground amalgm will not take — excluded
|
|
11
|
+
* by enrollment policy, already owned by another tree, not
|
|
12
|
+
* there at all. Nothing is broken. The message IS the
|
|
13
|
+
* reason and is meant to be shown to whoever asked.
|
|
14
|
+
* a fault the boundary could not do its job — a torn identity
|
|
15
|
+
* store, an unusable database, a bug. The request was
|
|
16
|
+
* fine; the installation is not.
|
|
17
|
+
*
|
|
18
|
+
* A refusal is NAMED WHERE IT IS RAISED, by the code that decided to
|
|
19
|
+
* refuse. It is never guessed later from an error's wording: matching
|
|
20
|
+
* on message text would quietly reclassify every fault as the caller's
|
|
21
|
+
* mistake the moment a message changed, and "your path is bad" is the
|
|
22
|
+
* worst possible thing to say on the day the identity store tears.
|
|
23
|
+
*
|
|
24
|
+
* Callers that must answer differently — an HTTP status, an exit code —
|
|
25
|
+
* ask `isRefusal`. Everything else stays an ordinary Error and travels
|
|
26
|
+
* to whatever handles faults. The mark is a registry symbol
|
|
27
|
+
* (`Symbol.for`), so a refusal raised by one copy of this module is
|
|
28
|
+
* recognized by every other.
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.refusal = refusal;
|
|
32
|
+
exports.isRefusal = isRefusal;
|
|
33
|
+
const REFUSAL = Symbol.for('amalgm.registration.refusal');
|
|
34
|
+
/** Decline a request, with the reason the caller should be shown. */
|
|
35
|
+
function refusal(message) {
|
|
36
|
+
const error = new Error(message);
|
|
37
|
+
error[REFUSAL] = true;
|
|
38
|
+
return error;
|
|
39
|
+
}
|
|
40
|
+
/** True only for an error this boundary deliberately raised as a refusal. */
|
|
41
|
+
function isRefusal(error) {
|
|
42
|
+
return Boolean(error && error[REFUSAL]);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=refusal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.js","sourceRoot":"","sources":["../../src/detection/refusal.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;AAKH,0BAIC;AAGD,8BAEC;AAZD,MAAM,OAAO,GAAkB,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAEzE,qEAAqE;AACrE,SAAgB,OAAO,CAAC,OAAe;IACrC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAgC,CAAC;IAChE,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,SAAgB,SAAS,CAAC,KAAc;IACtC,OAAO,OAAO,CAAC,KAAK,IAAK,KAAiC,CAAC,OAAO,CAAC,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Repository detection through the existing Card + Checkpoint transport. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.captureRepositoryChange = captureRepositoryChange;
|
|
5
|
+
const repo_states_js_1 = require("../entities/repo-states.js");
|
|
6
|
+
const upload_js_1 = require("../transfer/upload.js");
|
|
7
|
+
const verifyState = (state, sha256Hex) => {
|
|
8
|
+
const cardId = (0, repo_states_js_1.deriveCardId)(state.card, sha256Hex);
|
|
9
|
+
const checkpointId = (0, repo_states_js_1.deriveCheckpointId)(state.checkpoint, sha256Hex);
|
|
10
|
+
const stateId = (0, repo_states_js_1.deriveStateId)(cardId, checkpointId, sha256Hex);
|
|
11
|
+
if (state.cardId !== cardId || state.checkpointId !== checkpointId || state.stateId !== stateId) {
|
|
12
|
+
throw new Error('repository capture IDs do not describe its Card and Checkpoint');
|
|
13
|
+
}
|
|
14
|
+
if (state.pack !== null && sha256Hex(state.pack.bytes) !== state.pack.sha256) {
|
|
15
|
+
throw new Error('repository Git pack does not match its declared hash');
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Verify a fresh full Card + Checkpoint observation and seal one incremental
|
|
20
|
+
* repository transport. Git discovery and pack construction are host effects;
|
|
21
|
+
* this function owns the portable IDs, identity-map delta, binary transport,
|
|
22
|
+
* and exact cargo head.
|
|
23
|
+
*/
|
|
24
|
+
function captureRepositoryChange(input, sha256Hex) {
|
|
25
|
+
verifyState(input.state, sha256Hex);
|
|
26
|
+
if (input.previous
|
|
27
|
+
&& new Set(input.previous.identity.map((entry) => entry.path)).size !== input.previous.identity.length) {
|
|
28
|
+
throw new Error('previous repository identity map has duplicate paths');
|
|
29
|
+
}
|
|
30
|
+
const identity = (0, repo_states_js_1.planRepositoryIdentity)(input.identity, input.previous?.identity ?? null, sha256Hex);
|
|
31
|
+
const currentIdentityHash = (0, repo_states_js_1.repositoryIdentityHash)(input.identity, sha256Hex);
|
|
32
|
+
if (input.previous?.stateId === input.state.stateId
|
|
33
|
+
&& (0, repo_states_js_1.repositoryIdentityHash)(input.previous.identity, sha256Hex) === currentIdentityHash) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const bytes = (0, repo_states_js_1.encodeRepositoryTransport)(input.state, {
|
|
37
|
+
parentTransportVersion: input.previous?.transportVersion ?? null,
|
|
38
|
+
identityHash: identity.identityHash,
|
|
39
|
+
identityDelta: identity.identityDelta,
|
|
40
|
+
});
|
|
41
|
+
const transportVersion = sha256Hex(bytes);
|
|
42
|
+
const artifact = Object.freeze({
|
|
43
|
+
entityId: input.entityId,
|
|
44
|
+
entityType: 'repo.git',
|
|
45
|
+
kind: 'git',
|
|
46
|
+
contentHash: transportVersion,
|
|
47
|
+
});
|
|
48
|
+
const cargo = Object.freeze({
|
|
49
|
+
artifact,
|
|
50
|
+
bytes,
|
|
51
|
+
manifest: (0, upload_js_1.deriveUploadManifest)(artifact, bytes, sha256Hex),
|
|
52
|
+
});
|
|
53
|
+
return Object.freeze({
|
|
54
|
+
replay: Object.freeze({
|
|
55
|
+
kind: 'repo.git',
|
|
56
|
+
stateId: input.state.stateId,
|
|
57
|
+
cardId: input.state.cardId,
|
|
58
|
+
checkpointId: input.state.checkpointId,
|
|
59
|
+
cardChanged: input.previous?.cardId !== input.state.cardId,
|
|
60
|
+
checkpointChanged: input.previous?.checkpointId !== input.state.checkpointId,
|
|
61
|
+
parentTransportVersion: input.previous?.transportVersion ?? null,
|
|
62
|
+
transportVersion,
|
|
63
|
+
}),
|
|
64
|
+
cargo,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/detection/repository.ts"],"names":[],"mappings":";AAAA,6EAA6E;;AAqD7E,0DAkDC;AArGD,+DASoC;AAEpC,qDAA6D;AAsB7D,MAAM,WAAW,GAAG,CAAC,KAAgB,EAAE,SAAoB,EAAQ,EAAE;IACnE,MAAM,MAAM,GAAG,IAAA,6BAAY,EAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAA,mCAAkB,EAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,IAAA,8BAAa,EAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,KAA6B,EAC7B,SAAoB;IAEpB,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,QAAQ;WACb,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzG,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,QAAQ,GAAG,IAAA,uCAAsB,EACrC,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAChC,SAAS,CACV,CAAC;IACF,MAAM,mBAAmB,GAAG,IAAA,uCAAsB,EAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,QAAQ,EAAE,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO;WAC9C,IAAA,uCAAsB,EAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,mBAAmB,EAAE,CAAC;QACxF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,0CAAyB,EAAC,KAAK,CAAC,KAAK,EAAE;QACnD,sBAAsB,EAAE,KAAK,CAAC,QAAQ,EAAE,gBAAgB,IAAI,IAAI;QAChE,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,aAAa,EAAE,QAAQ,CAAC,aAAa;KACtC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,UAAmB;QAC/B,IAAI,EAAE,KAAc;QACpB,WAAW,EAAE,gBAAgB;KAC9B,CAAC,CAAC;IACH,MAAM,KAAK,GAAqB,MAAM,CAAC,MAAM,CAAC;QAC5C,QAAQ;QACR,KAAK;QACL,QAAQ,EAAE,IAAA,gCAAoB,EAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC;KAC3D,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,UAAmB;YACzB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;YAC5B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;YAC1B,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY;YACtC,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM;YAC1D,iBAAiB,EAAE,KAAK,CAAC,QAAQ,EAAE,YAAY,KAAK,KAAK,CAAC,KAAK,CAAC,YAAY;YAC5E,sBAAsB,EAAE,KAAK,CAAC,QAAQ,EAAE,gBAAgB,IAAI,IAAI;YAChE,gBAAgB;SACjB,CAAC;QACF,KAAK;KACN,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Nearest-repository ownership for one detected entity transition. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.nearestRepository = nearestRepository;
|
|
5
|
+
exports.recorderTargets = recorderTargets;
|
|
6
|
+
/** The nearest repo at or above `uuid`; nested repositories win. */
|
|
7
|
+
function nearestRepository(uuid, byUuid) {
|
|
8
|
+
const seen = new Set();
|
|
9
|
+
let cursor = uuid;
|
|
10
|
+
while (cursor !== null) {
|
|
11
|
+
if (seen.has(cursor))
|
|
12
|
+
throw new Error(`registry corrupt: parent cycle at ${cursor}`);
|
|
13
|
+
seen.add(cursor);
|
|
14
|
+
const row = byUuid(cursor);
|
|
15
|
+
if (!row)
|
|
16
|
+
throw new Error(`no entity ${cursor}`);
|
|
17
|
+
if (row.type === 'repo.git')
|
|
18
|
+
return row;
|
|
19
|
+
cursor = row.parentUuid;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Name every recorder whose state a transition can change.
|
|
25
|
+
*
|
|
26
|
+
* Ordinary changes outside repository territory publish on the entity UUID.
|
|
27
|
+
* A change wholly inside one repository publishes only the repository parcel.
|
|
28
|
+
* Crossing a repository boundary also publishes the entity graph transition,
|
|
29
|
+
* plus the source and/or destination repositories whose identity maps and
|
|
30
|
+
* Checkpoints changed.
|
|
31
|
+
*/
|
|
32
|
+
function recorderTargets(transition, byUuid) {
|
|
33
|
+
const { base, result } = transition;
|
|
34
|
+
if (base !== null && base.uuid !== result.uuid) {
|
|
35
|
+
throw new Error('a recorder transition cannot change entity UUID');
|
|
36
|
+
}
|
|
37
|
+
const before = nearestRepository(base?.parentUUID ?? null, byUuid);
|
|
38
|
+
const after = nearestRepository(result.parentUUID, byUuid);
|
|
39
|
+
const add = (targets, target) => {
|
|
40
|
+
if (!targets.some((candidate) => candidate.resourceId === target.resourceId))
|
|
41
|
+
targets.push(target);
|
|
42
|
+
};
|
|
43
|
+
// Every `.git` boundary starts its own repository rail, even when nested.
|
|
44
|
+
// Its enclosing repository changes only when the boundary's graph entry
|
|
45
|
+
// changes; ordinary Card/Checkpoint advancement remains on the inner rail.
|
|
46
|
+
if (base?.type === 'repo.git' || result.type === 'repo.git') {
|
|
47
|
+
const targets = [];
|
|
48
|
+
add(targets, {
|
|
49
|
+
kind: result.type === 'repo.git' ? 'repository' : 'entity',
|
|
50
|
+
resourceId: result.uuid,
|
|
51
|
+
});
|
|
52
|
+
const boundaryChanged = base === null
|
|
53
|
+
|| base.type !== result.type
|
|
54
|
+
|| base.parentUUID !== result.parentUUID
|
|
55
|
+
|| base.name !== result.name
|
|
56
|
+
|| base.status !== result.status;
|
|
57
|
+
if (boundaryChanged) {
|
|
58
|
+
if (before)
|
|
59
|
+
add(targets, { kind: 'repository', resourceId: before.uuid });
|
|
60
|
+
if (after)
|
|
61
|
+
add(targets, { kind: 'repository', resourceId: after.uuid });
|
|
62
|
+
}
|
|
63
|
+
return Object.freeze(targets);
|
|
64
|
+
}
|
|
65
|
+
if (base === null) {
|
|
66
|
+
return Object.freeze(after
|
|
67
|
+
? [{ kind: 'repository', resourceId: after.uuid }]
|
|
68
|
+
: [{ kind: 'entity', resourceId: result.uuid }]);
|
|
69
|
+
}
|
|
70
|
+
if (before?.uuid === after?.uuid) {
|
|
71
|
+
return Object.freeze(before
|
|
72
|
+
? [{ kind: 'repository', resourceId: before.uuid }]
|
|
73
|
+
: [{ kind: 'entity', resourceId: result.uuid }]);
|
|
74
|
+
}
|
|
75
|
+
const targets = [{ kind: 'entity', resourceId: result.uuid }];
|
|
76
|
+
for (const repository of [before, after]) {
|
|
77
|
+
if (repository)
|
|
78
|
+
add(targets, { kind: 'repository', resourceId: repository.uuid });
|
|
79
|
+
}
|
|
80
|
+
return Object.freeze(targets);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=territory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"territory.js","sourceRoot":"","sources":["../../src/detection/territory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The complete portable boundary from Watch into Detect and back.
|
|
4
|
+
*
|
|
5
|
+
* Watch contributes generation-stamped suspicion only. Detect retains that
|
|
6
|
+
* generation until Record has durably accepted every resulting proposal. A
|
|
7
|
+
* discovered directory creates a logical coverage request; the Watch host
|
|
8
|
+
* decides whether its backend needs another native handle.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.detectionBatch = detectionBatch;
|
|
12
|
+
exports.directoryCoverageRequests = directoryCoverageRequests;
|
|
13
|
+
const enrollment_js_1 = require("./enrollment.js");
|
|
14
|
+
const detectionRelativePath = (path) => {
|
|
15
|
+
const raw = String(path);
|
|
16
|
+
if (raw.startsWith('/') || /^[A-Za-z]:[\\/]/.test(raw) || raw.includes('\0')) {
|
|
17
|
+
throw new Error('detection path must be root-relative');
|
|
18
|
+
}
|
|
19
|
+
const normalized = (0, enrollment_js_1.normalizedRelativePath)(raw);
|
|
20
|
+
if (!normalized || normalized.split('/').some((segment) => segment === '.' || segment === '..')) {
|
|
21
|
+
throw new Error('detection path must be root-relative');
|
|
22
|
+
}
|
|
23
|
+
return normalized;
|
|
24
|
+
};
|
|
25
|
+
/** Freeze Watch's snapshot into Detection's input vocabulary. */
|
|
26
|
+
function detectionBatch(rootId, snapshot) {
|
|
27
|
+
if (!rootId)
|
|
28
|
+
throw new Error('detection batch root id is required');
|
|
29
|
+
if (!Number.isSafeInteger(snapshot.generation) || snapshot.generation < 0) {
|
|
30
|
+
throw new Error('detection batch generation is invalid');
|
|
31
|
+
}
|
|
32
|
+
const suspects = snapshot.paths === null
|
|
33
|
+
? null
|
|
34
|
+
: Object.freeze([...new Set(snapshot.paths.map(detectionRelativePath))]);
|
|
35
|
+
return Object.freeze({ rootId, generation: snapshot.generation, suspects });
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Tell Watch that newly enrolled directory ground now exists. This is emitted
|
|
39
|
+
* on every platform; only the Watch backend knows whether coverage expansion
|
|
40
|
+
* means another Linux inotify handle or merely a routing-table update.
|
|
41
|
+
*/
|
|
42
|
+
function directoryCoverageRequests(batch, createdDirectories) {
|
|
43
|
+
const paths = [...new Set(createdDirectories.map(detectionRelativePath))]
|
|
44
|
+
.sort();
|
|
45
|
+
return Object.freeze(paths.map((relPath) => Object.freeze({
|
|
46
|
+
kind: 'directory-discovered',
|
|
47
|
+
rootId: batch.rootId,
|
|
48
|
+
relPath,
|
|
49
|
+
})));
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=watch-boundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-boundary.js","sourceRoot":"","sources":["../../src/detection/watch-boundary.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AA+BH,wCAYC;AAOD,8DAWC;AA1DD,mDAAyD;AAEzD,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAU,EAAE;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,UAAU,GAAG,IAAA,sCAAsB,EAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAeF,iEAAiE;AACjE,SAAgB,cAAc,CAC5B,MAAc,EACd,QAA2B;IAE3B,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,KAAK,IAAI;QACtC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,SAAgB,yBAAyB,CACvC,KAAqC,EACrC,kBAAqC;IAErC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;SACtE,IAAI,EAAE,CAAC;IACV,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QACxD,IAAI,EAAE,sBAA+B;QACrC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO;KACR,CAAC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Portable byte codecs shared by the entity layer — UTF-8, standard base64
|
|
4
|
+
* (padded, as Node's `Buffer#toString('base64')` emits it), base64url, and
|
|
5
|
+
* hex. They exist so cloud.ts and repo-states.ts can produce byte-for-byte
|
|
6
|
+
* the same wire text the engine produces with Buffer, without src/
|
|
7
|
+
* importing any Node module (PURPOSE.md axiom 2).
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.bytesToBase64Url = exports.bytesToBase64 = exports.utf8Decode = exports.utf8Encode = void 0;
|
|
11
|
+
exports.base64ToBytes = base64ToBytes;
|
|
12
|
+
exports.hexToBytes = hexToBytes;
|
|
13
|
+
const BASE64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
14
|
+
const BASE64_URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
|
|
15
|
+
const utf8Encode = (text) => new TextEncoder().encode(text);
|
|
16
|
+
exports.utf8Encode = utf8Encode;
|
|
17
|
+
const utf8Decode = (bytes) => new TextDecoder().decode(bytes);
|
|
18
|
+
exports.utf8Decode = utf8Decode;
|
|
19
|
+
function encode(bytes, alphabet, pad) {
|
|
20
|
+
// Write the ASCII result once. Building base64 through string appends makes
|
|
21
|
+
// V8 retain repository-sized ropes whose intermediate nodes can dwarf the
|
|
22
|
+
// parcel and exhaust the default heap.
|
|
23
|
+
const paddedLength = Math.ceil(bytes.length / 3) * 4;
|
|
24
|
+
const outputLength = pad ? paddedLength : Math.ceil(bytes.length * 4 / 3);
|
|
25
|
+
const out = new Uint8Array(outputLength);
|
|
26
|
+
let offset = 0;
|
|
27
|
+
for (let i = 0; i < bytes.length; i += 3) {
|
|
28
|
+
const a = bytes[i];
|
|
29
|
+
const b = bytes[i + 1];
|
|
30
|
+
const c = bytes[i + 2];
|
|
31
|
+
out[offset++] = alphabet.charCodeAt(a >> 2);
|
|
32
|
+
out[offset++] = alphabet.charCodeAt(((a & 0x03) << 4) | ((b ?? 0) >> 4));
|
|
33
|
+
if (b === undefined) {
|
|
34
|
+
if (pad) {
|
|
35
|
+
out[offset++] = 61;
|
|
36
|
+
out[offset++] = 61;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
out[offset++] = alphabet.charCodeAt(((b & 0x0f) << 2) | ((c ?? 0) >> 6));
|
|
41
|
+
if (c === undefined) {
|
|
42
|
+
if (pad)
|
|
43
|
+
out[offset++] = 61;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
out[offset++] = alphabet.charCodeAt(c & 0x3f);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return new TextDecoder().decode(out);
|
|
51
|
+
}
|
|
52
|
+
/** Bytes → standard base64 with padding (Buffer's 'base64' spelling). */
|
|
53
|
+
const bytesToBase64 = (bytes) => encode(bytes, BASE64, true);
|
|
54
|
+
exports.bytesToBase64 = bytesToBase64;
|
|
55
|
+
/** Bytes → unpadded base64url (Buffer's 'base64url' spelling). */
|
|
56
|
+
const bytesToBase64Url = (bytes) => encode(bytes, BASE64_URL, false);
|
|
57
|
+
exports.bytesToBase64Url = bytesToBase64Url;
|
|
58
|
+
/** Standard base64 (padded or unpadded) → bytes. */
|
|
59
|
+
function base64ToBytes(text) {
|
|
60
|
+
const padding = text.indexOf('=');
|
|
61
|
+
const length = padding === -1 ? text.length : padding;
|
|
62
|
+
const out = new Uint8Array(Math.floor(length * 6 / 8));
|
|
63
|
+
let offset = 0;
|
|
64
|
+
let buffer = 0;
|
|
65
|
+
let bits = 0;
|
|
66
|
+
for (let index = 0; index < length; index += 1) {
|
|
67
|
+
const char = text[index];
|
|
68
|
+
const value = BASE64.indexOf(char);
|
|
69
|
+
if (value === -1) {
|
|
70
|
+
throw new Error(`expected standard base64 like "aGVsbG8=" — found ${JSON.stringify(char)}`);
|
|
71
|
+
}
|
|
72
|
+
buffer = (buffer << 6) | value;
|
|
73
|
+
bits += 6;
|
|
74
|
+
if (bits >= 8) {
|
|
75
|
+
bits -= 8;
|
|
76
|
+
out[offset++] = (buffer >> bits) & 0xff;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
/** Lowercase/uppercase hex → bytes. */
|
|
82
|
+
function hexToBytes(hex) {
|
|
83
|
+
if (hex.length % 2 !== 0 || /[^0-9a-f]/i.test(hex)) {
|
|
84
|
+
throw new Error(`expected even-length hex like "a1b2" — got ${JSON.stringify(hex)}`);
|
|
85
|
+
}
|
|
86
|
+
const out = new Uint8Array(hex.length / 2);
|
|
87
|
+
for (let i = 0; i < out.length; i += 1) {
|
|
88
|
+
out[i] = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=bytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/entities/bytes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The entity-cloud boundary's pure half (engine
|
|
4
|
+
* registration/entity-cloud.js): the snapshot codec, record assertions,
|
|
5
|
+
* equality, the private resource id, and the repo travel law — only
|
|
6
|
+
* logical graph facts, never a path, inode, watcher, or database row.
|
|
7
|
+
*
|
|
8
|
+
* Wire parity is the contract here: `stableJson`, record key order, and
|
|
9
|
+
* snapshot sorting reproduce the engine's bytes exactly, so a snapshot
|
|
10
|
+
* packed on either side hashes and compares identically.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.sameRecords = exports.sameRecord = exports.stableJson = exports.ENTITY_CLOUD_SCHEMA_VERSION = exports.ENTITY_CLOUD_CONTRACT = void 0;
|
|
14
|
+
exports.privateEntityResourceId = privateEntityResourceId;
|
|
15
|
+
exports.recordsAreSubset = recordsAreSubset;
|
|
16
|
+
exports.assertRecord = assertRecord;
|
|
17
|
+
exports.enclosedByRepositoryAncestor = enclosedByRepositoryAncestor;
|
|
18
|
+
exports.travelingRecords = travelingRecords;
|
|
19
|
+
exports.snapshotFromRecords = snapshotFromRecords;
|
|
20
|
+
exports.parseSnapshot = parseSnapshot;
|
|
21
|
+
const types_js_1 = require("./types.js");
|
|
22
|
+
const bytes_js_1 = require("./bytes.js");
|
|
23
|
+
/** `@1` could project arbitrary pre-cloud registrations. `@2` omitted the
|
|
24
|
+
* declared built-in tool entities, so its toolbox root could not prove the
|
|
25
|
+
* snapshot membership it named. A resource contract names immutable
|
|
26
|
+
* authority semantics: both remain quarantined rather than reinterpreted
|
|
27
|
+
* or overwritten. `@3` begins with the complete verified user home; later
|
|
28
|
+
* user ground enters exclusively through `amalgm register`. */
|
|
29
|
+
exports.ENTITY_CLOUD_CONTRACT = 'amalgm-entity-registry@3';
|
|
30
|
+
exports.ENTITY_CLOUD_SCHEMA_VERSION = 1;
|
|
31
|
+
/** A 64-hex content head (a SHA-256 naming immutable bytes). */
|
|
32
|
+
const CONTENT_HEAD = /^[0-9a-f]{64}$/;
|
|
33
|
+
/** The deterministic private entity-resource id for a user under the
|
|
34
|
+
* current contract: `pvr_` + the first 32 base64url characters of
|
|
35
|
+
* sha256("private-user:<userId>:<contract>"). */
|
|
36
|
+
function privateEntityResourceId(userId, sha256Hex) {
|
|
37
|
+
return `pvr_${(0, bytes_js_1.bytesToBase64Url)((0, bytes_js_1.hexToBytes)(sha256Hex(`private-user:${userId}:${exports.ENTITY_CLOUD_CONTRACT}`)))
|
|
38
|
+
.slice(0, 32)}`;
|
|
39
|
+
}
|
|
40
|
+
/** The one JSON spelling every snapshot comparison and checksum uses. */
|
|
41
|
+
const stableJson = (value) => JSON.stringify(value);
|
|
42
|
+
exports.stableJson = stableJson;
|
|
43
|
+
const sameRecord = (left, right) => (0, exports.stableJson)(left) === (0, exports.stableJson)(right);
|
|
44
|
+
exports.sameRecord = sameRecord;
|
|
45
|
+
/** Two record lists describe the same graph (normalized, sorted, compared whole). */
|
|
46
|
+
const sameRecords = (left, right) => (0, exports.sameRecord)(snapshotFromRecords(left), snapshotFromRecords(right));
|
|
47
|
+
exports.sameRecords = sameRecords;
|
|
48
|
+
/** Every record in `records` appears byte-identically in `expected`. */
|
|
49
|
+
function recordsAreSubset(records, expected) {
|
|
50
|
+
const expectedByUuid = new Map(snapshotFromRecords(expected).records.map((record) => [record.uuid, record]));
|
|
51
|
+
return snapshotFromRecords(records).records
|
|
52
|
+
.every((record) => (0, exports.sameRecord)(record, expectedByUuid.get(record.uuid)));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Validate one snapshot record and normalize it (UUIDs lowercased,
|
|
56
|
+
* transportVersion defaulted to null). Refusals: an invalid shape; a
|
|
57
|
+
* parentless record whose type no tree root wears; a transport head on
|
|
58
|
+
* anything but a repository.
|
|
59
|
+
*/
|
|
60
|
+
function assertRecord(value) {
|
|
61
|
+
const record = value;
|
|
62
|
+
if (!record || typeof record !== 'object'
|
|
63
|
+
|| typeof record.uuid !== 'string' || !types_js_1.UUID_PATTERN.test(record.uuid)
|
|
64
|
+
|| typeof record.type !== 'string' || !types_js_1.TYPES.has(record.type)
|
|
65
|
+
|| (record.parentUUID !== null && (typeof record.parentUUID !== 'string' || !types_js_1.UUID_PATTERN.test(record.parentUUID)))
|
|
66
|
+
|| typeof record.name !== 'string' || !record.name || record.name.includes('/') || record.name.includes('\0')
|
|
67
|
+
|| !['active', 'trashed', 'deleted'].includes(record.status)
|
|
68
|
+
|| typeof record.version !== 'string' || !/^[0-9a-f]{64}$/.test(record.version)
|
|
69
|
+
|| (record.payloadVersion !== null && typeof record.payloadVersion !== 'string')
|
|
70
|
+
|| (record.transportVersion !== undefined && record.transportVersion !== null
|
|
71
|
+
&& (typeof record.transportVersion !== 'string' || !CONTENT_HEAD.test(record.transportVersion)))) {
|
|
72
|
+
throw new Error('cloud entity snapshot has an invalid record');
|
|
73
|
+
}
|
|
74
|
+
if (record.parentUUID === null && !types_js_1.ROOT_TYPES.has(record.type)) {
|
|
75
|
+
throw new Error(`cloud entity ${record.uuid} is not a valid tree root`);
|
|
76
|
+
}
|
|
77
|
+
const transportVersion = (record.transportVersion ?? null);
|
|
78
|
+
if (record.type !== 'repo.git' && transportVersion !== null) {
|
|
79
|
+
throw new Error('only repository entities may declare a transport head');
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
uuid: record.uuid.toLowerCase(),
|
|
83
|
+
type: record.type,
|
|
84
|
+
parentUUID: record.parentUUID === null ? null : record.parentUUID.toLowerCase(),
|
|
85
|
+
name: record.name,
|
|
86
|
+
status: record.status,
|
|
87
|
+
version: record.version,
|
|
88
|
+
payloadVersion: record.payloadVersion,
|
|
89
|
+
transportVersion,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The repo travel law: a record with a `repo.git` PROPER ancestor never
|
|
94
|
+
* travels to the cloud on its own. The repository is the sync boundary —
|
|
95
|
+
* its one Card + Checkpoint state carries the worktree's bytes AND its
|
|
96
|
+
* children's permanent UUIDs (the transport identity map), so a register
|
|
97
|
+
* or a rebase is one parcel, never one postcard per file. Repository
|
|
98
|
+
* boundaries are retained separately by `travelingRecords`: every `.git`
|
|
99
|
+
* starts a new parcel even when another repository encloses it.
|
|
100
|
+
* Missing ancestry keeps the record traveling rather than risking a
|
|
101
|
+
* silently unsynced entity.
|
|
102
|
+
*/
|
|
103
|
+
function enclosedByRepositoryAncestor(record, lookup) {
|
|
104
|
+
const seen = new Set([record.uuid]);
|
|
105
|
+
let parentUUID = record.parentUUID;
|
|
106
|
+
while (parentUUID !== null && parentUUID !== undefined) {
|
|
107
|
+
if (seen.has(parentUUID))
|
|
108
|
+
throw new Error(`cloud entity ${record.uuid} has a cyclic parent chain`);
|
|
109
|
+
seen.add(parentUUID);
|
|
110
|
+
const parent = lookup(parentUUID);
|
|
111
|
+
if (!parent)
|
|
112
|
+
return false;
|
|
113
|
+
if (parent.type === 'repo.git')
|
|
114
|
+
return true;
|
|
115
|
+
parentUUID = parent.parentUUID;
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
/** Project a complete local entity graph onto the cloud registry. Ordinary
|
|
120
|
+
* repository children keep their local SQLite identities inside the nearest
|
|
121
|
+
* repository parcel. Every nested repository and the folder spine required to
|
|
122
|
+
* reach it remain graph records, so each `.git` owns and exposes exactly one
|
|
123
|
+
* independent transport without publishing per-file postcards. */
|
|
124
|
+
function travelingRecords(records) {
|
|
125
|
+
const snapshot = snapshotFromRecords(records);
|
|
126
|
+
const byUuid = new Map(snapshot.records.map((record) => [record.uuid, record]));
|
|
127
|
+
const traveling = new Set(snapshot.records
|
|
128
|
+
.filter((record) => !enclosedByRepositoryAncestor(record, (uuid) => byUuid.get(uuid)))
|
|
129
|
+
.map((record) => record.uuid));
|
|
130
|
+
for (const repository of snapshot.records.filter((record) => record.type === 'repo.git')) {
|
|
131
|
+
let cursor = repository;
|
|
132
|
+
while (cursor) {
|
|
133
|
+
traveling.add(cursor.uuid);
|
|
134
|
+
if (cursor.parentUUID === null)
|
|
135
|
+
break;
|
|
136
|
+
cursor = byUuid.get(cursor.parentUUID);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return snapshot.records.filter((record) => traveling.has(record.uuid));
|
|
140
|
+
}
|
|
141
|
+
/** Normalize records into the one canonical snapshot: asserted, sorted by
|
|
142
|
+
* uuid, duplicates refused. */
|
|
143
|
+
function snapshotFromRecords(records) {
|
|
144
|
+
const normalized = records.map(assertRecord)
|
|
145
|
+
.sort((left, right) => (left.uuid < right.uuid ? -1 : left.uuid > right.uuid ? 1 : 0));
|
|
146
|
+
if (new Set(normalized.map((record) => record.uuid)).size !== normalized.length) {
|
|
147
|
+
throw new Error('cloud entity snapshot has duplicate UUIDs');
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
schemaVersion: exports.ENTITY_CLOUD_SCHEMA_VERSION,
|
|
151
|
+
kind: 'amalgm-entity-registry',
|
|
152
|
+
records: normalized,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/** Parse snapshot bytes (or their UTF-8 text) back into the canonical form. */
|
|
156
|
+
function parseSnapshot(bytes) {
|
|
157
|
+
let snapshot;
|
|
158
|
+
try {
|
|
159
|
+
snapshot = JSON.parse(typeof bytes === 'string' ? bytes : (0, bytes_js_1.utf8Decode)(bytes));
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
throw new Error('cloud entity snapshot is not JSON');
|
|
163
|
+
}
|
|
164
|
+
if (snapshot?.schemaVersion !== exports.ENTITY_CLOUD_SCHEMA_VERSION
|
|
165
|
+
|| snapshot?.kind !== 'amalgm-entity-registry'
|
|
166
|
+
|| !Array.isArray(snapshot.records)) {
|
|
167
|
+
throw new Error('cloud entity snapshot has an unsupported shape');
|
|
168
|
+
}
|
|
169
|
+
return snapshotFromRecords(snapshot.records);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=cloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/entities/cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* entities/ — the Register/Record pure cores: the entity model's laws
|
|
4
|
+
* (engine docs/entity-model.md — two axioms, the six-field record) as
|
|
5
|
+
* portable functions. Store reads arrive through `EntityReadPort`, hashing
|
|
6
|
+
* through `Sha256Hex`; nothing here touches SQLite, node:crypto, or a
|
|
7
|
+
* filesystem. Hash formulas and id derivations are byte-for-byte the
|
|
8
|
+
* engine's, so records interoperate across the cloud boundary.
|
|
9
|
+
*
|
|
10
|
+
* - types.ts the alphabet, the six fields, UUID shape, injected ports
|
|
11
|
+
* - bytes.ts portable byte codecs (utf8, base64, base64url, hex)
|
|
12
|
+
* - rules.ts version formula, naming, lifecycle inheritance,
|
|
13
|
+
* slot/container laws, record builders
|
|
14
|
+
* - moves.ts batch move validation: permutations, acyclicity, adoption
|
|
15
|
+
* - cloud.ts entity-cloud snapshot codec + the repo travel law
|
|
16
|
+
* - repo-states.ts Card + Checkpoint state codec and id derivations
|
|
17
|
+
*/
|
|
18
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
21
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
22
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
23
|
+
}
|
|
24
|
+
Object.defineProperty(o, k2, desc);
|
|
25
|
+
}) : (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
o[k2] = m[k];
|
|
28
|
+
}));
|
|
29
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
30
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
31
|
+
};
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
__exportStar(require("./types.js"), exports);
|
|
34
|
+
__exportStar(require("./bytes.js"), exports);
|
|
35
|
+
__exportStar(require("./rules.js"), exports);
|
|
36
|
+
__exportStar(require("./moves.js"), exports);
|
|
37
|
+
__exportStar(require("./cloud.js"), exports);
|
|
38
|
+
__exportStar(require("./repo-states.js"), exports);
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;AAEH,6CAA2B;AAC3B,6CAA2B;AAC3B,6CAA2B;AAC3B,6CAA2B;AAC3B,6CAA2B;AAC3B,mDAAiC"}
|