@aura-protocol/cli 0.1.3 → 0.3.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 (110) hide show
  1. package/README.md +84 -53
  2. package/bin/aura.js +0 -0
  3. package/dist/commands/confidential.d.ts +1 -1
  4. package/dist/commands/confidential.js +280 -325
  5. package/dist/commands/confidential.js.map +1 -1
  6. package/dist/commands/config.d.ts +1 -1
  7. package/dist/commands/config.js +26 -8
  8. package/dist/commands/config.js.map +1 -1
  9. package/dist/commands/dashboard.d.ts +1 -1
  10. package/dist/commands/dashboard.js +6 -7
  11. package/dist/commands/dashboard.js.map +1 -1
  12. package/dist/commands/dwallet.d.ts +1 -1
  13. package/dist/commands/dwallet.js +52 -41
  14. package/dist/commands/dwallet.js.map +1 -1
  15. package/dist/commands/execution.d.ts +1 -1
  16. package/dist/commands/execution.js +111 -175
  17. package/dist/commands/execution.js.map +1 -1
  18. package/dist/commands/features.d.ts +1 -1
  19. package/dist/commands/features.js +15 -10
  20. package/dist/commands/features.js.map +1 -1
  21. package/dist/commands/generated.d.ts +20 -0
  22. package/dist/commands/generated.js +61 -0
  23. package/dist/commands/generated.js.map +1 -0
  24. package/dist/commands/governance.d.ts +1 -1
  25. package/dist/commands/governance.js +113 -99
  26. package/dist/commands/governance.js.map +1 -1
  27. package/dist/commands/helpers.d.ts +5 -2
  28. package/dist/commands/helpers.js +79 -16
  29. package/dist/commands/helpers.js.map +1 -1
  30. package/dist/commands/instruction-exec.d.ts +27 -0
  31. package/dist/commands/instruction-exec.js +171 -0
  32. package/dist/commands/instruction-exec.js.map +1 -0
  33. package/dist/commands/instruction.d.ts +9 -0
  34. package/dist/commands/instruction.js +81 -0
  35. package/dist/commands/instruction.js.map +1 -0
  36. package/dist/commands/pda.d.ts +1 -1
  37. package/dist/commands/pda.js +15 -7
  38. package/dist/commands/pda.js.map +1 -1
  39. package/dist/commands/treasury.d.ts +1 -1
  40. package/dist/commands/treasury.js +201 -186
  41. package/dist/commands/treasury.js.map +1 -1
  42. package/dist/core/config.d.ts +35 -0
  43. package/dist/core/config.js +97 -0
  44. package/dist/core/config.js.map +1 -0
  45. package/dist/core/context.d.ts +51 -0
  46. package/dist/core/context.js +60 -0
  47. package/dist/core/context.js.map +1 -0
  48. package/dist/core/errors.d.ts +38 -0
  49. package/dist/core/errors.js +138 -0
  50. package/dist/core/errors.js.map +1 -0
  51. package/dist/core/network.d.ts +18 -0
  52. package/dist/core/network.js +38 -0
  53. package/dist/core/network.js.map +1 -0
  54. package/dist/core/runner.d.ts +45 -0
  55. package/dist/core/runner.js +219 -0
  56. package/dist/core/runner.js.map +1 -0
  57. package/dist/core/security.d.ts +28 -0
  58. package/dist/core/security.js +83 -0
  59. package/dist/core/security.js.map +1 -0
  60. package/dist/core/wallet.d.ts +2 -0
  61. package/dist/core/wallet.js +21 -0
  62. package/dist/core/wallet.js.map +1 -0
  63. package/dist/index.js +56 -13
  64. package/dist/index.js.map +1 -1
  65. package/dist/lib/domain.d.ts +16 -0
  66. package/dist/lib/domain.js +88 -0
  67. package/dist/lib/domain.js.map +1 -0
  68. package/dist/lib/ika.d.ts +81 -0
  69. package/dist/lib/ika.js +192 -0
  70. package/dist/lib/ika.js.map +1 -0
  71. package/dist/lib/instructions.d.ts +79 -0
  72. package/dist/lib/instructions.js +421 -0
  73. package/dist/lib/instructions.js.map +1 -0
  74. package/dist/lib/protocol.d.ts +99 -0
  75. package/dist/lib/protocol.js +327 -0
  76. package/dist/lib/protocol.js.map +1 -0
  77. package/dist/lib/treasury-view.d.ts +11 -0
  78. package/dist/lib/treasury-view.js +126 -0
  79. package/dist/lib/treasury-view.js.map +1 -0
  80. package/dist/program-instructions.d.ts +1 -1
  81. package/dist/ui/dashboard.d.ts +7 -0
  82. package/dist/ui/dashboard.js +99 -0
  83. package/dist/ui/dashboard.js.map +1 -0
  84. package/dist/ui/format.d.ts +9 -0
  85. package/dist/ui/format.js +92 -0
  86. package/dist/ui/format.js.map +1 -0
  87. package/dist/ui/output.d.ts +58 -0
  88. package/dist/ui/output.js +208 -0
  89. package/dist/ui/output.js.map +1 -0
  90. package/dist/ui/theme.d.ts +52 -0
  91. package/dist/ui/theme.js +110 -0
  92. package/dist/ui/theme.js.map +1 -0
  93. package/dist/vendor/encrypt/generated/grpc/encrypt_service.d.ts +1 -1
  94. package/dist/vendor/encrypt/generated/grpc/encrypt_service.js +36 -13
  95. package/dist/vendor/encrypt/generated/grpc/encrypt_service.js.map +1 -1
  96. package/dist/vendor/encrypt/grpc.d.ts +2 -2
  97. package/dist/vendor/encrypt/grpc.js +1 -3
  98. package/dist/vendor/encrypt/grpc.js.map +1 -1
  99. package/dist/vendor/ika/bcs-types.js +107 -50
  100. package/dist/vendor/ika/bcs-types.js.map +1 -1
  101. package/dist/vendor/ika/generated/grpc/ika_dwallet.d.ts +1 -1
  102. package/dist/vendor/ika/generated/grpc/ika_dwallet.js +14 -4
  103. package/dist/vendor/ika/generated/grpc/ika_dwallet.js.map +1 -1
  104. package/dist/vendor/ika/grpc.d.ts +1 -1
  105. package/dist/vendor/ika/grpc.js +49 -24
  106. package/dist/vendor/ika/grpc.js.map +1 -1
  107. package/package.json +15 -12
  108. package/dist/ascii.d.ts +0 -1
  109. package/dist/ascii.js +0 -2
  110. package/dist/ascii.js.map +0 -1
@@ -0,0 +1,92 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import BN from "bn.js";
3
+ const usdFormatter = new Intl.NumberFormat("en-US", {
4
+ style: "currency",
5
+ currency: "USD",
6
+ minimumFractionDigits: 2,
7
+ maximumFractionDigits: 2,
8
+ });
9
+ function asBigInt(value) {
10
+ if (value === null || value === undefined) {
11
+ return null;
12
+ }
13
+ if (typeof value === "bigint") {
14
+ return value;
15
+ }
16
+ if (typeof value === "number") {
17
+ return BigInt(Math.trunc(value));
18
+ }
19
+ if (typeof value === "string" && value.trim().length > 0) {
20
+ return BigInt(value);
21
+ }
22
+ if (BN.isBN(value)) {
23
+ return BigInt(value.toString());
24
+ }
25
+ return null;
26
+ }
27
+ export function formatUsd(value) {
28
+ const normalized = asBigInt(value);
29
+ if (normalized === null) {
30
+ return "—";
31
+ }
32
+ return usdFormatter.format(Number(normalized));
33
+ }
34
+ export function formatPercentBps(value) {
35
+ const normalized = asBigInt(value);
36
+ if (normalized === null) {
37
+ return "—";
38
+ }
39
+ return `${(Number(normalized) / 100).toFixed(2)}%`;
40
+ }
41
+ export function formatPubkey(value, options = {}) {
42
+ if (!value) {
43
+ return "—";
44
+ }
45
+ const base58 = value instanceof PublicKey ? value.toBase58() : value;
46
+ if (options.shorten === false || base58.length <= 12) {
47
+ return base58;
48
+ }
49
+ return `${base58.slice(0, 4)}…${base58.slice(-4)}`;
50
+ }
51
+ export function formatTimestamp(value) {
52
+ const normalized = asBigInt(value);
53
+ if (normalized === null) {
54
+ return "—";
55
+ }
56
+ const millis = Number(normalized) * 1000;
57
+ return new Date(millis).toLocaleString("en-US", {
58
+ year: "numeric",
59
+ month: "short",
60
+ day: "2-digit",
61
+ hour: "2-digit",
62
+ minute: "2-digit",
63
+ second: "2-digit",
64
+ });
65
+ }
66
+ export function formatRelativeSeconds(targetSeconds) {
67
+ const normalized = asBigInt(targetSeconds);
68
+ if (normalized === null) {
69
+ return "—";
70
+ }
71
+ const diff = Number(normalized) - Math.floor(Date.now() / 1000);
72
+ const abs = Math.abs(diff);
73
+ const hours = Math.floor(abs / 3600);
74
+ const minutes = Math.floor((abs % 3600) / 60);
75
+ const seconds = abs % 60;
76
+ const parts = [
77
+ hours > 0 ? `${hours}h` : null,
78
+ minutes > 0 ? `${minutes}m` : null,
79
+ `${seconds}s`,
80
+ ].filter(Boolean);
81
+ return diff >= 0 ? `in ${parts.join(" ")}` : `${parts.join(" ")} ago`;
82
+ }
83
+ export function formatNullable(value) {
84
+ if (value === null || value === undefined || value === "") {
85
+ return "—";
86
+ }
87
+ if (typeof value === "boolean") {
88
+ return value ? "Yes" : "No";
89
+ }
90
+ return String(value);
91
+ }
92
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Terminal output primitives: JSON emission, banners, color-block headers,
3
+ * panels/boxes, key-value rendering, tables, spinners, and status lines.
4
+ *
5
+ * Every command renders through this module (and {@link ./theme}) so the CLI
6
+ * has a single, consistent voice. Respects `--json` and `--quiet`.
7
+ */
8
+ import { type TransactionInstruction } from "@solana/web3.js";
9
+ import { type BlockKind } from "./theme.js";
10
+ export interface OutputOptions {
11
+ json: boolean;
12
+ quiet: boolean;
13
+ }
14
+ export interface SpinnerHandle {
15
+ setText(text: string): void;
16
+ succeed(message?: string): void;
17
+ fail(message?: string): void;
18
+ stop(): void;
19
+ }
20
+ export declare const ACTIVE_DEVELOPMENT_WARNING = "AURA is under active development. Program instructions, account layouts, policy semantics, SDK APIs, and deployment behavior may change before a stable audited release.";
21
+ /** Recursively converts SDK/web3 values (PublicKey, BN, Buffer) into JSON-safe data. */
22
+ export declare function serializeForJson(value: unknown): unknown;
23
+ /** Prints a value as pretty JSON unless `--quiet` is set. */
24
+ export declare function emitJson(output: OutputOptions, value: unknown): void;
25
+ /** Prints the top-level `AURA :: <title>` banner with an optional subtitle. */
26
+ export declare function printBanner(output: OutputOptions, title: string, subtitle?: string): void;
27
+ /** Prints a labeled section header chip, e.g. a magenta ` POLICY ` tag. */
28
+ export declare function printSection(output: OutputOptions, label: string, kind?: BlockKind): void;
29
+ /** Prints a thin divider rule. */
30
+ export declare function divider(output: OutputOptions, width?: number): void;
31
+ /**
32
+ * Renders a bordered panel to a string. Useful for transaction previews and
33
+ * security warnings where the content should visually stand apart.
34
+ */
35
+ export declare function renderPanel(title: string, lines: string[], kind?: BlockKind): string;
36
+ /** Prints a bordered panel unless `--json`/`--quiet`. */
37
+ export declare function printPanel(output: OutputOptions, title: string, lines: string[], kind?: BlockKind): void;
38
+ /** Formats `[label, value]` rows into aligned `label value` lines. */
39
+ export declare function keyValueLines(rows: [string, string][]): string[];
40
+ export declare function createTable(head: string[]): any;
41
+ export declare function printTable(output: OutputOptions, table: {
42
+ toString(): string;
43
+ }): void;
44
+ export declare function printSuccess(output: OutputOptions, message: string): void;
45
+ export declare function printInfo(output: OutputOptions, message: string): void;
46
+ export declare function printWarn(output: OutputOptions, message: string): void;
47
+ export declare function printDanger(output: OutputOptions, message: string): void;
48
+ export declare function printNote(output: OutputOptions, message: string): void;
49
+ export declare function startSpinner(output: OutputOptions, text: string): SpinnerHandle;
50
+ export declare function serializeInstruction(instruction: TransactionInstruction): {
51
+ programId: string;
52
+ accounts: {
53
+ pubkey: string;
54
+ isSigner: boolean;
55
+ isWritable: boolean;
56
+ }[];
57
+ dataBase64: string;
58
+ };
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Terminal output primitives: JSON emission, banners, color-block headers,
3
+ * panels/boxes, key-value rendering, tables, spinners, and status lines.
4
+ *
5
+ * Every command renders through this module (and {@link ./theme}) so the CLI
6
+ * has a single, consistent voice. Respects `--json` and `--quiet`.
7
+ */
8
+ import { PublicKey } from "@solana/web3.js";
9
+ import BN from "bn.js";
10
+ import Table from "cli-table3";
11
+ import ora from "ora";
12
+ import { block, style, symbol } from "./theme.js";
13
+ export const ACTIVE_DEVELOPMENT_WARNING = "AURA is under active development. Program instructions, account layouts, policy semantics, SDK APIs, and deployment behavior may change before a stable audited release.";
14
+ // ---------------------------------------------------------------------------
15
+ // JSON serialization
16
+ // ---------------------------------------------------------------------------
17
+ /** Recursively converts SDK/web3 values (PublicKey, BN, Buffer) into JSON-safe data. */
18
+ export function serializeForJson(value) {
19
+ if (value instanceof PublicKey) {
20
+ return value.toBase58();
21
+ }
22
+ if (value &&
23
+ typeof value === "object" &&
24
+ "toBase58" in value &&
25
+ typeof value.toBase58 === "function") {
26
+ return value.toBase58();
27
+ }
28
+ if (BN.isBN(value)) {
29
+ return value.toString();
30
+ }
31
+ if (Buffer.isBuffer(value)) {
32
+ return value.toString("base64");
33
+ }
34
+ if (Array.isArray(value)) {
35
+ return value.map((item) => serializeForJson(item));
36
+ }
37
+ if (value && typeof value === "object") {
38
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => [
39
+ key,
40
+ serializeForJson(entry),
41
+ ]));
42
+ }
43
+ return value;
44
+ }
45
+ /** Prints a value as pretty JSON unless `--quiet` is set. */
46
+ export function emitJson(output, value) {
47
+ if (!output.quiet) {
48
+ console.log(JSON.stringify(serializeForJson(value), null, 2));
49
+ }
50
+ }
51
+ // ---------------------------------------------------------------------------
52
+ // Headers and structure
53
+ // ---------------------------------------------------------------------------
54
+ /** Prints the top-level `AURA :: <title>` banner with an optional subtitle. */
55
+ export function printBanner(output, title, subtitle) {
56
+ if (output.quiet || output.json) {
57
+ return;
58
+ }
59
+ const head = `${block("AURA", "primary")} ${style.bold(title)}`;
60
+ console.log(subtitle ? `${head} ${style.muted(subtitle)}` : head);
61
+ }
62
+ /** Prints a labeled section header chip, e.g. a magenta ` POLICY ` tag. */
63
+ export function printSection(output, label, kind = "accent") {
64
+ if (output.quiet || output.json) {
65
+ return;
66
+ }
67
+ console.log(`\n${block(label, kind)}`);
68
+ }
69
+ /** Prints a thin divider rule. */
70
+ export function divider(output, width = 56) {
71
+ if (output.quiet || output.json) {
72
+ return;
73
+ }
74
+ console.log(style.muted("─".repeat(width)));
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // Panels / boxes
78
+ // ---------------------------------------------------------------------------
79
+ const BORDER = {
80
+ primary: style.primary,
81
+ accent: style.accent,
82
+ success: style.success,
83
+ warn: style.warn,
84
+ danger: style.danger,
85
+ info: style.info,
86
+ muted: style.muted,
87
+ };
88
+ /**
89
+ * Renders a bordered panel to a string. Useful for transaction previews and
90
+ * security warnings where the content should visually stand apart.
91
+ */
92
+ export function renderPanel(title, lines, kind = "primary") {
93
+ const paint = BORDER[kind];
94
+ const visibleWidth = (text) =>
95
+ // Strip ANSI escapes when measuring width for alignment.
96
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: stripping ANSI
97
+ text.replace(/\u001b\[[0-9;]*m/g, "").length;
98
+ const titleWidth = visibleWidth(title);
99
+ const contentWidth = Math.max(titleWidth, ...lines.map((line) => visibleWidth(line)), 24);
100
+ const top = paint(`╭─ ${style.bold(title)} ${"─".repeat(Math.max(0, contentWidth - titleWidth))}╮`);
101
+ const bottom = paint(`╰${"─".repeat(contentWidth + 3)}╯`);
102
+ const body = lines.map((line) => {
103
+ const pad = " ".repeat(Math.max(0, contentWidth - visibleWidth(line)));
104
+ return `${paint("│")} ${line}${pad} ${paint("│")}`;
105
+ });
106
+ return [top, ...body, bottom].join("\n");
107
+ }
108
+ /** Prints a bordered panel unless `--json`/`--quiet`. */
109
+ export function printPanel(output, title, lines, kind = "primary") {
110
+ if (output.quiet || output.json) {
111
+ return;
112
+ }
113
+ console.log(renderPanel(title, lines, kind));
114
+ }
115
+ /** Formats `[label, value]` rows into aligned `label value` lines. */
116
+ export function keyValueLines(rows) {
117
+ const labelWidth = Math.max(0, ...rows.map(([label]) => label.length));
118
+ return rows.map(([label, value]) => `${style.muted(label.padEnd(labelWidth))} ${value}`);
119
+ }
120
+ // ---------------------------------------------------------------------------
121
+ // Tables
122
+ // ---------------------------------------------------------------------------
123
+ // cli-table3 has loose typings; the factory returns its Table instance.
124
+ // biome-ignore lint/suspicious/noExplicitAny: cli-table3 Table type
125
+ export function createTable(head) {
126
+ return new Table({
127
+ head,
128
+ style: { head: ["cyan"], border: ["gray"], compact: false },
129
+ wordWrap: true,
130
+ });
131
+ }
132
+ export function printTable(output, table) {
133
+ if (output.quiet || output.json) {
134
+ return;
135
+ }
136
+ console.log(table.toString());
137
+ }
138
+ // ---------------------------------------------------------------------------
139
+ // Status lines
140
+ // ---------------------------------------------------------------------------
141
+ export function printSuccess(output, message) {
142
+ if (output.quiet || output.json)
143
+ return;
144
+ console.log(`${style.success(symbol.success)} ${message}`);
145
+ }
146
+ export function printInfo(output, message) {
147
+ if (output.quiet || output.json)
148
+ return;
149
+ console.log(message);
150
+ }
151
+ export function printWarn(output, message) {
152
+ if (output.quiet || output.json)
153
+ return;
154
+ console.log(`${style.warn(symbol.warn)} ${style.warn(message)}`);
155
+ }
156
+ export function printDanger(output, message) {
157
+ if (output.quiet || output.json)
158
+ return;
159
+ console.log(`${style.danger(symbol.error)} ${style.danger(message)}`);
160
+ }
161
+ export function printNote(output, message) {
162
+ if (output.quiet || output.json)
163
+ return;
164
+ console.log(`${style.info(symbol.info)} ${style.muted(message)}`);
165
+ }
166
+ // ---------------------------------------------------------------------------
167
+ // Spinner
168
+ // ---------------------------------------------------------------------------
169
+ export function startSpinner(output, text) {
170
+ if (output.quiet || output.json || !process.stdout.isTTY) {
171
+ return {
172
+ setText() { },
173
+ succeed() { },
174
+ fail() { },
175
+ stop() { },
176
+ };
177
+ }
178
+ const spinner = ora({ text, color: "cyan" }).start();
179
+ return {
180
+ setText(nextText) {
181
+ spinner.text = nextText;
182
+ },
183
+ succeed(message) {
184
+ spinner.succeed(message);
185
+ },
186
+ fail(message) {
187
+ spinner.fail(message);
188
+ },
189
+ stop() {
190
+ spinner.stop();
191
+ },
192
+ };
193
+ }
194
+ // ---------------------------------------------------------------------------
195
+ // Instruction serialization (dry-run / JSON output)
196
+ // ---------------------------------------------------------------------------
197
+ export function serializeInstruction(instruction) {
198
+ return {
199
+ programId: instruction.programId.toBase58(),
200
+ accounts: instruction.keys.map((key) => ({
201
+ pubkey: key.pubkey.toBase58(),
202
+ isSigner: key.isSigner,
203
+ isWritable: key.isWritable,
204
+ })),
205
+ dataBase64: Buffer.from(instruction.data).toString("base64"),
206
+ };
207
+ }
208
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/ui/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Terminal theme: semantic colors, symbols, and color "blocks" (chips).
3
+ *
4
+ * The whole CLI renders through this module so the look stays consistent and
5
+ * color can be disabled in one place. Color is suppressed automatically when:
6
+ * - `NO_COLOR` is set (https://no-color.org/),
7
+ * - the `--no-color` flag is passed (wired in via {@link setColorEnabled}),
8
+ * - stdout is not a TTY (piped/redirected),
9
+ * unless `FORCE_COLOR` is set.
10
+ */
11
+ /** Enables or disables ANSI color globally for the process. */
12
+ export declare function setColorEnabled(enabled: boolean): void;
13
+ /** Whether color output is currently enabled. */
14
+ export declare function isColorEnabled(): boolean;
15
+ /**
16
+ * Semantic color styles. Always call through these rather than reaching for
17
+ * chalk directly so the `--no-color` / `NO_COLOR` toggle is always honored.
18
+ */
19
+ export declare const style: {
20
+ readonly primary: (text: string) => string;
21
+ readonly accent: (text: string) => string;
22
+ readonly success: (text: string) => string;
23
+ readonly warn: (text: string) => string;
24
+ readonly danger: (text: string) => string;
25
+ readonly info: (text: string) => string;
26
+ readonly muted: (text: string) => string;
27
+ readonly bold: (text: string) => string;
28
+ readonly dim: (text: string) => string;
29
+ readonly underline: (text: string) => string;
30
+ readonly code: (text: string) => string;
31
+ };
32
+ /** Unicode glyphs used across the UI. */
33
+ export declare const symbol: {
34
+ readonly success: "✓";
35
+ readonly error: "✗";
36
+ readonly warn: "⚠";
37
+ readonly info: "ℹ";
38
+ readonly arrow: "→";
39
+ readonly bullet: "•";
40
+ readonly dot: "·";
41
+ readonly pointer: "❯";
42
+ readonly ellipsis: "…";
43
+ };
44
+ export type BlockKind = "primary" | "accent" | "success" | "warn" | "danger" | "info" | "muted";
45
+ /**
46
+ * Renders a filled "color block" / chip — an inverse-color label with one space
47
+ * of padding on each side, e.g. a teal ` AURA ` tag. Used for banners, section
48
+ * headers, and severity tags. Falls back to `[LABEL]` when color is disabled.
49
+ */
50
+ export declare function block(label: string, kind?: BlockKind): string;
51
+ /** Maps a free-form label to a block kind for instruction maturity tags. */
52
+ export declare function maturityKind(maturity: string): BlockKind;
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Terminal theme: semantic colors, symbols, and color "blocks" (chips).
3
+ *
4
+ * The whole CLI renders through this module so the look stays consistent and
5
+ * color can be disabled in one place. Color is suppressed automatically when:
6
+ * - `NO_COLOR` is set (https://no-color.org/),
7
+ * - the `--no-color` flag is passed (wired in via {@link setColorEnabled}),
8
+ * - stdout is not a TTY (piped/redirected),
9
+ * unless `FORCE_COLOR` is set.
10
+ */
11
+ import chalk, { Chalk } from "chalk";
12
+ /** A chalk instance with color forced off, used when color is disabled. */
13
+ const plain = new Chalk({ level: 0 });
14
+ let colorEnabled = computeDefaultColorSupport();
15
+ function computeDefaultColorSupport() {
16
+ if (process.env.FORCE_COLOR !== undefined &&
17
+ process.env.FORCE_COLOR !== "0") {
18
+ return true;
19
+ }
20
+ if (process.env.NO_COLOR !== undefined) {
21
+ return false;
22
+ }
23
+ return Boolean(process.stdout.isTTY);
24
+ }
25
+ /** Enables or disables ANSI color globally for the process. */
26
+ export function setColorEnabled(enabled) {
27
+ colorEnabled = enabled;
28
+ }
29
+ /** Whether color output is currently enabled. */
30
+ export function isColorEnabled() {
31
+ return colorEnabled;
32
+ }
33
+ /** Returns the active chalk instance (color or plain) based on the global toggle. */
34
+ function c() {
35
+ return colorEnabled ? chalk : plain;
36
+ }
37
+ /**
38
+ * Semantic color styles. Always call through these rather than reaching for
39
+ * chalk directly so the `--no-color` / `NO_COLOR` toggle is always honored.
40
+ */
41
+ export const style = {
42
+ primary: (text) => c().cyan(text),
43
+ accent: (text) => c().magenta(text),
44
+ success: (text) => c().green(text),
45
+ warn: (text) => c().yellow(text),
46
+ danger: (text) => c().red(text),
47
+ info: (text) => c().blueBright(text),
48
+ muted: (text) => c().gray(text),
49
+ bold: (text) => c().bold(text),
50
+ dim: (text) => c().dim(text),
51
+ underline: (text) => c().underline(text),
52
+ code: (text) => c().yellowBright(text),
53
+ };
54
+ /** Unicode glyphs used across the UI. */
55
+ export const symbol = {
56
+ success: "✓",
57
+ error: "✗",
58
+ warn: "⚠",
59
+ info: "ℹ",
60
+ arrow: "→",
61
+ bullet: "•",
62
+ dot: "·",
63
+ pointer: "❯",
64
+ ellipsis: "…",
65
+ };
66
+ /**
67
+ * Renders a filled "color block" / chip — an inverse-color label with one space
68
+ * of padding on each side, e.g. a teal ` AURA ` tag. Used for banners, section
69
+ * headers, and severity tags. Falls back to `[LABEL]` when color is disabled.
70
+ */
71
+ export function block(label, kind = "primary") {
72
+ const text = ` ${label} `;
73
+ if (!colorEnabled) {
74
+ return `[${label}]`;
75
+ }
76
+ switch (kind) {
77
+ case "primary":
78
+ return chalk.bgCyan.black(text);
79
+ case "accent":
80
+ return chalk.bgMagenta.white(text);
81
+ case "success":
82
+ return chalk.bgGreen.black(text);
83
+ case "warn":
84
+ return chalk.bgYellow.black(text);
85
+ case "danger":
86
+ return chalk.bgRed.white(text);
87
+ case "info":
88
+ return chalk.bgBlue.white(text);
89
+ case "muted":
90
+ return chalk.bgGray.white(text);
91
+ }
92
+ }
93
+ /** Maps a free-form label to a block kind for instruction maturity tags. */
94
+ export function maturityKind(maturity) {
95
+ switch (maturity) {
96
+ case "wallet":
97
+ return "primary";
98
+ case "backend":
99
+ return "info";
100
+ case "read_only":
101
+ case "read-only":
102
+ return "muted";
103
+ case "external_cpi":
104
+ case "external-cpi":
105
+ return "accent";
106
+ default:
107
+ return "muted";
108
+ }
109
+ }
110
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
2
- import { type CallOptions, type ChannelCredentials, Client, type ClientOptions, type ClientUnaryCall, type handleUnaryCall, type Metadata, type ServiceError, type UntypedServiceImplementation } from "@grpc/grpc-js";
2
+ import { type CallOptions, type ChannelCredentials, type Client, type ClientOptions, type ClientUnaryCall, type handleUnaryCall, type Metadata, type ServiceError, type UntypedServiceImplementation } from "@grpc/grpc-js";
3
3
  export declare const protobufPackage = "encrypt.v1";
4
4
  /** Chain identifier. */
5
5
  export declare enum Chain {
@@ -5,7 +5,7 @@
5
5
  // source: encrypt_service.proto
6
6
  /* eslint-disable */
7
7
  import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
8
- import { Client, makeGenericClientConstructor, } from "@grpc/grpc-js";
8
+ import { makeGenericClientConstructor, } from "@grpc/grpc-js";
9
9
  export const protobufPackage = "encrypt.v1";
10
10
  /** Chain identifier. */
11
11
  export var Chain;
@@ -190,9 +190,15 @@ export const CreateInputRequest = {
190
190
  fromJSON(object) {
191
191
  return {
192
192
  chain: isSet(object.chain) ? chainFromJSON(object.chain) : 0,
193
- inputs: globalThis.Array.isArray(object?.inputs) ? object.inputs.map((e) => EncryptedInput.fromJSON(e)) : [],
194
- proof: isSet(object.proof) ? Buffer.from(bytesFromBase64(object.proof)) : Buffer.alloc(0),
195
- authorized: isSet(object.authorized) ? Buffer.from(bytesFromBase64(object.authorized)) : Buffer.alloc(0),
193
+ inputs: globalThis.Array.isArray(object?.inputs)
194
+ ? object.inputs.map((e) => EncryptedInput.fromJSON(e))
195
+ : [],
196
+ proof: isSet(object.proof)
197
+ ? Buffer.from(bytesFromBase64(object.proof))
198
+ : Buffer.alloc(0),
199
+ authorized: isSet(object.authorized)
200
+ ? Buffer.from(bytesFromBase64(object.authorized))
201
+ : Buffer.alloc(0),
196
202
  networkEncryptionPublicKey: isSet(object.networkEncryptionPublicKey)
197
203
  ? Buffer.from(bytesFromBase64(object.networkEncryptionPublicKey))
198
204
  : isSet(object.network_encryption_public_key)
@@ -225,10 +231,12 @@ export const CreateInputRequest = {
225
231
  fromPartial(object) {
226
232
  const message = createBaseCreateInputRequest();
227
233
  message.chain = object.chain ?? 0;
228
- message.inputs = object.inputs?.map((e) => EncryptedInput.fromPartial(e)) || [];
234
+ message.inputs =
235
+ object.inputs?.map((e) => EncryptedInput.fromPartial(e)) || [];
229
236
  message.proof = object.proof ?? Buffer.alloc(0);
230
237
  message.authorized = object.authorized ?? Buffer.alloc(0);
231
- message.networkEncryptionPublicKey = object.networkEncryptionPublicKey ?? Buffer.alloc(0);
238
+ message.networkEncryptionPublicKey =
239
+ object.networkEncryptionPublicKey ?? Buffer.alloc(0);
232
240
  return message;
233
241
  },
234
242
  };
@@ -285,12 +293,17 @@ export const CreateInputResponse = {
285
293
  },
286
294
  fromPartial(object) {
287
295
  const message = createBaseCreateInputResponse();
288
- message.ciphertextIdentifiers = object.ciphertextIdentifiers?.map((e) => e) || [];
296
+ message.ciphertextIdentifiers =
297
+ object.ciphertextIdentifiers?.map((e) => e) || [];
289
298
  return message;
290
299
  },
291
300
  };
292
301
  function createBaseReadCiphertextRequest() {
293
- return { message: Buffer.alloc(0), signature: Buffer.alloc(0), signer: Buffer.alloc(0) };
302
+ return {
303
+ message: Buffer.alloc(0),
304
+ signature: Buffer.alloc(0),
305
+ signer: Buffer.alloc(0),
306
+ };
294
307
  }
295
308
  export const ReadCiphertextRequest = {
296
309
  encode(message, writer = new BinaryWriter()) {
@@ -343,9 +356,15 @@ export const ReadCiphertextRequest = {
343
356
  },
344
357
  fromJSON(object) {
345
358
  return {
346
- message: isSet(object.message) ? Buffer.from(bytesFromBase64(object.message)) : Buffer.alloc(0),
347
- signature: isSet(object.signature) ? Buffer.from(bytesFromBase64(object.signature)) : Buffer.alloc(0),
348
- signer: isSet(object.signer) ? Buffer.from(bytesFromBase64(object.signer)) : Buffer.alloc(0),
359
+ message: isSet(object.message)
360
+ ? Buffer.from(bytesFromBase64(object.message))
361
+ : Buffer.alloc(0),
362
+ signature: isSet(object.signature)
363
+ ? Buffer.from(bytesFromBase64(object.signature))
364
+ : Buffer.alloc(0),
365
+ signer: isSet(object.signer)
366
+ ? Buffer.from(bytesFromBase64(object.signer))
367
+ : Buffer.alloc(0),
349
368
  };
350
369
  },
351
370
  toJSON(message) {
@@ -426,13 +445,17 @@ export const ReadCiphertextResponse = {
426
445
  },
427
446
  fromJSON(object) {
428
447
  return {
429
- value: isSet(object.value) ? Buffer.from(bytesFromBase64(object.value)) : Buffer.alloc(0),
448
+ value: isSet(object.value)
449
+ ? Buffer.from(bytesFromBase64(object.value))
450
+ : Buffer.alloc(0),
430
451
  fheType: isSet(object.fheType)
431
452
  ? globalThis.Number(object.fheType)
432
453
  : isSet(object.fhe_type)
433
454
  ? globalThis.Number(object.fhe_type)
434
455
  : 0,
435
- digest: isSet(object.digest) ? Buffer.from(bytesFromBase64(object.digest)) : Buffer.alloc(0),
456
+ digest: isSet(object.digest)
457
+ ? Buffer.from(bytesFromBase64(object.digest))
458
+ : Buffer.alloc(0),
436
459
  };
437
460
  },
438
461
  toJSON(message) {