paytaca-cli 0.6.2 → 0.8.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 (160) hide show
  1. package/README.md +183 -34
  2. package/dist/ai/autoRefill.d.ts +85 -0
  3. package/dist/ai/autoRefill.d.ts.map +1 -0
  4. package/dist/ai/autoRefill.js +266 -0
  5. package/dist/ai/autoRefill.js.map +1 -0
  6. package/dist/ai/client.d.ts +73 -0
  7. package/dist/ai/client.d.ts.map +1 -0
  8. package/dist/ai/client.js +90 -0
  9. package/dist/ai/client.js.map +1 -0
  10. package/dist/ai/config.d.ts +8 -0
  11. package/dist/ai/config.d.ts.map +1 -0
  12. package/dist/ai/config.js +17 -0
  13. package/dist/ai/config.js.map +1 -0
  14. package/dist/ai/configure.d.ts +61 -0
  15. package/dist/ai/configure.d.ts.map +1 -0
  16. package/dist/ai/configure.js +452 -0
  17. package/dist/ai/configure.js.map +1 -0
  18. package/dist/ai/credits.d.ts +27 -0
  19. package/dist/ai/credits.d.ts.map +1 -0
  20. package/dist/ai/credits.js +108 -0
  21. package/dist/ai/credits.js.map +1 -0
  22. package/dist/ai/images.d.ts +128 -0
  23. package/dist/ai/images.d.ts.map +1 -0
  24. package/dist/ai/images.js +399 -0
  25. package/dist/ai/images.js.map +1 -0
  26. package/dist/ai/models.d.ts +13 -0
  27. package/dist/ai/models.d.ts.map +1 -0
  28. package/dist/ai/models.js +49 -0
  29. package/dist/ai/models.js.map +1 -0
  30. package/dist/ai/oauth.d.ts +45 -0
  31. package/dist/ai/oauth.d.ts.map +1 -0
  32. package/dist/ai/oauth.js +137 -0
  33. package/dist/ai/oauth.js.map +1 -0
  34. package/dist/ai/purchase.d.ts +30 -0
  35. package/dist/ai/purchase.d.ts.map +1 -0
  36. package/dist/ai/purchase.js +456 -0
  37. package/dist/ai/purchase.js.map +1 -0
  38. package/dist/commands/address.d.ts.map +1 -1
  39. package/dist/commands/address.js +86 -47
  40. package/dist/commands/address.js.map +1 -1
  41. package/dist/commands/ai.d.ts +9 -0
  42. package/dist/commands/ai.d.ts.map +1 -0
  43. package/dist/commands/ai.js +951 -0
  44. package/dist/commands/ai.js.map +1 -0
  45. package/dist/commands/balance.d.ts.map +1 -1
  46. package/dist/commands/balance.js +68 -129
  47. package/dist/commands/balance.js.map +1 -1
  48. package/dist/commands/history.d.ts.map +1 -1
  49. package/dist/commands/history.js +38 -78
  50. package/dist/commands/history.js.map +1 -1
  51. package/dist/commands/mcp.d.ts +14 -0
  52. package/dist/commands/mcp.d.ts.map +1 -0
  53. package/dist/commands/mcp.js +68 -0
  54. package/dist/commands/mcp.js.map +1 -0
  55. package/dist/commands/pay.js +1 -1
  56. package/dist/commands/pay.js.map +1 -1
  57. package/dist/commands/receive.d.ts +1 -8
  58. package/dist/commands/receive.d.ts.map +1 -1
  59. package/dist/commands/receive.js +51 -124
  60. package/dist/commands/receive.js.map +1 -1
  61. package/dist/commands/send.d.ts +0 -10
  62. package/dist/commands/send.d.ts.map +1 -1
  63. package/dist/commands/send.js +40 -50
  64. package/dist/commands/send.js.map +1 -1
  65. package/dist/commands/swap.js +1 -1
  66. package/dist/commands/swap.js.map +1 -1
  67. package/dist/commands/token.d.ts +1 -9
  68. package/dist/commands/token.d.ts.map +1 -1
  69. package/dist/commands/token.js +192 -289
  70. package/dist/commands/token.js.map +1 -1
  71. package/dist/commands/update.d.ts +32 -0
  72. package/dist/commands/update.d.ts.map +1 -0
  73. package/dist/commands/update.js +200 -0
  74. package/dist/commands/update.js.map +1 -0
  75. package/dist/commands/wallet.js +1 -1
  76. package/dist/commands/wallet.js.map +1 -1
  77. package/dist/commands/web.d.ts +3 -0
  78. package/dist/commands/web.d.ts.map +1 -0
  79. package/dist/commands/web.js +71 -0
  80. package/dist/commands/web.js.map +1 -0
  81. package/dist/core/context.d.ts +30 -0
  82. package/dist/core/context.d.ts.map +1 -0
  83. package/dist/core/context.js +45 -0
  84. package/dist/core/context.js.map +1 -0
  85. package/dist/core/wallet.d.ts +130 -0
  86. package/dist/core/wallet.d.ts.map +1 -0
  87. package/dist/core/wallet.js +276 -0
  88. package/dist/core/wallet.js.map +1 -0
  89. package/dist/index.js +8 -0
  90. package/dist/index.js.map +1 -1
  91. package/dist/mcp/server.d.ts +8 -0
  92. package/dist/mcp/server.d.ts.map +1 -0
  93. package/dist/mcp/server.js +52 -0
  94. package/dist/mcp/server.js.map +1 -0
  95. package/dist/mcp/tools.d.ts +7 -0
  96. package/dist/mcp/tools.d.ts.map +1 -0
  97. package/dist/mcp/tools.js +752 -0
  98. package/dist/mcp/tools.js.map +1 -0
  99. package/dist/utils/format.d.ts +23 -0
  100. package/dist/utils/format.d.ts.map +1 -0
  101. package/dist/utils/format.js +62 -0
  102. package/dist/utils/format.js.map +1 -0
  103. package/dist/utils/x402.js +1 -1
  104. package/dist/utils/x402.js.map +1 -1
  105. package/dist/wallet/cauldron/swap.d.ts +15 -0
  106. package/dist/wallet/cauldron/swap.d.ts.map +1 -1
  107. package/dist/wallet/cauldron/swap.js +31 -0
  108. package/dist/wallet/cauldron/swap.js.map +1 -1
  109. package/dist/wallet/index.d.ts +29 -1
  110. package/dist/wallet/index.d.ts.map +1 -1
  111. package/dist/wallet/index.js +92 -8
  112. package/dist/wallet/index.js.map +1 -1
  113. package/dist/wallet/keys.d.ts.map +1 -1
  114. package/dist/wallet/keys.js +2 -0
  115. package/dist/wallet/keys.js.map +1 -1
  116. package/dist/web/assets.d.ts +3 -0
  117. package/dist/web/assets.d.ts.map +1 -0
  118. package/dist/web/assets.js +3 -0
  119. package/dist/web/assets.js.map +1 -0
  120. package/dist/web/page.d.ts +2 -0
  121. package/dist/web/page.d.ts.map +1 -0
  122. package/dist/web/page.js +637 -0
  123. package/dist/web/page.js.map +1 -0
  124. package/dist/web/server.d.ts +79 -0
  125. package/dist/web/server.d.ts.map +1 -0
  126. package/dist/web/server.js +665 -0
  127. package/dist/web/server.js.map +1 -0
  128. package/package.json +8 -3
  129. package/dist/commands/wallet.test.d.ts +0 -2
  130. package/dist/commands/wallet.test.d.ts.map +0 -1
  131. package/dist/commands/wallet.test.js +0 -68
  132. package/dist/commands/wallet.test.js.map +0 -1
  133. package/dist/nostr/chat.test.d.ts +0 -2
  134. package/dist/nostr/chat.test.d.ts.map +0 -1
  135. package/dist/nostr/chat.test.js +0 -121
  136. package/dist/nostr/chat.test.js.map +0 -1
  137. package/dist/nostr/store.test.d.ts +0 -2
  138. package/dist/nostr/store.test.d.ts.map +0 -1
  139. package/dist/nostr/store.test.js +0 -456
  140. package/dist/nostr/store.test.js.map +0 -1
  141. package/dist/utils/prices.test.d.ts +0 -5
  142. package/dist/utils/prices.test.d.ts.map +0 -1
  143. package/dist/utils/prices.test.js +0 -62
  144. package/dist/utils/prices.test.js.map +0 -1
  145. package/dist/utils/x402.test.d.ts +0 -2
  146. package/dist/utils/x402.test.d.ts.map +0 -1
  147. package/dist/utils/x402.test.js +0 -216
  148. package/dist/utils/x402.test.js.map +0 -1
  149. package/dist/wallet/cauldron/pools.test.d.ts +0 -3
  150. package/dist/wallet/cauldron/pools.test.d.ts.map +0 -1
  151. package/dist/wallet/cauldron/pools.test.js +0 -149
  152. package/dist/wallet/cauldron/pools.test.js.map +0 -1
  153. package/dist/wallet/cauldron/swap.test.d.ts +0 -2
  154. package/dist/wallet/cauldron/swap.test.d.ts.map +0 -1
  155. package/dist/wallet/cauldron/swap.test.js +0 -179
  156. package/dist/wallet/cauldron/swap.test.js.map +0 -1
  157. package/skills/README.md +0 -68
  158. package/skills/paytaca-send/SKILL.md +0 -159
  159. package/skills/paytaca-wallet/SKILL.md +0 -164
  160. package/skills/paytaca-x402/SKILL.md +0 -130
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Core wallet operations returning typed, render-agnostic results.
3
+ *
4
+ * Both the CLI commands and the MCP tools call these functions.
5
+ * No chalk, no process.exit(), no console output.
6
+ */
7
+ import { resolveNetwork, type Network } from './context.js';
8
+ import type { NftUtxo } from '../wallet/bch.js';
9
+ export interface BalanceView {
10
+ network: Network;
11
+ walletHash: string;
12
+ balanceBch: number;
13
+ balanceSats: number;
14
+ spendableBch: number;
15
+ spendableSats: number;
16
+ usdPerBch: number | null;
17
+ usd: number | null;
18
+ }
19
+ export interface TokenBalanceView {
20
+ category: string;
21
+ name: string;
22
+ symbol: string;
23
+ decimals: number;
24
+ rawBalance: number;
25
+ displayBalance: string;
26
+ usdPerToken: number | null;
27
+ usd: number | null;
28
+ }
29
+ export interface TokenListResult {
30
+ network: Network;
31
+ walletHash: string;
32
+ tokens: TokenBalanceView[];
33
+ }
34
+ export interface TokenDetailResult {
35
+ network: Network;
36
+ walletHash: string;
37
+ category: string;
38
+ name: string;
39
+ symbol: string;
40
+ decimals: number;
41
+ rawBalance: number;
42
+ displayBalance: string;
43
+ usdPerToken: number | null;
44
+ usd: number | null;
45
+ nfts: NftUtxo[];
46
+ }
47
+ export interface HistoryRecord {
48
+ record_type: 'outgoing' | 'incoming';
49
+ txid: string;
50
+ amount: number;
51
+ tx_fee: number;
52
+ senders: any[][];
53
+ recipients: any[][];
54
+ date_created: string;
55
+ tx_timestamp: string;
56
+ usd_price: number;
57
+ market_prices: Record<string, number>;
58
+ attributes: any;
59
+ }
60
+ export interface HistoryView {
61
+ network: Network;
62
+ tokenId: string;
63
+ headerLabel: string;
64
+ records: HistoryRecord[];
65
+ page: number;
66
+ numPages: number;
67
+ hasNext: boolean;
68
+ }
69
+ export interface ReceiveAddressView {
70
+ network: Network;
71
+ address: string;
72
+ index: number;
73
+ token: boolean;
74
+ category: string;
75
+ tokenName: string;
76
+ decimals: number;
77
+ amount: number | undefined;
78
+ paymentUri: string;
79
+ qrContent: string;
80
+ subscribed: boolean;
81
+ }
82
+ export interface WalletInfoView {
83
+ network: Network;
84
+ walletHash: string;
85
+ address: string;
86
+ balance: BalanceView;
87
+ }
88
+ export interface SendOutcome {
89
+ network: Network;
90
+ success: boolean;
91
+ txid?: string;
92
+ explorerUrl?: string;
93
+ error?: string;
94
+ lackingSats?: string;
95
+ }
96
+ export declare function getBalanceView(isChipnet?: boolean): Promise<BalanceView>;
97
+ export declare function getTokenBalances(isChipnet?: boolean, opts?: {
98
+ includeZero?: boolean;
99
+ }): Promise<TokenListResult>;
100
+ export declare function getTokenDetail(category: string, isChipnet?: boolean): Promise<TokenDetailResult>;
101
+ export declare function getHistoryView(opts?: {
102
+ page?: number;
103
+ recordType?: string;
104
+ tokenId?: string;
105
+ }, isChipnet?: boolean): Promise<HistoryView>;
106
+ export declare function buildBchPaymentUri(address: string, amount?: number): string;
107
+ export declare function buildTokenPaymentUri(address: string, category: string, baseUnitAmount?: number): string;
108
+ export declare function getReceiveAddressView(opts?: {
109
+ index?: number;
110
+ token?: boolean;
111
+ category?: string;
112
+ amount?: number;
113
+ subscribe?: boolean;
114
+ }, isChipnet?: boolean): Promise<ReceiveAddressView>;
115
+ export declare function getWalletInfoView(isChipnet?: boolean): Promise<WalletInfoView>;
116
+ export declare function isValidBchAddress(address: string, isChipnet: boolean): boolean;
117
+ export declare function isTokenAddress(address: string): boolean;
118
+ export declare function sendBch(opts: {
119
+ address: string;
120
+ amountBch: number;
121
+ changeAddress?: string;
122
+ }, isChipnet?: boolean): Promise<SendOutcome>;
123
+ export declare function sendToken(opts: {
124
+ category: string;
125
+ amount: bigint;
126
+ address: string;
127
+ changeAddress?: string;
128
+ }, isChipnet?: boolean): Promise<SendOutcome>;
129
+ export { resolveNetwork };
130
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/core/wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Core wallet operations returning typed, render-agnostic results.
3
+ *
4
+ * Both the CLI commands and the MCP tools call these functions.
5
+ * No chalk, no process.exit(), no console output.
6
+ */
7
+ import { Address } from 'watchtower-cash-js';
8
+ import { requireWallet, resolveNetwork } from './context.js';
9
+ import { bchToSats, explorerTxUrl, formatTokenAmount } from '../utils/format.js';
10
+ import { fetchAssetPrices, getBchUsdPrice, getUsdPerToken, tokenAmountToUsd, } from '../utils/prices.js';
11
+ async function fetchTokenPriceMap(categories, isChipnet) {
12
+ const prices = new Map();
13
+ if (categories.length === 0)
14
+ return prices;
15
+ try {
16
+ const priceData = await fetchAssetPrices(categories.map((c) => `ct/${c}`), ['USD'], isChipnet);
17
+ for (const p of priceData) {
18
+ if (String(p.currency || '').toLowerCase() !== 'usd')
19
+ continue;
20
+ const catMatch = String(p.asset || '').match(/^ct\/([a-fA-F0-9]+)$/);
21
+ if (!catMatch)
22
+ continue;
23
+ const raw = parseFloat(p.price_value);
24
+ if (!isFinite(raw) || raw === 0)
25
+ continue;
26
+ prices.set(catMatch[1], 1 / raw);
27
+ }
28
+ }
29
+ catch {
30
+ // Pricing unavailable — proceed without USD values
31
+ }
32
+ return prices;
33
+ }
34
+ export async function getBalanceView(isChipnet = false) {
35
+ const ctx = requireWallet(isChipnet);
36
+ const result = await ctx.bch.getBalance();
37
+ let usdPerBch = null;
38
+ try {
39
+ usdPerBch = await getBchUsdPrice(isChipnet);
40
+ }
41
+ catch {
42
+ // USD price unavailable
43
+ }
44
+ return {
45
+ network: ctx.network,
46
+ walletHash: ctx.walletHash,
47
+ balanceBch: result.balance,
48
+ balanceSats: bchToSats(result.balance),
49
+ spendableBch: result.spendable,
50
+ spendableSats: bchToSats(result.spendable),
51
+ usdPerBch,
52
+ usd: usdPerBch !== null ? result.balance * usdPerBch : null,
53
+ };
54
+ }
55
+ export async function getTokenBalances(isChipnet = false, opts = {}) {
56
+ const ctx = requireWallet(isChipnet);
57
+ const all = await ctx.bch.getFungibleTokens();
58
+ const tokens = opts.includeZero ? all : all.filter((t) => t.balance > 0);
59
+ const priceMap = await fetchTokenPriceMap(tokens.map((t) => t.category), isChipnet);
60
+ return {
61
+ network: ctx.network,
62
+ walletHash: ctx.walletHash,
63
+ tokens: tokens.map((t) => {
64
+ const usdPerToken = priceMap.get(t.category) ?? null;
65
+ return {
66
+ category: t.category,
67
+ name: t.name,
68
+ symbol: t.symbol,
69
+ decimals: t.decimals,
70
+ rawBalance: t.balance,
71
+ displayBalance: formatTokenAmount(t.balance, t.decimals),
72
+ usdPerToken,
73
+ usd: usdPerToken !== null
74
+ ? tokenAmountToUsd(t.balance, t.decimals, usdPerToken)
75
+ : null,
76
+ };
77
+ }),
78
+ };
79
+ }
80
+ export async function getTokenDetail(category, isChipnet = false) {
81
+ const ctx = requireWallet(isChipnet);
82
+ let info = null;
83
+ try {
84
+ info = await ctx.bch.getTokenInfo(category);
85
+ }
86
+ catch {
87
+ // metadata unavailable
88
+ }
89
+ let usdPerToken = null;
90
+ try {
91
+ usdPerToken = await getUsdPerToken(category, isChipnet);
92
+ }
93
+ catch {
94
+ // pricing unavailable
95
+ }
96
+ let rawBalance = 0;
97
+ try {
98
+ const bal = await ctx.bch.getTokenBalance(category);
99
+ rawBalance = bal.balance;
100
+ }
101
+ catch {
102
+ // balance unavailable
103
+ }
104
+ let nfts = [];
105
+ try {
106
+ nfts = await ctx.bch.getNftUtxos(category);
107
+ }
108
+ catch {
109
+ // NFT fetch non-critical
110
+ }
111
+ const decimals = info?.decimals ?? 0;
112
+ return {
113
+ network: ctx.network,
114
+ walletHash: ctx.walletHash,
115
+ category,
116
+ name: info?.name ?? 'Unknown Token',
117
+ symbol: info?.symbol ?? '',
118
+ decimals,
119
+ rawBalance,
120
+ displayBalance: formatTokenAmount(rawBalance, decimals),
121
+ usdPerToken,
122
+ usd: usdPerToken !== null
123
+ ? tokenAmountToUsd(rawBalance, decimals, usdPerToken)
124
+ : null,
125
+ nfts,
126
+ };
127
+ }
128
+ export async function getHistoryView(opts = {}, isChipnet = false) {
129
+ const ctx = requireWallet(isChipnet);
130
+ const tokenId = opts.tokenId ?? '';
131
+ const page = opts.page ?? 1;
132
+ let headerLabel = 'Transaction History';
133
+ if (tokenId) {
134
+ headerLabel = 'Token Transaction History';
135
+ try {
136
+ const info = await ctx.bch.getTokenInfo(tokenId);
137
+ if (info?.symbol)
138
+ headerLabel = `${info.symbol} Transaction History`;
139
+ else if (info?.name && info.name !== 'Unknown Token')
140
+ headerLabel = `${info.name} Transaction History`;
141
+ }
142
+ catch {
143
+ // keep generic label
144
+ }
145
+ }
146
+ const result = await ctx.bch.getHistory({
147
+ page,
148
+ recordType: opts.recordType,
149
+ tokenId,
150
+ });
151
+ return {
152
+ network: ctx.network,
153
+ tokenId,
154
+ headerLabel,
155
+ records: result.history ?? [],
156
+ page: parseInt(result.page, 10) || page,
157
+ numPages: result.num_pages,
158
+ hasNext: result.has_next,
159
+ };
160
+ }
161
+ export function buildBchPaymentUri(address, amount) {
162
+ const bare = address.replace(/^(bitcoincash|bchtest):/, '');
163
+ let uri = `bitcoincash:${bare}`;
164
+ if (amount !== undefined && amount > 0)
165
+ uri += `?amount=${amount}`;
166
+ return uri;
167
+ }
168
+ export function buildTokenPaymentUri(address, category, baseUnitAmount) {
169
+ const bare = address.replace(/^(bitcoincash|bchtest):/, '');
170
+ let uri = `bitcoincash:${bare}?c=${category}`;
171
+ if (baseUnitAmount !== undefined && baseUnitAmount > 0) {
172
+ uri += `&f=${Math.round(baseUnitAmount)}`;
173
+ }
174
+ return uri;
175
+ }
176
+ export async function getReceiveAddressView(opts = {}, isChipnet = false) {
177
+ const ctx = requireWallet(isChipnet);
178
+ const index = opts.index ?? 0;
179
+ const isToken = Boolean(opts.token);
180
+ const category = opts.category ?? '';
181
+ const address = isToken
182
+ ? ctx.bch.getTokenAddressSetAt(index).receiving
183
+ : ctx.bch.getAddressSetAt(index).receiving;
184
+ let subscribed = false;
185
+ if (opts.subscribe !== false) {
186
+ try {
187
+ subscribed = Boolean(await ctx.bch.getNewAddressSet(index));
188
+ }
189
+ catch {
190
+ // non-critical
191
+ }
192
+ }
193
+ let tokenName = '';
194
+ let decimals = 0;
195
+ if (category) {
196
+ try {
197
+ const info = await ctx.bch.getTokenInfo(category);
198
+ if (info?.symbol)
199
+ tokenName = info.symbol;
200
+ else if (info?.name && info.name !== 'Unknown Token')
201
+ tokenName = info.name;
202
+ decimals = info?.decimals ?? 0;
203
+ }
204
+ catch {
205
+ // token metadata unavailable
206
+ }
207
+ }
208
+ let paymentUri = '';
209
+ if (category) {
210
+ const baseUnitAmount = opts.amount !== undefined ? opts.amount * 10 ** decimals : undefined;
211
+ paymentUri = buildTokenPaymentUri(address, category, baseUnitAmount);
212
+ }
213
+ else if (opts.amount !== undefined) {
214
+ paymentUri = buildBchPaymentUri(address, opts.amount);
215
+ }
216
+ return {
217
+ network: ctx.network,
218
+ address,
219
+ index,
220
+ token: isToken,
221
+ category,
222
+ tokenName,
223
+ decimals,
224
+ amount: opts.amount,
225
+ paymentUri,
226
+ qrContent: paymentUri || address,
227
+ subscribed,
228
+ };
229
+ }
230
+ export async function getWalletInfoView(isChipnet = false) {
231
+ const ctx = requireWallet(isChipnet);
232
+ const address = ctx.bch.getAddressSetAt(0).receiving;
233
+ const balance = await getBalanceView(isChipnet);
234
+ return {
235
+ network: ctx.network,
236
+ walletHash: ctx.walletHash,
237
+ address,
238
+ balance,
239
+ };
240
+ }
241
+ export function isValidBchAddress(address, isChipnet) {
242
+ const validator = new Address(address);
243
+ return Boolean(validator.isValidBCHAddress(isChipnet) ||
244
+ validator.isP2SH?.() ||
245
+ validator.isTokenAddress?.());
246
+ }
247
+ export function isTokenAddress(address) {
248
+ return Boolean(new Address(address).isTokenAddress?.());
249
+ }
250
+ export async function sendBch(opts, isChipnet = false) {
251
+ const ctx = requireWallet(isChipnet);
252
+ const changeAddress = opts.changeAddress ?? ctx.bch.getAddressSetAt(0).change;
253
+ const result = await ctx.bch.sendBch(opts.amountBch, opts.address, changeAddress);
254
+ return toSendOutcome(result, ctx.network, isChipnet);
255
+ }
256
+ export async function sendToken(opts, isChipnet = false) {
257
+ const ctx = requireWallet(isChipnet);
258
+ const changeAddress = opts.changeAddress ?? ctx.bch.getTokenAddressSetAt(0).change;
259
+ const result = await ctx.bch.sendToken(opts.category, opts.amount, opts.address, changeAddress);
260
+ return toSendOutcome(result, ctx.network, isChipnet);
261
+ }
262
+ function toSendOutcome(result, network, isChipnet) {
263
+ const outcome = {
264
+ network,
265
+ success: result.success,
266
+ error: result.error,
267
+ lackingSats: result.lackingSats?.toString(),
268
+ };
269
+ if (result.txid) {
270
+ outcome.txid = result.txid;
271
+ outcome.explorerUrl = explorerTxUrl(result.txid, isChipnet);
272
+ }
273
+ return outcome;
274
+ }
275
+ export { resolveNetwork };
276
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/core/wallet.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAA;AAE1E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,MAAM,oBAAoB,CAAA;AAkG3B,KAAK,UAAU,kBAAkB,CAC/B,UAAoB,EACpB,SAAkB;IAElB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAA;IAC1C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,gBAAgB,CACtC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAChC,CAAC,KAAK,CAAC,EACP,SAAS,CACV,CAAA;QACD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;gBAAE,SAAQ;YAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;YACpE,IAAI,CAAC,QAAQ;gBAAE,SAAQ;YACvB,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;YACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;gBAAE,SAAQ;YACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAAqB,KAAK;IAE1B,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;IAEzC,IAAI,SAAS,GAAkB,IAAI,CAAA;IACnC,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,MAAM,CAAC,OAAO;QAC1B,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;QACtC,YAAY,EAAE,MAAM,CAAC,SAAS;QAC9B,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;QAC1C,SAAS;QACT,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI;KAC5D,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAAqB,KAAK,EAC1B,OAAkC,EAAE;IAEpC,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAA;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;IAExE,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACvC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAC7B,SAAS,CACV,CAAA;IAED,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;YACpD,OAAO;gBACL,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,UAAU,EAAE,CAAC,CAAC,OAAO;gBACrB,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC;gBACxD,WAAW;gBACX,GAAG,EACD,WAAW,KAAK,IAAI;oBAClB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC;oBACtD,CAAC,CAAC,IAAI;aACX,CAAA;QACH,CAAC,CAAC;KACH,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,YAAqB,KAAK;IAE1B,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IAEpC,IAAI,IAAI,GAAyB,IAAI,CAAA;IACrC,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;IACzB,CAAC;IAED,IAAI,WAAW,GAAkB,IAAI,CAAA;IACrC,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACnD,UAAU,GAAG,GAAG,CAAC,OAAO,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IAED,IAAI,IAAI,GAAc,EAAE,CAAA;IACxB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAA;IAEpC,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ;QACR,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,eAAe;QACnC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;QAC1B,QAAQ;QACR,UAAU;QACV,cAAc,EAAE,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC;QACvD,WAAW;QACX,GAAG,EACD,WAAW,KAAK,IAAI;YAClB,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC;YACrD,CAAC,CAAC,IAAI;QACV,IAAI;KACL,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAII,EAAE,EACN,YAAqB,KAAK;IAE1B,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;IAE3B,IAAI,WAAW,GAAG,qBAAqB,CAAA;IACvC,IAAI,OAAO,EAAE,CAAC;QACZ,WAAW,GAAG,2BAA2B,CAAA;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAChD,IAAI,IAAI,EAAE,MAAM;gBAAE,WAAW,GAAG,GAAG,IAAI,CAAC,MAAM,sBAAsB,CAAA;iBAC/D,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe;gBAClD,WAAW,GAAG,GAAG,IAAI,CAAC,IAAI,sBAAsB,CAAA;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;QACtC,IAAI;QACJ,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO;KACR,CAAC,CAAA;IAEF,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO;QACP,WAAW;QACX,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI;QACvC,QAAQ,EAAE,MAAM,CAAC,SAAS;QAC1B,OAAO,EAAE,MAAM,CAAC,QAAQ;KACzB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,MAAe;IACjE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAA;IAC3D,IAAI,GAAG,GAAG,eAAe,IAAI,EAAE,CAAA;IAC/B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,CAAC;QAAE,GAAG,IAAI,WAAW,MAAM,EAAE,CAAA;IAClE,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,QAAgB,EAChB,cAAuB;IAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAA;IAC3D,IAAI,GAAG,GAAG,eAAe,IAAI,MAAM,QAAQ,EAAE,CAAA;IAC7C,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvD,GAAG,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAA;IAC3C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAMI,EAAE,EACN,YAAqB,KAAK;IAE1B,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;IAEpC,MAAM,OAAO,GAAG,OAAO;QACrB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,SAAS;QAC/C,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,SAAS,CAAA;IAE5C,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,GAAG,EAAE,CAAA;IAClB,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;YACjD,IAAI,IAAI,EAAE,MAAM;gBAAE,SAAS,GAAG,IAAI,CAAC,MAAM,CAAA;iBACpC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe;gBAAE,SAAS,GAAG,IAAI,CAAC,IAAI,CAAA;YAC3E,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAA;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAG,EAAE,CAAA;IACnB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,cAAc,GAClB,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;QACtE,UAAU,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IACtE,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACrC,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACvD,CAAC;IAED,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO;QACP,KAAK;QACL,KAAK,EAAE,OAAO;QACd,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU;QACV,SAAS,EAAE,UAAU,IAAI,OAAO;QAChC,UAAU;KACX,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,YAAqB,KAAK;IAE1B,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAA;IAC/C,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,OAAO;QACP,OAAO;KACR,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,SAAkB;IACnE,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,OAAO,OAAO,CACZ,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC;QACnC,SAAiB,CAAC,MAAM,EAAE,EAAE;QAC5B,SAAiB,CAAC,cAAc,EAAE,EAAE,CACxC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,OAAO,CAAE,IAAI,OAAO,CAAC,OAAO,CAAS,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,IAAoE,EACpE,YAAqB,KAAK;IAE1B,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,aAAa,GACjB,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAEzD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAClC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,aAAa,CACd,CAAA;IAED,OAAO,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAmF,EACnF,YAAqB,KAAK;IAE1B,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,aAAa,GACjB,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAE9D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CACpC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,aAAa,CACd,CAAA;IAED,OAAO,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,aAAa,CACpB,MAAkB,EAClB,OAAgB,EAChB,SAAkB;IAElB,MAAM,OAAO,GAAgB;QAC3B,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE;KAC5C,CAAA;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QAC1B,OAAO,CAAC,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
package/dist/index.js CHANGED
@@ -18,6 +18,10 @@ import { registerPayCommand } from './commands/pay.js';
18
18
  import { registerCheckCommand } from './commands/check.js';
19
19
  import { registerChatCommands } from './commands/chat.js';
20
20
  import { registerSwapCommand } from './commands/swap.js';
21
+ import { registerAiCommands } from './commands/ai.js';
22
+ import { registerMcpCommand } from './commands/mcp.js';
23
+ import { registerUpdateCommand } from './commands/update.js';
24
+ import { registerWebCommand } from './commands/web.js';
21
25
  const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
22
26
  const program = new Command();
23
27
  program
@@ -35,5 +39,9 @@ registerPayCommand(program);
35
39
  registerCheckCommand(program);
36
40
  registerChatCommands(program);
37
41
  registerSwapCommand(program);
42
+ registerAiCommands(program);
43
+ registerMcpCommand(program);
44
+ registerUpdateCommand(program);
45
+ registerWebCommand(program);
38
46
  program.parse();
39
47
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AAE/B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAC3B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAE5B,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AAE/B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAC3B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAC3B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAE3B,OAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function createServer(opts?: {
3
+ defaultChipnet?: boolean;
4
+ }): McpServer;
5
+ export declare function runMcpServer(opts?: {
6
+ defaultChipnet?: boolean;
7
+ }): Promise<void>;
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAiBnE,wBAAgB,YAAY,CAAC,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,SAAS,CAO/E;AAED,wBAAsB,YAAY,CAAC,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzF"}
@@ -0,0 +1,52 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { createRefillTickDeps, registerTools } from './tools.js';
5
+ import { startAutoRefillLoop } from '../ai/autoRefill.js';
6
+ import { loadWalletRef } from '../wallet/index.js';
7
+ function readVersion() {
8
+ try {
9
+ const pkg = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf-8'));
10
+ return pkg.version || '0.0.0';
11
+ }
12
+ catch {
13
+ return '0.0.0';
14
+ }
15
+ }
16
+ export function createServer(opts = {}) {
17
+ const server = new McpServer({ name: 'paytaca', version: readVersion() }, { capabilities: { tools: {} } });
18
+ registerTools(server, opts);
19
+ return server;
20
+ }
21
+ export async function runMcpServer(opts = {}) {
22
+ const server = createServer(opts);
23
+ const transport = new StdioServerTransport();
24
+ await server.connect(transport);
25
+ startRefillLoop(Boolean(opts.defaultChipnet));
26
+ }
27
+ function startRefillLoop(isChipnet) {
28
+ let wallet;
29
+ try {
30
+ wallet = loadWalletRef();
31
+ }
32
+ catch {
33
+ return () => { };
34
+ }
35
+ if (!wallet || !wallet.canSign)
36
+ return () => { };
37
+ return startAutoRefillLoop({
38
+ ...createRefillTickDeps(isChipnet),
39
+ onEvent: (result) => {
40
+ if (result.action === 'refilled') {
41
+ console.error(`[paytaca] auto-refill: bought ${result.state.minutes} min of ${result.state.model}`);
42
+ }
43
+ else if (result.action === 'disarmed') {
44
+ console.error(`[paytaca] auto-refill disarmed: ${result.reason}`);
45
+ }
46
+ else if (result.action === 'skipped') {
47
+ console.error(`[paytaca] auto-refill skipped: ${result.reason}`);
48
+ }
49
+ },
50
+ });
51
+ }
52
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACtE,CAAA;QACD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAqC,EAAE;IAClE,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAC3C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAA;IACD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC3B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqC,EAAE;IACxE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,eAAe,CAAC,SAAkB;IACzC,IAAI,MAAM,CAAA;IACV,IAAI,CAAC;QACH,MAAM,GAAG,aAAa,EAAE,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IAE/C,OAAO,mBAAmB,CAAC;QACzB,GAAG,oBAAoB,CAAC,SAAS,CAAC;QAClC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YAClB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,CACX,iCAAiC,MAAM,CAAC,KAAK,CAAC,OAAO,WAAW,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CACrF,CAAA;YACH,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CAAC,mCAAmC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YACnE,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,kCAAkC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YAClE,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { type RefillTickDeps } from '../ai/autoRefill.js';
3
+ export declare function createRefillTickDeps(isChipnet: boolean, backendUrl?: string): RefillTickDeps;
4
+ export declare function registerTools(server: McpServer, opts?: {
5
+ defaultChipnet?: boolean;
6
+ }): void;
7
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAmCxE,OAAO,EAQL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAA;AAoB5B,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,OAAO,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CA6BhB;AA4OD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,IAAI,CA2lBN"}