@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,327 @@
1
+ import { createHash } from "node:crypto";
2
+ import { AURA_PROGRAM_ID, DWALLET_DEVNET_PROGRAM_ID, deriveMessageApprovalAddress as deriveCanonicalMessageApprovalAddress, deriveDwalletCpiAuthorityAddress, deriveEncryptCpiAuthorityAddress, deriveEncryptEventAuthorityAddress, ENCRYPT_DEVNET_PROGRAM_ID, } from "@aura-protocol/sdk-ts";
3
+ import { ComputeBudgetProgram, Keypair, PublicKey, Transaction, TransactionInstruction, } from "@solana/web3.js";
4
+ import BN from "bn.js";
5
+ import sha3 from "js-sha3";
6
+ import { chainNameForDigest, transactionTypeNameForDigest } from "./domain.js";
7
+ const { keccak_256 } = sha3;
8
+ const ENCRYPT_CONFIG_SEED = Buffer.from("encrypt_config");
9
+ const ENCRYPT_DEPOSIT_SEED = Buffer.from("encrypt_deposit");
10
+ const NETWORK_ENCRYPTION_KEY_SEED = Buffer.from("network_encryption_key");
11
+ const _ENCRYPT_EVENT_AUTHORITY_SEED = Buffer.from("__event_authority");
12
+ const DWALLET_COORDINATOR_SEED = Buffer.from("dwallet_coordinator");
13
+ const ZERO_DIGEST = Buffer.alloc(32);
14
+ const ZERO_PUBKEY = new PublicKey(new Uint8Array(32));
15
+ const ENCRYPT_DEPOSIT_DISC = 14;
16
+ const MESSAGE_APPROVAL_DISC = 14;
17
+ const MESSAGE_APPROVAL_ACCOUNT_LEN = 304;
18
+ const MESSAGE_APPROVAL_STATUS_OFFSET = 172;
19
+ const DEFAULT_COMPUTE_UNIT_LIMIT = 1_400_000;
20
+ const DEFAULT_HEAP_FRAME_BYTES = 256 * 1024;
21
+ export const ENCRYPT_NETWORK_KEY = Uint8Array.from({ length: 32 }, () => 0x55);
22
+ function asBigInt(value) {
23
+ if (typeof value === "bigint") {
24
+ return value;
25
+ }
26
+ if (typeof value === "number") {
27
+ return BigInt(Math.trunc(value));
28
+ }
29
+ if (typeof value === "string") {
30
+ return BigInt(value);
31
+ }
32
+ if (BN.isBN(value)) {
33
+ return BigInt(value.toString());
34
+ }
35
+ throw new Error(`Unsupported integer value: ${String(value)}`);
36
+ }
37
+ function decodeOptionalDigest(value, label) {
38
+ if (!value) {
39
+ return Buffer.from(ZERO_DIGEST);
40
+ }
41
+ if (!/^[0-9a-fA-F]{64}$/.test(value)) {
42
+ throw new Error(`${label} must be a 32-byte hex digest`);
43
+ }
44
+ return Buffer.from(value, "hex");
45
+ }
46
+ function decodePublicKeyHex(value) {
47
+ if (!value) {
48
+ throw new Error("dWallet publicKeyHex is required for metadata message approval derivation");
49
+ }
50
+ if (!/^[0-9a-fA-F]+$/.test(value) || value.length % 2 !== 0) {
51
+ throw new Error("dWallet publicKeyHex must contain valid hex bytes");
52
+ }
53
+ return Buffer.from(value, "hex");
54
+ }
55
+ function getDwalletRuntimePubkey(value, label) {
56
+ if (!value) {
57
+ throw new Error(`${label} is not configured on this dWallet registration`);
58
+ }
59
+ return value;
60
+ }
61
+ function findDwalletForPending(account, pending) {
62
+ const dwallet = account.dwallets.find((entry) => entry.chain === pending.targetChain);
63
+ if (!dwallet) {
64
+ throw new Error(`No dWallet is registered for pending chain ${chainNameForDigest(pending.targetChain)}`);
65
+ }
66
+ return dwallet;
67
+ }
68
+ function buildPendingMessage(pending, dwallet) {
69
+ return [
70
+ asBigInt(pending.proposalId).toString(),
71
+ pending.proposalDigest,
72
+ chainNameForDigest(pending.targetChain),
73
+ transactionTypeNameForDigest(pending.txType),
74
+ dwallet.address,
75
+ pending.recipientOrContract,
76
+ asBigInt(pending.amountUsd).toString(),
77
+ pending.policyOutputDigest,
78
+ ].join(":");
79
+ }
80
+ function keccakDigest(message) {
81
+ return Buffer.from(keccak_256.arrayBuffer(Buffer.from(message, "utf8")));
82
+ }
83
+ function sha256Hex(data) {
84
+ return createHash("sha256").update(data).digest("hex");
85
+ }
86
+ export function deriveEncryptAccounts(payer, options = {}) {
87
+ const auraProgramId = options.auraProgramId ?? AURA_PROGRAM_ID;
88
+ const encryptProgramId = options.encryptProgramId ?? ENCRYPT_DEVNET_PROGRAM_ID;
89
+ const [config] = PublicKey.findProgramAddressSync([ENCRYPT_CONFIG_SEED], encryptProgramId);
90
+ const [deposit, depositBump] = PublicKey.findProgramAddressSync([ENCRYPT_DEPOSIT_SEED, payer.toBuffer()], encryptProgramId);
91
+ const [networkEncryptionKey] = PublicKey.findProgramAddressSync([NETWORK_ENCRYPTION_KEY_SEED, Buffer.from(ENCRYPT_NETWORK_KEY)], encryptProgramId);
92
+ const [eventAuthority] = deriveEncryptEventAuthorityAddress(encryptProgramId);
93
+ const [cpiAuthority] = deriveEncryptCpiAuthorityAddress(auraProgramId);
94
+ return {
95
+ config,
96
+ deposit,
97
+ depositBump,
98
+ networkEncryptionKey,
99
+ eventAuthority,
100
+ cpiAuthority,
101
+ encryptProgram: encryptProgramId,
102
+ };
103
+ }
104
+ export function deriveDwalletCoordinatorAddress(dwalletProgramId = DWALLET_DEVNET_PROGRAM_ID) {
105
+ return PublicKey.findProgramAddressSync([DWALLET_COORDINATOR_SEED], dwalletProgramId);
106
+ }
107
+ export function resolveScalarGuardrails(account) {
108
+ const guardrails = account.confidentialGuardrails;
109
+ if (!guardrails?.dailyLimitCiphertext ||
110
+ !guardrails.perTxLimitCiphertext ||
111
+ !guardrails.spentTodayCiphertext) {
112
+ throw new Error("Scalar confidential guardrails are not configured on this treasury.");
113
+ }
114
+ return {
115
+ dailyLimitCiphertext: guardrails.dailyLimitCiphertext,
116
+ perTxLimitCiphertext: guardrails.perTxLimitCiphertext,
117
+ spentTodayCiphertext: guardrails.spentTodayCiphertext,
118
+ };
119
+ }
120
+ export function getActivePendingProposal(account) {
121
+ return account.pendingQueue[0] ?? null;
122
+ }
123
+ export function resolvePendingProposal(account) {
124
+ const pending = getActivePendingProposal(account);
125
+ if (!pending) {
126
+ throw new Error("This treasury has no pending proposal.");
127
+ }
128
+ return pending;
129
+ }
130
+ export function resolvePendingPolicyOutput(account) {
131
+ const pending = resolvePendingProposal(account);
132
+ if (!pending.policyOutputCiphertextAccount) {
133
+ throw new Error("The pending proposal does not have a confidential policy output ciphertext.");
134
+ }
135
+ return new PublicKey(pending.policyOutputCiphertextAccount);
136
+ }
137
+ export function resolvePendingRequestAccount(account) {
138
+ const pending = resolvePendingProposal(account);
139
+ const requestAccount = pending.decryptionRequest?.requestAccount;
140
+ if (!requestAccount) {
141
+ throw new Error("The pending proposal does not have an active decryption request.");
142
+ }
143
+ return new PublicKey(requestAccount);
144
+ }
145
+ export function deriveApprovedExecutionAccounts(account, options = {}) {
146
+ const pending = resolvePendingProposal(account);
147
+ if (!pending.decision.approved) {
148
+ throw new Error("The current pending proposal is denied and does not require dWallet signing.");
149
+ }
150
+ const dwalletProgramId = options.dwalletProgramId ?? DWALLET_DEVNET_PROGRAM_ID;
151
+ const auraProgramId = options.auraProgramId ?? AURA_PROGRAM_ID;
152
+ const dwallet = findDwalletForPending(account, pending);
153
+ const dwalletAccount = getDwalletRuntimePubkey(dwallet.dwalletAccount, "dWallet runtime account");
154
+ const messageApproval = pending.signatureRequest?.messageApprovalAccount
155
+ ? new PublicKey(pending.signatureRequest.messageApprovalAccount)
156
+ : derivePendingMessageApprovalAddress(pending, dwallet, dwalletProgramId)[0];
157
+ const [dwalletCoordinator] = deriveDwalletCoordinatorAddress(dwalletProgramId);
158
+ const [cpiAuthority] = deriveDwalletCpiAuthorityAddress(auraProgramId);
159
+ return {
160
+ pending,
161
+ dwallet,
162
+ messageApproval,
163
+ dwalletAccount,
164
+ dwalletCoordinator,
165
+ cpiAuthority,
166
+ dwalletProgram: dwalletProgramId,
167
+ };
168
+ }
169
+ export function derivePendingMessageApprovalAddress(pending, dwallet, dwalletProgramId = DWALLET_DEVNET_PROGRAM_ID) {
170
+ const publicKey = decodePublicKeyHex(dwallet.publicKeyHex);
171
+ const messageDigest = keccakDigest(buildPendingMessage(pending, dwallet));
172
+ const metadataDigest = decodeOptionalDigest(dwallet.messageMetadataDigest, "dWallet messageMetadataDigest");
173
+ return deriveCanonicalMessageApprovalAddress(dwalletProgramId, dwallet.curve, publicKey, dwallet.signatureScheme, messageDigest, metadataDigest);
174
+ }
175
+ export function buildMessageDigestHex(pending, dwallet) {
176
+ return Buffer.from(keccakDigest(buildPendingMessage(pending, dwallet))).toString("hex");
177
+ }
178
+ export function buildPolicyPlaintextDigestHex(plaintextBytes) {
179
+ return sha256Hex(plaintextBytes);
180
+ }
181
+ export function createEphemeralKeypair() {
182
+ return Keypair.generate();
183
+ }
184
+ export function markInstructionSigner(instruction, pubkey) {
185
+ const entry = instruction.keys.find((key) => key.pubkey.equals(pubkey));
186
+ if (!entry) {
187
+ throw new Error(`Instruction is missing account meta for signer ${pubkey.toBase58()}`);
188
+ }
189
+ entry.isSigner = true;
190
+ }
191
+ export async function sendInstructionsWithBudget(options) {
192
+ const { connection, payer, instructions, extraSigners = [], sendOptions, computeUnitLimit = DEFAULT_COMPUTE_UNIT_LIMIT, heapFrameBytes = DEFAULT_HEAP_FRAME_BYTES, } = options;
193
+ const commitment = sendOptions?.preflightCommitment ?? "confirmed";
194
+ const latest = await connection.getLatestBlockhash(commitment);
195
+ const tx = new Transaction();
196
+ tx.add(ComputeBudgetProgram.requestHeapFrame({ bytes: heapFrameBytes }), ComputeBudgetProgram.setComputeUnitLimit({ units: computeUnitLimit }), ...instructions);
197
+ tx.feePayer = payer.publicKey;
198
+ tx.recentBlockhash = latest.blockhash;
199
+ tx.sign(payer, ...extraSigners);
200
+ const signature = await connection.sendRawTransaction(tx.serialize(), {
201
+ preflightCommitment: commitment,
202
+ ...sendOptions,
203
+ });
204
+ const confirmation = await connection.confirmTransaction({
205
+ signature,
206
+ blockhash: latest.blockhash,
207
+ lastValidBlockHeight: latest.lastValidBlockHeight,
208
+ }, commitment);
209
+ if (confirmation.value.err) {
210
+ throw new Error(`Transaction ${signature} failed confirmation`);
211
+ }
212
+ return signature;
213
+ }
214
+ export async function ensureEncryptDeposit(options) {
215
+ const accounts = deriveEncryptAccounts(options.payer.publicKey, {
216
+ auraProgramId: options.auraProgramId,
217
+ encryptProgramId: options.encryptProgramId,
218
+ });
219
+ const existing = await options.connection.getAccountInfo(accounts.deposit, "confirmed");
220
+ if (existing) {
221
+ return { accounts, created: false };
222
+ }
223
+ const configInfo = await options.connection.getAccountInfo(accounts.config, "confirmed");
224
+ if (!configInfo || configInfo.data.length < 132) {
225
+ throw new Error("Encrypt config account not found or too small for fee-vault lookup.");
226
+ }
227
+ const feeVault = new PublicKey(configInfo.data.subarray(100, 132));
228
+ const vaultIsPayer = feeVault.equals(ZERO_PUBKEY);
229
+ const vaultAccount = vaultIsPayer ? options.payer.publicKey : feeVault;
230
+ const data = Buffer.alloc(18);
231
+ data[0] = ENCRYPT_DEPOSIT_DISC;
232
+ data[1] = accounts.depositBump;
233
+ const instruction = new TransactionInstruction({
234
+ programId: accounts.encryptProgram,
235
+ data,
236
+ keys: [
237
+ { pubkey: accounts.deposit, isSigner: false, isWritable: true },
238
+ { pubkey: accounts.config, isSigner: false, isWritable: false },
239
+ { pubkey: options.payer.publicKey, isSigner: true, isWritable: false },
240
+ { pubkey: options.payer.publicKey, isSigner: true, isWritable: true },
241
+ { pubkey: options.payer.publicKey, isSigner: true, isWritable: true },
242
+ { pubkey: vaultAccount, isSigner: vaultIsPayer, isWritable: true },
243
+ { pubkey: ZERO_PUBKEY, isSigner: false, isWritable: false },
244
+ { pubkey: ZERO_PUBKEY, isSigner: false, isWritable: false },
245
+ ],
246
+ });
247
+ const signature = await sendInstructionsWithBudget({
248
+ connection: options.connection,
249
+ payer: options.payer,
250
+ instructions: [instruction],
251
+ });
252
+ return { accounts, created: true, signature };
253
+ }
254
+ export async function waitForAccountState(connection, pubkey, predicate, options = {}) {
255
+ const timeoutMs = options.timeoutMs ?? 120_000;
256
+ const intervalMs = options.intervalMs ?? 1_000;
257
+ const commitment = options.commitment ?? "confirmed";
258
+ const startedAt = Date.now();
259
+ while (Date.now() - startedAt < timeoutMs) {
260
+ const account = await connection.getAccountInfo(pubkey, commitment);
261
+ if (account && predicate(account)) {
262
+ return account;
263
+ }
264
+ await new Promise((resolve) => setTimeout(resolve, intervalMs));
265
+ }
266
+ throw new Error(`Timed out waiting for ${pubkey.toBase58()}`);
267
+ }
268
+ export async function waitForCiphertextVerified(connection, ciphertext, options) {
269
+ return await waitForAccountState(connection, ciphertext, (account) => account.data.length >= 100 && account.data[99] === 1, options);
270
+ }
271
+ export async function waitForDecryptionReady(connection, requestAccount, options) {
272
+ return await waitForAccountState(connection, requestAccount, (account) => {
273
+ if (account.data.length < 107) {
274
+ return false;
275
+ }
276
+ const total = account.data.readUInt32LE(99);
277
+ const written = account.data.readUInt32LE(103);
278
+ return total > 0 && written === total;
279
+ }, options);
280
+ }
281
+ export async function waitForMessageApproval(connection, messageApproval, targetState = "signed", options) {
282
+ return await waitForAccountState(connection, messageApproval, (account) => {
283
+ const state = parseMessageApprovalState(account.data);
284
+ return (state === targetState ||
285
+ (targetState === "pending" && state === "signed"));
286
+ }, options);
287
+ }
288
+ export async function getMessageApprovalState(connection, messageApproval, commitment = "confirmed") {
289
+ const account = await connection.getAccountInfo(messageApproval, commitment);
290
+ if (!account) {
291
+ return "missing";
292
+ }
293
+ return parseMessageApprovalState(account.data);
294
+ }
295
+ export function parseMessageApprovalState(data) {
296
+ if (data.length < 2 || data[0] !== MESSAGE_APPROVAL_DISC) {
297
+ return "missing";
298
+ }
299
+ if (data.length >= MESSAGE_APPROVAL_ACCOUNT_LEN) {
300
+ const status = data[MESSAGE_APPROVAL_STATUS_OFFSET];
301
+ return status === 1 ? "signed" : "pending";
302
+ }
303
+ return "pending";
304
+ }
305
+ export function parseDecryptionReady(account) {
306
+ if (!account || account.data.length < 107) {
307
+ return false;
308
+ }
309
+ const total = account.data.readUInt32LE(99);
310
+ const written = account.data.readUInt32LE(103);
311
+ return total > 0 && written === total;
312
+ }
313
+ export function parseCiphertextVerified(account) {
314
+ return !!account && account.data.length >= 100 && account.data[99] === 1;
315
+ }
316
+ export function buildDryRunKeypair(path, load) {
317
+ return path ? load(path) : createEphemeralKeypair();
318
+ }
319
+ export function buildConfirmPolicySummary(account) {
320
+ const pending = resolvePendingProposal(account);
321
+ return {
322
+ approved: pending.decision.approved,
323
+ violation: pending.decision.violation,
324
+ status: pending.status,
325
+ };
326
+ }
327
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/lib/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { TreasuryAccountRecord } from "@aura-protocol/sdk-ts";
2
+ import type { PublicKey } from "@solana/web3.js";
3
+ export interface TreasurySections {
4
+ overview: string;
5
+ policy: string;
6
+ confidential?: string;
7
+ dwallets?: string;
8
+ pending?: string;
9
+ governance?: string;
10
+ }
11
+ export declare function renderTreasurySections(treasury: PublicKey, account: TreasuryAccountRecord): TreasurySections;
@@ -0,0 +1,126 @@
1
+ import { formatNullable, formatPercentBps, formatPubkey, formatRelativeSeconds, formatTimestamp, formatUsd, } from "../ui/format.js";
2
+ import { createTable } from "../ui/output.js";
3
+ import { formatChain, formatProposalStatus, formatTransactionType, formatViolation, } from "./domain.js";
4
+ import { getActivePendingProposal } from "./protocol.js";
5
+ function renderOverview(treasury, account) {
6
+ const table = createTable(["Field", "Value"]);
7
+ table.push(["PDA", treasury.toBase58()], ["Agent ID", account.agentId], ["Owner", account.owner.toBase58()], ["AI Authority", account.aiAuthority.toBase58()], ["Status", account.executionPaused ? "Paused" : "Active"], ["Total tx", String(account.totalTransactions)], ["Created", formatTimestamp(account.createdAt)], ["Updated", formatTimestamp(account.updatedAt)]);
8
+ return table.toString();
9
+ }
10
+ function renderPolicy(account) {
11
+ const policy = account.policyConfig;
12
+ const table = createTable(["Policy", "Value"]);
13
+ table.push(["Daily limit", formatUsd(policy.dailyLimitUsd)], ["Per-tx limit", formatUsd(policy.perTxLimitUsd)], ["Daytime hourly", formatUsd(policy.daytimeHourlyLimitUsd)], ["Nighttime hourly", formatUsd(policy.nighttimeHourlyLimitUsd)], ["Velocity limit", formatUsd(policy.velocityLimitUsd)], ["Shared pool", formatUsd(policy.sharedPoolLimitUsd)], ["Max slippage", formatPercentBps(policy.maxSlippageBps)], ["Max quote age", formatNullable(policy.maxQuoteAgeSecs)], ["Max risk score", formatNullable(policy.maxCounterpartyRiskScore)]);
14
+ return table.toString();
15
+ }
16
+ function renderConfidential(account) {
17
+ const guardrails = account.confidentialGuardrails;
18
+ if (!guardrails) {
19
+ return undefined;
20
+ }
21
+ const table = createTable(["Confidential", "Value"]);
22
+ table.push(["Daily limit ct", formatPubkey(guardrails.dailyLimitCiphertext)], ["Per-tx limit ct", formatPubkey(guardrails.perTxLimitCiphertext)], ["Spent today ct", formatPubkey(guardrails.spentTodayCiphertext)]);
23
+ return table.toString();
24
+ }
25
+ function renderDwallets(account) {
26
+ if (account.dwallets.length === 0) {
27
+ return undefined;
28
+ }
29
+ const table = createTable([
30
+ "Chain",
31
+ "dWallet ID",
32
+ "Address",
33
+ "Runtime PDA",
34
+ "Authorized User",
35
+ "Balance",
36
+ ]);
37
+ for (const dwallet of account.dwallets) {
38
+ table.push([
39
+ formatChain(dwallet.chain),
40
+ dwallet.dwalletId,
41
+ dwallet.address,
42
+ formatPubkey(dwallet.dwalletAccount),
43
+ formatPubkey(dwallet.authorizedUserPubkey),
44
+ formatUsd(dwallet.balanceUsd),
45
+ ]);
46
+ }
47
+ return table.toString();
48
+ }
49
+ function renderPending(account) {
50
+ const pending = getActivePendingProposal(account);
51
+ if (!pending) {
52
+ return undefined;
53
+ }
54
+ const table = createTable(["Pending", "Value"]);
55
+ table.push(["Proposal ID", String(pending.proposalId)], ["Amount", formatUsd(pending.amountUsd)], ["Chain", formatChain(pending.targetChain)], ["Type", formatTransactionType(pending.txType)], ["Recipient", pending.recipientOrContract], ["Status", formatProposalStatus(pending.status)], ["Approved", pending.decision.approved ? "Yes" : "No"], ["Violation", formatViolation(pending.decision.violation)], ["Effective limit", formatUsd(pending.decision.effectiveDailyLimitUsd)], ["Submitted", formatTimestamp(pending.submittedAt)], [
56
+ "Expires",
57
+ `${formatTimestamp(pending.expiresAt)} (${formatRelativeSeconds(pending.expiresAt)})`,
58
+ ], ["Policy output ct", formatNullable(pending.policyOutputCiphertextAccount)]);
59
+ if (pending.decryptionRequest) {
60
+ table.push(["Decrypt request", pending.decryptionRequest.requestAccount], [
61
+ "Decrypt requested",
62
+ formatTimestamp(pending.decryptionRequest.requestedAt),
63
+ ], [
64
+ "Decrypt verified",
65
+ formatTimestamp(pending.decryptionRequest.verifiedAt),
66
+ ], [
67
+ "Plaintext sha256",
68
+ formatNullable(pending.decryptionRequest.plaintextSha256),
69
+ ]);
70
+ }
71
+ if (pending.signatureRequest) {
72
+ table.push(["Message approval", pending.signatureRequest.messageApprovalAccount], ["Approval ID", pending.signatureRequest.approvalId], [
73
+ "Signature requested",
74
+ formatTimestamp(pending.signatureRequest.requestedAt),
75
+ ]);
76
+ }
77
+ return table.toString();
78
+ }
79
+ function renderGovernance(account) {
80
+ if (!account.multisig && !account.swarm) {
81
+ return undefined;
82
+ }
83
+ const table = createTable(["Governance", "Value"]);
84
+ if (account.multisig) {
85
+ table.push([
86
+ "Multisig",
87
+ `${account.multisig.requiredSignatures}-of-${account.multisig.guardians.length}`,
88
+ ]);
89
+ table.push([
90
+ "Guardians",
91
+ account.multisig.guardians
92
+ .map((guardian) => {
93
+ const key = formatPubkey(guardian.key);
94
+ return guardian.weight !== 1 ? `${key}·w${guardian.weight}` : key;
95
+ })
96
+ .join(", "),
97
+ ]);
98
+ if (account.multisig.pendingOverride) {
99
+ table.push([
100
+ "Override limit",
101
+ formatUsd(account.multisig.pendingOverride.newDailyLimitUsd),
102
+ ], [
103
+ "Override sigs",
104
+ `${account.multisig.pendingOverride.signaturesCollected.length}/${account.multisig.requiredSignatures}`,
105
+ ], [
106
+ "Override expiry",
107
+ formatTimestamp(account.multisig.pendingOverride.expiration),
108
+ ]);
109
+ }
110
+ }
111
+ if (account.swarm) {
112
+ table.push(["Swarm", account.swarm.swarmId], ["Members", account.swarm.memberAgents.join(", ")], ["Shared pool", formatUsd(account.swarm.sharedPoolLimitUsd)], ["Spent", formatUsd(account.swarm.totalSwarmSpentUsd)]);
113
+ }
114
+ return table.toString();
115
+ }
116
+ export function renderTreasurySections(treasury, account) {
117
+ return {
118
+ overview: renderOverview(treasury, account),
119
+ policy: renderPolicy(account),
120
+ confidential: renderConfidential(account),
121
+ dwallets: renderDwallets(account),
122
+ pending: renderPending(account),
123
+ governance: renderGovernance(account),
124
+ };
125
+ }
126
+ //# sourceMappingURL=treasury-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treasury-view.js","sourceRoot":"","sources":["../../src/lib/treasury-view.ts"],"names":[],"mappings":"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"}
@@ -51,7 +51,7 @@ export declare function getProgramInstructionCatalog(): {
51
51
  }[];
52
52
  totals: {
53
53
  domains: number;
54
- instructions: 67;
54
+ instructions: 161;
55
55
  };
56
56
  };
57
57
  export declare function buildProgramInstruction(client: AuraClient, input: ProgramInstructionInput, options: {
@@ -0,0 +1,7 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import type { CliContext } from "../core/context.js";
3
+ export declare function runDashboard(options: {
4
+ ctx: CliContext;
5
+ treasury: PublicKey;
6
+ intervalMs: number;
7
+ }): Promise<void>;
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { accounts } from "@aura-protocol/sdk-ts";
3
+ import { PublicKey } from "@solana/web3.js";
4
+ import { Box, render, Text, useApp, useInput } from "ink";
5
+ import { useEffect, useState } from "react";
6
+ import { getActivePendingProposal, getMessageApprovalState, parseCiphertextVerified, parseDecryptionReady, } from "../lib/protocol.js";
7
+ import { renderTreasurySections } from "../lib/treasury-view.js";
8
+ import { formatTimestamp } from "./format.js";
9
+ import { createTable } from "./output.js";
10
+ async function buildLivePanel(ctx, account) {
11
+ const pending = getActivePendingProposal(account);
12
+ if (!pending) {
13
+ return undefined;
14
+ }
15
+ const table = createTable(["Live", "Value"]);
16
+ if (pending.policyOutputCiphertextAccount) {
17
+ const info = await ctx.connection.getAccountInfo(new PublicKey(pending.policyOutputCiphertextAccount), "confirmed");
18
+ table.push([
19
+ "Policy output verified",
20
+ parseCiphertextVerified(info) ? "Yes" : "No",
21
+ ]);
22
+ }
23
+ if (pending.decryptionRequest?.requestAccount) {
24
+ const info = await ctx.connection.getAccountInfo(new PublicKey(pending.decryptionRequest.requestAccount), "confirmed");
25
+ table.push(["Decryption ready", parseDecryptionReady(info) ? "Yes" : "No"]);
26
+ }
27
+ if (pending.signatureRequest?.messageApprovalAccount) {
28
+ const state = await getMessageApprovalState(ctx.connection, new PublicKey(pending.signatureRequest.messageApprovalAccount));
29
+ table.push(["Message approval", state]);
30
+ }
31
+ return table.length > 0 ? table.toString() : undefined;
32
+ }
33
+ async function readSnapshot(ctx, treasury) {
34
+ const account = await accounts.fetchTreasuryAccount(ctx.client, treasury);
35
+ return {
36
+ treasury,
37
+ account,
38
+ livePanel: await buildLivePanel(ctx, account),
39
+ refreshedAt: new Date(),
40
+ };
41
+ }
42
+ function Section(props) {
43
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, marginBottom: 1, children: [_jsx(Text, { color: "cyanBright", children: props.title }), _jsx(Text, { children: props.body })] }));
44
+ }
45
+ function DashboardApp(props) {
46
+ const { exit } = useApp();
47
+ const [snapshot, setSnapshot] = useState(null);
48
+ const [error, setError] = useState(null);
49
+ const [_refreshCount, setRefreshCount] = useState(0);
50
+ useEffect(() => {
51
+ let active = true;
52
+ let timer;
53
+ const refresh = async () => {
54
+ try {
55
+ const next = await readSnapshot(props.ctx, props.treasury);
56
+ if (!active) {
57
+ return;
58
+ }
59
+ setSnapshot(next);
60
+ setError(null);
61
+ }
62
+ catch (nextError) {
63
+ if (!active) {
64
+ return;
65
+ }
66
+ setError(nextError instanceof Error ? nextError.message : String(nextError));
67
+ }
68
+ };
69
+ void refresh();
70
+ timer = setInterval(() => {
71
+ void refresh();
72
+ }, props.intervalMs);
73
+ return () => {
74
+ active = false;
75
+ if (timer) {
76
+ clearInterval(timer);
77
+ }
78
+ };
79
+ }, [props.ctx, props.intervalMs, props.treasury]);
80
+ useInput((input, key) => {
81
+ if (input === "q" || key.escape || (key.ctrl && input === "c")) {
82
+ exit();
83
+ return;
84
+ }
85
+ if (input === "r") {
86
+ setRefreshCount((value) => value + 1);
87
+ }
88
+ });
89
+ if (!snapshot) {
90
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "cyanBright", children: "AURA Dashboard" }), _jsx(Text, { children: error ? `Loading failed: ${error}` : "Loading treasury state..." })] }));
91
+ }
92
+ const sections = renderTreasurySections(snapshot.treasury, snapshot.account);
93
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, flexDirection: "column", children: [_jsx(Text, { color: "cyanBright", children: "AURA Dashboard" }), _jsxs(Text, { children: [snapshot.account.agentId, " | ", snapshot.treasury.toBase58(), " | refreshed", " ", formatTimestamp(Math.floor(snapshot.refreshedAt.getTime() / 1000))] }), _jsx(Text, { color: "gray", children: "Press r to refresh, q or Esc to quit." })] }), error ? (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "red", children: ["Last refresh failed: ", error] }) })) : null, _jsx(Section, { title: "Overview", body: sections.overview }), _jsx(Section, { title: "Policy", body: sections.policy }), sections.confidential ? (_jsx(Section, { title: "Confidential", body: sections.confidential })) : null, sections.pending ? (_jsx(Section, { title: "Pending", body: sections.pending })) : null, snapshot.livePanel ? (_jsx(Section, { title: "Live", body: snapshot.livePanel })) : null, sections.dwallets ? (_jsx(Section, { title: "dWallets", body: sections.dwallets })) : null, sections.governance ? (_jsx(Section, { title: "Governance", body: sections.governance })) : null] }));
94
+ }
95
+ export async function runDashboard(options) {
96
+ const app = render(_jsx(DashboardApp, { ctx: options.ctx, treasury: options.treasury, intervalMs: options.intervalMs }), { exitOnCtrlC: true });
97
+ await app.waitUntilExit();
98
+ }
99
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/ui/dashboard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ export declare function formatUsd(value: unknown): string;
3
+ export declare function formatPercentBps(value: unknown): string;
4
+ export declare function formatPubkey(value: PublicKey | string | null | undefined, options?: {
5
+ shorten?: boolean;
6
+ }): string;
7
+ export declare function formatTimestamp(value: unknown): string;
8
+ export declare function formatRelativeSeconds(targetSeconds: unknown): string;
9
+ export declare function formatNullable(value: unknown): string;