@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.
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { ConsoleClient } from '@magicblock-console/core';
3
+ export declare function registerCrankCommands(program: Command, client: ConsoleClient): void;
4
+ //# sourceMappingURL=crank.d.ts.map
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { ConsoleClient } from '@magicblock-console/core';
3
+ export declare function registerErCommands(program: Command, client: ConsoleClient): void;
4
+ //# sourceMappingURL=er.d.ts.map
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { ConsoleClient } from '@magicblock-console/core';
3
+ export declare function registerMonitorCommands(program: Command, client: ConsoleClient): void;
4
+ //# sourceMappingURL=monitor.d.ts.map
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { ConsoleClient } from '@magicblock-console/core';
3
+ export declare function registerOracleCommands(program: Command, client: ConsoleClient): void;
4
+ //# sourceMappingURL=oracle.d.ts.map
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { ConsoleClient } from '@magicblock-console/core';
3
+ export declare function registerPrivacyCommands(program: Command, client: ConsoleClient): void;
4
+ //# sourceMappingURL=privacy.d.ts.map
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { ConsoleClient } from '@magicblock-console/core';
3
+ export declare function registerProjectCommands(program: Command, client: ConsoleClient): void;
4
+ //# sourceMappingURL=project.d.ts.map
@@ -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,4 @@
1
+ import type { Command } from 'commander';
2
+ import type { ConsoleClient } from '@magicblock-console/core';
3
+ export declare function registerVrfCommands(program: Command, client: ConsoleClient): void;
4
+ //# sourceMappingURL=vrf.d.ts.map
@@ -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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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
+ }