mppx 0.8.18 → 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.
- package/CHANGELOG.md +22 -0
- package/README.md +0 -6
- package/dist/Challenge.d.ts +7 -0
- package/dist/Challenge.js +32 -6
- package/dist/Constants.d.ts +1 -0
- package/dist/Constants.js +1 -0
- package/dist/Credential.d.ts +11 -5
- package/dist/Credential.js +8 -8
- package/dist/Html.js +1 -1
- package/dist/cli/THIRD-PARTY-LICENSES.txt +1 -1
- package/dist/cli/cli.d.ts +2 -2
- package/dist/cli/cli.js +134 -134
- package/dist/cli/plugins/index.js +13 -13
- package/dist/cli/sessions/Manager.js +4 -6
- package/dist/cli/sessions/commands.d.ts +1 -1
- package/dist/cli/sessions/store.js +13 -19
- package/dist/cli/validate/index.d.ts +2 -2
- package/dist/client/Mppx.d.ts +39 -2
- package/dist/client/Mppx.js +102 -46
- package/dist/client/Transport.js +1 -1
- package/dist/client/internal/protocols/Mpp.d.ts +1 -1
- package/dist/client/internal/protocols/Mpp.js +5 -3
- package/dist/client/internal/protocols/Protocol.d.ts +3 -1
- package/dist/client/internal/protocols/Shared.js +5 -1
- package/dist/integrations/x402/Evm.d.ts +29 -0
- package/dist/integrations/x402/Evm.js +150 -0
- package/dist/integrations/x402/Negotiator.d.ts +36 -0
- package/dist/integrations/x402/Negotiator.js +165 -0
- package/dist/mcp/internal/Credential.d.ts +9 -0
- package/dist/mcp/internal/Credential.js +16 -0
- package/dist/mcp/server/Transport.js +2 -4
- package/dist/middlewares/express.js +5 -12
- package/dist/middlewares/internal/express.d.ts +8 -0
- package/dist/middlewares/internal/express.js +24 -0
- package/dist/middlewares/internal/node.d.ts +10 -0
- package/dist/middlewares/internal/node.js +34 -0
- package/dist/proxy/Proxy.js +15 -9
- package/dist/server/Mppx.d.ts +2 -0
- package/dist/server/Mppx.js +17 -14
- package/dist/server/Transport.d.ts +8 -2
- package/dist/server/Transport.js +6 -3
- package/dist/server/internal/SecretKey.d.ts +3 -0
- package/dist/server/internal/SecretKey.js +9 -0
- package/dist/server/internal/html/serviceWorker.client.d.ts +1 -1
- package/dist/server/internal/html/serviceWorker.client.js +2 -2
- package/dist/server/internal/html/serviceWorker.gen.d.ts +1 -1
- package/dist/server/internal/html/serviceWorker.gen.js +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/tempo/Methods.d.ts +0 -10
- package/dist/tempo/Methods.js +3 -12
- package/dist/tempo/client/Charge.d.ts +0 -3
- package/dist/tempo/client/Charge.js +3 -13
- package/dist/tempo/client/Methods.d.ts +0 -10
- package/dist/tempo/internal/account.d.ts +15 -6
- package/dist/tempo/internal/account.js +17 -26
- package/dist/tempo/internal/defaults.d.ts +0 -11
- package/dist/tempo/internal/defaults.js +0 -11
- package/dist/tempo/internal/fee-payer.d.ts +21 -3
- package/dist/tempo/internal/fee-payer.js +10 -19
- package/dist/tempo/internal/remote-fee-payer.d.ts +12 -0
- package/dist/tempo/internal/remote-fee-payer.js +17 -0
- package/dist/tempo/legacy/client/Session.d.ts +0 -7
- package/dist/tempo/server/Charge.d.ts +0 -3
- package/dist/tempo/server/Charge.js +26 -68
- package/dist/tempo/server/Methods.d.ts +4 -18
- package/dist/tempo/server/Methods.js +4 -8
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/session/client/ChannelOps.d.ts +0 -14
- package/dist/tempo/session/client/ChannelOps.js +0 -22
- package/dist/tempo/session/client/ChannelStore.d.ts +5 -0
- package/dist/tempo/session/client/ChannelStore.js +2 -2
- package/dist/tempo/session/client/CredentialState.d.ts +2 -12
- package/dist/tempo/session/client/CredentialState.js +75 -73
- package/dist/tempo/session/client/Session.d.ts +2 -9
- package/dist/tempo/session/client/Session.js +71 -176
- package/dist/tempo/session/client/SessionManager.js +9 -28
- package/dist/tempo/session/precompile/Chain.d.ts +0 -4
- package/dist/tempo/session/precompile/Chain.js +2 -29
- package/dist/tempo/session/precompile/Protocol.d.ts +0 -13
- package/dist/tempo/session/precompile/Voucher.d.ts +1 -3
- package/dist/tempo/session/precompile/Voucher.js +12 -6
- package/dist/tempo/session/server/ChannelStore.d.ts +0 -6
- package/dist/tempo/session/server/ChannelStore.js +4 -11
- package/dist/tempo/session/server/CredentialVerification.d.ts +7 -9
- package/dist/tempo/session/server/CredentialVerification.js +118 -184
- package/dist/tempo/session/server/RequestState.d.ts +0 -17
- package/dist/tempo/session/server/RequestState.js +15 -59
- package/dist/tempo/session/server/Session.d.ts +0 -9
- package/dist/tempo/session/server/Session.js +8 -37
- package/dist/tempo/session/server/Settlement.d.ts +0 -7
- package/dist/tempo/session/server/Settlement.js +16 -50
- package/dist/viem/Client.d.ts +7 -2
- package/dist/viem/Client.js +17 -5
- package/dist/x402/Types.d.ts +2 -0
- package/dist/x402/Types.js +2 -0
- package/dist/x402/mcp.d.ts +20 -0
- package/dist/x402/mcp.js +153 -0
- package/dist/x402/middlewares/express.d.ts +23 -0
- package/dist/x402/middlewares/express.js +49 -0
- package/dist/x402/middlewares/hono.d.ts +13 -0
- package/dist/x402/middlewares/hono.js +36 -0
- package/dist/x402/middlewares/next.d.ts +17 -0
- package/dist/x402/middlewares/next.js +58 -0
- package/package.json +41 -1
- package/dist/tempo/internal/machine-token-charge.d.ts +0 -51
- package/dist/tempo/internal/machine-token-charge.js +0 -113
- package/dist/tempo/internal/machine-token-session.d.ts +0 -88
- package/dist/tempo/internal/machine-token-session.js +0 -173
- package/dist/tempo/internal/signature-envelope.d.ts +0 -14
- package/dist/tempo/internal/signature-envelope.js +0 -28
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as SignatureEnvelope from 'ox/tempo/SignatureEnvelope';
|
|
2
|
-
import {
|
|
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 {
|
|
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,
|
|
63
|
-
if (configuredFeeToken &&
|
|
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
|
-
|
|
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,
|
|
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 {
|
|
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
|
-
!!(
|
|
183
|
+
!!(Account.is(request.feePayer) ? request.feePayer : feePayer || remoteFeePayer);
|
|
192
184
|
const transfers = getExpectedTransfers({ amount, memo, methodDetails, recipient });
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
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,
|
|
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 =
|
|
333
|
-
const requested = account ?? feePayer ?? feePayerUrl;
|
|
304
|
+
const account = Account.is(request.feePayer) ? request.feePayer : feePayer;
|
|
334
305
|
if (credential)
|
|
335
|
-
return account ?? (
|
|
336
|
-
|
|
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
|
-
?
|
|
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,
|
|
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 (
|
|
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(
|
|
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(
|
|
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,
|
|
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
|
-
* `
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
-
* `
|
|
24
|
-
*
|
|
25
|
-
*
|
|
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
|
*/
|