mppx 0.8.11 → 0.8.13

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 (218) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +16 -1
  3. package/dist/cli/account.d.ts +88 -0
  4. package/dist/cli/account.d.ts.map +1 -1
  5. package/dist/cli/account.js +39 -9
  6. package/dist/cli/account.js.map +1 -1
  7. package/dist/cli/cli.d.ts +2 -1
  8. package/dist/cli/cli.d.ts.map +1 -1
  9. package/dist/cli/cli.js +59 -2
  10. package/dist/cli/cli.js.map +1 -1
  11. package/dist/cli/sessions/Manager.d.ts +31 -0
  12. package/dist/cli/sessions/Manager.d.ts.map +1 -0
  13. package/dist/cli/sessions/Manager.js +56 -0
  14. package/dist/cli/sessions/Manager.js.map +1 -0
  15. package/dist/cli/sessions/commands.d.ts +36 -0
  16. package/dist/cli/sessions/commands.d.ts.map +1 -0
  17. package/dist/cli/sessions/commands.js +407 -0
  18. package/dist/cli/sessions/commands.js.map +1 -0
  19. package/dist/cli/sessions/request.d.ts +35 -0
  20. package/dist/cli/sessions/request.d.ts.map +1 -0
  21. package/dist/cli/sessions/request.js +271 -0
  22. package/dist/cli/sessions/request.js.map +1 -0
  23. package/dist/cli/sessions/store.d.ts +134 -0
  24. package/dist/cli/sessions/store.d.ts.map +1 -0
  25. package/dist/cli/sessions/store.js +723 -0
  26. package/dist/cli/sessions/store.js.map +1 -0
  27. package/dist/cli/utils.d.ts +2 -0
  28. package/dist/cli/utils.d.ts.map +1 -1
  29. package/dist/cli/utils.js +12 -0
  30. package/dist/cli/utils.js.map +1 -1
  31. package/dist/cli/validate/index.d.ts.map +1 -1
  32. package/dist/cli/validate/index.js +12 -6
  33. package/dist/cli/validate/index.js.map +1 -1
  34. package/dist/cli/validate/messages.d.ts +2 -0
  35. package/dist/cli/validate/messages.d.ts.map +1 -0
  36. package/dist/cli/validate/messages.js +8 -0
  37. package/dist/cli/validate/messages.js.map +1 -0
  38. package/dist/client/internal/Fetch.d.ts.map +1 -1
  39. package/dist/client/internal/Fetch.js +35 -6
  40. package/dist/client/internal/Fetch.js.map +1 -1
  41. package/dist/client/internal/MethodResponse.d.ts +23 -0
  42. package/dist/client/internal/MethodResponse.d.ts.map +1 -0
  43. package/dist/client/internal/MethodResponse.js +15 -0
  44. package/dist/client/internal/MethodResponse.js.map +1 -0
  45. package/dist/client/node.d.ts +29 -0
  46. package/dist/client/node.d.ts.map +1 -0
  47. package/dist/client/node.js +177 -0
  48. package/dist/client/node.js.map +1 -0
  49. package/dist/internal/types.d.ts +24 -0
  50. package/dist/internal/types.d.ts.map +1 -1
  51. package/dist/stripe/server/Charge.d.ts +8 -4
  52. package/dist/stripe/server/Charge.d.ts.map +1 -1
  53. package/dist/stripe/server/Charge.js.map +1 -1
  54. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  55. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  56. package/dist/stripe/server/internal/html.gen.js +1 -1
  57. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  58. package/dist/tempo/client/Methods.d.ts +1 -1
  59. package/dist/tempo/internal/types.d.ts +10 -1
  60. package/dist/tempo/internal/types.d.ts.map +1 -1
  61. package/dist/tempo/legacy/client/ChannelOps.d.ts +2 -0
  62. package/dist/tempo/legacy/client/ChannelOps.d.ts.map +1 -1
  63. package/dist/tempo/legacy/client/ChannelOps.js +4 -0
  64. package/dist/tempo/legacy/client/ChannelOps.js.map +1 -1
  65. package/dist/tempo/legacy/client/Session.d.ts +2 -2
  66. package/dist/tempo/legacy/client/Session.d.ts.map +1 -1
  67. package/dist/tempo/legacy/client/Session.js +7 -0
  68. package/dist/tempo/legacy/client/Session.js.map +1 -1
  69. package/dist/tempo/legacy/server/Session.d.ts +3 -3
  70. package/dist/tempo/legacy/server/Session.d.ts.map +1 -1
  71. package/dist/tempo/legacy/server/Session.js.map +1 -1
  72. package/dist/tempo/server/Charge.d.ts +3 -2
  73. package/dist/tempo/server/Charge.d.ts.map +1 -1
  74. package/dist/tempo/server/Charge.js.map +1 -1
  75. package/dist/tempo/server/Methods.d.ts +2 -23
  76. package/dist/tempo/server/Methods.d.ts.map +1 -1
  77. package/dist/tempo/server/Methods.js +2 -2
  78. package/dist/tempo/server/Methods.js.map +1 -1
  79. package/dist/tempo/server/Subscription.d.ts +3 -2
  80. package/dist/tempo/server/Subscription.d.ts.map +1 -1
  81. package/dist/tempo/server/Subscription.js.map +1 -1
  82. package/dist/tempo/server/index.d.ts +1 -1
  83. package/dist/tempo/server/index.d.ts.map +1 -1
  84. package/dist/tempo/server/index.js.map +1 -1
  85. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  86. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  87. package/dist/tempo/server/internal/html.gen.js +1 -1
  88. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  89. package/dist/tempo/session/Snapshot.d.ts +9 -0
  90. package/dist/tempo/session/Snapshot.d.ts.map +1 -1
  91. package/dist/tempo/session/Snapshot.js +6 -0
  92. package/dist/tempo/session/Snapshot.js.map +1 -1
  93. package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -1
  94. package/dist/tempo/session/client/ChannelOps.js +11 -2
  95. package/dist/tempo/session/client/ChannelOps.js.map +1 -1
  96. package/dist/tempo/session/client/CredentialState.d.ts +21 -1
  97. package/dist/tempo/session/client/CredentialState.d.ts.map +1 -1
  98. package/dist/tempo/session/client/CredentialState.js +66 -1
  99. package/dist/tempo/session/client/CredentialState.js.map +1 -1
  100. package/dist/tempo/session/client/Session.d.ts +1 -1
  101. package/dist/tempo/session/client/Session.d.ts.map +1 -1
  102. package/dist/tempo/session/client/Session.js +53 -1
  103. package/dist/tempo/session/client/Session.js.map +1 -1
  104. package/dist/tempo/session/client/SessionManager.d.ts +2 -2
  105. package/dist/tempo/session/client/SessionManager.d.ts.map +1 -1
  106. package/dist/tempo/session/client/SessionManager.js +130 -30
  107. package/dist/tempo/session/client/SessionManager.js.map +1 -1
  108. package/dist/tempo/session/client/Transports.d.ts +21 -2
  109. package/dist/tempo/session/client/Transports.d.ts.map +1 -1
  110. package/dist/tempo/session/client/Transports.js +129 -18
  111. package/dist/tempo/session/client/Transports.js.map +1 -1
  112. package/dist/tempo/session/client/internal/SessionManager.d.ts +19 -0
  113. package/dist/tempo/session/client/internal/SessionManager.d.ts.map +1 -0
  114. package/dist/tempo/session/client/internal/SessionManager.js +13 -0
  115. package/dist/tempo/session/client/internal/SessionManager.js.map +1 -0
  116. package/dist/tempo/session/precompile/Chain.js +13 -4
  117. package/dist/tempo/session/precompile/Chain.js.map +1 -1
  118. package/dist/tempo/session/server/CredentialVerification.d.ts +3 -0
  119. package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -1
  120. package/dist/tempo/session/server/CredentialVerification.js +14 -0
  121. package/dist/tempo/session/server/CredentialVerification.js.map +1 -1
  122. package/dist/tempo/session/server/MeteredStream.d.ts +7 -1
  123. package/dist/tempo/session/server/MeteredStream.d.ts.map +1 -1
  124. package/dist/tempo/session/server/MeteredStream.js +5 -4
  125. package/dist/tempo/session/server/MeteredStream.js.map +1 -1
  126. package/dist/tempo/session/server/RequestState.d.ts +5 -1
  127. package/dist/tempo/session/server/RequestState.d.ts.map +1 -1
  128. package/dist/tempo/session/server/RequestState.js +10 -4
  129. package/dist/tempo/session/server/RequestState.js.map +1 -1
  130. package/dist/tempo/session/server/Session.d.ts +21 -6
  131. package/dist/tempo/session/server/Session.d.ts.map +1 -1
  132. package/dist/tempo/session/server/Session.js +4 -1
  133. package/dist/tempo/session/server/Session.js.map +1 -1
  134. package/dist/tempo/session/server/Settlement.d.ts +20 -0
  135. package/dist/tempo/session/server/Settlement.d.ts.map +1 -1
  136. package/dist/tempo/session/server/Settlement.js +20 -0
  137. package/dist/tempo/session/server/Settlement.js.map +1 -1
  138. package/dist/tempo/session/server/Ws.d.ts +2 -0
  139. package/dist/tempo/session/server/Ws.d.ts.map +1 -1
  140. package/dist/tempo/session/server/Ws.js.map +1 -1
  141. package/dist/tempo/session/server/index.d.ts +1 -1
  142. package/dist/tempo/session/server/index.d.ts.map +1 -1
  143. package/dist/tempo/subscription/KeyAuthorization.d.ts +21 -21
  144. package/dist/validation/core.d.ts.map +1 -1
  145. package/dist/validation/core.js +6 -2
  146. package/dist/validation/core.js.map +1 -1
  147. package/dist/viem/Client.d.ts.map +1 -1
  148. package/dist/viem/Client.js +24 -17
  149. package/dist/viem/Client.js.map +1 -1
  150. package/package.json +6 -1
  151. package/src/cli/account.ts +45 -10
  152. package/src/cli/cli.test.ts +165 -70
  153. package/src/cli/cli.ts +67 -2
  154. package/src/cli/mcp.test.ts +11 -0
  155. package/src/cli/sessions/Manager.test.ts +249 -0
  156. package/src/cli/sessions/Manager.ts +93 -0
  157. package/src/cli/sessions/commands.ts +444 -0
  158. package/src/cli/sessions/request.test.ts +51 -0
  159. package/src/cli/sessions/request.ts +353 -0
  160. package/src/cli/sessions/store.test.ts +581 -0
  161. package/src/cli/sessions/store.ts +940 -0
  162. package/src/cli/utils.test.ts +23 -0
  163. package/src/cli/utils.ts +10 -0
  164. package/src/cli/validate/index.ts +12 -14
  165. package/src/cli/validate/messages.ts +7 -0
  166. package/src/cli/validate.test.ts +38 -5
  167. package/src/client/internal/Fetch.test.ts +29 -0
  168. package/src/client/internal/Fetch.ts +51 -6
  169. package/src/client/internal/MethodResponse.ts +39 -0
  170. package/src/client/node.test.ts +115 -0
  171. package/src/client/node.ts +247 -0
  172. package/src/internal/types.test-d.ts +21 -0
  173. package/src/internal/types.ts +33 -0
  174. package/src/server/Mppx.test-d.ts +42 -0
  175. package/src/stripe/Methods.test.ts +10 -0
  176. package/src/stripe/server/Charge.test-d.ts +66 -0
  177. package/src/stripe/server/Charge.ts +8 -5
  178. package/src/stripe/server/internal/html.gen.ts +1 -1
  179. package/src/tempo/internal/types.ts +13 -2
  180. package/src/tempo/legacy/client/ChannelOps.test.ts +21 -0
  181. package/src/tempo/legacy/client/ChannelOps.ts +7 -0
  182. package/src/tempo/legacy/client/Session.test.ts +102 -1
  183. package/src/tempo/legacy/client/Session.ts +10 -0
  184. package/src/tempo/legacy/server/Defaults.test-d.ts +9 -0
  185. package/src/tempo/legacy/server/Session.ts +6 -5
  186. package/src/tempo/server/Charge.ts +6 -4
  187. package/src/tempo/server/Methods.ts +5 -4
  188. package/src/tempo/server/Subscription.ts +6 -4
  189. package/src/tempo/server/index.ts +5 -1
  190. package/src/tempo/server/internal/html.gen.ts +1 -1
  191. package/src/tempo/session/README.md +201 -0
  192. package/src/tempo/session/Snapshot.ts +21 -0
  193. package/src/tempo/session/client/ChannelOps.test.ts +40 -0
  194. package/src/tempo/session/client/ChannelOps.ts +12 -2
  195. package/src/tempo/session/client/CredentialState.test.ts +2 -2
  196. package/src/tempo/session/client/CredentialState.ts +103 -1
  197. package/src/tempo/session/client/Session.test.ts +86 -4
  198. package/src/tempo/session/client/Session.ts +73 -1
  199. package/src/tempo/session/client/SessionManager.test.ts +137 -4
  200. package/src/tempo/session/client/SessionManager.ts +141 -33
  201. package/src/tempo/session/client/Transports.test.ts +225 -8
  202. package/src/tempo/session/client/Transports.ts +156 -21
  203. package/src/tempo/session/client/internal/SessionManager.ts +36 -0
  204. package/src/tempo/session/precompile/Chain.test.ts +26 -0
  205. package/src/tempo/session/precompile/Chain.ts +17 -4
  206. package/src/tempo/session/server/CredentialVerification.ts +18 -1
  207. package/src/tempo/session/server/MeteredStream.ts +12 -5
  208. package/src/tempo/session/server/RequestState.test.ts +39 -3
  209. package/src/tempo/session/server/RequestState.ts +13 -6
  210. package/src/tempo/session/server/Session.test.ts +461 -0
  211. package/src/tempo/session/server/Session.ts +31 -8
  212. package/src/tempo/session/server/Settlement.ts +45 -0
  213. package/src/tempo/session/server/Ws.test.ts +113 -0
  214. package/src/tempo/session/server/Ws.ts +2 -0
  215. package/src/tempo/session/server/index.ts +2 -0
  216. package/src/validation/core.ts +7 -1
  217. package/src/viem/Client.test.ts +44 -1
  218. package/src/viem/Client.ts +31 -17
@@ -0,0 +1,271 @@
1
+ import { Errors } from 'incur';
2
+ import { createClient, formatUnits, http } from 'viem';
3
+ import { canSignDescriptor, resolveChallengeContext, } from '../../tempo/session/client/CredentialState.js';
4
+ import { getSessionManagerInternals } from '../../tempo/session/client/internal/SessionManager.js';
5
+ import { sessionManager } from '../../tempo/session/client/SessionManager.js';
6
+ import { isEventStream } from '../../tempo/session/precompile/Protocol.js';
7
+ import { resolvePersistentAccount } from '../account.js';
8
+ import { isTestnet, printResponseHeaders, resolveChain, resolveRpcUrl, } from '../utils.js';
9
+ import { createSessionRegistry, SessionBusyError, sessionResourceUrl, sessionScope, sessionScopeKey, toChannelStore, } from './store.js';
10
+ /** Resolves `--session` and the `-M channel=` compatibility alias. */
11
+ export function resolveSessionSelection(session, channelAlias) {
12
+ if (channelAlias && session !== 'auto' && channelAlias.toLowerCase() !== session.toLowerCase())
13
+ throw new Errors.IncurError({
14
+ code: 'SESSION_SELECTION_CONFLICT',
15
+ message: '--session and -M channel= select different sessions.',
16
+ exitCode: 2,
17
+ });
18
+ const value = channelAlias ?? session;
19
+ if (value === 'auto' || value === 'new')
20
+ return value;
21
+ if (/^0x[0-9a-fA-F]{64}$/.test(value))
22
+ return value.toLowerCase();
23
+ throw new Errors.IncurError({
24
+ code: 'INVALID_SESSION',
25
+ message: 'Session must be auto, new, or a 32-byte channel ID.',
26
+ exitCode: 2,
27
+ });
28
+ }
29
+ function sessionDecimals(challenge) {
30
+ return typeof challenge.request.decimals === 'number' ? challenge.request.decimals : 6;
31
+ }
32
+ /** @internal Resolves the manager deposit cap in human-readable token units. */
33
+ export function resolveSessionMaxDeposit(challenge, methodOptions, testnet) {
34
+ if (methodOptions.deposit !== undefined)
35
+ return methodOptions.deposit;
36
+ const suggested = challenge.request.suggestedDeposit;
37
+ if (typeof suggested === 'string')
38
+ return formatUnits(BigInt(suggested), sessionDecimals(challenge));
39
+ return testnet ? '10' : undefined;
40
+ }
41
+ function validateReceipt(receipt, parameters) {
42
+ if (!receipt)
43
+ return undefined;
44
+ if (receipt.challengeId !== parameters.challenge.id)
45
+ throw new Error('Session receipt challenge does not match the paid request.');
46
+ if (receipt.channelId.toLowerCase() !== parameters.channelId.toLowerCase())
47
+ throw new Error('Session receipt channel does not match the selected channel.');
48
+ const accepted = BigInt(receipt.acceptedCumulative);
49
+ const spent = BigInt(receipt.spent);
50
+ if (accepted > parameters.cumulative)
51
+ throw new Error('Session receipt exceeds the local cumulative authorization.');
52
+ if (spent > accepted)
53
+ throw new Error('Session receipt spend exceeds its accepted authorization.');
54
+ return receipt;
55
+ }
56
+ function sameChannel(record, channelId) {
57
+ return record.channel.channelId.toLowerCase() === channelId.toLowerCase();
58
+ }
59
+ function writeSseChunk(chunk) {
60
+ if (chunk.trim() === '[DONE]')
61
+ return;
62
+ if (chunk.length === 0) {
63
+ process.stdout.write('\n');
64
+ return;
65
+ }
66
+ try {
67
+ const parsed = JSON.parse(chunk);
68
+ process.stdout.write(parsed.token ?? parsed.choices?.[0]?.delta?.content ?? chunk);
69
+ }
70
+ catch {
71
+ process.stdout.write(chunk);
72
+ }
73
+ }
74
+ /** Runs one manager-backed request while holding the payer and payment-scope lock. */
75
+ export async function runPersistentSessionRequest(parameters) {
76
+ const { options } = parameters;
77
+ const resolvedAccount = await resolvePersistentAccount(options.account);
78
+ const rpcUrl = resolveRpcUrl(options.rpcUrl, { network: options.network });
79
+ const chain = await resolveChain({ network: options.network, rpcUrl });
80
+ const client = createClient({ chain, transport: http(rpcUrl) });
81
+ const challengeContext = await resolveChallengeContext({
82
+ challenge: parameters.challenge,
83
+ getClient: async () => client,
84
+ });
85
+ if (challengeContext.chainId !== chain.id)
86
+ throw new Errors.IncurError({
87
+ code: 'CHAIN_MISMATCH',
88
+ message: `Challenge requires chainId ${challengeContext.chainId}, but RPC is chainId ${chain.id}.`,
89
+ exitCode: 2,
90
+ });
91
+ const scope = {
92
+ payer: resolvedAccount.account.address,
93
+ payee: challengeContext.payee,
94
+ token: challengeContext.token,
95
+ escrow: challengeContext.escrow,
96
+ chainId: challengeContext.chainId,
97
+ };
98
+ const selection = resolveSessionSelection(options.session, parameters.methodOptions.channel);
99
+ const registry = parameters.registry ?? createSessionRegistry();
100
+ const lock = await registry.acquire(scope).catch((cause) => {
101
+ if (cause instanceof SessionBusyError)
102
+ throw new Errors.IncurError({
103
+ code: cause.code,
104
+ message: cause.message,
105
+ exitCode: cause.exitCode,
106
+ cause,
107
+ });
108
+ throw cause;
109
+ });
110
+ try {
111
+ const selectedId = selection === 'auto'
112
+ ? await registry.getPreferred(scope)
113
+ : selection === 'new'
114
+ ? undefined
115
+ : selection;
116
+ const selected = selectedId ? await registry.get(selectedId) : undefined;
117
+ if (selectedId && !selected)
118
+ throw new Errors.IncurError({
119
+ code: 'SESSION_NOT_FOUND',
120
+ message: `Session ${selectedId} was not found.`,
121
+ exitCode: 2,
122
+ });
123
+ if (selected && selection !== 'auto') {
124
+ if (selected.status !== 'open' ||
125
+ !selected.channel.opened ||
126
+ sessionScopeKey(sessionScope(selected.channel)) !== sessionScopeKey(scope) ||
127
+ !canSignDescriptor(resolvedAccount.account, selected.channel.descriptor))
128
+ throw new Errors.IncurError({
129
+ code: 'SESSION_MISMATCH',
130
+ message: `Session ${selected.channel.channelId} cannot be used for this account and challenge.`,
131
+ exitCode: 2,
132
+ });
133
+ }
134
+ const reusable = selected?.status === 'open' && selected.channel.opened ? selected : undefined;
135
+ let status = reusable ? 'open' : 'opening';
136
+ let latestChallenge = parameters.challenge;
137
+ let latestReceipt = reusable?.receipt;
138
+ let spent = reusable?.spent ?? 0n;
139
+ let units = reusable?.units ?? 0;
140
+ const endpoint = sessionResourceUrl(parameters.endpoint);
141
+ const account = {
142
+ ...(resolvedAccount.source === 'keychain' && { name: resolvedAccount.accountName }),
143
+ address: resolvedAccount.account.address,
144
+ };
145
+ const persistenceContext = () => ({
146
+ status,
147
+ account,
148
+ endpoint,
149
+ challenge: latestChallenge,
150
+ ...(latestReceipt && { receipt: latestReceipt }),
151
+ spent,
152
+ units,
153
+ });
154
+ const channelStore = toChannelStore(registry, {
155
+ scope,
156
+ selection,
157
+ context: persistenceContext,
158
+ onNewChannel() {
159
+ status = 'opening';
160
+ latestReceipt = undefined;
161
+ spent = 0n;
162
+ units = 0;
163
+ },
164
+ });
165
+ const { signal, ...baseInit } = parameters.init;
166
+ const requestInit = {
167
+ ...baseInit,
168
+ ...(signal && { signal }),
169
+ onReceipt(receipt) {
170
+ latestReceipt = receipt;
171
+ spent = spent > BigInt(receipt.spent) ? spent : BigInt(receipt.spent);
172
+ units = Math.max(units, receipt.units ?? 0);
173
+ },
174
+ };
175
+ if (parameters.challengeResponse.status !== 402 || parameters.challengeResponse.bodyUsed)
176
+ throw new Error('Session manager requires an unconsumed 402 challenge response.');
177
+ let replayPending = true;
178
+ const manager = sessionManager({
179
+ account: resolvedAccount.account,
180
+ bootstrap: false,
181
+ client,
182
+ channelStore,
183
+ decimals: sessionDecimals(parameters.challenge),
184
+ maxDeposit: resolveSessionMaxDeposit(parameters.challenge, parameters.methodOptions, isTestnet(chain)),
185
+ fetch: async (input, init) => {
186
+ if (!replayPending)
187
+ return parameters.fetch(input, init);
188
+ replayPending = false;
189
+ return parameters.challengeResponse;
190
+ },
191
+ });
192
+ if (reusable)
193
+ getSessionManagerInternals(manager).rehydrate({
194
+ channel: reusable.channel,
195
+ challenge: parameters.challenge,
196
+ input: parameters.fetchInput,
197
+ spent: reusable.spent,
198
+ });
199
+ const { onReceipt, ...managerInit } = requestInit;
200
+ const response = await manager.fetch(parameters.fetchInput, managerInit);
201
+ if (options.fail && response.status >= 400)
202
+ throw new Errors.IncurError({
203
+ code: 'HTTP_ERROR',
204
+ message: `HTTP error ${response.status}`,
205
+ exitCode: 22,
206
+ });
207
+ if (response.status === 402)
208
+ throw new Errors.IncurError({
209
+ code: 'PAYMENT_REJECTED',
210
+ message: 'Payment rejected.',
211
+ exitCode: 75,
212
+ });
213
+ printResponseHeaders(response, {
214
+ include: false,
215
+ verbose: options.include ? Math.max(options.verbose, 2) : options.verbose,
216
+ silent: options.silent,
217
+ });
218
+ latestChallenge = response.challenge ?? parameters.challenge;
219
+ const channelId = manager.channelId;
220
+ if (!channelId)
221
+ throw new Error('Session manager did not select a channel.');
222
+ latestReceipt =
223
+ validateReceipt(response.receipt, {
224
+ challenge: latestChallenge,
225
+ channelId,
226
+ cumulative: manager.cumulative,
227
+ }) ?? latestReceipt;
228
+ if (isEventStream(response)) {
229
+ const stream = getSessionManagerInternals(manager).consumeSseResponse(parameters.fetchInput, response, { onReceipt, signal: parameters.init.signal ?? undefined });
230
+ for await (const chunk of stream)
231
+ writeSseChunk(chunk);
232
+ }
233
+ else {
234
+ process.stdout.write(Buffer.from(await response.arrayBuffer()));
235
+ }
236
+ const record = await registry.get(channelId);
237
+ if (!record || !sameChannel(record, channelId))
238
+ throw new Error(`Session ${channelId} was not persisted.`);
239
+ if (latestReceipt) {
240
+ const validatedReceipt = validateReceipt(latestReceipt, {
241
+ challenge: latestChallenge,
242
+ channelId,
243
+ cumulative: manager.cumulative,
244
+ });
245
+ if (!validatedReceipt)
246
+ throw new Error('Session receipt validation failed.');
247
+ latestReceipt = validatedReceipt;
248
+ spent = spent > BigInt(validatedReceipt.spent) ? spent : BigInt(validatedReceipt.spent);
249
+ units = Math.max(units, validatedReceipt.units ?? 0);
250
+ status = 'open';
251
+ }
252
+ await registry.upsert({
253
+ status,
254
+ channel: record.channel,
255
+ account,
256
+ endpoint,
257
+ challenge: latestChallenge,
258
+ ...(latestReceipt && { receipt: latestReceipt }),
259
+ spent,
260
+ units,
261
+ });
262
+ if (!options.silent) {
263
+ parameters.info(`Session retained ${channelId}\n`);
264
+ parameters.info(`Close with: mppx sessions close ${channelId}\n`);
265
+ }
266
+ }
267
+ finally {
268
+ await lock.release();
269
+ }
270
+ }
271
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/cli/sessions/request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import type { Address, Hex } from 'viem';
2
+ import * as Challenge from '../../Challenge.js';
3
+ import { type ChannelEntry } from '../../tempo/session/client/ChannelOps.js';
4
+ import { type ChannelStore } from '../../tempo/session/client/ChannelStore.js';
5
+ import { type TempoSessionChallenge } from '../../tempo/session/client/Transports.js';
6
+ import type { SessionReceipt } from '../../tempo/session/precompile/Protocol.js';
7
+ declare const sessionStateVersion: 1;
8
+ /** Lifecycle state recorded for a managed CLI session. */
9
+ export type SessionStatus = 'opening' | 'open' | 'closing' | 'stale';
10
+ /** Account identity required to resume or close a managed session. */
11
+ export type SessionAccount = {
12
+ /** Optional mppx account name. */
13
+ name?: string | undefined;
14
+ /** Payer wallet address. */
15
+ address: Address;
16
+ };
17
+ /** Payment scope used to isolate preferred sessions and process locks. */
18
+ export type SessionScope = {
19
+ payer: Address;
20
+ payee: Address;
21
+ token: Address;
22
+ escrow: Address;
23
+ chainId: number;
24
+ };
25
+ /** Durable session record returned by the CLI registry. */
26
+ export type ManagedSession = {
27
+ version: typeof sessionStateVersion;
28
+ status: SessionStatus;
29
+ channel: ChannelEntry;
30
+ account: SessionAccount;
31
+ endpoint: string;
32
+ challenge: TempoSessionChallenge;
33
+ receipt?: SessionReceipt | undefined;
34
+ spent: bigint;
35
+ units: number;
36
+ createdAt: string;
37
+ updatedAt: string;
38
+ };
39
+ /** Input persisted by {@link SessionRegistry.upsert}. */
40
+ export type SessionUpsert = {
41
+ status: SessionStatus;
42
+ channel: ChannelEntry;
43
+ account: SessionAccount;
44
+ endpoint: string;
45
+ challenge: Challenge.Challenge;
46
+ receipt?: SessionReceipt | undefined;
47
+ spent?: bigint | undefined;
48
+ units?: number | undefined;
49
+ };
50
+ /** Dynamic context used when adapting the registry to the SDK channel store. */
51
+ export type SessionPersistenceContext = Omit<SessionUpsert, 'channel'>;
52
+ /** Selection policy used by a persistent CLI request. */
53
+ export type SessionSelection = 'auto' | 'new' | Hex;
54
+ /** Held process lock for a session scope. */
55
+ export type SessionLock = {
56
+ /** Releases the lock if this process still owns it. */
57
+ release(): Promise<void>;
58
+ };
59
+ /** Filesystem-backed persistent session registry. */
60
+ export type SessionRegistry = {
61
+ /** Versioned registry root. */
62
+ readonly root: string;
63
+ /** Returns a managed session by full channel ID. */
64
+ get(channelId: string): Promise<ManagedSession | undefined>;
65
+ /** Lists managed sessions. */
66
+ list(): Promise<ManagedSession[]>;
67
+ /** Creates or monotonically updates a managed session. */
68
+ upsert(input: SessionUpsert): Promise<ManagedSession>;
69
+ /** Removes a validated managed session and its preferred mappings. */
70
+ remove(channelId: string): Promise<void>;
71
+ /** Returns the preferred channel ID for a payer and payment scope. */
72
+ getPreferred(scope: SessionScope): Promise<Hex | undefined>;
73
+ /** Sets the preferred channel after verifying it matches the scope. */
74
+ setPreferred(scope: SessionScope, channelId: string): Promise<void>;
75
+ /** Clears the preferred channel, optionally only when it matches `channelId`. */
76
+ clearPreferred(scope: SessionScope, channelId?: string | undefined): Promise<void>;
77
+ /** Acquires an exclusive process lock for a payer and payment scope. */
78
+ acquire(scope: SessionScope): Promise<SessionLock>;
79
+ };
80
+ /** Options for {@link createSessionRegistry}. */
81
+ export type CreateSessionRegistryOptions = {
82
+ /** Override the versioned state root. */
83
+ stateRoot?: string | undefined;
84
+ /** Host identity written to lock files. */
85
+ hostname?: string | undefined;
86
+ /** Process ID written to lock files. */
87
+ pid?: number | undefined;
88
+ /** Clock used for persisted timestamps. */
89
+ now?: (() => Date) | undefined;
90
+ /** Process liveness probe used for same-host lock reclamation. */
91
+ isProcessAlive?: ((pid: number) => boolean) | undefined;
92
+ };
93
+ /** Invalid, corrupt, or inconsistent persistent session state. */
94
+ export declare class SessionStateError extends Error {
95
+ readonly name = "SessionStateError";
96
+ readonly code = "SESSION_STATE_INVALID";
97
+ readonly file?: string | undefined;
98
+ constructor(message: string, options?: {
99
+ cause?: unknown;
100
+ file?: string | undefined;
101
+ });
102
+ }
103
+ /** A session scope currently owned by another live process. */
104
+ export declare class SessionBusyError extends Error {
105
+ readonly name = "SessionBusyError";
106
+ readonly code = "SESSION_BUSY";
107
+ readonly exitCode = 75;
108
+ readonly scope: string;
109
+ readonly owner: {
110
+ hostname: string;
111
+ pid: number;
112
+ };
113
+ constructor(scope: string, owner: {
114
+ hostname: string;
115
+ pid: number;
116
+ });
117
+ }
118
+ /** Returns the stable payer-qualified key for a persistent session scope. */
119
+ export declare function sessionScopeKey(scope: SessionScope): string;
120
+ /** Returns the persistent payment scope for a channel. */
121
+ export declare function sessionScope(channel: ChannelEntry): SessionScope;
122
+ /** Creates a filesystem-backed CLI session registry. */
123
+ export declare function createSessionRegistry(options?: CreateSessionRegistryOptions): SessionRegistry;
124
+ /** Adapts a persistent registry selection to the session manager's channel store. */
125
+ export declare function toChannelStore(registry: SessionRegistry, options: {
126
+ scope: SessionScope;
127
+ selection: SessionSelection;
128
+ context: () => SessionPersistenceContext;
129
+ onNewChannel?: ((channel: ChannelEntry) => void) | undefined;
130
+ }): ChannelStore;
131
+ /** Returns the exact HTTP resource URL persisted for session management. */
132
+ export declare function sessionResourceUrl(endpoint: unknown, file?: string | undefined): string;
133
+ export {};
134
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/cli/sessions/store.ts"],"names":[],"mappings":"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"}