@bsv/message-box-client 2.0.5 → 2.0.7
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/cjs/package.json +2 -2
- package/dist/cjs/src/PeerPayClient.js +463 -62
- package/dist/cjs/src/PeerPayClient.js.map +1 -1
- package/dist/cjs/src/__tests/PeerPayClientRequestIntegration.test.js +317 -0
- package/dist/cjs/src/__tests/PeerPayClientRequestIntegration.test.js.map +1 -0
- package/dist/cjs/src/__tests/PeerPayClientUnit.test.js +505 -1
- package/dist/cjs/src/__tests/PeerPayClientUnit.test.js.map +1 -1
- package/dist/cjs/src/types.js +5 -0
- package/dist/cjs/src/types.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/PeerPayClient.js +459 -61
- package/dist/esm/src/PeerPayClient.js.map +1 -1
- package/dist/esm/src/__tests/PeerPayClientRequestIntegration.test.js +312 -0
- package/dist/esm/src/__tests/PeerPayClientRequestIntegration.test.js.map +1 -0
- package/dist/esm/src/__tests/PeerPayClientUnit.test.js +505 -1
- package/dist/esm/src/__tests/PeerPayClientUnit.test.js.map +1 -1
- package/dist/esm/src/types.js +4 -1
- package/dist/esm/src/types.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/PeerPayClient.d.ts +160 -0
- package/dist/types/src/PeerPayClient.d.ts.map +1 -1
- package/dist/types/src/__tests/PeerPayClientRequestIntegration.test.d.ts +10 -0
- package/dist/types/src/__tests/PeerPayClientRequestIntegration.test.d.ts.map +1 -0
- package/dist/types/src/types.d.ts +88 -0
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/package.json +2 -2
- package/src/PeerPayClient.ts +526 -69
- package/src/__tests/PeerPayClientRequestIntegration.test.ts +364 -0
- package/src/__tests/PeerPayClientUnit.test.ts +594 -1
- package/src/types.ts +95 -0
|
@@ -10,20 +10,45 @@
|
|
|
10
10
|
* between identified peers on the BSV network.
|
|
11
11
|
*/
|
|
12
12
|
import { MessageBoxClient } from './MessageBoxClient.js';
|
|
13
|
-
import {
|
|
13
|
+
import { DEFAULT_PAYMENT_REQUEST_MIN_AMOUNT, DEFAULT_PAYMENT_REQUEST_MAX_AMOUNT } from './types.js';
|
|
14
|
+
import { AuthFetch, Brc29RemittanceModule, createNonce } from '@bsv/sdk';
|
|
14
15
|
import * as Logger from './Utils/logger.js';
|
|
16
|
+
function toNumberArray(tx) {
|
|
17
|
+
return Array.isArray(tx) ? tx : Array.from(tx);
|
|
18
|
+
}
|
|
19
|
+
function hexToBytes(hex) {
|
|
20
|
+
const matches = hex.match(/.{1,2}/g);
|
|
21
|
+
return matches != null ? matches.map(byte => parseInt(byte, 16)) : [];
|
|
22
|
+
}
|
|
15
23
|
function safeParse(input) {
|
|
16
24
|
try {
|
|
17
25
|
return typeof input === 'string' ? JSON.parse(input) : input;
|
|
18
26
|
}
|
|
19
27
|
catch (e) {
|
|
20
28
|
Logger.error('[PP CLIENT] Failed to parse input in safeParse:', input);
|
|
21
|
-
|
|
22
|
-
const fallback = {};
|
|
23
|
-
return fallback;
|
|
29
|
+
return undefined;
|
|
24
30
|
}
|
|
25
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Validates that a parsed object has the required fields for a PaymentRequestMessage.
|
|
34
|
+
* Returns true for both new requests (has amount, description, expiresAt) and cancellations (has cancelled: true).
|
|
35
|
+
*/
|
|
36
|
+
function isValidPaymentRequestMessage(obj) {
|
|
37
|
+
if (typeof obj !== 'object' || obj === null)
|
|
38
|
+
return false;
|
|
39
|
+
if (typeof obj.requestId !== 'string')
|
|
40
|
+
return false;
|
|
41
|
+
if (typeof obj.senderIdentityKey !== 'string')
|
|
42
|
+
return false;
|
|
43
|
+
if (typeof obj.requestProof !== 'string')
|
|
44
|
+
return false;
|
|
45
|
+
if (obj.cancelled === true)
|
|
46
|
+
return true;
|
|
47
|
+
return typeof obj.amount === 'number' && typeof obj.description === 'string' && typeof obj.expiresAt === 'number';
|
|
48
|
+
}
|
|
26
49
|
export const STANDARD_PAYMENT_MESSAGEBOX = 'payment_inbox';
|
|
50
|
+
export const PAYMENT_REQUESTS_MESSAGEBOX = 'payment_requests';
|
|
51
|
+
export const PAYMENT_REQUEST_RESPONSES_MESSAGEBOX = 'payment_request_responses';
|
|
27
52
|
const STANDARD_PAYMENT_OUTPUT_INDEX = 0;
|
|
28
53
|
/**
|
|
29
54
|
* PeerPayClient enables peer-to-peer Bitcoin payments using MessageBox.
|
|
@@ -32,6 +57,7 @@ export class PeerPayClient extends MessageBoxClient {
|
|
|
32
57
|
peerPayWalletClient;
|
|
33
58
|
_authFetchInstance;
|
|
34
59
|
messageBox;
|
|
60
|
+
settlementModule;
|
|
35
61
|
constructor(config) {
|
|
36
62
|
const { messageBoxHost = 'https://messagebox.babbage.systems', walletClient, enableLogging = false, originator } = config;
|
|
37
63
|
// 🔹 Pass enableLogging to MessageBoxClient
|
|
@@ -39,6 +65,15 @@ export class PeerPayClient extends MessageBoxClient {
|
|
|
39
65
|
this.messageBox = config.messageBox ?? STANDARD_PAYMENT_MESSAGEBOX;
|
|
40
66
|
this.peerPayWalletClient = walletClient;
|
|
41
67
|
this.originator = originator;
|
|
68
|
+
this.settlementModule = new Brc29RemittanceModule({
|
|
69
|
+
protocolID: [2, '3241645161d8'],
|
|
70
|
+
labels: ['peerpay'],
|
|
71
|
+
description: 'PeerPay payment',
|
|
72
|
+
outputDescription: 'Payment for PeerPay transaction',
|
|
73
|
+
internalizeProtocol: 'wallet payment',
|
|
74
|
+
refundFeeSatoshis: 1000,
|
|
75
|
+
minRefundSatoshis: 1000
|
|
76
|
+
});
|
|
42
77
|
}
|
|
43
78
|
get authFetchInstance() {
|
|
44
79
|
if (this._authFetchInstance === null || this._authFetchInstance === undefined) {
|
|
@@ -46,6 +81,56 @@ export class PeerPayClient extends MessageBoxClient {
|
|
|
46
81
|
}
|
|
47
82
|
return this._authFetchInstance;
|
|
48
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Allows payment requests from a specific identity key by setting
|
|
86
|
+
* the recipientFee to 0 for the payment_requests message box.
|
|
87
|
+
*
|
|
88
|
+
* @param {Object} params - Parameters.
|
|
89
|
+
* @param {string} params.identityKey - The identity key to allow payment requests from.
|
|
90
|
+
* @returns {Promise<void>} Resolves when the permission is set.
|
|
91
|
+
*/
|
|
92
|
+
async allowPaymentRequestsFrom({ identityKey }) {
|
|
93
|
+
await this.setMessageBoxPermission({
|
|
94
|
+
messageBox: PAYMENT_REQUESTS_MESSAGEBOX,
|
|
95
|
+
sender: identityKey,
|
|
96
|
+
recipientFee: 0
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Blocks payment requests from a specific identity key by setting
|
|
101
|
+
* the recipientFee to -1 for the payment_requests message box.
|
|
102
|
+
*
|
|
103
|
+
* @param {Object} params - Parameters.
|
|
104
|
+
* @param {string} params.identityKey - The identity key to block payment requests from.
|
|
105
|
+
* @returns {Promise<void>} Resolves when the permission is set.
|
|
106
|
+
*/
|
|
107
|
+
async blockPaymentRequestsFrom({ identityKey }) {
|
|
108
|
+
await this.setMessageBoxPermission({
|
|
109
|
+
messageBox: PAYMENT_REQUESTS_MESSAGEBOX,
|
|
110
|
+
sender: identityKey,
|
|
111
|
+
recipientFee: -1
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Lists all permissions for the payment_requests message box, mapped to
|
|
116
|
+
* a simplified { identityKey, allowed } structure.
|
|
117
|
+
*
|
|
118
|
+
* A permission is considered "allowed" if recipientFee >= 0 (0 = always allow,
|
|
119
|
+
* positive = payment required). A recipientFee of -1 means blocked.
|
|
120
|
+
*
|
|
121
|
+
* @returns {Promise<Array<{ identityKey: string, allowed: boolean }>>} Resolved with the list of permissions.
|
|
122
|
+
*/
|
|
123
|
+
async listPaymentRequestPermissions() {
|
|
124
|
+
const permissions = await this.listMessageBoxPermissions({ messageBox: PAYMENT_REQUESTS_MESSAGEBOX });
|
|
125
|
+
// Filter to only per-sender entries (sender is not null/empty).
|
|
126
|
+
// Use the status field returned by the server to determine allowed state.
|
|
127
|
+
return permissions
|
|
128
|
+
.filter(p => p.sender != null && p.sender !== '')
|
|
129
|
+
.map(p => ({
|
|
130
|
+
identityKey: p.sender ?? '',
|
|
131
|
+
allowed: p.status !== 'blocked'
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
49
134
|
/**
|
|
50
135
|
* Generates a valid payment token for a recipient.
|
|
51
136
|
*
|
|
@@ -63,53 +148,34 @@ export class PeerPayClient extends MessageBoxClient {
|
|
|
63
148
|
throw new Error('Invalid payment details: recipient and valid amount are required');
|
|
64
149
|
}
|
|
65
150
|
;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
protocolID: [2, '3241645161d8'],
|
|
74
|
-
keyID: `${derivationPrefix} ${derivationSuffix}`,
|
|
75
|
-
counterparty: payment.recipient
|
|
76
|
-
}, this.originator);
|
|
77
|
-
Logger.log(`[PP CLIENT] Derived Public Key: ${derivedKeyResult}`);
|
|
78
|
-
if (derivedKeyResult == null || derivedKeyResult.trim() === '') {
|
|
79
|
-
throw new Error('Failed to derive recipient’s public key');
|
|
80
|
-
}
|
|
81
|
-
// Create locking script using recipient's public key
|
|
82
|
-
const lockingScript = new P2PKH().lock(PublicKey.fromString(derivedKeyResult).toAddress()).toHex();
|
|
83
|
-
Logger.log(`[PP CLIENT] Locking Script: ${lockingScript}`);
|
|
84
|
-
// Create the payment action
|
|
85
|
-
const paymentAction = await this.peerPayWalletClient.createAction({
|
|
86
|
-
description: 'PeerPay payment',
|
|
87
|
-
labels: ['peerpay'],
|
|
88
|
-
outputs: [{
|
|
89
|
-
satoshis: payment.amount,
|
|
90
|
-
lockingScript,
|
|
91
|
-
customInstructions: JSON.stringify({
|
|
92
|
-
derivationPrefix,
|
|
93
|
-
derivationSuffix,
|
|
94
|
-
payee: payment.recipient
|
|
95
|
-
}),
|
|
96
|
-
outputDescription: 'Payment for PeerPay transaction'
|
|
97
|
-
}],
|
|
98
|
-
options: {
|
|
99
|
-
randomizeOutputs: false
|
|
151
|
+
const result = await this.settlementModule.buildSettlement({
|
|
152
|
+
threadId: 'peerpay',
|
|
153
|
+
option: {
|
|
154
|
+
amountSatoshis: payment.amount,
|
|
155
|
+
payee: payment.recipient,
|
|
156
|
+
labels: ['peerpay'],
|
|
157
|
+
description: 'PeerPay payment'
|
|
100
158
|
}
|
|
101
|
-
},
|
|
102
|
-
|
|
103
|
-
|
|
159
|
+
}, {
|
|
160
|
+
wallet: this.peerPayWalletClient,
|
|
161
|
+
originator: this.originator,
|
|
162
|
+
now: () => Date.now(),
|
|
163
|
+
logger: Logger
|
|
164
|
+
});
|
|
165
|
+
if (result.action === 'terminate') {
|
|
166
|
+
if (result.termination.code === 'brc29.public_key_missing') {
|
|
167
|
+
throw new Error('Failed to derive recipient’s public key');
|
|
168
|
+
}
|
|
169
|
+
throw new Error(result.termination.message);
|
|
104
170
|
}
|
|
105
|
-
Logger.log('[PP CLIENT] Payment Action:',
|
|
171
|
+
Logger.log('[PP CLIENT] Payment Action Settlement Artifact:', result.artifact);
|
|
106
172
|
return {
|
|
107
173
|
customInstructions: {
|
|
108
|
-
derivationPrefix,
|
|
109
|
-
derivationSuffix
|
|
174
|
+
derivationPrefix: result.artifact.customInstructions.derivationPrefix,
|
|
175
|
+
derivationSuffix: result.artifact.customInstructions.derivationSuffix
|
|
110
176
|
},
|
|
111
|
-
transaction:
|
|
112
|
-
amount:
|
|
177
|
+
transaction: result.artifact.transaction,
|
|
178
|
+
amount: result.artifact.amountSatoshis
|
|
113
179
|
};
|
|
114
180
|
}
|
|
115
181
|
/**
|
|
@@ -190,10 +256,13 @@ export class PeerPayClient extends MessageBoxClient {
|
|
|
190
256
|
// Convert PeerMessage → IncomingPayment before calling onPayment
|
|
191
257
|
onMessage: (message) => {
|
|
192
258
|
Logger.log('[MB CLIENT] Received Live Payment:', message);
|
|
259
|
+
const token = safeParse(message.body);
|
|
260
|
+
if (token == null)
|
|
261
|
+
return;
|
|
193
262
|
const incomingPayment = {
|
|
194
263
|
messageId: message.messageId,
|
|
195
264
|
sender: message.sender,
|
|
196
|
-
token
|
|
265
|
+
token
|
|
197
266
|
};
|
|
198
267
|
Logger.log('[PP CLIENT] Converted PeerMessage to IncomingPayment:', incomingPayment);
|
|
199
268
|
onPayment(incomingPayment);
|
|
@@ -214,20 +283,28 @@ export class PeerPayClient extends MessageBoxClient {
|
|
|
214
283
|
async acceptPayment(payment) {
|
|
215
284
|
try {
|
|
216
285
|
Logger.log(`[PP CLIENT] Processing payment: ${JSON.stringify(payment, null, 2)}`);
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
286
|
+
const acceptResult = await this.settlementModule.acceptSettlement({
|
|
287
|
+
threadId: 'peerpay',
|
|
288
|
+
sender: payment.sender,
|
|
289
|
+
settlement: {
|
|
290
|
+
customInstructions: {
|
|
291
|
+
derivationPrefix: payment.token.customInstructions.derivationPrefix,
|
|
292
|
+
derivationSuffix: payment.token.customInstructions.derivationSuffix
|
|
293
|
+
},
|
|
294
|
+
transaction: toNumberArray(payment.token.transaction),
|
|
295
|
+
amountSatoshis: payment.token.amount,
|
|
296
|
+
outputIndex: payment.token.outputIndex ?? STANDARD_PAYMENT_OUTPUT_INDEX
|
|
297
|
+
}
|
|
298
|
+
}, {
|
|
299
|
+
wallet: this.peerPayWalletClient,
|
|
300
|
+
originator: this.originator,
|
|
301
|
+
now: () => Date.now(),
|
|
302
|
+
logger: Logger
|
|
303
|
+
});
|
|
304
|
+
if (acceptResult.action === 'terminate') {
|
|
305
|
+
throw new Error(acceptResult.termination.message);
|
|
306
|
+
}
|
|
307
|
+
const paymentResult = acceptResult.receiptData?.internalizeResult;
|
|
231
308
|
Logger.log(`[PP CLIENT] Payment internalized successfully: ${JSON.stringify(paymentResult, null, 2)}`);
|
|
232
309
|
Logger.log(`[PP CLIENT] Acknowledging payment with messageId: ${payment.messageId}`);
|
|
233
310
|
await this.acknowledgeMessage({ messageIds: [payment.messageId] });
|
|
@@ -306,12 +383,333 @@ export class PeerPayClient extends MessageBoxClient {
|
|
|
306
383
|
const messages = await this.listMessages({ messageBox: this.messageBox, host: overrideHost });
|
|
307
384
|
return messages.map((msg) => {
|
|
308
385
|
const parsedToken = safeParse(msg.body);
|
|
386
|
+
if (parsedToken == null)
|
|
387
|
+
return null;
|
|
309
388
|
return {
|
|
310
389
|
messageId: msg.messageId,
|
|
311
390
|
sender: msg.sender,
|
|
312
391
|
token: parsedToken
|
|
313
392
|
};
|
|
393
|
+
}).filter((p) => p != null);
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Lists all responses to payment requests from the payment_request_responses message box.
|
|
397
|
+
*
|
|
398
|
+
* Retrieves messages and parses each as a PaymentRequestResponse.
|
|
399
|
+
*
|
|
400
|
+
* @param {string} [hostOverride] - Optional host override for the message box server.
|
|
401
|
+
* @returns {Promise<PaymentRequestResponse[]>} Resolves with an array of payment request responses.
|
|
402
|
+
*/
|
|
403
|
+
async listPaymentRequestResponses(hostOverride) {
|
|
404
|
+
const messages = await this.listMessages({ messageBox: PAYMENT_REQUEST_RESPONSES_MESSAGEBOX, host: hostOverride });
|
|
405
|
+
return messages.map((msg) => safeParse(msg.body))
|
|
406
|
+
.filter((r) => r != null);
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Listens for incoming payment requests in real time via WebSocket.
|
|
410
|
+
*
|
|
411
|
+
* Wraps listenForLiveMessages on the payment_requests box and converts each
|
|
412
|
+
* incoming PeerMessage into an IncomingPaymentRequest before calling onRequest.
|
|
413
|
+
*
|
|
414
|
+
* @param {Object} params - Listener configuration.
|
|
415
|
+
* @param {Function} params.onRequest - Callback invoked when a new payment request arrives.
|
|
416
|
+
* @param {string} [params.overrideHost] - Optional host override for the WebSocket connection.
|
|
417
|
+
* @returns {Promise<void>} Resolves when the listener is established.
|
|
418
|
+
*/
|
|
419
|
+
async listenForLivePaymentRequests({ onRequest, overrideHost }) {
|
|
420
|
+
await this.listenForLiveMessages({
|
|
421
|
+
messageBox: PAYMENT_REQUESTS_MESSAGEBOX,
|
|
422
|
+
overrideHost,
|
|
423
|
+
onMessage: (message) => {
|
|
424
|
+
const body = safeParse(message.body);
|
|
425
|
+
if (body == null || body.cancelled === true)
|
|
426
|
+
return; // Skip cancellations and parse failures
|
|
427
|
+
const request = {
|
|
428
|
+
messageId: message.messageId,
|
|
429
|
+
sender: message.sender,
|
|
430
|
+
requestId: body.requestId,
|
|
431
|
+
amount: body.amount,
|
|
432
|
+
description: body.description,
|
|
433
|
+
expiresAt: body.expiresAt
|
|
434
|
+
};
|
|
435
|
+
onRequest(request);
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Listens for payment request responses in real time via WebSocket.
|
|
441
|
+
*
|
|
442
|
+
* Wraps listenForLiveMessages on the payment_request_responses box and converts each
|
|
443
|
+
* incoming PeerMessage into a PaymentRequestResponse before calling onResponse.
|
|
444
|
+
*
|
|
445
|
+
* @param {Object} params - Listener configuration.
|
|
446
|
+
* @param {Function} params.onResponse - Callback invoked when a new response arrives.
|
|
447
|
+
* @param {string} [params.overrideHost] - Optional host override for the WebSocket connection.
|
|
448
|
+
* @returns {Promise<void>} Resolves when the listener is established.
|
|
449
|
+
*/
|
|
450
|
+
async listenForLivePaymentRequestResponses({ onResponse, overrideHost }) {
|
|
451
|
+
await this.listenForLiveMessages({
|
|
452
|
+
messageBox: PAYMENT_REQUEST_RESPONSES_MESSAGEBOX,
|
|
453
|
+
overrideHost,
|
|
454
|
+
onMessage: (message) => {
|
|
455
|
+
const response = safeParse(message.body);
|
|
456
|
+
if (response == null)
|
|
457
|
+
return;
|
|
458
|
+
onResponse(response);
|
|
459
|
+
}
|
|
314
460
|
});
|
|
315
461
|
}
|
|
462
|
+
/**
|
|
463
|
+
* Fulfills an incoming payment request by sending the requested payment and
|
|
464
|
+
* notifying the requester with a 'paid' response in the payment_request_responses box.
|
|
465
|
+
* Also acknowledges the original request message.
|
|
466
|
+
*
|
|
467
|
+
* @param {Object} params - Fulfillment parameters.
|
|
468
|
+
* @param {IncomingPaymentRequest} params.request - The incoming payment request to fulfill.
|
|
469
|
+
* @param {string} [params.note] - Optional note to include in the response.
|
|
470
|
+
* @param {string} [hostOverride] - Optional host override for the message box server.
|
|
471
|
+
* @returns {Promise<void>} Resolves when payment is sent and acknowledgment is complete.
|
|
472
|
+
*/
|
|
473
|
+
async fulfillPaymentRequest(params, hostOverride) {
|
|
474
|
+
const { request, note } = params;
|
|
475
|
+
await this.sendPayment({ recipient: request.sender, amount: request.amount }, hostOverride);
|
|
476
|
+
const response = {
|
|
477
|
+
requestId: request.requestId,
|
|
478
|
+
status: 'paid',
|
|
479
|
+
amountPaid: request.amount,
|
|
480
|
+
...(note != null && { note })
|
|
481
|
+
};
|
|
482
|
+
await this.sendMessage({
|
|
483
|
+
recipient: request.sender,
|
|
484
|
+
messageBox: PAYMENT_REQUEST_RESPONSES_MESSAGEBOX,
|
|
485
|
+
body: JSON.stringify(response)
|
|
486
|
+
}, hostOverride);
|
|
487
|
+
await this.acknowledgeMessage({ messageIds: [request.messageId], host: hostOverride });
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Declines an incoming payment request by notifying the requester with a 'declined'
|
|
491
|
+
* response in the payment_request_responses box and acknowledging the original request.
|
|
492
|
+
*
|
|
493
|
+
* @param {Object} params - Decline parameters.
|
|
494
|
+
* @param {IncomingPaymentRequest} params.request - The incoming payment request to decline.
|
|
495
|
+
* @param {string} [params.note] - Optional note explaining why the request was declined.
|
|
496
|
+
* @param {string} [hostOverride] - Optional host override for the message box server.
|
|
497
|
+
* @returns {Promise<void>} Resolves when the response is sent and request is acknowledged.
|
|
498
|
+
*/
|
|
499
|
+
async declinePaymentRequest(params, hostOverride) {
|
|
500
|
+
const { request, note } = params;
|
|
501
|
+
const response = {
|
|
502
|
+
requestId: request.requestId,
|
|
503
|
+
status: 'declined',
|
|
504
|
+
...(note != null && { note })
|
|
505
|
+
};
|
|
506
|
+
await this.sendMessage({
|
|
507
|
+
recipient: request.sender,
|
|
508
|
+
messageBox: PAYMENT_REQUEST_RESPONSES_MESSAGEBOX,
|
|
509
|
+
body: JSON.stringify(response)
|
|
510
|
+
}, hostOverride);
|
|
511
|
+
await this.acknowledgeMessage({ messageIds: [request.messageId], host: hostOverride });
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Sends a payment request to a recipient via the payment_requests message box.
|
|
515
|
+
*
|
|
516
|
+
* Generates a unique requestId using createNonce, looks up the caller's identity key,
|
|
517
|
+
* and sends a PaymentRequestMessage to the recipient.
|
|
518
|
+
*
|
|
519
|
+
* @param {Object} params - Payment request parameters.
|
|
520
|
+
* @param {string} params.recipient - The identity key of the intended payer.
|
|
521
|
+
* @param {number} params.amount - The amount in satoshis being requested (must be > 0).
|
|
522
|
+
* @param {string} params.description - Human-readable reason for the payment request.
|
|
523
|
+
* @param {number} params.expiresAt - Unix timestamp (ms) when the request expires.
|
|
524
|
+
* @param {string} [hostOverride] - Optional host override for the message box server.
|
|
525
|
+
* @returns {Promise<{ requestId: string }>} The generated requestId for this request.
|
|
526
|
+
* @throws {Error} If amount is <= 0.
|
|
527
|
+
*/
|
|
528
|
+
async requestPayment(params, hostOverride) {
|
|
529
|
+
if (params.amount <= 0) {
|
|
530
|
+
throw new Error('Invalid payment request: amount must be greater than 0');
|
|
531
|
+
}
|
|
532
|
+
const requestId = await createNonce(this.peerPayWalletClient, 'self', this.originator);
|
|
533
|
+
const senderIdentityKey = await this.getIdentityKey();
|
|
534
|
+
const proofData = Array.from(new TextEncoder().encode(requestId + params.recipient));
|
|
535
|
+
const { hmac } = await this.peerPayWalletClient.createHmac({
|
|
536
|
+
data: proofData,
|
|
537
|
+
protocolID: [2, 'payment request auth'],
|
|
538
|
+
keyID: requestId,
|
|
539
|
+
counterparty: params.recipient
|
|
540
|
+
}, this.originator);
|
|
541
|
+
const requestProof = Array.from(hmac).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
542
|
+
const body = {
|
|
543
|
+
requestId,
|
|
544
|
+
amount: params.amount,
|
|
545
|
+
description: params.description,
|
|
546
|
+
expiresAt: params.expiresAt,
|
|
547
|
+
senderIdentityKey,
|
|
548
|
+
requestProof
|
|
549
|
+
};
|
|
550
|
+
try {
|
|
551
|
+
await this.sendMessage({
|
|
552
|
+
recipient: params.recipient,
|
|
553
|
+
messageBox: PAYMENT_REQUESTS_MESSAGEBOX,
|
|
554
|
+
body: JSON.stringify(body)
|
|
555
|
+
}, hostOverride);
|
|
556
|
+
}
|
|
557
|
+
catch (err) {
|
|
558
|
+
// Translate HTTP 403 (permission denied) into a user-friendly message.
|
|
559
|
+
if (typeof err?.message === 'string' && err.message.includes('403')) {
|
|
560
|
+
throw new Error('Payment request blocked — you are not on the recipient\'s whitelist.');
|
|
561
|
+
}
|
|
562
|
+
throw err;
|
|
563
|
+
}
|
|
564
|
+
return { requestId, requestProof };
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Lists all incoming payment requests from the payment_requests message box.
|
|
568
|
+
*
|
|
569
|
+
* Automatically filters out:
|
|
570
|
+
* - Expired requests (expiresAt < now), which are acknowledged and discarded.
|
|
571
|
+
* - Cancelled requests (a cancellation message with the same requestId exists),
|
|
572
|
+
* both the original and cancellation messages are acknowledged and discarded.
|
|
573
|
+
* - Out-of-range requests (when limits are provided), which are acknowledged and discarded.
|
|
574
|
+
*
|
|
575
|
+
* @param {string} [hostOverride] - Optional host override for the message box server.
|
|
576
|
+
* @param {PaymentRequestLimits} [limits] - Optional min/max satoshi limits for filtering.
|
|
577
|
+
* @returns {Promise<IncomingPaymentRequest[]>} Resolves with active, valid payment requests.
|
|
578
|
+
*/
|
|
579
|
+
async listIncomingPaymentRequests(hostOverride, limits) {
|
|
580
|
+
const messages = await this.listMessages({ messageBox: PAYMENT_REQUESTS_MESSAGEBOX, host: hostOverride });
|
|
581
|
+
const myIdentityKey = await this.getIdentityKey();
|
|
582
|
+
const now = Date.now();
|
|
583
|
+
// Parse and validate all messages, collecting malformed ones for ack
|
|
584
|
+
const malformedMessageIds = [];
|
|
585
|
+
const parsed = [];
|
|
586
|
+
for (const msg of messages) {
|
|
587
|
+
const body = safeParse(msg.body);
|
|
588
|
+
if (body != null && isValidPaymentRequestMessage(body)) {
|
|
589
|
+
parsed.push({ messageId: msg.messageId, sender: msg.sender, body });
|
|
590
|
+
}
|
|
591
|
+
else {
|
|
592
|
+
malformedMessageIds.push(msg.messageId);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
// Collect cancelled requestIds — verify HMAC proof before accepting
|
|
596
|
+
const cancelledRequests = new Map(); // requestId → sender
|
|
597
|
+
const cancelMessageIds = [];
|
|
598
|
+
for (const item of parsed) {
|
|
599
|
+
if (item.body.cancelled === true) {
|
|
600
|
+
// Verify cancellation HMAC proof
|
|
601
|
+
try {
|
|
602
|
+
const proofData = Array.from(new TextEncoder().encode(item.body.requestId + myIdentityKey));
|
|
603
|
+
await this.peerPayWalletClient.verifyHmac({
|
|
604
|
+
data: proofData,
|
|
605
|
+
hmac: hexToBytes(item.body.requestProof),
|
|
606
|
+
protocolID: [2, 'payment request auth'],
|
|
607
|
+
keyID: item.body.requestId,
|
|
608
|
+
counterparty: item.sender
|
|
609
|
+
}, this.originator);
|
|
610
|
+
cancelledRequests.set(item.body.requestId, item.sender);
|
|
611
|
+
cancelMessageIds.push(item.messageId);
|
|
612
|
+
}
|
|
613
|
+
catch {
|
|
614
|
+
Logger.warn(`[PP CLIENT] Invalid cancellation proof for requestId=${item.body.requestId}, discarding`);
|
|
615
|
+
malformedMessageIds.push(item.messageId);
|
|
616
|
+
}
|
|
617
|
+
continue;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
const expiredMessageIds = [];
|
|
621
|
+
const outOfRangeMessageIds = [];
|
|
622
|
+
const cancelledOriginalMessageIds = [];
|
|
623
|
+
const active = [];
|
|
624
|
+
for (const item of parsed) {
|
|
625
|
+
// Skip cancellation messages themselves (already collected above)
|
|
626
|
+
if (item.body.cancelled === true)
|
|
627
|
+
continue;
|
|
628
|
+
const { requestId, amount, description, expiresAt } = item.body;
|
|
629
|
+
// Filter expired
|
|
630
|
+
if (expiresAt < now) {
|
|
631
|
+
expiredMessageIds.push(item.messageId);
|
|
632
|
+
continue;
|
|
633
|
+
}
|
|
634
|
+
// Filter cancelled originals — only if cancellation came from the same sender
|
|
635
|
+
if (cancelledRequests.has(requestId) && cancelledRequests.get(requestId) === item.sender) {
|
|
636
|
+
cancelledOriginalMessageIds.push(item.messageId);
|
|
637
|
+
continue;
|
|
638
|
+
}
|
|
639
|
+
// Filter out-of-range — apply defaults for any missing limit fields
|
|
640
|
+
const effectiveMin = limits?.minAmount ?? DEFAULT_PAYMENT_REQUEST_MIN_AMOUNT;
|
|
641
|
+
const effectiveMax = limits?.maxAmount ?? DEFAULT_PAYMENT_REQUEST_MAX_AMOUNT;
|
|
642
|
+
if (amount < effectiveMin || amount > effectiveMax) {
|
|
643
|
+
outOfRangeMessageIds.push(item.messageId);
|
|
644
|
+
continue;
|
|
645
|
+
}
|
|
646
|
+
// Verify HMAC proof — ensures message came from claimed sender
|
|
647
|
+
try {
|
|
648
|
+
const proofData = Array.from(new TextEncoder().encode(requestId + myIdentityKey));
|
|
649
|
+
await this.peerPayWalletClient.verifyHmac({
|
|
650
|
+
data: proofData,
|
|
651
|
+
hmac: hexToBytes(item.body.requestProof),
|
|
652
|
+
protocolID: [2, 'payment request auth'],
|
|
653
|
+
keyID: requestId,
|
|
654
|
+
counterparty: item.sender
|
|
655
|
+
}, this.originator);
|
|
656
|
+
}
|
|
657
|
+
catch {
|
|
658
|
+
Logger.warn(`[PP CLIENT] Invalid requestProof for requestId=${requestId}, discarding`);
|
|
659
|
+
malformedMessageIds.push(item.messageId);
|
|
660
|
+
continue;
|
|
661
|
+
}
|
|
662
|
+
active.push({
|
|
663
|
+
messageId: item.messageId,
|
|
664
|
+
sender: item.sender,
|
|
665
|
+
requestId,
|
|
666
|
+
amount,
|
|
667
|
+
description,
|
|
668
|
+
expiresAt
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
// Acknowledge expired
|
|
672
|
+
if (expiredMessageIds.length > 0) {
|
|
673
|
+
await this.acknowledgeMessage({ messageIds: expiredMessageIds, host: hostOverride });
|
|
674
|
+
}
|
|
675
|
+
// Acknowledge cancelled originals + cancel messages together
|
|
676
|
+
const cancelAckIds = [...cancelledOriginalMessageIds, ...cancelMessageIds];
|
|
677
|
+
if (cancelAckIds.length > 0) {
|
|
678
|
+
await this.acknowledgeMessage({ messageIds: cancelAckIds, host: hostOverride });
|
|
679
|
+
}
|
|
680
|
+
// Acknowledge out-of-range
|
|
681
|
+
if (outOfRangeMessageIds.length > 0) {
|
|
682
|
+
await this.acknowledgeMessage({ messageIds: outOfRangeMessageIds, host: hostOverride });
|
|
683
|
+
}
|
|
684
|
+
// Acknowledge malformed messages so they don't reappear
|
|
685
|
+
if (malformedMessageIds.length > 0) {
|
|
686
|
+
await this.acknowledgeMessage({ messageIds: malformedMessageIds, host: hostOverride });
|
|
687
|
+
}
|
|
688
|
+
return active;
|
|
689
|
+
}
|
|
690
|
+
/**
|
|
691
|
+
* Cancels a previously sent payment request by sending a cancellation message
|
|
692
|
+
* with the same requestId and `cancelled: true`.
|
|
693
|
+
*
|
|
694
|
+
* @param {Object} params - Cancellation parameters.
|
|
695
|
+
* @param {string} params.recipient - The identity key of the recipient of the original request.
|
|
696
|
+
* @param {string} params.requestId - The requestId of the payment request to cancel.
|
|
697
|
+
* @param {string} [hostOverride] - Optional host override for the message box server.
|
|
698
|
+
* @returns {Promise<void>} Resolves when the cancellation message has been sent.
|
|
699
|
+
*/
|
|
700
|
+
async cancelPaymentRequest(params, hostOverride) {
|
|
701
|
+
const senderIdentityKey = await this.getIdentityKey();
|
|
702
|
+
const body = {
|
|
703
|
+
requestId: params.requestId,
|
|
704
|
+
senderIdentityKey,
|
|
705
|
+
requestProof: params.requestProof,
|
|
706
|
+
cancelled: true
|
|
707
|
+
};
|
|
708
|
+
await this.sendMessage({
|
|
709
|
+
recipient: params.recipient,
|
|
710
|
+
messageBox: PAYMENT_REQUESTS_MESSAGEBOX,
|
|
711
|
+
body: JSON.stringify(body)
|
|
712
|
+
}, hostOverride);
|
|
713
|
+
}
|
|
316
714
|
}
|
|
317
715
|
//# sourceMappingURL=PeerPayClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeerPayClient.js","sourceRoot":"","sources":["../../../src/PeerPayClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PeerPayClient.js","sourceRoot":"","sources":["../../../src/PeerPayClient.ts"],"names":[],"mappings":"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"}
|