@@ -50,58 +50,71 @@ describe('payment-request handler', () => {
50
50
const packageManager : IPackageManager = new PackageManager ( ) ;
51
51
packageManager . registerPackers ( [ new PlainPacker ( ) ] ) ;
52
52
53
- const paymentIntegrationHandlerFunc = async ( data : PaymentRequestDataInfo ) : Promise < string > => {
54
- const counterContractAbi = [
55
- {
56
- inputs : [
57
- {
58
- internalType : 'string' ,
59
- name : '' ,
60
- type : 'string'
61
- }
62
- ] ,
63
- name : 'Payments' ,
64
- outputs : [
65
- {
66
- internalType : 'string' ,
67
- name : 'issuerIdHash' ,
68
- type : 'string'
69
- }
70
- ] ,
71
- stateMutability : 'view' ,
72
- type : 'function'
73
- } ,
74
- {
75
- inputs : [
76
- {
77
- internalType : 'string' ,
78
- name : 'sessionIdHash' ,
79
- type : 'string'
80
- } ,
81
- {
82
- internalType : 'string' ,
83
- name : 'issuerIdHash' ,
84
- type : 'string'
85
- }
86
- ] ,
87
- name : 'pay' ,
88
- outputs : [ ] ,
89
- stateMutability : 'payable' ,
90
- type : 'function'
91
- }
92
- ] ;
53
+ const payContractAbi = [
54
+ {
55
+ inputs : [
56
+ {
57
+ internalType : 'string' ,
58
+ name : '' ,
59
+ type : 'string'
60
+ }
61
+ ] ,
62
+ name : 'Payments' ,
63
+ outputs : [
64
+ {
65
+ internalType : 'string' ,
66
+ name : 'issuerIdHash' ,
67
+ type : 'string'
68
+ }
69
+ ] ,
70
+ stateMutability : 'view' ,
71
+ type : 'function'
72
+ } ,
73
+ {
74
+ inputs : [
75
+ {
76
+ internalType : 'string' ,
77
+ name : 'sessionIdHash' ,
78
+ type : 'string'
79
+ } ,
80
+ {
81
+ internalType : 'string' ,
82
+ name : 'issuerIdHash' ,
83
+ type : 'string'
84
+ }
85
+ ] ,
86
+ name : 'pay' ,
87
+ outputs : [ ] ,
88
+ stateMutability : 'payable' ,
89
+ type : 'function'
90
+ }
91
+ ] ;
92
+
93
+ const paymentIntegrationHandlerFunc = async (
94
+ data : PaymentRequestDataInfo ,
95
+ txParams : unknown [ ]
96
+ ) : Promise < string > => {
93
97
const rpcProvider = new JsonRpcProvider ( RPC_URL ) ;
94
98
const ethSigner = new ethers . Wallet ( WALLET_KEY , rpcProvider ) ;
95
- const payContract = new Contract ( data . address , counterContractAbi , ethSigner ) ;
99
+ const payContract = new Contract ( data . address , payContractAbi , ethSigner ) ;
96
100
const options = { value : data . amount } ;
97
- const txData = await payContract . pay (
98
- ethers . hashMessage ( '<sessionidhere>' ) ,
99
- ethers . hashMessage ( '<issuer_did_here>' ) ,
100
- options
101
- ) ;
101
+ const txData = await payContract . pay ( ...txParams , options ) ;
102
102
return txData . hash ;
103
103
} ;
104
104
105
+ const paymentCheckIntegrationHandlerFunc = async (
106
+ txId : string ,
107
+ data : PaymentRequestDataInfo
108
+ ) : Promise < void > => {
109
+ const rpcProvider = new JsonRpcProvider ( RPC_URL ) ;
110
+
111
+ const tx = await rpcProvider . getTransaction ( txId ) ;
112
+
113
+ if ( tx ?. value !== BigInt ( data . amount ) ) {
114
+ throw new Error ( 'invalid value' ) ;
115
+ }
116
+ } ;
117
+
105
118
const paymentReqInfo : PaymentRequestInfo = {
106
119
credentials : [
107
120
{
@@ -173,7 +186,8 @@ describe('payment-request handler', () => {
173
186
{ }
174
187
) ;
175
188
const paymentMessageBytes = await paymentHandler . handlePaymentRequest ( msgBytesRequest , {
176
- paymentHandler : paymentUnitHandlerFunc
189
+ paymentHandler : paymentUnitHandlerFunc ,
190
+ txParams : [ '<session-id-hash>' , '<issuer-did-hash>' ]
177
191
} ) ;
178
192
const { unpackedMessage : paymentMessage } = await packageManager . unpack ( paymentMessageBytes ) ;
179
193
@@ -184,6 +198,27 @@ describe('payment-request handler', () => {
184
198
expect ( ( paymentMessage as PaymentMessage ) . body ?. payments [ 0 ] . paymentData . txID ) . to . be . not . empty ;
185
199
} ) ;
186
200
201
+ it ( 'payment handler' , async ( ) => {
202
+ const paymentRequest = createPaymentRequest ( userDID , issuerDID , [ paymentReqInfo ] ) ;
203
+ const msgBytesRequest = await packageManager . pack (
204
+ MediaType . PlainMessage ,
205
+ byteEncoder . encode ( JSON . stringify ( paymentRequest ) ) ,
206
+ { }
207
+ ) ;
208
+ const paymentMessageBytes = await paymentHandler . handlePaymentRequest ( msgBytesRequest , {
209
+ paymentHandler : paymentUnitHandlerFunc ,
210
+ txParams : [ '<session-id-hash>' , '<issuer-did-hash>' ]
211
+ } ) ;
212
+ const { unpackedMessage : paymentMessage } = await packageManager . unpack ( paymentMessageBytes ) ;
213
+
214
+ paymentHandler . handlePayment ( paymentMessage as PaymentMessage , {
215
+ paymentRequest,
216
+ checkPaymentHandler : async ( ) => {
217
+ Promise . resolve ( ) ;
218
+ }
219
+ } ) ;
220
+ } ) ;
221
+
187
222
it . skip ( 'payment-request handler (integration test)' , async ( ) => {
188
223
const paymentRequest = createPaymentRequest ( userDID , issuerDID , [ paymentReqInfo ] ) ;
189
224
const msgBytesRequest = await packageManager . pack (
@@ -192,7 +227,8 @@ describe('payment-request handler', () => {
192
227
{ }
193
228
) ;
194
229
const paymentMessageBytes = await paymentHandler . handlePaymentRequest ( msgBytesRequest , {
195
- paymentHandler : paymentIntegrationHandlerFunc
230
+ paymentHandler : paymentIntegrationHandlerFunc ,
231
+ txParams : [ '<session-id-hash>' , '<issuer-did-hash>' ]
196
232
} ) ;
197
233
const { unpackedMessage : paymentMessage } = await packageManager . unpack ( paymentMessageBytes ) ;
198
234
@@ -202,4 +238,23 @@ describe('payment-request handler', () => {
202
238
203
239
expect ( ( paymentMessage as PaymentMessage ) . body ?. payments [ 0 ] . paymentData . txID ) . to . be . not . empty ;
204
240
} ) ;
241
+
242
+ it . skip ( 'payment handler (integration test)' , async ( ) => {
243
+ const paymentRequest = createPaymentRequest ( userDID , issuerDID , [ paymentReqInfo ] ) ;
244
+ const msgBytesRequest = await packageManager . pack (
245
+ MediaType . PlainMessage ,
246
+ byteEncoder . encode ( JSON . stringify ( paymentRequest ) ) ,
247
+ { }
248
+ ) ;
249
+ const paymentMessageBytes = await paymentHandler . handlePaymentRequest ( msgBytesRequest , {
250
+ paymentHandler : paymentIntegrationHandlerFunc ,
251
+ txParams : [ '<session-id-hash>' , '<issuer-did-hash>' ]
252
+ } ) ;
253
+ const { unpackedMessage : paymentMessage } = await packageManager . unpack ( paymentMessageBytes ) ;
254
+
255
+ paymentHandler . handlePayment ( paymentMessage as PaymentMessage , {
256
+ paymentRequest,
257
+ checkPaymentHandler : paymentCheckIntegrationHandlerFunc
258
+ } ) ;
259
+ } ) ;
205
260
} ) ;
0 commit comments