@cat-factory/contracts 0.339.0 → 0.341.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 +135 -4
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +82 -3
- package/dist/bootstrap.js.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/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +14 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/monorepo-adoption.d.ts +220 -0
- package/dist/monorepo-adoption.d.ts.map +1 -0
- package/dist/monorepo-adoption.js +201 -0
- package/dist/monorepo-adoption.js.map +1 -0
- package/dist/public-provisioning.d.ts +13 -2
- package/dist/public-provisioning.d.ts.map +1 -1
- package/dist/public-provisioning.js +12 -1
- package/dist/public-provisioning.js.map +1 -1
- package/dist/routes/agent-runs.d.ts +94 -2
- package/dist/routes/agent-runs.d.ts.map +1 -1
- package/dist/routes/bootstrap.d.ts +289 -3
- package/dist/routes/bootstrap.d.ts.map +1 -1
- package/dist/routes/bootstrap.js +19 -0
- package/dist/routes/bootstrap.js.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/public-provisioning.d.ts +4 -2
- package/dist/routes/public-provisioning.d.ts.map +1 -1
- package/dist/routes/workspaces.d.ts +94 -2
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/snapshot.d.ts +47 -1
- package/dist/snapshot.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -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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"}
|