typekro 0.34.0 → 0.36.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 (90) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/alchemy/clickhouse-schema/executor.d.ts +25 -0
  3. package/dist/alchemy/clickhouse-schema/executor.d.ts.map +1 -0
  4. package/dist/alchemy/clickhouse-schema/executor.js +144 -0
  5. package/dist/alchemy/clickhouse-schema/executor.js.map +1 -0
  6. package/dist/alchemy/clickhouse-schema/index.d.ts +12 -0
  7. package/dist/alchemy/clickhouse-schema/index.d.ts.map +1 -0
  8. package/dist/alchemy/clickhouse-schema/index.js +11 -0
  9. package/dist/alchemy/clickhouse-schema/index.js.map +1 -0
  10. package/dist/alchemy/clickhouse-schema/resource.d.ts +54 -0
  11. package/dist/alchemy/clickhouse-schema/resource.d.ts.map +1 -0
  12. package/dist/alchemy/clickhouse-schema/resource.js +158 -0
  13. package/dist/alchemy/clickhouse-schema/resource.js.map +1 -0
  14. package/dist/alchemy/clickhouse-schema/runner.d.ts +154 -0
  15. package/dist/alchemy/clickhouse-schema/runner.d.ts.map +1 -0
  16. package/dist/alchemy/clickhouse-schema/runner.js +613 -0
  17. package/dist/alchemy/clickhouse-schema/runner.js.map +1 -0
  18. package/dist/alchemy/clickhouse-schema/sql.d.ts +109 -0
  19. package/dist/alchemy/clickhouse-schema/sql.d.ts.map +1 -0
  20. package/dist/alchemy/clickhouse-schema/sql.js +368 -0
  21. package/dist/alchemy/clickhouse-schema/sql.js.map +1 -0
  22. package/dist/alchemy/clickhouse-schema/types.d.ts +394 -0
  23. package/dist/alchemy/clickhouse-schema/types.d.ts.map +1 -0
  24. package/dist/alchemy/clickhouse-schema/types.js +370 -0
  25. package/dist/alchemy/clickhouse-schema/types.js.map +1 -0
  26. package/dist/alchemy/index.d.ts +1 -0
  27. package/dist/alchemy/index.d.ts.map +1 -1
  28. package/dist/alchemy/index.js +2 -0
  29. package/dist/alchemy/index.js.map +1 -1
  30. package/dist/alchemy/kro-delete.d.ts +7 -0
  31. package/dist/alchemy/kro-delete.d.ts.map +1 -1
  32. package/dist/alchemy/kro-delete.js +28 -4
  33. package/dist/alchemy/kro-delete.js.map +1 -1
  34. package/dist/alchemy/resource-registration.d.ts +9 -2
  35. package/dist/alchemy/resource-registration.d.ts.map +1 -1
  36. package/dist/alchemy/resource-registration.js +117 -33
  37. package/dist/alchemy/resource-registration.js.map +1 -1
  38. package/dist/core/deployment/k8s-helpers.d.ts +77 -1
  39. package/dist/core/deployment/k8s-helpers.d.ts.map +1 -1
  40. package/dist/core/deployment/k8s-helpers.js +298 -17
  41. package/dist/core/deployment/k8s-helpers.js.map +1 -1
  42. package/dist/core/deployment/kro-artifact-binding-migration.d.ts +17 -6
  43. package/dist/core/deployment/kro-artifact-binding-migration.d.ts.map +1 -1
  44. package/dist/core/deployment/kro-artifact-binding-migration.js +16 -2
  45. package/dist/core/deployment/kro-artifact-binding-migration.js.map +1 -1
  46. package/dist/core/deployment/kro-namespace-teardown.d.ts +15 -1
  47. package/dist/core/deployment/kro-namespace-teardown.d.ts.map +1 -1
  48. package/dist/core/deployment/kro-namespace-teardown.js +34 -9
  49. package/dist/core/deployment/kro-namespace-teardown.js.map +1 -1
  50. package/dist/core/deployment/kro-readiness.d.ts +35 -0
  51. package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
  52. package/dist/core/deployment/kro-readiness.js +201 -25
  53. package/dist/core/deployment/kro-readiness.js.map +1 -1
  54. package/dist/core/deployment/poll-timeout.d.ts +80 -2
  55. package/dist/core/deployment/poll-timeout.d.ts.map +1 -1
  56. package/dist/core/deployment/poll-timeout.js +164 -4
  57. package/dist/core/deployment/poll-timeout.js.map +1 -1
  58. package/dist/core/kubernetes/bun-http-library.d.ts +24 -0
  59. package/dist/core/kubernetes/bun-http-library.d.ts.map +1 -1
  60. package/dist/core/kubernetes/bun-http-library.js +146 -19
  61. package/dist/core/kubernetes/bun-http-library.js.map +1 -1
  62. package/dist/core/kubernetes/errors.d.ts +9 -0
  63. package/dist/core/kubernetes/errors.d.ts.map +1 -1
  64. package/dist/core/kubernetes/errors.js +7 -3
  65. package/dist/core/kubernetes/errors.js.map +1 -1
  66. package/dist/factories/clickhouse/compositions/clickhouse-cluster.d.ts +24 -2
  67. package/dist/factories/clickhouse/compositions/clickhouse-cluster.d.ts.map +1 -1
  68. package/dist/factories/clickhouse/compositions/clickhouse-cluster.js +24 -2
  69. package/dist/factories/clickhouse/compositions/clickhouse-cluster.js.map +1 -1
  70. package/dist/factories/clickhouse/resources/keeper.d.ts +61 -0
  71. package/dist/factories/clickhouse/resources/keeper.d.ts.map +1 -1
  72. package/dist/factories/clickhouse/resources/keeper.js +216 -2
  73. package/dist/factories/clickhouse/resources/keeper.js.map +1 -1
  74. package/dist/factories/clickhouse/resources/s3-backup.d.ts.map +1 -1
  75. package/dist/factories/clickhouse/resources/s3-backup.js +4 -3
  76. package/dist/factories/clickhouse/resources/s3-backup.js.map +1 -1
  77. package/dist/factories/clickhouse/types.d.ts +3 -2
  78. package/dist/factories/clickhouse/types.d.ts.map +1 -1
  79. package/dist/factories/clickhouse/types.js +28 -1
  80. package/dist/factories/clickhouse/types.js.map +1 -1
  81. package/dist/factories/clickhouse/utils/validation.d.ts +133 -10
  82. package/dist/factories/clickhouse/utils/validation.d.ts.map +1 -1
  83. package/dist/factories/clickhouse/utils/validation.js +165 -18
  84. package/dist/factories/clickhouse/utils/validation.js.map +1 -1
  85. package/dist/factories/clickstack/compositions/clickstack-bootstrap.d.ts +15 -1
  86. package/dist/factories/clickstack/compositions/clickstack-bootstrap.d.ts.map +1 -1
  87. package/dist/factories/clickstack/compositions/clickstack-bootstrap.js +15 -1
  88. package/dist/factories/clickstack/compositions/clickstack-bootstrap.js.map +1 -1
  89. package/dist/factories/rook/types.d.ts +16 -16
  90. package/package.json +1 -1
@@ -19,15 +19,42 @@
19
19
  * exec-auth failure mode is to avoid per-request exec auth during polling (e.g. a pre-minted bearer token
20
20
  * in the kubeconfig), so no credential subprocess is spawned in the first place.
21
21
  */
22
- /** Thrown when a readiness-poll API call exceeds its per-call budget (distinguishable so callers can fail fast vs. retry). */
23
- export class PollTimeoutError extends Error {
22
+ import { DEFAULT_HTTP_DELETE_TIMEOUT, DEFAULT_HTTP_READ_TIMEOUT, DEFAULT_HTTP_WRITE_TIMEOUT, } from '../config/defaults.js';
23
+ /**
24
+ * A Kubernetes request that did not return within its budget — whichever layer noticed first.
25
+ *
26
+ * TWO layers can time the same request out, and callers must not have to care which won. The Bun
27
+ * HTTP library arms its socket timer synchronously while the request is being issued; a wrapper
28
+ * added by {@link withCallDeadline} arms its timer afterwards. With equal budgets the socket timer
29
+ * therefore fires FIRST, so a gate that recognised only the wrapper's error would treat a genuine
30
+ * timeout as an ordinary failure — and a gate that fails OPEN on ordinary failures would silently
31
+ * skip its assertion. Both layers raise this type; {@link isRequestTimeoutError} recognises it.
32
+ */
33
+ export class RequestTimeoutError extends Error {
24
34
  timeoutMs;
35
+ /** Structural marker, so recognition survives duplicate module instances where `instanceof` does not. */
36
+ isRequestTimeout = true;
37
+ constructor(message, timeoutMs) {
38
+ super(message);
39
+ this.name = 'RequestTimeoutError';
40
+ this.timeoutMs = timeoutMs;
41
+ }
42
+ }
43
+ /** True for a timeout raised by EITHER timing layer — the socket's or a {@link withCallDeadline} wrapper's. */
44
+ export function isRequestTimeoutError(error) {
45
+ if (error instanceof RequestTimeoutError)
46
+ return true;
47
+ return (typeof error === 'object' &&
48
+ error !== null &&
49
+ error.isRequestTimeout === true);
50
+ }
51
+ /** Thrown when a readiness-poll API call exceeds its per-call budget (distinguishable so callers can fail fast vs. retry). */
52
+ export class PollTimeoutError extends RequestTimeoutError {
25
53
  constructor(label, timeoutMs) {
26
54
  super(`${label} exceeded its ${timeoutMs}ms request timeout — the Kubernetes API call did not return. ` +
27
55
  `The usual cause is a wedged or expired kubeconfig exec credential (e.g. an AWS SSO/EKS token ` +
28
- `that expired mid-deploy). Re-run with fresh credentials.`);
56
+ `that expired mid-deploy). Re-run with fresh credentials.`, timeoutMs);
29
57
  this.name = 'PollTimeoutError';
30
- this.timeoutMs = timeoutMs;
31
58
  }
32
59
  }
33
60
  /**
@@ -75,4 +102,137 @@ export async function callWithTimeout(op, timeoutMs, label, abortSignal) {
75
102
  export function perCallTimeout(remainingMs, capMs) {
76
103
  return Math.min(capMs, remainingMs);
77
104
  }
105
+ /** A positive, finite number, or `fallback`. Guards against `0`, `-1`, `NaN` and `Infinity`. */
106
+ function positiveOr(value, fallback) {
107
+ return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : fallback;
108
+ }
109
+ /**
110
+ * Derive a per-verb budget from a caller's {@link HttpTimeoutConfig}-shaped options, each verb
111
+ * capped by `capMs` (normally the deployment timeout) so one request can never outlive the
112
+ * operation it belongs to. Non-positive / non-finite values fall back to the repo defaults —
113
+ * notably `timeout: 0`, which is NOT nullish and would otherwise collapse every budget to zero.
114
+ */
115
+ export function callDeadlineBudget(timeouts, capMs) {
116
+ const cap = positiveOr(capMs, Number.POSITIVE_INFINITY);
117
+ // NO cross-fallback between `create` and `update`: they are separate knobs in `HttpTimeoutConfig`
118
+ // and each falls back only to the shared write default. Letting one stand in for the other means a
119
+ // caller who configured `{ create: 180_000, update: 30_000 }` silently gets 180s on every PATCH —
120
+ // exactly the conflation this budget exists to avoid.
121
+ return {
122
+ read: Math.min(positiveOr(timeouts?.default, DEFAULT_HTTP_READ_TIMEOUT), cap),
123
+ create: Math.min(positiveOr(timeouts?.create, DEFAULT_HTTP_WRITE_TIMEOUT), cap),
124
+ update: Math.min(positiveOr(timeouts?.update, DEFAULT_HTTP_WRITE_TIMEOUT), cap),
125
+ delete: Math.min(positiveOr(timeouts?.delete, DEFAULT_HTTP_DELETE_TIMEOUT), cap),
126
+ };
127
+ }
128
+ /** Method-name fragments that identify a create (POST). Matched case-insensitively. */
129
+ const CREATE_METHOD_PATTERN = /create|post/i;
130
+ /** Method-name fragments that identify an update (PUT / PATCH, including server-side apply). */
131
+ const UPDATE_METHOD_PATTERN = /replace|patch|update|put|apply/i;
132
+ /** Method-name fragments that identify a delete. Matched case-insensitively, checked FIRST. */
133
+ const DELETE_METHOD_PATTERN = /delete|remove/i;
134
+ /**
135
+ * Classify a client method by name so it is bounded by its own verb's budget, matching the split the
136
+ * HTTP layer already makes by method (POST → create, PUT/PATCH → update, DELETE → delete). Anything
137
+ * else — `read`, `list`, `get*`, `listClusterCustomObject`, and any method a future client version
138
+ * adds — is treated as a READ, the shortest budget. Erring toward the short budget is deliberate: a
139
+ * misclassified call fails fast and visibly rather than hanging. A combined name (`createOrReplace`)
140
+ * resolves to `create`, the verb such a helper attempts first.
141
+ */
142
+ export function callDeadlineVerb(method) {
143
+ if (DELETE_METHOD_PATTERN.test(method))
144
+ return 'delete';
145
+ if (CREATE_METHOD_PATTERN.test(method))
146
+ return 'create';
147
+ if (UPDATE_METHOD_PATTERN.test(method))
148
+ return 'update';
149
+ return 'read';
150
+ }
151
+ function isThenable(value) {
152
+ return (typeof value === 'object' &&
153
+ value !== null &&
154
+ typeof value.then === 'function');
155
+ }
156
+ /**
157
+ * Race an already-started operation against its budget and an abort signal. Unlike
158
+ * {@link callWithTimeout} a non-positive / non-finite budget is allowed: the abort race still
159
+ * applies, only the timer is skipped. Used by {@link withCallDeadline}, where dropping the abort
160
+ * plumbing because a budget was misconfigured would be its own silent hang.
161
+ */
162
+ function raceDeadline(operation, budgetMs, label, abortSignal) {
163
+ const bounded = Number.isFinite(budgetMs) && budgetMs > 0;
164
+ if (!bounded && !abortSignal)
165
+ return operation;
166
+ let timer;
167
+ let detachAbort = () => undefined;
168
+ const races = [operation];
169
+ if (bounded) {
170
+ races.push(new Promise((_, reject) => {
171
+ timer = setTimeout(() => reject(new PollTimeoutError(label, budgetMs)), budgetMs);
172
+ }));
173
+ }
174
+ if (abortSignal) {
175
+ races.push(new Promise((_, reject) => {
176
+ if (abortSignal.aborted) {
177
+ reject(abortSignal.reason ?? new DOMException('The operation was aborted', 'AbortError'));
178
+ return;
179
+ }
180
+ const onAbort = () => reject(abortSignal.reason ?? new DOMException('The operation was aborted', 'AbortError'));
181
+ abortSignal.addEventListener('abort', onAbort, { once: true });
182
+ detachAbort = () => abortSignal.removeEventListener('abort', onAbort);
183
+ }));
184
+ }
185
+ return Promise.race(races).finally(() => {
186
+ if (timer)
187
+ clearTimeout(timer);
188
+ detachAbort();
189
+ });
190
+ }
191
+ /**
192
+ * Wrap a Kubernetes API client so every request it issues is bounded by its verb's budget.
193
+ *
194
+ * Readiness polls already bound their own calls (see {@link callWithTimeout}); everything a handler
195
+ * does AROUND a deploy — drift checks, safety gates, CRD migrations, teardown — historically did
196
+ * not, so a single wedged request (a hung exec credential, a half-open socket, an API server that
197
+ * accepts the connection and never answers) hangs the whole reconcile with no log line and no
198
+ * error. Bounding at the client makes each of those calls reject with a {@link PollTimeoutError}
199
+ * naming the client and the method.
200
+ *
201
+ * EVERY function-valued property is wrapped, not an allow-list of known method names: a client
202
+ * method this module has never heard of must not silently escape the bound. A wrapped call whose
203
+ * return value is not thenable is handed back untouched, so synchronous helpers keep working.
204
+ *
205
+ * Same SCOPE / LIMITATION as {@link callWithTimeout}: this bounds the caller's `await`, it does not
206
+ * cancel the in-flight request or kill a wedged exec-auth subprocess.
207
+ */
208
+ export function withCallDeadline(api, options) {
209
+ const { budget, label, abortSignal } = options;
210
+ const wrapped = new WeakMap();
211
+ return new Proxy(api, {
212
+ get(target, property) {
213
+ const value = Reflect.get(target, property);
214
+ if (typeof value !== 'function' || typeof property !== 'string')
215
+ return value;
216
+ const cached = wrapped.get(value);
217
+ if (cached)
218
+ return cached;
219
+ const method = value;
220
+ const budgetMs = budget[callDeadlineVerb(property)];
221
+ const bound = (...args) => {
222
+ // Check the signal BEFORE the call, not just inside `raceDeadline`. Racing an
223
+ // already-aborted signal still STARTS the request: the caller's promise rejects, but the
224
+ // write or delete has already left for the API server. In a replacement sequence
225
+ // (delete → wait for the 404 → create) an abort landing in that window would cancel the
226
+ // deployment and create the object anyway.
227
+ abortSignal?.throwIfAborted();
228
+ const result = method.apply(target, args);
229
+ if (!isThenable(result))
230
+ return result;
231
+ return raceDeadline(result, budgetMs, `${label} ${property}`, abortSignal);
232
+ };
233
+ wrapped.set(value, bound);
234
+ return bound;
235
+ },
236
+ });
237
+ }
78
238
  //# sourceMappingURL=poll-timeout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"poll-timeout.js","sourceRoot":"","sources":["../../../src/core/deployment/poll-timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,8HAA8H;AAC9H,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,SAAS,CAAS;IAC3B,YAAY,KAAa,EAAE,SAAiB;QAC1C,KAAK,CACH,GAAG,KAAK,iBAAiB,SAAS,+DAA+D;YAC/F,+FAA+F;YAC/F,0DAA0D,CAC7D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAoB,EACpB,SAAiB,EACjB,KAAa,EACb,WAAyB;IAEzB,IAAI,KAAgD,CAAC;IACrD,IAAI,WAAW,GAAG,GAAS,EAAE,CAAC,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,WAAW,EAAE,cAAc,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC/C,IAAI,CAAC,WAAW;gBAAE,OAAO;YACzB,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,YAAY,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5F,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,WAAW,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,EAAE,EAAE;YACJ,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACtF,CAAC,CAAC;YACF,OAAO;SACR,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,WAAW,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,KAAa;IAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"poll-timeout.js","sourceRoot":"","sources":["../../../src/core/deployment/poll-timeout.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import type { HttpLibrary, RequestContext, ResponseContext } from '@kubernetes/client-node/dist/gen/http/http.js';
15
15
  import { type Observable } from '@kubernetes/client-node/dist/gen/rxjsStub.js';
16
+ import { RequestTimeoutError } from '../deployment/poll-timeout.js';
16
17
  /**
17
18
  * Configuration for HTTP request timeouts by operation type.
18
19
  *
@@ -72,6 +73,29 @@ export interface AgentTlsOptions {
72
73
  servername?: string;
73
74
  ciphers?: string;
74
75
  }
76
+ /**
77
+ * The transport dropped before the response was complete.
78
+ *
79
+ * WHY THIS TYPE EXISTS: a request whose socket dies mid-response must REJECT, and must reject as
80
+ * something callers already understand. It is modelled as a {@link RequestTimeoutError} because the
81
+ * caller's situation is identical to a timeout — the call did not return an answer — so gates that
82
+ * fail CLOSED on a wedged call (they must not read "no answer" as "nothing is there") keep working
83
+ * without knowing this class exists. `code` is `ECONNRESET` and the message contains
84
+ * `socket hang up`, the two shapes the transient/retryable classifiers already match on, so a
85
+ * retry loop treats it as the transient transport blip it usually is.
86
+ *
87
+ * NOTE ON `timeoutMs`: nothing here EXPIRED — the socket died with budget to spare, typically in
88
+ * milliseconds out of minutes. The inherited field therefore carries how long the request actually
89
+ * ran ({@link elapsedMs}), never the configured budget, so a log line or a retry heuristic reading
90
+ * it cannot conclude that the deadline was reached.
91
+ */
92
+ export declare class PrematureCloseError extends RequestTimeoutError {
93
+ /** Node's system-error code for a peer-reset socket; transient-error classifiers match on it. */
94
+ readonly code: "ECONNRESET";
95
+ /** How long the request ran before the transport died. Same value as the inherited `timeoutMs`. */
96
+ readonly elapsedMs: number;
97
+ constructor(method: string, path: string, elapsedMs: number, phase: string, cause?: unknown);
98
+ }
75
99
  /** Extract the TLS material KubeConfig placed on an https.Agent. */
76
100
  export declare function extractAgentTlsOptions(agent: unknown): AgentTlsOptions;
77
101
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"bun-http-library.d.ts","sourceRoot":"","sources":["../../../src/core/kubernetes/bun-http-library.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,eAAe,EAChB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,8CAA8C,CAAC;AASrF;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC9C,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAItE;AAcD;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;;;;;GAQG;AACH,qBAAa,wBAAyB,YAAW,WAAW;IAC1D,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,MAAM,CAA0C;IAExD;;;OAGG;gBACS,aAAa,CAAC,EAAE,iBAAiB;IAkBtC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC;IAKjE;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,WAAW;CA8KpB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,CAAC,EAAE,iBAAiB,GAChC,WAAW,GAAG,SAAS,CAKzB;AAGD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"bun-http-library.d.ts","sourceRoot":"","sources":["../../../src/core/kubernetes/bun-http-library.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,eAAe,EAChB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAOrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGpE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC9C,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;IAC1D,iGAAiG;IACjG,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IACtC,mGAAmG;IACnG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBACf,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAc5F;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAItE;AAcD;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;;;;;GAQG;AACH,qBAAa,wBAAyB,YAAW,WAAW;IAC1D,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,MAAM,CAA0C;IAExD;;;OAGG;gBACS,aAAa,CAAC,EAAE,iBAAiB;IAkBtC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC;IAKjE;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,WAAW;CA2QpB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,CAAC,EAAE,iBAAiB,GAChC,WAAW,GAAG,SAAS,CAKzB;AAGD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
@@ -15,7 +15,42 @@ import * as http from 'node:http';
15
15
  import * as https from 'node:https';
16
16
  import { from } from '@kubernetes/client-node/dist/gen/rxjsStub.js';
17
17
  import { DEFAULT_HTTP_DELETE_TIMEOUT, DEFAULT_HTTP_READ_TIMEOUT, DEFAULT_HTTP_WATCH_TIMEOUT, DEFAULT_HTTP_WRITE_TIMEOUT, } from '../config/defaults.js';
18
+ import { RequestTimeoutError } from '../deployment/poll-timeout.js';
18
19
  import { getComponentLogger } from '../logging/index.js';
20
+ /**
21
+ * The transport dropped before the response was complete.
22
+ *
23
+ * WHY THIS TYPE EXISTS: a request whose socket dies mid-response must REJECT, and must reject as
24
+ * something callers already understand. It is modelled as a {@link RequestTimeoutError} because the
25
+ * caller's situation is identical to a timeout — the call did not return an answer — so gates that
26
+ * fail CLOSED on a wedged call (they must not read "no answer" as "nothing is there") keep working
27
+ * without knowing this class exists. `code` is `ECONNRESET` and the message contains
28
+ * `socket hang up`, the two shapes the transient/retryable classifiers already match on, so a
29
+ * retry loop treats it as the transient transport blip it usually is.
30
+ *
31
+ * NOTE ON `timeoutMs`: nothing here EXPIRED — the socket died with budget to spare, typically in
32
+ * milliseconds out of minutes. The inherited field therefore carries how long the request actually
33
+ * ran ({@link elapsedMs}), never the configured budget, so a log line or a retry heuristic reading
34
+ * it cannot conclude that the deadline was reached.
35
+ */
36
+ export class PrematureCloseError extends RequestTimeoutError {
37
+ /** Node's system-error code for a peer-reset socket; transient-error classifiers match on it. */
38
+ code = 'ECONNRESET';
39
+ /** How long the request ran before the transport died. Same value as the inherited `timeoutMs`. */
40
+ elapsedMs;
41
+ constructor(method, path, elapsedMs, phase, cause) {
42
+ super(`socket hang up: the connection closed before the response completed (${method} ${path}) — ${phase}.\n` +
43
+ `The connection lasted ${elapsedMs}ms; its budget had not expired.\n` +
44
+ (cause instanceof Error ? `Underlying transport error: ${cause.message}\n` : '') +
45
+ `\n` +
46
+ `The Kubernetes API server, or something between it and this client (load balancer, proxy, ` +
47
+ `NAT gateway), dropped the connection mid-flight. This is usually transient; retry.`, elapsedMs);
48
+ this.name = 'PrematureCloseError';
49
+ this.elapsedMs = elapsedMs;
50
+ if (cause !== undefined)
51
+ this.cause = cause;
52
+ }
53
+ }
19
54
  /** Extract the TLS material KubeConfig placed on an https.Agent. */
20
55
  export function extractAgentTlsOptions(agent) {
21
56
  return agent && typeof agent === 'object' && 'options' in agent
@@ -155,13 +190,45 @@ export class BunCompatibleHttpLibrary {
155
190
  timeoutId = undefined;
156
191
  }
157
192
  };
193
+ // Detaching the abort listener, if one was attached. Assigned when the signal is wired up
194
+ // below; a no-op until then, so the latch can always call it.
195
+ let detachAbort = () => undefined;
196
+ // EVERY terminal path goes through here, and the FIRST one wins. Resolve/reject are latched so
197
+ // a socket teardown that emits several events in a row (`aborted`, then `error`, then `close`)
198
+ // cannot settle twice, and — the bug this guards — so no path can disarm the timer WITHOUT
199
+ // settling. Clearing the timer is the guard's job alone; nothing else touches it. Releasing the
200
+ // abort listener belongs here for the same reason: it is per-request state on a signal that
201
+ // usually OUTLIVES the request.
202
+ let settled = false;
203
+ const settle = (finish) => {
204
+ if (settled)
205
+ return;
206
+ settled = true;
207
+ clearRequestTimeout();
208
+ detachAbort();
209
+ finish();
210
+ };
211
+ // Bun's `node:http` emits the REQUEST's 'close' as soon as the response headers arrive, long
212
+ // before the body is done (Node emits it after the exchange ends). So 'close' on the request
213
+ // only means "the exchange ended" while no response has begun; once one has, the response's own
214
+ // terminal events are what tell us whether it completed.
215
+ let responseStarted = false;
216
+ // The elapsed time, not the budget: a premature close happens with budget to spare, and the
217
+ // error must not read as "the deadline was reached". See {@link PrematureCloseError}.
218
+ const issuedAt = Date.now();
219
+ const failPrematureClose = (phase, cause) => settle(() => reject(new PrematureCloseError(method, url.pathname, Date.now() - issuedAt, phase, cause)));
158
220
  const req = httpModule.request(options, (res) => {
221
+ responseStarted = true;
159
222
  const chunks = [];
160
223
  res.on('data', (chunk) => {
161
224
  chunks.push(chunk);
162
225
  });
226
+ // The socket died with the body half-delivered. Unhandled, these leave the promise pending
227
+ // FOREVER: 'end' never fires, and the request's 'error' does not fire either.
228
+ res.on('aborted', () => failPrematureClose('the response body was truncated'));
229
+ res.on('error', (err) => failPrematureClose('the response stream failed', err));
230
+ res.on('close', () => failPrematureClose('the response stream closed before it ended'));
163
231
  res.on('end', () => {
164
- clearRequestTimeout();
165
232
  const buffer = Buffer.concat(chunks);
166
233
  const responseHeaders = {};
167
234
  // Convert headers to simple object
@@ -196,12 +263,11 @@ export class BunCompatibleHttpLibrary {
196
263
  }
197
264
  },
198
265
  };
199
- resolve(response);
266
+ settle(() => resolve(response));
200
267
  });
201
268
  });
202
269
  req.on('error', (err) => {
203
- clearRequestTimeout();
204
- reject(err);
270
+ settle(() => reject(err));
205
271
  });
206
272
  req.on('socket', (socket) => {
207
273
  // Prevent idle client sockets from keeping short-lived CLI processes alive.
@@ -215,8 +281,11 @@ export class BunCompatibleHttpLibrary {
215
281
  // Watch operations are handled by the API server via timeoutSeconds parameter
216
282
  if (shouldSetTimeout) {
217
283
  timeoutId = setTimeout(() => {
218
- req.destroy(); // Abort the request
219
- const timeoutError = new Error(`HTTP request timeout: ${method} ${url.pathname} timed out after ${timeoutMs}ms\n` +
284
+ // A TYPED timeout (not a bare Error): this timer is armed synchronously as the request is
285
+ // issued, so with equal budgets it fires BEFORE any deadline wrapper around the call and
286
+ // is the error a caller actually sees. A gate that fails open on ordinary failures must be
287
+ // able to tell this apart from "the object does not exist". See `isRequestTimeoutError`.
288
+ const timeoutError = new RequestTimeoutError(`HTTP request timeout: ${method} ${url.pathname} timed out after ${timeoutMs}ms\n` +
220
289
  `URL: ${url.toString()}\n` +
221
290
  `\n` +
222
291
  `💡 Possible causes:\n` +
@@ -229,29 +298,87 @@ export class BunCompatibleHttpLibrary {
229
298
  ` • Verify Kubernetes API server is running: kubectl cluster-info\n` +
230
299
  ` • Check webhook status: kubectl get validatingwebhookconfigurations\n` +
231
300
  ` • Increase timeout via httpTimeouts option if needed\n` +
232
- ` • For watch operations: timeouts are disabled (API server controls via timeoutSeconds)`);
233
- reject(timeoutError);
301
+ ` • For watch operations: timeouts are disabled (API server controls via timeoutSeconds)`, timeoutMs);
302
+ // Settle BEFORE tearing the socket down: `req.destroy()` emits 'error'/'close', and the
303
+ // caller must see the timeout — not the ECONNRESET our own abort produced. The latch makes
304
+ // that teardown a no-op.
305
+ settle(() => reject(timeoutError));
306
+ req.destroy();
234
307
  }, timeoutMs);
308
+ // Belt and braces for the pre-connect phase. The wall-clock timer above is armed
309
+ // synchronously, so it already covers a DNS or TCP/TLS connect that never completes — but it
310
+ // can only bound the caller's `await`; it cannot guarantee the runtime actually releases a
311
+ // socket still stuck in connect. `setTimeout` on the request tears that socket down from the
312
+ // inside. It is an IDLE timer, so on a live connection it can never fire before the wall
313
+ // clock, which means it never shortens a legitimately slow request.
314
+ req.setTimeout(timeoutMs, () => {
315
+ req.destroy();
316
+ });
235
317
  }
236
318
  // Handle abort signal (if available - added in newer versions).
237
- // Use { once: true } to automatically remove the listener after firing,
238
- // preventing memory growth when the AbortSignal outlives the request.
319
+ //
320
+ // `{ once: true }` alone is NOT enough to bound the listener's lifetime: it removes the
321
+ // listener when the event FIRES, and the overwhelmingly common case is that it never fires
322
+ // because the request succeeded. A caller's signal typically spans a whole converge — hundreds
323
+ // of requests — so every completed request left its closure (and the `req` it captures)
324
+ // attached, growing the signal's listener list for the life of the operation. Detaching is
325
+ // therefore done by the latch, which every terminal path goes through, with `{ once: true }`
326
+ // kept as belt and braces for the firing case.
239
327
  const getSignal = Reflect.get(request, 'getSignal');
240
328
  const signal = getSignal?.();
241
329
  if (signal) {
242
- signal.addEventListener('abort', () => {
243
- clearRequestTimeout();
244
- req.destroy(new Error('Request aborted'));
245
- }, { once: true });
330
+ const onAbort = () => {
331
+ settle(() => reject(signal.reason ?? new Error('Request aborted')));
332
+ req.destroy();
333
+ };
334
+ // An ALREADY-aborted signal never fires 'abort' again, so a listener alone silently misses
335
+ // it and the request goes out anyway — the exact opposite of what the caller asked for.
336
+ // A signal is routinely already aborted by the time a request is issued: a converge-wide
337
+ // signal trips while an earlier call is in flight, and the next call in the queue is built
338
+ // against it. Reject up front and tear the half-built request down BEFORE `req.end()` puts
339
+ // any bytes on the wire.
340
+ if (signal.aborted) {
341
+ settle(() => reject(signal.reason ?? new DOMException('The operation was aborted', 'AbortError')));
342
+ req.destroy();
343
+ }
344
+ else {
345
+ signal.addEventListener('abort', onAbort, { once: true });
346
+ detachAbort = () => signal.removeEventListener('abort', onAbort);
347
+ }
246
348
  }
349
+ // The request ended without the promise having settled. On Bun this fires as soon as the
350
+ // response headers land, so it is only terminal while NO response has started; after that the
351
+ // response's own 'aborted'/'error'/'close' are the terminal events. Either way the timer stays
352
+ // armed until something settles — clearing it here WITHOUT settling was the hang.
247
353
  req.on('close', () => {
248
- clearRequestTimeout();
354
+ if (responseStarted)
355
+ return;
356
+ failPrematureClose('the socket closed before any response was received');
249
357
  });
250
- // Send body if present
251
- if (body) {
252
- req.write(body);
358
+ // Send body if present.
359
+ //
360
+ // These can throw SYNCHRONOUSLY — `write` rejects a body that is not a string or Buffer with
361
+ // ERR_INVALID_ARG_TYPE, for instance. A throw here escapes the Promise executor, which rejects
362
+ // the promise for us but does NOT run the latch, so the timer would stay armed and hold a
363
+ // short-lived CLI process open for its whole budget after the call had already failed. Route
364
+ // it through the latch instead, and tear the half-issued request down.
365
+ //
366
+ // A signal that was ALREADY aborted has settled the promise and destroyed the request above;
367
+ // there is nothing left to send, and writing to a destroyed request would only raise a
368
+ // spurious ERR_STREAM_DESTROYED. Returning here is also what keeps the promise's contract
369
+ // honest: the server never sees a request the caller had already cancelled.
370
+ if (settled)
371
+ return;
372
+ try {
373
+ if (body) {
374
+ req.write(body);
375
+ }
376
+ req.end();
377
+ }
378
+ catch (err) {
379
+ settle(() => reject(err));
380
+ req.destroy();
253
381
  }
254
- req.end();
255
382
  });
256
383
  }
257
384
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bun-http-library.js","sourceRoot":"","sources":["../../../src/core/kubernetes/bun-http-library.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bun-http-library.js","sourceRoot":"","sources":["../../../src/core/kubernetes/bun-http-library.ts"],"names":[],"mappings":"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"}
@@ -95,6 +95,15 @@ export declare function isNotFoundError(error: unknown): boolean;
95
95
  * ```
96
96
  */
97
97
  export declare function isConflictError(error: unknown): boolean;
98
+ /**
99
+ * HTTP status codes that are typically retryable.
100
+ * These indicate temporary issues that may resolve on retry.
101
+ *
102
+ * @internal Exported so the read-error classifier in `../deployment/k8s-helpers.ts` can answer
103
+ * "is this status transient?" from this one list rather than keeping a second copy that could
104
+ * drift from it.
105
+ */
106
+ export declare const RETRYABLE_STATUS_CODES: ReadonlySet<number>;
98
107
  /**
99
108
  * Check if an error is retryable.
100
109
  *
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/kubernetes/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAsCrE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEvD;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA6CxD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA6B5D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG;IAC/C,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB,CAkBA"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/kubernetes/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAsCrE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEvD;AAGD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAOrD,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA6CxD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA6B5D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG;IAC/C,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB,CAkBA"}
@@ -112,15 +112,19 @@ export function isConflictError(error) {
112
112
  /**
113
113
  * HTTP status codes that are typically retryable.
114
114
  * These indicate temporary issues that may resolve on retry.
115
+ *
116
+ * @internal Exported so the read-error classifier in `../deployment/k8s-helpers.ts` can answer
117
+ * "is this status transient?" from this one list rather than keeping a second copy that could
118
+ * drift from it.
115
119
  */
116
- const RETRYABLE_STATUS_CODES = [
120
+ export const RETRYABLE_STATUS_CODES = new Set([
117
121
  408, // Request Timeout
118
122
  429, // Too Many Requests
119
123
  500, // Internal Server Error
120
124
  502, // Bad Gateway
121
125
  503, // Service Unavailable
122
126
  504, // Gateway Timeout
123
- ];
127
+ ]);
124
128
  /**
125
129
  * Check if an error is retryable.
126
130
  *
@@ -149,7 +153,7 @@ const RETRYABLE_STATUS_CODES = [
149
153
  export function isRetryableError(error) {
150
154
  // Check for retryable HTTP status codes
151
155
  const statusCode = getErrorStatusCode(error);
152
- if (statusCode !== undefined && RETRYABLE_STATUS_CODES.includes(statusCode)) {
156
+ if (statusCode !== undefined && RETRYABLE_STATUS_CODES.has(statusCode)) {
153
157
  return true;
154
158
  }
155
159
  // Check for network errors by message content
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/kubernetes/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/kubernetes/errors.ts"],"names":[],"mappings":"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"}