mppx 0.8.13 → 0.8.14

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 (123) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/Errors.d.ts +10 -0
  3. package/dist/Errors.d.ts.map +1 -1
  4. package/dist/Errors.js +11 -2
  5. package/dist/Errors.js.map +1 -1
  6. package/dist/Method.d.ts +105 -3
  7. package/dist/Method.d.ts.map +1 -1
  8. package/dist/Method.js +102 -2
  9. package/dist/Method.js.map +1 -1
  10. package/dist/client/internal/Fetch.d.ts.map +1 -1
  11. package/dist/client/internal/Fetch.js +12 -2
  12. package/dist/client/internal/Fetch.js.map +1 -1
  13. package/dist/client/internal/MethodChallenge.d.ts +17 -0
  14. package/dist/client/internal/MethodChallenge.d.ts.map +1 -0
  15. package/dist/client/internal/MethodChallenge.js +11 -0
  16. package/dist/client/internal/MethodChallenge.js.map +1 -0
  17. package/dist/server/Mppx.d.ts +23 -4
  18. package/dist/server/Mppx.d.ts.map +1 -1
  19. package/dist/server/Mppx.js +91 -82
  20. package/dist/server/Mppx.js.map +1 -1
  21. package/dist/tempo/client/Methods.d.ts +1 -0
  22. package/dist/tempo/client/Methods.d.ts.map +1 -1
  23. package/dist/tempo/internal/fee-payer.d.ts +1 -0
  24. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  25. package/dist/tempo/internal/fee-payer.js +7 -2
  26. package/dist/tempo/internal/fee-payer.js.map +1 -1
  27. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +1 -1
  28. package/dist/tempo/legacy/client/ChannelOps.js +2 -1
  29. package/dist/tempo/legacy/client/ChannelOps.js.map +1 -1
  30. package/dist/tempo/server/Charge.d.ts +38 -77
  31. package/dist/tempo/server/Charge.d.ts.map +1 -1
  32. package/dist/tempo/server/Charge.js +289 -209
  33. package/dist/tempo/server/Charge.js.map +1 -1
  34. package/dist/tempo/server/Methods.d.ts +12 -1
  35. package/dist/tempo/server/Methods.d.ts.map +1 -1
  36. package/dist/tempo/server/Methods.js +4 -0
  37. package/dist/tempo/server/Methods.js.map +1 -1
  38. package/dist/tempo/server/Relay.d.ts +48 -0
  39. package/dist/tempo/server/Relay.d.ts.map +1 -0
  40. package/dist/tempo/server/Relay.js +177 -0
  41. package/dist/tempo/server/Relay.js.map +1 -0
  42. package/dist/tempo/server/SponsorBudget.d.ts +59 -0
  43. package/dist/tempo/server/SponsorBudget.d.ts.map +1 -0
  44. package/dist/tempo/server/SponsorBudget.js +144 -0
  45. package/dist/tempo/server/SponsorBudget.js.map +1 -0
  46. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  47. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  48. package/dist/tempo/server/internal/html.gen.js +1 -1
  49. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  50. package/dist/tempo/session/client/ChannelOps.d.ts +7 -1
  51. package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -1
  52. package/dist/tempo/session/client/ChannelOps.js +9 -4
  53. package/dist/tempo/session/client/ChannelOps.js.map +1 -1
  54. package/dist/tempo/session/client/CredentialState.d.ts +5 -1
  55. package/dist/tempo/session/client/CredentialState.d.ts.map +1 -1
  56. package/dist/tempo/session/client/CredentialState.js +37 -19
  57. package/dist/tempo/session/client/CredentialState.js.map +1 -1
  58. package/dist/tempo/session/client/Runtime.d.ts +8 -0
  59. package/dist/tempo/session/client/Runtime.d.ts.map +1 -1
  60. package/dist/tempo/session/client/Runtime.js +17 -0
  61. package/dist/tempo/session/client/Runtime.js.map +1 -1
  62. package/dist/tempo/session/client/Session.d.ts +15 -5
  63. package/dist/tempo/session/client/Session.d.ts.map +1 -1
  64. package/dist/tempo/session/client/Session.js +93 -36
  65. package/dist/tempo/session/client/Session.js.map +1 -1
  66. package/dist/tempo/session/client/SessionManager.d.ts +8 -1
  67. package/dist/tempo/session/client/SessionManager.d.ts.map +1 -1
  68. package/dist/tempo/session/client/SessionManager.js +54 -26
  69. package/dist/tempo/session/client/SessionManager.js.map +1 -1
  70. package/dist/tempo/session/client/Transports.d.ts +7 -5
  71. package/dist/tempo/session/client/Transports.d.ts.map +1 -1
  72. package/dist/tempo/session/client/Transports.js +48 -24
  73. package/dist/tempo/session/client/Transports.js.map +1 -1
  74. package/dist/tempo/session/precompile/Chain.d.ts.map +1 -1
  75. package/dist/tempo/session/precompile/Chain.js +96 -8
  76. package/dist/tempo/session/precompile/Chain.js.map +1 -1
  77. package/dist/tempo/session/precompile/Channel.d.ts +2 -0
  78. package/dist/tempo/session/precompile/Channel.d.ts.map +1 -1
  79. package/dist/tempo/session/precompile/Channel.js +4 -0
  80. package/dist/tempo/session/precompile/Channel.js.map +1 -1
  81. package/dist/tempo/session/server/RequestState.js +3 -1
  82. package/dist/tempo/session/server/RequestState.js.map +1 -1
  83. package/package.json +1 -1
  84. package/src/Errors.test.ts +23 -0
  85. package/src/Errors.ts +21 -2
  86. package/src/Method.test.ts +102 -1
  87. package/src/Method.ts +241 -5
  88. package/src/client/Mppx.test-d.ts +3 -3
  89. package/src/client/internal/Fetch.ts +16 -7
  90. package/src/client/internal/MethodChallenge.ts +30 -0
  91. package/src/server/Mppx.test-d.ts +2 -0
  92. package/src/server/Mppx.test.ts +205 -0
  93. package/src/server/Mppx.ts +167 -103
  94. package/src/tempo/PublicExports.test-d.ts +20 -0
  95. package/src/tempo/internal/fee-payer.ts +7 -3
  96. package/src/tempo/legacy/client/ChannelOps.test.ts +7 -0
  97. package/src/tempo/legacy/client/ChannelOps.ts +2 -1
  98. package/src/tempo/server/Charge.test.ts +337 -63
  99. package/src/tempo/server/Charge.ts +435 -267
  100. package/src/tempo/server/Methods.ts +11 -0
  101. package/src/tempo/server/Relay.test.ts +523 -0
  102. package/src/tempo/server/Relay.ts +288 -0
  103. package/src/tempo/server/SponsorBudget.test.ts +125 -0
  104. package/src/tempo/server/SponsorBudget.ts +213 -0
  105. package/src/tempo/server/internal/html.gen.ts +1 -1
  106. package/src/tempo/session/client/ChannelOps.test.ts +17 -2
  107. package/src/tempo/session/client/ChannelOps.ts +12 -4
  108. package/src/tempo/session/client/CredentialState.ts +61 -20
  109. package/src/tempo/session/client/Runtime.test.ts +12 -0
  110. package/src/tempo/session/client/Runtime.ts +22 -0
  111. package/src/tempo/session/client/Session.test.ts +235 -2
  112. package/src/tempo/session/client/Session.ts +130 -41
  113. package/src/tempo/session/client/SessionManager.test.ts +102 -4
  114. package/src/tempo/session/client/SessionManager.ts +71 -27
  115. package/src/tempo/session/client/Transports.test.ts +32 -1
  116. package/src/tempo/session/client/Transports.ts +79 -35
  117. package/src/tempo/session/precompile/Chain.integration.test.ts +19 -1
  118. package/src/tempo/session/precompile/Chain.test.ts +197 -10
  119. package/src/tempo/session/precompile/Chain.ts +102 -8
  120. package/src/tempo/session/precompile/Channel.test.ts +9 -0
  121. package/src/tempo/session/precompile/Channel.ts +5 -0
  122. package/src/tempo/session/server/RequestState.test.ts +8 -1
  123. package/src/tempo/session/server/RequestState.ts +2 -2
@@ -3,6 +3,8 @@ import * as Method from '../../../Method.js';
3
3
  import * as Account from '../../../viem/Account.js';
4
4
  import * as Client from '../../../viem/Client.js';
5
5
  import type { ResolveAccount as ResolveAccount_, ResolveAccountInfo as ResolveAccountInfo_ } from '../../client/ResolveAccount.js';
6
+ import * as AutoSwap from '../../internal/auto-swap.js';
7
+ import * as Channel from '../precompile/Channel.js';
6
8
  import { type ChannelEntry } from './ChannelOps.js';
7
9
  import { type ChannelStore } from './ChannelStore.js';
8
10
  export { sessionContextSchema, type SessionContext } from './CredentialState.js';
@@ -23,7 +25,7 @@ export declare function session(parameters?: session.Parameters): Method.Client<
23
25
  authorizedSigner: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
24
26
  channelId: import("zod/mini").ZodMiniString<string>;
25
27
  cumulativeAmount: import("zod/mini").ZodMiniString<string>;
26
- descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../precompile/Protocol.js").ChannelDescriptor, import("../precompile/Protocol.js").ChannelDescriptor>>;
28
+ descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<Channel.ChannelDescriptor, Channel.ChannelDescriptor>>;
27
29
  signature: import("zod/mini").ZodMiniString<string>;
28
30
  transaction: import("zod/mini").ZodMiniString<string>;
29
31
  type: import("zod/mini").ZodMiniLiteral<"transaction">;
@@ -31,20 +33,20 @@ export declare function session(parameters?: session.Parameters): Method.Client<
31
33
  action: import("zod/mini").ZodMiniLiteral<"topUp">;
32
34
  additionalDeposit: import("zod/mini").ZodMiniString<string>;
33
35
  channelId: import("zod/mini").ZodMiniString<string>;
34
- descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../precompile/Protocol.js").ChannelDescriptor, import("../precompile/Protocol.js").ChannelDescriptor>>;
36
+ descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<Channel.ChannelDescriptor, Channel.ChannelDescriptor>>;
35
37
  transaction: import("zod/mini").ZodMiniString<string>;
36
38
  type: import("zod/mini").ZodMiniLiteral<"transaction">;
37
39
  }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
38
40
  action: import("zod/mini").ZodMiniLiteral<"voucher">;
39
41
  channelId: import("zod/mini").ZodMiniString<string>;
40
42
  cumulativeAmount: import("zod/mini").ZodMiniString<string>;
41
- descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../precompile/Protocol.js").ChannelDescriptor, import("../precompile/Protocol.js").ChannelDescriptor>>;
43
+ descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<Channel.ChannelDescriptor, Channel.ChannelDescriptor>>;
42
44
  signature: import("zod/mini").ZodMiniString<string>;
43
45
  }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
44
46
  action: import("zod/mini").ZodMiniLiteral<"close">;
45
47
  channelId: import("zod/mini").ZodMiniString<string>;
46
48
  cumulativeAmount: import("zod/mini").ZodMiniString<string>;
47
- descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../precompile/Protocol.js").ChannelDescriptor, import("../precompile/Protocol.js").ChannelDescriptor>>;
49
+ descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<Channel.ChannelDescriptor, Channel.ChannelDescriptor>>;
48
50
  signature: import("zod/mini").ZodMiniString<string>;
49
51
  }, import("zod/v4/core").$strip>], "action">;
50
52
  };
@@ -101,6 +103,7 @@ export declare function session(parameters?: session.Parameters): Method.Client<
101
103
  };
102
104
  }, import("zod/mini").ZodMiniObject<{
103
105
  account: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<`0x${string}` | Account.Account | undefined, `0x${string}` | Account.Account | undefined>>;
106
+ autoSwap: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<AutoSwap.resolve.Value, AutoSwap.resolve.Value>>;
104
107
  action: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniEnum<{
105
108
  open: "open";
106
109
  topUp: "topUp";
@@ -111,7 +114,7 @@ export declare function session(parameters?: session.Parameters): Method.Client<
111
114
  cumulativeAmount: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
112
115
  cumulativeAmountRaw: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
113
116
  transaction: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<`0x${string}`, `0x${string}`>>;
114
- descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../precompile/Protocol.js").ChannelDescriptor, import("../precompile/Protocol.js").ChannelDescriptor>>;
117
+ descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<Channel.ChannelDescriptor, Channel.ChannelDescriptor>>;
115
118
  additionalDeposit: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
116
119
  additionalDepositRaw: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
117
120
  depositRaw: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
@@ -121,6 +124,8 @@ export declare namespace session {
121
124
  type ResolveAccount = ResolveAccount_;
122
125
  type ResolveAccountInfo = ResolveAccountInfo_;
123
126
  type Parameters = Account.getResolver.Parameters & Client.getResolver.Parameters & {
127
+ /** Automatically acquire the session currency from fallback stablecoins before open/top-up. */
128
+ autoSwap?: AutoSwap.resolve.Value | undefined;
124
129
  /** Pluggable persistence for reusable channels. Defaults to an in-memory store. */
125
130
  channelStore?: ChannelStore | undefined;
126
131
  /** Token decimals for parsing human-readable amounts (default: 6). */
@@ -129,6 +134,11 @@ export declare namespace session {
129
134
  escrow?: Address | undefined;
130
135
  /** Maximum channel deposit in human-readable units. Caps server-suggested opens and automatic top-ups. */
131
136
  maxDeposit?: string | undefined;
137
+ /**
138
+ * Preferred automatic top-up size in human-readable units. When omitted,
139
+ * a bounded server `suggestedDeposit` is preferred, then the exact shortfall.
140
+ */
141
+ topUpAmount?: string | undefined;
132
142
  /** Called whenever channel state changes. */
133
143
  onChannelUpdate?: ((entry: ChannelEntry) => void) | undefined;
134
144
  /** Selects the account that signs this session credential after the challenge is known. */
@@ -1 +1 @@
1
- {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/client/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,MAAM,CAAA;AAM/C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAA;AACjD,OAAO,KAAK,EACV,cAAc,IAAI,eAAe,EACjC,kBAAkB,IAAI,mBAAmB,EAC1C,MAAM,gCAAgC,CAAA;AAIvC,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAkBzE,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEhF;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,UAAU,GAAE,OAAO,CAAC,UAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAgI1D;AAED,qEAAqE;AACrE,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,cAAc,GAAG,eAAe,CAAA;IACrC,KAAK,kBAAkB,GAAG,mBAAmB,CAAA;IAE7C,KAAK,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,GAC9C,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG;QAC9B,mFAAmF;QACnF,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;QACvC,sEAAsE;QACtE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,2CAA2C;QAC3C,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC5B,0GAA0G;QAC1G,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC/B,6CAA6C;QAC7C,eAAe,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;QAC7D,2FAA2F;QAC3F,cAAc,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;KAC5C,CAAA;CACJ"}
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/client/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,MAAM,CAAA;AAM/C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAA;AACjD,OAAO,KAAK,EACV,cAAc,IAAI,eAAe,EACjC,kBAAkB,IAAI,mBAAmB,EAC1C,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,6BAA6B,CAAA;AAGvD,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AAMnD,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAsBzE,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEhF;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,UAAU,GAAE,OAAO,CAAC,UAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAwM1D;AAED,qEAAqE;AACrE,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,cAAc,GAAG,eAAe,CAAA;IACrC,KAAK,kBAAkB,GAAG,mBAAmB,CAAA;IAE7C,KAAK,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,GAC9C,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG;QAC9B,+FAA+F;QAC/F,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAA;QAC7C,mFAAmF;QACnF,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;QACvC,sEAAsE;QACtE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,2CAA2C;QAC3C,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC5B,0GAA0G;QAC1G,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC/B;;;WAGG;QACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,6CAA6C;QAC7C,eAAe,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;QAC7D,2FAA2F;QAC3F,cAAc,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;KAC5C,CAAA;CACJ"}
@@ -1,19 +1,21 @@
1
1
  import { parseUnits } from 'viem';
2
2
  import { tempo as tempo_chain } from 'viem/chains';
3
+ import * as MethodChallenge from '../../../client/internal/MethodChallenge.js';
3
4
  import * as MethodResponse from '../../../client/internal/MethodResponse.js';
4
- import * as Constants from '../../../Constants.js';
5
5
  import * as Credential from '../../../Credential.js';
6
6
  import * as Method from '../../../Method.js';
7
7
  import * as Account from '../../../viem/Account.js';
8
8
  import * as Client from '../../../viem/Client.js';
9
+ import * as AutoSwap from '../../internal/auto-swap.js';
9
10
  import * as defaults from '../../internal/defaults.js';
10
11
  import * as Methods from '../../Methods.js';
11
- import { isEventStream, requireSessionCredentialContext } from '../precompile/Protocol.js';
12
+ import * as Channel from '../precompile/Channel.js';
13
+ import { isEventStream, readSessionChallengeAmount, requireSessionCredentialContext, } from '../precompile/Protocol.js';
12
14
  import { serializeCredential } from './ChannelOps.js';
13
15
  import { createChannelStore } from './ChannelStore.js';
14
- import { executeCredentialPlan, planCredential, resolveChallengeContext, resolveRecoverContext, sessionContextSchema, } from './CredentialState.js';
15
- import { assertWithinMaxDeposit } from './Runtime.js';
16
- import { handleSseNeedVoucher, isTempoSessionChallenge, managementInput, postTopUp, wrapSseResponse, } from './Transports.js';
16
+ import { canSignDescriptor, executeCredentialPlan, hasSessionAction, planCredential, resolveChallengeContext, resolveRecoverContext, sessionContextSchema, } from './CredentialState.js';
17
+ import { assertWithinMaxDeposit, resolveAutomaticTopUp } from './Runtime.js';
18
+ import { handleSseNeedVoucher, isTip1034SessionChallenge, postTopUp, wrapSseResponse, } from './Transports.js';
17
19
  export { sessionContextSchema } from './CredentialState.js';
18
20
  /**
19
21
  * Creates the low-level TIP-1034 session payment method for use with `Mppx.create()`.
@@ -23,7 +25,7 @@ export { sessionContextSchema } from './CredentialState.js';
23
25
  * channel descriptor).
24
26
  */
25
27
  export function session(parameters = {}) {
26
- const { account, channelStore, decimals = defaults.decimals, escrow: escrowOverride, getClient: getClientParameter, maxDeposit: maxDepositParameter, onChannelUpdate, resolveAccount, } = parameters;
28
+ const { account, autoSwap: autoSwapParameter, channelStore, decimals = defaults.decimals, escrow: escrowOverride, getClient: getClientParameter, maxDeposit: maxDepositParameter, topUpAmount: topUpAmountParameter, onChannelUpdate, resolveAccount, } = parameters;
27
29
  const getClient = Client.getResolver({
28
30
  chain: tempo_chain,
29
31
  getClient: getClientParameter,
@@ -31,12 +33,26 @@ export function session(parameters = {}) {
31
33
  });
32
34
  const getAccount = Account.getResolver({ account });
33
35
  const maxDeposit = maxDepositParameter !== undefined ? parseUnits(maxDepositParameter, decimals) : undefined;
36
+ const topUpAmount = topUpAmountParameter !== undefined ? parseUnits(topUpAmountParameter, decimals) : undefined;
34
37
  const store = channelStore ?? createChannelStore();
35
38
  const sink = { store, notifyUpdate: (entry) => onChannelUpdate?.(entry) };
39
+ const resolveCredentialAccount = async (resolved, context, entry) => {
40
+ const defaultAccount = getAccount(resolved.client, context);
41
+ const descriptor = context?.action
42
+ ? context.descriptor
43
+ : (entry?.descriptor ??
44
+ resolveRecoverContext({ context, snapshot: resolved.snapshot })?.descriptor);
45
+ return ((await resolveAccount?.({
46
+ account: defaultAccount,
47
+ chainId: resolved.chainId,
48
+ operation: {
49
+ kind: 'authorizePaymentChannel',
50
+ ...(descriptor ? { authority: Channel.resolveAuthorizedSigner(descriptor) } : {}),
51
+ },
52
+ })) ?? defaultAccount);
53
+ };
36
54
  const method = Method.toClient(Methods.session, {
37
- canHandleChallenge({ challenge }) {
38
- return (Constants.getMethodDetail(challenge.request.methodDetails, Constants.MethodDetailKeys.sessionProtocol) === Constants.SessionProtocols.v2);
39
- },
55
+ canHandleChallenge: ({ challenge }) => isTip1034SessionChallenge(challenge),
40
56
  context: sessionContextSchema,
41
57
  async createCredential({ challenge, context }) {
42
58
  const resolved = await resolveChallengeContext({
@@ -44,21 +60,8 @@ export function session(parameters = {}) {
44
60
  escrowOverride,
45
61
  getClient,
46
62
  });
47
- const defaultAccount = getAccount(resolved.client, context);
48
63
  const entry = await store.get(resolved.key);
49
- // Resolve recovery hints early so account selection can satisfy an existing channel authority.
50
- const recoverContext = resolveRecoverContext({ context, snapshot: resolved.snapshot });
51
- const descriptor = context?.action
52
- ? context.descriptor
53
- : (entry?.descriptor ?? recoverContext?.descriptor);
54
- const account = (await resolveAccount?.({
55
- account: defaultAccount,
56
- chainId: resolved.chainId,
57
- operation: {
58
- kind: 'authorizePaymentChannel',
59
- ...(descriptor ? { authority: descriptor.authorizedSigner } : {}),
60
- },
61
- })) ?? defaultAccount;
64
+ const account = await resolveCredentialAccount(resolved, context, entry);
62
65
  const payload = await executeCredentialPlan(planCredential({
63
66
  account,
64
67
  entry,
@@ -66,12 +69,72 @@ export function session(parameters = {}) {
66
69
  decimals,
67
70
  maxDeposit,
68
71
  resolved,
69
- }), sink);
72
+ }), sink, AutoSwap.resolve(context?.autoSwap ?? autoSwapParameter, AutoSwap.defaultCurrencies));
70
73
  return serializeCredential(challenge, payload, resolved.chainId, account);
71
74
  },
72
75
  });
76
+ const topUpChannelIfNeeded = async ({ challenge, channel, deposit, fetch, input, requiredCumulative, }) => {
77
+ const knownDeposit = channel.deposit > deposit ? channel.deposit : deposit;
78
+ const additionalDeposit = resolveAutomaticTopUp({
79
+ deposit: knownDeposit,
80
+ maxDeposit,
81
+ requiredCumulative,
82
+ suggestedDeposit: challenge.request.suggestedDeposit === undefined
83
+ ? undefined
84
+ : BigInt(challenge.request.suggestedDeposit),
85
+ topUpAmount,
86
+ });
87
+ if (additionalDeposit > 0n)
88
+ await postTopUp({
89
+ additionalDeposit,
90
+ challenge,
91
+ channel,
92
+ channelId: channel.channelId,
93
+ createSessionCredential: (challenge, context) => method.createCredential({ challenge, context }),
94
+ fetch,
95
+ input,
96
+ });
97
+ const nextDeposit = knownDeposit + additionalDeposit;
98
+ if (nextDeposit === channel.deposit)
99
+ return;
100
+ const updated = { ...channel, deposit: nextDeposit };
101
+ await store.set(updated);
102
+ sink.notifyUpdate(updated);
103
+ };
104
+ MethodChallenge.register(method, async ({ challenge, context, fetch, input }) => {
105
+ if (!isTip1034SessionChallenge(challenge))
106
+ return;
107
+ const sessionContext = context === undefined ? undefined : sessionContextSchema.parse(context);
108
+ if (hasSessionAction(sessionContext))
109
+ return;
110
+ const resolved = await resolveChallengeContext({ challenge, escrowOverride, getClient });
111
+ const channel = await store.get(resolved.key);
112
+ if (!channel?.opened)
113
+ return;
114
+ const snapshot = resolved.snapshot?.channelId.toLowerCase() === channel.channelId.toLowerCase()
115
+ ? resolved.snapshot
116
+ : undefined;
117
+ const nextCumulative = channel.cumulativeAmount + readSessionChallengeAmount(challenge);
118
+ const snapshotRequired = snapshot ? BigInt(snapshot.requiredCumulative) : nextCumulative;
119
+ const requiredCumulative = snapshotRequired > nextCumulative ? snapshotRequired : nextCumulative;
120
+ const snapshotDeposit = snapshot ? BigInt(snapshot.deposit) : channel.deposit;
121
+ const deposit = snapshotDeposit > channel.deposit ? snapshotDeposit : channel.deposit;
122
+ if (requiredCumulative <= deposit && deposit === channel.deposit)
123
+ return;
124
+ const account = await resolveCredentialAccount(resolved, sessionContext, channel);
125
+ if (!canSignDescriptor(account, channel.descriptor))
126
+ return;
127
+ await topUpChannelIfNeeded({
128
+ challenge,
129
+ channel,
130
+ deposit,
131
+ fetch,
132
+ input,
133
+ requiredCumulative,
134
+ });
135
+ });
73
136
  return MethodResponse.register(method, async ({ challenge, credential, fetch, headers, input, refetch, response, signal }) => {
74
- if (!isTempoSessionChallenge(challenge))
137
+ if (!isTip1034SessionChallenge(challenge))
75
138
  return response;
76
139
  if (!isEventStream(response)) {
77
140
  const credentialContext = requireSessionCredentialContext(Credential.deserialize(credential).payload);
@@ -91,23 +154,17 @@ export function session(parameters = {}) {
91
154
  createSessionCredential: (challenge, context) => method.createCredential({ challenge, context }),
92
155
  fetch,
93
156
  getChannel: () => channel ?? null,
94
- managementInput,
95
- async topUpIfNeeded({ channelId, deposit, requiredCumulative }) {
96
- if (requiredCumulative <= deposit || !channel)
157
+ async topUpIfNeeded({ deposit, requiredCumulative }) {
158
+ if (!channel)
97
159
  return;
98
- const additionalDeposit = requiredCumulative - deposit;
99
- await postTopUp({
100
- additionalDeposit,
160
+ await topUpChannelIfNeeded({
101
161
  challenge,
102
162
  channel,
103
- channelId,
104
- createSessionCredential: (challenge, context) => method.createCredential({ challenge, context }),
163
+ deposit: channel.deposit > deposit ? channel.deposit : deposit,
105
164
  fetch,
106
165
  input,
166
+ requiredCumulative,
107
167
  });
108
- channel.deposit += additionalDeposit;
109
- await store.set(channel);
110
- sink.notifyUpdate(channel);
111
168
  },
112
169
  };
113
170
  return wrapSseResponse({
@@ -1 +1 @@
1
- {"version":3,"file":"Session.js","sourceRoot":"","sources":["../../../../src/tempo/session/client/Session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Session.js","sourceRoot":"","sources":["../../../../src/tempo/session/client/Session.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import * as Account from '../../../viem/Account.js';
4
4
  import * as Client from '../../../viem/Client.js';
5
5
  import { type ChannelStore } from '../client/ChannelStore.js';
6
6
  import { session as sessionPlugin } from '../client/Session.js';
7
- import { type SessionReceipt } from '../precompile/Protocol.js';
7
+ import type { SessionReceipt } from '../precompile/Protocol.js';
8
8
  import { deserializeSnapshot as deserializeSessionSnapshot, serializeSnapshot as serializeSessionSnapshot } from '../Snapshot.js';
9
9
  import type { SessionState } from './Runtime.js';
10
10
  import { type TempoSessionChallenge } from './Transports.js';
@@ -64,6 +64,8 @@ export declare namespace sessionManager {
64
64
  const serializeSnapshot: typeof serializeSessionSnapshot;
65
65
  const deserializeSnapshot: typeof deserializeSessionSnapshot;
66
66
  type Parameters = Account.getResolver.Parameters & Client.getResolver.Parameters & {
67
+ /** Automatically acquire the session currency from fallback stablecoins before open/top-up. */
68
+ autoSwap?: sessionPlugin.Parameters['autoSwap'];
67
69
  /** Enables same-route HEAD bootstrap from a server session snapshot before opening a new channel. */
68
70
  bootstrap?: boolean | undefined;
69
71
  /** Viem client instance. Shorthand for `getClient: () => client`. */
@@ -76,6 +78,11 @@ export declare namespace sessionManager {
76
78
  fetch?: typeof globalThis.fetch | undefined;
77
79
  /** Maximum deposit in human-readable units (e.g. `'10'` for 10 tokens). Converted to raw units via `decimals`. */
78
80
  maxDeposit?: string | undefined;
81
+ /**
82
+ * Preferred automatic top-up size in human-readable units. When omitted,
83
+ * a bounded server `suggestedDeposit` is preferred, then the exact shortfall.
84
+ */
85
+ topUpAmount?: string | undefined;
79
86
  /** Selects the account that signs session credentials. */
80
87
  resolveAccount?: sessionPlugin.ResolveAccount | undefined;
81
88
  /** Store for reusable session channels. Defaults to in-memory. */
@@ -1 +1 @@
1
- {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/client/SessionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../../../src/tempo/session/client/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,MAAM,CAAA;AAQ/C,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAA;AAIjD,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE3F,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EACL,mBAAmB,IAAI,0BAA0B,EACjD,iBAAiB,IAAI,wBAAwB,EAC9C,MAAM,gBAAgB,CAAA;AAKvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAahD,OAAO,EAML,KAAK,qBAAqB,EAE3B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EAE1B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAA6C,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElG,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,0BAA0B,EAAE,KAAK,6BAA6B,EAAE,MAAM,cAAc,CAAA;AAE7F,kFAAkF;AAClF,MAAM,MAAM,cAAc,GAAG;IAC3B,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,SAAS,CAAA;IACvC,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAE5B,oGAAoG;IACpG,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC7E,sGAAsG;IACtG,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9F,uGAAuG;IACvG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,8BAA8B,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAChG,6HAA6H;IAC7H,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAA;IACnE,kGAAkG;IAClG,KAAK,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAA;CAC7C,CAAA;AAED,0CAA0C;AAC1C,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,CAAA;AAEvD,yCAAyC;AACzC,MAAM,MAAM,8BAA8B,GAAG,sBAAsB,CAAA;AAEnE,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG;IACvC,8DAA8D;IAC9D,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IAC9B,sDAAsD;IACtD,SAAS,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACvC,yCAAyC;IACzC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAA;IACzB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AA2ED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,UAAU,GAAG,cAAc,CAqtBpF;AAED,2CAA2C;AAC3C,yBAAiB,cAAc,CAAC;IACvB,MAAM,iBAAiB,iCAA2B,CAAA;IAClD,MAAM,mBAAmB,mCAA6B,CAAA;IAE7D,KAAY,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,GACrD,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG;QAC9B,+FAA+F;QAC/F,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC/C,qGAAqG;QACrG,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC/B,qEAAqE;QACrE,MAAM,CAAC,EAAE,OAAO,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1C,iFAAiF;QACjF,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,sDAAsD;QACtD,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC5B,qFAAqF;QACrF,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,SAAS,CAAA;QAC3C,kHAAkH;QAClH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC/B;;;WAGG;QACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,0DAA0D;QAC1D,cAAc,CAAC,EAAE,aAAa,CAAC,cAAc,GAAG,SAAS,CAAA;QACzD,kEAAkE;QAClE,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;QACvC,8EAA8E;QAC9E,SAAS,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAA;KAC7C,CAAA;CACJ"}
@@ -2,6 +2,7 @@ import { parseUnits } from 'viem';
2
2
  import { tempo as tempo_chain } from 'viem/chains';
3
3
  import * as Challenge from '../../../Challenge.js';
4
4
  import * as Fetch from '../../../client/internal/Fetch.js';
5
+ import * as MethodChallenge from '../../../client/internal/MethodChallenge.js';
5
6
  import * as MethodResponse from '../../../client/internal/MethodResponse.js';
6
7
  import * as Constants from '../../../Constants.js';
7
8
  import * as Account from '../../../viem/Account.js';
@@ -13,15 +14,14 @@ import { hydrateSessionSnapshot } from '../client/CredentialState.js';
13
14
  import { session as sessionPlugin } from '../client/Session.js';
14
15
  import * as Channel from '../precompile/Channel.js';
15
16
  import { deserializeSessionReceipt } from '../precompile/Protocol.js';
16
- import { readSessionChallengeAmount } from '../precompile/Protocol.js';
17
17
  import { deserializeSnapshot as deserializeSessionSnapshot, serializeSnapshot as serializeSessionSnapshot, } from '../Snapshot.js';
18
18
  import { registerSessionManagerInternals } from './internal/SessionManager.js';
19
19
  import { createSessionReceiptCoordinator } from './ReceiptCoordinator.js';
20
20
  import { resolveCloseTarget } from './Runtime.js';
21
21
  import { assertVoucherWithinLocalLimit as assertVoucherWithinLocalAuthorization } from './Runtime.js';
22
- import { applySessionReceiptToRuntime, captureRuntimeSnapshot as captureRuntimeStateSnapshot, computeFallbackCloseAmount, createSessionManagerRuntime, dispatchSessionEvent, restoreCumulativeAuthorization, restoreRuntimeSnapshot as restoreRuntimeStateSnapshot, } from './Runtime.js';
22
+ import { applySessionReceiptToRuntime, captureRuntimeSnapshot as captureRuntimeStateSnapshot, computeFallbackCloseAmount, createSessionManagerRuntime, dispatchSessionEvent, restoreCumulativeAuthorization, restoreRuntimeSnapshot as restoreRuntimeStateSnapshot, resolveAutomaticTopUp, } from './Runtime.js';
23
23
  import { closeSocketSession } from './Runtime.js';
24
- import { closeHttpSession, getSessionSnapshot, isTempoSessionChallenge, managementInput, postTopUp, retryHttpPaymentRequired, webSocketProbeUrl, } from './Transports.js';
24
+ import { closeHttpSession, getSessionSnapshot, isTempoSessionChallenge, postTopUp, retryHttpPaymentRequired, webSocketProbeUrl, } from './Transports.js';
25
25
  import { WebSocketReadyState, } from './Transports.js';
26
26
  import { consumeSseSessionResponse, openSseSession } from './Transports.js';
27
27
  import { applyTopUpResult, resolveManualTopUp } from './Transports.js';
@@ -68,6 +68,7 @@ function resolveSessionManagerConfig(parameters) {
68
68
  decimals,
69
69
  fetch: parameters.fetch ?? globalThis.fetch.bind(globalThis),
70
70
  maxVoucherCumulative: parameters.maxDeposit !== undefined ? parseUnits(parameters.maxDeposit, decimals) : null,
71
+ topUpAmount: parameters.topUpAmount !== undefined ? parseUnits(parameters.topUpAmount, decimals) : null,
71
72
  WebSocket,
72
73
  };
73
74
  }
@@ -108,7 +109,7 @@ export function sessionManager(parameters) {
108
109
  const entry = await getReusable(key);
109
110
  if (entry && channelUse) {
110
111
  channelUse.seenExisting.add(key);
111
- if (!channelUse.created.has(key))
112
+ if (!channelUse.committed && !channelUse.created.has(key))
112
113
  channelUse.resumed ??= entry;
113
114
  }
114
115
  return entry;
@@ -155,13 +156,29 @@ export function sessionManager(parameters) {
155
156
  function dispatch(event) {
156
157
  return dispatchSessionEvent(runtime, event);
157
158
  }
159
+ function commitDurableTopUp(entry) {
160
+ const use = channelUse;
161
+ const baseline = use?.committed?.channel?.entry ?? use?.resumed;
162
+ if (!use ||
163
+ baseline?.channelId.toLowerCase() !== entry.channelId.toLowerCase() ||
164
+ entry.deposit <= baseline.deposit)
165
+ return;
166
+ use.resumed = undefined;
167
+ use.committed = captureRuntimeStateSnapshot({
168
+ channel: runtime.channel,
169
+ spent: runtime.spent,
170
+ state: runtime.state,
171
+ });
172
+ }
158
173
  const method = sessionPlugin({
159
174
  account: parameters.account,
175
+ autoSwap: parameters.autoSwap,
160
176
  getClient: parameters.client ? () => parameters.client : parameters.getClient,
161
177
  resolveAccount: parameters.resolveAccount,
162
178
  escrow: parameters.escrow,
163
179
  decimals: config.decimals,
164
180
  maxDeposit: parameters.maxDeposit,
181
+ topUpAmount: parameters.topUpAmount,
165
182
  channelStore: store,
166
183
  onChannelUpdate(entry) {
167
184
  if (entry.channelId !== runtime.channel?.channelId)
@@ -176,6 +193,7 @@ export function sessionManager(parameters) {
176
193
  units: 0,
177
194
  });
178
195
  }
196
+ commitDurableTopUp(entry);
179
197
  },
180
198
  });
181
199
  MethodResponse.unregister(method);
@@ -201,16 +219,6 @@ export function sessionManager(parameters) {
201
219
  use.challengesReceived++;
202
220
  runtime.lastChallenge = challenge;
203
221
  dispatch({ type: 'challengeReceived', challengeId: challenge.id });
204
- if (runtime.channel?.opened && runtime.lastUrl) {
205
- const requiredCumulative = runtime.channel.cumulativeAmount + readSessionChallengeAmount(challenge);
206
- await topUpIfNeeded({
207
- challenge,
208
- input: runtime.lastUrl,
209
- channelId: runtime.channel.channelId,
210
- deposit: runtime.channel.deposit,
211
- requiredCumulative,
212
- });
213
- }
214
222
  return undefined;
215
223
  },
216
224
  });
@@ -247,14 +255,11 @@ export function sessionManager(parameters) {
247
255
  const snapshot = deserializeSessionSnapshot(header);
248
256
  const client = await getClient({ chainId: snapshot.chainId });
249
257
  const defaultAccount = getAccount(client);
250
- const authority = BigInt(snapshot.descriptor.authorizedSigner) === 0n
251
- ? snapshot.descriptor.payer
252
- : snapshot.descriptor.authorizedSigner;
253
258
  const account = (await parameters.resolveAccount?.({
254
259
  account: defaultAccount,
255
260
  chainId: snapshot.chainId,
256
261
  operation: {
257
- authority,
262
+ authority: Channel.resolveAuthorizedSigner(snapshot.descriptor),
258
263
  kind: 'authorizePaymentChannel',
259
264
  },
260
265
  })) ?? defaultAccount;
@@ -384,8 +389,9 @@ export function sessionManager(parameters) {
384
389
  });
385
390
  }
386
391
  async function postTopUpAndApply(parameters) {
392
+ const { knownDeposit, ...topUp } = parameters;
387
393
  const receipt = await postTopUp({
388
- ...parameters,
394
+ ...topUp,
389
395
  channel: runtime.channel,
390
396
  createSessionCredential,
391
397
  fetch: config.fetch,
@@ -397,6 +403,7 @@ export function sessionManager(parameters) {
397
403
  channelId: parameters.channelId,
398
404
  challengeId: runtime.lastChallenge?.id,
399
405
  currentState: runtime.state,
406
+ knownDeposit,
400
407
  receipt,
401
408
  spent: runtime.spent,
402
409
  });
@@ -409,18 +416,30 @@ export function sessionManager(parameters) {
409
416
  spent: runtime.spent.toString(),
410
417
  units: runtime.state.status === 'active' ? runtime.state.units : 0,
411
418
  });
419
+ commitDurableTopUp(applied.channel);
412
420
  }
413
421
  return receipt;
414
422
  }
415
423
  async function topUpIfNeeded(parameters) {
416
- if (parameters.requiredCumulative <= parameters.deposit)
424
+ const channelDeposit = runtime.channel?.channelId === parameters.channelId ? runtime.channel.deposit : 0n;
425
+ const deposit = channelDeposit > parameters.deposit ? channelDeposit : parameters.deposit;
426
+ const additionalDeposit = resolveAutomaticTopUp({
427
+ deposit,
428
+ maxDeposit: config.maxVoucherCumulative,
429
+ requiredCumulative: parameters.requiredCumulative,
430
+ suggestedDeposit: parameters.challenge.request.suggestedDeposit === undefined
431
+ ? undefined
432
+ : BigInt(parameters.challenge.request.suggestedDeposit),
433
+ topUpAmount: config.topUpAmount,
434
+ });
435
+ if (additionalDeposit === 0n)
417
436
  return;
418
- assertVoucherWithinLocalLimit(parameters.requiredCumulative);
419
437
  await postTopUpAndApply({
420
438
  challenge: parameters.challenge,
421
439
  input: parameters.input,
422
440
  channelId: parameters.channelId,
423
- additionalDeposit: parameters.requiredCumulative - parameters.deposit,
441
+ additionalDeposit,
442
+ knownDeposit: deposit,
424
443
  });
425
444
  }
426
445
  function restoreCumulative(channelId, cumulativeAmount) {
@@ -473,6 +492,7 @@ export function sessionManager(parameters) {
473
492
  });
474
493
  const use = {
475
494
  challengesReceived: 0,
495
+ committed: undefined,
476
496
  created: new Map(),
477
497
  previous,
478
498
  seenExisting: new Set(),
@@ -503,7 +523,7 @@ export function sessionManager(parameters) {
503
523
  response = await wrappedFetch(input, effectiveInit);
504
524
  }
505
525
  catch (error) {
506
- restoreRuntime(previous);
526
+ restoreRuntime(use.committed ?? previous);
507
527
  if (await retryWithoutResumed())
508
528
  continue;
509
529
  throw error;
@@ -530,7 +550,7 @@ export function sessionManager(parameters) {
530
550
  }
531
551
  }
532
552
  if (!attemptedHttpManagement && !paymentResponse.ok && !paymentResponse.receipt) {
533
- restoreRuntime(previous);
553
+ restoreRuntime(use.committed ?? previous);
534
554
  if (await retryWithoutResumed())
535
555
  continue;
536
556
  return paymentResponse;
@@ -568,7 +588,6 @@ export function sessionManager(parameters) {
568
588
  getChannel: () => runtime.channel,
569
589
  getChallenge: () => runtime.lastChallenge,
570
590
  assertVoucherWithinLocalLimit,
571
- managementInput,
572
591
  acceptReceipt(receipt) {
573
592
  updateSpentFromReceipt(receipt);
574
593
  },
@@ -617,7 +636,16 @@ export function sessionManager(parameters) {
617
636
  // Cold starts resume from `channelStore` after the probe's 402.
618
637
  const liveHint = runtime.channel?.opened ? runtime.channel.channelId : undefined;
619
638
  const prepared = await prepareWebSocketSession({
620
- createSessionCredential,
639
+ async createSessionCredential(challenge, context) {
640
+ runtime.lastChallenge = challenge;
641
+ await MethodChallenge.handle(method, {
642
+ challenge,
643
+ context,
644
+ fetch: config.fetch,
645
+ input: probeUrl,
646
+ });
647
+ return createSessionCredential(challenge, context);
648
+ },
621
649
  fetch: config.fetch,
622
650
  input,
623
651
  onProbeUrl(httpUrl) {