@drakkar.software/octobot-client 0.4.0 → 0.8.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 (56) hide show
  1. package/README.md +1 -1
  2. package/dist/client/adapters/accounts.d.ts +5 -5
  3. package/dist/client/adapters/accounts.d.ts.map +1 -1
  4. package/dist/client/adapters/accounts.js +1 -4
  5. package/dist/client/adapters/accounts.js.map +1 -1
  6. package/dist/client/adapters/automations.d.ts.map +1 -1
  7. package/dist/client/adapters/automations.js +3 -2
  8. package/dist/client/adapters/automations.js.map +1 -1
  9. package/dist/client/connect/readOnly.d.ts +1 -1
  10. package/dist/client/connect/readOnly.d.ts.map +1 -1
  11. package/dist/client/connect/readOnly.js +27 -9
  12. package/dist/client/connect/readOnly.js.map +1 -1
  13. package/dist/client/core/views.d.ts +43 -21
  14. package/dist/client/core/views.d.ts.map +1 -1
  15. package/dist/client/core/views.js +38 -7
  16. package/dist/client/core/views.js.map +1 -1
  17. package/dist/client/index.d.ts +1 -1
  18. package/dist/client/index.d.ts.map +1 -1
  19. package/dist/client/index.js +1 -1
  20. package/dist/client/index.js.map +1 -1
  21. package/dist/identity/index.d.ts +1 -1
  22. package/dist/identity/index.d.ts.map +1 -1
  23. package/dist/identity/index.js +1 -1
  24. package/dist/identity/index.js.map +1 -1
  25. package/dist/identity/pairingRequest.d.ts +20 -0
  26. package/dist/identity/pairingRequest.d.ts.map +1 -1
  27. package/dist/identity/pairingRequest.js +28 -9
  28. package/dist/identity/pairingRequest.js.map +1 -1
  29. package/dist/index.d.ts +5 -3
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +5 -3
  32. package/dist/index.js.map +1 -1
  33. package/dist/protocol/index.d.ts +4 -2
  34. package/dist/protocol/index.d.ts.map +1 -1
  35. package/dist/protocol/index.js +4 -2
  36. package/dist/protocol/index.js.map +1 -1
  37. package/dist/protocol/proposal.d.ts +14 -27
  38. package/dist/protocol/proposal.d.ts.map +1 -1
  39. package/dist/protocol/proposal.js +22 -3
  40. package/dist/protocol/proposal.js.map +1 -1
  41. package/dist/protocol/proposalSummary.d.ts +23 -0
  42. package/dist/protocol/proposalSummary.d.ts.map +1 -0
  43. package/dist/protocol/proposalSummary.js +28 -0
  44. package/dist/protocol/proposalSummary.js.map +1 -0
  45. package/dist/protocol/qrFrames.d.ts +146 -0
  46. package/dist/protocol/qrFrames.d.ts.map +1 -0
  47. package/dist/protocol/qrFrames.js +307 -0
  48. package/dist/protocol/qrFrames.js.map +1 -0
  49. package/dist/protocol/state.d.ts +30 -16
  50. package/dist/protocol/state.d.ts.map +1 -1
  51. package/dist/protocol/state.js +67 -28
  52. package/dist/protocol/state.js.map +1 -1
  53. package/dist/transport/urls.d.ts +2 -8
  54. package/dist/transport/urls.d.ts.map +1 -1
  55. package/dist/transport/urls.js.map +1 -1
  56. package/package.json +3 -3
@@ -0,0 +1,307 @@
1
+ import { keccak_256 } from '@noble/hashes/sha3.js';
2
+ import { toHex } from '../internal/bytes.js';
3
+ /** Generic multi-frame QR transport: splits an oversized string payload into
4
+ * scannable QR frames and reassembles them on the other end. Deliberately
5
+ * payload-agnostic (plain string in, plain string out) — it knows nothing
6
+ * about action proposals or pairing payloads specifically, which is what
7
+ * lets a reassembled payload flow back through whatever generic classifier
8
+ * the caller already uses (`classifyScannedCode`) instead of a
9
+ * codec-specific one.
10
+ *
11
+ * This package never renders a QR image itself, here as everywhere else: it
12
+ * returns the strings to encode and consumes the strings a scanner read. */
13
+ export const QR_FRAME_CODEC = 'OBQR2';
14
+ /** `OBQR2|<kind>|<8 hex>|<2-digit index>|<2-digit total>|` — constant width,
15
+ * so the body can always be recovered with a fixed `slice`, never a
16
+ * `split('|')` (the body is itself often JSON and freely contains `|`). */
17
+ export const QR_FRAME_HEADER_LENGTH = 23;
18
+ /** v11 @ ECL M (a typical QR library default) holds 251 bytes; 11 bytes of
19
+ * slack against a different segmentation choice or a future header field.
20
+ * 61 modules at a ~220pt display box stays comfortably scannable. */
21
+ export const QR_FRAME_MAX_BYTES = 240;
22
+ export const QR_FRAME_BODY_MAX_BYTES = QR_FRAME_MAX_BYTES - QR_FRAME_HEADER_LENGTH;
23
+ /** At or below this, `encodeQrFrames` returns the payload UNFRAMED — no
24
+ * prefix, byte-identical to what a caller would have rendered directly.
25
+ * Keeps every single-frame payload on the exact same path it uses without
26
+ * this module at all. */
27
+ export const QR_SINGLE_FRAME_MAX_BYTES = 300;
28
+ /** ~21.4 KB ceiling (99 * 217 body bytes). */
29
+ export const QR_MAX_FRAMES = 99;
30
+ /** Recommended display cadence for a producer cycling frames: ~4 fps, well
31
+ * above the ~65-130ms a phone camera needs to lock a code, and below the
32
+ * 500ms identical-event throttle scanner libraries commonly apply (which
33
+ * only ever compares against the immediately previous event, so distinct
34
+ * cycling frames are never throttled). */
35
+ export const QR_FRAME_INTERVAL_MS = 250;
36
+ /** How long a partially-collected transfer survives without a new frame
37
+ * before the accumulator drops it, so a walked-away-from transfer cannot
38
+ * poison the next one. Exported, not just defaulted, because a consumer
39
+ * typically needs the same window a second time for its own UI timer (the
40
+ * accumulator only re-checks staleness on the next `accept()` call, so
41
+ * nothing clears a progress indicator that has simply stopped moving) —
42
+ * and a consumer that hardcodes its own copy silently keeps the old window
43
+ * the day this one is retuned. */
44
+ export const QR_FRAME_STALE_MS = 8000;
45
+ /** A frame's kind tag is ADVISORY and opaque to this module: nothing here
46
+ * parses the body or checks that it matches the tag. It exists so a scanner
47
+ * that accepts framed transfers of one kind can drop another kind's
48
+ * transfer at its FIRST frame, instead of collecting every frame and only
49
+ * discovering the mismatch after reassembly. A scanner that accepts
50
+ * everything, or that refuses frames outright, can ignore it entirely. */
51
+ export const QR_FRAME_KIND_UNSPECIFIED = '-';
52
+ export const QR_FRAME_KIND_ACTION_PROPOSAL = 'p';
53
+ export const QR_FRAME_KIND_READ_ONLY_PAIRING = 'r';
54
+ /** One character, so the header stays fixed-width. */
55
+ const KIND_RE = /^[A-Za-z-]$/;
56
+ export class QrPayloadTooLargeError extends Error {
57
+ requiredFrames;
58
+ maxFrames;
59
+ constructor(requiredFrames, maxFrames) {
60
+ super(`Payload requires ${requiredFrames} QR frames, exceeding the ${maxFrames}-frame limit`);
61
+ this.name = 'QrPayloadTooLargeError';
62
+ this.requiredFrames = requiredFrames;
63
+ this.maxFrames = maxFrames;
64
+ }
65
+ }
66
+ const FRAME_PREFIX_RE = /^OBQR2\|([A-Za-z-])\|([0-9a-f]{8})\|(\d{2})\|(\d{2})\|/;
67
+ /** First 4 bytes of keccak256(payload) — deterministic (no RNG to stub in
68
+ * tests), and doubles as a free integrity check on reassembly. */
69
+ function transferIdFor(payload) {
70
+ return toHex(keccak_256(new TextEncoder().encode(payload)).slice(0, 4));
71
+ }
72
+ /** UTF-8 byte length of one code point. A lone surrogate (never produced by
73
+ * well-formed `JSON.stringify` output, but handled defensively) is mapped to
74
+ * 3 bytes — the correct WTF-8 length, not just a safety margin. */
75
+ function utf8ByteLengthOfCodePoint(ch) {
76
+ const cp = ch.codePointAt(0) ?? 0;
77
+ if (cp <= 0x7f)
78
+ return 1;
79
+ if (cp <= 0x7ff)
80
+ return 2;
81
+ if (cp <= 0xffff)
82
+ return 3;
83
+ return 4;
84
+ }
85
+ function utf8ByteLength(payload) {
86
+ let n = 0;
87
+ for (const ch of payload)
88
+ n += utf8ByteLengthOfCodePoint(ch);
89
+ return n;
90
+ }
91
+ /** Split by a UTF-8 BYTE budget, iterating with `for...of` — which yields
92
+ * whole code points, so a cut can never land inside a surrogate pair. Byte
93
+ * (not character) budgeting matters too: QR byte-mode capacity is bytes, so
94
+ * a character budget would pass every ASCII test and silently overflow on a
95
+ * French- or CJK-language payload. Only used to find the MINIMUM frame
96
+ * count (a tight greedy pack); the actual split for that count is
97
+ * `splitIntoFrameCount` below, which balances sizes instead of dumping
98
+ * everything short into a near-empty last frame. */
99
+ function splitByUtf8Budget(payload, budgetBytes) {
100
+ const out = [];
101
+ let cur = '';
102
+ let curBytes = 0;
103
+ for (const ch of payload) {
104
+ const n = utf8ByteLengthOfCodePoint(ch);
105
+ if (curBytes + n > budgetBytes) {
106
+ out.push(cur);
107
+ cur = '';
108
+ curBytes = 0;
109
+ }
110
+ cur += ch;
111
+ curBytes += n;
112
+ }
113
+ if (cur)
114
+ out.push(cur);
115
+ return out;
116
+ }
117
+ /** Split into exactly `frameCount` frames, each carrying as near an equal
118
+ * byte share as code-point boundaries allow. Keeps every frame at the same
119
+ * QR version/density: a code that visibly gets sparser on its last frame
120
+ * sends a scanner's autofocus hunting.
121
+ *
122
+ * The target is recomputed from the bytes and frames still OUTSTANDING after
123
+ * each flush, rather than precomputed once per index. That distinction is
124
+ * load-bearing, not a refactor. A frame can only end on a code-point
125
+ * boundary, so it undershoots its target by up to one code point's width;
126
+ * with a fixed target array that shortfall is never reclaimed and every
127
+ * frame repeats it, so the accumulated slack eventually spills past the last
128
+ * planned frame and opens another one. On multi-byte payloads that was the
129
+ * normal outcome, not an edge case: `'日'.repeat(121)` (363 bytes, 2 frames'
130
+ * worth) came out as three frames of 180/180/3 bytes, i.e. exactly the
131
+ * near-empty trailing frame this function exists to avoid, and a 20,996-byte
132
+ * emoji payload was rejected as needing 100 frames when 98 sufficed.
133
+ * Recomputing lets each frame absorb the previous one's shortfall, so the
134
+ * split lands in `frameCount` frames and stays balanced. */
135
+ function splitIntoFrameCount(payload, frameCount) {
136
+ let remainingBytes = utf8ByteLength(payload);
137
+ let remainingFrames = frameCount;
138
+ const targetFor = () => (remainingFrames > 0
139
+ ? Math.min(Math.ceil(remainingBytes / remainingFrames), QR_FRAME_BODY_MAX_BYTES)
140
+ : QR_FRAME_BODY_MAX_BYTES);
141
+ const out = [];
142
+ let cur = '';
143
+ let curBytes = 0;
144
+ let target = targetFor();
145
+ for (const ch of payload) {
146
+ const n = utf8ByteLengthOfCodePoint(ch);
147
+ if (curBytes + n > target) {
148
+ out.push(cur);
149
+ remainingBytes -= curBytes;
150
+ remainingFrames -= 1;
151
+ target = targetFor();
152
+ cur = '';
153
+ curBytes = 0;
154
+ }
155
+ cur += ch;
156
+ curBytes += n;
157
+ }
158
+ if (cur)
159
+ out.push(cur);
160
+ return out;
161
+ }
162
+ /** Split an already-encoded string payload into scannable QR frames. Returns
163
+ * `[payload]` UNCHANGED when it fits `QR_SINGLE_FRAME_MAX_BYTES`, so a short
164
+ * payload never gains a prefix and `opts.kind` is simply unused. Throws
165
+ * `QrPayloadTooLargeError` above `QR_MAX_FRAMES`.
166
+ *
167
+ * `opts.kind` is the advisory tag described on `QR_FRAME_KIND_UNSPECIFIED`;
168
+ * it must be a single `[A-Za-z-]` character, because the header is
169
+ * fixed-width. Anything else throws rather than emitting frames that would
170
+ * not re-parse. */
171
+ export function encodeQrFrames(payload, opts) {
172
+ const kind = opts?.kind ?? QR_FRAME_KIND_UNSPECIFIED;
173
+ if (!KIND_RE.test(kind)) {
174
+ throw new Error(`invalid QR frame kind ${JSON.stringify(kind)}: expected a single [A-Za-z-] character`);
175
+ }
176
+ if (utf8ByteLength(payload) <= QR_SINGLE_FRAME_MAX_BYTES)
177
+ return [payload];
178
+ const minFrames = splitByUtf8Budget(payload, QR_FRAME_BODY_MAX_BYTES).length;
179
+ if (minFrames > QR_MAX_FRAMES)
180
+ throw new QrPayloadTooLargeError(minFrames, QR_MAX_FRAMES);
181
+ const bodies = splitIntoFrameCount(payload, minFrames);
182
+ // The balancing split can rarely run one or two frames longer than
183
+ // `minFrames` (see splitIntoFrameCount) — re-check the ceiling against the
184
+ // actual result rather than trusting the estimate.
185
+ if (bodies.length > QR_MAX_FRAMES)
186
+ throw new QrPayloadTooLargeError(bodies.length, QR_MAX_FRAMES);
187
+ const transferId = transferIdFor(payload);
188
+ const total = bodies.length;
189
+ return bodies.map((body, index) => (`${QR_FRAME_CODEC}|${kind}|${transferId}|${String(index).padStart(2, '0')}|${String(total).padStart(2, '0')}|${body}`));
190
+ }
191
+ /** Cheap prefix test — no parse, no throw. A string that passes this but
192
+ * fails `parseQrFrame` is OUR garbage, not an unknown code, so the caller
193
+ * must drop it silently rather than fall through to generic classification. */
194
+ export function isQrFrame(data) {
195
+ return data.startsWith(`${QR_FRAME_CODEC}|`);
196
+ }
197
+ /** Parse one frame. `null` on any malformed header, bad kind, bad hex,
198
+ * non-numeric index/total, `index >= total`, `total === 0`, or empty body.
199
+ * The body is returned verbatim — it is recovered by fixed offset, never
200
+ * `split('|')`, so it may itself contain `|`. */
201
+ export function parseQrFrame(data) {
202
+ const m = FRAME_PREFIX_RE.exec(data);
203
+ if (!m)
204
+ return null;
205
+ const [, kind, transferId, indexStr, totalStr] = m;
206
+ const index = Number(indexStr);
207
+ const total = Number(totalStr);
208
+ if (total === 0 || index >= total)
209
+ return null;
210
+ const body = data.slice(QR_FRAME_HEADER_LENGTH);
211
+ if (!body)
212
+ return null;
213
+ // The encoder never emits a body over this, so one that exceeds it did not
214
+ // come from `encodeQrFrames`. Rejecting here rather than buffering it keeps
215
+ // the ceiling a property of the FORMAT instead of only of the encoder: an
216
+ // accumulator fed from something other than a camera (a deep link, a paste,
217
+ // an NFC read) would otherwise retain an unbounded body per frame slot.
218
+ if (utf8ByteLength(body) > QR_FRAME_BODY_MAX_BYTES)
219
+ return null;
220
+ return { kind, transferId, index, total, body };
221
+ }
222
+ /** Stateful reassembly buffer, one per scanner instance (never a module
223
+ * singleton — several screens may each hold their own scanner). Duplicate
224
+ * frames are the common case (a ~30fps camera reads the same displayed
225
+ * frame several times before it cycles), so duplicate detection is an O(1)
226
+ * `buf[i] !== undefined` check, not an allocation.
227
+ *
228
+ * `acceptKind`, when given, is consulted on every frame BEFORE any state is
229
+ * touched: a refused kind returns `{status:'ignored'}` and buffers nothing,
230
+ * which is what lets a single-purpose scanner sit in front of a producer
231
+ * cycling some other kind without ever filling its buffer. Defaults to
232
+ * accepting every kind. */
233
+ export function createQrFrameAccumulator(opts) {
234
+ const staleMs = opts?.staleMs ?? QR_FRAME_STALE_MS;
235
+ const now = opts?.now ?? Date.now;
236
+ const acceptKind = opts?.acceptKind;
237
+ let state = null;
238
+ return {
239
+ accept(data) {
240
+ if (!isQrFrame(data))
241
+ return { status: 'ignored' };
242
+ const frame = parseQrFrame(data);
243
+ if (!frame)
244
+ return { status: 'discarded' };
245
+ if (acceptKind && !acceptKind(frame.kind))
246
+ return { status: 'ignored' };
247
+ // Captured before the stale-drop below: a timed-out collection still
248
+ // counts as "there was a prior collection being interrupted" for the
249
+ // 'restarted' vs 'progress' distinction.
250
+ const hadPriorState = state !== null;
251
+ if (state && now() - state.lastAcceptedAt > staleMs)
252
+ state = null;
253
+ // `kind` participates in transfer identity even though `transferId` is
254
+ // a hash of the payload alone: the same payload framed under two kinds
255
+ // shares a transferId, and treating those as one transfer would
256
+ // interleave two producers' frames into a single buffer.
257
+ const isSameTransfer = state !== null
258
+ && state.transferId === frame.transferId
259
+ && state.kind === frame.kind
260
+ && state.total === frame.total;
261
+ let s;
262
+ if (isSameTransfer && state) {
263
+ s = state;
264
+ }
265
+ else {
266
+ s = {
267
+ kind: frame.kind,
268
+ transferId: frame.transferId,
269
+ total: frame.total,
270
+ buf: new Array(frame.total).fill(undefined),
271
+ received: 0,
272
+ lastAcceptedAt: now(),
273
+ };
274
+ state = s;
275
+ }
276
+ if (s.buf[frame.index] === undefined) {
277
+ s.buf[frame.index] = frame.body;
278
+ s.received += 1;
279
+ }
280
+ s.lastAcceptedAt = now();
281
+ if (s.received < s.total) {
282
+ const progress = {
283
+ kind: s.kind,
284
+ transferId: s.transferId,
285
+ received: s.received,
286
+ total: s.total,
287
+ };
288
+ return { status: hadPriorState && !isSameTransfer ? 'restarted' : 'progress', progress };
289
+ }
290
+ // Complete — emitted exactly once: state resets before returning,
291
+ // whether the integrity check passes or not.
292
+ const payload = s.buf.join('');
293
+ const intact = transferIdFor(payload) === s.transferId;
294
+ state = null;
295
+ return intact ? { status: 'complete', payload } : { status: 'corrupt' };
296
+ },
297
+ progress() {
298
+ return state
299
+ ? { kind: state.kind, transferId: state.transferId, received: state.received, total: state.total }
300
+ : null;
301
+ },
302
+ reset() {
303
+ state = null;
304
+ },
305
+ };
306
+ }
307
+ //# sourceMappingURL=qrFrames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrFrames.js","sourceRoot":"","sources":["../../src/protocol/qrFrames.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  import type { AutomationState, WorkflowStatus, UserAction, AutomationActionResult, AccountActionResult, Account as ProtocolAccount, ExchangeConfig, DetailedAsset, Strategy as ProtocolStrategy } from '@drakkar.software/octobot-protocol';
2
2
  import type { StrategyKind } from './strategy/kinds.js';
3
+ /** A coarse run-status classification for `AutomationView` — never itself on
4
+ * the wire (the real wire enum is `AutomationState.status`'s `WorkflowStatus`,
5
+ * 7 values); this is a client-side categorization, computed fresh by
6
+ * `workflowStatusToAutomationStatus` below, so it stays a local type here
7
+ * rather than living in the protocol package. */
8
+ export type AutomationRunStatus = 'live' | 'draft' | 'stopped';
3
9
  export declare function isRecord(value: unknown): value is Record<string, unknown>;
4
10
  export declare function cachedByDoc<T>(compute: (doc: Record<string, unknown>) => T, empty: T): (doc: unknown) => T;
5
11
  /** Derives a `StrategyKind` from a protocol Strategy's configuration —
@@ -18,7 +24,6 @@ export declare const parseNodeUserActions: (doc: unknown) => UserAction[];
18
24
  /** Protocol workflow status → a coarse live/draft/stopped classification.
19
25
  * 'canceled', 'failed', 'completed' and any future unknown value map to
20
26
  * 'stopped' so a non-running workflow never renders as a live bot. */
21
- export type AutomationRunStatus = 'live' | 'draft' | 'stopped';
22
27
  export declare function workflowStatusToAutomationStatus(status: WorkflowStatus | string | undefined): AutomationRunStatus;
23
28
  /** Node-reported failure for an automation: error_message is the protocol
24
29
  * enum-ish summary, error the detailed string. */
@@ -32,16 +37,10 @@ export declare function normalizeNodeAssets(raw: unknown): DetailedAsset[];
32
37
  export declare function automationHoldings(state: AutomationState): DetailedAsset[];
33
38
  export declare const parseNodeAccounts: (doc: unknown) => ProtocolAccount[];
34
39
  export declare const parseNodeExchangeConfigs: (doc: unknown) => ExchangeConfig[];
35
- /** A protocol-shaped account holding: no fiat value (a caller with its own
36
- * pricing owns that), no display-only decoration. */
37
- export type Holding = {
38
- symbol: string;
39
- total: number;
40
- free: number;
41
- used: number;
42
- };
43
- /** Map node-reported asset quantities to a flat holdings list. */
44
- export declare function accountHoldingsFromNodeState(na: ProtocolAccount): Holding[];
40
+ /** Node-reported asset quantities for an account, flattened. Kept as its own
41
+ * named function (rather than inlining `normalizeNodeAssets(na.assets)`
42
+ * at call sites) so `accountViewOf`'s intent reads clearly. */
43
+ export declare function accountHoldingsFromNodeState(na: ProtocolAccount): DetailedAsset[];
45
44
  export declare function automationResultOf(action: UserAction): AutomationActionResult | null;
46
45
  export declare function accountResultOf(action: UserAction): AccountActionResult | null;
47
46
  export declare function actionErrorDetails(action: UserAction): string | null;
@@ -71,11 +70,26 @@ export declare function targetAccountIdsOf(action: UserAction): string[];
71
70
  * with no explicit `account_ids` refreshes every account, so it counts as
72
71
  * targeting all of them. */
73
72
  export declare function actionTargetsAccount(action: UserAction, accountId: string): boolean;
74
- /** The strategy (id, version) an automation runs, recovered from the action
75
- * history: node AutomationStates carry no strategy reference — the
76
- * automation_create / automation_edit configurations are the only wire
77
- * record. The newest action targeting the automation wins (an edit
78
- * supersedes the create). */
73
+ /** The strategy (id, version) every automation referenced in `actions` runs,
74
+ * recovered from the action history in one pass: node AutomationStates
75
+ * carry no strategy reference — the automation_create / automation_edit
76
+ * configurations are the only wire record. The newest action targeting an
77
+ * automation wins (an edit supersedes the create). Prefer this over calling
78
+ * `automationStrategyRefOf` once per automation against the same `actions`
79
+ * array — that repeats the full scan per automation (O(automations ×
80
+ * actions)); this does the equivalent work once (O(actions)). */
81
+ export declare function automationStrategyRefsOf(actions: UserAction[]): Map<string, {
82
+ id: string;
83
+ version?: string;
84
+ }>;
85
+ /** The strategy (id, version) one automation runs, scanning `actions` once
86
+ * for just that id — a deliberately separate, targeted pass rather than
87
+ * `automationStrategyRefsOf(actions).get(automationId)`, so a single lookup
88
+ * doesn't pay for building a map entry for every OTHER automation in the
89
+ * action history too. Resolving more than one automation against the same
90
+ * `actions` array should call `automationStrategyRefsOf` once instead — this
91
+ * rescans on every call, which is fine for one-off lookups but O(automations
92
+ * × actions) in a loop. */
79
93
  export declare function automationStrategyRefOf(actions: UserAction[], automationId: string): {
80
94
  id: string;
81
95
  version?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/protocol/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/protocol/state.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,9 @@ export const parseNodeUserActions = cachedByDoc((doc) => {
69
69
  return EMPTY_USER_ACTIONS;
70
70
  return doc.user_actions.filter((entry) => isRecord(entry) && typeof entry.id === 'string');
71
71
  }, EMPTY_USER_ACTIONS);
72
+ /** Protocol workflow status → a coarse live/draft/stopped classification.
73
+ * 'canceled', 'failed', 'completed' and any future unknown value map to
74
+ * 'stopped' so a non-running workflow never renders as a live bot. */
72
75
  export function workflowStatusToAutomationStatus(status) {
73
76
  switch (status) {
74
77
  case 'scheduled':
@@ -128,15 +131,11 @@ export const parseNodeExchangeConfigs = cachedByDoc((doc) => {
128
131
  return EMPTY_EXCHANGE_CONFIGS;
129
132
  return doc.exchange_configs.filter((entry) => isRecord(entry) && typeof entry.id === 'string');
130
133
  }, EMPTY_EXCHANGE_CONFIGS);
131
- /** Map node-reported asset quantities to a flat holdings list. */
134
+ /** Node-reported asset quantities for an account, flattened. Kept as its own
135
+ * named function (rather than inlining `normalizeNodeAssets(na.assets)`
136
+ * at call sites) so `accountViewOf`'s intent reads clearly. */
132
137
  export function accountHoldingsFromNodeState(na) {
133
- const assets = normalizeNodeAssets(na.assets);
134
- return assets.map((a) => ({
135
- symbol: a.symbol,
136
- total: a.total,
137
- free: a.available,
138
- used: Math.max(0, a.total - a.available),
139
- }));
138
+ return normalizeNodeAssets(na.assets);
140
139
  }
141
140
  // ── Typed user-action accessors ──────────────────────────────────────────────
142
141
  // Discriminated reads over UserAction.result / .configuration — replace
@@ -249,34 +248,74 @@ export function actionTargetsAccount(action, accountId) {
249
248
  return true;
250
249
  return targetAccountIdsOf(action).includes(accountId);
251
250
  }
252
- /** The strategy (id, version) an automation runs, recovered from the action
253
- * history: node AutomationStates carry no strategy reference — the
254
- * automation_create / automation_edit configurations are the only wire
255
- * record. The newest action targeting the automation wins (an edit
256
- * supersedes the create). */
257
- export function automationStrategyRefOf(actions, automationId) {
258
- let best = null;
259
- let bestAt = '';
251
+ /** Pull the (automationId, strategy ref) an `automation_edit`/`automation_create`
252
+ * action carries, if any — the shared per-action extraction both
253
+ * `automationStrategyRefsOf` and `automationStrategyRefOf` scan for, each
254
+ * aggregating it differently (see their own doc comments). */
255
+ function automationStrategyRefFromAction(action) {
256
+ const cfg = action.configuration;
257
+ if (!cfg)
258
+ return null;
259
+ let automationId;
260
+ let ref;
261
+ if (cfg.action_type === 'automation_edit') {
262
+ automationId = cfg.id;
263
+ ref = cfg.configuration?.strategy;
264
+ }
265
+ else if (cfg.action_type === 'automation_create') {
266
+ automationId = createdAutomationIdOf(action) ?? undefined;
267
+ ref = cfg.configuration?.strategy;
268
+ }
269
+ if (!automationId || !ref?.id)
270
+ return null;
271
+ return { automationId, ref: { id: ref.id, version: ref.version } };
272
+ }
273
+ /** The strategy (id, version) every automation referenced in `actions` runs,
274
+ * recovered from the action history in one pass: node AutomationStates
275
+ * carry no strategy reference — the automation_create / automation_edit
276
+ * configurations are the only wire record. The newest action targeting an
277
+ * automation wins (an edit supersedes the create). Prefer this over calling
278
+ * `automationStrategyRefOf` once per automation against the same `actions`
279
+ * array — that repeats the full scan per automation (O(automations ×
280
+ * actions)); this does the equivalent work once (O(actions)). */
281
+ export function automationStrategyRefsOf(actions) {
282
+ const best = new Map();
283
+ const bestAt = new Map();
260
284
  for (const action of actions) {
261
- const cfg = action.configuration;
262
- if (!cfg)
285
+ const found = automationStrategyRefFromAction(action);
286
+ if (!found)
263
287
  continue;
264
- let ref;
265
- if (cfg.action_type === 'automation_edit' && cfg.id === automationId) {
266
- ref = cfg.configuration?.strategy;
267
- }
268
- else if (cfg.action_type === 'automation_create' && createdAutomationIdOf(action) === automationId) {
269
- ref = cfg.configuration?.strategy;
288
+ const at = action.updated_at ?? action.created_at ?? '';
289
+ const prevAt = bestAt.get(found.automationId);
290
+ if (prevAt === undefined || at >= prevAt) {
291
+ best.set(found.automationId, found.ref);
292
+ bestAt.set(found.automationId, at);
270
293
  }
271
- if (!ref?.id)
294
+ }
295
+ return best;
296
+ }
297
+ /** The strategy (id, version) one automation runs, scanning `actions` once
298
+ * for just that id — a deliberately separate, targeted pass rather than
299
+ * `automationStrategyRefsOf(actions).get(automationId)`, so a single lookup
300
+ * doesn't pay for building a map entry for every OTHER automation in the
301
+ * action history too. Resolving more than one automation against the same
302
+ * `actions` array should call `automationStrategyRefsOf` once instead — this
303
+ * rescans on every call, which is fine for one-off lookups but O(automations
304
+ * × actions) in a loop. */
305
+ export function automationStrategyRefOf(actions, automationId) {
306
+ let best;
307
+ let bestAt;
308
+ for (const action of actions) {
309
+ const found = automationStrategyRefFromAction(action);
310
+ if (!found || found.automationId !== automationId)
272
311
  continue;
273
312
  const at = action.updated_at ?? action.created_at ?? '';
274
- if (best === null || at >= bestAt) {
275
- best = { id: ref.id, version: ref.version };
313
+ if (bestAt === undefined || at >= bestAt) {
314
+ best = found.ref;
276
315
  bestAt = at;
277
316
  }
278
317
  }
279
- return best;
318
+ return best ?? null;
280
319
  }
281
320
  /** Human-facing name carried by the action's configuration, when one exists.
282
321
  * Returns null when the configuration only carries an opaque id (stop /
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/protocol/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/protocol/state.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAA;AAUjF,wEAAwE;AACxE,+EAA+E;AAC/E,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAE3E,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,qEAAqE;AACrE,6EAA6E;AAC7E,0EAA0E;AAC1E,6EAA6E;AAC7E,0EAA0E;AAC1E,8EAA8E;AAC9E,MAAM,UAAU,WAAW,CAAI,OAA4C,EAAE,KAAQ;IACnF,MAAM,KAAK,GAAG,IAAI,OAAO,EAAa,CAAA;IACtC,OAAO,CAAC,GAAY,EAAK,EAAE;QACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAA;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QACxB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACnB,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;AACH,CAAC;AAED;;0EAE0E;AAC1E,MAAM,UAAU,oBAAoB,CAAC,aAAgD;IACnF,QAAQ,aAAa,CAAC,kBAAkB,EAAE,CAAC;QACzC,KAAK,eAAe,CAAC,CAAI,OAAO,IAAI,CAAA;QACpC,KAAK,MAAM,CAAC,CAAa,OAAO,MAAM,CAAA;QACtC,KAAK,iBAAiB,CAAC,CAAE,OAAO,QAAQ,CAAA;QACxC,KAAK,kBAAkB,CAAC,CAAC,OAAO,WAAW,CAAA;QAC3C,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAI,aAAmC,CAAC,IAAI,CAAA;YACtD,IAAI,IAAI,KAAK,iBAAiB;gBAAG,OAAO,MAAM,CAAA;YAC9C,IAAI,IAAI,KAAK,gBAAgB;gBAAI,OAAO,KAAK,CAAA;YAC7C,IAAI,IAAI,KAAK,kBAAkB;gBAAE,OAAO,QAAQ,CAAA;YAChD,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAA;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,uBAAuB,GAAsB,EAAE,CAAA;AACrD,MAAM,kBAAkB,GAAiB,EAAE,CAAA;AAE3C;;0DAE0D;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAwC,WAAW,CACvF,CAAC,GAAG,EAAE,EAAE;IACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,uBAAuB,CAAA;IACnE,OAAO,GAAG,CAAC,WAAW,CAAC,MAAM,CAC3B,CAAC,KAAK,EAA4B,EAAE,CAClC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,CACxE,CAAA;AACH,CAAC,EACD,uBAAuB,CACxB,CAAA;AAED;;;mDAGmD;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAmC,WAAW,CAC7E,CAAC,GAAG,EAAE,EAAE;IACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO,kBAAkB,CAAA;IAC/D,OAAO,GAAG,CAAC,YAAY,CAAC,MAAM,CAC5B,CAAC,KAAK,EAAuB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAChF,CAAA;AACH,CAAC,EACD,kBAAkB,CACnB,CAAA;AAED;;uEAEuE;AACvE,MAAM,UAAU,gCAAgC,CAAC,MAA2C;IAC1F,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAA;QACf,KAAK,SAAS;YACZ,OAAO,OAAO,CAAA;QAChB;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC;AAED;mDACmD;AACnD,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,OAAO,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAA;AACnD,CAAC;AAED;;;uEAGuE;AACvE,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IAClC,MAAM,GAAG,GAAoB,EAAE,CAAA;IAC/B,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAQ;QAC9B,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACrC,GAAG,CAAC,IAAI,CAAC,KAAiC,CAAC,CAAA;QAC7C,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;oBAAE,GAAG,CAAC,IAAI,CAAC,MAAkC,CAAC,CAAA;YACzG,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,kBAAkB,CAAC,KAAsB;IACvD,OAAO,mBAAmB,CAAC,KAAK,CAAC,MAAiB,CAAC,CAAA;AACrD,CAAC;AAED,wEAAwE;AACxE,sEAAsE;AACtE,gDAAgD;AAEhD,MAAM,mBAAmB,GAAsB,EAAE,CAAA;AACjD,MAAM,sBAAsB,GAAqB,EAAE,CAAA;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAwC,WAAW,CAC/E,CAAC,GAAG,EAAE,EAAE;IACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,mBAAmB,CAAA;IAC5D,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CACxB,CAAC,KAAK,EAA4B,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CACrF,CAAA;AACH,CAAC,EACD,mBAAmB,CACpB,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAuC,WAAW,CACrF,CAAC,GAAG,EAAE,EAAE;IACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAAE,OAAO,sBAAsB,CAAA;IACvE,OAAO,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAChC,CAAC,KAAK,EAA2B,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CACpF,CAAA;AACH,CAAC,EACD,sBAAsB,CACvB,CAAA;AAED;;gEAEgE;AAChE,MAAM,UAAU,4BAA4B,CAAC,EAAmB;IAC9D,OAAO,mBAAmB,CAAC,EAAE,CAAC,MAAiB,CAAC,CAAA;AAClD,CAAC;AAED,gFAAgF;AAChF,wEAAwE;AACxE,uBAAuB;AAEvB,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,OAAO,MAAM,CAAC,MAAM,EAAE,WAAW,KAAK,YAAY,CAAC,CAAC,CAAE,MAAM,CAAC,MAAiC,CAAC,CAAC,CAAC,IAAI,CAAA;AACvG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAkB;IAChD,OAAO,MAAM,CAAC,MAAM,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAE,MAAM,CAAC,MAA8B,CAAC,CAAC,CAAC,IAAI,CAAA;AACjG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,iEAAiE;IACjE,0EAA0E;IAC1E,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAwE,CAAA;IAC9F,OAAO,MAAM,EAAE,aAAa,IAAI,MAAM,EAAE,aAAa,IAAI,IAAI,CAAA;AAC/D,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,qBAAqB,CAAC,MAAkB;IACtD,OAAO,kBAAkB,CAAC,MAAM,CAAC,EAAE,qBAAqB,IAAI,IAAI,CAAA;AAClE,CAAC;AAED;;2DAE2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAA;IAChC,IAAI,GAAG,EAAE,WAAW,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAA;IACtD,OAAQ,GAAkC,CAAC,aAAa,EAAE,EAAE,IAAI,IAAI,CAAA;AACtE,CAAC;AAKD,MAAM,kBAAkB,GAAqC;IAC3D,cAAc,EAAE,UAAU;IAC1B,YAAY,EAAE,UAAU;IACxB,cAAc,EAAE,UAAU;IAC1B,mBAAmB,EAAE,UAAU;IAC/B,iBAAiB,EAAE,UAAU;IAC7B,mBAAmB,EAAE,UAAU;IAC/B,sBAAsB,EAAE,UAAU;IAClC,oBAAoB,EAAE,UAAU;IAChC,sBAAsB,EAAE,UAAU;IAClC,gBAAgB,EAAE,UAAU;IAC5B,iBAAiB,EAAE,aAAa;IAChC,eAAe,EAAE,aAAa;IAC9B,eAAe,EAAE,aAAa;IAC9B,iBAAiB,EAAE,aAAa;IAChC,8DAA8D;IAC9D,eAAe,EAAE,aAAa;IAC9B,aAAa,EAAE,aAAa;IAC5B,eAAe,EAAE,aAAa;CAC/B,CAAA;AAED;;6CAE6C;AAC7C,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,EAAE,WAAW,CAAA;IAC9C,OAAO,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AACvD,CAAC;AAED;2CAC2C;AAC3C,MAAM,UAAU,oBAAoB,CAAC,MAAkB;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAA;IAChC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,QAAQ,GAAG,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,iBAAiB,CAAC,CAAC,OAAQ,GAAmC,CAAC,EAAE,CAAA;QACtE,KAAK,iBAAiB,CAAC,CAAC,OAAQ,GAAmC,CAAC,EAAE,CAAA;QACtE,KAAK,mBAAmB,CAAC,CAAC,OAAQ,GAAqC,CAAC,aAAa,CAAA;QACrF,KAAK,mBAAmB,CAAC,CAAC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAA;QAC9D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAA;IACtB,CAAC;AACH,CAAC;AAED;;;;;oDAKoD;AACpD,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAA;IAChC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IACnB,QAAQ,GAAG,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;YACrC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACvB,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,OAAO,CAAE,GAAgC,CAAC,EAAE,CAAC,CAAA;QAClE,KAAK,gBAAgB,CAAC,CAAC,OAAO,CAAE,GAAkC,CAAC,EAAE,CAAC,CAAA;QACtE,KAAK,kBAAkB,CAAC,CAAC,OAAQ,GAAoC,CAAC,WAAW,IAAI,EAAE,CAAA;QACvF,KAAK,qBAAqB;YACxB,OAAO,CAAC,mBAAmB,CAAE,GAAsC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAA;QACxF,KAAK,mBAAmB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAE,GAAoC,CAAC,EAAE,CAAC,CAAC,CAAA;QAChG,KAAK,qBAAqB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAE,GAAsC,CAAC,EAAE,CAAC,CAAC,CAAA;QACpG,KAAK,wBAAwB;YAC3B,OAAO,CAAC,6BAA6B,CAAE,GAAyC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAA;QACrG,KAAK,sBAAsB;YACzB,OAAO,CAAC,6BAA6B,CAAE,GAAuC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrF,KAAK,wBAAwB;YAC3B,OAAO,CAAC,6BAA6B,CAAE,GAAyC,CAAC,EAAE,CAAC,CAAC,CAAA;QACvF,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;IACpB,CAAC;AACH,CAAC;AAED;;6BAE6B;AAC7B,MAAM,UAAU,oBAAoB,CAAC,MAAkB,EAAE,SAAiB;IACxE,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAA;IAChC,IAAI,GAAG,EAAE,WAAW,KAAK,kBAAkB,IAAI,CAAE,GAAoC,CAAC,WAAW;QAAE,OAAO,IAAI,CAAA;IAC9G,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AACvD,CAAC;AAED;;;+DAG+D;AAC/D,SAAS,+BAA+B,CACtC,MAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAA;IAChC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,IAAI,YAAgC,CAAA;IACpC,IAAI,GAAgD,CAAA;IACpD,IAAI,GAAG,CAAC,WAAW,KAAK,iBAAiB,EAAE,CAAC;QAC1C,YAAY,GAAI,GAAmC,CAAC,EAAE,CAAA;QACtD,GAAG,GAAI,GAAmC,CAAC,aAAa,EAAE,QAAQ,CAAA;IACpE,CAAC;SAAM,IAAI,GAAG,CAAC,WAAW,KAAK,mBAAmB,EAAE,CAAC;QACnD,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,SAAS,CAAA;QACzD,GAAG,GAAI,GAAqC,CAAC,aAAa,EAAE,QAAQ,CAAA;IACtE,CAAC;IACD,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE;QAAE,OAAO,IAAI,CAAA;IAC1C,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAA;AACpE,CAAC;AAED;;;;;;;kEAOkE;AAClE,MAAM,UAAU,wBAAwB,CAAC,OAAqB;IAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4C,CAAA;IAChE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAA;QACrD,IAAI,CAAC,KAAK;YAAE,SAAQ;QACpB,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,CAAA;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAC7C,IAAI,MAAM,KAAK,SAAS,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;YACvC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;4BAO4B;AAC5B,MAAM,UAAU,uBAAuB,CACrC,OAAqB,EACrB,YAAoB;IAEpB,IAAI,IAAkD,CAAA;IACtD,IAAI,MAA0B,CAAA;IAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAA;QACrD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY;YAAE,SAAQ;QAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,CAAA;QACvD,IAAI,MAAM,KAAK,SAAS,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;YACzC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAA;YAChB,MAAM,GAAG,EAAE,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,IAAI,IAAI,CAAA;AACrB,CAAC;AAED;;mEAEmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAA;IAChC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,QAAQ,GAAG,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,mBAAmB,CAAC,CAAC,OAAQ,GAAqC,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI,CAAA;QACnG,KAAK,iBAAiB,CAAC,CAAG,OAAQ,GAAmC,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI,CAAA;QACjG,KAAK,gBAAgB,CAAC;QACtB,KAAK,cAAc,CAAC;QACpB,qEAAqE;QACrE,uEAAuE;QACvE,KAAK,iBAAiB,CAAC;QACvB,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,MAAM,GAAI,GAA6C,CAAC,aAAa,CAAA;YAC3E,OAAO,MAAM,EAAE,IAAI,IAAI,IAAI,CAAA;QAC7B,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,IAAI,CAAA;IACtB,CAAC;AACH,CAAC"}
@@ -1,11 +1,5 @@
1
- /** The minimal address triple every node-facing call needs. Deliberately
2
- * structural (not the caller's own "list of paired nodes" document type) —
3
- * any `{ host, port, secure? }` works. */
4
- export type NodeEndpoint = {
5
- host: string;
6
- port: number;
7
- secure?: boolean;
8
- };
1
+ import type { NodeEndpoint } from '@drakkar.software/octobot-protocol';
2
+ export type { NodeEndpoint };
9
3
  export declare function nodeBaseUrl(node: NodeEndpoint): string;
10
4
  export type NodeAddressSpace = 'loopback' | 'local' | 'public';
11
5
  /** Parse a user-typed host string into a canonical { host, port, secure } triple.
@@ -1 +1 @@
1
- {"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../src/transport/urls.ts"],"names":[],"mappings":"AAEA;;2CAE2C;AAC3C,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE3E,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEtD;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAI9D;;;;qEAIqE;AACrE,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,WAAW,SAAoB,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA+CxD;AAED;;;uFAGuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAQlF;AAED;;;;wDAIwD;AACxD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAoCnE"}
1
+ {"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../src/transport/urls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAEtE,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEtD;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAI9D;;;;qEAIqE;AACrE,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,WAAW,SAAoB,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA+CxD;AAED;;;uFAGuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAQlF;AAED;;;;wDAIwD;AACxD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAoCnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/transport/urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAO9D,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,UAAU,EAAE,CAAA;AACrF,CAAC;AAID,MAAM,IAAI,GAAG,8CAA8C,CAAA;AAE3D;;;;qEAIqE;AACrE,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,WAAW,GAAG,iBAAiB;IAE/B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,wBAAwB;IACxB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;IAC7E,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAC1D,kCAAkC;IAClC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,sEAAsE;IACtE,gEAAgE;IAChE,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;IAEzE,IAAI,IAAY,CAAA;IAChB,IAAI,IAAY,CAAA;IAEhB,0CAA0C;IAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAChE,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAA;QAC1B,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAA;IACtE,CAAC;SAAM,CAAC;QACN,oBAAoB;QACpB,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAC9C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;YAClD,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5B,uBAAuB;gBACvB,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;gBACtC,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;YAChC,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,yDAAyD;gBACzD,OAAO,IAAI,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,WAAW,CAAA;gBAClB,IAAI,GAAG,iBAAiB,CAAA;YAC1B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,WAAW,CAAA;YAClB,IAAI,GAAG,iBAAiB,CAAA;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAEjE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/B,CAAC;AAED;;;uFAGuF;AACvF,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;IAC5B,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;IACtE,OAAO;QACL,IAAI,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;KAC3D,CAAA;AACH,CAAC;AAED;;;;wDAIwD;AACxD,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,8EAA8E;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC5D,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAA;IAE7B,oEAAoE;IACpE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,IAAI,EAAE,KAAK,KAAK;YAAE,OAAO,UAAU,CAAA;QACnC,4EAA4E;QAC5E,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;QACxE,IAAI,MAAM;YAAE,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAClD,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,OAAO,CAAA,CAAC,wBAAwB;QAC1E,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,OAAO,CAAA,CAAC,uBAAuB;QACzE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACzC,4EAA4E;QAC5E,qEAAqE;QACrE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAA;QAChD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,UAAU,CAAA;QAChC,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,OAAO,CAAA;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,OAAO,CAAA;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,OAAO,CAAA;QACnD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG;YAAE,OAAO,OAAO,CAAA,CAAC,oBAAoB;QACzE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,OAAO,CAAA,CAAC,aAAa;QACxD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,UAAU,CAAA;IAChF,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAA,CAAC,OAAO;IACtD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
1
+ {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/transport/urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAK9D,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,UAAU,EAAE,CAAA;AACrF,CAAC;AAID,MAAM,IAAI,GAAG,8CAA8C,CAAA;AAE3D;;;;qEAIqE;AACrE,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,WAAW,GAAG,iBAAiB;IAE/B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,wBAAwB;IACxB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;IAC7E,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAC1D,kCAAkC;IAClC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,sEAAsE;IACtE,gEAAgE;IAChE,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;IAEzE,IAAI,IAAY,CAAA;IAChB,IAAI,IAAY,CAAA;IAEhB,0CAA0C;IAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAChE,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAA;QAC1B,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAA;IACtE,CAAC;SAAM,CAAC;QACN,oBAAoB;QACpB,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAC9C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;YAClD,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5B,uBAAuB;gBACvB,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;gBACtC,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;YAChC,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,yDAAyD;gBACzD,OAAO,IAAI,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,WAAW,CAAA;gBAClB,IAAI,GAAG,iBAAiB,CAAA;YAC1B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,WAAW,CAAA;YAClB,IAAI,GAAG,iBAAiB,CAAA;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAEjE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/B,CAAC;AAED;;;uFAGuF;AACvF,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;IAC5B,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;IACtE,OAAO;QACL,IAAI,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;KAC3D,CAAA;AACH,CAAC;AAED;;;;wDAIwD;AACxD,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,8EAA8E;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC5D,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAA;IAE7B,oEAAoE;IACpE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,IAAI,EAAE,KAAK,KAAK;YAAE,OAAO,UAAU,CAAA;QACnC,4EAA4E;QAC5E,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;QACxE,IAAI,MAAM;YAAE,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAClD,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,OAAO,CAAA,CAAC,wBAAwB;QAC1E,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,OAAO,CAAA,CAAC,uBAAuB;QACzE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACzC,4EAA4E;QAC5E,qEAAqE;QACrE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAA;QAChD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,UAAU,CAAA;QAChC,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,OAAO,CAAA;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,OAAO,CAAA;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,OAAO,CAAA;QACnD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG;YAAE,OAAO,OAAO,CAAA,CAAC,oBAAoB;QACzE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,OAAO,CAAA,CAAC,aAAa;QACxD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,UAAU,CAAA;IAChF,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAA,CAAC,OAAO;IACtD,OAAO,QAAQ,CAAA;AACjB,CAAC"}