mppx 0.5.7 → 0.5.9

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 (102) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/Challenge.d.ts +3 -2
  3. package/dist/Challenge.d.ts.map +1 -1
  4. package/dist/Challenge.js +27 -9
  5. package/dist/Challenge.js.map +1 -1
  6. package/dist/Method.d.ts +32 -14
  7. package/dist/Method.d.ts.map +1 -1
  8. package/dist/Method.js.map +1 -1
  9. package/dist/Store.d.ts +68 -2
  10. package/dist/Store.d.ts.map +1 -1
  11. package/dist/Store.js +41 -4
  12. package/dist/Store.js.map +1 -1
  13. package/dist/mcp-sdk/server/Transport.d.ts.map +1 -1
  14. package/dist/mcp-sdk/server/Transport.js +7 -0
  15. package/dist/mcp-sdk/server/Transport.js.map +1 -1
  16. package/dist/server/Mppx.d.ts +1 -1
  17. package/dist/server/Mppx.d.ts.map +1 -1
  18. package/dist/server/Mppx.js +133 -70
  19. package/dist/server/Mppx.js.map +1 -1
  20. package/dist/server/Transport.d.ts +8 -2
  21. package/dist/server/Transport.d.ts.map +1 -1
  22. package/dist/server/Transport.js +26 -1
  23. package/dist/server/Transport.js.map +1 -1
  24. package/dist/tempo/client/SessionManager.d.ts +13 -2
  25. package/dist/tempo/client/SessionManager.d.ts.map +1 -1
  26. package/dist/tempo/client/SessionManager.js +429 -4
  27. package/dist/tempo/client/SessionManager.js.map +1 -1
  28. package/dist/tempo/internal/fee-payer.d.ts +28 -0
  29. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  30. package/dist/tempo/internal/fee-payer.js +89 -0
  31. package/dist/tempo/internal/fee-payer.js.map +1 -1
  32. package/dist/tempo/server/Charge.d.ts +4 -1
  33. package/dist/tempo/server/Charge.d.ts.map +1 -1
  34. package/dist/tempo/server/Charge.js +90 -66
  35. package/dist/tempo/server/Charge.js.map +1 -1
  36. package/dist/tempo/server/Methods.d.ts +3 -0
  37. package/dist/tempo/server/Methods.d.ts.map +1 -1
  38. package/dist/tempo/server/Methods.js +3 -0
  39. package/dist/tempo/server/Methods.js.map +1 -1
  40. package/dist/tempo/server/Session.d.ts +8 -2
  41. package/dist/tempo/server/Session.d.ts.map +1 -1
  42. package/dist/tempo/server/Session.js.map +1 -1
  43. package/dist/tempo/server/index.d.ts +1 -0
  44. package/dist/tempo/server/index.d.ts.map +1 -1
  45. package/dist/tempo/server/index.js +1 -0
  46. package/dist/tempo/server/index.js.map +1 -1
  47. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  48. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  49. package/dist/tempo/server/internal/html.gen.js +1 -1
  50. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  51. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  52. package/dist/tempo/server/internal/transport.js +16 -6
  53. package/dist/tempo/server/internal/transport.js.map +1 -1
  54. package/dist/tempo/session/ChannelStore.d.ts +12 -1
  55. package/dist/tempo/session/ChannelStore.d.ts.map +1 -1
  56. package/dist/tempo/session/ChannelStore.js +55 -14
  57. package/dist/tempo/session/ChannelStore.js.map +1 -1
  58. package/dist/tempo/session/Sse.d.ts +11 -2
  59. package/dist/tempo/session/Sse.d.ts.map +1 -1
  60. package/dist/tempo/session/Sse.js +66 -25
  61. package/dist/tempo/session/Sse.js.map +1 -1
  62. package/dist/tempo/session/Ws.d.ts +87 -0
  63. package/dist/tempo/session/Ws.d.ts.map +1 -0
  64. package/dist/tempo/session/Ws.js +428 -0
  65. package/dist/tempo/session/Ws.js.map +1 -0
  66. package/dist/tempo/session/index.d.ts +1 -0
  67. package/dist/tempo/session/index.d.ts.map +1 -1
  68. package/dist/tempo/session/index.js +1 -0
  69. package/dist/tempo/session/index.js.map +1 -1
  70. package/package.json +2 -2
  71. package/src/Challenge.test.ts +1 -1
  72. package/src/Challenge.ts +28 -9
  73. package/src/Method.ts +61 -20
  74. package/src/Store.test-d.ts +80 -2
  75. package/src/Store.test.ts +150 -13
  76. package/src/Store.ts +140 -3
  77. package/src/mcp-sdk/server/Transport.test.ts +12 -0
  78. package/src/mcp-sdk/server/Transport.ts +8 -0
  79. package/src/server/Mppx.test.ts +105 -0
  80. package/src/server/Mppx.ts +178 -88
  81. package/src/server/Transport.test.ts +31 -0
  82. package/src/server/Transport.ts +31 -2
  83. package/src/tempo/client/SessionManager.ts +510 -7
  84. package/src/tempo/internal/fee-payer.test.ts +115 -1
  85. package/src/tempo/internal/fee-payer.ts +138 -1
  86. package/src/tempo/server/AtomicStore.test-d.ts +34 -0
  87. package/src/tempo/server/Charge.test.ts +128 -0
  88. package/src/tempo/server/Charge.ts +118 -93
  89. package/src/tempo/server/Methods.ts +3 -0
  90. package/src/tempo/server/Session.test.ts +1044 -47
  91. package/src/tempo/server/Session.ts +8 -2
  92. package/src/tempo/server/Sse.test.ts +29 -0
  93. package/src/tempo/server/index.ts +1 -0
  94. package/src/tempo/server/internal/html/main.ts +9 -10
  95. package/src/tempo/server/internal/html.gen.ts +1 -1
  96. package/src/tempo/server/internal/transport.ts +19 -6
  97. package/src/tempo/session/ChannelStore.test.ts +20 -1
  98. package/src/tempo/session/ChannelStore.ts +77 -14
  99. package/src/tempo/session/Sse.ts +77 -24
  100. package/src/tempo/session/Ws.test.ts +410 -0
  101. package/src/tempo/session/Ws.ts +563 -0
  102. package/src/tempo/session/index.ts +1 -0
@@ -1,7 +1,20 @@
1
+ import { parseUnits } from 'viem';
2
+ import * as Challenge from '../../Challenge.js';
1
3
  import * as Fetch from '../../client/internal/Fetch.js';
4
+ import * as PaymentCredential from '../../Credential.js';
2
5
  import { deserializeSessionReceipt } from '../session/Receipt.js';
3
6
  import { parseEvent } from '../session/Sse.js';
7
+ import * as Ws from '../session/Ws.js';
4
8
  import { session as sessionPlugin } from './Session.js';
9
+ const WebSocketReadyState = {
10
+ CONNECTING: 0,
11
+ OPEN: 1,
12
+ CLOSING: 2,
13
+ CLOSED: 3,
14
+ };
15
+ // Browser-style WebSocket clients may only initiate close with 1000 or 3000-4999.
16
+ // Keep protocol/policy close codes on the server side and use an app-defined code here.
17
+ const ClientWebSocketProtocolErrorCloseCode = 3008;
5
18
  /**
6
19
  * Creates a session manager that handles the full client payment lifecycle:
7
20
  * channel open, incremental vouchers, SSE streaming, and channel close.
@@ -23,10 +36,24 @@ import { session as sessionPlugin } from './Session.js';
23
36
  */
24
37
  export function sessionManager(parameters) {
25
38
  const fetchFn = parameters.fetch ?? globalThis.fetch;
39
+ const WebSocketImpl = parameters.webSocket ??
40
+ globalThis.WebSocket;
41
+ const maxVoucherCumulative = parameters.maxDeposit !== undefined
42
+ ? parseUnits(parameters.maxDeposit, parameters.decimals ?? 6)
43
+ : null;
26
44
  let channel = null;
27
45
  let lastChallenge = null;
28
46
  let lastUrl = null;
29
47
  let spent = 0n;
48
+ let activeSocketChallenge = null;
49
+ let activeSocketChannelId = null;
50
+ let activeSocket = null;
51
+ let closeReadyReceipt = null;
52
+ let closeReadyWaiter = null;
53
+ let expectedSocketCloseAmount = null;
54
+ let receiptWaiter = null;
55
+ let wsDeliveredChunks = 0n;
56
+ let wsTickCost = 0n;
30
57
  const method = sessionPlugin({
31
58
  account: parameters.account,
32
59
  authorizedSigner: parameters.authorizedSigner,
@@ -54,6 +81,81 @@ export function sessionManager(parameters) {
54
81
  const next = BigInt(receipt.spent);
55
82
  spent = spent > next ? spent : next;
56
83
  }
84
+ function waitForReceipt(predicate = () => true) {
85
+ if (receiptWaiter)
86
+ throw new Error('receipt wait already in progress');
87
+ return new Promise((resolve, reject) => {
88
+ receiptWaiter = { predicate, resolve, reject };
89
+ });
90
+ }
91
+ function waitForCloseReady() {
92
+ if (closeReadyReceipt)
93
+ return Promise.resolve(closeReadyReceipt);
94
+ if (closeReadyWaiter)
95
+ throw new Error('close-ready wait already in progress');
96
+ return new Promise((resolve, reject) => {
97
+ closeReadyWaiter = { resolve, reject };
98
+ });
99
+ }
100
+ function settleReceipt(receipt) {
101
+ if (!receiptWaiter)
102
+ return;
103
+ if (!receiptWaiter.predicate(receipt))
104
+ return;
105
+ const waiter = receiptWaiter;
106
+ receiptWaiter = null;
107
+ waiter.resolve(receipt);
108
+ }
109
+ function settleCloseReady(receipt) {
110
+ closeReadyReceipt = receipt;
111
+ if (!closeReadyWaiter)
112
+ return;
113
+ const waiter = closeReadyWaiter;
114
+ closeReadyWaiter = null;
115
+ waiter.resolve(receipt);
116
+ }
117
+ function rejectReceipt(error) {
118
+ if (!receiptWaiter)
119
+ return;
120
+ const waiter = receiptWaiter;
121
+ receiptWaiter = null;
122
+ waiter.reject(error);
123
+ }
124
+ function rejectCloseReady(error) {
125
+ if (!closeReadyWaiter)
126
+ return;
127
+ const waiter = closeReadyWaiter;
128
+ closeReadyWaiter = null;
129
+ waiter.reject(error);
130
+ }
131
+ function getFallbackCloseAmount(challenge, channelId) {
132
+ if (closeReadyReceipt &&
133
+ closeReadyReceipt.challengeId === challenge.id &&
134
+ closeReadyReceipt.channelId === channelId) {
135
+ return closeReadyReceipt.spent;
136
+ }
137
+ const cumulative = channel?.channelId === channelId ? channel.cumulativeAmount : 0n;
138
+ // For WS sessions, use delivered chunk count × tick cost as a tight spend
139
+ // estimate. Without this, a socket death before close-ready would cause
140
+ // the client to sign for the full cumulative voucher authorization —
141
+ // potentially orders of magnitude more than what was actually consumed.
142
+ // The estimate may undercount by at most 1 chunk (if the server committed
143
+ // a charge but the socket died before delivering the message).
144
+ if (wsTickCost > 0n) {
145
+ const deliveryEstimate = wsDeliveredChunks * wsTickCost;
146
+ const bestSpent = spent > deliveryEstimate ? spent : deliveryEstimate;
147
+ return (bestSpent > cumulative ? cumulative : bestSpent).toString();
148
+ }
149
+ // SSE/HTTP: spent is kept in sync by inline receipts, use it directly.
150
+ return spent.toString();
151
+ }
152
+ function assertVoucherWithinLocalLimit(cumulativeAmount) {
153
+ if (maxVoucherCumulative === null)
154
+ return;
155
+ if (cumulativeAmount <= maxVoucherCumulative)
156
+ return;
157
+ throw new Error(`requested voucher amount ${cumulativeAmount} exceeds local maxDeposit ${maxVoucherCumulative}`);
158
+ }
57
159
  function toPaymentResponse(response) {
58
160
  const receiptHeader = response.headers.get('Payment-Receipt');
59
161
  const receipt = receiptHeader ? deserializeSessionReceipt(receiptHeader) : null;
@@ -70,6 +172,119 @@ export function sessionManager(parameters) {
70
172
  const response = await wrappedFetch(input, init);
71
173
  return toPaymentResponse(response);
72
174
  }
175
+ function createManagedSocket(socket) {
176
+ const listeners = new Map();
177
+ let emittedClose = false;
178
+ let messageBuffer = [];
179
+ let readyState = socket.readyState;
180
+ const add = (type, listener, options) => {
181
+ let set = listeners.get(type);
182
+ if (!set) {
183
+ set = new Set();
184
+ listeners.set(type, set);
185
+ }
186
+ set.add({
187
+ once: typeof options === 'object' ? options.once === true : false,
188
+ value: listener,
189
+ });
190
+ if (type === 'message' && messageBuffer) {
191
+ const buffered = messageBuffer;
192
+ messageBuffer = null;
193
+ for (const event of buffered)
194
+ emit('message', event);
195
+ }
196
+ };
197
+ const remove = (type, listener) => {
198
+ const set = listeners.get(type);
199
+ if (!set)
200
+ return;
201
+ for (const entry of set) {
202
+ if (entry.value === listener)
203
+ set.delete(entry);
204
+ }
205
+ };
206
+ const emit = (type, event) => {
207
+ if (type === 'close') {
208
+ if (emittedClose)
209
+ return;
210
+ emittedClose = true;
211
+ readyState = WebSocketReadyState.CLOSED;
212
+ messageBuffer = null;
213
+ }
214
+ if (type === 'open')
215
+ readyState = WebSocketReadyState.OPEN;
216
+ if (type === 'message' && messageBuffer) {
217
+ messageBuffer.push(event);
218
+ return;
219
+ }
220
+ const property = `on${type}`;
221
+ const handler = managed[property];
222
+ if (typeof handler === 'function')
223
+ handler(event);
224
+ const set = listeners.get(type);
225
+ if (!set)
226
+ return;
227
+ for (const entry of Array.from(set)) {
228
+ if (typeof entry.value === 'function')
229
+ entry.value(event);
230
+ else
231
+ entry.value.handleEvent(event);
232
+ if (entry.once)
233
+ set.delete(entry);
234
+ }
235
+ };
236
+ const managed = {
237
+ addEventListener: add,
238
+ close(code, reason) {
239
+ socket.close(code, reason);
240
+ },
241
+ get bufferedAmount() {
242
+ return socket.bufferedAmount;
243
+ },
244
+ get extensions() {
245
+ return socket.extensions;
246
+ },
247
+ on(type, listener) {
248
+ add(type, listener);
249
+ },
250
+ onclose: null,
251
+ onerror: null,
252
+ _onmessage: null,
253
+ get onmessage() {
254
+ return managed._onmessage;
255
+ },
256
+ set onmessage(fn) {
257
+ managed._onmessage = fn;
258
+ if (fn && messageBuffer) {
259
+ const buffered = messageBuffer;
260
+ messageBuffer = null;
261
+ for (const event of buffered)
262
+ emit('message', event);
263
+ }
264
+ },
265
+ onopen: null,
266
+ off(type, listener) {
267
+ remove(type, listener);
268
+ },
269
+ get protocol() {
270
+ return socket.protocol;
271
+ },
272
+ get readyState() {
273
+ return readyState;
274
+ },
275
+ removeEventListener: remove,
276
+ send(data) {
277
+ socket.send(data);
278
+ },
279
+ get url() {
280
+ return socket.url;
281
+ },
282
+ };
283
+ return {
284
+ emit,
285
+ socket: managed,
286
+ };
287
+ }
73
288
  const self = {
74
289
  get channelId() {
75
290
  return channel?.channelId;
@@ -150,6 +365,7 @@ export function sessionManager(parameters) {
150
365
  if (!channel || !sseChallenge)
151
366
  break;
152
367
  const required = BigInt(event.data.requiredCumulative);
368
+ assertVoucherWithinLocalLimit(required);
153
369
  channel.cumulativeAmount =
154
370
  channel.cumulativeAmount > required ? channel.cumulativeAmount : required;
155
371
  const credential = await method.createCredential({
@@ -183,15 +399,224 @@ export function sessionManager(parameters) {
183
399
  }
184
400
  return iterate();
185
401
  },
402
+ async ws(input, init) {
403
+ if (!WebSocketImpl) {
404
+ throw new Error('No WebSocket implementation available. Pass `webSocket` to sessionManager() in this runtime.');
405
+ }
406
+ const { onReceipt, protocols, signal } = init ?? {};
407
+ const wsUrl = new URL(input.toString());
408
+ const httpUrl = new URL(wsUrl.toString());
409
+ if (httpUrl.protocol === 'ws:')
410
+ httpUrl.protocol = 'http:';
411
+ if (httpUrl.protocol === 'wss:')
412
+ httpUrl.protocol = 'https:';
413
+ lastUrl = httpUrl.toString();
414
+ const probe = await fetchFn(httpUrl, signal ? { signal } : undefined);
415
+ if (probe.status !== 402) {
416
+ throw new Error(`Expected a 402 payment challenge from ${httpUrl}, received ${probe.status} instead.`);
417
+ }
418
+ const challenge = Challenge.fromResponseList(probe).find((item) => item.method === method.name && item.intent === method.intent);
419
+ if (!challenge) {
420
+ throw new Error('No payment challenge received from HTTP endpoint for this WebSocket URL. The server may not require payment or did not advertise a challenge.');
421
+ }
422
+ lastChallenge = challenge;
423
+ const credential = await method.createCredential({
424
+ challenge: challenge,
425
+ context: {},
426
+ });
427
+ closeReadyReceipt = null;
428
+ activeSocketChallenge = challenge;
429
+ wsDeliveredChunks = 0n;
430
+ wsTickCost = BigInt(challenge.request.amount);
431
+ const openCredential = PaymentCredential.deserialize(credential);
432
+ activeSocketChannelId = openCredential.payload.channelId;
433
+ const rawSocket = new WebSocketImpl(wsUrl, protocols);
434
+ activeSocket = rawSocket;
435
+ const managedSocket = createManagedSocket(rawSocket);
436
+ const failSocketFlow = (message) => {
437
+ rejectReceipt(new Error(message));
438
+ rejectCloseReady(new Error(message));
439
+ if (rawSocket.readyState === WebSocketReadyState.CONNECTING ||
440
+ rawSocket.readyState === WebSocketReadyState.OPEN) {
441
+ rawSocket.close(ClientWebSocketProtocolErrorCloseCode, message);
442
+ }
443
+ };
444
+ const isExpectedReceipt = (receipt) => receipt.challengeId === challenge.id && receipt.channelId === activeSocketChannelId;
445
+ const socketOpened = new Promise((resolve, reject) => {
446
+ const onOpen = () => {
447
+ rawSocket.removeEventListener('error', onError);
448
+ managedSocket.emit('open', { type: 'open' });
449
+ resolve();
450
+ };
451
+ const onError = () => {
452
+ rawSocket.removeEventListener('open', onOpen);
453
+ reject(new Error(`WebSocket connection to ${wsUrl} failed to open.`));
454
+ };
455
+ rawSocket.addEventListener('open', onOpen, { once: true });
456
+ rawSocket.addEventListener('error', onError, { once: true });
457
+ });
458
+ rawSocket.addEventListener('close', (event) => {
459
+ if (activeSocket === rawSocket)
460
+ activeSocket = null;
461
+ if (activeSocketChallenge === challenge)
462
+ activeSocketChallenge = null;
463
+ if (activeSocketChannelId === openCredential.payload.channelId)
464
+ activeSocketChannelId = null;
465
+ expectedSocketCloseAmount = null;
466
+ rejectReceipt(new Error('WebSocket closed before the payment flow completed.'));
467
+ rejectCloseReady(new Error('WebSocket closed before the payment flow completed.'));
468
+ managedSocket.emit('close', {
469
+ code: event.code ?? 1000,
470
+ reason: event.reason ?? '',
471
+ type: 'close',
472
+ wasClean: true,
473
+ });
474
+ });
475
+ rawSocket.addEventListener('error', () => {
476
+ managedSocket.emit('error', { type: 'error' });
477
+ });
478
+ rawSocket.addEventListener('message', async (event) => {
479
+ const raw = typeof event.data === 'string' ? event.data : undefined;
480
+ if (!raw)
481
+ return;
482
+ const message = Ws.parseMessage(raw);
483
+ if (!message) {
484
+ managedSocket.emit('message', { data: raw, type: 'message' });
485
+ return;
486
+ }
487
+ switch (message.mpp) {
488
+ case 'authorization':
489
+ break;
490
+ case 'message':
491
+ wsDeliveredChunks += 1n;
492
+ managedSocket.emit('message', { data: message.data, type: 'message' });
493
+ break;
494
+ case 'payment-close-ready':
495
+ if (!isExpectedReceipt(message.data)) {
496
+ failSocketFlow('received mismatched payment-close-ready frame');
497
+ break;
498
+ }
499
+ if (BigInt(message.data.spent) > (channel?.cumulativeAmount ?? 0n)) {
500
+ failSocketFlow('received payment-close-ready beyond local voucher state');
501
+ break;
502
+ }
503
+ updateSpentFromReceipt(message.data);
504
+ onReceipt?.(message.data);
505
+ settleCloseReady(message.data);
506
+ managedSocket.emit('close', { code: 1000, reason: 'stream complete', type: 'close' });
507
+ break;
508
+ case 'payment-error':
509
+ rejectReceipt(new Error(message.message));
510
+ rejectCloseReady(new Error(message.message));
511
+ break;
512
+ case 'payment-need-voucher': {
513
+ if (message.data.channelId !== activeSocketChannelId) {
514
+ failSocketFlow('received mismatched payment-need-voucher frame');
515
+ break;
516
+ }
517
+ const required = BigInt(message.data.requiredCumulative);
518
+ try {
519
+ assertVoucherWithinLocalLimit(required);
520
+ }
521
+ catch (error) {
522
+ failSocketFlow(error instanceof Error
523
+ ? error.message
524
+ : 'requested voucher amount exceeds local maxDeposit');
525
+ break;
526
+ }
527
+ const nextCumulative = (channel?.cumulativeAmount ?? 0n) > required
528
+ ? (channel?.cumulativeAmount ?? 0n)
529
+ : required;
530
+ if (channel?.channelId === activeSocketChannelId)
531
+ channel.cumulativeAmount = nextCumulative;
532
+ const voucher = await method.createCredential({
533
+ challenge: challenge,
534
+ context: {
535
+ action: 'voucher',
536
+ channelId: activeSocketChannelId,
537
+ cumulativeAmountRaw: nextCumulative.toString(),
538
+ },
539
+ });
540
+ rawSocket.send(Ws.formatAuthorizationMessage(voucher));
541
+ break;
542
+ }
543
+ case 'payment-receipt':
544
+ if (!isExpectedReceipt(message.data)) {
545
+ failSocketFlow('received mismatched payment-receipt frame');
546
+ break;
547
+ }
548
+ if (expectedSocketCloseAmount !== null &&
549
+ Boolean(message.data.txHash) &&
550
+ (message.data.acceptedCumulative !== expectedSocketCloseAmount ||
551
+ message.data.spent !== expectedSocketCloseAmount)) {
552
+ failSocketFlow('received mismatched payment-close receipt frame');
553
+ break;
554
+ }
555
+ updateSpentFromReceipt(message.data);
556
+ onReceipt?.(message.data);
557
+ settleReceipt(message.data);
558
+ break;
559
+ }
560
+ });
561
+ if (signal) {
562
+ signal.addEventListener('abort', () => {
563
+ rejectReceipt(new Error('WebSocket payment flow aborted.'));
564
+ rejectCloseReady(new Error('WebSocket payment flow aborted.'));
565
+ rawSocket.close();
566
+ }, { once: true });
567
+ }
568
+ await socketOpened;
569
+ rawSocket.send(Ws.formatAuthorizationMessage(credential));
570
+ await waitForReceipt();
571
+ return managedSocket.socket;
572
+ },
186
573
  async close() {
187
- if (!channel?.opened || !lastChallenge)
574
+ const closeChallenge = activeSocketChallenge ?? lastChallenge;
575
+ const closeChannelId = activeSocketChannelId ?? channel?.channelId;
576
+ if (!channel?.opened || !closeChallenge || !closeChannelId)
188
577
  return undefined;
578
+ if (activeSocket?.readyState === WebSocketReadyState.OPEN) {
579
+ const ready = closeReadyReceipt ??
580
+ (await (async () => {
581
+ activeSocket.send(Ws.formatCloseRequestMessage());
582
+ return waitForCloseReady();
583
+ })());
584
+ const readySpent = BigInt(ready.spent);
585
+ if (readySpent > (channel.cumulativeAmount > spent ? channel.cumulativeAmount : spent)) {
586
+ throw new Error('close-ready spent exceeds local voucher state');
587
+ }
588
+ const credential = await method.createCredential({
589
+ challenge: closeChallenge,
590
+ context: {
591
+ action: 'close',
592
+ channelId: closeChannelId,
593
+ cumulativeAmountRaw: readySpent.toString(),
594
+ },
595
+ });
596
+ const expectedCloseAmount = readySpent.toString();
597
+ expectedSocketCloseAmount = expectedCloseAmount;
598
+ try {
599
+ const pendingReceipt = waitForReceipt((receipt) => Boolean(receipt.txHash) &&
600
+ receipt.challengeId === closeChallenge.id &&
601
+ receipt.channelId === closeChannelId &&
602
+ receipt.acceptedCumulative === expectedCloseAmount &&
603
+ receipt.spent === expectedCloseAmount);
604
+ activeSocket.send(Ws.formatAuthorizationMessage(credential));
605
+ const receipt = await pendingReceipt;
606
+ activeSocket.close();
607
+ closeReadyReceipt = null;
608
+ return receipt;
609
+ }
610
+ finally {
611
+ expectedSocketCloseAmount = null;
612
+ }
613
+ }
189
614
  const credential = await method.createCredential({
190
- challenge: lastChallenge,
615
+ challenge: closeChallenge,
191
616
  context: {
192
617
  action: 'close',
193
- channelId: channel.channelId,
194
- cumulativeAmountRaw: spent.toString(),
618
+ channelId: closeChannelId,
619
+ cumulativeAmountRaw: getFallbackCloseAmount(closeChallenge, closeChannelId),
195
620
  },
196
621
  });
197
622
  let receipt;
@@ -1 +1 @@
1
- {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/tempo/client/SessionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/tempo/client/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { TempoAddress } from 'ox/tempo';
2
+ import type { Account } from 'viem';
3
+ import { Transaction } from 'viem/tempo';
2
4
  /** Returns true if the serialized transaction has a Tempo envelope prefix. */
3
5
  export declare function isTempoTransaction(serialized: string | undefined): boolean;
4
6
  /**
@@ -11,6 +13,32 @@ export declare function validateCalls(calls: readonly {
11
13
  data?: `0x${string}` | undefined;
12
14
  to?: TempoAddress.Address | undefined;
13
15
  }[], details: Record<string, string>): void;
16
+ export declare function prepareSponsoredTransaction(parameters: {
17
+ account: Account;
18
+ challengeExpires?: string | undefined;
19
+ chainId: number;
20
+ details: Record<string, string>;
21
+ expectedFeeToken?: TempoAddress.Address | undefined;
22
+ now?: Date | undefined;
23
+ transaction: ReturnType<(typeof Transaction)['deserialize']>;
24
+ }): {
25
+ validBefore: any;
26
+ validAfter?: any;
27
+ type: "tempo";
28
+ signature?: any;
29
+ nonceKey: any;
30
+ maxPriorityFeePerGas?: any;
31
+ maxFeePerGas: any;
32
+ nonce?: any;
33
+ gas: any;
34
+ from?: any;
35
+ feeToken?: any;
36
+ accessList: any;
37
+ account: Account;
38
+ calls: any;
39
+ chainId: any;
40
+ feePayer: Account;
41
+ };
14
42
  export declare class FeePayerValidationError extends Error {
15
43
  readonly name = "FeePayerValidationError";
16
44
  constructor(reason: string, details: Record<string, string>);
@@ -1 +1 @@
1
- {"version":3,"file":"fee-payer.d.ts","sourceRoot":"","sources":["../../../src/tempo/internal/fee-payer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAQ5C,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAK1E;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,mBAKtB,CAAA;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS;IAAE,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;IAAC,EAAE,CAAC,EAAE,YAAY,CAAC,OAAO,GAAG,SAAS,CAAA;CAAE,EAAE,EAC7F,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAuChC;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAkB,IAAI,6BAA4B;gBAEtC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAQ5D"}
1
+ {"version":3,"file":"fee-payer.d.ts","sourceRoot":"","sources":["../../../src/tempo/internal/fee-payer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,EAAmB,WAAW,EAAE,MAAM,YAAY,CAAA;AAKzD,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAK1E;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,mBAKtB,CAAA;AAUD,sFAAsF;AACtF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS;IAAE,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;IAAC,EAAE,CAAC,EAAE,YAAY,CAAC,OAAO,GAAG,SAAS,CAAA;CAAE,EAAE,EAC7F,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAuChC;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE;IACtD,OAAO,EAAE,OAAO,CAAA;IAChB,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,gBAAgB,CAAC,EAAE,YAAY,CAAC,OAAO,GAAG,SAAS,CAAA;IACnD,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;IACtB,WAAW,EAAE,UAAU,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,aAAa,CAAC,CAAC,CAAA;CAC7D;;;;;;;;;;;;;;;;;EAsHA;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAkB,IAAI,6BAA4B;gBAEtC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAQ5D"}