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.
Files changed (126) hide show
  1. package/.env.example +40 -0
  2. package/README.md +35 -4
  3. package/VERIFICATION_SUMMARY.txt +151 -0
  4. package/dist/api/server.d.ts.map +1 -1
  5. package/dist/api/server.js +530 -74
  6. package/dist/api/server.js.map +1 -1
  7. package/dist/bsv/crypto.d.ts +65 -0
  8. package/dist/bsv/crypto.d.ts.map +1 -0
  9. package/dist/bsv/crypto.js +158 -0
  10. package/dist/bsv/crypto.js.map +1 -0
  11. package/dist/bsv/mnee.d.ts +88 -0
  12. package/dist/bsv/mnee.d.ts.map +1 -0
  13. package/dist/bsv/mnee.js +173 -0
  14. package/dist/bsv/mnee.js.map +1 -0
  15. package/dist/bsv/opreturn.d.ts +22 -0
  16. package/dist/bsv/opreturn.d.ts.map +1 -0
  17. package/dist/bsv/opreturn.js +117 -0
  18. package/dist/bsv/opreturn.js.map +1 -0
  19. package/dist/bsv/whatsonchain.d.ts +46 -0
  20. package/dist/bsv/whatsonchain.d.ts.map +1 -0
  21. package/dist/bsv/whatsonchain.js +98 -0
  22. package/dist/bsv/whatsonchain.js.map +1 -0
  23. package/dist/config.d.ts +38 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +85 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/currency/currency.d.ts +70 -0
  28. package/dist/currency/currency.d.ts.map +1 -0
  29. package/dist/currency/currency.js +137 -0
  30. package/dist/currency/currency.js.map +1 -0
  31. package/dist/disputes/dispute.d.ts +50 -0
  32. package/dist/disputes/dispute.d.ts.map +1 -0
  33. package/dist/disputes/dispute.js +162 -0
  34. package/dist/disputes/dispute.js.map +1 -0
  35. package/dist/docs/openapi.yaml +1079 -0
  36. package/dist/docs/swagger.d.ts +12 -0
  37. package/dist/docs/swagger.d.ts.map +1 -0
  38. package/dist/docs/swagger.js +104 -0
  39. package/dist/docs/swagger.js.map +1 -0
  40. package/dist/middleware/auth.d.ts +20 -0
  41. package/dist/middleware/auth.d.ts.map +1 -0
  42. package/dist/middleware/auth.js +32 -0
  43. package/dist/middleware/auth.js.map +1 -0
  44. package/dist/middleware/rateLimit.d.ts +25 -0
  45. package/dist/middleware/rateLimit.d.ts.map +1 -0
  46. package/dist/middleware/rateLimit.js +61 -0
  47. package/dist/middleware/rateLimit.js.map +1 -0
  48. package/dist/payment/payment.d.ts +79 -9
  49. package/dist/payment/payment.d.ts.map +1 -1
  50. package/dist/payment/payment.js +387 -47
  51. package/dist/payment/payment.js.map +1 -1
  52. package/dist/registry/db.d.ts.map +1 -1
  53. package/dist/registry/db.js +110 -3
  54. package/dist/registry/db.js.map +1 -1
  55. package/dist/registry/registry.d.ts +1 -1
  56. package/dist/registry/registry.d.ts.map +1 -1
  57. package/dist/registry/registry.js +12 -4
  58. package/dist/registry/registry.js.map +1 -1
  59. package/dist/types/index.d.ts +34 -0
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/dist/types/index.js.map +1 -1
  62. package/dist/utils/validation.d.ts +27 -0
  63. package/dist/utils/validation.d.ts.map +1 -0
  64. package/dist/utils/validation.js +164 -0
  65. package/dist/utils/validation.js.map +1 -0
  66. package/dist/verification/receipt.d.ts +42 -0
  67. package/dist/verification/receipt.d.ts.map +1 -0
  68. package/dist/verification/receipt.js +10 -0
  69. package/dist/verification/receipt.js.map +1 -0
  70. package/dist/verification/verification.d.ts +41 -0
  71. package/dist/verification/verification.d.ts.map +1 -0
  72. package/dist/verification/verification.js +217 -0
  73. package/dist/verification/verification.js.map +1 -0
  74. package/dist/wallet/providerManager.d.ts +32 -0
  75. package/dist/wallet/providerManager.d.ts.map +1 -0
  76. package/dist/wallet/providerManager.js +118 -0
  77. package/dist/wallet/providerManager.js.map +1 -0
  78. package/dist/wallet/providers/handcash.d.ts +22 -0
  79. package/dist/wallet/providers/handcash.d.ts.map +1 -0
  80. package/dist/wallet/providers/handcash.js +214 -0
  81. package/dist/wallet/providers/handcash.js.map +1 -0
  82. package/dist/wallet/providers/internal.d.ts +15 -0
  83. package/dist/wallet/providers/internal.d.ts.map +1 -0
  84. package/dist/wallet/providers/internal.js +208 -0
  85. package/dist/wallet/providers/internal.js.map +1 -0
  86. package/dist/wallet/providers/types.d.ts +50 -0
  87. package/dist/wallet/providers/types.d.ts.map +1 -0
  88. package/dist/wallet/providers/types.js +6 -0
  89. package/dist/wallet/providers/types.js.map +1 -0
  90. package/dist/wallet/providers/yours.d.ts +18 -0
  91. package/dist/wallet/providers/yours.d.ts.map +1 -0
  92. package/dist/wallet/providers/yours.js +122 -0
  93. package/dist/wallet/providers/yours.js.map +1 -0
  94. package/dist/wallet/wallet.d.ts +52 -5
  95. package/dist/wallet/wallet.d.ts.map +1 -1
  96. package/dist/wallet/wallet.js +223 -34
  97. package/dist/wallet/wallet.js.map +1 -1
  98. package/dist/webhooks/delivery.d.ts +37 -0
  99. package/dist/webhooks/delivery.d.ts.map +1 -0
  100. package/dist/webhooks/delivery.js +182 -0
  101. package/dist/webhooks/delivery.js.map +1 -0
  102. package/dist/webhooks/webhook.d.ts +85 -0
  103. package/dist/webhooks/webhook.d.ts.map +1 -0
  104. package/dist/webhooks/webhook.js +271 -0
  105. package/dist/webhooks/webhook.js.map +1 -0
  106. package/package.json +74 -54
  107. package/sdk-python/LICENSE +21 -0
  108. package/sdk-python/MANIFEST.in +9 -0
  109. package/sdk-python/README.md +372 -0
  110. package/sdk-python/agentspay/__init__.py +97 -0
  111. package/sdk-python/agentspay/client.py +256 -0
  112. package/sdk-python/agentspay/disputes.py +174 -0
  113. package/sdk-python/agentspay/exceptions.py +53 -0
  114. package/sdk-python/agentspay/payments.py +169 -0
  115. package/sdk-python/agentspay/services.py +198 -0
  116. package/sdk-python/agentspay/types.py +154 -0
  117. package/sdk-python/agentspay/wallet.py +113 -0
  118. package/sdk-python/agentspay/webhooks.py +195 -0
  119. package/sdk-python/examples/consumer.py +147 -0
  120. package/sdk-python/examples/provider.py +116 -0
  121. package/sdk-python/pyproject.toml +61 -0
  122. package/sdk-python/setup.py +53 -0
  123. package/sdk-python/tests/test_client.py +221 -0
  124. package/test-addr.js +29 -0
  125. package/test-mnee-simple.js +51 -0
  126. package/test-mnee.js +47 -0
@@ -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 types_1 = require("../types");
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. Funds verified payment moves to 'escrowed'
13
- * 3. Service executed successfully → 'released' (funds to seller)
14
- * 4. Service fails → 'refunded' (funds back to buyer)
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: Internal ledger. TODO: Real BSV transactions with escrow script.
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
- // Create a payment (escrow funds)
21
- create(serviceId, buyerWalletId, sellerWalletId, amount) {
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 = Math.ceil(amount * types_1.PLATFORM_FEE_RATE);
39
+ const platformFee = currency_1.CurrencyManager.calculateFee(amount, currency);
25
40
  const now = new Date().toISOString();
26
- db.prepare(`
27
- INSERT INTO payments (id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, status, createdAt)
28
- VALUES (?, ?, ?, ?, ?, ?, 'escrowed', ?)
29
- `).run(id, serviceId, buyerWalletId, sellerWalletId, amount, platformFee, now);
30
- return {
31
- id, serviceId, buyerWalletId, sellerWalletId,
32
- amount, platformFee, status: 'escrowed', createdAt: now,
33
- };
34
- }
35
- // Release payment (service completed successfully)
36
- release(paymentId) {
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 now = new Date().toISOString();
39
- const result = db.prepare(`
40
- UPDATE payments SET status = 'released', completedAt = ?
41
- WHERE id = ? AND status = 'escrowed'
42
- `).run(now, paymentId);
43
- if (result.changes === 0)
44
- return null;
45
- // TODO: Broadcast BSV transaction (escrow → seller)
46
- return this.getById(paymentId);
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
- // Refund payment (service failed)
49
- refund(paymentId) {
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
- const result = db.prepare(`
53
- UPDATE payments SET status = 'refunded', completedAt = ?
54
- WHERE id = ? AND status = 'escrowed'
55
- `).run(now, paymentId);
56
- if (result.changes === 0)
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
- // TODO: Broadcast BSV refund transaction
59
- return this.getById(paymentId);
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
- // Dispute payment
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
- return this.getById(paymentId);
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
- // Get payment by ID
335
+ /**
336
+ * Get payment by ID
337
+ */
71
338
  getById(id) {
72
339
  const db = (0, db_1.getDb)();
73
- return db.prepare('SELECT * FROM payments WHERE id = ?').get(id);
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
- // Get payments for a wallet
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
- return db.prepare('SELECT * FROM payments WHERE buyerWalletId = ? ORDER BY createdAt DESC').all(walletId);
357
+ rows = db.prepare('SELECT * FROM payments WHERE buyerWalletId = ? ORDER BY createdAt DESC').all(walletId);
80
358
  }
81
359
  else if (role === 'seller') {
82
- return db.prepare('SELECT * FROM payments WHERE sellerWalletId = ? ORDER BY createdAt DESC').all(walletId);
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
- return db.prepare('SELECT * FROM payments WHERE buyerWalletId = ? OR sellerWalletId = ? ORDER BY createdAt DESC').all(walletId, walletId);
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;AAUrC,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAQzC"}
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"}