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.
- package/CHANGELOG.md +17 -0
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +16 -10
- package/dist/Challenge.js.map +1 -1
- package/dist/Method.d.ts +1 -1
- package/dist/Method.d.ts.map +1 -1
- package/dist/client/Methods.d.ts +1 -0
- package/dist/client/Methods.d.ts.map +1 -1
- package/dist/client/Methods.js +1 -0
- package/dist/client/Methods.js.map +1 -1
- package/dist/client/Mppx.d.ts +3 -3
- package/dist/client/Mppx.d.ts.map +1 -1
- package/dist/client/Mppx.js +1 -0
- package/dist/client/Mppx.js.map +1 -1
- package/dist/client/Transport.d.ts +10 -3
- package/dist/client/Transport.d.ts.map +1 -1
- package/dist/client/Transport.js +60 -7
- package/dist/client/Transport.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal/Fetch.d.ts +3 -0
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +12 -20
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/evm/Assets.d.ts +2 -0
- package/dist/evm/Assets.d.ts.map +1 -0
- package/dist/evm/Assets.js +2 -0
- package/dist/evm/Assets.js.map +1 -0
- package/dist/evm/Chains.d.ts +5 -0
- package/dist/evm/Chains.d.ts.map +1 -0
- package/dist/evm/Chains.js +5 -0
- package/dist/evm/Chains.js.map +1 -0
- package/dist/evm/Methods.d.ts +68 -0
- package/dist/evm/Methods.d.ts.map +1 -0
- package/dist/evm/Methods.js +28 -0
- package/dist/evm/Methods.js.map +1 -0
- package/dist/evm/Types.d.ts +143 -0
- package/dist/evm/Types.d.ts.map +1 -0
- package/dist/evm/Types.js +102 -0
- package/dist/evm/Types.js.map +1 -0
- package/dist/evm/client/Charge.d.ts +102 -0
- package/dist/evm/client/Charge.d.ts.map +1 -0
- package/dist/evm/client/Charge.js +141 -0
- package/dist/evm/client/Charge.js.map +1 -0
- package/dist/evm/client/Methods.d.ts +81 -0
- package/dist/evm/client/Methods.d.ts.map +1 -0
- package/dist/evm/client/Methods.js +16 -0
- package/dist/evm/client/Methods.js.map +1 -0
- package/dist/evm/client/index.d.ts +6 -0
- package/dist/evm/client/index.d.ts.map +1 -0
- package/dist/evm/client/index.js +6 -0
- package/dist/evm/client/index.js.map +1 -0
- package/dist/evm/index.d.ts +9 -0
- package/dist/evm/index.d.ts.map +1 -0
- package/dist/evm/index.js +8 -0
- package/dist/evm/index.js.map +1 -0
- package/dist/evm/server/Charge.d.ts +62 -0
- package/dist/evm/server/Charge.d.ts.map +1 -0
- package/dist/evm/server/Charge.js +172 -0
- package/dist/evm/server/Charge.js.map +1 -0
- package/dist/evm/server/Methods.d.ts +80 -0
- package/dist/evm/server/Methods.d.ts.map +1 -0
- package/dist/evm/server/Methods.js +16 -0
- package/dist/evm/server/Methods.js.map +1 -0
- package/dist/evm/server/index.d.ts +6 -0
- package/dist/evm/server/index.d.ts.map +1 -0
- package/dist/evm/server/index.js +6 -0
- package/dist/evm/server/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/HeaderCodec.d.ts +18 -0
- package/dist/internal/HeaderCodec.d.ts.map +1 -0
- package/dist/internal/HeaderCodec.js +31 -0
- package/dist/internal/HeaderCodec.js.map +1 -0
- package/dist/middlewares/elysia.d.ts.map +1 -1
- package/dist/middlewares/elysia.js +2 -3
- package/dist/middlewares/elysia.js.map +1 -1
- package/dist/middlewares/express.js +2 -1
- package/dist/middlewares/express.js.map +1 -1
- package/dist/proxy/internal/Headers.d.ts.map +1 -1
- package/dist/proxy/internal/Headers.js +11 -1
- package/dist/proxy/internal/Headers.js.map +1 -1
- package/dist/proxy/services/openai.d.ts.map +1 -1
- package/dist/proxy/services/openai.js +2 -0
- package/dist/proxy/services/openai.js.map +1 -1
- package/dist/server/Methods.d.ts +1 -0
- package/dist/server/Methods.d.ts.map +1 -1
- package/dist/server/Methods.js +1 -0
- package/dist/server/Methods.js.map +1 -1
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +90 -12
- package/dist/server/Mppx.js.map +1 -1
- package/dist/server/Transport.d.ts +10 -0
- package/dist/server/Transport.d.ts.map +1 -1
- package/dist/server/Transport.js +9 -0
- package/dist/server/Transport.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/stripe/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/client/ChannelOps.d.ts +3 -3
- package/dist/tempo/client/ChannelOps.d.ts.map +1 -1
- package/dist/tempo/client/ChannelOps.js +13 -6
- package/dist/tempo/client/ChannelOps.js.map +1 -1
- package/dist/tempo/client/Charge.d.ts.map +1 -1
- package/dist/tempo/client/Charge.js +8 -5
- package/dist/tempo/client/Charge.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +0 -1
- package/dist/tempo/client/Methods.d.ts.map +1 -1
- package/dist/tempo/client/Session.d.ts +2 -4
- package/dist/tempo/client/Session.d.ts.map +1 -1
- package/dist/tempo/client/Session.js +10 -12
- package/dist/tempo/client/Session.js.map +1 -1
- package/dist/tempo/client/SessionManager.d.ts +3 -3
- package/dist/tempo/client/SessionManager.d.ts.map +1 -1
- package/dist/tempo/client/SessionManager.js +1 -1
- package/dist/tempo/client/SessionManager.js.map +1 -1
- package/dist/tempo/internal/account.d.ts +5 -0
- package/dist/tempo/internal/account.d.ts.map +1 -1
- package/dist/tempo/internal/account.js +8 -0
- package/dist/tempo/internal/account.js.map +1 -1
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.js +5 -2
- package/dist/tempo/internal/fee-payer.js.map +1 -1
- package/dist/tempo/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +23 -1
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Session.d.ts.map +1 -1
- package/dist/tempo/server/Session.js +13 -12
- package/dist/tempo/server/Session.js.map +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/session/Chain.d.ts +2 -0
- package/dist/tempo/session/Chain.d.ts.map +1 -1
- package/dist/tempo/session/Chain.js +8 -8
- package/dist/tempo/session/Chain.js.map +1 -1
- package/dist/tempo/session/Voucher.d.ts +4 -3
- package/dist/tempo/session/Voucher.d.ts.map +1 -1
- package/dist/tempo/session/Voucher.js +71 -44
- package/dist/tempo/session/Voucher.js.map +1 -1
- package/dist/tempo/session/Ws.d.ts.map +1 -1
- package/dist/tempo/session/Ws.js +15 -0
- package/dist/tempo/session/Ws.js.map +1 -1
- package/dist/tempo/subscription/KeyAuthorization.d.ts +2 -2
- package/dist/x402/Assets.d.ts +29 -0
- package/dist/x402/Assets.d.ts.map +1 -0
- package/dist/x402/Assets.js +46 -0
- package/dist/x402/Assets.js.map +1 -0
- package/dist/x402/Header.d.ts +14 -0
- package/dist/x402/Header.d.ts.map +1 -0
- package/dist/x402/Header.js +18 -0
- package/dist/x402/Header.js.map +1 -0
- package/dist/x402/Types.d.ts +289 -0
- package/dist/x402/Types.d.ts.map +1 -0
- package/dist/x402/Types.js +139 -0
- package/dist/x402/Types.js.map +1 -0
- package/dist/x402/client/Exact.d.ts +38 -0
- package/dist/x402/client/Exact.d.ts.map +1 -0
- package/dist/x402/client/Exact.js +141 -0
- package/dist/x402/client/Exact.js.map +1 -0
- package/dist/x402/index.d.ts +6 -0
- package/dist/x402/index.d.ts.map +1 -0
- package/dist/x402/index.js +6 -0
- package/dist/x402/index.js.map +1 -0
- package/dist/x402/internal/ChallengeBrand.d.ts +5 -0
- package/dist/x402/internal/ChallengeBrand.d.ts.map +1 -0
- package/dist/x402/internal/ChallengeBrand.js +13 -0
- package/dist/x402/internal/ChallengeBrand.js.map +1 -0
- package/dist/x402/internal/RouteBinding.d.ts +8 -0
- package/dist/x402/internal/RouteBinding.d.ts.map +1 -0
- package/dist/x402/internal/RouteBinding.js +12 -0
- package/dist/x402/internal/RouteBinding.js.map +1 -0
- package/dist/x402/server/EvmCharge.d.ts +50 -0
- package/dist/x402/server/EvmCharge.d.ts.map +1 -0
- package/dist/x402/server/EvmCharge.js +301 -0
- package/dist/x402/server/EvmCharge.js.map +1 -0
- package/dist/x402/server/Facilitator.d.ts +12 -0
- package/dist/x402/server/Facilitator.d.ts.map +1 -0
- package/dist/x402/server/Facilitator.js +42 -0
- package/dist/x402/server/Facilitator.js.map +1 -0
- package/package.json +41 -21
- package/src/Challenge.test.ts +28 -0
- package/src/Challenge.ts +17 -10
- package/src/Method.ts +1 -1
- package/src/client/Methods.ts +1 -0
- package/src/client/Mppx.ts +4 -3
- package/src/client/Transport.test.ts +165 -30
- package/src/client/Transport.ts +76 -8
- package/src/client/index.ts +1 -1
- package/src/client/internal/Fetch.test.ts +31 -2
- package/src/client/internal/Fetch.ts +26 -19
- package/src/evm/Assets.ts +1 -0
- package/src/evm/Chains.ts +5 -0
- package/src/evm/Methods.ts +44 -0
- package/src/evm/PublicInterface.test-d.ts +109 -0
- package/src/evm/Types.ts +140 -0
- package/src/evm/client/Charge.test.ts +99 -0
- package/src/evm/client/Charge.ts +198 -0
- package/src/evm/client/Methods.ts +19 -0
- package/src/evm/client/index.ts +5 -0
- package/src/evm/index.ts +13 -0
- package/src/evm/server/Charge.test.ts +199 -0
- package/src/evm/server/Charge.ts +283 -0
- package/src/evm/server/Methods.ts +22 -0
- package/src/evm/server/index.ts +5 -0
- package/src/index.ts +2 -0
- package/src/internal/HeaderCodec.ts +36 -0
- package/src/middlewares/elysia.test.ts +25 -0
- package/src/middlewares/elysia.ts +1 -2
- package/src/middlewares/express.test.ts +28 -0
- package/src/middlewares/express.ts +1 -1
- package/src/middlewares/hono.test.ts +138 -2
- package/src/middlewares/nextjs.test.ts +22 -0
- package/src/proxy/internal/Headers.test.ts +20 -0
- package/src/proxy/internal/Headers.ts +12 -1
- package/src/proxy/services/openai.test.ts +57 -1
- package/src/proxy/services/openai.ts +2 -0
- package/src/server/Methods.ts +1 -0
- package/src/server/Mppx.test.ts +244 -1
- package/src/server/Mppx.ts +124 -11
- package/src/server/NodeListener.test.ts +28 -1
- package/src/server/Transport.test.ts +19 -0
- package/src/server/Transport.ts +20 -0
- package/src/server/index.ts +1 -1
- package/src/stripe/server/internal/html.gen.ts +1 -1
- package/src/tempo/AccessKeyAuthorization.test.ts +231 -0
- package/src/tempo/client/ChannelOps.test.ts +61 -7
- package/src/tempo/client/ChannelOps.ts +18 -7
- package/src/tempo/client/Charge.test.ts +126 -0
- package/src/tempo/client/Charge.ts +10 -6
- package/src/tempo/client/Session.test.ts +130 -1
- package/src/tempo/client/Session.ts +12 -19
- package/src/tempo/client/SessionManager.test.ts +69 -2
- package/src/tempo/client/SessionManager.ts +4 -4
- package/src/tempo/internal/account.ts +13 -0
- package/src/tempo/internal/fee-payer.test.ts +32 -2
- package/src/tempo/internal/fee-payer.ts +6 -2
- package/src/tempo/server/Charge.test.ts +69 -0
- package/src/tempo/server/Charge.ts +32 -0
- package/src/tempo/server/Session.test.ts +30 -0
- package/src/tempo/server/Session.ts +15 -16
- package/src/tempo/server/internal/html.gen.ts +1 -1
- package/src/tempo/session/Chain.test.ts +4 -4
- package/src/tempo/session/Chain.ts +10 -6
- package/src/tempo/session/Voucher.test.ts +230 -1
- package/src/tempo/session/Voucher.ts +96 -48
- package/src/tempo/session/Ws.test.ts +71 -0
- package/src/tempo/session/Ws.ts +13 -0
- package/src/x402/Assets.ts +65 -0
- package/src/x402/Exact.e2e.test.ts +448 -0
- package/src/x402/Header.test.ts +73 -0
- package/src/x402/Header.ts +34 -0
- package/src/x402/PublicInterface.test-d.ts +39 -0
- package/src/x402/Types.ts +248 -0
- package/src/x402/client/Exact.test.ts +180 -0
- package/src/x402/client/Exact.ts +198 -0
- package/src/x402/index.ts +5 -0
- package/src/x402/internal/ChallengeBrand.ts +14 -0
- package/src/x402/internal/RouteBinding.ts +18 -0
- package/src/x402/server/EvmCharge.ts +394 -0
- package/src/x402/server/Facilitator.test.ts +111 -0
- 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
|
|
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
|
|
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
|
-
|
|
572
|
-
|
|
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,
|
|
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
|
-
|
|
940
|
-
|
|
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,
|
|
974
|
+
txHash = await closeOnChain(client, channel.escrowContract, voucher, {
|
|
976
975
|
...(feePayer && account ? { feePayer, account } : { account }),
|
|
977
976
|
candidateFeeTokens: [channel.token],
|
|
978
977
|
})
|