agentspay 0.1.0 → 0.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.
- package/.env.example +40 -0
- package/README.md +35 -4
- package/VERIFICATION_SUMMARY.txt +151 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +530 -74
- package/dist/api/server.js.map +1 -1
- package/dist/bsv/crypto.d.ts +65 -0
- package/dist/bsv/crypto.d.ts.map +1 -0
- package/dist/bsv/crypto.js +158 -0
- package/dist/bsv/crypto.js.map +1 -0
- package/dist/bsv/mnee.d.ts +88 -0
- package/dist/bsv/mnee.d.ts.map +1 -0
- package/dist/bsv/mnee.js +173 -0
- package/dist/bsv/mnee.js.map +1 -0
- package/dist/bsv/opreturn.d.ts +22 -0
- package/dist/bsv/opreturn.d.ts.map +1 -0
- package/dist/bsv/opreturn.js +117 -0
- package/dist/bsv/opreturn.js.map +1 -0
- package/dist/bsv/whatsonchain.d.ts +46 -0
- package/dist/bsv/whatsonchain.d.ts.map +1 -0
- package/dist/bsv/whatsonchain.js +98 -0
- package/dist/bsv/whatsonchain.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +85 -0
- package/dist/config.js.map +1 -0
- package/dist/currency/currency.d.ts +70 -0
- package/dist/currency/currency.d.ts.map +1 -0
- package/dist/currency/currency.js +137 -0
- package/dist/currency/currency.js.map +1 -0
- package/dist/disputes/dispute.d.ts +50 -0
- package/dist/disputes/dispute.d.ts.map +1 -0
- package/dist/disputes/dispute.js +162 -0
- package/dist/disputes/dispute.js.map +1 -0
- package/dist/docs/openapi.yaml +1079 -0
- package/dist/docs/swagger.d.ts +12 -0
- package/dist/docs/swagger.d.ts.map +1 -0
- package/dist/docs/swagger.js +104 -0
- package/dist/docs/swagger.js.map +1 -0
- package/dist/middleware/auth.d.ts +20 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +32 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/rateLimit.d.ts +25 -0
- package/dist/middleware/rateLimit.d.ts.map +1 -0
- package/dist/middleware/rateLimit.js +61 -0
- package/dist/middleware/rateLimit.js.map +1 -0
- package/dist/payment/payment.d.ts +79 -9
- package/dist/payment/payment.d.ts.map +1 -1
- package/dist/payment/payment.js +387 -47
- package/dist/payment/payment.js.map +1 -1
- package/dist/registry/db.d.ts.map +1 -1
- package/dist/registry/db.js +110 -3
- package/dist/registry/db.js.map +1 -1
- package/dist/registry/registry.d.ts +1 -1
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +12 -4
- package/dist/registry/registry.js.map +1 -1
- package/dist/types/index.d.ts +34 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/validation.d.ts +27 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +164 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/verification/receipt.d.ts +42 -0
- package/dist/verification/receipt.d.ts.map +1 -0
- package/dist/verification/receipt.js +10 -0
- package/dist/verification/receipt.js.map +1 -0
- package/dist/verification/verification.d.ts +41 -0
- package/dist/verification/verification.d.ts.map +1 -0
- package/dist/verification/verification.js +217 -0
- package/dist/verification/verification.js.map +1 -0
- package/dist/wallet/providerManager.d.ts +32 -0
- package/dist/wallet/providerManager.d.ts.map +1 -0
- package/dist/wallet/providerManager.js +118 -0
- package/dist/wallet/providerManager.js.map +1 -0
- package/dist/wallet/providers/handcash.d.ts +22 -0
- package/dist/wallet/providers/handcash.d.ts.map +1 -0
- package/dist/wallet/providers/handcash.js +214 -0
- package/dist/wallet/providers/handcash.js.map +1 -0
- package/dist/wallet/providers/internal.d.ts +15 -0
- package/dist/wallet/providers/internal.d.ts.map +1 -0
- package/dist/wallet/providers/internal.js +208 -0
- package/dist/wallet/providers/internal.js.map +1 -0
- package/dist/wallet/providers/types.d.ts +50 -0
- package/dist/wallet/providers/types.d.ts.map +1 -0
- package/dist/wallet/providers/types.js +6 -0
- package/dist/wallet/providers/types.js.map +1 -0
- package/dist/wallet/providers/yours.d.ts +18 -0
- package/dist/wallet/providers/yours.d.ts.map +1 -0
- package/dist/wallet/providers/yours.js +122 -0
- package/dist/wallet/providers/yours.js.map +1 -0
- package/dist/wallet/wallet.d.ts +52 -5
- package/dist/wallet/wallet.d.ts.map +1 -1
- package/dist/wallet/wallet.js +223 -34
- package/dist/wallet/wallet.js.map +1 -1
- package/dist/webhooks/delivery.d.ts +37 -0
- package/dist/webhooks/delivery.d.ts.map +1 -0
- package/dist/webhooks/delivery.js +182 -0
- package/dist/webhooks/delivery.js.map +1 -0
- package/dist/webhooks/webhook.d.ts +85 -0
- package/dist/webhooks/webhook.d.ts.map +1 -0
- package/dist/webhooks/webhook.js +271 -0
- package/dist/webhooks/webhook.js.map +1 -0
- package/package.json +74 -54
- package/sdk-python/LICENSE +21 -0
- package/sdk-python/MANIFEST.in +9 -0
- package/sdk-python/README.md +372 -0
- package/sdk-python/agentspay/__init__.py +97 -0
- package/sdk-python/agentspay/client.py +256 -0
- package/sdk-python/agentspay/disputes.py +174 -0
- package/sdk-python/agentspay/exceptions.py +53 -0
- package/sdk-python/agentspay/payments.py +169 -0
- package/sdk-python/agentspay/services.py +198 -0
- package/sdk-python/agentspay/types.py +154 -0
- package/sdk-python/agentspay/wallet.py +113 -0
- package/sdk-python/agentspay/webhooks.py +195 -0
- package/sdk-python/examples/consumer.py +147 -0
- package/sdk-python/examples/provider.py +116 -0
- package/sdk-python/pyproject.toml +61 -0
- package/sdk-python/setup.py +53 -0
- package/sdk-python/tests/test_client.py +221 -0
- package/test-addr.js +29 -0
- package/test-mnee-simple.js +51 -0
- package/test-mnee.js +47 -0
package/dist/payment/payment.js
CHANGED
|
@@ -3,85 +3,425 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PaymentEngine = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
5
|
const db_1 = require("../registry/db");
|
|
6
|
-
const
|
|
6
|
+
const wallet_1 = require("../wallet/wallet");
|
|
7
|
+
const crypto_1 = require("../bsv/crypto");
|
|
8
|
+
const whatsonchain_1 = require("../bsv/whatsonchain");
|
|
9
|
+
const config_1 = require("../config");
|
|
10
|
+
const delivery_1 = require("../webhooks/delivery");
|
|
11
|
+
const mnee_1 = require("../bsv/mnee");
|
|
12
|
+
const currency_1 = require("../currency/currency");
|
|
7
13
|
/**
|
|
8
|
-
* Payment Engine
|
|
14
|
+
* Payment Engine with Multi-Currency Support
|
|
15
|
+
*
|
|
16
|
+
* Supports:
|
|
17
|
+
* - BSV (satoshis) - Native blockchain currency
|
|
18
|
+
* - MNEE (USD cents) - 1Sat Ordinals BSV-21 stablecoin token
|
|
9
19
|
*
|
|
10
20
|
* Flow:
|
|
11
21
|
* 1. Buyer requests execution → payment created as 'pending'
|
|
12
|
-
* 2.
|
|
13
|
-
* 3. Service executed successfully →
|
|
14
|
-
* 4. Service fails →
|
|
22
|
+
* 2. Buyer sends funds to platform escrow wallet → 'escrowed'
|
|
23
|
+
* 3. Service executed successfully → platform sends to seller → 'released'
|
|
24
|
+
* 4. Service fails → platform refunds buyer → 'refunded'
|
|
15
25
|
* 5. Dispute → 'disputed' (manual resolution)
|
|
16
26
|
*
|
|
17
|
-
* MVP:
|
|
27
|
+
* MVP: Platform escrow (centralized). Funds go to platform wallet temporarily.
|
|
28
|
+
* Future: Implement hashlock (HTLC) or 2-of-3 multisig for trustless escrow.
|
|
18
29
|
*/
|
|
19
30
|
class PaymentEngine {
|
|
20
|
-
|
|
21
|
-
|
|
31
|
+
wallets = new wallet_1.WalletManager();
|
|
32
|
+
/**
|
|
33
|
+
* Create a payment (escrow funds)
|
|
34
|
+
* Supports both BSV (satoshis) and MNEE (USD cents)
|
|
35
|
+
*/
|
|
36
|
+
async create(serviceId, buyerWalletId, sellerWalletId, amount, currency = 'BSV') {
|
|
22
37
|
const db = (0, db_1.getDb)();
|
|
23
38
|
const id = (0, uuid_1.v4)();
|
|
24
|
-
const platformFee =
|
|
39
|
+
const platformFee = currency_1.CurrencyManager.calculateFee(amount, currency);
|
|
25
40
|
const now = new Date().toISOString();
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
if (!currency_1.CurrencyManager.validateAmount(amount, currency)) {
|
|
42
|
+
throw new Error(`Invalid ${currency} amount`);
|
|
43
|
+
}
|
|
44
|
+
if (config_1.config.demoMode) {
|
|
45
|
+
// Demo mode: internal ledger, no on-chain tx
|
|
46
|
+
db.prepare(`
|
|
47
|
+
INSERT INTO payments (id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, currency, status, escrowTxId, createdAt)
|
|
48
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, 'escrowed', ?, ?)
|
|
49
|
+
`).run(id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, currency, `demo-${currency}-${id.slice(0, 8)}`, now);
|
|
50
|
+
const payment = {
|
|
51
|
+
id, serviceId, buyerWalletId, sellerWalletId,
|
|
52
|
+
amount, platformFee, currency, status: 'escrowed',
|
|
53
|
+
txId: `demo-${currency}-${id.slice(0, 8)}`,
|
|
54
|
+
createdAt: now,
|
|
55
|
+
};
|
|
56
|
+
// Trigger webhooks
|
|
57
|
+
delivery_1.webhookDelivery.trigger('payment.created', payment).catch(console.error);
|
|
58
|
+
delivery_1.webhookDelivery.trigger('payment.escrowed', payment).catch(console.error);
|
|
59
|
+
return payment;
|
|
60
|
+
}
|
|
61
|
+
// On-chain mode - handle BSV or MNEE
|
|
62
|
+
if (currency === 'BSV') {
|
|
63
|
+
return this.createBsvPayment(id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, now);
|
|
64
|
+
}
|
|
65
|
+
else if (currency === 'MNEE') {
|
|
66
|
+
return this.createMneePayment(id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, now);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
throw new Error(`Unsupported currency: ${currency}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create BSV payment (on-chain)
|
|
74
|
+
*/
|
|
75
|
+
async createBsvPayment(id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, now) {
|
|
37
76
|
const db = (0, db_1.getDb)();
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
77
|
+
const buyerWallet = this.wallets.getById(buyerWalletId);
|
|
78
|
+
if (!buyerWallet)
|
|
79
|
+
throw new Error('Buyer wallet not found');
|
|
80
|
+
const buyerPrivKeyWif = this.wallets.getPrivateKey(buyerWalletId);
|
|
81
|
+
if (!buyerPrivKeyWif)
|
|
82
|
+
throw new Error('Cannot access buyer private key');
|
|
83
|
+
const buyerPrivKey = (0, crypto_1.privateKeyFromWif)(buyerPrivKeyWif);
|
|
84
|
+
const utxos = await this.wallets.getUtxos(buyerWalletId);
|
|
85
|
+
if (utxos.length === 0)
|
|
86
|
+
throw new Error('No UTXOs available. Please fund your wallet.');
|
|
87
|
+
const totalAvailable = utxos.reduce((sum, utxo) => sum + utxo.amount, 0);
|
|
88
|
+
if (totalAvailable < amount)
|
|
89
|
+
throw new Error(`Insufficient BSV. Need ${amount} sats, have ${totalAvailable} sats`);
|
|
90
|
+
const platformAddress = this.getPlatformEscrowAddress();
|
|
91
|
+
try {
|
|
92
|
+
const txHex = await (0, crypto_1.buildTransaction)(utxos, [{ address: platformAddress, amount }], buyerWallet.address, buyerPrivKey);
|
|
93
|
+
const txId = await (0, whatsonchain_1.broadcastTx)(txHex);
|
|
94
|
+
db.prepare(`
|
|
95
|
+
INSERT INTO payments (id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, currency, status, escrowTxId, createdAt)
|
|
96
|
+
VALUES (?, ?, ?, ?, ?, ?, 'BSV', 'escrowed', ?, ?)
|
|
97
|
+
`).run(id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, txId, now);
|
|
98
|
+
const payment = { id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, currency: 'BSV', status: 'escrowed', txId, createdAt: now };
|
|
99
|
+
delivery_1.webhookDelivery.trigger('payment.created', payment).catch(console.error);
|
|
100
|
+
delivery_1.webhookDelivery.trigger('payment.escrowed', payment).catch(console.error);
|
|
101
|
+
return payment;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw new Error(`Failed to create BSV escrow transaction: ${error.message}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create MNEE payment (token transfer)
|
|
109
|
+
*/
|
|
110
|
+
async createMneePayment(id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, now) {
|
|
111
|
+
const db = (0, db_1.getDb)();
|
|
112
|
+
const buyerWallet = this.wallets.getById(buyerWalletId);
|
|
113
|
+
if (!buyerWallet)
|
|
114
|
+
throw new Error('Buyer wallet not found');
|
|
115
|
+
const buyerPrivKeyWif = this.wallets.getPrivateKey(buyerWalletId);
|
|
116
|
+
if (!buyerPrivKeyWif)
|
|
117
|
+
throw new Error('Cannot access buyer private key');
|
|
118
|
+
// Check MNEE balance
|
|
119
|
+
const mneeBalance = await mnee_1.mneeTokens.getBalance(buyerWallet.address);
|
|
120
|
+
if (mneeBalance < amount) {
|
|
121
|
+
throw new Error(`Insufficient MNEE balance. Need ${amount} cents ($${(amount / 100).toFixed(2)}), have ${mneeBalance} cents ($${(mneeBalance / 100).toFixed(2)})`);
|
|
122
|
+
}
|
|
123
|
+
// Get platform escrow address for MNEE
|
|
124
|
+
const platformAddress = this.getPlatformEscrowAddress();
|
|
125
|
+
try {
|
|
126
|
+
// Transfer MNEE tokens to platform escrow
|
|
127
|
+
const result = await mnee_1.mneeTokens.transfer(buyerWallet.address, platformAddress, amount, buyerPrivKeyWif);
|
|
128
|
+
db.prepare(`
|
|
129
|
+
INSERT INTO payments (id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, currency, status, escrowTxId, createdAt)
|
|
130
|
+
VALUES (?, ?, ?, ?, ?, ?, 'MNEE', 'escrowed', ?, ?)
|
|
131
|
+
`).run(id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, result.txid, now);
|
|
132
|
+
const payment = { id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, currency: 'MNEE', status: 'escrowed', txId: result.txid, createdAt: now };
|
|
133
|
+
delivery_1.webhookDelivery.trigger('payment.created', payment).catch(console.error);
|
|
134
|
+
delivery_1.webhookDelivery.trigger('payment.escrowed', payment).catch(console.error);
|
|
135
|
+
return payment;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
throw new Error(`Failed to create MNEE escrow: ${error.message}`);
|
|
139
|
+
}
|
|
47
140
|
}
|
|
48
|
-
|
|
49
|
-
|
|
141
|
+
/**
|
|
142
|
+
* Release payment (service completed successfully)
|
|
143
|
+
* Platform sends escrowed funds to seller
|
|
144
|
+
*
|
|
145
|
+
* ⚠️ SECURITY: Internal use only. Not exposed via API.
|
|
146
|
+
* Only callable from execute flow.
|
|
147
|
+
*/
|
|
148
|
+
async release(paymentId) {
|
|
50
149
|
const db = (0, db_1.getDb)();
|
|
150
|
+
const payment = this.getById(paymentId);
|
|
151
|
+
if (!payment || payment.status !== 'escrowed')
|
|
152
|
+
return null;
|
|
51
153
|
const now = new Date().toISOString();
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
154
|
+
if (config_1.config.demoMode) {
|
|
155
|
+
db.prepare(`UPDATE payments SET status = 'released', releaseTxId = ?, completedAt = ? WHERE id = ?`)
|
|
156
|
+
.run(`demo-release-${payment.currency}-${paymentId.slice(0, 8)}`, now, paymentId);
|
|
157
|
+
const updatedPayment = this.getById(paymentId);
|
|
158
|
+
if (updatedPayment) {
|
|
159
|
+
delivery_1.webhookDelivery.trigger('payment.completed', updatedPayment).catch(console.error);
|
|
160
|
+
}
|
|
161
|
+
return updatedPayment;
|
|
162
|
+
}
|
|
163
|
+
// On-chain release - handle BSV or MNEE
|
|
164
|
+
if (payment.currency === 'BSV') {
|
|
165
|
+
return this.releaseBsvPayment(payment, now);
|
|
166
|
+
}
|
|
167
|
+
else if (payment.currency === 'MNEE') {
|
|
168
|
+
return this.releaseMneePayment(payment, now);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
throw new Error(`Unsupported currency: ${payment.currency}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Release BSV payment
|
|
176
|
+
*/
|
|
177
|
+
async releaseBsvPayment(payment, now) {
|
|
178
|
+
const db = (0, db_1.getDb)();
|
|
179
|
+
const sellerWallet = this.wallets.getById(payment.sellerWalletId);
|
|
180
|
+
if (!sellerWallet)
|
|
181
|
+
throw new Error('Seller wallet not found');
|
|
182
|
+
try {
|
|
183
|
+
const platformPrivKey = (0, crypto_1.privateKeyFromWif)(this.getPlatformPrivateKey());
|
|
184
|
+
const platformAddress = this.getPlatformEscrowAddress();
|
|
185
|
+
const platformWallet = this.getOrCreatePlatformWallet();
|
|
186
|
+
const utxos = await this.waitForUtxos(platformWallet.id);
|
|
187
|
+
const sellerPayout = payment.amount - payment.platformFee;
|
|
188
|
+
const txHex = await (0, crypto_1.buildTransaction)(utxos, [{ address: sellerWallet.address, amount: sellerPayout }], platformAddress, platformPrivKey);
|
|
189
|
+
const releaseTxId = await (0, whatsonchain_1.broadcastTx)(txHex);
|
|
190
|
+
db.prepare(`UPDATE payments SET status = 'released', releaseTxId = ?, completedAt = ? WHERE id = ?`)
|
|
191
|
+
.run(releaseTxId, now, payment.id);
|
|
192
|
+
const updatedPayment = this.getById(payment.id);
|
|
193
|
+
if (updatedPayment) {
|
|
194
|
+
delivery_1.webhookDelivery.trigger('payment.completed', updatedPayment).catch(console.error);
|
|
195
|
+
}
|
|
196
|
+
return updatedPayment;
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error('Failed to release BSV payment:', error);
|
|
200
|
+
throw new Error(`Failed to release BSV payment: ${error.message}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Release MNEE payment
|
|
205
|
+
*/
|
|
206
|
+
async releaseMneePayment(payment, now) {
|
|
207
|
+
const db = (0, db_1.getDb)();
|
|
208
|
+
const sellerWallet = this.wallets.getById(payment.sellerWalletId);
|
|
209
|
+
if (!sellerWallet)
|
|
210
|
+
throw new Error('Seller wallet not found');
|
|
211
|
+
const platformAddress = this.getPlatformEscrowAddress();
|
|
212
|
+
const platformPrivKey = this.getPlatformPrivateKey();
|
|
213
|
+
try {
|
|
214
|
+
const sellerPayout = payment.amount - payment.platformFee;
|
|
215
|
+
const result = await mnee_1.mneeTokens.transfer(platformAddress, sellerWallet.address, sellerPayout, platformPrivKey);
|
|
216
|
+
db.prepare(`UPDATE payments SET status = 'released', releaseTxId = ?, completedAt = ? WHERE id = ?`)
|
|
217
|
+
.run(result.txid, now, payment.id);
|
|
218
|
+
const updatedPayment = this.getById(payment.id);
|
|
219
|
+
if (updatedPayment) {
|
|
220
|
+
delivery_1.webhookDelivery.trigger('payment.completed', updatedPayment).catch(console.error);
|
|
221
|
+
}
|
|
222
|
+
return updatedPayment;
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
console.error('Failed to release MNEE payment:', error);
|
|
226
|
+
throw new Error(`Failed to release MNEE payment: ${error.message}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Refund payment (service failed)
|
|
231
|
+
* Platform returns escrowed funds to buyer
|
|
232
|
+
*
|
|
233
|
+
* ⚠️ SECURITY: Internal use only. Not exposed via API.
|
|
234
|
+
* Only callable from execute flow.
|
|
235
|
+
*/
|
|
236
|
+
async refund(paymentId) {
|
|
237
|
+
const db = (0, db_1.getDb)();
|
|
238
|
+
const payment = this.getById(paymentId);
|
|
239
|
+
if (!payment || payment.status !== 'escrowed')
|
|
57
240
|
return null;
|
|
58
|
-
|
|
59
|
-
|
|
241
|
+
const now = new Date().toISOString();
|
|
242
|
+
if (config_1.config.demoMode) {
|
|
243
|
+
db.prepare(`UPDATE payments SET status = 'refunded', releaseTxId = ?, completedAt = ? WHERE id = ?`)
|
|
244
|
+
.run(`demo-refund-${payment.currency}-${paymentId.slice(0, 8)}`, now, paymentId);
|
|
245
|
+
const updatedPayment = this.getById(paymentId);
|
|
246
|
+
if (updatedPayment) {
|
|
247
|
+
delivery_1.webhookDelivery.trigger('payment.failed', updatedPayment).catch(console.error);
|
|
248
|
+
delivery_1.webhookDelivery.trigger('payment.refunded', updatedPayment).catch(console.error);
|
|
249
|
+
}
|
|
250
|
+
return updatedPayment;
|
|
251
|
+
}
|
|
252
|
+
// On-chain refund - handle BSV or MNEE
|
|
253
|
+
if (payment.currency === 'BSV') {
|
|
254
|
+
return this.refundBsvPayment(payment, now);
|
|
255
|
+
}
|
|
256
|
+
else if (payment.currency === 'MNEE') {
|
|
257
|
+
return this.refundMneePayment(payment, now);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
throw new Error(`Unsupported currency: ${payment.currency}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Refund BSV payment
|
|
265
|
+
*/
|
|
266
|
+
async refundBsvPayment(payment, now) {
|
|
267
|
+
const db = (0, db_1.getDb)();
|
|
268
|
+
const buyerWallet = this.wallets.getById(payment.buyerWalletId);
|
|
269
|
+
if (!buyerWallet)
|
|
270
|
+
throw new Error('Buyer wallet not found');
|
|
271
|
+
try {
|
|
272
|
+
const platformPrivKey = (0, crypto_1.privateKeyFromWif)(this.getPlatformPrivateKey());
|
|
273
|
+
const platformAddress = this.getPlatformEscrowAddress();
|
|
274
|
+
const platformWallet = this.getOrCreatePlatformWallet();
|
|
275
|
+
const utxos = await this.waitForUtxos(platformWallet.id);
|
|
276
|
+
const txHex = await (0, crypto_1.buildTransaction)(utxos, [{ address: buyerWallet.address, amount: payment.amount }], platformAddress, platformPrivKey);
|
|
277
|
+
const refundTxId = await (0, whatsonchain_1.broadcastTx)(txHex);
|
|
278
|
+
db.prepare(`UPDATE payments SET status = 'refunded', releaseTxId = ?, completedAt = ? WHERE id = ?`)
|
|
279
|
+
.run(refundTxId, now, payment.id);
|
|
280
|
+
const updatedPayment = this.getById(payment.id);
|
|
281
|
+
if (updatedPayment) {
|
|
282
|
+
delivery_1.webhookDelivery.trigger('payment.failed', updatedPayment).catch(console.error);
|
|
283
|
+
delivery_1.webhookDelivery.trigger('payment.refunded', updatedPayment).catch(console.error);
|
|
284
|
+
}
|
|
285
|
+
return updatedPayment;
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
console.error('Failed to refund BSV payment:', error);
|
|
289
|
+
throw new Error(`Failed to refund BSV payment: ${error.message}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Refund MNEE payment
|
|
294
|
+
*/
|
|
295
|
+
async refundMneePayment(payment, now) {
|
|
296
|
+
const db = (0, db_1.getDb)();
|
|
297
|
+
const buyerWallet = this.wallets.getById(payment.buyerWalletId);
|
|
298
|
+
if (!buyerWallet)
|
|
299
|
+
throw new Error('Buyer wallet not found');
|
|
300
|
+
const platformAddress = this.getPlatformEscrowAddress();
|
|
301
|
+
const platformPrivKey = this.getPlatformPrivateKey();
|
|
302
|
+
try {
|
|
303
|
+
const result = await mnee_1.mneeTokens.transfer(platformAddress, buyerWallet.address, payment.amount, platformPrivKey);
|
|
304
|
+
db.prepare(`UPDATE payments SET status = 'refunded', releaseTxId = ?, completedAt = ? WHERE id = ?`)
|
|
305
|
+
.run(result.txid, now, payment.id);
|
|
306
|
+
const updatedPayment = this.getById(payment.id);
|
|
307
|
+
if (updatedPayment) {
|
|
308
|
+
delivery_1.webhookDelivery.trigger('payment.failed', updatedPayment).catch(console.error);
|
|
309
|
+
delivery_1.webhookDelivery.trigger('payment.refunded', updatedPayment).catch(console.error);
|
|
310
|
+
}
|
|
311
|
+
return updatedPayment;
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
console.error('Failed to refund MNEE payment:', error);
|
|
315
|
+
throw new Error(`Failed to refund MNEE payment: ${error.message}`);
|
|
316
|
+
}
|
|
60
317
|
}
|
|
61
|
-
|
|
318
|
+
/**
|
|
319
|
+
* Dispute payment
|
|
320
|
+
*/
|
|
62
321
|
dispute(paymentId) {
|
|
63
322
|
const db = (0, db_1.getDb)();
|
|
64
|
-
db.prepare(`
|
|
323
|
+
const result = db.prepare(`
|
|
65
324
|
UPDATE payments SET status = 'disputed'
|
|
66
325
|
WHERE id = ? AND status = 'escrowed'
|
|
67
326
|
`).run(paymentId);
|
|
68
|
-
|
|
327
|
+
if (result.changes === 0)
|
|
328
|
+
return null;
|
|
329
|
+
const payment = this.getById(paymentId);
|
|
330
|
+
if (payment) {
|
|
331
|
+
delivery_1.webhookDelivery.trigger('dispute.opened', payment).catch(console.error);
|
|
332
|
+
}
|
|
333
|
+
return payment;
|
|
69
334
|
}
|
|
70
|
-
|
|
335
|
+
/**
|
|
336
|
+
* Get payment by ID
|
|
337
|
+
*/
|
|
71
338
|
getById(id) {
|
|
72
339
|
const db = (0, db_1.getDb)();
|
|
73
|
-
|
|
340
|
+
const row = db.prepare('SELECT * FROM payments WHERE id = ?').get(id);
|
|
341
|
+
if (!row)
|
|
342
|
+
return null;
|
|
343
|
+
// Normalize DB columns to API shape
|
|
344
|
+
if (!row.txId && row.escrowTxId)
|
|
345
|
+
row.txId = row.escrowTxId;
|
|
346
|
+
if (!row.currency)
|
|
347
|
+
row.currency = 'BSV'; // default for legacy payments
|
|
348
|
+
return row;
|
|
74
349
|
}
|
|
75
|
-
|
|
350
|
+
/**
|
|
351
|
+
* Get payments for a wallet
|
|
352
|
+
*/
|
|
76
353
|
getByWallet(walletId, role = 'both') {
|
|
77
354
|
const db = (0, db_1.getDb)();
|
|
355
|
+
let rows;
|
|
78
356
|
if (role === 'buyer') {
|
|
79
|
-
|
|
357
|
+
rows = db.prepare('SELECT * FROM payments WHERE buyerWalletId = ? ORDER BY createdAt DESC').all(walletId);
|
|
80
358
|
}
|
|
81
359
|
else if (role === 'seller') {
|
|
82
|
-
|
|
360
|
+
rows = db.prepare('SELECT * FROM payments WHERE sellerWalletId = ? ORDER BY createdAt DESC').all(walletId);
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
rows = db.prepare('SELECT * FROM payments WHERE buyerWalletId = ? OR sellerWalletId = ? ORDER BY createdAt DESC').all(walletId, walletId);
|
|
83
364
|
}
|
|
84
|
-
|
|
365
|
+
// Normalize legacy payments without currency field
|
|
366
|
+
return rows.map(row => ({
|
|
367
|
+
...row,
|
|
368
|
+
currency: row.currency || 'BSV'
|
|
369
|
+
}));
|
|
370
|
+
}
|
|
371
|
+
async waitForUtxos(walletId, attempts = 10, delayMs = 1500) {
|
|
372
|
+
for (let i = 0; i < attempts; i++) {
|
|
373
|
+
const utxos = await this.wallets.getUtxos(walletId);
|
|
374
|
+
if (utxos.length > 0)
|
|
375
|
+
return utxos;
|
|
376
|
+
await new Promise(r => setTimeout(r, delayMs));
|
|
377
|
+
}
|
|
378
|
+
throw new Error('Platform wallet has no UTXOs');
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Get or create platform escrow wallet
|
|
382
|
+
*/
|
|
383
|
+
getOrCreatePlatformWallet() {
|
|
384
|
+
const db = (0, db_1.getDb)();
|
|
385
|
+
const address = this.getPlatformEscrowAddress();
|
|
386
|
+
// Check if platform wallet exists
|
|
387
|
+
const existing = db.prepare('SELECT id, address FROM wallets WHERE address = ?').get(address);
|
|
388
|
+
if (existing)
|
|
389
|
+
return existing;
|
|
390
|
+
// If platform private key is configured, import it so the DB wallet matches the escrow address
|
|
391
|
+
if (config_1.config.platformWallet.privateKey) {
|
|
392
|
+
const wallet = this.wallets.importFromWif(config_1.config.platformWallet.privateKey);
|
|
393
|
+
return { id: wallet.id, address: wallet.address };
|
|
394
|
+
}
|
|
395
|
+
// Fallback (dev only): create new random platform wallet (address will NOT be stable across runs)
|
|
396
|
+
const wallet = this.wallets.create();
|
|
397
|
+
console.warn('⚠️ Created new platform escrow wallet:', wallet.address);
|
|
398
|
+
console.warn('⚠️ STORE THIS PRIVATE KEY SECURELY:', wallet.privateKey);
|
|
399
|
+
return { id: wallet.id, address: wallet.address };
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Get platform escrow address
|
|
403
|
+
*/
|
|
404
|
+
getPlatformEscrowAddress() {
|
|
405
|
+
if (config_1.config.platformWallet.address)
|
|
406
|
+
return config_1.config.platformWallet.address;
|
|
407
|
+
if (config_1.config.platformWallet.privateKey) {
|
|
408
|
+
const priv = (0, crypto_1.privateKeyFromWif)(config_1.config.platformWallet.privateKey);
|
|
409
|
+
return (0, crypto_1.deriveAddress)(priv);
|
|
410
|
+
}
|
|
411
|
+
// Dev fallback: ephemeral random address
|
|
412
|
+
const privKey = (0, crypto_1.generatePrivateKey)();
|
|
413
|
+
return (0, crypto_1.deriveAddress)(privKey);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Get platform private key (SECURE THIS!)
|
|
417
|
+
*/
|
|
418
|
+
getPlatformPrivateKey() {
|
|
419
|
+
if (config_1.config.platformWallet.privateKey)
|
|
420
|
+
return config_1.config.platformWallet.privateKey;
|
|
421
|
+
// For dev/testing only - generate ephemeral key (will NOT match escrow address across calls)
|
|
422
|
+
console.warn('⚠️ Using ephemeral platform key - NOT FOR PRODUCTION');
|
|
423
|
+
const privKey = (0, crypto_1.generatePrivateKey)();
|
|
424
|
+
return privKey.toWif();
|
|
85
425
|
}
|
|
86
426
|
}
|
|
87
427
|
exports.PaymentEngine = PaymentEngine;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment.js","sourceRoot":"","sources":["../../src/payment/payment.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"payment.js","sourceRoot":"","sources":["../../src/payment/payment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/registry/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/registry/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAOrC,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAQzC"}
|