mppx 0.6.28 → 0.6.29

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 (272) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/Challenge.d.ts.map +1 -1
  3. package/dist/Challenge.js +16 -10
  4. package/dist/Challenge.js.map +1 -1
  5. package/dist/Method.d.ts +1 -1
  6. package/dist/Method.d.ts.map +1 -1
  7. package/dist/client/Methods.d.ts +1 -0
  8. package/dist/client/Methods.d.ts.map +1 -1
  9. package/dist/client/Methods.js +1 -0
  10. package/dist/client/Methods.js.map +1 -1
  11. package/dist/client/Mppx.d.ts +3 -3
  12. package/dist/client/Mppx.d.ts.map +1 -1
  13. package/dist/client/Mppx.js +1 -0
  14. package/dist/client/Mppx.js.map +1 -1
  15. package/dist/client/Transport.d.ts +10 -3
  16. package/dist/client/Transport.d.ts.map +1 -1
  17. package/dist/client/Transport.js +60 -7
  18. package/dist/client/Transport.js.map +1 -1
  19. package/dist/client/index.d.ts +1 -1
  20. package/dist/client/index.d.ts.map +1 -1
  21. package/dist/client/index.js +1 -1
  22. package/dist/client/index.js.map +1 -1
  23. package/dist/client/internal/Fetch.d.ts +3 -0
  24. package/dist/client/internal/Fetch.d.ts.map +1 -1
  25. package/dist/client/internal/Fetch.js +12 -20
  26. package/dist/client/internal/Fetch.js.map +1 -1
  27. package/dist/evm/Assets.d.ts +2 -0
  28. package/dist/evm/Assets.d.ts.map +1 -0
  29. package/dist/evm/Assets.js +2 -0
  30. package/dist/evm/Assets.js.map +1 -0
  31. package/dist/evm/Chains.d.ts +5 -0
  32. package/dist/evm/Chains.d.ts.map +1 -0
  33. package/dist/evm/Chains.js +5 -0
  34. package/dist/evm/Chains.js.map +1 -0
  35. package/dist/evm/Methods.d.ts +68 -0
  36. package/dist/evm/Methods.d.ts.map +1 -0
  37. package/dist/evm/Methods.js +28 -0
  38. package/dist/evm/Methods.js.map +1 -0
  39. package/dist/evm/Types.d.ts +143 -0
  40. package/dist/evm/Types.d.ts.map +1 -0
  41. package/dist/evm/Types.js +102 -0
  42. package/dist/evm/Types.js.map +1 -0
  43. package/dist/evm/client/Charge.d.ts +102 -0
  44. package/dist/evm/client/Charge.d.ts.map +1 -0
  45. package/dist/evm/client/Charge.js +141 -0
  46. package/dist/evm/client/Charge.js.map +1 -0
  47. package/dist/evm/client/Methods.d.ts +81 -0
  48. package/dist/evm/client/Methods.d.ts.map +1 -0
  49. package/dist/evm/client/Methods.js +16 -0
  50. package/dist/evm/client/Methods.js.map +1 -0
  51. package/dist/evm/client/index.d.ts +6 -0
  52. package/dist/evm/client/index.d.ts.map +1 -0
  53. package/dist/evm/client/index.js +6 -0
  54. package/dist/evm/client/index.js.map +1 -0
  55. package/dist/evm/index.d.ts +9 -0
  56. package/dist/evm/index.d.ts.map +1 -0
  57. package/dist/evm/index.js +8 -0
  58. package/dist/evm/index.js.map +1 -0
  59. package/dist/evm/server/Charge.d.ts +62 -0
  60. package/dist/evm/server/Charge.d.ts.map +1 -0
  61. package/dist/evm/server/Charge.js +172 -0
  62. package/dist/evm/server/Charge.js.map +1 -0
  63. package/dist/evm/server/Methods.d.ts +80 -0
  64. package/dist/evm/server/Methods.d.ts.map +1 -0
  65. package/dist/evm/server/Methods.js +16 -0
  66. package/dist/evm/server/Methods.js.map +1 -0
  67. package/dist/evm/server/index.d.ts +6 -0
  68. package/dist/evm/server/index.d.ts.map +1 -0
  69. package/dist/evm/server/index.js +6 -0
  70. package/dist/evm/server/index.js.map +1 -0
  71. package/dist/index.d.ts +2 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +2 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/internal/HeaderCodec.d.ts +18 -0
  76. package/dist/internal/HeaderCodec.d.ts.map +1 -0
  77. package/dist/internal/HeaderCodec.js +31 -0
  78. package/dist/internal/HeaderCodec.js.map +1 -0
  79. package/dist/middlewares/elysia.d.ts.map +1 -1
  80. package/dist/middlewares/elysia.js +2 -3
  81. package/dist/middlewares/elysia.js.map +1 -1
  82. package/dist/middlewares/express.js +2 -1
  83. package/dist/middlewares/express.js.map +1 -1
  84. package/dist/proxy/internal/Headers.d.ts.map +1 -1
  85. package/dist/proxy/internal/Headers.js +11 -1
  86. package/dist/proxy/internal/Headers.js.map +1 -1
  87. package/dist/proxy/services/openai.d.ts.map +1 -1
  88. package/dist/proxy/services/openai.js +2 -0
  89. package/dist/proxy/services/openai.js.map +1 -1
  90. package/dist/server/Methods.d.ts +1 -0
  91. package/dist/server/Methods.d.ts.map +1 -1
  92. package/dist/server/Methods.js +1 -0
  93. package/dist/server/Methods.js.map +1 -1
  94. package/dist/server/Mppx.d.ts.map +1 -1
  95. package/dist/server/Mppx.js +90 -12
  96. package/dist/server/Mppx.js.map +1 -1
  97. package/dist/server/Transport.d.ts +10 -0
  98. package/dist/server/Transport.d.ts.map +1 -1
  99. package/dist/server/Transport.js +9 -0
  100. package/dist/server/Transport.js.map +1 -1
  101. package/dist/server/index.d.ts +1 -1
  102. package/dist/server/index.d.ts.map +1 -1
  103. package/dist/server/index.js +1 -1
  104. package/dist/server/index.js.map +1 -1
  105. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  106. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  107. package/dist/stripe/server/internal/html.gen.js +1 -1
  108. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  109. package/dist/tempo/client/ChannelOps.d.ts +3 -3
  110. package/dist/tempo/client/ChannelOps.d.ts.map +1 -1
  111. package/dist/tempo/client/ChannelOps.js +13 -6
  112. package/dist/tempo/client/ChannelOps.js.map +1 -1
  113. package/dist/tempo/client/Charge.d.ts.map +1 -1
  114. package/dist/tempo/client/Charge.js +8 -5
  115. package/dist/tempo/client/Charge.js.map +1 -1
  116. package/dist/tempo/client/Methods.d.ts +0 -1
  117. package/dist/tempo/client/Methods.d.ts.map +1 -1
  118. package/dist/tempo/client/Session.d.ts +2 -4
  119. package/dist/tempo/client/Session.d.ts.map +1 -1
  120. package/dist/tempo/client/Session.js +10 -12
  121. package/dist/tempo/client/Session.js.map +1 -1
  122. package/dist/tempo/client/SessionManager.d.ts +3 -3
  123. package/dist/tempo/client/SessionManager.d.ts.map +1 -1
  124. package/dist/tempo/client/SessionManager.js +1 -1
  125. package/dist/tempo/client/SessionManager.js.map +1 -1
  126. package/dist/tempo/internal/account.d.ts +5 -0
  127. package/dist/tempo/internal/account.d.ts.map +1 -1
  128. package/dist/tempo/internal/account.js +8 -0
  129. package/dist/tempo/internal/account.js.map +1 -1
  130. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  131. package/dist/tempo/internal/fee-payer.js +5 -2
  132. package/dist/tempo/internal/fee-payer.js.map +1 -1
  133. package/dist/tempo/server/Charge.d.ts.map +1 -1
  134. package/dist/tempo/server/Charge.js +23 -1
  135. package/dist/tempo/server/Charge.js.map +1 -1
  136. package/dist/tempo/server/Session.d.ts.map +1 -1
  137. package/dist/tempo/server/Session.js +13 -12
  138. package/dist/tempo/server/Session.js.map +1 -1
  139. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  140. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  141. package/dist/tempo/server/internal/html.gen.js +1 -1
  142. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  143. package/dist/tempo/session/Chain.d.ts +2 -0
  144. package/dist/tempo/session/Chain.d.ts.map +1 -1
  145. package/dist/tempo/session/Chain.js +8 -8
  146. package/dist/tempo/session/Chain.js.map +1 -1
  147. package/dist/tempo/session/Voucher.d.ts +4 -3
  148. package/dist/tempo/session/Voucher.d.ts.map +1 -1
  149. package/dist/tempo/session/Voucher.js +71 -44
  150. package/dist/tempo/session/Voucher.js.map +1 -1
  151. package/dist/tempo/session/Ws.d.ts.map +1 -1
  152. package/dist/tempo/session/Ws.js +15 -0
  153. package/dist/tempo/session/Ws.js.map +1 -1
  154. package/dist/tempo/subscription/KeyAuthorization.d.ts +2 -2
  155. package/dist/x402/Assets.d.ts +29 -0
  156. package/dist/x402/Assets.d.ts.map +1 -0
  157. package/dist/x402/Assets.js +46 -0
  158. package/dist/x402/Assets.js.map +1 -0
  159. package/dist/x402/Header.d.ts +14 -0
  160. package/dist/x402/Header.d.ts.map +1 -0
  161. package/dist/x402/Header.js +18 -0
  162. package/dist/x402/Header.js.map +1 -0
  163. package/dist/x402/Types.d.ts +289 -0
  164. package/dist/x402/Types.d.ts.map +1 -0
  165. package/dist/x402/Types.js +139 -0
  166. package/dist/x402/Types.js.map +1 -0
  167. package/dist/x402/client/Exact.d.ts +38 -0
  168. package/dist/x402/client/Exact.d.ts.map +1 -0
  169. package/dist/x402/client/Exact.js +141 -0
  170. package/dist/x402/client/Exact.js.map +1 -0
  171. package/dist/x402/index.d.ts +6 -0
  172. package/dist/x402/index.d.ts.map +1 -0
  173. package/dist/x402/index.js +6 -0
  174. package/dist/x402/index.js.map +1 -0
  175. package/dist/x402/internal/ChallengeBrand.d.ts +5 -0
  176. package/dist/x402/internal/ChallengeBrand.d.ts.map +1 -0
  177. package/dist/x402/internal/ChallengeBrand.js +13 -0
  178. package/dist/x402/internal/ChallengeBrand.js.map +1 -0
  179. package/dist/x402/internal/RouteBinding.d.ts +8 -0
  180. package/dist/x402/internal/RouteBinding.d.ts.map +1 -0
  181. package/dist/x402/internal/RouteBinding.js +12 -0
  182. package/dist/x402/internal/RouteBinding.js.map +1 -0
  183. package/dist/x402/server/EvmCharge.d.ts +50 -0
  184. package/dist/x402/server/EvmCharge.d.ts.map +1 -0
  185. package/dist/x402/server/EvmCharge.js +301 -0
  186. package/dist/x402/server/EvmCharge.js.map +1 -0
  187. package/dist/x402/server/Facilitator.d.ts +12 -0
  188. package/dist/x402/server/Facilitator.d.ts.map +1 -0
  189. package/dist/x402/server/Facilitator.js +42 -0
  190. package/dist/x402/server/Facilitator.js.map +1 -0
  191. package/package.json +41 -21
  192. package/src/Challenge.test.ts +28 -0
  193. package/src/Challenge.ts +17 -10
  194. package/src/Method.ts +1 -1
  195. package/src/client/Methods.ts +1 -0
  196. package/src/client/Mppx.ts +4 -3
  197. package/src/client/Transport.test.ts +165 -30
  198. package/src/client/Transport.ts +76 -8
  199. package/src/client/index.ts +1 -1
  200. package/src/client/internal/Fetch.test.ts +31 -2
  201. package/src/client/internal/Fetch.ts +26 -19
  202. package/src/evm/Assets.ts +1 -0
  203. package/src/evm/Chains.ts +5 -0
  204. package/src/evm/Methods.ts +44 -0
  205. package/src/evm/PublicInterface.test-d.ts +109 -0
  206. package/src/evm/Types.ts +140 -0
  207. package/src/evm/client/Charge.test.ts +99 -0
  208. package/src/evm/client/Charge.ts +198 -0
  209. package/src/evm/client/Methods.ts +19 -0
  210. package/src/evm/client/index.ts +5 -0
  211. package/src/evm/index.ts +13 -0
  212. package/src/evm/server/Charge.test.ts +199 -0
  213. package/src/evm/server/Charge.ts +283 -0
  214. package/src/evm/server/Methods.ts +22 -0
  215. package/src/evm/server/index.ts +5 -0
  216. package/src/index.ts +2 -0
  217. package/src/internal/HeaderCodec.ts +36 -0
  218. package/src/middlewares/elysia.test.ts +25 -0
  219. package/src/middlewares/elysia.ts +1 -2
  220. package/src/middlewares/express.test.ts +28 -0
  221. package/src/middlewares/express.ts +1 -1
  222. package/src/middlewares/hono.test.ts +138 -2
  223. package/src/middlewares/nextjs.test.ts +22 -0
  224. package/src/proxy/internal/Headers.test.ts +20 -0
  225. package/src/proxy/internal/Headers.ts +12 -1
  226. package/src/proxy/services/openai.test.ts +57 -1
  227. package/src/proxy/services/openai.ts +2 -0
  228. package/src/server/Methods.ts +1 -0
  229. package/src/server/Mppx.test.ts +244 -1
  230. package/src/server/Mppx.ts +124 -11
  231. package/src/server/NodeListener.test.ts +28 -1
  232. package/src/server/Transport.test.ts +19 -0
  233. package/src/server/Transport.ts +20 -0
  234. package/src/server/index.ts +1 -1
  235. package/src/stripe/server/internal/html.gen.ts +1 -1
  236. package/src/tempo/AccessKeyAuthorization.test.ts +231 -0
  237. package/src/tempo/client/ChannelOps.test.ts +61 -7
  238. package/src/tempo/client/ChannelOps.ts +18 -7
  239. package/src/tempo/client/Charge.test.ts +126 -0
  240. package/src/tempo/client/Charge.ts +10 -6
  241. package/src/tempo/client/Session.test.ts +130 -1
  242. package/src/tempo/client/Session.ts +12 -19
  243. package/src/tempo/client/SessionManager.test.ts +69 -2
  244. package/src/tempo/client/SessionManager.ts +4 -4
  245. package/src/tempo/internal/account.ts +13 -0
  246. package/src/tempo/internal/fee-payer.test.ts +32 -2
  247. package/src/tempo/internal/fee-payer.ts +6 -2
  248. package/src/tempo/server/Charge.test.ts +69 -0
  249. package/src/tempo/server/Charge.ts +32 -0
  250. package/src/tempo/server/Session.test.ts +30 -0
  251. package/src/tempo/server/Session.ts +15 -16
  252. package/src/tempo/server/internal/html.gen.ts +1 -1
  253. package/src/tempo/session/Chain.test.ts +4 -4
  254. package/src/tempo/session/Chain.ts +10 -6
  255. package/src/tempo/session/Voucher.test.ts +230 -1
  256. package/src/tempo/session/Voucher.ts +96 -48
  257. package/src/tempo/session/Ws.test.ts +71 -0
  258. package/src/tempo/session/Ws.ts +13 -0
  259. package/src/x402/Assets.ts +65 -0
  260. package/src/x402/Exact.e2e.test.ts +448 -0
  261. package/src/x402/Header.test.ts +73 -0
  262. package/src/x402/Header.ts +34 -0
  263. package/src/x402/PublicInterface.test-d.ts +39 -0
  264. package/src/x402/Types.ts +248 -0
  265. package/src/x402/client/Exact.test.ts +180 -0
  266. package/src/x402/client/Exact.ts +198 -0
  267. package/src/x402/index.ts +5 -0
  268. package/src/x402/internal/ChallengeBrand.ts +14 -0
  269. package/src/x402/internal/RouteBinding.ts +18 -0
  270. package/src/x402/server/EvmCharge.ts +394 -0
  271. package/src/x402/server/Facilitator.test.ts +111 -0
  272. package/src/x402/server/Facilitator.ts +56 -0
@@ -3654,6 +3654,75 @@ describe('tempo', () => {
3654
3654
  })
3655
3655
  expect(challenge.request.methodDetails?.supportedModes).toEqual(['pull'])
3656
3656
  })
3657
+
3658
+ test('challenge contains supportedModes from method defaults', async () => {
3659
+ const handler = Mppx_server.create({
3660
+ methods: [
3661
+ tempo_server.charge({
3662
+ getClient: () => client,
3663
+ account: accounts[0].address,
3664
+ currency: asset,
3665
+ supportedModes: ['pull'],
3666
+ }),
3667
+ ],
3668
+ realm,
3669
+ secretKey,
3670
+ })
3671
+
3672
+ const result = await handler.charge({ amount: '1' })(new Request('https://example.com'))
3673
+ expect(result.status).toBe(402)
3674
+ if (result.status !== 402) throw new Error()
3675
+
3676
+ const challenge = Challenge.fromResponse(result.challenge, {
3677
+ methods: [tempo_client.charge()],
3678
+ })
3679
+ expect(challenge.request.methodDetails?.supportedModes).toEqual(['pull'])
3680
+ })
3681
+
3682
+ test('stable binding contains supportedModes', () => {
3683
+ const method = tempo_server.charge({
3684
+ getClient: () => client,
3685
+ account: accounts[0].address,
3686
+ currency: asset,
3687
+ })
3688
+ const request = method.schema.request.parse({
3689
+ amount: '1',
3690
+ currency: asset,
3691
+ decimals: 6,
3692
+ supportedModes: ['pull'],
3693
+ })
3694
+
3695
+ expect(method.stableBinding?.(request)).toMatchObject({
3696
+ supportedModes: ['pull'],
3697
+ })
3698
+ })
3699
+
3700
+ test('challenge contains splits from method defaults', async () => {
3701
+ const split = { amount: '0.2', recipient: accounts[2].address }
3702
+ const handler = Mppx_server.create({
3703
+ methods: [
3704
+ tempo_server.charge({
3705
+ getClient: () => client,
3706
+ account: accounts[0].address,
3707
+ currency: asset,
3708
+ splits: [split],
3709
+ }),
3710
+ ],
3711
+ realm,
3712
+ secretKey,
3713
+ })
3714
+
3715
+ const result = await handler.charge({ amount: '1' })(new Request('https://example.com'))
3716
+ expect(result.status).toBe(402)
3717
+ if (result.status !== 402) throw new Error()
3718
+
3719
+ const challenge = Challenge.fromResponse(result.challenge, {
3720
+ methods: [tempo_client.charge()],
3721
+ })
3722
+ expect(challenge.request.methodDetails?.splits).toEqual([
3723
+ { amount: '200000', recipient: split.recipient },
3724
+ ])
3725
+ })
3657
3726
  })
3658
3727
 
3659
3728
  describe('attribution memo', () => {
@@ -63,6 +63,8 @@ export function charge<const parameters extends charge.Parameters>(
63
63
  feePayerPolicy,
64
64
  html,
65
65
  memo,
66
+ splits,
67
+ supportedModes,
66
68
  validateSender,
67
69
  waitForConfirmation = true,
68
70
  } = parameters
@@ -96,8 +98,12 @@ export function charge<const parameters extends charge.Parameters>(
96
98
  externalId,
97
99
  memo,
98
100
  recipient,
101
+ splits,
102
+ supportedModes,
99
103
  } as unknown as Defaults,
100
104
 
105
+ stableBinding: chargeBinding,
106
+
101
107
  html: html
102
108
  ? {
103
109
  config: {},
@@ -579,6 +585,32 @@ export declare namespace charge {
579
585
  type FeePayerPolicy = Partial<FeePayer.Policy>
580
586
  }
581
587
 
588
+ type ChargeRequest = z.output<typeof Methods.charge.schema.request>
589
+
590
+ function chargeBinding(request: ChargeRequest) {
591
+ // Exhaustively destructure so new charge request fields require an explicit binding decision.
592
+ const { amount, currency, description, externalId, methodDetails, recipient, ...requestRest } =
593
+ request
594
+ requestRest satisfies Record<string, never>
595
+
596
+ const { chainId, feePayer, memo, splits, supportedModes, ...methodDetailsRest } =
597
+ methodDetails ?? {}
598
+ methodDetailsRest satisfies Record<string, never>
599
+ void feePayer
600
+
601
+ return {
602
+ amount,
603
+ chainId,
604
+ currency,
605
+ description,
606
+ externalId,
607
+ memo,
608
+ recipient,
609
+ splits,
610
+ supportedModes,
611
+ }
612
+ }
613
+
582
614
  type ExpectedTransfer = {
583
615
  amount: string
584
616
  allowAnyMemo?: boolean | undefined
@@ -668,6 +668,36 @@ describe.runIf(isLocalnet)('session', () => {
668
668
  expect(ch!.highestVoucherAmount).toBe(2000000n)
669
669
  })
670
670
 
671
+ test('rejects voucher signed for route escrow instead of stored channel escrow', async () => {
672
+ const { channelId, serializedTransaction } = await createSignedOpenTransaction(10000000n)
673
+ const server = createServer()
674
+ await openServerChannel(server, channelId, serializedTransaction)
675
+
676
+ const routeEscrow = '0x0000000000000000000000000000000000000999' as Address
677
+ const signature = await signVoucher(
678
+ client,
679
+ payer,
680
+ { channelId, cumulativeAmount: 2000000n },
681
+ routeEscrow,
682
+ chain.id,
683
+ )
684
+
685
+ await expect(
686
+ server.verify({
687
+ credential: {
688
+ challenge: makeChallenge({ id: 'route-escrow-replay', channelId }),
689
+ payload: {
690
+ action: 'voucher' as const,
691
+ channelId,
692
+ cumulativeAmount: '2000000',
693
+ signature,
694
+ },
695
+ },
696
+ request: makeRequest({ escrowContract: routeEscrow }),
697
+ }),
698
+ ).rejects.toThrow(InvalidSignatureError)
699
+ })
700
+
671
701
  test('rejects non-increasing voucher replay', async () => {
672
702
  const { channelId, serializedTransaction } = await createSignedOpenTransaction(10000000n)
673
703
  const server = createServer()
@@ -141,7 +141,7 @@ export function session<const parameters extends session.Parameters>(
141
141
  unitType,
142
142
  } as unknown as Defaults,
143
143
 
144
- transport: transport as never,
144
+ transport,
145
145
 
146
146
  // TODO: dedupe `{charge,session}.request`
147
147
  async request({ credential, request }) {
@@ -226,6 +226,7 @@ export function session<const parameters extends session.Parameters>(
226
226
  payload,
227
227
  methodDetails,
228
228
  resolvedFeePayer,
229
+ methodDetails.feePayer === true,
229
230
  feePayerPolicy,
230
231
  waitForConfirmation,
231
232
  )
@@ -240,6 +241,7 @@ export function session<const parameters extends session.Parameters>(
240
241
  payload,
241
242
  methodDetails,
242
243
  resolvedFeePayer,
244
+ methodDetails.feePayer === true,
243
245
  feePayerPolicy,
244
246
  )
245
247
  lastOnChainVerified.set(sessionReceipt.channelId, Date.now())
@@ -530,10 +532,8 @@ async function verifyAndAcceptVoucher(parameters: {
530
532
  channelId: Hex
531
533
  voucher: SignedVoucher
532
534
  onChain: OnChainChannel
533
- methodDetails: SessionMethodDetails
534
535
  }): Promise<SessionReceipt> {
535
- const { store, minVoucherDelta, challenge, channel, channelId, voucher, onChain, methodDetails } =
536
- parameters
536
+ const { store, minVoucherDelta, challenge, channel, channelId, voucher, onChain } = parameters
537
537
 
538
538
  if (onChain.finalized) {
539
539
  throw new ChannelClosedError({ reason: 'channel is finalized on-chain' })
@@ -568,8 +568,8 @@ async function verifyAndAcceptVoucher(parameters: {
568
568
  }
569
569
 
570
570
  const isValid = await verifyVoucher(
571
- methodDetails.escrowContract,
572
- methodDetails.chainId,
571
+ channel.escrowContract,
572
+ channel.chainId,
573
573
  voucher,
574
574
  channel.authorizedSigner,
575
575
  )
@@ -635,6 +635,7 @@ async function handleOpen(
635
635
  payload: SessionCredentialPayload & { action: 'open' },
636
636
  methodDetails: SessionMethodDetails,
637
637
  feePayer: viem_Account | undefined,
638
+ isSponsored: boolean,
638
639
  feePayerPolicy: session.FeePayerPolicy | undefined,
639
640
  waitForConfirmation: boolean,
640
641
  ): Promise<SessionReceipt> {
@@ -687,6 +688,7 @@ async function handleOpen(
687
688
  challengeExpires: challenge.expires,
688
689
  feePayerPolicy,
689
690
  feePayer,
691
+ isSponsored,
690
692
  beforeBroadcast: async (pendingOnChain) => {
691
693
  await validateOpenVoucher(pendingOnChain)
692
694
  },
@@ -772,6 +774,7 @@ async function handleTopUp(
772
774
  payload: SessionCredentialPayload & { action: 'topUp' },
773
775
  methodDetails: SessionMethodDetails,
774
776
  feePayer: viem_Account | undefined,
777
+ isSponsored: boolean,
775
778
  feePayerPolicy: session.FeePayerPolicy | undefined,
776
779
  ): Promise<SessionReceipt> {
777
780
  const channelId = ChannelStore.normalizeChannelId(payload.channelId)
@@ -793,6 +796,7 @@ async function handleTopUp(
793
796
  challengeExpires: challenge.expires,
794
797
  feePayerPolicy,
795
798
  feePayer,
799
+ isSponsored,
796
800
  })
797
801
 
798
802
  const updated = await store.updateChannel(channelId, (current) => {
@@ -848,11 +852,7 @@ async function handleVoucher(
848
852
 
849
853
  const onChain = await (async () => {
850
854
  if (isStale) {
851
- const onChainChannel = await getOnChainChannel(
852
- client,
853
- methodDetails.escrowContract,
854
- channelId,
855
- )
855
+ const onChainChannel = await getOnChainChannel(client, channel.escrowContract, channelId)
856
856
  lastOnChainVerified.set(channelId, Date.now())
857
857
  // Persist closeRequestedAt so the cached path detects force-close
858
858
  // between re-queries.
@@ -883,7 +883,6 @@ async function handleVoucher(
883
883
  channelId,
884
884
  voucher,
885
885
  onChain,
886
- methodDetails,
887
886
  })
888
887
  }
889
888
 
@@ -910,7 +909,7 @@ async function handleClose(
910
909
 
911
910
  const voucher = parseVoucherFromPayload(channelId, payload.cumulativeAmount, payload.signature)
912
911
 
913
- const onChain = await getOnChainChannel(client, methodDetails.escrowContract, channelId)
912
+ const onChain = await getOnChainChannel(client, channel.escrowContract, channelId)
914
913
 
915
914
  if (onChain.finalized) {
916
915
  throw new ChannelClosedError({ reason: 'channel is finalized on-chain' })
@@ -936,8 +935,8 @@ async function handleClose(
936
935
  }
937
936
 
938
937
  const isValid = await verifyVoucher(
939
- methodDetails.escrowContract,
940
- methodDetails.chainId,
938
+ channel.escrowContract,
939
+ channel.chainId,
941
940
  voucher,
942
941
  channel.authorizedSigner,
943
942
  )
@@ -972,7 +971,7 @@ async function handleClose(
972
971
  sender: account?.address ?? client.account?.address,
973
972
  })
974
973
 
975
- txHash = await closeOnChain(client, methodDetails.escrowContract, voucher, {
974
+ txHash = await closeOnChain(client, channel.escrowContract, voucher, {
976
975
  ...(feePayer && account ? { feePayer, account } : { account }),
977
976
  candidateFeeTokens: [channel.token],
978
977
  })