@calltelemetry/cli 0.11.0 → 0.12.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/commands/cube.d.ts +8 -0
- package/dist/commands/cube.d.ts.map +1 -0
- package/dist/commands/cube.js +47 -0
- package/dist/commands/cube.js.map +1 -0
- package/dist/commands/proxy.d.ts +3 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +94 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/appliance-proxy-policy.d.ts +38 -0
- package/dist/lib/appliance-proxy-policy.d.ts.map +1 -0
- package/dist/lib/appliance-proxy-policy.js +132 -0
- package/dist/lib/appliance-proxy-policy.js.map +1 -0
- package/dist/lib/cube-diag.d.ts +26 -0
- package/dist/lib/cube-diag.d.ts.map +1 -0
- package/dist/lib/cube-diag.js +336 -0
- package/dist/lib/cube-diag.js.map +1 -0
- package/dist/lib/offline-steps.d.ts.map +1 -1
- package/dist/lib/offline-steps.js +18 -1
- package/dist/lib/offline-steps.js.map +1 -1
- package/dist/lib/proxy.d.ts +19 -0
- package/dist/lib/proxy.d.ts.map +1 -0
- package/dist/lib/proxy.js +104 -0
- package/dist/lib/proxy.js.map +1 -0
- package/dist/lib/rpc.d.ts +10 -1
- package/dist/lib/rpc.d.ts.map +1 -1
- package/dist/lib/rpc.js +14 -2
- package/dist/lib/rpc.js.map +1 -1
- package/dist/lib/update.d.ts.map +1 -1
- package/dist/lib/update.js +29 -2
- package/dist/lib/update.js.map +1 -1
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/shell/commands/cube.d.ts +8 -0
- package/dist/shell/commands/cube.d.ts.map +1 -0
- package/dist/shell/commands/cube.js +47 -0
- package/dist/shell/commands/cube.js.map +1 -0
- package/dist/shell/commands/registry.d.ts.map +1 -1
- package/dist/shell/commands/registry.js +20 -0
- package/dist/shell/commands/registry.js.map +1 -1
- package/dist/utils/parseSecs.d.ts +17 -0
- package/dist/utils/parseSecs.d.ts.map +1 -0
- package/dist/utils/parseSecs.js +33 -0
- package/dist/utils/parseSecs.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only collector for the "CUBE stuck in REGISTERED, never ONLINE" bug class.
|
|
3
|
+
*
|
|
4
|
+
* Builds one text bundle from three sources — Postgres, NATS KV/streams, and
|
|
5
|
+
* container logs — redacts it, and writes it to a single .log file. Each section
|
|
6
|
+
* is best-effort: a failure in one section is captured inline and never aborts
|
|
7
|
+
* the rest of the collection. Pure async — no React/Ink imports.
|
|
8
|
+
*
|
|
9
|
+
* The registered -> online transition requires a healthy SolicitXccProbing
|
|
10
|
+
* keepalive; this bundle surfaces the DB state, NATS KV view, and the log lines
|
|
11
|
+
* that explain why that keepalive never lands.
|
|
12
|
+
*/
|
|
13
|
+
import { writeFile, chmod } from 'node:fs/promises';
|
|
14
|
+
import { compose, composeExec, composePs } from './compose.js';
|
|
15
|
+
import { exec } from './exec.js';
|
|
16
|
+
import { rpc } from './rpc.js';
|
|
17
|
+
import { redactSecrets } from './redact.js';
|
|
18
|
+
import { DB_USER, DB_NAME, PG_ENV } from './db.js';
|
|
19
|
+
import { getPaths } from './paths.js';
|
|
20
|
+
import { debug } from './log.js';
|
|
21
|
+
const NATS_BOX_IMAGE = 'natsio/nats-box:0.14.5';
|
|
22
|
+
const NATS_URL = 'nats://nats:4222';
|
|
23
|
+
const DEFAULT_TIMEOUT = 10_000;
|
|
24
|
+
const RPC_TIMEOUT = 25_000;
|
|
25
|
+
/** Sleep helper for the heartbeat-trace loop. */
|
|
26
|
+
function sleep(ms) {
|
|
27
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run a cube-diag RPC bounded by RPC_TIMEOUT. The budget is passed INTO `rpc()`
|
|
31
|
+
* (→ composeExec → execa `timeout`), so a wedged `docker compose exec` child is
|
|
32
|
+
* actually KILLED rather than abandoned by a Promise.race that leaves it alive.
|
|
33
|
+
*/
|
|
34
|
+
function rpcBounded(code) {
|
|
35
|
+
return rpc(code, RPC_TIMEOUT);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Elixir snapshot run via `onprem rpc` inside the web container. For every
|
|
39
|
+
* xcc-enabled cube it decodes the live cube_status KV and runs the SAME read
|
|
40
|
+
* path the product uses (ConnectionHealthState.derive_from_kv/3), then flags the
|
|
41
|
+
* probe-interval pathologies engineering looks for:
|
|
42
|
+
* CORRUPT_KV — observed_interval_ms set but last_event_at nil (won't relearn)
|
|
43
|
+
* MANUAL!=OBSERVED — configured interval differs from the learned one
|
|
44
|
+
* DB_OBS!=KV_OBS — the DB mirror and the live KV disagree on the cadence
|
|
45
|
+
*
|
|
46
|
+
* NOTE: this is a backtick template literal but contains NO `${...}` JS
|
|
47
|
+
* interpolation — only Elixir `#{...}`, which JS leaves untouched. Do not add a
|
|
48
|
+
* `${` anywhere in this string.
|
|
49
|
+
*/
|
|
50
|
+
const CUBE_DIAG_RPC_SNAPSHOT = `import Ecto.Query
|
|
51
|
+
now = DateTime.utc_now()
|
|
52
|
+
alias Cdrcisco.Cubes.{Cube, ConnectionStateKV, ConnectionHealthState}
|
|
53
|
+
cubes = Cdrcisco.Repo.all(from c in Cube, where: c.xcc_enabled == true, order_by: c.id)
|
|
54
|
+
if cubes == [], do: IO.puts("(no xcc-enabled cubes)")
|
|
55
|
+
Enum.each(cubes, fn c ->
|
|
56
|
+
out =
|
|
57
|
+
try do
|
|
58
|
+
raw = Cdrcisco.Liveness.KV.get("cube_status", "cube:#{c.id}:status")
|
|
59
|
+
dec =
|
|
60
|
+
case raw && ConnectionStateKV.decode(raw) do
|
|
61
|
+
{:ok, d} -> d
|
|
62
|
+
_ -> nil
|
|
63
|
+
end
|
|
64
|
+
row = ConnectionHealthState.derive_from_kv(c, dec, now)
|
|
65
|
+
kv_ms = dec && dec.observed_interval_ms
|
|
66
|
+
kv_le = dec && dec.last_event_at
|
|
67
|
+
kv_obs_s = (is_integer(kv_ms) and kv_ms > 0) && div(kv_ms, 1000) || nil
|
|
68
|
+
manual = c.xcc_provider_probing_interval
|
|
69
|
+
db_obs = c.xcc_observed_probing_interval
|
|
70
|
+
corrupt = is_integer(kv_ms) and kv_ms > 0 and is_nil(kv_le)
|
|
71
|
+
mism = is_integer(manual) and is_integer(db_obs) and manual != db_obs
|
|
72
|
+
div_obs = is_integer(db_obs) and is_integer(kv_obs_s) and db_obs != kv_obs_s
|
|
73
|
+
flags = []
|
|
74
|
+
flags = if corrupt, do: ["CORRUPT_KV(observed_ms set, last_event_at nil -> wont relearn)" | flags], else: flags
|
|
75
|
+
flags = if mism, do: ["MANUAL!=OBSERVED(#{manual} vs #{db_obs})" | flags], else: flags
|
|
76
|
+
flags = if div_obs, do: ["DB_OBS!=KV_OBS(#{db_obs} vs #{kv_obs_s})" | flags], else: flags
|
|
77
|
+
Enum.join([
|
|
78
|
+
"cube #{c.id} (#{c.name})",
|
|
79
|
+
" db : manual=#{inspect(manual)} observed=#{inspect(db_obs)} observed_at=#{inspect(c.xcc_observed_probing_interval_at)} online=#{inspect(c.xcc_online)} last_keepalive=#{inspect(c.xcc_last_keepalive)}",
|
|
80
|
+
" kv : state=#{inspect(dec && dec.state)} last_event=#{inspect(dec && dec.last_event)} last_event_at=#{inspect(kv_le)} attempt=#{inspect(dec && dec.attempt_count)} observed_ms=#{inspect(kv_ms)} probing_ms=#{inspect(dec && dec.probing_interval_ms)}",
|
|
81
|
+
" derived: state=#{inspect(row.state)} conf=#{inspect(row.status_confidence)} observed_sec=#{inspect(row.observed_probing_interval_sec)} window_sec=#{inspect(row.freshness_window_sec)} stale_after=#{inspect(row.stale_after_at)}",
|
|
82
|
+
" flags : #{if flags == [], do: "none", else: Enum.join(flags, " ")}"
|
|
83
|
+
], "\\n")
|
|
84
|
+
rescue
|
|
85
|
+
e -> "cube #{c.id}: ERROR #{Exception.message(e)}"
|
|
86
|
+
end
|
|
87
|
+
IO.puts(out)
|
|
88
|
+
end)
|
|
89
|
+
:ok`;
|
|
90
|
+
/**
|
|
91
|
+
* Compact one-line-per-cube trace sample, called repeatedly by the
|
|
92
|
+
* `--monitor <secs>` heartbeat trace to capture how the FSM state / learned
|
|
93
|
+
* cadence / freshness window evolve over time.
|
|
94
|
+
*
|
|
95
|
+
* NOTE: same `${...}`-free rule as CUBE_DIAG_RPC_SNAPSHOT above.
|
|
96
|
+
*/
|
|
97
|
+
const CUBE_DIAG_RPC_TRACE = `import Ecto.Query
|
|
98
|
+
now = DateTime.utc_now()
|
|
99
|
+
alias Cdrcisco.Cubes.{Cube, ConnectionStateKV, ConnectionHealthState}
|
|
100
|
+
ts = DateTime.to_iso8601(now)
|
|
101
|
+
for c <- Cdrcisco.Repo.all(from c in Cube, where: c.xcc_enabled == true, order_by: c.id) do
|
|
102
|
+
try do
|
|
103
|
+
raw = Cdrcisco.Liveness.KV.get("cube_status", "cube:#{c.id}:status")
|
|
104
|
+
dec =
|
|
105
|
+
case raw && ConnectionStateKV.decode(raw) do
|
|
106
|
+
{:ok, d} -> d
|
|
107
|
+
_ -> nil
|
|
108
|
+
end
|
|
109
|
+
row = ConnectionHealthState.derive_from_kv(c, dec, now)
|
|
110
|
+
IO.puts("#{ts}|cube=#{c.id}|kv_state=#{inspect(dec && dec.state)}|kv_obs_ms=#{inspect(dec && dec.observed_interval_ms)}|kv_last_event_at=#{inspect(dec && dec.last_event_at)}|attempt=#{inspect(dec && dec.attempt_count)}|obs_sec=#{inspect(row.observed_probing_interval_sec)}|win_sec=#{inspect(row.freshness_window_sec)}|state=#{row.state}|conf=#{row.status_confidence}")
|
|
111
|
+
rescue
|
|
112
|
+
e -> IO.puts("#{ts}|cube=#{c.id}|ERROR #{Exception.message(e)}")
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
:ok`;
|
|
116
|
+
/** Run a psql query in the db container, returning trimmed stdout. */
|
|
117
|
+
async function psql(sql) {
|
|
118
|
+
const result = await composeExec('db', ['psql', '-U', DB_USER, '-d', DB_NAME, '-c', sql], { env: PG_ENV, pipe: true, timeout: DEFAULT_TIMEOUT });
|
|
119
|
+
return (result.stdout ?? '').toString();
|
|
120
|
+
}
|
|
121
|
+
/** Run one collection step, capturing its output (or error) into a labeled block. */
|
|
122
|
+
async function section(title, fn) {
|
|
123
|
+
const lines = [`\n===== ${title} =====`];
|
|
124
|
+
try {
|
|
125
|
+
const body = await fn();
|
|
126
|
+
lines.push(body.trim().length > 0 ? body.trimEnd() : '(no output)');
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
130
|
+
lines.push(`[section failed] ${message}`);
|
|
131
|
+
}
|
|
132
|
+
return lines.join('\n');
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Resolve the `_ct` docker network the appliance services share, so the
|
|
136
|
+
* throwaway nats-box container can reach the `nats` service by name.
|
|
137
|
+
*
|
|
138
|
+
* Strategy: ask compose for the nats service's network (first line, first
|
|
139
|
+
* field). Fall back to `<project>_ct` derived from the install dir basename.
|
|
140
|
+
*/
|
|
141
|
+
async function resolveCtNetwork() {
|
|
142
|
+
try {
|
|
143
|
+
const result = await compose(['ps', '--format', '{{.Networks}}', 'nats'], { pipe: true });
|
|
144
|
+
const firstLine = (result.stdout ?? '').toString().split('\n').map(l => l.trim()).filter(Boolean)[0];
|
|
145
|
+
if (firstLine) {
|
|
146
|
+
const firstField = firstLine.split(',')[0]?.trim();
|
|
147
|
+
if (firstField)
|
|
148
|
+
return firstField;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
debug(`cube-diag: compose network resolve failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
153
|
+
}
|
|
154
|
+
const { installDir } = getPaths();
|
|
155
|
+
const project = (installDir.split('/').filter(Boolean).pop() ?? 'docker-compose').toLowerCase();
|
|
156
|
+
return `${project}_ct`;
|
|
157
|
+
}
|
|
158
|
+
/** Run `nats` CLI inside a throwaway nats-box container on the appliance network. */
|
|
159
|
+
async function natsRun(net, natsArgs) {
|
|
160
|
+
const result = await exec('docker', ['run', '--rm', '--network', net, NATS_BOX_IMAGE, 'nats', '-s', NATS_URL, ...natsArgs], { timeout: DEFAULT_TIMEOUT, reject: false });
|
|
161
|
+
const stdout = (result.stdout ?? '').toString();
|
|
162
|
+
const stderr = (result.stderr ?? '').toString();
|
|
163
|
+
return [stdout, stderr.trim() ? `[stderr] ${stderr}` : ''].filter(Boolean).join('\n');
|
|
164
|
+
}
|
|
165
|
+
// STATIC sh script — NO host-side interpolation. The NATS URL and bucket are
|
|
166
|
+
// passed as `docker run -e` env vars (NATS_URL / KV_BUCKET) and referenced via
|
|
167
|
+
// `$NATS_URL` / `"$KV_BUCKET"` INSIDE the container, so a non-constant bucket can
|
|
168
|
+
// never break out of the shell string (repo rule: no shell string interpolation).
|
|
169
|
+
// `set -f` disables globbing and `while IFS= read` handles keys with whitespace /
|
|
170
|
+
// glob chars, so a stray `*` in CLI output can never glob-expand against the CWD.
|
|
171
|
+
const NATS_KV_DUMP_SCRIPT = 'set -f; nats -s "$NATS_URL" kv ls "$KV_BUCKET" 2>/dev/null | while IFS= read -r k; do ' +
|
|
172
|
+
'[ -n "$k" ] || continue; ' +
|
|
173
|
+
'echo "--- key: $k ---"; ' +
|
|
174
|
+
'nats -s "$NATS_URL" kv get "$KV_BUCKET" "$k" 2>&1; ' +
|
|
175
|
+
'echo "--- key (raw base64): $k ---"; ' +
|
|
176
|
+
'nats -s "$NATS_URL" kv get "$KV_BUCKET" "$k" --raw 2>/dev/null | base64; ' +
|
|
177
|
+
'done';
|
|
178
|
+
/** Dump every key in a NATS KV bucket (human get + raw base64), via an in-container sh loop. */
|
|
179
|
+
async function natsKvDump(net, bucket) {
|
|
180
|
+
const result = await exec('docker', [
|
|
181
|
+
'run', '--rm', '--network', net,
|
|
182
|
+
'-e', `NATS_URL=${NATS_URL}`,
|
|
183
|
+
'-e', `KV_BUCKET=${bucket}`,
|
|
184
|
+
NATS_BOX_IMAGE, 'sh', '-c', NATS_KV_DUMP_SCRIPT,
|
|
185
|
+
], { timeout: DEFAULT_TIMEOUT, reject: false });
|
|
186
|
+
const stdout = (result.stdout ?? '').toString();
|
|
187
|
+
const stderr = (result.stderr ?? '').toString();
|
|
188
|
+
// Surface truncation: a silently-cut KV dump would mislead diagnosis.
|
|
189
|
+
const timedOut = result.timedOut === true;
|
|
190
|
+
return [
|
|
191
|
+
stdout,
|
|
192
|
+
timedOut ? '[WARN: nats-box exec timed out — KV dump may be truncated]' : '',
|
|
193
|
+
stderr.trim() ? `[stderr] ${stderr}` : '',
|
|
194
|
+
].filter(Boolean).join('\n');
|
|
195
|
+
}
|
|
196
|
+
/** Get the first container id for a compose service (empty string if none). */
|
|
197
|
+
async function containerId(service) {
|
|
198
|
+
// composePs already has its own internal fallback; a second compose ps here
|
|
199
|
+
// would just repeat the same command, so on failure we return empty directly.
|
|
200
|
+
try {
|
|
201
|
+
const id = await composePs(service);
|
|
202
|
+
if (id)
|
|
203
|
+
return id.split('\n')[0].trim();
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
debug(`cube-diag: composePs ${service} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
207
|
+
}
|
|
208
|
+
return '';
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Tail container logs and keep only the lines matching the cube/xcc keepalive
|
|
212
|
+
* grep. When `opts.since` is given, uses `docker logs --since <window>` instead
|
|
213
|
+
* of `--tail`, mirroring the bash reference's 10-minute heartbeat window.
|
|
214
|
+
*/
|
|
215
|
+
async function logsFiltered(service, tailIn, keepTail, grep, opts) {
|
|
216
|
+
const id = await containerId(service);
|
|
217
|
+
if (!id)
|
|
218
|
+
return `(no ${service} container found)`;
|
|
219
|
+
const dockerArgs = opts?.since
|
|
220
|
+
? ['logs', '--since', opts.since, id]
|
|
221
|
+
: ['logs', '--tail', String(tailIn), id];
|
|
222
|
+
const result = await exec('docker', dockerArgs, {
|
|
223
|
+
timeout: DEFAULT_TIMEOUT,
|
|
224
|
+
reject: false,
|
|
225
|
+
});
|
|
226
|
+
const combined = `${(result.stdout ?? '').toString()}\n${(result.stderr ?? '').toString()}`;
|
|
227
|
+
let lines = combined.split('\n');
|
|
228
|
+
if (grep)
|
|
229
|
+
lines = lines.filter(l => grep.test(l));
|
|
230
|
+
return lines.slice(-keepTail).join('\n');
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Collect the full cube-diag bundle and write it to a single .log file.
|
|
234
|
+
*
|
|
235
|
+
* @param opts.outputPath Target log path. Defaults to ./cube-diag-<ISO>.log.
|
|
236
|
+
* @param opts.captureSecs Seconds to live-capture cube.> / alarms.> subjects (0 = skip).
|
|
237
|
+
* @param opts.monitorSecs Seconds to RPC-poll each cube's state/interval ~every 5s (0 = skip).
|
|
238
|
+
* @returns the path the bundle was written to.
|
|
239
|
+
*/
|
|
240
|
+
export async function collectCubeDiag(opts) {
|
|
241
|
+
const captureSecs = opts?.captureSecs ?? 0;
|
|
242
|
+
const monitorSecs = opts?.monitorSecs ?? 0;
|
|
243
|
+
const iso = new Date().toISOString().replace(/[:.]/g, '-');
|
|
244
|
+
const outputPath = opts?.outputPath ?? `./cube-diag-${iso}.log`;
|
|
245
|
+
const parts = [];
|
|
246
|
+
parts.push('===== CUBE DIAGNOSTIC BUNDLE =====', `Generated: ${new Date().toISOString()}`, 'Bug class: cube stuck REGISTERED, never ONLINE (registered->online requires a healthy SolicitXccProbing keepalive).');
|
|
247
|
+
// ── Database sections ──────────────────────────────────────────────────
|
|
248
|
+
parts.push(await section('DB: cubes', () => psql(`SELECT id, org_id, name, xcc_enabled, xcc_emulator, xcc_mode, xcc_hostname, ` +
|
|
249
|
+
`xcc_provider_probing_interval, xcc_observed_probing_interval, xcc_registration_id, ` +
|
|
250
|
+
`xcc_disconnect_code, xcc_online, xcc_last_keepalive, connection_expired_count, ` +
|
|
251
|
+
`reconnection_failed_count, unregistered_count, policy_id FROM cubes ORDER BY id;`)));
|
|
252
|
+
parts.push(await section('DB: cube_connection_health_state (authoritative)', () => psql(`SELECT cube_id, state, status_confidence, status_reason, last_keepalive_at, last_probe_at, ` +
|
|
253
|
+
`last_authorize_at, last_provider_status, observed_probing_interval_sec, freshness_window_sec, ` +
|
|
254
|
+
`stale_after_at, last_state_change_at, last_kv_sync_at FROM cube_connection_health_state ORDER BY cube_id;`)));
|
|
255
|
+
parts.push(await section('DB: cube_connection_health_events (recent 50)', () => psql(`SELECT cube_id, event_type, severity, source, transition_from, transition_to, inserted_at ` +
|
|
256
|
+
`FROM cube_connection_health_events ORDER BY inserted_at DESC LIMIT 50;`)));
|
|
257
|
+
parts.push(await section('DB: alarm_events (active cube/xcc/policy)', () => psql(`SELECT id, org_id, alarm_type, status, inserted_at, updated_at FROM alarm_events ` +
|
|
258
|
+
`WHERE status IN ('active','acknowledged') ` +
|
|
259
|
+
`AND (alarm_type ILIKE '%cube%' OR alarm_type ILIKE '%xcc%' OR alarm_type ILIKE '%policy%') ` +
|
|
260
|
+
`ORDER BY inserted_at DESC;`)));
|
|
261
|
+
parts.push(await section('DB: cube_event_logs (24h volume per cube)', () => psql(`SELECT cube_id, COUNT(*) AS events_24h FROM cube_event_logs ` +
|
|
262
|
+
`WHERE inserted_at > NOW() - INTERVAL '24 hours' GROUP BY cube_id ORDER BY cube_id;`)));
|
|
263
|
+
// ── NATS sections ──────────────────────────────────────────────────────
|
|
264
|
+
const net = await resolveCtNetwork();
|
|
265
|
+
parts.push(`\n===== NATS: resolved network = ${net} =====`);
|
|
266
|
+
parts.push(await section('NATS: kv ls', () => natsRun(net, ['kv', 'ls'])));
|
|
267
|
+
parts.push(await section('NATS: kv info cube_status', () => natsRun(net, ['kv', 'info', 'cube_status'])));
|
|
268
|
+
parts.push(await section('NATS: kv info policy_status', () => natsRun(net, ['kv', 'info', 'policy_status'])));
|
|
269
|
+
parts.push(await section('NATS: cube_status bucket dump', () => natsKvDump(net, 'cube_status')));
|
|
270
|
+
parts.push(await section('NATS: policy_status bucket dump', () => natsKvDump(net, 'policy_status')));
|
|
271
|
+
parts.push(await section('NATS: stream report', () => natsRun(net, ['stream', 'report'])));
|
|
272
|
+
// ── RPC-decoded interval + KV health snapshot (always runs) ─────────────
|
|
273
|
+
// Decodes each cube's live KV through the product's own read path and flags
|
|
274
|
+
// the interval pathologies (corrupt KV that won't relearn, manual-vs-observed
|
|
275
|
+
// mismatch, DB-vs-KV divergence). This is where a "shows 10s, router is 15s"
|
|
276
|
+
// stuck cube is caught.
|
|
277
|
+
parts.push(await section('cube interval + KV health (RPC-decoded)', () => rpcBounded(CUBE_DIAG_RPC_SNAPSHOT)));
|
|
278
|
+
// ── Optional RPC heartbeat trace ────────────────────────────────────────
|
|
279
|
+
// Polls the compact per-cube snapshot every ~5s for the window so engineering
|
|
280
|
+
// can watch the FSM state / learned cadence / freshness window evolve.
|
|
281
|
+
if (monitorSecs > 0) {
|
|
282
|
+
parts.push(await section(`RPC heartbeat trace (${monitorSecs}s, ~5s samples)`, async () => {
|
|
283
|
+
const samples = [];
|
|
284
|
+
const end = Date.now() + monitorSecs * 1000;
|
|
285
|
+
while (Date.now() < end) {
|
|
286
|
+
try {
|
|
287
|
+
const out = await rpcBounded(CUBE_DIAG_RPC_TRACE);
|
|
288
|
+
const traceLines = out
|
|
289
|
+
.split('\n')
|
|
290
|
+
.filter(l => /^[0-9]{4}-/.test(l));
|
|
291
|
+
samples.push(traceLines.length > 0 ? traceLines.join('\n') : '[trace sample failed]');
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
295
|
+
samples.push(`[trace sample failed] ${message}`);
|
|
296
|
+
}
|
|
297
|
+
// Clamp the inter-sample sleep to the remaining window so the loop never
|
|
298
|
+
// overshoots the requested duration (e.g. `--monitor 6` must not run ~10s).
|
|
299
|
+
const remaining = end - Date.now();
|
|
300
|
+
if (remaining > 0)
|
|
301
|
+
await sleep(Math.min(5000, remaining));
|
|
302
|
+
}
|
|
303
|
+
return samples.join('\n');
|
|
304
|
+
}));
|
|
305
|
+
}
|
|
306
|
+
// ── Optional live capture ──────────────────────────────────────────────
|
|
307
|
+
if (captureSecs > 0) {
|
|
308
|
+
for (const subject of ['cube.>', 'alarms.>']) {
|
|
309
|
+
parts.push(await section(`NATS: live capture ${subject} (${captureSecs}s)`, async () => {
|
|
310
|
+
const result = await exec('timeout', [
|
|
311
|
+
String(captureSecs),
|
|
312
|
+
'docker', 'run', '--rm', '--network', net, NATS_BOX_IMAGE,
|
|
313
|
+
'nats', '-s', NATS_URL, 'sub', '--raw', subject,
|
|
314
|
+
], { timeout: (captureSecs + 5) * 1000, reject: false });
|
|
315
|
+
return [(result.stdout ?? '').toString(), (result.stderr ?? '').toString()].filter(Boolean).join('\n');
|
|
316
|
+
}));
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// ── Log sections ───────────────────────────────────────────────────────
|
|
320
|
+
// Heartbeat timeline first: the failure_count progression, "did not refresh
|
|
321
|
+
// healthy" gate hits, and registration rotations are the stuck/flap signature.
|
|
322
|
+
const heartbeatGrep = /failure_count|did not refresh healthy|registrationID rotated|keepalive/i;
|
|
323
|
+
parts.push(await section('probe heartbeat timeline (failure_count / refresh / rotation, last 10m)', () => logsFiltered('web', 6000, 200, heartbeatGrep, { since: '10m' })));
|
|
324
|
+
const cubeGrep = /xcc|cube|keepalive|solicit|probing|register|authorize|reconnect|liveness|connection_state/i;
|
|
325
|
+
parts.push(await section('LOGS: web (filtered, tail 800)', () => logsFiltered('web', 6000, 800, cubeGrep)));
|
|
326
|
+
parts.push(await section('LOGS: nats (tail 300)', () => logsFiltered('nats', 300, 300, null)));
|
|
327
|
+
const bundle = redactSecrets(parts.join('\n') + '\n');
|
|
328
|
+
await writeFile(outputPath, bundle, { mode: 0o600 });
|
|
329
|
+
// `mode` only applies when writeFile CREATES the file. If outputPath already
|
|
330
|
+
// existed with broader perms, the write truncates but leaves the old mode, so
|
|
331
|
+
// the (potentially secret-bearing) bundle could stay world-readable. chmod
|
|
332
|
+
// unconditionally to clamp an existing file down to owner-only.
|
|
333
|
+
await chmod(outputPath, 0o600);
|
|
334
|
+
return outputPath;
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=cube-diag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cube-diag.js","sourceRoot":"","sources":["../../src/lib/cube-diag.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offline-steps.d.ts","sourceRoot":"","sources":["../../src/lib/offline-steps.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AAIjE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,KAAK,GAAG,eAAuB,GAAG,MAAM,EAAE,CAUpG;AAID,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBpG;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA+D/E;AAID,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAiCxD;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CA8E3D;AAID,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"offline-steps.d.ts","sourceRoot":"","sources":["../../src/lib/offline-steps.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AAIjE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,KAAK,GAAG,eAAuB,GAAG,MAAM,EAAE,CAUpG;AAID,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBpG;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA+D/E;AAID,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAiCxD;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CA8E3D;AAID,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,CAuI3D"}
|
|
@@ -349,14 +349,31 @@ export function applySteps(bundlePath) {
|
|
|
349
349
|
catch {
|
|
350
350
|
/* non-fatal — proceed with restart */
|
|
351
351
|
}
|
|
352
|
+
// Guardrail 2 + migration: appliance owns its Docker config so a host
|
|
353
|
+
// proxy can't leak into the stack; carry any host proxy into .env.
|
|
354
|
+
try {
|
|
355
|
+
const { ensureApplianceProxyPolicy } = await import('./appliance-proxy-policy.js');
|
|
356
|
+
await ensureApplianceProxyPolicy();
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
/* non-fatal — proceed with restart */
|
|
360
|
+
}
|
|
352
361
|
ctx?.log('Restarting services...');
|
|
362
|
+
// Clear any prior FAILED state so the restart recreates containers
|
|
363
|
+
// cleanly (a failed unit skips ExecStop=compose down). Best-effort.
|
|
364
|
+
try {
|
|
365
|
+
await exec('systemctl', ['reset-failed', 'docker-compose-app.service']);
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
368
|
+
/* non-fatal */
|
|
369
|
+
}
|
|
353
370
|
try {
|
|
354
371
|
await exec('systemctl', ['restart', 'docker-compose-app.service']);
|
|
355
372
|
ctx?.log('Restarted via systemctl');
|
|
356
373
|
}
|
|
357
374
|
catch {
|
|
358
375
|
ctx?.log('systemctl failed, using docker-compose up');
|
|
359
|
-
await composeUp(['-d']);
|
|
376
|
+
await composeUp(['-d', '--force-recreate', '--remove-orphans']);
|
|
360
377
|
}
|
|
361
378
|
// Cleanup extract dir
|
|
362
379
|
await rm(extractDir, { recursive: true, force: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offline-steps.js","sourceRoot":"","sources":["../../src/lib/offline-steps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"offline-steps.js","sourceRoot":"","sources":["../../src/lib/offline-steps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const PROXY_ENV_KEYS: readonly ["HTTP_PROXY", "HTTPS_PROXY", "NO_PROXY", "PROXY_USERNAME", "PROXY_PASSWORD", "PROXY_BEARER_TOKEN", "PROXY_BASIC_TOKEN"];
|
|
2
|
+
export type ProxyEnvKey = (typeof PROXY_ENV_KEYS)[number];
|
|
3
|
+
export interface ProxySettings {
|
|
4
|
+
http?: string;
|
|
5
|
+
https?: string;
|
|
6
|
+
noProxy?: string;
|
|
7
|
+
username?: string;
|
|
8
|
+
password?: string;
|
|
9
|
+
bearerToken?: string;
|
|
10
|
+
basicToken?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function getProxySettings(): Record<ProxyEnvKey, string>;
|
|
13
|
+
export declare function redactProxyUrl(value: string): string;
|
|
14
|
+
export declare function displayProxyValue(key: ProxyEnvKey, value: string): string;
|
|
15
|
+
export declare function validateProxyValue(label: string, value: string): void;
|
|
16
|
+
export declare function validateProxyUrl(label: string, value: string): void;
|
|
17
|
+
export declare function setProxySettings(settings: ProxySettings): Promise<void>;
|
|
18
|
+
export declare function clearProxySettings(): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/lib/proxy.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,mIAQjB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAK9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWpD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYzE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIrE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAYnE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC7E;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGxD"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { updateEnvKeys, readEnvKeys } from './env.js';
|
|
2
|
+
import { ensureApplianceProxyPolicy } from './appliance-proxy-policy.js';
|
|
3
|
+
export const PROXY_ENV_KEYS = [
|
|
4
|
+
'HTTP_PROXY',
|
|
5
|
+
'HTTPS_PROXY',
|
|
6
|
+
'NO_PROXY',
|
|
7
|
+
'PROXY_USERNAME',
|
|
8
|
+
'PROXY_PASSWORD',
|
|
9
|
+
'PROXY_BEARER_TOKEN',
|
|
10
|
+
'PROXY_BASIC_TOKEN',
|
|
11
|
+
];
|
|
12
|
+
export function getProxySettings() {
|
|
13
|
+
const env = readEnvKeys();
|
|
14
|
+
return Object.fromEntries(PROXY_ENV_KEYS.map(key => [key, env[key] ?? '']));
|
|
15
|
+
}
|
|
16
|
+
export function redactProxyUrl(value) {
|
|
17
|
+
if (!value)
|
|
18
|
+
return '';
|
|
19
|
+
try {
|
|
20
|
+
const url = new URL(value);
|
|
21
|
+
if (!url.username && !url.password)
|
|
22
|
+
return value;
|
|
23
|
+
url.username = 'redacted';
|
|
24
|
+
url.password = '';
|
|
25
|
+
return url.toString();
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return value.replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@]+@/, '$1redacted@');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function displayProxyValue(key, value) {
|
|
32
|
+
if (!value)
|
|
33
|
+
return '<empty>';
|
|
34
|
+
if (key === 'HTTP_PROXY' || key === 'HTTPS_PROXY')
|
|
35
|
+
return redactProxyUrl(value);
|
|
36
|
+
if (key === 'PROXY_USERNAME' ||
|
|
37
|
+
key === 'PROXY_PASSWORD' ||
|
|
38
|
+
key === 'PROXY_BEARER_TOKEN' ||
|
|
39
|
+
key === 'PROXY_BASIC_TOKEN') {
|
|
40
|
+
return '<set>';
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
export function validateProxyValue(label, value) {
|
|
45
|
+
if (/[\x00-\x1F\x7F]/.test(value)) {
|
|
46
|
+
throw new Error(`${label} must not contain control characters`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function validateProxyUrl(label, value) {
|
|
50
|
+
validateProxyValue(label, value);
|
|
51
|
+
let parsed;
|
|
52
|
+
try {
|
|
53
|
+
parsed = new URL(value);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
throw new Error(`${label} must be a valid URL`);
|
|
57
|
+
}
|
|
58
|
+
if (!parsed.host)
|
|
59
|
+
throw new Error(`${label} must be a valid URL`);
|
|
60
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
61
|
+
throw new Error(`${label} must start with http:// or https://`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export async function setProxySettings(settings) {
|
|
65
|
+
const updates = {};
|
|
66
|
+
if (settings.http !== undefined) {
|
|
67
|
+
validateProxyUrl('HTTP proxy', settings.http);
|
|
68
|
+
updates.HTTP_PROXY = settings.http;
|
|
69
|
+
}
|
|
70
|
+
if (settings.https !== undefined) {
|
|
71
|
+
validateProxyUrl('HTTPS proxy', settings.https);
|
|
72
|
+
updates.HTTPS_PROXY = settings.https;
|
|
73
|
+
}
|
|
74
|
+
if (settings.noProxy !== undefined) {
|
|
75
|
+
validateProxyValue('NO_PROXY', settings.noProxy);
|
|
76
|
+
updates.NO_PROXY = settings.noProxy;
|
|
77
|
+
}
|
|
78
|
+
if (settings.username !== undefined) {
|
|
79
|
+
validateProxyValue('proxy username', settings.username);
|
|
80
|
+
updates.PROXY_USERNAME = settings.username;
|
|
81
|
+
}
|
|
82
|
+
if (settings.password !== undefined) {
|
|
83
|
+
validateProxyValue('proxy password', settings.password);
|
|
84
|
+
updates.PROXY_PASSWORD = settings.password;
|
|
85
|
+
}
|
|
86
|
+
if (settings.bearerToken !== undefined) {
|
|
87
|
+
validateProxyValue('proxy bearer token', settings.bearerToken);
|
|
88
|
+
updates.PROXY_BEARER_TOKEN = settings.bearerToken;
|
|
89
|
+
}
|
|
90
|
+
if (settings.basicToken !== undefined) {
|
|
91
|
+
validateProxyValue('proxy basic token', settings.basicToken);
|
|
92
|
+
updates.PROXY_BASIC_TOKEN = settings.basicToken;
|
|
93
|
+
}
|
|
94
|
+
if (Object.keys(updates).length === 0) {
|
|
95
|
+
throw new Error('No proxy settings provided');
|
|
96
|
+
}
|
|
97
|
+
await updateEnvKeys(updates);
|
|
98
|
+
await ensureApplianceProxyPolicy();
|
|
99
|
+
}
|
|
100
|
+
export async function clearProxySettings() {
|
|
101
|
+
await updateEnvKeys(Object.fromEntries(PROXY_ENV_KEYS.map(key => [key, ''])));
|
|
102
|
+
await ensureApplianceProxyPolicy();
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/lib/proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/rpc.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Run Elixir code in the web container via the release `rpc` command.
|
|
3
|
+
*
|
|
4
|
+
* @param code Elixir source evaluated in the running release.
|
|
5
|
+
* @param timeoutMs Optional subprocess budget. When set, it is passed straight
|
|
6
|
+
* to `composeExec` (execa), so a wedged `docker compose exec` is actually
|
|
7
|
+
* KILLED — not merely abandoned by a `Promise.race` that leaves the child
|
|
8
|
+
* alive. Callers that must bound a hung container (e.g. cube-diag) pass this.
|
|
9
|
+
*/
|
|
10
|
+
export declare function rpc(code: string, timeoutMs?: number): Promise<string>;
|
|
2
11
|
export declare function rpcOk(): Promise<boolean>;
|
|
3
12
|
export declare function healthCheck(): Promise<boolean>;
|
|
4
13
|
export interface AppHealthDetail {
|
package/dist/lib/rpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/lib/rpc.ts"],"names":[],"mappings":"AAgBA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/lib/rpc.ts"],"names":[],"mappings":"AAgBA;;;;;;;;GAQG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM3E;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAO9C;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpD;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CAiI7D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|