mppx 0.8.19 → 0.9.0

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 (112) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +0 -6
  3. package/dist/Challenge.d.ts +7 -0
  4. package/dist/Challenge.js +32 -6
  5. package/dist/Constants.d.ts +1 -0
  6. package/dist/Constants.js +1 -0
  7. package/dist/Credential.d.ts +11 -5
  8. package/dist/Credential.js +8 -8
  9. package/dist/Html.js +1 -1
  10. package/dist/cli/THIRD-PARTY-LICENSES.txt +1 -1
  11. package/dist/cli/cli.d.ts +2 -2
  12. package/dist/cli/cli.js +134 -134
  13. package/dist/cli/plugins/index.js +13 -13
  14. package/dist/cli/sessions/Manager.js +4 -6
  15. package/dist/cli/sessions/commands.d.ts +1 -1
  16. package/dist/cli/sessions/store.js +13 -19
  17. package/dist/cli/validate/index.d.ts +2 -2
  18. package/dist/client/Mppx.d.ts +39 -2
  19. package/dist/client/Mppx.js +102 -46
  20. package/dist/client/Transport.js +1 -1
  21. package/dist/client/internal/protocols/Mpp.d.ts +1 -1
  22. package/dist/client/internal/protocols/Mpp.js +5 -3
  23. package/dist/client/internal/protocols/Protocol.d.ts +3 -1
  24. package/dist/client/internal/protocols/Shared.js +5 -1
  25. package/dist/integrations/x402/Evm.d.ts +29 -0
  26. package/dist/integrations/x402/Evm.js +150 -0
  27. package/dist/integrations/x402/Negotiator.d.ts +36 -0
  28. package/dist/integrations/x402/Negotiator.js +165 -0
  29. package/dist/mcp/internal/Credential.d.ts +9 -0
  30. package/dist/mcp/internal/Credential.js +16 -0
  31. package/dist/mcp/server/Transport.js +2 -4
  32. package/dist/middlewares/express.js +5 -12
  33. package/dist/middlewares/internal/express.d.ts +8 -0
  34. package/dist/middlewares/internal/express.js +24 -0
  35. package/dist/middlewares/internal/node.d.ts +10 -0
  36. package/dist/middlewares/internal/node.js +34 -0
  37. package/dist/proxy/Proxy.js +15 -9
  38. package/dist/server/Mppx.d.ts +2 -0
  39. package/dist/server/Mppx.js +17 -14
  40. package/dist/server/Transport.d.ts +8 -2
  41. package/dist/server/Transport.js +6 -3
  42. package/dist/server/internal/SecretKey.d.ts +3 -0
  43. package/dist/server/internal/SecretKey.js +9 -0
  44. package/dist/server/internal/html/serviceWorker.client.d.ts +1 -1
  45. package/dist/server/internal/html/serviceWorker.client.js +2 -2
  46. package/dist/server/internal/html/serviceWorker.gen.d.ts +1 -1
  47. package/dist/server/internal/html/serviceWorker.gen.js +1 -1
  48. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  49. package/dist/stripe/server/internal/html.gen.js +1 -1
  50. package/dist/tempo/Methods.d.ts +0 -10
  51. package/dist/tempo/Methods.js +3 -12
  52. package/dist/tempo/client/Charge.d.ts +0 -3
  53. package/dist/tempo/client/Charge.js +3 -13
  54. package/dist/tempo/client/Methods.d.ts +0 -10
  55. package/dist/tempo/internal/account.d.ts +15 -6
  56. package/dist/tempo/internal/account.js +17 -26
  57. package/dist/tempo/internal/defaults.d.ts +0 -11
  58. package/dist/tempo/internal/defaults.js +0 -11
  59. package/dist/tempo/internal/fee-payer.d.ts +21 -3
  60. package/dist/tempo/internal/fee-payer.js +10 -19
  61. package/dist/tempo/internal/remote-fee-payer.d.ts +12 -0
  62. package/dist/tempo/internal/remote-fee-payer.js +17 -0
  63. package/dist/tempo/legacy/client/Session.d.ts +0 -7
  64. package/dist/tempo/server/Charge.d.ts +0 -3
  65. package/dist/tempo/server/Charge.js +26 -68
  66. package/dist/tempo/server/Methods.d.ts +4 -18
  67. package/dist/tempo/server/Methods.js +4 -8
  68. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  69. package/dist/tempo/server/internal/html.gen.js +1 -1
  70. package/dist/tempo/session/client/ChannelOps.d.ts +0 -14
  71. package/dist/tempo/session/client/ChannelOps.js +0 -22
  72. package/dist/tempo/session/client/ChannelStore.d.ts +5 -0
  73. package/dist/tempo/session/client/ChannelStore.js +2 -2
  74. package/dist/tempo/session/client/CredentialState.d.ts +2 -12
  75. package/dist/tempo/session/client/CredentialState.js +75 -73
  76. package/dist/tempo/session/client/Session.d.ts +2 -9
  77. package/dist/tempo/session/client/Session.js +71 -176
  78. package/dist/tempo/session/client/SessionManager.js +9 -28
  79. package/dist/tempo/session/precompile/Chain.d.ts +0 -4
  80. package/dist/tempo/session/precompile/Chain.js +1 -29
  81. package/dist/tempo/session/precompile/Protocol.d.ts +0 -13
  82. package/dist/tempo/session/precompile/Voucher.d.ts +1 -3
  83. package/dist/tempo/session/precompile/Voucher.js +12 -6
  84. package/dist/tempo/session/server/ChannelStore.d.ts +0 -6
  85. package/dist/tempo/session/server/ChannelStore.js +4 -11
  86. package/dist/tempo/session/server/CredentialVerification.d.ts +7 -9
  87. package/dist/tempo/session/server/CredentialVerification.js +118 -184
  88. package/dist/tempo/session/server/RequestState.d.ts +0 -17
  89. package/dist/tempo/session/server/RequestState.js +15 -59
  90. package/dist/tempo/session/server/Session.d.ts +0 -9
  91. package/dist/tempo/session/server/Session.js +8 -37
  92. package/dist/tempo/session/server/Settlement.d.ts +0 -7
  93. package/dist/tempo/session/server/Settlement.js +16 -50
  94. package/dist/viem/Client.d.ts +7 -2
  95. package/dist/viem/Client.js +17 -5
  96. package/dist/x402/Types.d.ts +2 -0
  97. package/dist/x402/Types.js +2 -0
  98. package/dist/x402/mcp.d.ts +20 -0
  99. package/dist/x402/mcp.js +153 -0
  100. package/dist/x402/middlewares/express.d.ts +23 -0
  101. package/dist/x402/middlewares/express.js +49 -0
  102. package/dist/x402/middlewares/hono.d.ts +13 -0
  103. package/dist/x402/middlewares/hono.js +36 -0
  104. package/dist/x402/middlewares/next.d.ts +17 -0
  105. package/dist/x402/middlewares/next.js +58 -0
  106. package/package.json +41 -1
  107. package/dist/tempo/internal/machine-token-charge.d.ts +0 -51
  108. package/dist/tempo/internal/machine-token-charge.js +0 -113
  109. package/dist/tempo/internal/machine-token-session.d.ts +0 -88
  110. package/dist/tempo/internal/machine-token-session.js +0 -173
  111. package/dist/tempo/internal/signature-envelope.d.ts +0 -14
  112. package/dist/tempo/internal/signature-envelope.js +0 -28
@@ -1,5 +1,5 @@
1
1
  import * as SignatureEnvelope from 'ox/tempo/SignatureEnvelope';
2
- import { createClient, decodeFunctionData, formatUnits, http, keccak256, parseEventLogs, } from 'viem';
2
+ import { decodeFunctionData, formatUnits, keccak256, parseEventLogs, } from 'viem';
3
3
  import { getTransactionReceipt, sendRawTransaction, sendRawTransactionSync, signTransaction, verifyTypedData, call as viem_call, } from 'viem/actions';
4
4
  import { Abis, Actions, Transaction } from 'viem/tempo';
5
5
  import { tempo as tempo_chain } from 'viem/tempo/chains';
@@ -15,7 +15,6 @@ import * as Charge_internal from '../internal/charge.js';
15
15
  import * as defaults from '../internal/defaults.js';
16
16
  import * as FeePayer from '../internal/fee-payer.js';
17
17
  import { resolveFeeToken } from '../internal/fee-token.js';
18
- import * as MachineTokenCharge from '../internal/machine-token-charge.js';
19
18
  import * as Proof from '../internal/proof.js';
20
19
  import * as Selectors from '../internal/selectors.js';
21
20
  import * as Methods from '../Methods.js';
@@ -33,7 +32,7 @@ import * as SponsorBudget from './SponsorBudget.js';
33
32
  * ```
34
33
  */
35
34
  export function charge(parameters = {}) {
36
- const { machineTokenEnabled, amount, currency = defaults.resolveCurrency(parameters), decimals = defaults.decimals, description, externalId, feeToken: configuredFeeToken, feePayerPolicy, html, memo, relay, sponsorBudget, splits, supportedModes, validateSender, waitForConfirmation = true, } = parameters;
35
+ const { amount, currency = defaults.resolveCurrency(parameters), decimals = defaults.decimals, description, externalId, feeToken: configuredFeeToken, feePayerPolicy, html, memo, relay, sponsorBudget, splits, supportedModes, validateSender, waitForConfirmation = true, } = parameters;
37
36
  const storeKeyPrefix = parameters.storeKeyPrefix ?? '';
38
37
  const rawStore = (parameters.store ?? Store.memory());
39
38
  const store = Store.from(rawStore, { keyPrefix: storeKeyPrefix });
@@ -59,12 +58,12 @@ export function charge(parameters = {}) {
59
58
  keyPrefix: storeKeyPrefix,
60
59
  })
61
60
  : undefined;
62
- const { recipient, feePayer, feePayerUrl } = Account.resolve(parameters);
63
- if (configuredFeeToken && feePayerUrl)
61
+ const { recipient, feePayer, remoteFeePayer } = Account.resolve(parameters);
62
+ if (configuredFeeToken && remoteFeePayer)
64
63
  throw new Error('`feeToken` can only be configured for a local fee payer.');
65
64
  const getClient = Client.getResolver({
66
65
  chain: { ...tempo_chain, experimental_preconfirmationTime: 500 },
67
- feePayerUrl,
66
+ remoteFeePayer,
68
67
  getClient: parameters.getClient,
69
68
  rpcUrl: defaults.rpcUrl,
70
69
  });
@@ -85,17 +84,12 @@ export function charge(parameters = {}) {
85
84
  const currency = resolvedRequest.currency;
86
85
  const recipient = resolvedRequest.recipient;
87
86
  const memo = methodDetails?.memo;
88
- const machineTokenEnabled = methodDetails?.machineTokenEnabled === true;
89
- const settlementSender = machineTokenEnabled
90
- ? MachineTokenCharge.getSettlementSender(chainId)
91
- : undefined;
92
87
  const isZeroAmount = BigInt(amount) === 0n;
93
88
  Expires.assert(challenge.expires, challenge.id);
94
89
  if (isZeroAmount && payload.type !== 'proof')
95
90
  throw new MismatchError('Zero-amount challenges require a proof credential.', {});
96
91
  return {
97
92
  amount,
98
- machineTokenEnabled,
99
93
  chainId,
100
94
  challenge,
101
95
  client: await getClient({ chainId }),
@@ -107,12 +101,11 @@ export function charge(parameters = {}) {
107
101
  recipient,
108
102
  requestAllowsFeePayer: request.feePayer !== false,
109
103
  resolvedRequest,
110
- settlementSenders: settlementSender ? [settlementSender] : [],
111
104
  supportedModes,
112
105
  };
113
106
  }
114
107
  async function validateHashCredential(credential, payload, context) {
115
- const { amount, chainId, challenge, client, currency, memo, methodDetails, recipient, settlementSenders, supportedModes, } = context;
108
+ const { amount, chainId, challenge, client, currency, memo, methodDetails, recipient, supportedModes, } = context;
116
109
  if (supportedModes && !supportedModes.includes('push'))
117
110
  throw new MismatchError('Hash credentials are not supported for this challenge.', {});
118
111
  const source = parseHashCredentialSource({
@@ -127,7 +120,6 @@ export function charge(parameters = {}) {
127
120
  const matchedLogs = await assertTransferLogs(receipt, {
128
121
  currency,
129
122
  sender,
130
- settlementSenders,
131
123
  source,
132
124
  transfers,
133
125
  validateSender,
@@ -177,7 +169,7 @@ export function charge(parameters = {}) {
177
169
  return { sender: source.address };
178
170
  }
179
171
  async function validateTransactionCredential(credential, payload, request, context) {
180
- const { machineTokenEnabled, amount, chainId, challenge, client, currency, memo, methodDetails, recipient, requestAllowsFeePayer, supportedModes, } = context;
172
+ const { amount, chainId, challenge, client, currency, memo, methodDetails, recipient, requestAllowsFeePayer, supportedModes, } = context;
181
173
  if (supportedModes && !supportedModes.includes('pull'))
182
174
  throw new MismatchError('Transaction credentials are not supported for this challenge.', {});
183
175
  const serializedTransaction = payload.signature;
@@ -188,42 +180,26 @@ export function charge(parameters = {}) {
188
180
  throw new MismatchError('Transaction must be signed by the sender before fee payer co-signing.', {});
189
181
  const isFeePayerTx = methodDetails?.feePayer === true &&
190
182
  requestAllowsFeePayer &&
191
- !!(typeof request.feePayer === 'object' ? request.feePayer : feePayer || feePayerUrl);
183
+ !!(Account.is(request.feePayer) ? request.feePayer : feePayer || remoteFeePayer);
192
184
  const transfers = getExpectedTransfers({ amount, memo, methodDetails, recipient });
193
- const machineTokenRoute = machineTokenEnabled
194
- ? MachineTokenCharge.matchRoute({
195
- calls: transaction.calls ?? [],
196
- chainId: chainId ?? client.chain?.id,
197
- currency,
198
- transfers,
199
- })
200
- : undefined;
201
- const matchedCalls = machineTokenRoute?.transfers ??
202
- assertTransferCalls(transaction.calls ?? [], {
203
- currency,
204
- exactCount: isFeePayerTx,
205
- transfers,
206
- });
185
+ const matchedCalls = assertTransferCalls(transaction.calls ?? [], {
186
+ currency,
187
+ exactCount: isFeePayerTx,
188
+ transfers,
189
+ });
207
190
  if (!memo)
208
191
  assertChallengeBoundCallMemo(matchedCalls, {
209
192
  challengeId: challenge.id,
210
193
  realm: challenge.realm,
211
194
  });
212
195
  if (isFeePayerTx) {
213
- if (!machineTokenRoute)
214
- FeePayer.validateCalls(transaction.calls, { amount, currency, recipient }, { currency, expectedTransfers: transfers });
196
+ FeePayer.validateCalls(transaction.calls, { amount, currency, recipient }, { currency, expectedTransfers: transfers });
215
197
  FeePayer.assertAllowedFeeToken(transaction, FeePayer.defaultAllowedFeeTokens(chainId));
216
198
  }
217
199
  else {
218
200
  await viem_call(client, FeePayer.simulationTransaction(transaction, { feePayer: false }));
219
201
  }
220
- return {
221
- isFeePayerTx,
222
- serializedTransaction,
223
- settlementSenders: machineTokenRoute ? [machineTokenRoute.settlementSender] : [],
224
- transaction,
225
- transfers,
226
- };
202
+ return { isFeePayerTx, serializedTransaction, transaction, transfers };
227
203
  }
228
204
  async function validateCredential(credential, request, context) {
229
205
  switch (context.payload.type) {
@@ -241,7 +217,7 @@ export function charge(parameters = {}) {
241
217
  return { details: { mode: 'proof', sender }, type: 'proof' };
242
218
  }
243
219
  case 'transaction': {
244
- const { isFeePayerTx, serializedTransaction, settlementSenders, transaction, transfers } = await validateTransactionCredential(credential, context.payload, request, context);
220
+ const { isFeePayerTx, serializedTransaction, transaction, transfers } = await validateTransactionCredential(credential, context.payload, request, context);
245
221
  return {
246
222
  details: {
247
223
  mode: 'pull',
@@ -251,7 +227,6 @@ export function charge(parameters = {}) {
251
227
  },
252
228
  isFeePayerTx,
253
229
  serializedTransaction,
254
- settlementSenders,
255
230
  transaction,
256
231
  transfers,
257
232
  type: 'transaction',
@@ -263,7 +238,6 @@ export function charge(parameters = {}) {
263
238
  canOffer: parameters.canOffer,
264
239
  onPaymentSuccess: parameters.onPaymentSuccess,
265
240
  defaults: {
266
- machineTokenEnabled,
267
241
  amount,
268
242
  currency,
269
243
  decimals,
@@ -324,22 +298,16 @@ export function charge(parameters = {}) {
324
298
  })();
325
299
  if (client.chain?.id !== chainId)
326
300
  throw new Error(`Client not configured with chainId ${chainId}.`);
327
- if (request.machineTokenEnabled && !MachineTokenCharge.isSupported(chainId))
328
- throw new Error(`Machine tokens are not supported on chainId ${chainId}.`);
329
301
  const resolvedFeePayer = (() => {
330
302
  if (request.feePayer === false)
331
303
  return credential ? false : undefined;
332
- const account = typeof request.feePayer === 'object' ? request.feePayer : feePayer;
333
- const requested = account ?? feePayer ?? feePayerUrl;
304
+ const account = Account.is(request.feePayer) ? request.feePayer : feePayer;
334
305
  if (credential)
335
- return account ?? (feePayerUrl ? true : undefined);
336
- if (requested)
337
- return true;
338
- return undefined;
306
+ return account ?? (remoteFeePayer ? true : undefined);
307
+ return account || remoteFeePayer ? true : undefined;
339
308
  })();
340
309
  return {
341
310
  ...request,
342
- machineTokenEnabled: request.machineTokenEnabled || undefined,
343
311
  chainId,
344
312
  feePayer: resolvedFeePayer,
345
313
  memo: request.memo || undefined,
@@ -363,7 +331,7 @@ export function charge(parameters = {}) {
363
331
  const { amount, chainId, challenge, client, currency, memo, methodDetails, recipient, requestAllowsFeePayer, } = context;
364
332
  const validated = await validateCredential(credential, request, context);
365
333
  const feePayerAccount = methodDetails?.feePayer === true && requestAllowsFeePayer
366
- ? typeof request.feePayer === 'object'
334
+ ? Account.is(request.feePayer)
367
335
  ? request.feePayer
368
336
  : feePayer
369
337
  : undefined;
@@ -394,7 +362,7 @@ export function charge(parameters = {}) {
394
362
  };
395
363
  }
396
364
  case 'transaction': {
397
- const { isFeePayerTx, serializedTransaction, settlementSenders, transaction, transfers } = validated;
365
+ const { isFeePayerTx, serializedTransaction, transaction, transfers } = validated;
398
366
  // Pre-broadcast dedup: catch exact byte-for-byte replays early.
399
367
  const hash = keccak256(serializedTransaction);
400
368
  if (!(await tryClaimHash(store, hash, replayExpires))) {
@@ -406,9 +374,6 @@ export function charge(parameters = {}) {
406
374
  let finalHash;
407
375
  let reservation;
408
376
  try {
409
- const broadcastClient = feePayerUrl && isFeePayerTx
410
- ? createClient({ chain: client.chain, transport: http(feePayerUrl) })
411
- : client;
412
377
  const allowedFeeTokens = FeePayer.defaultAllowedFeeTokens(chainId);
413
378
  if (isFeePayerTx)
414
379
  FeePayer.assertAllowedFeeToken(transaction, allowedFeeTokens);
@@ -447,7 +412,7 @@ export function charge(parameters = {}) {
447
412
  sponsor: completed.feePayer,
448
413
  };
449
414
  }
450
- if (feePayerUrl && isFeePayerTx) {
415
+ if (remoteFeePayer && isFeePayerTx) {
451
416
  const completed = await FeePayer.preflightSponsorship({
452
417
  transaction,
453
418
  simulate: (request) => viem_call(client, request),
@@ -458,8 +423,8 @@ export function charge(parameters = {}) {
458
423
  chainId: chainId ?? client.chain.id,
459
424
  details: { amount, currency, recipient },
460
425
  policy: transactionFeePayerPolicy,
426
+ request: (args) => client.request(args),
461
427
  transaction,
462
- url: feePayerUrl,
463
428
  });
464
429
  return { ...hosted, transaction };
465
430
  },
@@ -522,7 +487,7 @@ export function charge(parameters = {}) {
522
487
  });
523
488
  broadcastAttempted = true;
524
489
  if (waitForConfirmation) {
525
- const receipt = await sendRawTransactionSync(broadcastClient, {
490
+ const receipt = await sendRawTransactionSync(client, {
526
491
  serializedTransaction: serializedTransaction_final,
527
492
  });
528
493
  if (reservation)
@@ -530,7 +495,6 @@ export function charge(parameters = {}) {
530
495
  const matchedLogs = await assertTransferLogs(receipt, {
531
496
  currency,
532
497
  sender: transaction.from,
533
- settlementSenders,
534
498
  transfers,
535
499
  });
536
500
  if (!memo)
@@ -547,7 +511,7 @@ export function charge(parameters = {}) {
547
511
  // Optimistic path: broadcast without waiting for confirmation
548
512
  // (simulation above already ran). The returned receipt assumes
549
513
  // success — callers opt in via waitForConfirmation: false.
550
- const reference = await sendRawTransaction(broadcastClient, {
514
+ const reference = await sendRawTransaction(client, {
551
515
  serializedTransaction: serializedTransaction_final,
552
516
  });
553
517
  if (reference.toLowerCase() !== finalHash.toLowerCase())
@@ -586,11 +550,10 @@ function chargeBinding(request) {
586
550
  // Exhaustively destructure so new charge request fields require an explicit binding decision.
587
551
  const { amount, currency, description, externalId, methodDetails, recipient, ...requestRest } = request;
588
552
  requestRest;
589
- const { chainId, feePayer, machineTokenEnabled, memo, splits, supportedModes, ...methodDetailsRest } = methodDetails ?? {};
553
+ const { chainId, feePayer, memo, splits, supportedModes, ...methodDetailsRest } = methodDetails ?? {};
590
554
  methodDetailsRest;
591
555
  void feePayer;
592
556
  return {
593
- machineTokenEnabled,
594
557
  amount,
595
558
  chainId,
596
559
  currency,
@@ -732,9 +695,7 @@ async function assertTransferLogs(receipt, parameters) {
732
695
  if (!(await isValidTransferSender({
733
696
  expectedSender: parameters.sender,
734
697
  sender: log.args.from,
735
- settlementSenders: parameters.settlementSenders,
736
698
  source: parameters.source,
737
- transactionSender: receipt.from,
738
699
  validateSender: parameters.validateSender,
739
700
  })))
740
701
  continue;
@@ -809,9 +770,6 @@ function isSameTransferLog(a, b) {
809
770
  async function isValidTransferSender(parameters) {
810
771
  if (TempoAddress.isEqual(parameters.sender, parameters.expectedSender))
811
772
  return true;
812
- if (TempoAddress.isEqual(parameters.transactionSender, parameters.expectedSender) &&
813
- parameters.settlementSenders?.some((sender) => TempoAddress.isEqual(parameters.sender, sender)))
814
- return true;
815
773
  if (!parameters.validateSender)
816
774
  return false;
817
775
  return parameters.validateSender({
@@ -7,20 +7,16 @@ import { renew as renewSubscription_, subscription as subscription_ } from './Su
7
7
  /**
8
8
  * Creates the common Tempo `charge` and `session` methods from shared parameters.
9
9
  *
10
- * `machineTokenEnabled` lets compatible clients fund either method with the
11
- * first-party machine token while the merchant continues to request its payout
12
- * currency and recipient normally.
10
+ * When configured, `relay` applies to the `charge` method. Session vouchers
11
+ * remain local state transitions and session relay delegation will be added
12
+ * with its action-specific lifecycle support.
13
13
  *
14
14
  * @example
15
15
  * ```ts
16
16
  * import { Mppx, tempo } from 'mppx/server'
17
17
  *
18
18
  * const mppx = Mppx.create({
19
- * methods: tempo({
20
- * currency: '0x...',
21
- * machineTokenEnabled: true,
22
- * recipient: '0x...',
23
- * }),
19
+ * methods: [tempo.common({ currency: '0x...', recipient: '0x...' })],
24
20
  * })
25
21
  * ```
26
22
  */
@@ -41,7 +37,6 @@ export declare function tempo<const parameters extends tempo.Parameters>(paramet
41
37
  }, import("zod/v4/core").$strip>], "type">;
42
38
  };
43
39
  request: import("zod/mini").ZodMiniPipe<import("zod/mini").ZodMiniObject<{
44
- machineTokenEnabled: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniBoolean<boolean>>;
45
40
  amount: import("zod/mini").ZodMiniString<string>;
46
41
  chainId: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniNumber<number>>;
47
42
  currency: import("zod/mini").ZodMiniString<string>;
@@ -67,7 +62,6 @@ export declare function tempo<const parameters extends tempo.Parameters>(paramet
67
62
  recipient?: string | undefined;
68
63
  amount: string;
69
64
  methodDetails?: {
70
- machineTokenEnabled?: boolean | undefined;
71
65
  chainId?: number | undefined;
72
66
  feePayer?: boolean | undefined;
73
67
  memo?: string | undefined;
@@ -79,7 +73,6 @@ export declare function tempo<const parameters extends tempo.Parameters>(paramet
79
73
  supportedModes?: ("pull" | "push")[] | undefined;
80
74
  } | undefined;
81
75
  }, {
82
- machineTokenEnabled?: boolean | undefined;
83
76
  amount: string;
84
77
  chainId?: number | undefined;
85
78
  currency: string;
@@ -104,7 +97,6 @@ export declare function tempo<const parameters extends tempo.Parameters>(paramet
104
97
  credential: {
105
98
  payload: import("zod/mini").ZodMiniDiscriminatedUnion<[import("zod/mini").ZodMiniObject<{
106
99
  action: import("zod/mini").ZodMiniLiteral<"open">;
107
- authorizationSignature: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
108
100
  authorizedSigner: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
109
101
  channelId: import("zod/mini").ZodMiniString<string>;
110
102
  cumulativeAmount: import("zod/mini").ZodMiniString<string>;
@@ -121,18 +113,15 @@ export declare function tempo<const parameters extends tempo.Parameters>(paramet
121
113
  type: import("zod/mini").ZodMiniLiteral<"transaction">;
122
114
  }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
123
115
  action: import("zod/mini").ZodMiniLiteral<"voucher">;
124
- authorizationSignature: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
125
116
  channelId: import("zod/mini").ZodMiniString<string>;
126
117
  cumulativeAmount: import("zod/mini").ZodMiniString<string>;
127
118
  descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../session/precompile/Protocol.js").ChannelDescriptor, import("../session/precompile/Protocol.js").ChannelDescriptor>>;
128
119
  signature: import("zod/mini").ZodMiniString<string>;
129
120
  }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
130
121
  action: import("zod/mini").ZodMiniLiteral<"close">;
131
- authorizationSignature: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
132
122
  channelId: import("zod/mini").ZodMiniString<string>;
133
123
  cumulativeAmount: import("zod/mini").ZodMiniString<string>;
134
124
  descriptor: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../session/precompile/Protocol.js").ChannelDescriptor, import("../session/precompile/Protocol.js").ChannelDescriptor>>;
135
- refundSignature: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
136
125
  signature: import("zod/mini").ZodMiniString<string>;
137
126
  }, import("zod/v4/core").$strip>], "action">;
138
127
  };
@@ -145,7 +134,6 @@ export declare function tempo<const parameters extends tempo.Parameters>(paramet
145
134
  escrowContract: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
146
135
  feePayer: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniPipe<import("zod/mini").ZodMiniUnion<readonly [import("zod/mini").ZodMiniBoolean<boolean>, import("zod/mini").ZodMiniCustom<import("viem").Account, import("viem").Account>]>, import("zod/mini").ZodMiniTransform<boolean, boolean | import("viem").Account>>>;
147
136
  feeToken: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
148
- machineTokenEnabled: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniBoolean<boolean>>;
149
137
  minVoucherDelta: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
150
138
  operator: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
151
139
  recipient: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
@@ -169,7 +157,6 @@ export declare function tempo<const parameters extends tempo.Parameters>(paramet
169
157
  chainId?: number | undefined;
170
158
  feePayer?: boolean | undefined;
171
159
  feeToken?: string | undefined;
172
- machineTokenEnabled?: boolean | undefined;
173
160
  operator?: string | undefined;
174
161
  sessionProtocol?: "v1" | "v2" | undefined;
175
162
  sessionSnapshot?: import("../session/Snapshot.js").SessionSnapshot | undefined;
@@ -183,7 +170,6 @@ export declare function tempo<const parameters extends tempo.Parameters>(paramet
183
170
  escrowContract?: string | undefined;
184
171
  feePayer?: boolean | undefined;
185
172
  feeToken?: string | undefined;
186
- machineTokenEnabled?: boolean | undefined;
187
173
  minVoucherDelta?: string | undefined;
188
174
  operator?: string | undefined;
189
175
  recipient?: string | undefined;
@@ -20,20 +20,16 @@ function createSessionMethod(parameters) {
20
20
  /**
21
21
  * Creates the common Tempo `charge` and `session` methods from shared parameters.
22
22
  *
23
- * `machineTokenEnabled` lets compatible clients fund either method with the
24
- * first-party machine token while the merchant continues to request its payout
25
- * currency and recipient normally.
23
+ * When configured, `relay` applies to the `charge` method. Session vouchers
24
+ * remain local state transitions and session relay delegation will be added
25
+ * with its action-specific lifecycle support.
26
26
  *
27
27
  * @example
28
28
  * ```ts
29
29
  * import { Mppx, tempo } from 'mppx/server'
30
30
  *
31
31
  * const mppx = Mppx.create({
32
- * methods: tempo({
33
- * currency: '0x...',
34
- * machineTokenEnabled: true,
35
- * recipient: '0x...',
36
- * }),
32
+ * methods: [tempo.common({ currency: '0x...', recipient: '0x...' })],
37
33
  * })
38
34
  * ```
39
35
  */