moltspay 0.2.8 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +139 -0
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +139 -0
- package/dist/cli.mjs.map +1 -1
- package/dist/index.d.mts +84 -0
- package/dist/index.d.ts +84 -0
- package/dist/index.js +139 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +139 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -348,6 +348,145 @@ var init_AgentWallet = __esm({
|
|
|
348
348
|
};
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
|
+
/**
|
|
352
|
+
* Get USDC balance
|
|
353
|
+
*/
|
|
354
|
+
async getBalance() {
|
|
355
|
+
const usdcContract = new import_ethers2.ethers.Contract(
|
|
356
|
+
this.chainConfig.usdc,
|
|
357
|
+
PERMIT_ABI,
|
|
358
|
+
this.provider
|
|
359
|
+
);
|
|
360
|
+
const [usdcBalance, ethBalance] = await Promise.all([
|
|
361
|
+
usdcContract.balanceOf(this.address),
|
|
362
|
+
this.provider.getBalance(this.address)
|
|
363
|
+
]);
|
|
364
|
+
return {
|
|
365
|
+
usdc: (Number(usdcBalance) / 1e6).toFixed(2),
|
|
366
|
+
eth: import_ethers2.ethers.formatEther(ethBalance)
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Transfer USDC to a recipient (direct payment)
|
|
371
|
+
*
|
|
372
|
+
* This is the simplest payment method - Agent pays directly from its wallet.
|
|
373
|
+
* Requires Agent wallet to have USDC (funded by Owner).
|
|
374
|
+
*
|
|
375
|
+
* @example
|
|
376
|
+
* ```typescript
|
|
377
|
+
* const wallet = new AgentWallet({ chain: 'base' });
|
|
378
|
+
*
|
|
379
|
+
* // Check balance
|
|
380
|
+
* const balance = await wallet.getBalance();
|
|
381
|
+
* console.log('USDC:', balance.usdc);
|
|
382
|
+
*
|
|
383
|
+
* // Pay for service
|
|
384
|
+
* const result = await wallet.transfer({
|
|
385
|
+
* to: '0xServiceProvider...',
|
|
386
|
+
* amount: 0.99
|
|
387
|
+
* });
|
|
388
|
+
* console.log('Tx:', result.txHash);
|
|
389
|
+
* ```
|
|
390
|
+
*/
|
|
391
|
+
async transfer(params) {
|
|
392
|
+
const { to, amount } = params;
|
|
393
|
+
try {
|
|
394
|
+
const toAddress = import_ethers2.ethers.getAddress(to);
|
|
395
|
+
const amountWei = BigInt(Math.floor(amount * 1e6));
|
|
396
|
+
const usdcContract = new import_ethers2.ethers.Contract(
|
|
397
|
+
this.chainConfig.usdc,
|
|
398
|
+
PERMIT_ABI,
|
|
399
|
+
this.wallet
|
|
400
|
+
);
|
|
401
|
+
const balance = await usdcContract.balanceOf(this.address);
|
|
402
|
+
if (BigInt(balance) < amountWei) {
|
|
403
|
+
return {
|
|
404
|
+
success: false,
|
|
405
|
+
error: `Insufficient USDC: have ${(Number(balance) / 1e6).toFixed(2)}, need ${amount}`
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
if (!await this.hasGas()) {
|
|
409
|
+
return {
|
|
410
|
+
success: false,
|
|
411
|
+
error: "Insufficient ETH for gas. Need at least 0.0005 ETH."
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
const tx = await usdcContract.transfer(toAddress, amountWei);
|
|
415
|
+
const receipt = await tx.wait();
|
|
416
|
+
if (receipt.status === 1) {
|
|
417
|
+
return {
|
|
418
|
+
success: true,
|
|
419
|
+
txHash: tx.hash,
|
|
420
|
+
from: this.address,
|
|
421
|
+
to: toAddress,
|
|
422
|
+
amount,
|
|
423
|
+
explorerUrl: `${this.chainConfig.explorerTx}${tx.hash}`
|
|
424
|
+
};
|
|
425
|
+
} else {
|
|
426
|
+
return {
|
|
427
|
+
success: false,
|
|
428
|
+
txHash: tx.hash,
|
|
429
|
+
error: "Transaction reverted"
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
} catch (error) {
|
|
433
|
+
return {
|
|
434
|
+
success: false,
|
|
435
|
+
error: error.message
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Pay for a service (transfer USDC to service provider)
|
|
441
|
+
*
|
|
442
|
+
* This is the main method for Agent-to-Agent payments.
|
|
443
|
+
* Returns payment data ready to submit to service API.
|
|
444
|
+
*
|
|
445
|
+
* @example
|
|
446
|
+
* ```typescript
|
|
447
|
+
* const wallet = new AgentWallet({ chain: 'base' });
|
|
448
|
+
*
|
|
449
|
+
* // Pay for Zen7 video service
|
|
450
|
+
* const payment = await wallet.payService({
|
|
451
|
+
* provider: '0xb8d6f2441e8f8dfB6288A74Cf73804cDd0484E0C',
|
|
452
|
+
* amount: 0.99,
|
|
453
|
+
* service: 'video_generation'
|
|
454
|
+
* });
|
|
455
|
+
*
|
|
456
|
+
* if (payment.success) {
|
|
457
|
+
* // Submit to service API
|
|
458
|
+
* await fetch('/v1/video/generate', {
|
|
459
|
+
* body: JSON.stringify({
|
|
460
|
+
* prompt: "...",
|
|
461
|
+
* payment: payment.paymentData // Ready to use!
|
|
462
|
+
* })
|
|
463
|
+
* });
|
|
464
|
+
* }
|
|
465
|
+
* ```
|
|
466
|
+
*/
|
|
467
|
+
async payService(params) {
|
|
468
|
+
const result = await this.transfer({
|
|
469
|
+
to: params.provider,
|
|
470
|
+
amount: params.amount
|
|
471
|
+
});
|
|
472
|
+
if (result.success && result.txHash) {
|
|
473
|
+
return {
|
|
474
|
+
success: true,
|
|
475
|
+
txHash: result.txHash,
|
|
476
|
+
explorerUrl: result.explorerUrl,
|
|
477
|
+
paymentData: {
|
|
478
|
+
method: "transfer",
|
|
479
|
+
chain: this.chain,
|
|
480
|
+
tx_hash: result.txHash
|
|
481
|
+
}
|
|
482
|
+
};
|
|
483
|
+
} else {
|
|
484
|
+
return {
|
|
485
|
+
success: false,
|
|
486
|
+
error: result.error
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
}
|
|
351
490
|
/**
|
|
352
491
|
* Get gas balance (ETH needed for transactions)
|
|
353
492
|
*/
|