@@ -2,8 +2,9 @@ import { Challenge, Credential, Receipt } from 'mppx'
22import { Mppx as Mppx_client , tempo as tempo_client } from 'mppx/client'
33import { Mppx as Mppx_server , tempo as tempo_server } from 'mppx/server'
44import type { Hex } from 'ox'
5+ import { Handler } from 'tempo.ts/server'
56import { encodeFunctionData , parseUnits } from 'viem'
6- import { prepareTransactionRequest , signTransaction } from 'viem/actions'
7+ import { getTransactionReceipt , prepareTransactionRequest , signTransaction } from 'viem/actions'
78import { Abis , Actions , Addresses , Tick } from 'viem/tempo'
89import { beforeAll , describe , expect , test } from 'vitest'
910import * as Http from '~test/Http.js'
@@ -487,6 +488,64 @@ describe('tempo', () => {
487488 httpServer . close ( )
488489 } )
489490
491+ test ( 'behavior: fee payer URL (withFeePayer transport)' , async ( ) => {
492+ const feePayerHandler = Handler . feePayer ( {
493+ account : accounts [ 0 ] ,
494+ client,
495+ } )
496+ const feePayerServer = await Http . createServer ( feePayerHandler . listener )
497+
498+ const serverWithFeePayer = Mppx_server . create ( {
499+ methods : [
500+ tempo_server . charge ( {
501+ feePayer : feePayerServer . url ,
502+ getClient : ( ) => client ,
503+ currency : asset ,
504+ } ) ,
505+ ] ,
506+ realm,
507+ secretKey,
508+ } )
509+
510+ const mppx = Mppx_client . create ( {
511+ polyfill : false ,
512+ methods : [
513+ tempo_client ( {
514+ account : accounts [ 1 ] ,
515+ getClient : ( ) => client ,
516+ } ) ,
517+ ] ,
518+ } )
519+
520+ const httpServer = await Http . createServer ( async ( req , res ) => {
521+ const result = await Mppx_server . toNodeListener (
522+ serverWithFeePayer . charge ( {
523+ amount : '1' ,
524+ currency : asset ,
525+ recipient : accounts [ 0 ] . address ,
526+ } ) ,
527+ ) ( req , res )
528+ if ( result . status === 402 ) return
529+ res . end ( 'OK' )
530+ } )
531+
532+ const response = await mppx . fetch ( httpServer . url )
533+ expect ( response . status ) . toBe ( 200 )
534+
535+ const receipt = Receipt . fromResponse ( response )
536+ expect ( receipt . status ) . toBe ( 'success' )
537+
538+ const txReceipt = await getTransactionReceipt ( client , {
539+ hash : receipt . reference as Hex . Hex ,
540+ } )
541+ expect ( ( txReceipt as any ) . feePayer ) . toBe (
542+ accounts [ 0 ] . address . toLowerCase ( ) ,
543+ )
544+
545+ httpServer . close ( )
546+ feePayerServer . close ( )
547+ } )
548+
490549 test ( 'error: rejects fee-payer transaction with unauthorized calls' , async ( ) => {
491550 const httpServer = await Http . createServer ( async ( req , res ) => {
492551 const result = await Mppx_server . toNodeListener (
0 commit comments