instar 1.3.650 → 1.3.652
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/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +142 -2
- package/dist/commands/server.js.map +1 -1
- package/dist/core/HttpLeaseTransport.d.ts +18 -0
- package/dist/core/HttpLeaseTransport.d.ts.map +1 -1
- package/dist/core/HttpLeaseTransport.js +16 -0
- package/dist/core/HttpLeaseTransport.js.map +1 -1
- package/dist/core/MeshEndpointValidator.d.ts +57 -0
- package/dist/core/MeshEndpointValidator.d.ts.map +1 -0
- package/dist/core/MeshEndpointValidator.js +110 -0
- package/dist/core/MeshEndpointValidator.js.map +1 -0
- package/dist/core/PeerEndpointRecorder.d.ts +49 -0
- package/dist/core/PeerEndpointRecorder.d.ts.map +1 -0
- package/dist/core/PeerEndpointRecorder.js +69 -0
- package/dist/core/PeerEndpointRecorder.js.map +1 -0
- package/dist/core/ReapGuard.d.ts +13 -1
- package/dist/core/ReapGuard.d.ts.map +1 -1
- package/dist/core/ReapGuard.js +86 -30
- package/dist/core/ReapGuard.js.map +1 -1
- package/dist/core/SessionManager.d.ts +11 -0
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +30 -4
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +6 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/gapBCommitmentEvidence.d.ts +9 -0
- package/dist/core/gapBCommitmentEvidence.d.ts.map +1 -1
- package/dist/core/gapBCommitmentEvidence.js +20 -0
- package/dist/core/gapBCommitmentEvidence.js.map +1 -1
- package/dist/core/types.d.ts +11 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/SessionReaper.d.ts +118 -7
- package/dist/monitoring/SessionReaper.d.ts.map +1 -1
- package/dist/monitoring/SessionReaper.js +302 -101
- package/dist/monitoring/SessionReaper.js.map +1 -1
- package/dist/monitoring/closeoutLivenessSnapshot.d.ts +143 -0
- package/dist/monitoring/closeoutLivenessSnapshot.d.ts.map +1 -0
- package/dist/monitoring/closeoutLivenessSnapshot.js +207 -0
- package/dist/monitoring/closeoutLivenessSnapshot.js.map +1 -0
- package/dist/server/AgentServer.d.ts +11 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +2 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/machineRoutes.d.ts +13 -0
- package/dist/server/machineRoutes.d.ts.map +1 -1
- package/dist/server/machineRoutes.js +18 -2
- package/dist/server/machineRoutes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +5 -5
- package/upgrades/1.3.651.md +25 -0
- package/upgrades/1.3.652.md +18 -0
- package/upgrades/side-effects/mesh-endpoint-http-propagation.md +51 -0
- package/upgrades/side-effects/post-transfer-closeout-correctness.md +43 -0
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* logic is unit-testable without a network.
|
|
18
18
|
*/
|
|
19
19
|
import type { PeerEndpointResolver } from './PeerEndpointResolver.js';
|
|
20
|
+
import type { PeerEndpointRecorder } from './PeerEndpointRecorder.js';
|
|
20
21
|
import type { LeaseTransport } from './LeaseCoordinator.js';
|
|
21
22
|
import type { LeaseRecord, MeshEndpoint } from './types.js';
|
|
22
23
|
export interface LeasePeer {
|
|
@@ -80,6 +81,23 @@ export interface HttpLeaseTransportDeps {
|
|
|
80
81
|
meshTransportEnabled?: () => boolean;
|
|
81
82
|
/** Hedge delay before firing the remaining ropes in parallel. Default 1500ms. */
|
|
82
83
|
hedgeDelayMs?: number;
|
|
84
|
+
/**
|
|
85
|
+
* mesh-endpoint-http-propagation — this machine's OWN validated self-endpoints,
|
|
86
|
+
* carried INSIDE the signed lease RPC body (broadcast + pull request bodies, and
|
|
87
|
+
* the pull RESPONSE the holder serves) so a git-less peer learns our fast ropes
|
|
88
|
+
* over the lease channel instead of via the inert git registry-sync path. Absent
|
|
89
|
+
* (or returns undefined/[]) ⇒ the field is simply omitted (un-upgraded behavior).
|
|
90
|
+
*/
|
|
91
|
+
getSelfEndpoints?: () => MeshEndpoint[] | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* mesh-endpoint-http-propagation — the chokepoint that records a peer's advertised
|
|
94
|
+
* endpoints into THIS machine's registry. Used on the pull RESPONSE path: after a
|
|
95
|
+
* CONFIRMED pull (responder identity cryptographically verified by interpretResponse),
|
|
96
|
+
* the holder's endpoints from the response body are recorded against the dialed
|
|
97
|
+
* `peer.machineId` (the verified responder). Absent ⇒ pull-response recording is a
|
|
98
|
+
* no-op (the receiver routes still record request-direction endpoints).
|
|
99
|
+
*/
|
|
100
|
+
peerEndpointRecorder?: PeerEndpointRecorder;
|
|
83
101
|
}
|
|
84
102
|
export declare class HttpLeaseTransport implements LeaseTransport {
|
|
85
103
|
private readonly d;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpLeaseTransport.d.ts","sourceRoot":"","sources":["../../src/core/HttpLeaseTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAoB,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,SAAS,EAAE,CAAC;IACzB,kFAAkF;IAClF,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,oHAAoH;IACpH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"HttpLeaseTransport.d.ts","sourceRoot":"","sources":["../../src/core/HttpLeaseTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAoB,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,SAAS,EAAE,CAAC;IACzB,kFAAkF;IAClF,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,oHAAoH;IACpH,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IACrC,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,YAAY,EAAE,GAAG,SAAS,CAAC;IACpD;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAyB;IAC3C,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEjC,IAAI,EAAE,sBAAsB;IAOxC,uFAAuF;IACvF,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,GAAG;IAIX;;;;OAIG;IACG,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAerD,OAAO,CAAC,MAAM;IAKd;;;;;;;OAOG;YACW,QAAQ;IAmDtB,gFAAgF;YAClE,UAAU;IA+BxB,oEAAoE;IACpE,OAAO,CAAC,iBAAiB;IAsCzB;;;;OAIG;YACW,KAAK;IAsDnB,QAAQ,IAAI;QAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAIpF,WAAW,IAAI,OAAO;IAStB;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAetD;;;;;;;;;;;;OAYG;IACG,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAa5D;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAKpC"}
|
|
@@ -84,6 +84,14 @@ export class HttpLeaseTransport {
|
|
|
84
84
|
*/
|
|
85
85
|
async dialPeer(peer, path, bodyBase, sentEpoch) {
|
|
86
86
|
const fetchImpl = this.d.fetchImpl ?? fetch;
|
|
87
|
+
// mesh-endpoint-http-propagation — carry our own validated self-endpoints inside
|
|
88
|
+
// the SIGNED body (covered by signRequest's body hash). Omit the field entirely
|
|
89
|
+
// when we have none, so an un-upgraded peer sees byte-for-byte today's body.
|
|
90
|
+
const selfEndpoints = this.d.getSelfEndpoints?.();
|
|
91
|
+
const withSelf = Array.isArray(selfEndpoints) && selfEndpoints.length > 0
|
|
92
|
+
? { ...bodyBase, endpoints: selfEndpoints }
|
|
93
|
+
: bodyBase;
|
|
94
|
+
bodyBase = withSelf;
|
|
87
95
|
if (!this.meshOn()) {
|
|
88
96
|
return this.legacyDial(peer, path, bodyBase, fetchImpl);
|
|
89
97
|
}
|
|
@@ -157,6 +165,14 @@ export class HttpLeaseTransport {
|
|
|
157
165
|
if (!ackCapable)
|
|
158
166
|
return { confirmed: true, lease: folded }; // legacy 2xx
|
|
159
167
|
const idOk = verifyLeaseAckIdentity(data?.ack, data?.sig, peer.machineId, sentReqNonce, peer.publicKeyPem);
|
|
168
|
+
// mesh-endpoint-http-propagation (pull RESPONSE, the live-bug fix): record the
|
|
169
|
+
// HOLDER's advertised endpoints ONLY when the responder identity is verified
|
|
170
|
+
// (idOk). Bound to the DIALED `peer.machineId` — never a self-asserted body
|
|
171
|
+
// field — so a compromised responder can't inject a third machine's ropes. The
|
|
172
|
+
// recorder is itself gated (meshTransport), validating, and idempotent.
|
|
173
|
+
if (idOk && this.d.peerEndpointRecorder) {
|
|
174
|
+
this.d.peerEndpointRecorder.record(peer.machineId, data?.endpoints);
|
|
175
|
+
}
|
|
160
176
|
return { confirmed: idOk, lease: idOk ? folded : null };
|
|
161
177
|
}
|
|
162
178
|
// /api/lease (broadcast) — epoch-equality confirmation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpLeaseTransport.js","sourceRoot":"","sources":["../../src/core/HttpLeaseTransport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HttpLeaseTransport.js","sourceRoot":"","sources":["../../src/core/HttpLeaseTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MeshEndpointValidator — shared ingest validation for advertised mesh endpoints
|
|
3
|
+
* (mesh-endpoint-http-propagation, defense-in-depth, NOT authority).
|
|
4
|
+
*
|
|
5
|
+
* When a machine receives a peer's advertised endpoint set inside the signed lease
|
|
6
|
+
* RPC body, this validates the set BEFORE it is recorded into the local registry,
|
|
7
|
+
* so the registry can never be poisoned by a malformed/hostile-but-authenticated
|
|
8
|
+
* advertisement. Ingest validation gates REGISTRY INTEGRITY (no garbage stored); it
|
|
9
|
+
* is NOT the trust authority — `PeerEndpointResolver` re-validates the SAME per-kind
|
|
10
|
+
* host rules at dial time (the final line), and its health map decides whether an
|
|
11
|
+
* endpoint is actually reachable/trusted. Both validate via the SAME pure helpers
|
|
12
|
+
* (the per-kind host functions exported from `PeerEndpointResolver`) so ingest and
|
|
13
|
+
* resolve can never diverge: ingest is the first line (no poisoning), resolve is the
|
|
14
|
+
* final line (no bypass). Signal vs. Authority (docs/signal-vs-authority.md).
|
|
15
|
+
*
|
|
16
|
+
* Spec: docs/specs/mesh-endpoint-http-propagation.md (Receiver §).
|
|
17
|
+
*/
|
|
18
|
+
import type { MeshEndpoint } from './types.js';
|
|
19
|
+
/** A whole batch larger than this is treated as malformed and rejected outright. */
|
|
20
|
+
export declare const MAX_ENDPOINTS_BATCH: number;
|
|
21
|
+
/** Drop any single endpoint whose url exceeds this length (defends the registry + parser). */
|
|
22
|
+
export declare const MAX_ENDPOINT_URL_LEN = 2048;
|
|
23
|
+
/**
|
|
24
|
+
* Pure per-element shape + per-kind host validation — the NON-config-gated subset
|
|
25
|
+
* shared with `PeerEndpointResolver.resolve()` (the resolver additionally applies its
|
|
26
|
+
* own `tailscaleEnabled` + LAN-subnet gates, which are dial-time policy, not ingest
|
|
27
|
+
* integrity). Rejects: wrong shape, unknown kind, missing/oversized url, unparseable
|
|
28
|
+
* or forbidden host (loopback/link-local/metadata), a tailscale rope not in
|
|
29
|
+
* 100.64/10, a lan rope not in RFC-1918, a cloudflare rope that is not public https.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isValidMeshEndpointShape(e: unknown): e is MeshEndpoint;
|
|
32
|
+
/**
|
|
33
|
+
* Validate an UNTRUSTED advertised endpoint set into a clean, capped `MeshEndpoint[]`.
|
|
34
|
+
*
|
|
35
|
+
* Order (spec Receiver §3): (a) require an array; reject the whole batch as malformed
|
|
36
|
+
* if `length > MAX_ENDPOINTS_BATCH`, else clamp the working slice to `MAX_ENDPOINTS+1`
|
|
37
|
+
* BEFORE the per-element loop (bounds the O(N) walk); (b) drop each element that fails
|
|
38
|
+
* shape/url-length/per-kind-host validation (malformed ELEMENTS are dropped, not the
|
|
39
|
+
* whole batch); (c) cap the kept set to `MAX_ENDPOINTS`. Fail-closed: a non-array or a
|
|
40
|
+
* fully-invalid set returns `[]` (the caller treats `[]` as absence → a no-op, NEVER a
|
|
41
|
+
* wipe of the peer's prior ropes).
|
|
42
|
+
*/
|
|
43
|
+
export declare function validateMeshEndpoints(input: unknown): MeshEndpoint[];
|
|
44
|
+
/**
|
|
45
|
+
* Canonicalize an endpoint url for idempotent comparison: lower-case host, strip a
|
|
46
|
+
* trailing slash, drop a redundant default port. Prevents a cosmetically-different but
|
|
47
|
+
* semantically-equal advertisement (`…:4042` vs `…:4042/`, `HOST` vs `host`) from
|
|
48
|
+
* defeating the unchanged-set check and churning the registry. Unparseable input is
|
|
49
|
+
* returned trimmed-lowercased (best-effort; it would have failed validation anyway).
|
|
50
|
+
*/
|
|
51
|
+
export declare function normalizeEndpointUrl(url: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* Order-independent value equality of two endpoint sets, normalizing each url first —
|
|
54
|
+
* the idempotency comparator for the receiver (skip the registry write when unchanged).
|
|
55
|
+
*/
|
|
56
|
+
export declare function meshEndpointsEqual(a: MeshEndpoint[] | undefined, b: MeshEndpoint[] | undefined): boolean;
|
|
57
|
+
//# sourceMappingURL=MeshEndpointValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeshEndpointValidator.d.ts","sourceRoot":"","sources":["../../src/core/MeshEndpointValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,QAAoB,CAAC;AACrD,8FAA8F;AAC9F,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAIzC;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,YAAY,CAWtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,EAAE,CAUpE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYxD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,EAC7B,CAAC,EAAE,YAAY,EAAE,GAAG,SAAS,GAC5B,OAAO,CAOT"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MeshEndpointValidator — shared ingest validation for advertised mesh endpoints
|
|
3
|
+
* (mesh-endpoint-http-propagation, defense-in-depth, NOT authority).
|
|
4
|
+
*
|
|
5
|
+
* When a machine receives a peer's advertised endpoint set inside the signed lease
|
|
6
|
+
* RPC body, this validates the set BEFORE it is recorded into the local registry,
|
|
7
|
+
* so the registry can never be poisoned by a malformed/hostile-but-authenticated
|
|
8
|
+
* advertisement. Ingest validation gates REGISTRY INTEGRITY (no garbage stored); it
|
|
9
|
+
* is NOT the trust authority — `PeerEndpointResolver` re-validates the SAME per-kind
|
|
10
|
+
* host rules at dial time (the final line), and its health map decides whether an
|
|
11
|
+
* endpoint is actually reachable/trusted. Both validate via the SAME pure helpers
|
|
12
|
+
* (the per-kind host functions exported from `PeerEndpointResolver`) so ingest and
|
|
13
|
+
* resolve can never diverge: ingest is the first line (no poisoning), resolve is the
|
|
14
|
+
* final line (no bypass). Signal vs. Authority (docs/signal-vs-authority.md).
|
|
15
|
+
*
|
|
16
|
+
* Spec: docs/specs/mesh-endpoint-http-propagation.md (Receiver §).
|
|
17
|
+
*/
|
|
18
|
+
import { MAX_ENDPOINTS, hostOf, isForbiddenHost, isTailscaleCgnat, isRfc1918, isPublicHttps, } from './PeerEndpointResolver.js';
|
|
19
|
+
/** A whole batch larger than this is treated as malformed and rejected outright. */
|
|
20
|
+
export const MAX_ENDPOINTS_BATCH = MAX_ENDPOINTS * 2;
|
|
21
|
+
/** Drop any single endpoint whose url exceeds this length (defends the registry + parser). */
|
|
22
|
+
export const MAX_ENDPOINT_URL_LEN = 2048;
|
|
23
|
+
const KINDS = new Set(['tailscale', 'lan', 'cloudflare']);
|
|
24
|
+
/**
|
|
25
|
+
* Pure per-element shape + per-kind host validation — the NON-config-gated subset
|
|
26
|
+
* shared with `PeerEndpointResolver.resolve()` (the resolver additionally applies its
|
|
27
|
+
* own `tailscaleEnabled` + LAN-subnet gates, which are dial-time policy, not ingest
|
|
28
|
+
* integrity). Rejects: wrong shape, unknown kind, missing/oversized url, unparseable
|
|
29
|
+
* or forbidden host (loopback/link-local/metadata), a tailscale rope not in
|
|
30
|
+
* 100.64/10, a lan rope not in RFC-1918, a cloudflare rope that is not public https.
|
|
31
|
+
*/
|
|
32
|
+
export function isValidMeshEndpointShape(e) {
|
|
33
|
+
if (!e || typeof e !== 'object')
|
|
34
|
+
return false;
|
|
35
|
+
const { kind, url } = e;
|
|
36
|
+
if (typeof kind !== 'string' || !KINDS.has(kind))
|
|
37
|
+
return false;
|
|
38
|
+
if (typeof url !== 'string' || url.length === 0 || url.length > MAX_ENDPOINT_URL_LEN)
|
|
39
|
+
return false;
|
|
40
|
+
if (kind === 'cloudflare')
|
|
41
|
+
return isPublicHttps(url);
|
|
42
|
+
const host = hostOf(url);
|
|
43
|
+
if (!host || isForbiddenHost(host))
|
|
44
|
+
return false;
|
|
45
|
+
if (kind === 'tailscale')
|
|
46
|
+
return isTailscaleCgnat(host);
|
|
47
|
+
if (kind === 'lan')
|
|
48
|
+
return isRfc1918(host);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Validate an UNTRUSTED advertised endpoint set into a clean, capped `MeshEndpoint[]`.
|
|
53
|
+
*
|
|
54
|
+
* Order (spec Receiver §3): (a) require an array; reject the whole batch as malformed
|
|
55
|
+
* if `length > MAX_ENDPOINTS_BATCH`, else clamp the working slice to `MAX_ENDPOINTS+1`
|
|
56
|
+
* BEFORE the per-element loop (bounds the O(N) walk); (b) drop each element that fails
|
|
57
|
+
* shape/url-length/per-kind-host validation (malformed ELEMENTS are dropped, not the
|
|
58
|
+
* whole batch); (c) cap the kept set to `MAX_ENDPOINTS`. Fail-closed: a non-array or a
|
|
59
|
+
* fully-invalid set returns `[]` (the caller treats `[]` as absence → a no-op, NEVER a
|
|
60
|
+
* wipe of the peer's prior ropes).
|
|
61
|
+
*/
|
|
62
|
+
export function validateMeshEndpoints(input) {
|
|
63
|
+
if (!Array.isArray(input))
|
|
64
|
+
return [];
|
|
65
|
+
if (input.length > MAX_ENDPOINTS_BATCH)
|
|
66
|
+
return [];
|
|
67
|
+
const slice = input.length > MAX_ENDPOINTS + 1 ? input.slice(0, MAX_ENDPOINTS + 1) : input;
|
|
68
|
+
const kept = [];
|
|
69
|
+
for (const e of slice) {
|
|
70
|
+
if (isValidMeshEndpointShape(e))
|
|
71
|
+
kept.push({ kind: e.kind, url: e.url });
|
|
72
|
+
if (kept.length >= MAX_ENDPOINTS)
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
return kept;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Canonicalize an endpoint url for idempotent comparison: lower-case host, strip a
|
|
79
|
+
* trailing slash, drop a redundant default port. Prevents a cosmetically-different but
|
|
80
|
+
* semantically-equal advertisement (`…:4042` vs `…:4042/`, `HOST` vs `host`) from
|
|
81
|
+
* defeating the unchanged-set check and churning the registry. Unparseable input is
|
|
82
|
+
* returned trimmed-lowercased (best-effort; it would have failed validation anyway).
|
|
83
|
+
*/
|
|
84
|
+
export function normalizeEndpointUrl(url) {
|
|
85
|
+
try {
|
|
86
|
+
const u = new URL(url);
|
|
87
|
+
u.hostname = u.hostname.toLowerCase();
|
|
88
|
+
let out = u.toString();
|
|
89
|
+
if (out.endsWith('/') && !url.endsWith('/'))
|
|
90
|
+
out = out.slice(0, -1);
|
|
91
|
+
return out.replace(/\/$/, '');
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// @silent-fallback-ok: a url that does not parse here also fails validation, so it
|
|
95
|
+
// never reaches a real record; this only keeps the comparator total.
|
|
96
|
+
return url.trim().toLowerCase().replace(/\/$/, '');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Order-independent value equality of two endpoint sets, normalizing each url first —
|
|
101
|
+
* the idempotency comparator for the receiver (skip the registry write when unchanged).
|
|
102
|
+
*/
|
|
103
|
+
export function meshEndpointsEqual(a, b) {
|
|
104
|
+
const norm = (x) => (x ?? [])
|
|
105
|
+
.map((e) => `${e.kind} ${normalizeEndpointUrl(e.url)}`)
|
|
106
|
+
.sort()
|
|
107
|
+
.join('|');
|
|
108
|
+
return norm(a) === norm(b);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=MeshEndpointValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeshEndpointValidator.js","sourceRoot":"","sources":["../../src/core/MeshEndpointValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PeerEndpointRecorder — records a peer's advertised mesh endpoints into THIS
|
|
3
|
+
* machine's registry, idempotently and fail-closed (mesh-endpoint-http-propagation).
|
|
4
|
+
*
|
|
5
|
+
* The single chokepoint for "I just learned a peer's fast ropes from the signed lease
|
|
6
|
+
* RPC body" — shared by BOTH directions so the gate + validation + idempotency live in
|
|
7
|
+
* exactly one place:
|
|
8
|
+
* - the receiver routes (`/api/lease`, `/api/lease/pull`) record the authenticated
|
|
9
|
+
* SENDER's / PULLER's endpoints, and
|
|
10
|
+
* - the puller transport records the holder's endpoints out of a pull RESPONSE,
|
|
11
|
+
* bound to the cryptographically-verified responder identity.
|
|
12
|
+
*
|
|
13
|
+
* Invariants (spec Receiver §):
|
|
14
|
+
* 1. meshTransport gate — a no-op when `multiMachine.meshTransport` is off.
|
|
15
|
+
* 2. Absence is a no-op, NEVER a wipe — undefined/null/`[]`/fully-invalid leaves the
|
|
16
|
+
* peer's prior ropes intact (a silent or un-upgraded sender must not erase them).
|
|
17
|
+
* 3. Synchronous per-kind validation BEFORE storage (defense-in-depth, not authority).
|
|
18
|
+
* 4. Idempotent — skip the write (and its `lastSeen` bump + registry-dirty mark) when
|
|
19
|
+
* the normalized set is unchanged, preventing ~720 no-op rewrites/day on a stable
|
|
20
|
+
* 2-machine setup.
|
|
21
|
+
* 5. Advisory — a peer set is recorded ONLY into THAT peer's entry; it never mutates
|
|
22
|
+
* this machine's own self-endpoints. The resolver remains the dial-time authority.
|
|
23
|
+
*/
|
|
24
|
+
import type { MeshEndpoint } from './types.js';
|
|
25
|
+
export interface PeerEndpointRecorderDeps {
|
|
26
|
+
/** Read the peer's currently-recorded endpoint set (for the idempotency compare). */
|
|
27
|
+
getPeerEndpoints: (machineId: string) => MeshEndpoint[] | undefined;
|
|
28
|
+
/** Write the peer's endpoint set (bumps lastSeen + persists — only called when changed). */
|
|
29
|
+
updateMachineEndpoints: (machineId: string, endpoints: MeshEndpoint[]) => void;
|
|
30
|
+
/** Live read: false ⇒ recording is a strict no-op (the lease handling is unchanged). */
|
|
31
|
+
meshTransportEnabled: () => boolean;
|
|
32
|
+
logger?: (msg: string) => void;
|
|
33
|
+
}
|
|
34
|
+
export declare class PeerEndpointRecorder {
|
|
35
|
+
private readonly d;
|
|
36
|
+
constructor(deps: PeerEndpointRecorderDeps);
|
|
37
|
+
private log;
|
|
38
|
+
/**
|
|
39
|
+
* Validate + idempotently record `raw` (the untrusted advertised set) as `peerMachineId`'s
|
|
40
|
+
* endpoints. Returns true iff it actually wrote a new value. Never throws — a write to an
|
|
41
|
+
* unknown machine (or any registry error) is swallowed (the peer simply keeps its prior set).
|
|
42
|
+
*
|
|
43
|
+
* `peerMachineId` MUST be the AUTHENTICATED / cryptographically-verified identity of the
|
|
44
|
+
* advertising machine (the route's `auth.machineId`, or the pull-response ack's verified
|
|
45
|
+
* responder). Never pass a self-asserted body field — that is the load-bearing binding.
|
|
46
|
+
*/
|
|
47
|
+
record(peerMachineId: string, raw: unknown): boolean;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=PeerEndpointRecorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeerEndpointRecorder.d.ts","sourceRoot":"","sources":["../../src/core/PeerEndpointRecorder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,WAAW,wBAAwB;IACvC,qFAAqF;IACrF,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,EAAE,GAAG,SAAS,CAAC;IACpE,4FAA4F;IAC5F,sBAAsB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAC/E,wFAAwF;IACxF,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAA2B;gBAEjC,IAAI,EAAE,wBAAwB;IAI1C,OAAO,CAAC,GAAG;IAIX;;;;;;;;OAQG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO;CAoBrD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PeerEndpointRecorder — records a peer's advertised mesh endpoints into THIS
|
|
3
|
+
* machine's registry, idempotently and fail-closed (mesh-endpoint-http-propagation).
|
|
4
|
+
*
|
|
5
|
+
* The single chokepoint for "I just learned a peer's fast ropes from the signed lease
|
|
6
|
+
* RPC body" — shared by BOTH directions so the gate + validation + idempotency live in
|
|
7
|
+
* exactly one place:
|
|
8
|
+
* - the receiver routes (`/api/lease`, `/api/lease/pull`) record the authenticated
|
|
9
|
+
* SENDER's / PULLER's endpoints, and
|
|
10
|
+
* - the puller transport records the holder's endpoints out of a pull RESPONSE,
|
|
11
|
+
* bound to the cryptographically-verified responder identity.
|
|
12
|
+
*
|
|
13
|
+
* Invariants (spec Receiver §):
|
|
14
|
+
* 1. meshTransport gate — a no-op when `multiMachine.meshTransport` is off.
|
|
15
|
+
* 2. Absence is a no-op, NEVER a wipe — undefined/null/`[]`/fully-invalid leaves the
|
|
16
|
+
* peer's prior ropes intact (a silent or un-upgraded sender must not erase them).
|
|
17
|
+
* 3. Synchronous per-kind validation BEFORE storage (defense-in-depth, not authority).
|
|
18
|
+
* 4. Idempotent — skip the write (and its `lastSeen` bump + registry-dirty mark) when
|
|
19
|
+
* the normalized set is unchanged, preventing ~720 no-op rewrites/day on a stable
|
|
20
|
+
* 2-machine setup.
|
|
21
|
+
* 5. Advisory — a peer set is recorded ONLY into THAT peer's entry; it never mutates
|
|
22
|
+
* this machine's own self-endpoints. The resolver remains the dial-time authority.
|
|
23
|
+
*/
|
|
24
|
+
import { validateMeshEndpoints, meshEndpointsEqual } from './MeshEndpointValidator.js';
|
|
25
|
+
export class PeerEndpointRecorder {
|
|
26
|
+
d;
|
|
27
|
+
constructor(deps) {
|
|
28
|
+
this.d = deps;
|
|
29
|
+
}
|
|
30
|
+
log(m) {
|
|
31
|
+
this.d.logger?.(`[mesh-endpoints] ${m}`);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Validate + idempotently record `raw` (the untrusted advertised set) as `peerMachineId`'s
|
|
35
|
+
* endpoints. Returns true iff it actually wrote a new value. Never throws — a write to an
|
|
36
|
+
* unknown machine (or any registry error) is swallowed (the peer simply keeps its prior set).
|
|
37
|
+
*
|
|
38
|
+
* `peerMachineId` MUST be the AUTHENTICATED / cryptographically-verified identity of the
|
|
39
|
+
* advertising machine (the route's `auth.machineId`, or the pull-response ack's verified
|
|
40
|
+
* responder). Never pass a self-asserted body field — that is the load-bearing binding.
|
|
41
|
+
*/
|
|
42
|
+
record(peerMachineId, raw) {
|
|
43
|
+
if (!this.d.meshTransportEnabled())
|
|
44
|
+
return false;
|
|
45
|
+
if (!peerMachineId)
|
|
46
|
+
return false;
|
|
47
|
+
if (raw === undefined || raw === null)
|
|
48
|
+
return false; // absence → no-op
|
|
49
|
+
const validated = validateMeshEndpoints(raw);
|
|
50
|
+
if (validated.length === 0)
|
|
51
|
+
return false; // empty/fully-invalid → no-op, never a wipe
|
|
52
|
+
try {
|
|
53
|
+
const current = this.d.getPeerEndpoints(peerMachineId);
|
|
54
|
+
if (meshEndpointsEqual(current, validated))
|
|
55
|
+
return false; // idempotent — skip the write
|
|
56
|
+
this.d.updateMachineEndpoints(peerMachineId, validated);
|
|
57
|
+
this.log(`recorded ${validated.length} endpoint(s) for ${peerMachineId} [${validated.map((e) => e.kind).join(',')}]`);
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
// @silent-fallback-ok: recording is best-effort enrichment. An unknown-machine write
|
|
62
|
+
// (MACHINE_NOT_FOUND) or a registry race means the peer keeps its prior endpoint set and
|
|
63
|
+
// the next lease RPC retries — strictly no worse than today's cloudflare-only behavior.
|
|
64
|
+
this.log(`skip record for ${peerMachineId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=PeerEndpointRecorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeerEndpointRecorder.js","sourceRoot":"","sources":["../../src/core/PeerEndpointRecorder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAYvF,MAAM,OAAO,oBAAoB;IACd,CAAC,CAA2B;IAE7C,YAAY,IAA8B;QACxC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAChB,CAAC;IAEO,GAAG,CAAC,CAAS;QACnB,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,aAAqB,EAAE,GAAY;QACxC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,EAAE;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QACjC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,kBAAkB;QACvE,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,4CAA4C;QACtF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YACvD,IAAI,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC;gBAAE,OAAO,KAAK,CAAC,CAAC,8BAA8B;YACxF,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,YAAY,SAAS,CAAC,MAAM,oBAAoB,aAAa,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qFAAqF;YACrF,yFAAyF;YACzF,wFAAwF;YACxF,IAAI,CAAC,GAAG,CAAC,mBAAmB,aAAa,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
package/dist/core/ReapGuard.d.ts
CHANGED
|
@@ -80,11 +80,23 @@ export declare class ReapGuard {
|
|
|
80
80
|
* subprocess fork (process tree / main-process probe) so a guarded session is
|
|
81
81
|
* rejected without paying for a capture.
|
|
82
82
|
*
|
|
83
|
+
* `bypassedReasons` (post-transfer closeout correctness, Part E): an optional
|
|
84
|
+
* set of keep-reasons to TREAT AS BYPASSED. When the cascade would return a
|
|
85
|
+
* reason that is in this set, it is SKIPPED — evaluation continues to the
|
|
86
|
+
* lower-priority guards — so the returned reason is the first keep-reason that
|
|
87
|
+
* is NOT bypassed, or `null` if every remaining guard clears. This is what lets
|
|
88
|
+
* a narrow bypass flag (e.g. `bypassRecentUserMessageForConfirmedMove`) lift
|
|
89
|
+
* EXACTLY ONE reason while every OTHER KEEP-guard is still re-checked — the
|
|
90
|
+
* contract the spec promises. An empty/absent set is byte-identical to the
|
|
91
|
+
* legacy single-eval behavior, and the priority order of the non-bypassed
|
|
92
|
+
* reasons is preserved exactly. `protected` is #1 and must never be supplied as
|
|
93
|
+
* bypassable — the cascade still evaluates it first, so it always wins.
|
|
94
|
+
*
|
|
83
95
|
* Never throws — a thrown signal source is caught and resolved to KEEP
|
|
84
96
|
* ('guard-error'), because we can never reason about a session we cannot
|
|
85
97
|
* inspect, and the safe answer is always "keep".
|
|
86
98
|
*/
|
|
87
|
-
blockedReason(session: Session): ReapKeepReason | null;
|
|
99
|
+
blockedReason(session: Session, bypassedReasons?: ReadonlySet<string> | readonly string[]): ReapKeepReason | null;
|
|
88
100
|
private evaluate;
|
|
89
101
|
/**
|
|
90
102
|
* Observe-only work-evidence collection (reap-notify spec R2.1) — the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReapGuard.d.ts","sourceRoot":"","sources":["../../src/core/ReapGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5C,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,MAAM,MAAM,EAAE,CAAC;IAClC,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAChD,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IACtD,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACvD,mBAAmB,EAAE,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;IACrE,uBAAuB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC;IAC7D,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IACjE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,sBAAsB,EAAE,OAAO,CAAC;IAChC;;;;;;;;OAQG;IACH,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,0BAA0B,EAAE,gBAKxC,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAMjE
|
|
1
|
+
{"version":3,"file":"ReapGuard.d.ts","sourceRoot":"","sources":["../../src/core/ReapGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5C,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,MAAM,MAAM,EAAE,CAAC;IAClC,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAChD,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IACtD,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACvD,mBAAmB,EAAE,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;IACrE,uBAAuB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC;IAC7D,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IACjE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,sBAAsB,EAAE,OAAO,CAAC;IAChC;;;;;;;;OAQG;IACH,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,0BAA0B,EAAE,gBAKxC,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAMjE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,cAAc,GAAG,IAAI;IAcjH,OAAO,CAAC,QAAQ;IAgGhB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,gBAAgB,EAAE;CA8DxF"}
|