@cat-factory/kernel 0.325.0 → 0.326.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.
Files changed (36) hide show
  1. package/dist/domain/environment-reachability.logic.d.ts +131 -0
  2. package/dist/domain/environment-reachability.logic.d.ts.map +1 -0
  3. package/dist/domain/environment-reachability.logic.js +277 -0
  4. package/dist/domain/environment-reachability.logic.js.map +1 -0
  5. package/dist/domain/types.d.ts +1 -1
  6. package/dist/domain/types.d.ts.map +1 -1
  7. package/dist/index.d.ts +4 -3
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +8 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/ports/agent-executor.d.ts +35 -1
  12. package/dist/ports/agent-executor.d.ts.map +1 -1
  13. package/dist/ports/agent-executor.js.map +1 -1
  14. package/dist/ports/environment-provider.d.ts +15 -1
  15. package/dist/ports/environment-provider.d.ts.map +1 -1
  16. package/dist/ports/environment-repositories.d.ts +16 -1
  17. package/dist/ports/environment-repositories.d.ts.map +1 -1
  18. package/dist/ports/index.d.ts +2 -1
  19. package/dist/ports/index.d.ts.map +1 -1
  20. package/dist/ports/index.js.map +1 -1
  21. package/dist/ports/route-probe.d.ts +68 -0
  22. package/dist/ports/route-probe.d.ts.map +1 -0
  23. package/dist/ports/route-probe.js +2 -0
  24. package/dist/ports/route-probe.js.map +1 -0
  25. package/dist/ports/runner-transport.d.ts +26 -6
  26. package/dist/ports/runner-transport.d.ts.map +1 -1
  27. package/dist/ports/runner-transport.js.map +1 -1
  28. package/dist/shared/environment-host-bridge.logic.d.ts +100 -6
  29. package/dist/shared/environment-host-bridge.logic.d.ts.map +1 -1
  30. package/dist/shared/environment-host-bridge.logic.js +113 -6
  31. package/dist/shared/environment-host-bridge.logic.js.map +1 -1
  32. package/dist/shared/ip-host.logic.d.ts +16 -0
  33. package/dist/shared/ip-host.logic.d.ts.map +1 -1
  34. package/dist/shared/ip-host.logic.js +52 -0
  35. package/dist/shared/ip-host.logic.js.map +1 -1
  36. package/package.json +2 -2
@@ -26,28 +26,122 @@ export declare function resolvesToLocalMachine(hostname: string): boolean;
26
26
  * replaced, for a `--add-host` the container will not honour.
27
27
  */
28
28
  export type LocalMachineHostBridge =
29
- /** Not this machine. The container reaches it as written, and re-pointing it would break it. */
29
+ /** Not this machine, and nowhere else to point it. The container reaches it as written. */
30
30
  {
31
31
  kind: 'none';
32
32
  }
33
- /** A NAME an added hosts-file entry re-points. `host` is what to map to the host gateway. */
33
+ /** A NAME an added hosts-file entry re-points, and what to point it AT. */
34
34
  | {
35
35
  kind: 'bridge';
36
36
  host: string;
37
+ target: HostBridgeTarget;
37
38
  }
38
- /** This machine, and no hosts-file entry can reach it. See {@link isHostsFileAddressable}. */
39
+ /** No hosts-file entry can make this reachable, and {@link UnbridgeableCause} says why. */
39
40
  | {
40
41
  kind: 'unbridgeable';
41
42
  host: string;
43
+ cause: UnbridgeableCause;
42
44
  };
43
45
  /**
44
- * Grade a hostname for the host-gateway bridge: leave it alone, map it, or report that it names
45
- * this machine and cannot be mapped.
46
+ * Why a name cannot be bridged, because the two causes have different remedies and a transport
47
+ * that reported them with one sentence would send an operator to the wrong fix.
48
+ *
49
+ * - `local_machine` the URL names THIS machine by a spelling no hosts entry re-points
50
+ * (`localhost`, a bare IP literal). Remedy: publish the environment on a
51
+ * name that resolves to the host, or run the step natively.
52
+ * - `unusable_address` the platform PROVED the name does not carry and that an address does, and
53
+ * that address cannot be installed: it is one no bridge may name, or the
54
+ * URL's own host is a literal nothing looks up. Remedy: publish a name and
55
+ * an address a bridge may name. This one is a run heading for failure with
56
+ * a proof on the record saying the environment is reachable, which is
57
+ * evidence pointing further from the cause than no bridge at all.
58
+ */
59
+ export type UnbridgeableCause = 'local_machine' | 'unusable_address';
60
+ /**
61
+ * What a bridged name is mapped TO.
62
+ *
63
+ * A member on `bridge` rather than a fourth sibling `kind`, so `none` / `bridge` / `unbridgeable`
64
+ * keep meaning exactly what they mean: the three of them answer "what can this transport do about
65
+ * this name", and both targets are the same answer (re-point it) with different data.
66
+ *
67
+ * - `host-gateway` is the container runtime's own alias for the machine it runs on, and it is
68
+ * the ONLY target a local-machine name can take. It is a Docker-family token, resolved by the
69
+ * runtime rather than by us, which is why it is a literal here and never an address.
70
+ * - `{ ip }` is an address the ENVIRONMENT'S PROVIDER stated carries traffic for this name. It
71
+ * is the remote case, and it is the case that makes a bridge target DATA for the first time.
72
+ * Two rules bind it, both in {@link isBridgeableAddress} and at the caller: the address must
73
+ * be one a bridge may name, and the HOST side must be a host the job was actually handed,
74
+ * never a free-form string a provider chose. A provider that could re-point any name inside
75
+ * the container could re-point the harness's own alias for reaching back to its host.
76
+ */
77
+ export type HostBridgeTarget = 'host-gateway' | {
78
+ ip: string;
79
+ };
80
+ /**
81
+ * Whether an address a provider stated may be used as a bridge target.
82
+ *
83
+ * Until this existed the target was the fixed literal `host-gateway`, so the destination of every
84
+ * bridge was CODE. An address makes it DATA, on a path whose container is itself the trust
85
+ * boundary, so the rule is stated here beside the classifier rather than left to whichever
86
+ * adapter interpolates the string.
87
+ *
88
+ * Deliberately NOT {@link isBlockedPrivateHost}, which is the strict policy for a URL an org
89
+ * supplies and blocks the whole RFC1918 space. An internal load balancer on `10.x` is precisely
90
+ * the population this feature exists for, and refusing it would leave the feature with nothing to
91
+ * name. What is refused instead is the set an address bridge could only ever be ABUSED to reach:
92
+ *
93
+ * - Anything that is not a CANONICAL literal. `decodeIpv4` accepts a bare 32-bit integer and
94
+ * hex/octal octets because a URL guard must see through those encodings; a bridge target has
95
+ * no reason to be spelled that way, and accepting the obfuscated forms is how `2130706433`
96
+ * becomes loopback in a reader that only pattern-matched `127.`.
97
+ * - LOOPBACK, which inside a container is the container's own namespace, where the harness
98
+ * itself is listening. A name re-pointed there does not reach the host; it reaches us.
99
+ * - LINK-LOCAL and the vendor metadata addresses, the endpoint an SSRF aims at for instance
100
+ * credentials, reached here by a name the agent has every reason to fetch.
101
+ * - The unspecified, multicast and broadcast addresses, which name no host at all.
102
+ *
103
+ * Every one of those classes is judged on the DECODED address rather than on how it is written.
104
+ * IPv6 has many spellings of one value, so a `host === '::1'` comparison admits `0::1` and
105
+ * `0:0:0:0:0:0:0:1`, and a `startsWith('fe80:')` test covers an eighth of `fe80::/10`; the
106
+ * metadata targets are read out of `isCloudMetadataHost`, the swept definition every other guard
107
+ * in the tree shares, rather than restated here where a vendor added there would not reach.
108
+ */
109
+ export declare function isBridgeableAddress(address: string): boolean;
110
+ /**
111
+ * Grade a hostname for a host bridge: leave it alone, map it (to the host gateway or to a stated
112
+ * address), or report that it names this machine and cannot be mapped.
46
113
  *
47
114
  * The whole rule lives here rather than beside the container runtime because more than one layer
48
115
  * has to agree about it, and because both wrong answers are silent in production: bridging a
49
116
  * remote host breaks an environment that worked, and not bridging a wildcard-DNS loopback name
50
117
  * leaves the tester on connection failures it reports as a dead environment.
118
+ *
119
+ * `address` is the address the environment's provider stated for THIS hostname, already PROVED to
120
+ * carry (see `EnvironmentRouteProof`); absent means the name is all anyone has. The two cases are
121
+ * ordered rather than combined, and the order is not arbitrary: a name that answers with this
122
+ * machine's own address is a dead end inside a container whatever a provider says about it, so it
123
+ * takes the gateway branch first and a stated address never overrides it.
124
+ *
125
+ * Note the asymmetry this leaves, which is correct. A REMOTE name with NO address is reported
126
+ * `none`: it reaches whatever it reaches from inside the container exactly as it does outside, and
127
+ * there is nothing to report. A remote name WITH one is a different fact, because an address is
128
+ * only ever present when the proof established that the name did not carry and the address did
129
+ * (`EnvironmentRouteProof.via`). Failing to install THAT is a run heading for the connection
130
+ * failures this mechanism exists to stop, with a proof on the record vouching for a route the
131
+ * container never got, so it is reported `unbridgeable` rather than passed over as `none`.
51
132
  */
52
- export declare function classifyLocalMachineHostBridge(hostname: string): LocalMachineHostBridge;
133
+ export declare function classifyLocalMachineHostBridge(hostname: string, address?: string | null): LocalMachineHostBridge;
134
+ /**
135
+ * The one spelling of a bridge, for comparing a needed bridge against what a running container
136
+ * was CREATED with and for recording it on that container's handle.
137
+ *
138
+ * Derived rather than hand-formatted at each site because the comparison is an IDENTITY: a
139
+ * mismatch destroys and rebuilds a warm container, so two spellings of the same bridge would
140
+ * replace one for nothing, and one spelling covering two different targets would leave a run
141
+ * wedged against a stale address in a container nothing will replace.
142
+ */
143
+ export declare function hostBridgeKey(bridge: {
144
+ host: string;
145
+ target: HostBridgeTarget;
146
+ }): string;
53
147
  //# sourceMappingURL=environment-host-bridge.logic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment-host-bridge.logic.d.ts","sourceRoot":"","sources":["../../src/shared/environment-host-bridge.logic.ts"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAUhE;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,sBAAsB;AAChC,gGAAgG;AAC9F;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;AAClB,6FAA6F;GAC3F;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAClC,8FAA8F;GAC5F;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAgC1C;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,CAKvF"}
1
+ {"version":3,"file":"environment-host-bridge.logic.d.ts","sourceRoot":"","sources":["../../src/shared/environment-host-bridge.logic.ts"],"names":[],"mappings":"AAkDA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAUhE;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,sBAAsB;AAChC,2FAA2F;AACzF;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;AAClB,2EAA2E;GACzE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE;AAC5D,2FAA2F;GACzF;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,CAAA;AAEpE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG,kBAAkB,CAAA;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAe5D;AAmDD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,sBAAsB,CAcxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG,MAAM,CAGxF"}
@@ -24,7 +24,7 @@
24
24
  // name to the gateway inside the container does that, and it keeps the `Host` header the ingress
25
25
  // routes on correct for free, which a rewritten authority would not.
26
26
  import { wildcardDnsSuffix, wildcardDnsWindows } from '@cat-factory/contracts';
27
- import { decodeIpv4, isLocalMachineHost, isLoopbackHost } from './ip-host.logic.js';
27
+ import { decimalV4, decodeIpv4, decodeIpv6, isCloudMetadataHost, isLocalMachineHost, isLoopbackHost, mappedV4, } from './ip-host.logic.js';
28
28
  /**
29
29
  * The one spelling every rule here compares against: lower-cased, trimmed, IPv6 brackets and the
30
30
  * fully-qualified trailing dot removed. Shared rather than repeated so a hostname cannot be judged
@@ -67,6 +67,77 @@ export function resolvesToLocalMachine(hostname) {
67
67
  const [resolved] = wildcardDnsWindows(host);
68
68
  return resolved !== undefined && isLoopbackHost(resolved);
69
69
  }
70
+ /**
71
+ * Whether an address a provider stated may be used as a bridge target.
72
+ *
73
+ * Until this existed the target was the fixed literal `host-gateway`, so the destination of every
74
+ * bridge was CODE. An address makes it DATA, on a path whose container is itself the trust
75
+ * boundary, so the rule is stated here beside the classifier rather than left to whichever
76
+ * adapter interpolates the string.
77
+ *
78
+ * Deliberately NOT {@link isBlockedPrivateHost}, which is the strict policy for a URL an org
79
+ * supplies and blocks the whole RFC1918 space. An internal load balancer on `10.x` is precisely
80
+ * the population this feature exists for, and refusing it would leave the feature with nothing to
81
+ * name. What is refused instead is the set an address bridge could only ever be ABUSED to reach:
82
+ *
83
+ * - Anything that is not a CANONICAL literal. `decodeIpv4` accepts a bare 32-bit integer and
84
+ * hex/octal octets because a URL guard must see through those encodings; a bridge target has
85
+ * no reason to be spelled that way, and accepting the obfuscated forms is how `2130706433`
86
+ * becomes loopback in a reader that only pattern-matched `127.`.
87
+ * - LOOPBACK, which inside a container is the container's own namespace, where the harness
88
+ * itself is listening. A name re-pointed there does not reach the host; it reaches us.
89
+ * - LINK-LOCAL and the vendor metadata addresses, the endpoint an SSRF aims at for instance
90
+ * credentials, reached here by a name the agent has every reason to fetch.
91
+ * - The unspecified, multicast and broadcast addresses, which name no host at all.
92
+ *
93
+ * Every one of those classes is judged on the DECODED address rather than on how it is written.
94
+ * IPv6 has many spellings of one value, so a `host === '::1'` comparison admits `0::1` and
95
+ * `0:0:0:0:0:0:0:1`, and a `startsWith('fe80:')` test covers an eighth of `fe80::/10`; the
96
+ * metadata targets are read out of `isCloudMetadataHost`, the swept definition every other guard
97
+ * in the tree shares, rather than restated here where a vendor added there would not reach.
98
+ */
99
+ export function isBridgeableAddress(address) {
100
+ const host = normalizeHostname(address);
101
+ if (!host)
102
+ return false;
103
+ // Link-local (169.254/16, incl. IMDS), every vendor metadata address and the metadata NAMES,
104
+ // across every obfuscated encoding. One definition, shared with the SSRF guards.
105
+ if (isCloudMetadataHost(host))
106
+ return false;
107
+ if (host.includes(':')) {
108
+ // IPv6. An IPv4-mapped literal is judged on the address it carries, never on its spelling.
109
+ const mapped = mappedV4(host);
110
+ if (mapped)
111
+ return isBridgeableV4(mapped);
112
+ const groups = decodeIpv6(host);
113
+ return groups !== null && isBridgeableV6(groups);
114
+ }
115
+ const v4 = decimalV4(host);
116
+ return v4 !== null && isBridgeableV4(v4);
117
+ }
118
+ /** The IPv4 half of {@link isBridgeableAddress}, once the literal has been decoded. */
119
+ function isBridgeableV4(parts) {
120
+ const [a] = parts;
121
+ if (a === 0 || a === 127)
122
+ return false; // unspecified / loopback
123
+ if (a >= 224)
124
+ return false; // multicast, reserved, and 255.255.255.255
125
+ return true;
126
+ }
127
+ /** The IPv6 half, judged on the decoded groups so no spelling of a refused class gets through. */
128
+ function isBridgeableV6(groups) {
129
+ if (groups.every((group) => group === 0))
130
+ return false; // unspecified, `::`
131
+ // Loopback, `::1` in any spelling.
132
+ if (groups.every((group, index) => group === (index === 7 ? 1 : 0)))
133
+ return false;
134
+ const first = groups[0] ?? 0;
135
+ if ((first & 0xffc0) === 0xfe80)
136
+ return false; // link-local, fe80::/10
137
+ if ((first & 0xff00) === 0xff00)
138
+ return false; // multicast, ff00::/8
139
+ return true;
140
+ }
70
141
  /**
71
142
  * Whether mapping `host` to the container's host gateway would achieve anything.
72
143
  *
@@ -99,21 +170,57 @@ function isHostsFileAddressable(host) {
99
170
  return decodeIpv4(host) === null;
100
171
  }
101
172
  /**
102
- * Grade a hostname for the host-gateway bridge: leave it alone, map it, or report that it names
103
- * this machine and cannot be mapped.
173
+ * Grade a hostname for a host bridge: leave it alone, map it (to the host gateway or to a stated
174
+ * address), or report that it names this machine and cannot be mapped.
104
175
  *
105
176
  * The whole rule lives here rather than beside the container runtime because more than one layer
106
177
  * has to agree about it, and because both wrong answers are silent in production: bridging a
107
178
  * remote host breaks an environment that worked, and not bridging a wildcard-DNS loopback name
108
179
  * leaves the tester on connection failures it reports as a dead environment.
180
+ *
181
+ * `address` is the address the environment's provider stated for THIS hostname, already PROVED to
182
+ * carry (see `EnvironmentRouteProof`); absent means the name is all anyone has. The two cases are
183
+ * ordered rather than combined, and the order is not arbitrary: a name that answers with this
184
+ * machine's own address is a dead end inside a container whatever a provider says about it, so it
185
+ * takes the gateway branch first and a stated address never overrides it.
186
+ *
187
+ * Note the asymmetry this leaves, which is correct. A REMOTE name with NO address is reported
188
+ * `none`: it reaches whatever it reaches from inside the container exactly as it does outside, and
189
+ * there is nothing to report. A remote name WITH one is a different fact, because an address is
190
+ * only ever present when the proof established that the name did not carry and the address did
191
+ * (`EnvironmentRouteProof.via`). Failing to install THAT is a run heading for the connection
192
+ * failures this mechanism exists to stop, with a proof on the record vouching for a route the
193
+ * container never got, so it is reported `unbridgeable` rather than passed over as `none`.
109
194
  */
110
- export function classifyLocalMachineHostBridge(hostname) {
195
+ export function classifyLocalMachineHostBridge(hostname, address) {
111
196
  const host = normalizeHostname(hostname);
112
197
  if (!host)
113
198
  return { kind: 'none' };
114
- if (!resolvesToLocalMachine(host))
199
+ if (resolvesToLocalMachine(host)) {
200
+ return isHostsFileAddressable(host)
201
+ ? { kind: 'bridge', host, target: 'host-gateway' }
202
+ : { kind: 'unbridgeable', host, cause: 'local_machine' };
203
+ }
204
+ if (!address)
115
205
  return { kind: 'none' };
116
- return isHostsFileAddressable(host) ? { kind: 'bridge', host } : { kind: 'unbridgeable', host };
206
+ const ip = normalizeHostname(address);
207
+ if (!isBridgeableAddress(ip) || !isHostsFileAddressable(host)) {
208
+ return { kind: 'unbridgeable', host, cause: 'unusable_address' };
209
+ }
210
+ return { kind: 'bridge', host, target: { ip } };
211
+ }
212
+ /**
213
+ * The one spelling of a bridge, for comparing a needed bridge against what a running container
214
+ * was CREATED with and for recording it on that container's handle.
215
+ *
216
+ * Derived rather than hand-formatted at each site because the comparison is an IDENTITY: a
217
+ * mismatch destroys and rebuilds a warm container, so two spellings of the same bridge would
218
+ * replace one for nothing, and one spelling covering two different targets would leave a run
219
+ * wedged against a stale address in a container nothing will replace.
220
+ */
221
+ export function hostBridgeKey(bridge) {
222
+ const target = bridge.target === 'host-gateway' ? 'host-gateway' : bridge.target.ip;
223
+ return bridge.host + '=' + target;
117
224
  }
118
225
  // The URL half of this (pull the hostname out, decide whether to bridge it) is deliberately NOT
119
226
  // here: kernel compiles against `lib: ["ES2022"]` with no DOM and no Node types, so `URL` is
@@ -1 +1 @@
1
- {"version":3,"file":"environment-host-bridge.logic.js","sourceRoot":"","sources":["../../src/shared/environment-host-bridge.logic.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,EAAE;AACF,oGAAoG;AACpG,8FAA8F;AAC9F,8FAA8F;AAC9F,iGAAiG;AACjG,iGAAiG;AACjG,8FAA8F;AAC9F,oGAAoG;AACpG,mGAAmG;AACnG,6DAA6D;AAC7D,EAAE;AACF,iGAAiG;AACjG,oGAAoG;AACpG,2FAA2F;AAC3F,0FAA0F;AAC1F,EAAE;AACF,oGAAoG;AACpG,wFAAwF;AACxF,mGAAmG;AACnG,kGAAkG;AAClG,gGAAgG;AAChG,mGAAmG;AACnG,iGAAiG;AACjG,qEAAqE;AAErE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC9E,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnF;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,QAAQ;SACZ,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACvB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IACvB,IAAI,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACzC,+FAA+F;IAC/F,gGAAgG;IAChG,2EAA2E;IAC3E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAC1C,MAAM,CAAC,QAAQ,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAC3C,OAAO,QAAQ,KAAK,SAAS,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;AAC3D,CAAC;AAoBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAA;IACtC,mGAAmG;IACnG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACpC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B,CAAC,QAAgB;IAC7D,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAClC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAC1D,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAA;AACjG,CAAC;AAED,gGAAgG;AAChG,6FAA6F;AAC7F,kGAAkG;AAClG,oGAAoG;AACpG,mGAAmG;AACnG,4DAA4D"}
1
+ {"version":3,"file":"environment-host-bridge.logic.js","sourceRoot":"","sources":["../../src/shared/environment-host-bridge.logic.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,22 @@ export declare function mappedV4(host: string): [number, number, number, number]
12
12
  * rejects ALL numeric forms outright should use {@link isBlockedPrivateHost}.
13
13
  */
14
14
  export declare function decodeIpv4(host: string): [number, number, number, number] | null;
15
+ /**
16
+ * Decode an IPv6 literal to its eight 16-bit groups, or null when it is not one.
17
+ *
18
+ * Exists because an IPv6 address has MANY spellings of one value and a rule that pattern-matches
19
+ * the canonical one is not a rule: `::1`, `0::1` and `0:0:0:0:0:0:0:1` are the same loopback
20
+ * address, and a check comparing against the literal `'::1'` admits the other two. Same for
21
+ * `fe80::/10`, where a `startsWith('fe80:')` test covers an eighth of the range and passes
22
+ * `fe90::1`. Callers that must classify an IPv6 target (link-local, multicast, loopback) decode
23
+ * first and judge the NUMBER, exactly as {@link decodeIpv4} exists so a guard never judges a v4
24
+ * spelling.
25
+ *
26
+ * Refused rather than decoded: a zone id (`fe80::1%eth0`), which names a local interface and can
27
+ * never be a routable target, and any group that is not 1-4 hex digits. A trailing dotted-quad is
28
+ * accepted, being the ordinary spelling of a mapped or translated address.
29
+ */
30
+ export declare function decodeIpv6(hostname: string): number[] | null;
15
31
  /**
16
32
  * Whether a host resolves to a known cloud-metadata / link-local target — the endpoint
17
33
  * an SSRF would aim at for instance credentials. Covers the metadata hostnames plus the
@@ -1 +1 @@
1
- {"version":3,"file":"ip-host.logic.d.ts","sourceRoot":"","sources":["../../src/shared/ip-host.logic.ts"],"names":[],"mappings":"AAUA,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAO5E;AAED,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAS/E;AAED,sFAAsF;AACtF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAmB9E;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAWhF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAe7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGxD;AAmBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAM5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAiC9D"}
1
+ {"version":3,"file":"ip-host.logic.d.ts","sourceRoot":"","sources":["../../src/shared/ip-host.logic.ts"],"names":[],"mappings":"AAUA,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAO5E;AAED,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAS/E;AAED,sFAAsF;AACtF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAmB9E;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAWhF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAY5D;AAoBD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAe7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGxD;AAmBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAM5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAiC9D"}
@@ -77,6 +77,58 @@ export function decodeIpv4(host) {
77
77
  }
78
78
  return null;
79
79
  }
80
+ /**
81
+ * Decode an IPv6 literal to its eight 16-bit groups, or null when it is not one.
82
+ *
83
+ * Exists because an IPv6 address has MANY spellings of one value and a rule that pattern-matches
84
+ * the canonical one is not a rule: `::1`, `0::1` and `0:0:0:0:0:0:0:1` are the same loopback
85
+ * address, and a check comparing against the literal `'::1'` admits the other two. Same for
86
+ * `fe80::/10`, where a `startsWith('fe80:')` test covers an eighth of the range and passes
87
+ * `fe90::1`. Callers that must classify an IPv6 target (link-local, multicast, loopback) decode
88
+ * first and judge the NUMBER, exactly as {@link decodeIpv4} exists so a guard never judges a v4
89
+ * spelling.
90
+ *
91
+ * Refused rather than decoded: a zone id (`fe80::1%eth0`), which names a local interface and can
92
+ * never be a routable target, and any group that is not 1-4 hex digits. A trailing dotted-quad is
93
+ * accepted, being the ordinary spelling of a mapped or translated address.
94
+ */
95
+ export function decodeIpv6(hostname) {
96
+ const host = hostname.toLowerCase().replace(/^\[|\]$/g, '');
97
+ if (!host.includes(':') || host.includes('%'))
98
+ return null;
99
+ const halves = host.split('::');
100
+ if (halves.length > 2)
101
+ return null;
102
+ const head = expandIpv6Groups(halves[0] ?? '');
103
+ const tail = halves.length === 2 ? expandIpv6Groups(halves[1] ?? '') : [];
104
+ if (!head || !tail)
105
+ return null;
106
+ if (halves.length === 1)
107
+ return head.length === 8 ? head : null;
108
+ // `::` stands for at least one all-zero group, so a compression that saves nothing is malformed.
109
+ const filled = 8 - head.length - tail.length;
110
+ return filled >= 1 ? [...head, ...Array.from({ length: filled }, () => 0), ...tail] : null;
111
+ }
112
+ /** One colon-separated run of an IPv6 literal as 16-bit groups, or null when it is malformed. */
113
+ function expandIpv6Groups(part) {
114
+ if (part === '')
115
+ return [];
116
+ const chunks = part.split(':');
117
+ const groups = [];
118
+ for (const [index, chunk] of chunks.entries()) {
119
+ if (index === chunks.length - 1 && chunk.includes('.')) {
120
+ const v4 = decimalV4(chunk);
121
+ if (!v4)
122
+ return null;
123
+ groups.push((v4[0] << 8) | v4[1], (v4[2] << 8) | v4[3]);
124
+ continue;
125
+ }
126
+ if (!/^[0-9a-f]{1,4}$/.test(chunk))
127
+ return null;
128
+ groups.push(parseInt(chunk, 16));
129
+ }
130
+ return groups;
131
+ }
80
132
  /**
81
133
  * Whether a host resolves to a known cloud-metadata / link-local target — the endpoint
82
134
  * an SSRF would aim at for instance credentials. Covers the metadata hostnames plus the
@@ -1 +1 @@
1
- {"version":3,"file":"ip-host.logic.js","sourceRoot":"","sources":["../../src/shared/ip-host.logic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ip-host.logic.js","sourceRoot":"","sources":["../../src/shared/ip-host.logic.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/kernel",
3
- "version": "0.325.0",
3
+ "version": "0.326.0",
4
4
  "description": "Shared vocabulary, pure logic, and port interfaces for the Agent Architecture Board.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,7 +24,7 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@cat-factory/contracts": "0.336.0",
27
+ "@cat-factory/contracts": "0.337.0",
28
28
  "ai": "^7.0.85",
29
29
  "yaml": "^2.9.0"
30
30
  },