@cat-factory/contracts 0.340.0 → 0.342.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bootstrap.d.ts +22 -4
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/environment-reachability.d.ts +139 -16
- package/dist/environment-reachability.d.ts.map +1 -1
- package/dist/environment-reachability.js +108 -12
- package/dist/environment-reachability.js.map +1 -1
- package/dist/environments.d.ts +311 -1
- package/dist/environments.d.ts.map +1 -1
- package/dist/environments.js +14 -0
- package/dist/environments.js.map +1 -1
- package/dist/monorepo-adoption.d.ts +228 -33
- package/dist/monorepo-adoption.d.ts.map +1 -1
- package/dist/monorepo-adoption.js +117 -20
- package/dist/monorepo-adoption.js.map +1 -1
- package/dist/routes/agent-runs.d.ts +44 -8
- package/dist/routes/agent-runs.d.ts.map +1 -1
- package/dist/routes/bootstrap.d.ts +88 -16
- package/dist/routes/bootstrap.d.ts.map +1 -1
- package/dist/routes/environmentUserHandlers.d.ts +6 -0
- package/dist/routes/environmentUserHandlers.d.ts.map +1 -1
- package/dist/routes/environments.d.ts +35 -5
- package/dist/routes/environments.d.ts.map +1 -1
- package/dist/routes/workspaces.d.ts +44 -8
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/snapshot.d.ts +22 -4
- package/dist/snapshot.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/bootstrap.d.ts
CHANGED
|
@@ -206,10 +206,28 @@ export declare const bootstrapJobSchema: v.ObjectSchema<{
|
|
|
206
206
|
readonly unavailableReason: v.NullableSchema<v.PicklistSchema<["model_unavailable", "repo_unreadable", "budget_exhausted", "analysis_unusable"], undefined>, undefined>;
|
|
207
207
|
readonly unavailableDetail: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 600, undefined>]>, undefined>;
|
|
208
208
|
readonly survey: v.ObjectSchema<{
|
|
209
|
-
readonly
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
209
|
+
readonly reads: v.NullableSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.ObjectSchema<{
|
|
210
|
+
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 400, undefined>]>;
|
|
211
|
+
readonly origin: v.PicklistSchema<["seed", "model"], undefined>;
|
|
212
|
+
readonly outcome: v.PicklistSchema<["read", "absent", "unreadable", "refused"], undefined>;
|
|
213
|
+
readonly chars: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
214
|
+
readonly note: v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MaxLengthAction<string, 600, undefined>]>, undefined>;
|
|
215
|
+
}, undefined>, undefined>, v.MaxLengthAction<{
|
|
216
|
+
path: string;
|
|
217
|
+
origin: "model" | "seed";
|
|
218
|
+
outcome: "absent" | "read" | "refused" | "unreadable";
|
|
219
|
+
chars: number;
|
|
220
|
+
note: string | null;
|
|
221
|
+
}[], 96, undefined>]>, undefined>;
|
|
222
|
+
readonly siblingServices: v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 400, undefined>]>, undefined>;
|
|
223
|
+
readonly exploration: v.ObjectSchema<{
|
|
224
|
+
readonly calls: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
225
|
+
readonly maxCalls: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
226
|
+
readonly chars: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
227
|
+
readonly maxChars: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
228
|
+
readonly exhausted: v.NullableSchema<v.PicklistSchema<["calls", "chars"], undefined>, undefined>;
|
|
229
|
+
readonly recordsDropped: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
230
|
+
}, undefined>;
|
|
213
231
|
}, undefined>;
|
|
214
232
|
readonly decisions: v.ArraySchema<v.ObjectSchema<{
|
|
215
233
|
readonly id: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 80, undefined>]>;
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAoC5B,iEAAiE;AACjE,eAAO,MAAM,2BAA2B;;;;;IAKtC,mDAAmD;;IAEnD,8DAA8D;;IAE9D,gFAAgF;;;;aAIhF,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF,6CAA6C;AAC7C,eAAO,MAAM,iCAAiC;;;;;;aAM5C,CAAA;AACF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,WAAW,CAC1D,OAAO,iCAAiC,CACzC,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,iCAAiC;;;;;;aAM5C,CAAA;AACF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,WAAW,CAC1D,OAAO,iCAAiC,CACzC,CAAA;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,+FAMhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,kDAAkC,CAAA;AACnE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B;IACxC,kFAAkF;;IAElF;;;OAGG;;aAEH,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEzF,6FAA6F;AAC7F,eAAO,MAAM,0BAA0B;;;IAGrC,oEAAoE;;IAEpE,mEAAmE;;IAEnE,oFAAoF;;aAEpF,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,+GAQrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;aAAqB,CAAA;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,kDAAkD;AAClD,eAAO,MAAM,kBAAkB;;;IAG7B,8FAA8F;;IAE9F,4HAA4H;;IAE5H,gDAAgD;;IAEhD,wFAAwF;;IAExF,2EAA2E;;IAE3E,kFAAkF;;;IAGlF;;;;;;OAMG;;IAEH;;;;OAIG;;;;;;;;;;IAEH,qFAAqF;;IAErF,gFAAgF;;;;;;;;;;;;;;;;;;;IAEhF;;;;OAIG;;;;QAhFH,oEAAoE;;QAEpE,mEAAmE;;QAEnE,oFAAoF;;;IA8EpF,6EAA6E;;IAE7E,kFAAkF
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAoC5B,iEAAiE;AACjE,eAAO,MAAM,2BAA2B;;;;;IAKtC,mDAAmD;;IAEnD,8DAA8D;;IAE9D,gFAAgF;;;;aAIhF,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF,6CAA6C;AAC7C,eAAO,MAAM,iCAAiC;;;;;;aAM5C,CAAA;AACF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,WAAW,CAC1D,OAAO,iCAAiC,CACzC,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,iCAAiC;;;;;;aAM5C,CAAA;AACF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,WAAW,CAC1D,OAAO,iCAAiC,CACzC,CAAA;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,+FAMhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,kDAAkC,CAAA;AACnE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B;IACxC,kFAAkF;;IAElF;;;OAGG;;aAEH,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEzF,6FAA6F;AAC7F,eAAO,MAAM,0BAA0B;;;IAGrC,oEAAoE;;IAEpE,mEAAmE;;IAEnE,oFAAoF;;aAEpF,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,+GAQrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;aAAqB,CAAA;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,kDAAkD;AAClD,eAAO,MAAM,kBAAkB;;;IAG7B,8FAA8F;;IAE9F,4HAA4H;;IAE5H,gDAAgD;;IAEhD,wFAAwF;;IAExF,2EAA2E;;IAE3E,kFAAkF;;;IAGlF;;;;;;OAMG;;IAEH;;;;OAIG;;;;;;;;;;IAEH,qFAAqF;;IAErF,gFAAgF;;;;;;;;;;;;;;;;;;;IAEhF;;;;OAIG;;;;QAhFH,oEAAoE;;QAEpE,mEAAmE;;QAEnE,oFAAoF;;;IA8EpF,6EAA6E;;IAE7E,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAElF,kEAAkE;;;;;;;;;;;;;;IAElE;;;OAGG;;;;aAIH,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;IAE5B,sFAAsF;;IAEtF;;;OAGG;;IAEH;;;;;OAKG;;QAtIL,kFAAkF;;QAElF;;;WAGG;;;IAmID;;;OAGG;;IAEH,iDAAiD;;IAEjD,mEAAmE;;IAEnE;;;OAGG;;;;;;;;;;;;;oFAON,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
2
|
/**
|
|
3
|
-
* One
|
|
3
|
+
* One place a provider states traffic for its environment's URL host goes: an ADDRESS the platform
|
|
4
|
+
* dials as written, or a NAME it resolves when it dials.
|
|
4
5
|
*
|
|
5
6
|
* The motivating shape is an org running per-PR preview environments whose per-environment DNS
|
|
6
7
|
* record lives in an internal view while the load balancers fronting it are ordinary names and
|
|
@@ -8,16 +9,74 @@ import * as v from 'valibot';
|
|
|
8
9
|
* it. The only missing thing is a name-to-address mapping, which is exactly what a hosts-file
|
|
9
10
|
* entry (or a Kubernetes `hostAliases` entry) is.
|
|
10
11
|
*
|
|
12
|
+
* **Exactly one of {@link EnvironmentRouteCandidate.address} and
|
|
13
|
+
* {@link EnvironmentRouteCandidate.host} is set, and which one is the PROVIDER'S statement**, never
|
|
14
|
+
* something the platform reads off the spelling. Guessing would rest the security rule on a parse:
|
|
15
|
+
* `isBridgeableAddress` refuses a non-canonical literal precisely so `2130706433` cannot become
|
|
16
|
+
* loopback, and a resolver handed that same string answers loopback happily. A candidate stating
|
|
17
|
+
* neither (or both, which is two claims with no way to tell which was meant) therefore names no
|
|
18
|
+
* target at all and is RECORDED as one, on the same rule as an address no bridge may name.
|
|
19
|
+
*
|
|
11
20
|
* `label` is for the human reading a diagnostic ("internal ALB", "public ALB"), never for
|
|
12
21
|
* matching: the platform picks by PROBING, never by name.
|
|
13
22
|
*/
|
|
14
|
-
export declare const
|
|
15
|
-
/** An IP literal. Never a name:
|
|
16
|
-
readonly address: v.StringSchema<undefined>;
|
|
17
|
-
/**
|
|
23
|
+
export declare const environmentRouteCandidateSchema: v.ObjectSchema<{
|
|
24
|
+
/** An IP literal, dialled as written. Never a name: see {@link EnvironmentRouteCandidate.host}. */
|
|
25
|
+
readonly address: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* A NAME the platform RESOLVES at proof time, expanding it in place into the addresses it
|
|
28
|
+
* answers with.
|
|
29
|
+
*
|
|
30
|
+
* For the provider whose stable identity IS a name, which is the ordinary shape of a managed
|
|
31
|
+
* load balancer: an ALB's addresses change as it scales or gains a zone, and its DNS name is
|
|
32
|
+
* what the vendor documents a client should use. A provider stating the resolved literals
|
|
33
|
+
* instead re-pins a snapshot of that set on every poll, and owes bounded resolution, stable
|
|
34
|
+
* ordering and partial-failure handling of its own.
|
|
35
|
+
*
|
|
36
|
+
* Deliberately NOT the URL's own host, which is the lookup that already failed. This is a
|
|
37
|
+
* DIFFERENT name in a different zone, and its whole point is resolving when that one does not.
|
|
38
|
+
* Nothing downstream ever sees it: every address it resolves to is graded by
|
|
39
|
+
* `isBridgeableAddress` exactly as a stated address is, and the proof publishes the ADDRESS that
|
|
40
|
+
* carried with the name it came from beside it, so a bridge is still built from a literal the
|
|
41
|
+
* platform itself proved.
|
|
42
|
+
*/
|
|
43
|
+
readonly host: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
44
|
+
/** What this candidate IS, for the diagnostic. Never load-bearing. */
|
|
18
45
|
readonly label: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
19
46
|
}, undefined>;
|
|
20
|
-
export type
|
|
47
|
+
export type EnvironmentRouteCandidate = v.InferOutput<typeof environmentRouteCandidateSchema>;
|
|
48
|
+
/**
|
|
49
|
+
* What one candidate actually names, or that it names nothing usable.
|
|
50
|
+
*
|
|
51
|
+
* A discriminated result rather than two optional reads at every site, because the three cases
|
|
52
|
+
* want three different reactions and the third is the one a nullable read renders as absent. Read
|
|
53
|
+
* through this rather than off the fields, so "which kind is this" is answered once.
|
|
54
|
+
*/
|
|
55
|
+
export type StatedRouteTarget = {
|
|
56
|
+
kind: 'address';
|
|
57
|
+
address: string;
|
|
58
|
+
} | {
|
|
59
|
+
kind: 'host';
|
|
60
|
+
host: string;
|
|
61
|
+
} | {
|
|
62
|
+
kind: 'unusable';
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Read a stated candidate as the one thing it names.
|
|
66
|
+
*
|
|
67
|
+
* A host is lower-cased because DNS is case-insensitive and this value is both a map key and a
|
|
68
|
+
* comparison target: two spellings of one balancer name must not resolve twice, nor invalidate a
|
|
69
|
+
* proof by failing to match themselves.
|
|
70
|
+
*/
|
|
71
|
+
export declare function statedRouteTarget(candidate: EnvironmentRouteCandidate): StatedRouteTarget;
|
|
72
|
+
/**
|
|
73
|
+
* One candidate as a reader sees it: its value, its label, and a NAME marked as one.
|
|
74
|
+
*
|
|
75
|
+
* ONE renderer, because three surfaces print this list (the environment investigation's route
|
|
76
|
+
* section, its timeline entry and the diagnostics bundle) and a name printed into a sentence about
|
|
77
|
+
* "the addresses the provider stated" reads as an address somebody typed wrong.
|
|
78
|
+
*/
|
|
79
|
+
export declare function describeRouteCandidate(candidate: EnvironmentRouteCandidate): string;
|
|
21
80
|
/**
|
|
22
81
|
* Why a `ready` environment could not be reached, at the layer the platform can observe.
|
|
23
82
|
*
|
|
@@ -29,20 +88,33 @@ export type EnvironmentAddress = v.InferOutput<typeof environmentAddressSchema>;
|
|
|
29
88
|
*
|
|
30
89
|
* - `no_candidate` the environment carries no URL, or one with no host to probe. There
|
|
31
90
|
* was nothing to try, which is not the same as trying and failing.
|
|
32
|
-
* - `name_unresolved` the URL's host
|
|
91
|
+
* - `name_unresolved` a name resolved nowhere: the URL's own host, with no stated candidate
|
|
92
|
+
* carrying either, or one stated NAME whose own lookup answered nothing.
|
|
33
93
|
* - `no_route` something resolved and the connect never completed (timeout,
|
|
34
94
|
* host/network unreachable). The expensive failure: a lookup that
|
|
35
95
|
* worked followed by a connect that hangs.
|
|
36
96
|
* - `connection_refused` the route carries and nothing is listening on the port.
|
|
37
|
-
* - `address_refused` the provider stated
|
|
38
|
-
* link-local/vendor
|
|
39
|
-
*
|
|
40
|
-
*
|
|
97
|
+
* - `address_refused` the provider stated a target the platform will not dial: a loopback,
|
|
98
|
+
* link-local/vendor-metadata or non-canonical address (whether stated or
|
|
99
|
+
* resolved from a stated name), or a candidate naming no single target at
|
|
100
|
+
* all. Recorded as an attempt rather than dropped, because a refused input
|
|
101
|
+
* is an omission the operator has to be able to see.
|
|
102
|
+
* - `resolver_unavailable` the provider stated a NAME and nothing in this deployment can turn one
|
|
103
|
+
* into an address. An admission about the PLATFORM, never a verdict about
|
|
104
|
+
* the environment, so it leaves the route unruled-out exactly as
|
|
105
|
+
* `probe_failed` does.
|
|
106
|
+
* - `not_attempted` the platform stopped short of the list its provider stated: it looks up
|
|
107
|
+
* a bounded number of names and dials a bounded number of addresses, so a
|
|
108
|
+
* longer list is a PREFIX. Recorded ONCE, naming how many were passed
|
|
109
|
+
* over, because a reader who assumes a prefix concludes the tail was
|
|
110
|
+
* never stated. Another admission about the PLATFORM: a candidate nothing
|
|
111
|
+
* looked at cannot be part of a verdict that nothing reaches the
|
|
112
|
+
* environment.
|
|
41
113
|
* - `probe_failed` the probe itself errored in a way it could not classify. Kept apart
|
|
42
114
|
* from the three above so "we could not tell" never renders as a
|
|
43
115
|
* verdict about the environment.
|
|
44
116
|
*/
|
|
45
|
-
export declare const environmentUnreachableReasonSchema: v.PicklistSchema<["no_candidate", "name_unresolved", "no_route", "connection_refused", "address_refused", "probe_failed"], undefined>;
|
|
117
|
+
export declare const environmentUnreachableReasonSchema: v.PicklistSchema<["no_candidate", "name_unresolved", "no_route", "connection_refused", "address_refused", "resolver_unavailable", "not_attempted", "probe_failed"], undefined>;
|
|
46
118
|
export type EnvironmentUnreachableReason = v.InferOutput<typeof environmentUnreachableReasonSchema>;
|
|
47
119
|
/** One target the proof tried, in the order it was tried, and what came back. */
|
|
48
120
|
export declare const environmentRouteAttemptSchema: v.ObjectSchema<{
|
|
@@ -93,6 +165,21 @@ export declare const environmentRouteProofSchema: v.ObjectSchema<{
|
|
|
93
165
|
* then points further from the cause than no bridge at all did.
|
|
94
166
|
*/
|
|
95
167
|
readonly via: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
168
|
+
/**
|
|
169
|
+
* The stated NAME {@link via} was resolved from, when the candidate that carried was a host
|
|
170
|
+
* rather than an address. Absent when `via` is itself a stated address, when the URL's own name
|
|
171
|
+
* carried, and when nothing carried.
|
|
172
|
+
*
|
|
173
|
+
* Recorded because the fold decides a `reached` proof's survival on whether the target it names
|
|
174
|
+
* is still on offer, and for a resolved name that target is the NAME. The address is a snapshot
|
|
175
|
+
* of a set that rotates (a balancer scaling or gaining a zone changes it, and tells the platform
|
|
176
|
+
* nothing about whether the proved route still carries), so matching `via` against the candidate
|
|
177
|
+
* list would drop a good proof on every such event and pay a fresh probe sequence for it.
|
|
178
|
+
*
|
|
179
|
+
* Optional so a proof written before this existed still parses, where its absence reads as the
|
|
180
|
+
* address case, which is what it was.
|
|
181
|
+
*/
|
|
182
|
+
readonly viaHost: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
96
183
|
/**
|
|
97
184
|
* The {@link EnvironmentUnreachableReason} when `state` is `not_reached` or `inconclusive`,
|
|
98
185
|
* else null. An open string on the wire so a stored proof written by an older build never fails
|
|
@@ -130,11 +217,32 @@ export type EnvironmentRouteProof = v.InferOutput<typeof environmentRouteProofSc
|
|
|
130
217
|
* offered as well as which were reached, and a re-probe on a later poll re-reads the same claim.
|
|
131
218
|
*/
|
|
132
219
|
export declare const environmentReachabilitySchema: v.ObjectSchema<{
|
|
133
|
-
/**
|
|
220
|
+
/**
|
|
221
|
+
* The addresses and names the provider states carry traffic for the URL's host, in ITS
|
|
222
|
+
* preference order.
|
|
223
|
+
*/
|
|
134
224
|
readonly candidates: v.ArraySchema<v.ObjectSchema<{
|
|
135
|
-
/** An IP literal. Never a name:
|
|
136
|
-
readonly address: v.StringSchema<undefined>;
|
|
137
|
-
/**
|
|
225
|
+
/** An IP literal, dialled as written. Never a name: see {@link EnvironmentRouteCandidate.host}. */
|
|
226
|
+
readonly address: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
227
|
+
/**
|
|
228
|
+
* A NAME the platform RESOLVES at proof time, expanding it in place into the addresses it
|
|
229
|
+
* answers with.
|
|
230
|
+
*
|
|
231
|
+
* For the provider whose stable identity IS a name, which is the ordinary shape of a managed
|
|
232
|
+
* load balancer: an ALB's addresses change as it scales or gains a zone, and its DNS name is
|
|
233
|
+
* what the vendor documents a client should use. A provider stating the resolved literals
|
|
234
|
+
* instead re-pins a snapshot of that set on every poll, and owes bounded resolution, stable
|
|
235
|
+
* ordering and partial-failure handling of its own.
|
|
236
|
+
*
|
|
237
|
+
* Deliberately NOT the URL's own host, which is the lookup that already failed. This is a
|
|
238
|
+
* DIFFERENT name in a different zone, and its whole point is resolving when that one does not.
|
|
239
|
+
* Nothing downstream ever sees it: every address it resolves to is graded by
|
|
240
|
+
* `isBridgeableAddress` exactly as a stated address is, and the proof publishes the ADDRESS that
|
|
241
|
+
* carried with the name it came from beside it, so a bridge is still built from a literal the
|
|
242
|
+
* platform itself proved.
|
|
243
|
+
*/
|
|
244
|
+
readonly host: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
245
|
+
/** What this candidate IS, for the diagnostic. Never load-bearing. */
|
|
138
246
|
readonly label: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
139
247
|
}, undefined>, undefined>;
|
|
140
248
|
/** What proving found, or null when nothing has probed this environment yet. */
|
|
@@ -150,6 +258,21 @@ export declare const environmentReachabilitySchema: v.ObjectSchema<{
|
|
|
150
258
|
* then points further from the cause than no bridge at all did.
|
|
151
259
|
*/
|
|
152
260
|
readonly via: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
261
|
+
/**
|
|
262
|
+
* The stated NAME {@link via} was resolved from, when the candidate that carried was a host
|
|
263
|
+
* rather than an address. Absent when `via` is itself a stated address, when the URL's own name
|
|
264
|
+
* carried, and when nothing carried.
|
|
265
|
+
*
|
|
266
|
+
* Recorded because the fold decides a `reached` proof's survival on whether the target it names
|
|
267
|
+
* is still on offer, and for a resolved name that target is the NAME. The address is a snapshot
|
|
268
|
+
* of a set that rotates (a balancer scaling or gaining a zone changes it, and tells the platform
|
|
269
|
+
* nothing about whether the proved route still carries), so matching `via` against the candidate
|
|
270
|
+
* list would drop a good proof on every such event and pay a fresh probe sequence for it.
|
|
271
|
+
*
|
|
272
|
+
* Optional so a proof written before this existed still parses, where its absence reads as the
|
|
273
|
+
* address case, which is what it was.
|
|
274
|
+
*/
|
|
275
|
+
readonly viaHost: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
153
276
|
/**
|
|
154
277
|
* The {@link EnvironmentUnreachableReason} when `state` is `not_reached` or `inconclusive`,
|
|
155
278
|
* else null. An open string on the wire so a stored proof written by an older build never fails
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-reachability.d.ts","sourceRoot":"","sources":["../src/environment-reachability.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B
|
|
1
|
+
{"version":3,"file":"environment-reachability.d.ts","sourceRoot":"","sources":["../src/environment-reachability.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
// in that vocabulary.
|
|
19
19
|
import * as v from 'valibot';
|
|
20
20
|
/**
|
|
21
|
-
* One
|
|
21
|
+
* One place a provider states traffic for its environment's URL host goes: an ADDRESS the platform
|
|
22
|
+
* dials as written, or a NAME it resolves when it dials.
|
|
22
23
|
*
|
|
23
24
|
* The motivating shape is an org running per-PR preview environments whose per-environment DNS
|
|
24
25
|
* record lives in an internal view while the load balancers fronting it are ordinary names and
|
|
@@ -26,15 +27,77 @@ import * as v from 'valibot';
|
|
|
26
27
|
* it. The only missing thing is a name-to-address mapping, which is exactly what a hosts-file
|
|
27
28
|
* entry (or a Kubernetes `hostAliases` entry) is.
|
|
28
29
|
*
|
|
30
|
+
* **Exactly one of {@link EnvironmentRouteCandidate.address} and
|
|
31
|
+
* {@link EnvironmentRouteCandidate.host} is set, and which one is the PROVIDER'S statement**, never
|
|
32
|
+
* something the platform reads off the spelling. Guessing would rest the security rule on a parse:
|
|
33
|
+
* `isBridgeableAddress` refuses a non-canonical literal precisely so `2130706433` cannot become
|
|
34
|
+
* loopback, and a resolver handed that same string answers loopback happily. A candidate stating
|
|
35
|
+
* neither (or both, which is two claims with no way to tell which was meant) therefore names no
|
|
36
|
+
* target at all and is RECORDED as one, on the same rule as an address no bridge may name.
|
|
37
|
+
*
|
|
29
38
|
* `label` is for the human reading a diagnostic ("internal ALB", "public ALB"), never for
|
|
30
39
|
* matching: the platform picks by PROBING, never by name.
|
|
31
40
|
*/
|
|
32
|
-
export const
|
|
33
|
-
/** An IP literal. Never a name:
|
|
34
|
-
address: v.string(),
|
|
35
|
-
/**
|
|
41
|
+
export const environmentRouteCandidateSchema = v.object({
|
|
42
|
+
/** An IP literal, dialled as written. Never a name: see {@link EnvironmentRouteCandidate.host}. */
|
|
43
|
+
address: v.optional(v.string()),
|
|
44
|
+
/**
|
|
45
|
+
* A NAME the platform RESOLVES at proof time, expanding it in place into the addresses it
|
|
46
|
+
* answers with.
|
|
47
|
+
*
|
|
48
|
+
* For the provider whose stable identity IS a name, which is the ordinary shape of a managed
|
|
49
|
+
* load balancer: an ALB's addresses change as it scales or gains a zone, and its DNS name is
|
|
50
|
+
* what the vendor documents a client should use. A provider stating the resolved literals
|
|
51
|
+
* instead re-pins a snapshot of that set on every poll, and owes bounded resolution, stable
|
|
52
|
+
* ordering and partial-failure handling of its own.
|
|
53
|
+
*
|
|
54
|
+
* Deliberately NOT the URL's own host, which is the lookup that already failed. This is a
|
|
55
|
+
* DIFFERENT name in a different zone, and its whole point is resolving when that one does not.
|
|
56
|
+
* Nothing downstream ever sees it: every address it resolves to is graded by
|
|
57
|
+
* `isBridgeableAddress` exactly as a stated address is, and the proof publishes the ADDRESS that
|
|
58
|
+
* carried with the name it came from beside it, so a bridge is still built from a literal the
|
|
59
|
+
* platform itself proved.
|
|
60
|
+
*/
|
|
61
|
+
host: v.optional(v.string()),
|
|
62
|
+
/** What this candidate IS, for the diagnostic. Never load-bearing. */
|
|
36
63
|
label: v.optional(v.string()),
|
|
37
64
|
});
|
|
65
|
+
/**
|
|
66
|
+
* Read a stated candidate as the one thing it names.
|
|
67
|
+
*
|
|
68
|
+
* A host is lower-cased because DNS is case-insensitive and this value is both a map key and a
|
|
69
|
+
* comparison target: two spellings of one balancer name must not resolve twice, nor invalidate a
|
|
70
|
+
* proof by failing to match themselves.
|
|
71
|
+
*/
|
|
72
|
+
export function statedRouteTarget(candidate) {
|
|
73
|
+
const address = candidate.address?.trim() ?? '';
|
|
74
|
+
const host = candidate.host?.trim().toLowerCase() ?? '';
|
|
75
|
+
if (address && host)
|
|
76
|
+
return { kind: 'unusable' };
|
|
77
|
+
if (address)
|
|
78
|
+
return { kind: 'address', address };
|
|
79
|
+
if (host)
|
|
80
|
+
return { kind: 'host', host };
|
|
81
|
+
return { kind: 'unusable' };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* One candidate as a reader sees it: its value, its label, and a NAME marked as one.
|
|
85
|
+
*
|
|
86
|
+
* ONE renderer, because three surfaces print this list (the environment investigation's route
|
|
87
|
+
* section, its timeline entry and the diagnostics bundle) and a name printed into a sentence about
|
|
88
|
+
* "the addresses the provider stated" reads as an address somebody typed wrong.
|
|
89
|
+
*/
|
|
90
|
+
export function describeRouteCandidate(candidate) {
|
|
91
|
+
const stated = statedRouteTarget(candidate);
|
|
92
|
+
const label = candidate.label?.trim();
|
|
93
|
+
if (stated.kind === 'address')
|
|
94
|
+
return label ? `${stated.address} (${label})` : stated.address;
|
|
95
|
+
if (stated.kind === 'host')
|
|
96
|
+
return `${stated.host} (name${label ? `, ${label}` : ''})`;
|
|
97
|
+
return label
|
|
98
|
+
? `an entry stating no usable target (${label})`
|
|
99
|
+
: 'an entry stating no usable target';
|
|
100
|
+
}
|
|
38
101
|
/**
|
|
39
102
|
* Why a `ready` environment could not be reached, at the layer the platform can observe.
|
|
40
103
|
*
|
|
@@ -46,15 +109,28 @@ export const environmentAddressSchema = v.object({
|
|
|
46
109
|
*
|
|
47
110
|
* - `no_candidate` the environment carries no URL, or one with no host to probe. There
|
|
48
111
|
* was nothing to try, which is not the same as trying and failing.
|
|
49
|
-
* - `name_unresolved` the URL's host
|
|
112
|
+
* - `name_unresolved` a name resolved nowhere: the URL's own host, with no stated candidate
|
|
113
|
+
* carrying either, or one stated NAME whose own lookup answered nothing.
|
|
50
114
|
* - `no_route` something resolved and the connect never completed (timeout,
|
|
51
115
|
* host/network unreachable). The expensive failure: a lookup that
|
|
52
116
|
* worked followed by a connect that hangs.
|
|
53
117
|
* - `connection_refused` the route carries and nothing is listening on the port.
|
|
54
|
-
* - `address_refused` the provider stated
|
|
55
|
-
* link-local/vendor
|
|
56
|
-
*
|
|
57
|
-
*
|
|
118
|
+
* - `address_refused` the provider stated a target the platform will not dial: a loopback,
|
|
119
|
+
* link-local/vendor-metadata or non-canonical address (whether stated or
|
|
120
|
+
* resolved from a stated name), or a candidate naming no single target at
|
|
121
|
+
* all. Recorded as an attempt rather than dropped, because a refused input
|
|
122
|
+
* is an omission the operator has to be able to see.
|
|
123
|
+
* - `resolver_unavailable` the provider stated a NAME and nothing in this deployment can turn one
|
|
124
|
+
* into an address. An admission about the PLATFORM, never a verdict about
|
|
125
|
+
* the environment, so it leaves the route unruled-out exactly as
|
|
126
|
+
* `probe_failed` does.
|
|
127
|
+
* - `not_attempted` the platform stopped short of the list its provider stated: it looks up
|
|
128
|
+
* a bounded number of names and dials a bounded number of addresses, so a
|
|
129
|
+
* longer list is a PREFIX. Recorded ONCE, naming how many were passed
|
|
130
|
+
* over, because a reader who assumes a prefix concludes the tail was
|
|
131
|
+
* never stated. Another admission about the PLATFORM: a candidate nothing
|
|
132
|
+
* looked at cannot be part of a verdict that nothing reaches the
|
|
133
|
+
* environment.
|
|
58
134
|
* - `probe_failed` the probe itself errored in a way it could not classify. Kept apart
|
|
59
135
|
* from the three above so "we could not tell" never renders as a
|
|
60
136
|
* verdict about the environment.
|
|
@@ -65,6 +141,8 @@ export const environmentUnreachableReasonSchema = v.picklist([
|
|
|
65
141
|
'no_route',
|
|
66
142
|
'connection_refused',
|
|
67
143
|
'address_refused',
|
|
144
|
+
'resolver_unavailable',
|
|
145
|
+
'not_attempted',
|
|
68
146
|
'probe_failed',
|
|
69
147
|
]);
|
|
70
148
|
/** One target the proof tried, in the order it was tried, and what came back. */
|
|
@@ -115,6 +193,21 @@ export const environmentRouteProofSchema = v.object({
|
|
|
115
193
|
* then points further from the cause than no bridge at all did.
|
|
116
194
|
*/
|
|
117
195
|
via: v.nullable(v.string()),
|
|
196
|
+
/**
|
|
197
|
+
* The stated NAME {@link via} was resolved from, when the candidate that carried was a host
|
|
198
|
+
* rather than an address. Absent when `via` is itself a stated address, when the URL's own name
|
|
199
|
+
* carried, and when nothing carried.
|
|
200
|
+
*
|
|
201
|
+
* Recorded because the fold decides a `reached` proof's survival on whether the target it names
|
|
202
|
+
* is still on offer, and for a resolved name that target is the NAME. The address is a snapshot
|
|
203
|
+
* of a set that rotates (a balancer scaling or gaining a zone changes it, and tells the platform
|
|
204
|
+
* nothing about whether the proved route still carries), so matching `via` against the candidate
|
|
205
|
+
* list would drop a good proof on every such event and pay a fresh probe sequence for it.
|
|
206
|
+
*
|
|
207
|
+
* Optional so a proof written before this existed still parses, where its absence reads as the
|
|
208
|
+
* address case, which is what it was.
|
|
209
|
+
*/
|
|
210
|
+
viaHost: v.optional(v.string()),
|
|
118
211
|
/**
|
|
119
212
|
* The {@link EnvironmentUnreachableReason} when `state` is `not_reached` or `inconclusive`,
|
|
120
213
|
* else null. An open string on the wire so a stored proof written by an older build never fails
|
|
@@ -136,8 +229,11 @@ export const environmentRouteProofSchema = v.object({
|
|
|
136
229
|
* offered as well as which were reached, and a re-probe on a later poll re-reads the same claim.
|
|
137
230
|
*/
|
|
138
231
|
export const environmentReachabilitySchema = v.object({
|
|
139
|
-
/**
|
|
140
|
-
|
|
232
|
+
/**
|
|
233
|
+
* The addresses and names the provider states carry traffic for the URL's host, in ITS
|
|
234
|
+
* preference order.
|
|
235
|
+
*/
|
|
236
|
+
candidates: v.array(environmentRouteCandidateSchema),
|
|
141
237
|
/** What proving found, or null when nothing has probed this environment yet. */
|
|
142
238
|
proof: v.nullable(environmentRouteProofSchema),
|
|
143
239
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-reachability.js","sourceRoot":"","sources":["../src/environment-reachability.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,eAAe;AACf,EAAE;AACF,0FAA0F;AAC1F,iGAAiG;AACjG,gGAAgG;AAChG,gGAAgG;AAChG,+FAA+F;AAC/F,2FAA2F;AAC3F,eAAe;AACf,EAAE;AACF,6FAA6F;AAC7F,oFAAoF;AACpF,4FAA4F;AAC5F,6FAA6F;AAC7F,gGAAgG;AAChG,iGAAiG;AACjG,sBAAsB;AAEtB,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B
|
|
1
|
+
{"version":3,"file":"environment-reachability.js","sourceRoot":"","sources":["../src/environment-reachability.ts"],"names":[],"mappings":"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"}
|