mppx 0.4.6 → 0.4.8

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 (89) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/Store.d.ts +5 -4
  3. package/dist/Store.d.ts.map +1 -1
  4. package/dist/Store.js.map +1 -1
  5. package/dist/cli/cli.d.ts.map +1 -1
  6. package/dist/cli/cli.js +22 -7
  7. package/dist/cli/cli.js.map +1 -1
  8. package/dist/cli/plugins/tempo.d.ts.map +1 -1
  9. package/dist/cli/plugins/tempo.js +9 -22
  10. package/dist/cli/plugins/tempo.js.map +1 -1
  11. package/dist/middlewares/elysia.d.ts.map +1 -1
  12. package/dist/middlewares/elysia.js +5 -1
  13. package/dist/middlewares/elysia.js.map +1 -1
  14. package/dist/proxy/Proxy.d.ts.map +1 -1
  15. package/dist/proxy/Proxy.js +3 -1
  16. package/dist/proxy/Proxy.js.map +1 -1
  17. package/dist/proxy/internal/Route.d.ts +2 -2
  18. package/dist/proxy/internal/Route.d.ts.map +1 -1
  19. package/dist/proxy/internal/Route.js +4 -2
  20. package/dist/proxy/internal/Route.js.map +1 -1
  21. package/dist/server/Mppx.d.ts.map +1 -1
  22. package/dist/server/Mppx.js +26 -8
  23. package/dist/server/Mppx.js.map +1 -1
  24. package/dist/tempo/client/SessionManager.d.ts.map +1 -1
  25. package/dist/tempo/client/SessionManager.js +12 -1
  26. package/dist/tempo/client/SessionManager.js.map +1 -1
  27. package/dist/tempo/internal/address.d.ts +3 -0
  28. package/dist/tempo/internal/address.d.ts.map +1 -0
  29. package/dist/tempo/internal/address.js +4 -0
  30. package/dist/tempo/internal/address.js.map +1 -0
  31. package/dist/tempo/internal/auto-swap.js +3 -3
  32. package/dist/tempo/internal/auto-swap.js.map +1 -1
  33. package/dist/tempo/internal/fee-payer.d.ts +4 -1
  34. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  35. package/dist/tempo/internal/fee-payer.js +11 -3
  36. package/dist/tempo/internal/fee-payer.js.map +1 -1
  37. package/dist/tempo/server/Charge.d.ts +11 -0
  38. package/dist/tempo/server/Charge.d.ts.map +1 -1
  39. package/dist/tempo/server/Charge.js +109 -50
  40. package/dist/tempo/server/Charge.js.map +1 -1
  41. package/dist/tempo/server/Session.d.ts +1 -1
  42. package/dist/tempo/server/Session.d.ts.map +1 -1
  43. package/dist/tempo/server/Session.js +39 -32
  44. package/dist/tempo/server/Session.js.map +1 -1
  45. package/dist/tempo/server/internal/transport.d.ts +1 -1
  46. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  47. package/dist/tempo/server/internal/transport.js +41 -1
  48. package/dist/tempo/server/internal/transport.js.map +1 -1
  49. package/dist/tempo/session/Chain.d.ts.map +1 -1
  50. package/dist/tempo/session/Chain.js +51 -10
  51. package/dist/tempo/session/Chain.js.map +1 -1
  52. package/dist/tempo/session/ChannelStore.d.ts +2 -0
  53. package/dist/tempo/session/ChannelStore.d.ts.map +1 -1
  54. package/dist/tempo/session/ChannelStore.js +4 -2
  55. package/dist/tempo/session/ChannelStore.js.map +1 -1
  56. package/dist/tempo/session/Voucher.d.ts.map +1 -1
  57. package/dist/tempo/session/Voucher.js +3 -2
  58. package/dist/tempo/session/Voucher.js.map +1 -1
  59. package/package.json +6 -2
  60. package/src/Store.test-d.ts +58 -0
  61. package/src/Store.ts +6 -4
  62. package/src/cli/cli.test.ts +124 -0
  63. package/src/cli/cli.ts +19 -7
  64. package/src/cli/plugins/tempo.ts +17 -23
  65. package/src/middlewares/elysia.test.ts +89 -0
  66. package/src/middlewares/elysia.ts +4 -1
  67. package/src/proxy/Proxy.test.ts +56 -0
  68. package/src/proxy/Proxy.ts +6 -1
  69. package/src/proxy/internal/Route.test.ts +57 -0
  70. package/src/proxy/internal/Route.ts +3 -1
  71. package/src/server/Mppx.test.ts +246 -0
  72. package/src/server/Mppx.ts +27 -8
  73. package/src/tempo/client/SessionManager.ts +11 -1
  74. package/src/tempo/internal/address.ts +6 -0
  75. package/src/tempo/internal/auto-swap.ts +3 -3
  76. package/src/tempo/internal/fee-payer.ts +18 -4
  77. package/src/tempo/server/Charge.test.ts +1080 -31
  78. package/src/tempo/server/Charge.ts +158 -63
  79. package/src/tempo/server/Session.test.ts +929 -111
  80. package/src/tempo/server/Session.ts +48 -33
  81. package/src/tempo/server/Sse.test.ts +1 -0
  82. package/src/tempo/server/internal/transport.test.ts +29 -0
  83. package/src/tempo/server/internal/transport.ts +41 -2
  84. package/src/tempo/session/Chain.test.ts +144 -0
  85. package/src/tempo/session/Chain.ts +58 -10
  86. package/src/tempo/session/ChannelStore.test.ts +10 -0
  87. package/src/tempo/session/ChannelStore.ts +6 -3
  88. package/src/tempo/session/Sse.test.ts +1 -0
  89. package/src/tempo/session/Voucher.ts +3 -2
@@ -6,6 +6,7 @@
6
6
  * @internal
7
7
  */
8
8
  import * as Transport from '../../../server/Transport.js';
9
+ import * as ChannelStore from '../../session/ChannelStore.js';
9
10
  import * as Sse_core from '../../session/Sse.js';
10
11
  /**
11
12
  * Creates a Tempo-metered SSE transport.
@@ -77,7 +78,46 @@ export function sse(options) {
77
78
  });
78
79
  return Sse_core.toResponse(stream);
79
80
  }
80
- return base.respondReceipt({ receipt, response: response, challengeId });
81
+ const baseResponse = base.respondReceipt({
82
+ receipt,
83
+ response: response,
84
+ challengeId,
85
+ });
86
+ // Non-SSE response (e.g. upstream returned JSON instead of event-stream).
87
+ // Need to deduct tickCost so request isn't free.
88
+ const ctx = contextMap.get(challengeId);
89
+ if (ctx) {
90
+ contextMap.delete(challengeId);
91
+ const stream = new ReadableStream({
92
+ async start(controller) {
93
+ // deduction completes before consumer reads
94
+ await ChannelStore.deductFromChannel(store, ctx.channelId, ctx.tickCost);
95
+ if (!baseResponse.body) {
96
+ controller.close();
97
+ return;
98
+ }
99
+ const reader = baseResponse.body.getReader();
100
+ try {
101
+ while (true) {
102
+ const { done, value } = await reader.read();
103
+ if (done)
104
+ break;
105
+ controller.enqueue(value);
106
+ }
107
+ }
108
+ finally {
109
+ reader.releaseLock();
110
+ controller.close();
111
+ }
112
+ },
113
+ });
114
+ return new Response(stream, {
115
+ status: baseResponse.status,
116
+ statusText: baseResponse.statusText,
117
+ headers: baseResponse.headers,
118
+ });
119
+ }
120
+ return baseResponse;
81
121
  },
82
122
  });
83
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/tempo/server/internal/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/tempo/server/internal/transport.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Chain.d.ts","sourceRoot":"","sources":["../../../src/tempo/session/Chain.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,MAAM,EAIX,KAAK,GAAG,EAER,KAAK,sBAAsB,EAE5B,MAAM,MAAM,CAAA;AAab,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,CAAA;AAIpB;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,SAAS,EAAE,YAAY,CAAC,CAAA;AAEnF;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,EACvB,SAAS,EAAE,GAAG,GACb,OAAO,CAAC,cAAc,CAAC,CAOzB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,EACvB,SAAS,EAAE,GAAG,EACd,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAY9B;AAQD;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,aAAa,EACtB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAC7B,OAAO,CAAC,GAAG,CAAC,CAed;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,OAAO,EACjB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAC7B,OAAO,CAAC,GAAG,CAAC,CAoBd;AA8DD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,GAAG,GAAG,SAAS,CAAA;IACvB,OAAO,EAAE,cAAc,CAAA;CACxB,CAAA;AAED,wBAAsB,wBAAwB,CAAC,UAAU,EAAE;IACzD,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,GAAG,CAAA;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,GAAG,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC9B,kHAAkH;IAClH,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1C,GAAG,OAAO,CAAC,eAAe,CAAC,CAoI3B;AAED,wBAAsB,yBAAyB,CAAC,UAAU,EAAE;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,GAAG,CAAA;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,GAAG,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC/B,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA4F/C"}
1
+ {"version":3,"file":"Chain.d.ts","sourceRoot":"","sources":["../../../src/tempo/session/Chain.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,MAAM,EAIX,KAAK,GAAG,EACR,KAAK,sBAAsB,EAE5B,MAAM,MAAM,CAAA;AAgBb,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,CAAA;AAgBpB;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,SAAS,EAAE,YAAY,CAAC,CAAA;AAEnF;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,EACvB,SAAS,EAAE,GAAG,GACb,OAAO,CAAC,cAAc,CAAC,CAOzB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,EACvB,SAAS,EAAE,GAAG,EACd,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAY9B;AAQD;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,aAAa,EACtB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAC7B,OAAO,CAAC,GAAG,CAAC,CAed;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,OAAO,EACjB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAC7B,OAAO,CAAC,GAAG,CAAC,CAoBd;AA8DD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,GAAG,GAAG,SAAS,CAAA;IACvB,OAAO,EAAE,cAAc,CAAA;CACxB,CAAA;AAED,wBAAsB,wBAAwB,CAAC,UAAU,EAAE;IACzD,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,GAAG,CAAA;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,GAAG,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC9B,kHAAkH;IAClH,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1C,GAAG,OAAO,CAAC,eAAe,CAAC,CA6J3B;AAED,wBAAsB,yBAAyB,CAAC,UAAU,EAAE;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,GAAG,CAAA;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,GAAG,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC/B,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAqG/C"}
@@ -1,10 +1,24 @@
1
- import { decodeFunctionData, encodeFunctionData, getAbiItem, isAddressEqual, toFunctionSelector, } from 'viem';
1
+ import { decodeFunctionData, encodeFunctionData, getAbiItem, toFunctionSelector, } from 'viem';
2
2
  import { call, prepareTransactionRequest, readContract, sendRawTransaction, sendRawTransactionSync, signTransaction, writeContract, } from 'viem/actions';
3
3
  import { Transaction } from 'viem/tempo';
4
4
  import { BadRequestError, ChannelClosedError, VerificationFailedError } from '../../Errors.js';
5
+ import * as TempoAddress from '../internal/address.js';
5
6
  import * as defaults from '../internal/defaults.js';
7
+ import { isTempoTransaction } from '../internal/fee-payer.js';
8
+ import * as Channel from './Channel.js';
6
9
  import { escrowAbi } from './escrow.abi.js';
7
10
  export { escrowAbi };
11
+ /**
12
+ * Asserts that a deserialized transaction has an existing sender signature —
13
+ * required before fee payer co-signing to prevent the fee payer from becoming
14
+ * the sender.
15
+ */
16
+ function assertSenderSigned(transaction) {
17
+ if (!transaction.signature || !transaction.from)
18
+ throw new BadRequestError({
19
+ reason: 'Transaction must be signed by the sender before fee payer co-signing',
20
+ });
21
+ }
8
22
  const UINT128_MAX = 2n ** 128n - 1n;
9
23
  /**
10
24
  * Read channel state from the escrow contract.
@@ -117,10 +131,16 @@ const escrowTopUpSelector = /*#__PURE__*/ toFunctionSelector(getAbiItem({ abi: e
117
131
  const erc20ApproveSelector = /*#__PURE__*/ toFunctionSelector('function approve(address spender, uint256 amount)');
118
132
  export async function broadcastOpenTransaction(parameters) {
119
133
  const { client, serializedTransaction, escrowContract, channelId, recipient, currency, feePayer, waitForConfirmation = true, } = parameters;
134
+ if (feePayer && !isTempoTransaction(serializedTransaction))
135
+ throw new BadRequestError({
136
+ reason: 'Only Tempo (0x76/0x78) transactions are supported',
137
+ });
120
138
  const transaction = Transaction.deserialize(serializedTransaction);
139
+ if (feePayer)
140
+ assertSenderSigned(transaction);
121
141
  const calls = transaction.calls ?? [];
122
142
  const openCall = calls.find((call) => {
123
- if (!call.to || !isAddressEqual(call.to, escrowContract))
143
+ if (!call.to || !TempoAddress.isEqual(call.to, escrowContract))
124
144
  return false;
125
145
  if (!call.data)
126
146
  return false;
@@ -138,8 +158,8 @@ export async function broadcastOpenTransaction(parameters) {
138
158
  });
139
159
  }
140
160
  const selector = call.data.slice(0, 10);
141
- const isEscrowOpen = isAddressEqual(call.to, escrowContract) && selector === escrowOpenSelector;
142
- const isTokenApprove = isAddressEqual(call.to, currency) && selector === erc20ApproveSelector;
161
+ const isEscrowOpen = TempoAddress.isEqual(call.to, escrowContract) && selector === escrowOpenSelector;
162
+ const isTokenApprove = TempoAddress.isEqual(call.to, currency) && selector === erc20ApproveSelector;
143
163
  if (!isEscrowOpen && !isTokenApprove) {
144
164
  throw new BadRequestError({
145
165
  reason: 'fee-sponsored open transaction contains an unauthorized call',
@@ -148,17 +168,32 @@ export async function broadcastOpenTransaction(parameters) {
148
168
  }
149
169
  }
150
170
  const { args: openArgs } = decodeFunctionData({ abi: escrowAbi, data: openCall.data });
151
- const [payee, token, deposit, , authorizedSigner] = openArgs;
152
- if (!isAddressEqual(payee, recipient)) {
171
+ const [payee, token, deposit, salt, authorizedSigner] = openArgs;
172
+ if (!TempoAddress.isEqual(payee, recipient)) {
153
173
  throw new VerificationFailedError({
154
174
  reason: 'open transaction payee does not match server recipient',
155
175
  });
156
176
  }
157
- if (!isAddressEqual(token, currency)) {
177
+ if (!TempoAddress.isEqual(token, currency)) {
158
178
  throw new VerificationFailedError({
159
179
  reason: 'open transaction token does not match server currency',
160
180
  });
161
181
  }
182
+ if (!transaction.from)
183
+ throw new BadRequestError({ reason: 'open transaction has no sender' });
184
+ const derivedChannelId = Channel.computeId({
185
+ payer: transaction.from,
186
+ payee,
187
+ token,
188
+ salt,
189
+ authorizedSigner,
190
+ escrowContract,
191
+ chainId: client.chain.id,
192
+ });
193
+ if (derivedChannelId.toLowerCase() !== channelId.toLowerCase())
194
+ throw new VerificationFailedError({
195
+ reason: 'open transaction does not match claimed channelId',
196
+ });
162
197
  const resolvedFeeToken = transaction.feeToken ?? defaults.currency[client.chain?.id];
163
198
  const serializedTransaction_final = await (async () => {
164
199
  if (feePayer) {
@@ -219,10 +254,16 @@ export async function broadcastOpenTransaction(parameters) {
219
254
  }
220
255
  export async function broadcastTopUpTransaction(parameters) {
221
256
  const { client, serializedTransaction, escrowContract, channelId, currency, declaredDeposit, previousDeposit, feePayer, } = parameters;
257
+ if (feePayer && !isTempoTransaction(serializedTransaction))
258
+ throw new BadRequestError({
259
+ reason: 'Only Tempo (0x76/0x78) transactions are supported',
260
+ });
222
261
  const transaction = Transaction.deserialize(serializedTransaction);
262
+ if (feePayer)
263
+ assertSenderSigned(transaction);
223
264
  const calls = transaction.calls ?? [];
224
265
  const topUpCall = calls.find((call) => {
225
- if (!call.to || !isAddressEqual(call.to, escrowContract))
266
+ if (!call.to || !TempoAddress.isEqual(call.to, escrowContract))
226
267
  return false;
227
268
  if (!call.data)
228
269
  return false;
@@ -240,8 +281,8 @@ export async function broadcastTopUpTransaction(parameters) {
240
281
  });
241
282
  }
242
283
  const selector = call.data.slice(0, 10);
243
- const isEscrowTopUp = isAddressEqual(call.to, escrowContract) && selector === escrowTopUpSelector;
244
- const isTokenApprove = isAddressEqual(call.to, currency) && selector === erc20ApproveSelector;
284
+ const isEscrowTopUp = TempoAddress.isEqual(call.to, escrowContract) && selector === escrowTopUpSelector;
285
+ const isTokenApprove = TempoAddress.isEqual(call.to, currency) && selector === erc20ApproveSelector;
245
286
  if (!isEscrowTopUp && !isTokenApprove) {
246
287
  throw new BadRequestError({
247
288
  reason: 'fee-sponsored topUp transaction contains an unauthorized call',
@@ -1 +1 @@
1
- {"version":3,"file":"Chain.js","sourceRoot":"","sources":["../../../src/tempo/session/Chain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Chain.js","sourceRoot":"","sources":["../../../src/tempo/session/Chain.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,8 @@ export interface State {
26
26
  escrowContract: Address;
27
27
  /** Unique identifier for this payment channel. */
28
28
  channelId: Hex;
29
+ /** On-chain timestamp when a force-close was requested (0n if not requested). */
30
+ closeRequestedAt: bigint;
29
31
  /** ISO 8601 timestamp when the channel was created. */
30
32
  createdAt: string;
31
33
  /** Current on-chain deposit in the escrow contract. */
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelStore.d.ts","sourceRoot":"","sources":["../../../src/tempo/session/ChannelStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,KAAK;IACpB,kEAAkE;IAClE,gBAAgB,EAAE,OAAO,CAAA;IACzB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,yDAAyD;IACzD,cAAc,EAAE,OAAO,CAAA;IACvB,kDAAkD;IAClD,SAAS,EAAE,GAAG,CAAA;IACd,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAA;IAClB,kEAAkE;IAClE,cAAc,EAAE,aAAa,GAAG,IAAI,CAAA;IACpC,gEAAgE;IAChE,oBAAoB,EAAE,MAAM,CAAA;IAC5B,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAA;IACd,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAA;IACd,iDAAiD;IACjD,cAAc,EAAE,MAAM,CAAA;IACtB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,KAAK,EAAE,OAAO,CAAA;IACd,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEjD;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEjG;;;;;;;;;OASG;IACH,aAAa,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAA;AAEvF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CAavB;AAqBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,YAAY,CA+D1D"}
1
+ {"version":3,"file":"ChannelStore.d.ts","sourceRoot":"","sources":["../../../src/tempo/session/ChannelStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,KAAK;IACpB,kEAAkE;IAClE,gBAAgB,EAAE,OAAO,CAAA;IACzB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,yDAAyD;IACzD,cAAc,EAAE,OAAO,CAAA;IACvB,kDAAkD;IAClD,SAAS,EAAE,GAAG,CAAA;IACd,iFAAiF;IACjF,gBAAgB,EAAE,MAAM,CAAA;IACxB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAA;IAClB,kEAAkE;IAClE,cAAc,EAAE,aAAa,GAAG,IAAI,CAAA;IACpC,gEAAgE;IAChE,oBAAoB,EAAE,MAAM,CAAA;IAC5B,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAA;IACd,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAA;IACd,iDAAiD;IACjD,cAAc,EAAE,MAAM,CAAA;IACtB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,KAAK,EAAE,OAAO,CAAA;IACd,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEjD;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEjG;;;;;;;;;OASG;IACH,aAAa,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAA;AAEvF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CAcvB;AAqBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,YAAY,CA+D1D"}
@@ -11,6 +11,8 @@ export async function deductFromChannel(store, channelId, amount) {
11
11
  deducted = false;
12
12
  if (!current)
13
13
  return null;
14
+ if (current.finalized)
15
+ return current;
14
16
  if (current.highestVoucherAmount - current.spent >= amount) {
15
17
  deducted = true;
16
18
  return { ...current, spent: current.spent + amount, units: current.units + 1 };
@@ -61,7 +63,7 @@ export function fromStore(store) {
61
63
  release = r;
62
64
  }));
63
65
  try {
64
- const current = await store.get(channelId);
66
+ const current = (await store.get(channelId));
65
67
  const next = fn(current);
66
68
  if (next)
67
69
  await store.put(channelId, next);
@@ -76,7 +78,7 @@ export function fromStore(store) {
76
78
  }
77
79
  const cs = {
78
80
  async getChannel(channelId) {
79
- return store.get(channelId);
81
+ return (await store.get(channelId));
80
82
  },
81
83
  async updateChannel(channelId, fn) {
82
84
  const result = await update(channelId, fn);
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelStore.js","sourceRoot":"","sources":["../../../src/tempo/session/ChannelStore.ts"],"names":[],"mappings":"AA6FA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAmB,EACnB,SAAc,EACd,MAAc;IAEd,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;QAC/D,QAAQ,GAAG,KAAK,CAAA;QAChB,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACzB,IAAI,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3D,QAAQ,GAAG,IAAI,CAAA;YACf,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAA;QAChF,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAClD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,GAAG,IAAI,OAAO,EAA6B,CAAA;AAE3D,MAAM,UAAU,SAAS,CAAC,KAAkB;IAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAA;IAClD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAA;IAE9C,SAAS,MAAM,CAAC,SAAiB;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAClC,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,KAAK,MAAM,OAAO,IAAI,GAAG;YAAE,OAAO,EAAE,CAAA;QACpC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,UAAU,MAAM,CACnB,SAAc,EACd,EAA2C;QAE3C,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAEvD,IAAI,OAAoB,CAAA;QACxB,KAAK,CAAC,GAAG,CACP,SAAS,EACT,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE;YACtB,OAAO,GAAG,CAAC,CAAA;QACb,CAAC,CAAC,CACH,CAAA;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAe,SAAS,CAAC,CAAA;YACxD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,CAAA;YACxB,IAAI,IAAI;gBAAE,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;;gBACrC,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YAClC,OAAO,IAAI,CAAA;QACb,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YACvB,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAiB;QACvB,KAAK,CAAC,UAAU,CAAC,SAAS;YACxB,OAAO,KAAK,CAAC,GAAG,CAAe,SAAS,CAAC,CAAA;QAC3C,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE;YAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;YAC1C,MAAM,CAAC,SAAS,CAAC,CAAA;YACjB,OAAO,MAAM,CAAA;QACf,CAAC;QACD,aAAa,CAAC,SAAS;YACrB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACnC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;gBAChC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;oBACf,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;gBAC7B,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAClB,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;IAED,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACzB,OAAO,EAAE,CAAA;AACX,CAAC"}
1
+ {"version":3,"file":"ChannelStore.js","sourceRoot":"","sources":["../../../src/tempo/session/ChannelStore.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Voucher.d.ts","sourceRoot":"","sources":["../../../src/tempo/session/Voucher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAa,MAAM,IAAI,CAAA;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAGhD,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AA8BxD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,OAAO,CAAC,OAAO,EAC/B,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,SAAS,GAC7C,OAAO,CAAC,GAAG,CAAC,CAyBd;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,cAAc,EAAE,OAAO,CAAC,OAAO,EAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,OAAO,CAAC,OAAO,GAC9B,OAAO,CAAC,OAAO,CAAC,CA8BlB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,GAAG,EACd,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,GAAG,GACb,aAAa,CAMf"}
1
+ {"version":3,"file":"Voucher.d.ts","sourceRoot":"","sources":["../../../src/tempo/session/Voucher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAa,MAAM,IAAI,CAAA;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAIhD,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AA8BxD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,OAAO,CAAC,OAAO,EAC/B,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,SAAS,GAC7C,OAAO,CAAC,GAAG,CAAC,CAyBd;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,cAAc,EAAE,OAAO,CAAC,OAAO,EAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,OAAO,CAAC,OAAO,GAC9B,OAAO,CAAC,OAAO,CAAC,CA8BlB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,GAAG,EACd,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,GAAG,GACb,aAAa,CAMf"}
@@ -1,7 +1,8 @@
1
1
  import { Signature } from 'ox';
2
2
  import { SignatureEnvelope } from 'ox/tempo';
3
- import { isAddressEqual, recoverTypedDataAddress } from 'viem';
3
+ import { recoverTypedDataAddress } from 'viem';
4
4
  import { signTypedData } from 'viem/actions';
5
+ import * as TempoAddress from '../internal/address.js';
5
6
  /** Must match the on-chain TempoStreamChannel DOMAIN_SEPARATOR name. */
6
7
  const DOMAIN_NAME = 'Tempo Stream Channel';
7
8
  /** Must match the on-chain TempoStreamChannel DOMAIN_SEPARATOR version. */
@@ -85,7 +86,7 @@ export async function verifyVoucher(escrowContract, chainId, voucher, expectedSi
85
86
  message,
86
87
  signature: voucher.signature,
87
88
  });
88
- return isAddressEqual(signer, expectedSigner);
89
+ return TempoAddress.isEqual(signer, expectedSigner);
89
90
  }
90
91
  catch {
91
92
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"Voucher.js","sourceRoot":"","sources":["../../../src/tempo/session/Voucher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,MAAM,IAAI,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,MAAM,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAG5C,wEAAwE;AACxE,MAAM,WAAW,GAAG,sBAAsB,CAAA;AAC1C,2EAA2E;AAC3E,MAAM,cAAc,GAAG,GAAG,CAAA;AAE1B;;GAEG;AACH,SAAS,gBAAgB,CAAC,cAA+B,EAAE,OAAe;IACxE,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;QACvB,OAAO;QACP,iBAAiB,EAAE,cAAc;KACzB,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE;QACP,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;QACtC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;KAC9C;CACO,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,OAAgB,EAChB,OAAgB,EAChB,cAA+B,EAC/B,OAAe,EACf,gBAA8C;IAE9C,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;QAC5C,OAAO;QACP,MAAM,EAAE,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC;QACjD,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE;YACP,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC3C;KACF,CAAC,CAAA;IAEF,yEAAyE;IACzE,wEAAwE;IACxE,uDAAuD;IACvD,0DAA0D;IAC1D,IAAI,gBAAgB,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAyC,CAAC,CAAA;YAClF,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW;gBACrE,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACpD,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,cAA+B,EAC/B,OAAe,EACf,OAAsB,EACtB,cAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QACxD,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC3C,CAAA;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAE1D,sEAAsE;QACtE,kEAAkE;QAClE,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,KAAK,CAAA;QAE9C,yEAAyE;QACzE,8CAA8C;QAC9C,iDAAiD;QACjD,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,KAAK,CAAA;QAE/C,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;YAC3C,MAAM;YACN,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,SAAS;YACtB,OAAO;YACP,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAA;QACF,OAAO,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAc,EACd,gBAAwB,EACxB,SAAc;IAEd,OAAO;QACL,SAAS;QACT,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;QAC1C,SAAS;KACV,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Voucher.js","sourceRoot":"","sources":["../../../src/tempo/session/Voucher.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mppx",
3
3
  "type": "module",
4
- "version": "0.4.6",
4
+ "version": "0.4.8",
5
5
  "main": "./dist/index.js",
6
6
  "license": "MIT",
7
7
  "files": [
@@ -96,7 +96,7 @@
96
96
  "elysia": ">=1",
97
97
  "express": ">=5",
98
98
  "hono": ">=4",
99
- "viem": ">=2.46.2"
99
+ "viem": ">=2.47.5"
100
100
  },
101
101
  "peerDependenciesMeta": {
102
102
  "@modelcontextprotocol/sdk": {
@@ -119,6 +119,10 @@
119
119
  "ox": "^0.14.1",
120
120
  "zod": "^4.3.6"
121
121
  },
122
+ "repository": {
123
+ "type": "git",
124
+ "url": "https://github.com/wevm/mppx.git"
125
+ },
122
126
  "sideEffects": false,
123
127
  "module": "./dist/index.js",
124
128
  "types": "./dist/index.d.ts",
@@ -0,0 +1,58 @@
1
+ import { expectTypeOf, test } from 'vitest'
2
+ import * as Store from './Store.js'
3
+
4
+ test('default Store accepts any string key', () => {
5
+ const store = Store.memory()
6
+ expectTypeOf(store.get).parameter(0).toBeString()
7
+ expectTypeOf(store.put).parameter(0).toBeString()
8
+ expectTypeOf(store.delete).parameter(0).toBeString()
9
+ })
10
+
11
+ test('default Store get returns unknown', async () => {
12
+ const store = Store.memory()
13
+ const value = await store.get('anything')
14
+ expectTypeOf(value).toEqualTypeOf<unknown>()
15
+ })
16
+
17
+ test('typed Store constrains keys', () => {
18
+ type ItemMap = { [key: `mppx:charge:${string}`]: number }
19
+ const store = {} as Store.Store<ItemMap>
20
+
21
+ expectTypeOf(store.get).parameter(0).toEqualTypeOf<`mppx:charge:${string}`>()
22
+ expectTypeOf(store.put).parameter(0).toEqualTypeOf<`mppx:charge:${string}`>()
23
+ expectTypeOf(store.delete).parameter(0).toEqualTypeOf<`mppx:charge:${string}`>()
24
+ })
25
+
26
+ test('typed Store infers value from key', async () => {
27
+ type ItemMap = { [key: `mppx:charge:${string}`]: number }
28
+ const store = {} as Store.Store<ItemMap>
29
+
30
+ const value = await store.get('mppx:charge:0x123')
31
+ expectTypeOf(value).toEqualTypeOf<number | null>()
32
+ })
33
+
34
+ test('typed Store enforces value type on put', () => {
35
+ type ItemMap = { [key: `mppx:charge:${string}`]: number }
36
+ const store = {} as Store.Store<ItemMap>
37
+
38
+ // @ts-expect-error — value must be number, not string
39
+ store.put('mppx:charge:0x123', 'wrong')
40
+ })
41
+
42
+ test('cloudflare returns generic Store', () => {
43
+ const store = Store.cloudflare({
44
+ get: async () => null,
45
+ put: async () => {},
46
+ delete: async () => {},
47
+ })
48
+ expectTypeOf(store).toEqualTypeOf<Store.Store>()
49
+ })
50
+
51
+ test('upstash returns generic Store', () => {
52
+ const store = Store.upstash({
53
+ get: async () => null,
54
+ set: async () => null,
55
+ del: async () => null,
56
+ })
57
+ expectTypeOf(store).toEqualTypeOf<Store.Store>()
58
+ })
package/src/Store.ts CHANGED
@@ -6,10 +6,12 @@
6
6
  */
7
7
  import { Json } from 'ox'
8
8
 
9
- export type Store = {
10
- get: <value = unknown>(key: string) => Promise<value | null>
11
- put: (key: string, value: unknown) => Promise<void>
12
- delete: (key: string) => Promise<void>
9
+ export type StoreItemMap = Record<string, unknown>
10
+
11
+ export type Store<itemMap extends StoreItemMap = StoreItemMap> = {
12
+ get: <key extends keyof itemMap & string>(key: key) => Promise<itemMap[key] | null>
13
+ put: <key extends keyof itemMap & string>(key: key, value: itemMap[key]) => Promise<void>
14
+ delete: <key extends keyof itemMap & string>(key: key) => Promise<void>
13
15
  }
14
16
 
15
17
  /** Creates a {@link Store} from an existing implementation. */
@@ -10,11 +10,13 @@ import * as Http from '~test/Http.js'
10
10
  import { rpcUrl } from '~test/tempo/prool.js'
11
11
  import { deployEscrow } from '~test/tempo/session.js'
12
12
  import { accounts, asset, client, fundAccount } from '~test/tempo/viem.js'
13
+ import * as Credential from '../Credential.js'
13
14
  import * as Store from '../Store.js'
14
15
  import * as Mppx_server from '../server/Mppx.js'
15
16
  import { toNodeListener } from '../server/Mppx.js'
16
17
  import { stripe as stripe_server } from '../stripe/server/Methods.js'
17
18
  import { tempo } from '../tempo/server/Methods.js'
19
+ import type { SessionCredentialPayload } from '../tempo/session/Types.js'
18
20
  import cli from './cli.js'
19
21
 
20
22
  const testPrivateKey = generatePrivateKey()
@@ -192,6 +194,128 @@ describe('session multi-fetch (examples/session/multi-fetch)', () => {
192
194
  }
193
195
  })
194
196
 
197
+ test('bug: non-SSE open should not double-charge tick amount', { timeout: 120_000 }, async () => {
198
+ await fundAccount({ address: testAccount.address, token: Addresses.pathUsd })
199
+ await fundAccount({ address: testAccount.address, token: asset })
200
+
201
+ const escrow = await deployEscrow()
202
+ const store = Store.memory()
203
+ const tickAmount = '0.001'
204
+ const server = Mppx_server.create({
205
+ methods: [
206
+ tempo.session({
207
+ account: accounts[0],
208
+ store,
209
+ getClient: () => client,
210
+ currency: asset,
211
+ escrowContract: escrow,
212
+ chainId: client.chain.id,
213
+ feePayer: true,
214
+ }),
215
+ ],
216
+ realm: 'cli-test-double-charge',
217
+ secretKey: 'cli-test-secret',
218
+ })
219
+
220
+ // Track voucher cumulative amounts from credential payloads
221
+ const voucherAmounts: string[] = []
222
+
223
+ const httpServer = await Http.createServer(async (req, res) => {
224
+ const authHeader = req.headers.authorization
225
+ if (authHeader) {
226
+ try {
227
+ const cred = Credential.deserialize<SessionCredentialPayload>(authHeader)
228
+ if (cred.payload.action === 'voucher' && 'cumulativeAmount' in cred.payload) {
229
+ voucherAmounts.push(cred.payload.cumulativeAmount)
230
+ }
231
+ } catch {}
232
+ }
233
+
234
+ const result = await toNodeListener(
235
+ server.session({
236
+ amount: tickAmount,
237
+ recipient: accounts[0].address,
238
+ unitType: 'page',
239
+ }),
240
+ )(req, res)
241
+ if (result.status === 402) return
242
+ // Non-SSE: plain text response (not text/event-stream)
243
+ res.end('scraped-content')
244
+ })
245
+
246
+ try {
247
+ await serve([httpServer.url, '--rpc-url', rpcUrl, '-s', '-M', 'deposit=10'], {
248
+ env: { MPPX_PRIVATE_KEY: testPrivateKey },
249
+ })
250
+
251
+ // No follow-up voucher should be sent after a non-SSE open.
252
+ // The open credential already paid for this unit, so the CLI
253
+ // should NOT send a redundant voucher that would double-charge.
254
+ expect(voucherAmounts.length).toBe(0)
255
+ } finally {
256
+ httpServer.close()
257
+ }
258
+ })
259
+
260
+ test('bug: closeChannel sends action "close" not "voucher"', { timeout: 120_000 }, async () => {
261
+ await fundAccount({ address: testAccount.address, token: Addresses.pathUsd })
262
+ await fundAccount({ address: testAccount.address, token: asset })
263
+
264
+ const escrow = await deployEscrow()
265
+ const store = Store.memory()
266
+ const server = Mppx_server.create({
267
+ methods: [
268
+ tempo.session({
269
+ account: accounts[0],
270
+ store,
271
+ getClient: () => client,
272
+ currency: asset,
273
+ escrowContract: escrow,
274
+ chainId: client.chain.id,
275
+ feePayer: true,
276
+ }),
277
+ ],
278
+ realm: 'cli-test-close-action',
279
+ secretKey: 'cli-test-secret',
280
+ })
281
+
282
+ // Track the credential payload action from the close request
283
+ const credentialActions: string[] = []
284
+
285
+ const httpServer = await Http.createServer(async (req, res) => {
286
+ // Capture credential action from every request with Authorization header
287
+ const authHeader = req.headers.authorization
288
+ if (authHeader) {
289
+ try {
290
+ const cred = Credential.deserialize<SessionCredentialPayload>(authHeader)
291
+ credentialActions.push(cred.payload.action)
292
+ } catch {}
293
+ }
294
+
295
+ const result = await toNodeListener(
296
+ server.session({
297
+ amount: '0.001',
298
+ recipient: accounts[0].address,
299
+ unitType: 'page',
300
+ }),
301
+ )(req, res)
302
+ if (result.status === 402) return
303
+ res.end('scraped-content')
304
+ })
305
+
306
+ try {
307
+ await serve([httpServer.url, '--rpc-url', rpcUrl, '-s', '-M', 'deposit=10'], {
308
+ env: { MPPX_PRIVATE_KEY: testPrivateKey },
309
+ })
310
+
311
+ // The last credential sent should be the close request with action: 'close'
312
+ const lastAction = credentialActions[credentialActions.length - 1]
313
+ expect(lastAction).toBe('close')
314
+ } finally {
315
+ httpServer.close()
316
+ }
317
+ })
318
+
195
319
  test('error: --fail exits on server error', { timeout: 60_000 }, async () => {
196
320
  const httpServer = await Http.createServer(async (_req, res) => {
197
321
  res.writeHead(500)