@paylobster/cli 4.0.2 → 4.2.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 (64) hide show
  1. package/IMPLEMENTATION_SUMMARY.md +288 -0
  2. package/NEW_FEATURES.md +228 -0
  3. package/dist/src/commands/bridge.d.ts +6 -0
  4. package/dist/src/commands/bridge.d.ts.map +1 -0
  5. package/dist/src/commands/bridge.js +273 -0
  6. package/dist/src/commands/bridge.js.map +1 -0
  7. package/dist/src/commands/cascade.d.ts +3 -0
  8. package/dist/src/commands/cascade.d.ts.map +1 -0
  9. package/dist/src/commands/cascade.js +242 -0
  10. package/dist/src/commands/cascade.js.map +1 -0
  11. package/dist/src/commands/compliance.d.ts +3 -0
  12. package/dist/src/commands/compliance.d.ts.map +1 -0
  13. package/dist/src/commands/compliance.js +121 -0
  14. package/dist/src/commands/compliance.js.map +1 -0
  15. package/dist/src/commands/credit-score.d.ts +3 -0
  16. package/dist/src/commands/credit-score.d.ts.map +1 -0
  17. package/dist/src/commands/credit-score.js +174 -0
  18. package/dist/src/commands/credit-score.js.map +1 -0
  19. package/dist/src/commands/dispute.d.ts +3 -0
  20. package/dist/src/commands/dispute.d.ts.map +1 -0
  21. package/dist/src/commands/dispute.js +241 -0
  22. package/dist/src/commands/dispute.js.map +1 -0
  23. package/dist/src/commands/intent.d.ts +3 -0
  24. package/dist/src/commands/intent.d.ts.map +1 -0
  25. package/dist/src/commands/intent.js +227 -0
  26. package/dist/src/commands/intent.js.map +1 -0
  27. package/dist/src/commands/oracle.d.ts +3 -0
  28. package/dist/src/commands/oracle.d.ts.map +1 -0
  29. package/dist/src/commands/oracle.js +114 -0
  30. package/dist/src/commands/oracle.js.map +1 -0
  31. package/dist/src/commands/portfolio.d.ts +6 -0
  32. package/dist/src/commands/portfolio.d.ts.map +1 -0
  33. package/dist/src/commands/portfolio.js +179 -0
  34. package/dist/src/commands/portfolio.js.map +1 -0
  35. package/dist/src/commands/revenue-share.d.ts +3 -0
  36. package/dist/src/commands/revenue-share.d.ts.map +1 -0
  37. package/dist/src/commands/revenue-share.js +185 -0
  38. package/dist/src/commands/revenue-share.js.map +1 -0
  39. package/dist/src/commands/stream.d.ts +3 -0
  40. package/dist/src/commands/stream.d.ts.map +1 -0
  41. package/dist/src/commands/stream.js +213 -0
  42. package/dist/src/commands/stream.js.map +1 -0
  43. package/dist/src/commands/swap.d.ts +6 -0
  44. package/dist/src/commands/swap.d.ts.map +1 -0
  45. package/dist/src/commands/swap.js +278 -0
  46. package/dist/src/commands/swap.js.map +1 -0
  47. package/dist/src/index.js +23 -1
  48. package/dist/src/index.js.map +1 -1
  49. package/dist/src/lib/types.d.ts +1 -0
  50. package/dist/src/lib/types.d.ts.map +1 -1
  51. package/package.json +1 -1
  52. package/src/commands/bridge.ts +443 -0
  53. package/src/commands/cascade.ts +280 -0
  54. package/src/commands/compliance.ts +123 -0
  55. package/src/commands/credit-score.ts +193 -0
  56. package/src/commands/dispute.ts +274 -0
  57. package/src/commands/intent.ts +261 -0
  58. package/src/commands/oracle.ts +116 -0
  59. package/src/commands/portfolio.ts +227 -0
  60. package/src/commands/revenue-share.ts +213 -0
  61. package/src/commands/stream.ts +244 -0
  62. package/src/commands/swap.ts +365 -0
  63. package/src/index.ts +23 -1
  64. package/src/lib/types.ts +1 -0
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createIntentCommand = createIntentCommand;
4
+ const commander_1 = require("commander");
5
+ const display_1 = require("../lib/display");
6
+ function createIntentCommand() {
7
+ const cmd = new commander_1.Command('intent')
8
+ .description('Manage payment intents');
9
+ // plob intent post
10
+ cmd
11
+ .command('post')
12
+ .description('Post a payment intent')
13
+ .requiredOption('--description <desc>', 'Intent description')
14
+ .requiredOption('--budget <amount>', 'Budget in USDC')
15
+ .option('--tags <tags>', 'Comma-separated tags', '')
16
+ .option('--json', 'Output as JSON')
17
+ .action(async (options) => {
18
+ try {
19
+ const budget = parseFloat(options.budget);
20
+ if (isNaN(budget) || budget <= 0) {
21
+ (0, display_1.error)('Invalid budget. Must be a positive number');
22
+ process.exit(1);
23
+ }
24
+ const tags = options.tags ? options.tags.split(',').map(t => t.trim()) : [];
25
+ (0, display_1.info)('Posting payment intent');
26
+ (0, display_1.info)(`Description: ${options.description}`);
27
+ (0, display_1.info)(`Budget: ${options.budget} USDC`);
28
+ if (tags.length > 0) {
29
+ (0, display_1.info)(`Tags: ${tags.join(', ')}`);
30
+ }
31
+ const intentId = Math.floor(Math.random() * 1000000);
32
+ const txHash = await (0, display_1.withSpinner)('Creating intent...', async () => {
33
+ // Placeholder - implement actual contract call
34
+ await new Promise(resolve => setTimeout(resolve, 2000));
35
+ return '0x' + Math.random().toString(16).substring(2, 66);
36
+ });
37
+ if ((0, display_1.outputJSON)({
38
+ intentId,
39
+ description: options.description,
40
+ budget: options.budget,
41
+ tags,
42
+ txHash,
43
+ }, options)) {
44
+ return;
45
+ }
46
+ (0, display_1.success)('Payment intent posted!');
47
+ (0, display_1.info)(`Intent ID: ${intentId}`);
48
+ (0, display_1.info)(`Transaction: ${txHash}`);
49
+ }
50
+ catch (err) {
51
+ (0, display_1.error)(`Failed to post intent: ${err}`);
52
+ process.exit(1);
53
+ }
54
+ });
55
+ // plob intent offer
56
+ cmd
57
+ .command('offer')
58
+ .description('Make an offer on an intent')
59
+ .argument('<intentId>', 'Intent ID')
60
+ .requiredOption('--amount <amount>', 'Offer amount in USDC')
61
+ .option('--message <message>', 'Offer message', '')
62
+ .option('--json', 'Output as JSON')
63
+ .action(async (intentId, options) => {
64
+ try {
65
+ const amount = parseFloat(options.amount);
66
+ if (isNaN(amount) || amount <= 0) {
67
+ (0, display_1.error)('Invalid amount. Must be a positive number');
68
+ process.exit(1);
69
+ }
70
+ const offerId = Math.floor(Math.random() * 1000000);
71
+ const txHash = await (0, display_1.withSpinner)('Submitting offer...', async () => {
72
+ // Placeholder - implement actual contract call
73
+ await new Promise(resolve => setTimeout(resolve, 1500));
74
+ return '0x' + Math.random().toString(16).substring(2, 66);
75
+ });
76
+ if ((0, display_1.outputJSON)({
77
+ offerId,
78
+ intentId,
79
+ amount: options.amount,
80
+ message: options.message,
81
+ txHash,
82
+ }, options)) {
83
+ return;
84
+ }
85
+ (0, display_1.success)('Offer submitted!');
86
+ (0, display_1.info)(`Offer ID: ${offerId}`);
87
+ (0, display_1.info)(`Intent ID: ${intentId}`);
88
+ (0, display_1.info)(`Amount: ${options.amount} USDC`);
89
+ if (options.message) {
90
+ (0, display_1.info)(`Message: ${options.message}`);
91
+ }
92
+ (0, display_1.info)(`Transaction: ${txHash}`);
93
+ }
94
+ catch (err) {
95
+ (0, display_1.error)(`Failed to submit offer: ${err}`);
96
+ process.exit(1);
97
+ }
98
+ });
99
+ // plob intent accept
100
+ cmd
101
+ .command('accept')
102
+ .description('Accept an offer on your intent')
103
+ .argument('<intentId>', 'Intent ID')
104
+ .argument('<offerId>', 'Offer ID')
105
+ .option('--json', 'Output as JSON')
106
+ .action(async (intentId, offerId, options) => {
107
+ try {
108
+ const txHash = await (0, display_1.withSpinner)('Accepting offer...', async () => {
109
+ // Placeholder - implement actual contract call
110
+ await new Promise(resolve => setTimeout(resolve, 1500));
111
+ return '0x' + Math.random().toString(16).substring(2, 66);
112
+ });
113
+ if ((0, display_1.outputJSON)({
114
+ intentId,
115
+ offerId,
116
+ txHash,
117
+ }, options)) {
118
+ return;
119
+ }
120
+ (0, display_1.success)('Offer accepted!');
121
+ (0, display_1.info)(`Intent ID: ${intentId}`);
122
+ (0, display_1.info)(`Offer ID: ${offerId}`);
123
+ (0, display_1.info)(`Transaction: ${txHash}`);
124
+ }
125
+ catch (err) {
126
+ (0, display_1.error)(`Failed to accept offer: ${err}`);
127
+ process.exit(1);
128
+ }
129
+ });
130
+ // plob intent list
131
+ cmd
132
+ .command('list')
133
+ .description('List payment intents')
134
+ .option('--json', 'Output as JSON')
135
+ .action(async (options) => {
136
+ try {
137
+ // Placeholder data
138
+ const intents = [
139
+ {
140
+ id: 1,
141
+ description: 'Code review for TypeScript project',
142
+ budget: '50 USDC',
143
+ offers: 3,
144
+ status: 'open',
145
+ },
146
+ {
147
+ id: 2,
148
+ description: 'Design new logo',
149
+ budget: '100 USDC',
150
+ offers: 5,
151
+ status: 'accepted',
152
+ },
153
+ ];
154
+ if ((0, display_1.outputJSON)(intents, options)) {
155
+ return;
156
+ }
157
+ if (intents.length === 0) {
158
+ (0, display_1.info)('No intents found');
159
+ return;
160
+ }
161
+ const table = (0, display_1.createTable)({
162
+ head: ['ID', 'Description', 'Budget', 'Offers', 'Status'],
163
+ });
164
+ for (const intent of intents) {
165
+ table.push([
166
+ intent.id,
167
+ intent.description.substring(0, 40) + (intent.description.length > 40 ? '...' : ''),
168
+ intent.budget,
169
+ intent.offers,
170
+ intent.status,
171
+ ]);
172
+ }
173
+ console.log(table.toString());
174
+ }
175
+ catch (err) {
176
+ (0, display_1.error)(`Failed to list intents: ${err}`);
177
+ process.exit(1);
178
+ }
179
+ });
180
+ // plob intent get
181
+ cmd
182
+ .command('get')
183
+ .description('Get intent details')
184
+ .argument('<intentId>', 'Intent ID')
185
+ .option('--json', 'Output as JSON')
186
+ .action(async (intentId, options) => {
187
+ try {
188
+ // Placeholder data
189
+ const intent = {
190
+ id: intentId,
191
+ creator: '0x1234567890123456789012345678901234567890',
192
+ description: 'Code review for TypeScript project',
193
+ budget: '50 USDC',
194
+ tags: ['code-review', 'typescript'],
195
+ status: 'open',
196
+ offers: [
197
+ { id: 1, provider: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb', amount: '40 USDC' },
198
+ { id: 2, provider: '0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199', amount: '45 USDC' },
199
+ ],
200
+ createdAt: new Date().toISOString(),
201
+ };
202
+ if ((0, display_1.outputJSON)(intent, options)) {
203
+ return;
204
+ }
205
+ console.log();
206
+ console.log('Intent ID: ', intent.id);
207
+ console.log('Creator: ', intent.creator);
208
+ console.log('Description: ', intent.description);
209
+ console.log('Budget: ', intent.budget);
210
+ console.log('Tags: ', intent.tags.join(', '));
211
+ console.log('Status: ', intent.status);
212
+ console.log('Created: ', intent.createdAt);
213
+ console.log();
214
+ console.log('Offers:');
215
+ intent.offers.forEach((offer, i) => {
216
+ console.log(` ${offer.id}. ${(0, display_1.formatAddress)(offer.provider)} - ${offer.amount}`);
217
+ });
218
+ console.log();
219
+ }
220
+ catch (err) {
221
+ (0, display_1.error)(`Failed to get intent: ${err}`);
222
+ process.exit(1);
223
+ }
224
+ });
225
+ return cmd;
226
+ }
227
+ //# sourceMappingURL=intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.js","sourceRoot":"","sources":["../../../src/commands/intent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createOracleCommand(): Command;
3
+ //# 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,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,mBAAmB,IAAI,OAAO,CA8G7C"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createOracleCommand = createOracleCommand;
7
+ const commander_1 = require("commander");
8
+ const display_1 = require("../lib/display");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ function createOracleCommand() {
11
+ const cmd = new commander_1.Command('oracle')
12
+ .description('Check oracle requirements and status');
13
+ // plob oracle status
14
+ cmd
15
+ .command('status')
16
+ .description('Check oracle status for an escrow')
17
+ .argument('<escrowId>', 'Escrow ID')
18
+ .option('--json', 'Output as JSON')
19
+ .action(async (escrowId, options) => {
20
+ try {
21
+ // Placeholder data
22
+ const oracleStatus = {
23
+ escrowId,
24
+ oracleRequired: true,
25
+ oracleApproved: true,
26
+ oracleProvider: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
27
+ approvalTime: new Date().toISOString(),
28
+ conditions: [
29
+ { name: 'Delivery confirmation', met: true },
30
+ { name: 'Quality threshold', met: true },
31
+ { name: 'Time limit', met: true },
32
+ ],
33
+ };
34
+ if ((0, display_1.outputJSON)(oracleStatus, options)) {
35
+ return;
36
+ }
37
+ console.log();
38
+ console.log(chalk_1.default.bold.cyan('🦞 Oracle Status'));
39
+ console.log(chalk_1.default.gray('─'.repeat(50)));
40
+ console.log('Escrow ID: ', oracleStatus.escrowId);
41
+ console.log('Oracle Required: ', (0, display_1.formatBoolean)(oracleStatus.oracleRequired));
42
+ console.log('Oracle Approved: ', (0, display_1.formatBoolean)(oracleStatus.oracleApproved));
43
+ console.log('Oracle Provider: ', oracleStatus.oracleProvider);
44
+ if (oracleStatus.approvalTime) {
45
+ console.log('Approval Time: ', oracleStatus.approvalTime);
46
+ }
47
+ console.log();
48
+ console.log(chalk_1.default.bold('Conditions:'));
49
+ oracleStatus.conditions.forEach(condition => {
50
+ console.log(` ${(0, display_1.formatBoolean)(condition.met)} ${condition.name}`);
51
+ });
52
+ console.log();
53
+ if (oracleStatus.oracleApproved) {
54
+ (0, display_1.success)('Oracle has approved this escrow');
55
+ }
56
+ else {
57
+ (0, display_1.info)('Oracle approval pending');
58
+ }
59
+ }
60
+ catch (err) {
61
+ (0, display_1.error)(`Failed to check oracle status: ${err}`);
62
+ process.exit(1);
63
+ }
64
+ });
65
+ // plob oracle required
66
+ cmd
67
+ .command('required')
68
+ .description('Check if oracle is required for a value')
69
+ .requiredOption('--value <amount>', 'Transaction value in USDC')
70
+ .option('--json', 'Output as JSON')
71
+ .action(async (options) => {
72
+ try {
73
+ const value = parseFloat(options.value);
74
+ if (isNaN(value) || value < 0) {
75
+ (0, display_1.error)('Invalid value. Must be a non-negative number');
76
+ process.exit(1);
77
+ }
78
+ // Placeholder logic - oracle required for transactions > 1000 USDC
79
+ const threshold = 1000;
80
+ const required = value > threshold;
81
+ const result = {
82
+ value: options.value,
83
+ threshold: `${threshold} USDC`,
84
+ oracleRequired: required,
85
+ reason: required
86
+ ? 'Value exceeds threshold for automated release'
87
+ : 'Value is below oracle requirement threshold',
88
+ };
89
+ if ((0, display_1.outputJSON)(result, options)) {
90
+ return;
91
+ }
92
+ console.log();
93
+ console.log(chalk_1.default.bold.cyan('🦞 Oracle Requirement Check'));
94
+ console.log(chalk_1.default.gray('─'.repeat(50)));
95
+ console.log('Transaction Value: ', result.value, 'USDC');
96
+ console.log('Oracle Threshold: ', result.threshold);
97
+ console.log('Oracle Required: ', (0, display_1.formatBoolean)(result.oracleRequired));
98
+ console.log('Reason: ', result.reason);
99
+ console.log();
100
+ if (required) {
101
+ (0, display_1.info)('An oracle will be required to approve this transaction');
102
+ }
103
+ else {
104
+ (0, display_1.success)('No oracle required for this transaction value');
105
+ }
106
+ }
107
+ catch (err) {
108
+ (0, display_1.error)(`Failed to check oracle requirement: ${err}`);
109
+ process.exit(1);
110
+ }
111
+ });
112
+ return cmd;
113
+ }
114
+ //# sourceMappingURL=oracle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../../../src/commands/oracle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Create portfolio command
4
+ */
5
+ export declare function createPortfolioCommand(): Command;
6
+ //# sourceMappingURL=portfolio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../../../src/commands/portfolio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwIpC;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAuFhD"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createPortfolioCommand = createPortfolioCommand;
7
+ const commander_1 = require("commander");
8
+ const wallet_1 = require("../lib/wallet");
9
+ const contracts_1 = require("../lib/contracts");
10
+ const config_1 = require("../lib/config");
11
+ const display_1 = require("../lib/display");
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ const BASE_TOKENS = [
14
+ { symbol: 'ETH', address: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', decimals: 18, isNative: true },
15
+ { symbol: 'USDC', address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', decimals: 6 },
16
+ { symbol: 'WETH', address: '0x4200000000000000000000000000000000000006', decimals: 18 },
17
+ { symbol: 'DAI', address: '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb', decimals: 18 },
18
+ { symbol: 'USDbC', address: '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA', decimals: 6 },
19
+ ];
20
+ const ERC20_ABI = [
21
+ {
22
+ inputs: [{ name: 'account', type: 'address' }],
23
+ name: 'balanceOf',
24
+ outputs: [{ name: '', type: 'uint256' }],
25
+ stateMutability: 'view',
26
+ type: 'function',
27
+ },
28
+ ];
29
+ /**
30
+ * Format token amount with decimals
31
+ */
32
+ function formatTokenAmount(amount, decimals) {
33
+ const num = amount;
34
+ const divisor = BigInt(10 ** decimals);
35
+ const whole = num / divisor;
36
+ const fraction = num % divisor;
37
+ if (fraction === 0n) {
38
+ return whole.toString();
39
+ }
40
+ const fractionStr = fraction.toString().padStart(decimals, '0');
41
+ const trimmed = fractionStr.replace(/0+$/, '');
42
+ const limited = trimmed.slice(0, 6); // Limit to 6 decimal places for display
43
+ return `${whole}.${limited}`;
44
+ }
45
+ /**
46
+ * Get token price in USD (mock - in production, use price oracle)
47
+ */
48
+ async function getTokenPriceUSD(symbol) {
49
+ // Mock prices - in production, integrate with price oracle
50
+ const prices = {
51
+ ETH: 3000,
52
+ WETH: 3000,
53
+ USDC: 1,
54
+ DAI: 1,
55
+ USDbC: 1,
56
+ };
57
+ return prices[symbol] || 0;
58
+ }
59
+ /**
60
+ * Get token balance
61
+ */
62
+ async function getTokenBalance(address, token) {
63
+ const config = (0, config_1.loadConfig)();
64
+ const publicClient = (0, contracts_1.getPublicClient)(config.network);
65
+ if (token.isNative) {
66
+ // Get native ETH balance
67
+ return await publicClient.getBalance({ address });
68
+ }
69
+ // Get ERC20 token balance
70
+ try {
71
+ const balance = await publicClient.readContract({
72
+ address: token.address,
73
+ abi: ERC20_ABI,
74
+ functionName: 'balanceOf',
75
+ args: [address],
76
+ });
77
+ return balance;
78
+ }
79
+ catch (err) {
80
+ // If token doesn't exist or error, return 0
81
+ return 0n;
82
+ }
83
+ }
84
+ /**
85
+ * Get all token balances
86
+ */
87
+ async function getPortfolioBalances(address, tokens) {
88
+ const balances = await Promise.all(tokens.map(async (token) => {
89
+ const balanceRaw = await getTokenBalance(address, token);
90
+ const balance = formatTokenAmount(balanceRaw, token.decimals);
91
+ const price = await getTokenPriceUSD(token.symbol);
92
+ const valueUSD = parseFloat(balance) * price;
93
+ return {
94
+ symbol: token.symbol,
95
+ balance,
96
+ balanceRaw,
97
+ valueUSD,
98
+ };
99
+ }));
100
+ // Filter out zero balances and sort by USD value
101
+ return balances
102
+ .filter((b) => b.balanceRaw > 0n)
103
+ .sort((a, b) => b.valueUSD - a.valueUSD);
104
+ }
105
+ /**
106
+ * Create portfolio command
107
+ */
108
+ function createPortfolioCommand() {
109
+ const cmd = new commander_1.Command('portfolio')
110
+ .description('View token portfolio and balances')
111
+ .option('--chain <chain>', 'Filter by chain (currently only Base supported)', 'base')
112
+ .option('--json', 'Output as JSON')
113
+ .action(async (options) => {
114
+ try {
115
+ const address = (0, wallet_1.getWalletAddress)();
116
+ if (options.chain.toLowerCase() !== 'base') {
117
+ (0, display_1.error)('Currently only Base chain is supported');
118
+ process.exit(1);
119
+ }
120
+ const balances = await (0, display_1.withSpinner)('Fetching portfolio balances...', async () => getPortfolioBalances(address, BASE_TOKENS));
121
+ if (balances.length === 0) {
122
+ if ((0, display_1.outputJSON)({ balances: [], totalUSD: 0 }, options)) {
123
+ return;
124
+ }
125
+ console.log();
126
+ console.log(chalk_1.default.yellow('No token balances found'));
127
+ console.log();
128
+ return;
129
+ }
130
+ const totalUSD = balances.reduce((sum, b) => sum + b.valueUSD, 0);
131
+ if ((0, display_1.outputJSON)({
132
+ address,
133
+ chain: 'Base',
134
+ balances: balances.map(b => ({
135
+ symbol: b.symbol,
136
+ balance: b.balance,
137
+ valueUSD: b.valueUSD.toFixed(2),
138
+ })),
139
+ totalUSD: totalUSD.toFixed(2),
140
+ }, options)) {
141
+ return;
142
+ }
143
+ // Pretty output
144
+ console.log();
145
+ console.log(chalk_1.default.bold.cyan('💼 Portfolio'));
146
+ console.log(chalk_1.default.gray('─'.repeat(60)));
147
+ console.log(chalk_1.default.gray('Address: ') + chalk_1.default.white(address));
148
+ console.log(chalk_1.default.gray('Chain: ') + chalk_1.default.white('Base'));
149
+ console.log(chalk_1.default.gray('─'.repeat(60)));
150
+ console.log();
151
+ // Create table
152
+ const table = (0, display_1.createTable)({
153
+ head: ['Token', 'Balance', 'Value (USD)'],
154
+ colAligns: ['left', 'right', 'right'],
155
+ });
156
+ for (const token of balances) {
157
+ table.push([
158
+ chalk_1.default.white.bold(token.symbol),
159
+ chalk_1.default.white((0, display_1.formatNumber)(token.balance)),
160
+ chalk_1.default.green('$' + (0, display_1.formatNumber)(token.valueUSD.toFixed(2))),
161
+ ]);
162
+ }
163
+ console.log(table.toString());
164
+ console.log();
165
+ console.log(chalk_1.default.gray('─'.repeat(60)));
166
+ console.log(chalk_1.default.white.bold('Total Portfolio Value:'), chalk_1.default.green.bold('$' + (0, display_1.formatNumber)(totalUSD.toFixed(2))));
167
+ console.log(chalk_1.default.gray('─'.repeat(60)));
168
+ console.log();
169
+ console.log(chalk_1.default.dim('Note: Prices are approximate and for display only.'));
170
+ console.log();
171
+ }
172
+ catch (err) {
173
+ (0, display_1.error)(`Failed to fetch portfolio: ${err}`);
174
+ process.exit(1);
175
+ }
176
+ });
177
+ return cmd;
178
+ }
179
+ //# sourceMappingURL=portfolio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../../src/commands/portfolio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createRevenueShareCommand(): Command;
3
+ //# sourceMappingURL=revenue-share.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revenue-share.d.ts","sourceRoot":"","sources":["../../../src/commands/revenue-share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,yBAAyB,IAAI,OAAO,CAgNnD"}