@magicblock-console/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/crank.d.ts +4 -0
- package/dist/commands/crank.d.ts.map +1 -0
- package/dist/commands/crank.js +73 -0
- package/dist/commands/crank.js.map +1 -0
- package/dist/commands/er.d.ts +4 -0
- package/dist/commands/er.d.ts.map +1 -0
- package/dist/commands/er.js +123 -0
- package/dist/commands/er.js.map +1 -0
- package/dist/commands/monitor.d.ts +4 -0
- package/dist/commands/monitor.d.ts.map +1 -0
- package/dist/commands/monitor.js +89 -0
- package/dist/commands/monitor.js.map +1 -0
- package/dist/commands/oracle.d.ts +4 -0
- package/dist/commands/oracle.d.ts.map +1 -0
- package/dist/commands/oracle.js +28 -0
- package/dist/commands/oracle.js.map +1 -0
- package/dist/commands/privacy.d.ts +4 -0
- package/dist/commands/privacy.d.ts.map +1 -0
- package/dist/commands/privacy.js +89 -0
- package/dist/commands/privacy.js.map +1 -0
- package/dist/commands/project.d.ts +4 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +110 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/vrf.d.ts +4 -0
- package/dist/commands/vrf.d.ts.map +1 -0
- package/dist/commands/vrf.js +21 -0
- package/dist/commands/vrf.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/output.d.ts +20 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +60 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +24 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crank.d.ts","sourceRoot":"","sources":["../../src/commands/crank.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAyEnF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { printJson, printSuccess, printError, printTable } from '../utils/output.js';
|
|
2
|
+
export function registerCrankCommands(program, client) {
|
|
3
|
+
const crank = program
|
|
4
|
+
.command('crank')
|
|
5
|
+
.description('Automated crank (clockwork) operations');
|
|
6
|
+
// -- create --
|
|
7
|
+
crank
|
|
8
|
+
.command('create')
|
|
9
|
+
.description('Create a new crank')
|
|
10
|
+
.requiredOption('--interval <ms>', 'Interval in milliseconds', parseInt)
|
|
11
|
+
.option('--iterations <n>', 'Number of iterations (0 = infinite)', parseInt)
|
|
12
|
+
.option('--account <pubkey>', 'Account to commit (enables real blockchain)')
|
|
13
|
+
.requiredOption('--project <name>', 'Project name')
|
|
14
|
+
.action(async (opts) => {
|
|
15
|
+
try {
|
|
16
|
+
const result = await client.cranks.create({
|
|
17
|
+
project: opts.project,
|
|
18
|
+
intervalMs: opts.interval,
|
|
19
|
+
iterations: opts.iterations,
|
|
20
|
+
account: opts.account,
|
|
21
|
+
});
|
|
22
|
+
const badge = result.simulated ? ' (simulated)' : '';
|
|
23
|
+
printSuccess(`Crank created${badge}: ${result.id}`);
|
|
24
|
+
printJson(result);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
// -- list --
|
|
31
|
+
crank
|
|
32
|
+
.command('list')
|
|
33
|
+
.description('List cranks for a project')
|
|
34
|
+
.requiredOption('--project <name>', 'Project name')
|
|
35
|
+
.action(async (opts) => {
|
|
36
|
+
try {
|
|
37
|
+
const cranks = await client.cranks.list(opts.project);
|
|
38
|
+
printTable(cranks.map((c) => ({
|
|
39
|
+
id: c.id,
|
|
40
|
+
interval: `${c.intervalMs}ms`,
|
|
41
|
+
iterations: c.iterations === 0 ? 'infinite' : String(c.iterations),
|
|
42
|
+
executed: String(c.executed),
|
|
43
|
+
status: c.status,
|
|
44
|
+
mode: c.simulated ? 'simulated' : 'live',
|
|
45
|
+
})), [
|
|
46
|
+
{ header: 'ID', key: 'id' },
|
|
47
|
+
{ header: 'Interval', key: 'interval' },
|
|
48
|
+
{ header: 'Iterations', key: 'iterations' },
|
|
49
|
+
{ header: 'Executed', key: 'executed' },
|
|
50
|
+
{ header: 'Status', key: 'status' },
|
|
51
|
+
{ header: 'Mode', key: 'mode' },
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
// -- stop --
|
|
59
|
+
crank
|
|
60
|
+
.command('stop <id>')
|
|
61
|
+
.description('Stop a running crank')
|
|
62
|
+
.action(async (id) => {
|
|
63
|
+
try {
|
|
64
|
+
const result = await client.cranks.stop(id);
|
|
65
|
+
printSuccess(`Crank ${id} stopped`);
|
|
66
|
+
printJson(result);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=crank.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crank.js","sourceRoot":"","sources":["../../src/commands/crank.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"er.d.ts","sourceRoot":"","sources":["../../src/commands/er.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAwHhF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { assertPubkey } from '@magicblock-console/core';
|
|
2
|
+
import { printJson, printSuccess, printError, printTable } from '../utils/output.js';
|
|
3
|
+
export function registerErCommands(program, client) {
|
|
4
|
+
const er = program
|
|
5
|
+
.command('er')
|
|
6
|
+
.description('Ephemeral Rollup lifecycle management');
|
|
7
|
+
// -- delegate --
|
|
8
|
+
er
|
|
9
|
+
.command('delegate <account>')
|
|
10
|
+
.description('Delegate an account to an Ephemeral Rollup')
|
|
11
|
+
.requiredOption('--project <name>', 'Project name')
|
|
12
|
+
.option('--owner-program <pubkey>', 'Owner program of the account (required for real blockchain)')
|
|
13
|
+
.action(async (account, opts) => {
|
|
14
|
+
try {
|
|
15
|
+
assertPubkey(account, 'account');
|
|
16
|
+
if (opts.ownerProgram)
|
|
17
|
+
assertPubkey(opts.ownerProgram, 'owner program');
|
|
18
|
+
const result = await client.er.delegate({
|
|
19
|
+
account,
|
|
20
|
+
project: opts.project,
|
|
21
|
+
ownerProgram: opts.ownerProgram,
|
|
22
|
+
});
|
|
23
|
+
printSuccess(`Account ${account} delegated`);
|
|
24
|
+
printJson(result);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
// -- undelegate --
|
|
31
|
+
er
|
|
32
|
+
.command('undelegate <account>')
|
|
33
|
+
.description('Undelegate an account from an Ephemeral Rollup')
|
|
34
|
+
.requiredOption('--project <name>', 'Project name')
|
|
35
|
+
.option('--owner-program <pubkey>', 'Owner program of the account')
|
|
36
|
+
.action(async (account, opts) => {
|
|
37
|
+
try {
|
|
38
|
+
assertPubkey(account, 'account');
|
|
39
|
+
if (opts.ownerProgram)
|
|
40
|
+
assertPubkey(opts.ownerProgram, 'owner program');
|
|
41
|
+
const result = await client.er.undelegate({
|
|
42
|
+
account,
|
|
43
|
+
project: opts.project,
|
|
44
|
+
ownerProgram: opts.ownerProgram,
|
|
45
|
+
});
|
|
46
|
+
printSuccess(`Account ${account} undelegated`);
|
|
47
|
+
printJson(result);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
// -- commit --
|
|
54
|
+
er
|
|
55
|
+
.command('commit <account>')
|
|
56
|
+
.description('Commit ER state back to the base layer')
|
|
57
|
+
.requiredOption('--project <name>', 'Project name')
|
|
58
|
+
.action(async (account, opts) => {
|
|
59
|
+
try {
|
|
60
|
+
assertPubkey(account, 'account');
|
|
61
|
+
const result = await client.er.commit({
|
|
62
|
+
account,
|
|
63
|
+
project: opts.project,
|
|
64
|
+
});
|
|
65
|
+
printSuccess(`Account ${account} committed`);
|
|
66
|
+
printJson(result);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
// -- status --
|
|
73
|
+
er
|
|
74
|
+
.command('status <account>')
|
|
75
|
+
.description('Check delegation status of an account')
|
|
76
|
+
.action(async (account) => {
|
|
77
|
+
try {
|
|
78
|
+
assertPubkey(account, 'account');
|
|
79
|
+
const result = await client.er.status(account);
|
|
80
|
+
printJson(result);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// -- list --
|
|
87
|
+
er
|
|
88
|
+
.command('list')
|
|
89
|
+
.description('List delegated accounts for a project')
|
|
90
|
+
.requiredOption('--project <name>', 'Project name')
|
|
91
|
+
.action(async (opts) => {
|
|
92
|
+
try {
|
|
93
|
+
const accounts = await client.er.accounts(opts.project);
|
|
94
|
+
printTable(accounts.map((a) => ({
|
|
95
|
+
address: a.address,
|
|
96
|
+
validator: a.validator,
|
|
97
|
+
delegatedAt: a.delegatedAt.toISOString(),
|
|
98
|
+
})), [
|
|
99
|
+
{ header: 'Address', key: 'address' },
|
|
100
|
+
{ header: 'Validator', key: 'validator' },
|
|
101
|
+
{ header: 'Delegated At', key: 'delegatedAt' },
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
// -- diff --
|
|
109
|
+
er
|
|
110
|
+
.command('diff <account>')
|
|
111
|
+
.description('Show state diff between base layer and ER')
|
|
112
|
+
.action(async (account) => {
|
|
113
|
+
try {
|
|
114
|
+
assertPubkey(account, 'account');
|
|
115
|
+
const result = await client.er.diff(account);
|
|
116
|
+
printJson(result);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=er.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"er.js","sourceRoot":"","sources":["../../src/commands/er.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkGrF"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { printJson, printError, printTable } from '../utils/output.js';
|
|
2
|
+
export function registerMonitorCommands(program, client) {
|
|
3
|
+
const monitor = program
|
|
4
|
+
.command('monitor')
|
|
5
|
+
.description('Project monitoring and observability');
|
|
6
|
+
// -- status --
|
|
7
|
+
monitor
|
|
8
|
+
.command('status')
|
|
9
|
+
.description('Show project status overview')
|
|
10
|
+
.requiredOption('--project <name>', 'Project name')
|
|
11
|
+
.action(async (opts) => {
|
|
12
|
+
try {
|
|
13
|
+
const status = await client.monitor.status(opts.project);
|
|
14
|
+
console.log(`Project: ${status.project}`);
|
|
15
|
+
console.log(`Region: ${status.region}`);
|
|
16
|
+
console.log(`Uptime: ${status.uptime}%`);
|
|
17
|
+
console.log(`Transactions: ${status.transactionCount}`);
|
|
18
|
+
console.log();
|
|
19
|
+
// Feature flags
|
|
20
|
+
const enabledFeatures = Object.entries(status.features)
|
|
21
|
+
.filter(([, v]) => v)
|
|
22
|
+
.map(([k]) => k);
|
|
23
|
+
console.log(`Features: ${enabledFeatures.length > 0 ? enabledFeatures.join(', ') : 'none'}`);
|
|
24
|
+
console.log();
|
|
25
|
+
// Delegated accounts
|
|
26
|
+
if (status.accounts.length > 0) {
|
|
27
|
+
console.log(`Delegated accounts (${status.accounts.length}):`);
|
|
28
|
+
printTable(status.accounts.map((a) => ({
|
|
29
|
+
address: a.address,
|
|
30
|
+
validator: a.validator,
|
|
31
|
+
delegatedAt: a.delegatedAt.toISOString(),
|
|
32
|
+
})), [
|
|
33
|
+
{ header: 'Address', key: 'address' },
|
|
34
|
+
{ header: 'Validator', key: 'validator' },
|
|
35
|
+
{ header: 'Delegated At', key: 'delegatedAt' },
|
|
36
|
+
]);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.log('Delegated accounts: none');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// -- costs --
|
|
47
|
+
monitor
|
|
48
|
+
.command('costs')
|
|
49
|
+
.description('Show cost breakdown for a project')
|
|
50
|
+
.requiredOption('--project <name>', 'Project name')
|
|
51
|
+
.option('--period <period>', 'Time period: 7d, 30d, 90d', '30d')
|
|
52
|
+
.action(async (opts) => {
|
|
53
|
+
try {
|
|
54
|
+
const costs = await client.monitor.costs(opts.project, opts.period);
|
|
55
|
+
printJson(costs);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
// -- logs --
|
|
62
|
+
monitor
|
|
63
|
+
.command('logs')
|
|
64
|
+
.description('Show project logs')
|
|
65
|
+
.requiredOption('--project <name>', 'Project name')
|
|
66
|
+
.option('--limit <n>', 'Number of log entries to show', parseInt)
|
|
67
|
+
.action(async (opts) => {
|
|
68
|
+
try {
|
|
69
|
+
const logs = await client.monitor.logs(opts.project, opts.limit);
|
|
70
|
+
if (logs.length === 0) {
|
|
71
|
+
console.log('(no log entries)');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
printTable(logs.map((l) => ({
|
|
75
|
+
timestamp: l.timestamp.toISOString(),
|
|
76
|
+
type: l.type,
|
|
77
|
+
message: l.message,
|
|
78
|
+
})), [
|
|
79
|
+
{ header: 'Timestamp', key: 'timestamp' },
|
|
80
|
+
{ header: 'Type', key: 'type' },
|
|
81
|
+
{ header: 'Message', key: 'message' },
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../../src/commands/oracle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAyBpF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { printJson, printError, printSuccess } from '../utils/output.js';
|
|
2
|
+
export function registerOracleCommands(program, client) {
|
|
3
|
+
const oracle = program
|
|
4
|
+
.command('oracle')
|
|
5
|
+
.description('On-chain oracle price feeds');
|
|
6
|
+
// -- price --
|
|
7
|
+
oracle
|
|
8
|
+
.command('price')
|
|
9
|
+
.description('Get a price feed value')
|
|
10
|
+
.requiredOption('--feed <pair>', 'Price feed pair (e.g. SOL/USD)')
|
|
11
|
+
.requiredOption('--project <name>', 'Project name')
|
|
12
|
+
.action(async (opts) => {
|
|
13
|
+
try {
|
|
14
|
+
const result = await client.oracle.getPrice({
|
|
15
|
+
project: opts.project,
|
|
16
|
+
feed: opts.feed,
|
|
17
|
+
});
|
|
18
|
+
printJson(result);
|
|
19
|
+
if (result.simulated) {
|
|
20
|
+
printSuccess('(simulated mode — no blockchain connection)');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=oracle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oracle.js","sourceRoot":"","sources":["../../src/commands/oracle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,MAAqB;IAC5E,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAE9C,cAAc;IACd,MAAM;SACH,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wBAAwB,CAAC;SACrC,cAAc,CAAC,eAAe,EAAE,gCAAgC,CAAC;SACjE,cAAc,CAAC,kBAAkB,EAAE,cAAc,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,IAAuC,EAAE,EAAE;QACxD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAC1C,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;YACH,SAAS,CAAC,MAAM,CAAC,CAAC;YAClB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,YAAY,CAAC,6CAA6C,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacy.d.ts","sourceRoot":"","sources":["../../src/commands/privacy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAe9D,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA4ErF"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { assertPubkey } from '@magicblock-console/core';
|
|
2
|
+
import { printSuccess, printError } from '../utils/output.js';
|
|
3
|
+
function validateAmount(value, label) {
|
|
4
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
5
|
+
throw new Error(`${label} must be a positive finite number`);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
function formatResult(operation, signature, simulated) {
|
|
9
|
+
const badge = simulated ? ' (simulated)' : '';
|
|
10
|
+
return `${operation} successful${badge}. Signature: ${signature}`;
|
|
11
|
+
}
|
|
12
|
+
export function registerPrivacyCommands(program, client) {
|
|
13
|
+
const privacy = program
|
|
14
|
+
.command('privacy')
|
|
15
|
+
.description('Confidential token operations');
|
|
16
|
+
// -- deposit --
|
|
17
|
+
privacy
|
|
18
|
+
.command('deposit')
|
|
19
|
+
.description('Deposit tokens into the privacy layer')
|
|
20
|
+
.requiredOption('--token <mint>', 'Token symbol or mint address')
|
|
21
|
+
.requiredOption('--amount <n>', 'Amount to deposit', parseFloat)
|
|
22
|
+
.requiredOption('--project <name>', 'Project name')
|
|
23
|
+
.option('--mint <address>', 'Explicit SPL mint address')
|
|
24
|
+
.action(async (opts) => {
|
|
25
|
+
try {
|
|
26
|
+
validateAmount(opts.amount, 'Deposit amount');
|
|
27
|
+
const result = await client.privacy.deposit({
|
|
28
|
+
project: opts.project,
|
|
29
|
+
token: opts.token,
|
|
30
|
+
amount: opts.amount,
|
|
31
|
+
mint: opts.mint,
|
|
32
|
+
});
|
|
33
|
+
printSuccess(formatResult('Deposit', result.signature, result.simulated));
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
// -- transfer --
|
|
40
|
+
privacy
|
|
41
|
+
.command('transfer')
|
|
42
|
+
.description('Transfer tokens confidentially')
|
|
43
|
+
.requiredOption('--token <mint>', 'Token symbol or mint address')
|
|
44
|
+
.requiredOption('--amount <n>', 'Amount to transfer', parseFloat)
|
|
45
|
+
.requiredOption('--to <wallet>', 'Recipient wallet address')
|
|
46
|
+
.requiredOption('--project <name>', 'Project name')
|
|
47
|
+
.option('--mint <address>', 'Explicit SPL mint address')
|
|
48
|
+
.action(async (opts) => {
|
|
49
|
+
try {
|
|
50
|
+
validateAmount(opts.amount, 'Transfer amount');
|
|
51
|
+
assertPubkey(opts.to, 'recipient');
|
|
52
|
+
const result = await client.privacy.transfer({
|
|
53
|
+
project: opts.project,
|
|
54
|
+
token: opts.token,
|
|
55
|
+
amount: opts.amount,
|
|
56
|
+
to: opts.to,
|
|
57
|
+
mint: opts.mint,
|
|
58
|
+
});
|
|
59
|
+
printSuccess(formatResult('Transfer', result.signature, result.simulated));
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// -- withdraw --
|
|
66
|
+
privacy
|
|
67
|
+
.command('withdraw')
|
|
68
|
+
.description('Withdraw tokens from the privacy layer')
|
|
69
|
+
.requiredOption('--token <mint>', 'Token symbol or mint address')
|
|
70
|
+
.requiredOption('--amount <n>', 'Amount to withdraw', parseFloat)
|
|
71
|
+
.requiredOption('--project <name>', 'Project name')
|
|
72
|
+
.option('--mint <address>', 'Explicit SPL mint address')
|
|
73
|
+
.action(async (opts) => {
|
|
74
|
+
try {
|
|
75
|
+
validateAmount(opts.amount, 'Withdraw amount');
|
|
76
|
+
const result = await client.privacy.withdraw({
|
|
77
|
+
project: opts.project,
|
|
78
|
+
token: opts.token,
|
|
79
|
+
amount: opts.amount,
|
|
80
|
+
mint: opts.mint,
|
|
81
|
+
});
|
|
82
|
+
printSuccess(formatResult('Withdraw', result.signature, result.simulated));
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=privacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacy.js","sourceRoot":"","sources":["../../src/commands/privacy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA+GrF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { printJson, printSuccess, printError, printTable } from '../utils/output.js';
|
|
2
|
+
export function registerProjectCommands(program, client) {
|
|
3
|
+
const project = program
|
|
4
|
+
.command('project')
|
|
5
|
+
.description('Manage projects');
|
|
6
|
+
// -- create --
|
|
7
|
+
project
|
|
8
|
+
.command('create <name>')
|
|
9
|
+
.description('Create a new project')
|
|
10
|
+
.option('--region <region>', 'Region: us, eu, asia', 'us')
|
|
11
|
+
.action(async (name, opts) => {
|
|
12
|
+
try {
|
|
13
|
+
const validRegions = ['us', 'eu', 'asia'];
|
|
14
|
+
if (!validRegions.includes(opts.region)) {
|
|
15
|
+
throw new Error(`Invalid region "${opts.region}". Must be one of: ${validRegions.join(', ')}`);
|
|
16
|
+
}
|
|
17
|
+
const result = await client.projects.create({
|
|
18
|
+
name,
|
|
19
|
+
region: opts.region,
|
|
20
|
+
});
|
|
21
|
+
printJson(result);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
// -- list --
|
|
28
|
+
project
|
|
29
|
+
.command('list')
|
|
30
|
+
.description('List all projects')
|
|
31
|
+
.action(async () => {
|
|
32
|
+
try {
|
|
33
|
+
const projects = await client.projects.list();
|
|
34
|
+
printTable(projects.map((p) => ({
|
|
35
|
+
name: p.name,
|
|
36
|
+
region: p.region,
|
|
37
|
+
features: Object.entries(p.features)
|
|
38
|
+
.filter(([, v]) => v)
|
|
39
|
+
.map(([k]) => k)
|
|
40
|
+
.join(', ') || 'none',
|
|
41
|
+
created: p.createdAt.toISOString(),
|
|
42
|
+
})), [
|
|
43
|
+
{ header: 'Name', key: 'name' },
|
|
44
|
+
{ header: 'Region', key: 'region' },
|
|
45
|
+
{ header: 'Features', key: 'features' },
|
|
46
|
+
{ header: 'Created', key: 'created' },
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
// -- get --
|
|
54
|
+
project
|
|
55
|
+
.command('get <name>')
|
|
56
|
+
.description('Get project details')
|
|
57
|
+
.action(async (name) => {
|
|
58
|
+
try {
|
|
59
|
+
const result = await client.projects.get(name);
|
|
60
|
+
printJson(result);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// -- configure --
|
|
67
|
+
project
|
|
68
|
+
.command('configure <name>')
|
|
69
|
+
.description('Configure project feature flags')
|
|
70
|
+
.option('--gasless', 'Enable gasless transactions')
|
|
71
|
+
.option('--no-gasless', 'Disable gasless transactions')
|
|
72
|
+
.option('--vrf', 'Enable VRF')
|
|
73
|
+
.option('--no-vrf', 'Disable VRF')
|
|
74
|
+
.option('--privacy', 'Enable privacy')
|
|
75
|
+
.option('--no-privacy', 'Disable privacy')
|
|
76
|
+
.option('--cranks', 'Enable cranks')
|
|
77
|
+
.option('--no-cranks', 'Disable cranks')
|
|
78
|
+
.option('--oracle', 'Enable oracle')
|
|
79
|
+
.option('--no-oracle', 'Disable oracle')
|
|
80
|
+
.action(async (name, opts) => {
|
|
81
|
+
try {
|
|
82
|
+
const features = {};
|
|
83
|
+
const flags = ['gasless', 'vrf', 'privacy', 'cranks', 'oracle'];
|
|
84
|
+
for (const flag of flags) {
|
|
85
|
+
if (flag in opts) {
|
|
86
|
+
features[flag] = opts[flag];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const result = await client.projects.configure(name, { features });
|
|
90
|
+
printJson(result);
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
// -- delete --
|
|
97
|
+
project
|
|
98
|
+
.command('delete <name>')
|
|
99
|
+
.description('Delete a project')
|
|
100
|
+
.action(async (name) => {
|
|
101
|
+
try {
|
|
102
|
+
await client.projects.delete(name);
|
|
103
|
+
printSuccess(`Project "${name}" deleted`);
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vrf.d.ts","sourceRoot":"","sources":["../../src/commands/vrf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkBjF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { printJson, printError } from '../utils/output.js';
|
|
2
|
+
export function registerVrfCommands(program, client) {
|
|
3
|
+
const vrfCmd = program
|
|
4
|
+
.command('vrf')
|
|
5
|
+
.description('Verifiable Random Function operations');
|
|
6
|
+
// -- request --
|
|
7
|
+
vrfCmd
|
|
8
|
+
.command('request')
|
|
9
|
+
.description('Request verifiable randomness')
|
|
10
|
+
.requiredOption('--project <name>', 'Project name')
|
|
11
|
+
.action(async (opts) => {
|
|
12
|
+
try {
|
|
13
|
+
const result = await client.vrf.request({ project: opts.project });
|
|
14
|
+
printJson(result);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=vrf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vrf.js","sourceRoot":"","sources":["../../src/commands/vrf.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,MAAqB;IACzE,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,uCAAuC,CAAC,CAAC;IAExD,gBAAgB;IAChB,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,cAAc,CAAC,kBAAkB,EAAE,cAAc,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,IAAyB,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,SAAS,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { VERSION, createClient, FileStorage } from '@magicblock-console/core';
|
|
4
|
+
import { registerProjectCommands } from './commands/project.js';
|
|
5
|
+
import { registerErCommands } from './commands/er.js';
|
|
6
|
+
import { registerVrfCommands } from './commands/vrf.js';
|
|
7
|
+
import { registerPrivacyCommands } from './commands/privacy.js';
|
|
8
|
+
import { registerCrankCommands } from './commands/crank.js';
|
|
9
|
+
import { registerOracleCommands } from './commands/oracle.js';
|
|
10
|
+
import { registerMonitorCommands } from './commands/monitor.js';
|
|
11
|
+
import { resolve } from 'node:path';
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
async function main() {
|
|
14
|
+
const program = new Command();
|
|
15
|
+
program
|
|
16
|
+
.name('mb-console')
|
|
17
|
+
.description('MagicBlock Console \u2014 manage Ephemeral Rollups on Solana')
|
|
18
|
+
.version(VERSION);
|
|
19
|
+
// Validate network from environment
|
|
20
|
+
const rawNetwork = process.env['MB_NETWORK'] ?? 'devnet';
|
|
21
|
+
if (rawNetwork !== 'devnet' && rawNetwork !== 'mainnet') {
|
|
22
|
+
console.error(`Invalid MB_NETWORK: "${rawNetwork}". Must be "devnet" or "mainnet".`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
// Create client with FileStorage for persistent local state
|
|
26
|
+
const client = createClient({
|
|
27
|
+
network: rawNetwork,
|
|
28
|
+
storage: new FileStorage(),
|
|
29
|
+
});
|
|
30
|
+
// Attempt to connect with a Solana keypair for real blockchain operations.
|
|
31
|
+
const explicitKeypair = process.env['MB_KEYPAIR_PATH'];
|
|
32
|
+
const keypairPath = explicitKeypair ?? resolve(homedir(), '.config/solana/id.json');
|
|
33
|
+
try {
|
|
34
|
+
await client.connectWithKeypair(keypairPath);
|
|
35
|
+
if (!explicitKeypair) {
|
|
36
|
+
console.error('Using default Solana keypair (~/.config/solana/id.json). Set MB_KEYPAIR_PATH to override.');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
if (explicitKeypair) {
|
|
41
|
+
// User explicitly set MB_KEYPAIR_PATH — warn about the failure
|
|
42
|
+
console.error(`Warning: could not load keypair from MB_KEYPAIR_PATH="${explicitKeypair}": ${err instanceof Error ? err.message : String(err)}. Running in simulated mode.`);
|
|
43
|
+
}
|
|
44
|
+
// Default path not found — silently fall back to simulated mode
|
|
45
|
+
}
|
|
46
|
+
// Register all command groups
|
|
47
|
+
registerProjectCommands(program, client);
|
|
48
|
+
registerErCommands(program, client);
|
|
49
|
+
registerVrfCommands(program, client);
|
|
50
|
+
registerPrivacyCommands(program, client);
|
|
51
|
+
registerCrankCommands(program, client);
|
|
52
|
+
registerOracleCommands(program, client);
|
|
53
|
+
registerMonitorCommands(program, client);
|
|
54
|
+
program.parse();
|
|
55
|
+
}
|
|
56
|
+
main();
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,8DAA8D,CAAC;SAC3E,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,oCAAoC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC;IACzD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,wBAAwB,UAAU,mCAAmC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4DAA4D;IAC5D,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,OAAO,EAAE,UAAqB;QAC9B,OAAO,EAAE,IAAI,WAAW,EAAE;KAC3B,CAAC,CAAC;IAEH,2EAA2E;IAC3E,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,eAAe,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAEpF,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CACX,2FAA2F,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,eAAe,EAAE,CAAC;YACpB,+DAA+D;YAC/D,OAAO,CAAC,KAAK,CACX,yDAAyD,eAAe,MACtE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,8BAA8B,CAC/B,CAAC;QACJ,CAAC;QACD,gEAAgE;IAClE,CAAC;IAED,8BAA8B;IAC9B,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzC,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEzC,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Print any value as pretty-printed JSON. */
|
|
2
|
+
export declare function printJson(data: unknown): void;
|
|
3
|
+
/** Print a success message and exit cleanly. */
|
|
4
|
+
export declare function printSuccess(message: string): void;
|
|
5
|
+
/** Print an error message and exit with code 1. */
|
|
6
|
+
export declare function printError(message: string): void;
|
|
7
|
+
interface Column {
|
|
8
|
+
header: string;
|
|
9
|
+
key: string;
|
|
10
|
+
width?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Print an array of objects as a fixed-width ASCII table.
|
|
14
|
+
*
|
|
15
|
+
* Column widths are auto-calculated from the header width and the widest
|
|
16
|
+
* value in each column, with a minimum of the header length + 2.
|
|
17
|
+
*/
|
|
18
|
+
export declare function printTable(rows: Record<string, unknown>[], columns: Column[]): void;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAaA,8CAA8C;AAC9C,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGhD;AAMD,UAAU,MAAM;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CA8BnF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// CLI output formatters
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/**
|
|
5
|
+
* JSON replacer that handles Date and Uint8Array serialization.
|
|
6
|
+
*/
|
|
7
|
+
function replacer(_key, value) {
|
|
8
|
+
if (value instanceof Date)
|
|
9
|
+
return value.toISOString();
|
|
10
|
+
if (value instanceof Uint8Array)
|
|
11
|
+
return Buffer.from(value).toString('hex');
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
/** Print any value as pretty-printed JSON. */
|
|
15
|
+
export function printJson(data) {
|
|
16
|
+
console.log(JSON.stringify(data, replacer, 2));
|
|
17
|
+
}
|
|
18
|
+
/** Print a success message and exit cleanly. */
|
|
19
|
+
export function printSuccess(message) {
|
|
20
|
+
console.log(`\u2713 ${message}`);
|
|
21
|
+
}
|
|
22
|
+
/** Print an error message and exit with code 1. */
|
|
23
|
+
export function printError(message) {
|
|
24
|
+
console.error(`\u2717 ${message}`);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Print an array of objects as a fixed-width ASCII table.
|
|
29
|
+
*
|
|
30
|
+
* Column widths are auto-calculated from the header width and the widest
|
|
31
|
+
* value in each column, with a minimum of the header length + 2.
|
|
32
|
+
*/
|
|
33
|
+
export function printTable(rows, columns) {
|
|
34
|
+
if (rows.length === 0) {
|
|
35
|
+
console.log('(no results)');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Resolve column widths
|
|
39
|
+
const widths = columns.map((col) => {
|
|
40
|
+
const headerLen = col.header.length;
|
|
41
|
+
const maxDataLen = rows.reduce((max, row) => {
|
|
42
|
+
const val = String(row[col.key] ?? '');
|
|
43
|
+
return Math.max(max, val.length);
|
|
44
|
+
}, 0);
|
|
45
|
+
return col.width ?? Math.max(headerLen, maxDataLen) + 2;
|
|
46
|
+
});
|
|
47
|
+
// Header
|
|
48
|
+
const header = columns.map((col, i) => col.header.padEnd(widths[i])).join(' ');
|
|
49
|
+
const separator = widths.map((w) => '-'.repeat(w)).join(' ');
|
|
50
|
+
console.log(header);
|
|
51
|
+
console.log(separator);
|
|
52
|
+
// Rows
|
|
53
|
+
for (const row of rows) {
|
|
54
|
+
const line = columns
|
|
55
|
+
.map((col, i) => String(row[col.key] ?? '').padEnd(widths[i]))
|
|
56
|
+
.join(' ');
|
|
57
|
+
console.log(line);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@magicblock-console/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for MagicBlock Ephemeral Rollups — manage projects, delegate accounts, monitor costs",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"files": ["dist"],
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"mb-console": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"lint": "tsc --noEmit"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@magicblock-console/core": "*",
|
|
18
|
+
"commander": "^13.0.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"typescript": "^5.7.0",
|
|
22
|
+
"@types/node": "^22.0.0"
|
|
23
|
+
}
|
|
24
|
+
}
|