mppx 0.3.9 → 0.3.12
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/README.md +3 -3
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +2 -0
- package/dist/Challenge.js.map +1 -1
- package/dist/Errors.d.ts +0 -2
- package/dist/Errors.d.ts.map +1 -1
- package/dist/Errors.js +1 -3
- package/dist/Errors.js.map +1 -1
- package/dist/client/Mppx.d.ts +1 -1
- package/dist/client/Mppx.d.ts.map +1 -1
- package/dist/client/internal/Fetch.d.ts +1 -1
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +23 -4
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/internal/constantTimeEqual.d.ts.map +1 -1
- package/dist/internal/constantTimeEqual.js +4 -6
- package/dist/internal/constantTimeEqual.js.map +1 -1
- package/dist/internal/env.d.ts +2 -2
- package/dist/internal/env.d.ts.map +1 -1
- package/dist/internal/env.js +1 -2
- package/dist/internal/env.js.map +1 -1
- package/dist/middlewares/internal/mppx.d.ts.map +1 -1
- package/dist/middlewares/internal/mppx.js +6 -2
- package/dist/middlewares/internal/mppx.js.map +1 -1
- package/dist/server/Mppx.d.ts +13 -3
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +46 -3
- package/dist/server/Mppx.js.map +1 -1
- package/dist/tempo/client/Charge.d.ts +10 -0
- package/dist/tempo/client/Charge.d.ts.map +1 -1
- package/dist/tempo/client/Charge.js +23 -9
- package/dist/tempo/client/Charge.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +1 -0
- package/dist/tempo/client/Methods.d.ts.map +1 -1
- package/dist/tempo/internal/auto-swap.d.ts +49 -0
- package/dist/tempo/internal/auto-swap.d.ts.map +1 -0
- package/dist/tempo/internal/auto-swap.js +89 -0
- package/dist/tempo/internal/auto-swap.js.map +1 -0
- package/dist/tempo/internal/fee-payer.d.ts +15 -0
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -0
- package/dist/tempo/internal/fee-payer.js +41 -0
- package/dist/tempo/internal/fee-payer.js.map +1 -0
- package/dist/tempo/internal/selectors.d.ts +5 -0
- package/dist/tempo/internal/selectors.d.ts.map +1 -0
- package/dist/tempo/internal/selectors.js +7 -0
- package/dist/tempo/internal/selectors.js.map +1 -0
- package/dist/tempo/internal/simulate.d.ts +21 -0
- package/dist/tempo/internal/simulate.d.ts.map +1 -0
- package/dist/tempo/internal/simulate.js +31 -0
- package/dist/tempo/internal/simulate.js.map +1 -0
- package/dist/tempo/server/Charge.d.ts +12 -0
- package/dist/tempo/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +36 -12
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Session.d.ts +14 -0
- package/dist/tempo/server/Session.d.ts.map +1 -1
- package/dist/tempo/server/Session.js +59 -40
- package/dist/tempo/server/Session.js.map +1 -1
- package/dist/tempo/session/Chain.d.ts +3 -0
- package/dist/tempo/session/Chain.d.ts.map +1 -1
- package/dist/tempo/session/Chain.js +27 -6
- package/dist/tempo/session/Chain.js.map +1 -1
- package/package.json +1 -1
- package/src/Challenge.ts +2 -0
- package/src/Errors.test.ts +43 -18
- package/src/Errors.ts +1 -4
- package/src/client/Mppx.test-d.ts +28 -0
- package/src/client/Mppx.test.ts +1 -0
- package/src/client/Mppx.ts +3 -3
- package/src/client/internal/Fetch.test.ts +410 -0
- package/src/client/internal/Fetch.ts +25 -7
- package/src/internal/constantTimeEqual.ts +5 -4
- package/src/internal/env.test.ts +2 -2
- package/src/internal/env.ts +4 -5
- package/src/middlewares/express.test.ts +5 -0
- package/src/middlewares/hono.test.ts +5 -0
- package/src/middlewares/internal/mppx.ts +5 -2
- package/src/middlewares/nextjs.test.ts +5 -0
- package/src/proxy/Proxy.test.ts +3 -0
- package/src/proxy/services/openai.test.ts +3 -0
- package/src/server/Mppx.test.ts +93 -2
- package/src/server/Mppx.ts +81 -6
- package/src/tempo/client/Charge.ts +40 -9
- package/src/tempo/internal/auto-swap.test.ts +113 -0
- package/src/tempo/internal/auto-swap.ts +141 -0
- package/src/tempo/internal/fee-payer.test.ts +223 -0
- package/src/tempo/internal/fee-payer.ts +53 -0
- package/src/tempo/internal/selectors.ts +10 -0
- package/src/tempo/internal/simulate.ts +49 -0
- package/src/tempo/server/Charge.test.ts +436 -3
- package/src/tempo/server/Charge.ts +52 -23
- package/src/tempo/server/Session.test.ts +49 -0
- package/src/tempo/server/Session.ts +76 -34
- package/src/tempo/session/Chain.test.ts +36 -0
- package/src/tempo/session/Chain.ts +38 -2
|
@@ -7,6 +7,7 @@ import * as Account from '../../viem/Account.js';
|
|
|
7
7
|
import * as Client from '../../viem/Client.js';
|
|
8
8
|
import * as z from '../../zod.js';
|
|
9
9
|
import * as Attribution from '../Attribution.js';
|
|
10
|
+
import * as AutoSwap from '../internal/auto-swap.js';
|
|
10
11
|
import * as defaults from '../internal/defaults.js';
|
|
11
12
|
import * as Methods from '../Methods.js';
|
|
12
13
|
/**
|
|
@@ -33,26 +34,39 @@ export function charge(parameters = {}) {
|
|
|
33
34
|
return Method.toClient(Methods.charge, {
|
|
34
35
|
context: z.object({
|
|
35
36
|
account: z.optional(z.custom()),
|
|
37
|
+
autoSwap: z.optional(z.custom()),
|
|
36
38
|
}),
|
|
37
39
|
async createCredential({ challenge, context }) {
|
|
38
40
|
const chainId = challenge.request.methodDetails?.chainId;
|
|
39
41
|
const client = await getClient({ chainId });
|
|
40
42
|
const account = getAccount(client, context);
|
|
41
43
|
const { request } = challenge;
|
|
42
|
-
const { amount,
|
|
44
|
+
const { amount, methodDetails } = request;
|
|
45
|
+
const currency = request.currency;
|
|
46
|
+
const recipient = request.recipient;
|
|
43
47
|
const memo = methodDetails?.memo
|
|
44
48
|
? methodDetails.memo
|
|
45
49
|
: Attribution.encode({ serverId: challenge.realm, clientId });
|
|
50
|
+
const transferCall = Actions.token.transfer.call({
|
|
51
|
+
amount: BigInt(amount),
|
|
52
|
+
memo,
|
|
53
|
+
to: recipient,
|
|
54
|
+
token: currency,
|
|
55
|
+
});
|
|
56
|
+
const autoSwap = AutoSwap.resolve(context?.autoSwap ?? parameters.autoSwap, AutoSwap.defaultCurrencies);
|
|
57
|
+
const swapCalls = autoSwap
|
|
58
|
+
? await AutoSwap.findCalls(client, {
|
|
59
|
+
account: account.address,
|
|
60
|
+
amountOut: BigInt(amount),
|
|
61
|
+
tokenOut: currency,
|
|
62
|
+
tokenIn: autoSwap.tokenIn,
|
|
63
|
+
slippage: autoSwap.slippage,
|
|
64
|
+
})
|
|
65
|
+
: undefined;
|
|
66
|
+
const calls = [...(swapCalls ?? []), transferCall];
|
|
46
67
|
const prepared = await prepareTransactionRequest(client, {
|
|
47
68
|
account,
|
|
48
|
-
calls
|
|
49
|
-
Actions.token.transfer.call({
|
|
50
|
-
amount: BigInt(amount),
|
|
51
|
-
memo,
|
|
52
|
-
to: recipient,
|
|
53
|
-
token: currency,
|
|
54
|
-
}),
|
|
55
|
-
],
|
|
69
|
+
calls,
|
|
56
70
|
...(methodDetails?.feePayer && { feePayer: true }),
|
|
57
71
|
nonceKey: 'expiring',
|
|
58
72
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Charge.js","sourceRoot":"","sources":["../../../src/tempo/client/Charge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Charge.js","sourceRoot":"","sources":["../../../src/tempo/client/Charge.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,6 +64,7 @@ export declare function tempo(parameters?: tempo.Parameters): readonly [import("
|
|
|
64
64
|
};
|
|
65
65
|
}, import("zod/mini").ZodMiniObject<{
|
|
66
66
|
account: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<`0x${string}` | import("../../viem/Account.js").Account | undefined, `0x${string}` | import("../../viem/Account.js").Account | undefined>>;
|
|
67
|
+
autoSwap: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniCustom<import("../internal/auto-swap.js").resolve.Value, import("../internal/auto-swap.js").resolve.Value>>;
|
|
67
68
|
}, import("zod/v4/core").$strip>>, import("../../Method.js").Client<{
|
|
68
69
|
readonly name: "tempo";
|
|
69
70
|
readonly intent: "session";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Methods.d.ts","sourceRoot":"","sources":["../../../src/tempo/client/Methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEhE;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,UAAU,GAAE,KAAK,CAAC,UAAe
|
|
1
|
+
{"version":3,"file":"Methods.d.ts","sourceRoot":"","sources":["../../../src/tempo/client/Methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEhE;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,UAAU,GAAE,KAAK,CAAC,UAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAEtD;AAED,yBAAiB,KAAK,CAAC;IACrB,KAAY,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAA;IAEvE,kFAAkF;IAC3E,MAAM,MAAM,gBAAU,CAAA;IAC7B,6EAA6E;IACtE,MAAM,OAAO,iBAAW,CAAA;CAChC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Address, Client } from 'viem';
|
|
2
|
+
/** Default fallback currencies for auto-swap, in priority order. */
|
|
3
|
+
export declare const defaultCurrencies: readonly Address[];
|
|
4
|
+
/**
|
|
5
|
+
* Finds the optimal swap calls to acquire `amountOut` of `tokenOut`,
|
|
6
|
+
* returning an approve + buy call sequence if a viable route is found.
|
|
7
|
+
*
|
|
8
|
+
* Returns `undefined` if the account already holds enough of `tokenOut`
|
|
9
|
+
* or no viable swap route exists from the given input tokens.
|
|
10
|
+
*/
|
|
11
|
+
export declare function findCalls(client: Client, parameters: findCalls.Parameters): Promise<findCalls.ReturnType>;
|
|
12
|
+
export declare namespace findCalls {
|
|
13
|
+
type Parameters = {
|
|
14
|
+
/** Address of the account to check balances for. */
|
|
15
|
+
account: Address;
|
|
16
|
+
/** Amount of the target token needed. */
|
|
17
|
+
amountOut: bigint;
|
|
18
|
+
/** Candidate input tokens to swap from, in priority order. */
|
|
19
|
+
tokenIn: readonly Address[];
|
|
20
|
+
/** Max slippage tolerance as a percentage (e.g. `1` = 1%). */
|
|
21
|
+
slippage: number;
|
|
22
|
+
/** Address of the target token to acquire. */
|
|
23
|
+
tokenOut: Address;
|
|
24
|
+
};
|
|
25
|
+
/** `undefined` when no swap is needed (account has sufficient balance). */
|
|
26
|
+
type ReturnType = readonly object[] | undefined;
|
|
27
|
+
}
|
|
28
|
+
/** Resolves an auto-swap configuration value into concrete currencies and slippage. */
|
|
29
|
+
export declare function resolve(value: resolve.Value | undefined, defaultCurrencies: readonly Address[]): resolve.Resolved | false;
|
|
30
|
+
export declare namespace resolve {
|
|
31
|
+
type Options = {
|
|
32
|
+
/** Fallback tokens to try swapping from, in priority order. */
|
|
33
|
+
tokenIn?: Address[] | undefined;
|
|
34
|
+
/** Max slippage tolerance as a percentage (e.g. `1` = 1%). @default 1 */
|
|
35
|
+
slippage?: number | undefined;
|
|
36
|
+
};
|
|
37
|
+
type Value = boolean | Options;
|
|
38
|
+
type Resolved = {
|
|
39
|
+
tokenIn: readonly Address[];
|
|
40
|
+
slippage: number;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export declare class InsufficientFundsError extends Error {
|
|
44
|
+
readonly name = "InsufficientFundsError";
|
|
45
|
+
constructor({ currency }: {
|
|
46
|
+
currency: Address;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=auto-swap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-swap.d.ts","sourceRoot":"","sources":["../../../src/tempo/internal/auto-swap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAS3C,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,EAAE,SAAS,OAAO,EAG/C,CAAA;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,SAAS,CAAC,UAAU,GAC/B,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAuD/B;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAK,UAAU,GAAG;QAChB,oDAAoD;QACpD,OAAO,EAAE,OAAO,CAAA;QAChB,yCAAyC;QACzC,SAAS,EAAE,MAAM,CAAA;QACjB,8DAA8D;QAC9D,OAAO,EAAE,SAAS,OAAO,EAAE,CAAA;QAC3B,8DAA8D;QAC9D,QAAQ,EAAE,MAAM,CAAA;QAChB,8CAA8C;QAC9C,QAAQ,EAAE,OAAO,CAAA;KAClB,CAAA;IAED,2EAA2E;IAC3E,KAAK,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAChD;AAED,uFAAuF;AACvF,wBAAgB,OAAO,CACrB,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,EAChC,iBAAiB,EAAE,SAAS,OAAO,EAAE,GACpC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAa1B;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,OAAO,GAAG;QACb,+DAA+D;QAC/D,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAA;QAC/B,yEAAyE;QACzE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC9B,CAAA;IAED,KAAK,KAAK,GAAG,OAAO,GAAG,OAAO,CAAA;IAE9B,KAAK,QAAQ,GAAG;QAAE,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAClE;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,SAAkB,IAAI,4BAA2B;gBAErC,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE;CAKhD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { isAddressEqual } from 'viem';
|
|
2
|
+
import { readContract } from 'viem/actions';
|
|
3
|
+
import { Actions, Addresses } from 'viem/tempo';
|
|
4
|
+
import * as defaults from './defaults.js';
|
|
5
|
+
/** Basis-point denominator (100% = 10 000 bps). */
|
|
6
|
+
const bps = 10000n;
|
|
7
|
+
/** Default fallback currencies for auto-swap, in priority order. */
|
|
8
|
+
export const defaultCurrencies = [
|
|
9
|
+
defaults.tokens.pathUsd,
|
|
10
|
+
defaults.tokens.usdc,
|
|
11
|
+
];
|
|
12
|
+
/**
|
|
13
|
+
* Finds the optimal swap calls to acquire `amountOut` of `tokenOut`,
|
|
14
|
+
* returning an approve + buy call sequence if a viable route is found.
|
|
15
|
+
*
|
|
16
|
+
* Returns `undefined` if the account already holds enough of `tokenOut`
|
|
17
|
+
* or no viable swap route exists from the given input tokens.
|
|
18
|
+
*/
|
|
19
|
+
export async function findCalls(client, parameters) {
|
|
20
|
+
const { account, amountOut, tokenOut, tokenIn, slippage } = parameters;
|
|
21
|
+
const candidates = tokenIn.filter((t) => !isAddressEqual(t, tokenOut));
|
|
22
|
+
const balanceResults = await Promise.allSettled([
|
|
23
|
+
readContract(client, Actions.token.getBalance.call({ account, token: tokenOut })),
|
|
24
|
+
...candidates.map((t) => readContract(client, Actions.token.getBalance.call({ account, token: t }))),
|
|
25
|
+
]);
|
|
26
|
+
// If the account already has enough of the target token, no swap needed.
|
|
27
|
+
const targetBalance = balanceResults[0];
|
|
28
|
+
if (targetBalance.status === 'fulfilled' && targetBalance.value >= amountOut)
|
|
29
|
+
return undefined;
|
|
30
|
+
// Find first candidate with enough balance to cover a swap.
|
|
31
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
32
|
+
const result = balanceResults[i + 1];
|
|
33
|
+
if (result.status !== 'fulfilled')
|
|
34
|
+
continue;
|
|
35
|
+
const balance = result.value;
|
|
36
|
+
if (balance <= 0n)
|
|
37
|
+
continue;
|
|
38
|
+
const tokenIn = candidates[i];
|
|
39
|
+
try {
|
|
40
|
+
const quotedAmountIn = await Actions.dex.getBuyQuote(client, {
|
|
41
|
+
tokenIn,
|
|
42
|
+
tokenOut,
|
|
43
|
+
amountOut,
|
|
44
|
+
});
|
|
45
|
+
if (balance >= quotedAmountIn) {
|
|
46
|
+
const maxAmountIn = quotedAmountIn + (quotedAmountIn * BigInt(Math.round(slippage * 100))) / bps;
|
|
47
|
+
return [
|
|
48
|
+
Actions.token.approve.call({
|
|
49
|
+
token: tokenIn,
|
|
50
|
+
spender: Addresses.stablecoinDex,
|
|
51
|
+
amount: maxAmountIn,
|
|
52
|
+
}),
|
|
53
|
+
Actions.dex.buy.call({
|
|
54
|
+
tokenIn,
|
|
55
|
+
tokenOut,
|
|
56
|
+
amountOut,
|
|
57
|
+
maxAmountIn,
|
|
58
|
+
}),
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch { }
|
|
63
|
+
}
|
|
64
|
+
throw new InsufficientFundsError({ currency: tokenOut });
|
|
65
|
+
}
|
|
66
|
+
/** Resolves an auto-swap configuration value into concrete currencies and slippage. */
|
|
67
|
+
export function resolve(value, defaultCurrencies) {
|
|
68
|
+
if (!value)
|
|
69
|
+
return false;
|
|
70
|
+
if (value === true)
|
|
71
|
+
return { tokenIn: defaultCurrencies, slippage: 1 };
|
|
72
|
+
const tokenIn = value.tokenIn
|
|
73
|
+
? [
|
|
74
|
+
...value.tokenIn,
|
|
75
|
+
...defaultCurrencies.filter((d) => !value.tokenIn.some((c) => isAddressEqual(c, d))),
|
|
76
|
+
]
|
|
77
|
+
: defaultCurrencies;
|
|
78
|
+
return {
|
|
79
|
+
tokenIn,
|
|
80
|
+
slippage: value.slippage ?? 1,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export class InsufficientFundsError extends Error {
|
|
84
|
+
constructor({ currency }) {
|
|
85
|
+
super(`Insufficient funds: no balance in ${currency} and no viable swap route from fallback currencies.`);
|
|
86
|
+
this.name = 'InsufficientFundsError';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=auto-swap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-swap.js","sourceRoot":"","sources":["../../../src/tempo/internal/auto-swap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Allowed call patterns for fee-payer sponsored transactions.
|
|
3
|
+
* Each inner array is an ordered list of function selectors.
|
|
4
|
+
*/
|
|
5
|
+
export declare const callScopes: `0x${string}`[][];
|
|
6
|
+
/** Validates that a set of transaction calls matches an allowed fee-payer pattern. */
|
|
7
|
+
export declare function validateCalls(calls: readonly {
|
|
8
|
+
data?: `0x${string}` | undefined;
|
|
9
|
+
to?: `0x${string}` | undefined;
|
|
10
|
+
}[], details: Record<string, string>): void;
|
|
11
|
+
export declare class FeePayerValidationError extends Error {
|
|
12
|
+
readonly name = "FeePayerValidationError";
|
|
13
|
+
constructor(reason: string, details: Record<string, string>);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=fee-payer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee-payer.d.ts","sourceRoot":"","sources":["../../../src/tempo/internal/fee-payer.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,UAAU,mBAKtB,CAAA;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS;IAAE,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;IAAC,EAAE,CAAC,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,EAAE,EACtF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAqBhC;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAkB,IAAI,6BAA4B;gBAEtC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAQ5D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { decodeFunctionData, isAddressEqual } from 'viem';
|
|
2
|
+
import { Abis, Addresses } from 'viem/tempo';
|
|
3
|
+
import * as Selectors from './selectors.js';
|
|
4
|
+
/**
|
|
5
|
+
* Allowed call patterns for fee-payer sponsored transactions.
|
|
6
|
+
* Each inner array is an ordered list of function selectors.
|
|
7
|
+
*/
|
|
8
|
+
export const callScopes = [
|
|
9
|
+
[Selectors.transfer],
|
|
10
|
+
[Selectors.transferWithMemo],
|
|
11
|
+
[Selectors.approve, Selectors.swapExactAmountOut, Selectors.transfer],
|
|
12
|
+
[Selectors.approve, Selectors.swapExactAmountOut, Selectors.transferWithMemo],
|
|
13
|
+
];
|
|
14
|
+
/** Validates that a set of transaction calls matches an allowed fee-payer pattern. */
|
|
15
|
+
export function validateCalls(calls, details) {
|
|
16
|
+
const callSelectors = calls.map((c) => c.data?.slice(0, 10));
|
|
17
|
+
const allowed = callScopes.some((pattern) => pattern.length === callSelectors.length &&
|
|
18
|
+
pattern.every((sel, i) => sel === callSelectors[i]));
|
|
19
|
+
if (!allowed)
|
|
20
|
+
throw new FeePayerValidationError('disallowed call pattern in fee-payer transaction', details);
|
|
21
|
+
// Validate approve spender and buy target are the DEX.
|
|
22
|
+
const approveCall = calls.find((c) => c.data?.slice(0, 10) === Selectors.approve);
|
|
23
|
+
if (approveCall) {
|
|
24
|
+
const { args } = decodeFunctionData({ abi: Abis.tip20, data: approveCall.data });
|
|
25
|
+
if (!isAddressEqual(args[0], Addresses.stablecoinDex))
|
|
26
|
+
throw new FeePayerValidationError('approve spender is not the DEX', details);
|
|
27
|
+
}
|
|
28
|
+
const buyCall = calls.find((c) => c.data?.slice(0, 10) === Selectors.swapExactAmountOut);
|
|
29
|
+
if (buyCall && (!buyCall.to || !isAddressEqual(buyCall.to, Addresses.stablecoinDex)))
|
|
30
|
+
throw new FeePayerValidationError('buy target is not the DEX', details);
|
|
31
|
+
}
|
|
32
|
+
export class FeePayerValidationError extends Error {
|
|
33
|
+
constructor(reason, details) {
|
|
34
|
+
super([
|
|
35
|
+
`Invalid transaction: ${reason}`,
|
|
36
|
+
...Object.entries(details).map(([k, v]) => ` - ${k}: ${v}`),
|
|
37
|
+
].join('\n'));
|
|
38
|
+
this.name = 'FeePayerValidationError';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=fee-payer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee-payer.js","sourceRoot":"","sources":["../../../src/tempo/internal/fee-payer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,CAAC,SAAS,CAAC,QAAQ,CAAC;IACpB,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC5B,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,kBAAkB,EAAE,SAAS,CAAC,QAAQ,CAAC;IACrE,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,kBAAkB,EAAE,SAAS,CAAC,gBAAgB,CAAC;CAC9E,CAAA;AAED,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAC3B,KAAsF,EACtF,OAA+B;IAE/B,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAC7B,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM;QACvC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,CACtD,CAAA;IACD,IAAI,CAAC,OAAO;QACV,MAAM,IAAI,uBAAuB,CAAC,kDAAkD,EAAE,OAAO,CAAC,CAAA;IAEhG,uDAAuD;IACvD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAA;IACjF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,IAAK,EAAE,CAAC,CAAA;QACjF,IAAI,CAAC,cAAc,CAAE,IAAwB,CAAC,CAAC,CAAE,EAAE,SAAS,CAAC,aAAa,CAAC;YACzE,MAAM,IAAI,uBAAuB,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAA;IAChF,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,kBAAkB,CAAC,CAAA;IACxF,IAAI,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QAClF,MAAM,IAAI,uBAAuB,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAGhD,YAAY,MAAc,EAAE,OAA+B;QACzD,KAAK,CACH;YACE,wBAAwB,MAAM,EAAE;YAChC,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;SAC7D,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAA;QARe,SAAI,GAAG,yBAAyB,CAAA;IASlD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../src/tempo/internal/selectors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,eAA2D,CAAA;AAC/E,eAAO,MAAM,QAAQ,eAA4D,CAAA;AACjF,eAAO,MAAM,gBAAgB,eAAoE,CAAA;AACjG,eAAO,MAAM,kBAAkB,eAG9B,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AbiItem } from 'ox';
|
|
2
|
+
import { Abis } from 'viem/tempo';
|
|
3
|
+
export const approve = /*#__PURE__*/ AbiItem.getSelector(Abis.tip20, 'approve');
|
|
4
|
+
export const transfer = /*#__PURE__*/ AbiItem.getSelector(Abis.tip20, 'transfer');
|
|
5
|
+
export const transferWithMemo = /*#__PURE__*/ AbiItem.getSelector(Abis.tip20, 'transferWithMemo');
|
|
6
|
+
export const swapExactAmountOut = /*#__PURE__*/ AbiItem.getSelector(Abis.stablecoinDex, 'swapExactAmountOut');
|
|
7
|
+
//# sourceMappingURL=selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../../src/tempo/internal/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;AAC/E,MAAM,CAAC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;AACjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;AACjG,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CACjE,IAAI,CAAC,aAAa,EAClB,oBAAoB,CACrB,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Address, Client } from 'viem';
|
|
2
|
+
/**
|
|
3
|
+
* Simulate a Tempo transaction via `eth_estimateGas` to catch reverts
|
|
4
|
+
* (e.g. insufficient balance, invalid calls) before broadcasting.
|
|
5
|
+
*/
|
|
6
|
+
export declare function simulateTransaction(client: Client, transaction: {
|
|
7
|
+
from: Address;
|
|
8
|
+
chainId: number;
|
|
9
|
+
nonce?: number | bigint | undefined;
|
|
10
|
+
maxFeePerGas?: bigint | undefined;
|
|
11
|
+
maxPriorityFeePerGas?: bigint | undefined;
|
|
12
|
+
feeToken?: string | bigint | undefined;
|
|
13
|
+
nonceKey?: bigint | undefined;
|
|
14
|
+
validBefore?: number | undefined;
|
|
15
|
+
calls?: readonly {
|
|
16
|
+
to?: string | undefined;
|
|
17
|
+
value?: bigint | undefined;
|
|
18
|
+
data?: string | undefined;
|
|
19
|
+
}[];
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=simulate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulate.d.ts","sourceRoot":"","sources":["../../../src/tempo/internal/simulate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE3C;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE;IACX,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,KAAK,CAAC,EAAE,SAAS;QACf,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,EAAE,CAAA;CACJ,GACA,OAAO,CAAC,IAAI,CAAC,CAyBf"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simulate a Tempo transaction via `eth_estimateGas` to catch reverts
|
|
3
|
+
* (e.g. insufficient balance, invalid calls) before broadcasting.
|
|
4
|
+
*/
|
|
5
|
+
export async function simulateTransaction(client, transaction) {
|
|
6
|
+
const simCalls = (transaction.calls ?? []).map((c) => ({
|
|
7
|
+
to: c.to,
|
|
8
|
+
value: c.value ? `0x${c.value.toString(16)}` : '0x0',
|
|
9
|
+
input: c.data ?? '0x',
|
|
10
|
+
}));
|
|
11
|
+
await client.request({
|
|
12
|
+
method: 'eth_estimateGas',
|
|
13
|
+
params: [
|
|
14
|
+
{
|
|
15
|
+
from: transaction.from,
|
|
16
|
+
chainId: `0x${transaction.chainId.toString(16)}`,
|
|
17
|
+
nonce: `0x${BigInt(transaction.nonce ?? 0).toString(16)}`,
|
|
18
|
+
gas: '0x2dc6c0', // 3M cap
|
|
19
|
+
maxFeePerGas: `0x${(transaction.maxFeePerGas ?? 0n).toString(16)}`,
|
|
20
|
+
maxPriorityFeePerGas: `0x${(transaction.maxPriorityFeePerGas ?? 0n).toString(16)}`,
|
|
21
|
+
feeToken: transaction.feeToken,
|
|
22
|
+
nonceKey: `0x${(transaction.nonceKey ?? 0n).toString(16)}`,
|
|
23
|
+
calls: simCalls,
|
|
24
|
+
...(transaction.validBefore
|
|
25
|
+
? { validBefore: `0x${transaction.validBefore.toString(16)}` }
|
|
26
|
+
: {}),
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=simulate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../../src/tempo/internal/simulate.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,WAcC;IAED,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK;QACpD,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;KACtB,CAAC,CAAC,CAAA;IACH,MAAM,MAAM,CAAC,OAAO,CAAC;QACnB,MAAM,EAAE,iBAA0B;QAClC,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,OAAO,EAAE,KAAK,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAChD,KAAK,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBACzD,GAAG,EAAE,UAAU,EAAE,SAAS;gBAC1B,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAClE,oBAAoB,EAAE,KAAK,CAAC,WAAW,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAClF,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAC1D,KAAK,EAAE,QAAQ;gBACf,GAAG,CAAC,WAAW,CAAC,WAAW;oBACzB,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC9D,CAAC,CAAC,EAAE,CAAC;aACR;SACO;KACX,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -69,6 +69,18 @@ export declare namespace charge {
|
|
|
69
69
|
type Parameters = {
|
|
70
70
|
/** Testnet mode. */
|
|
71
71
|
testnet?: boolean | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Whether to wait for the charge transaction to confirm on-chain before
|
|
74
|
+
* responding. @default true
|
|
75
|
+
*
|
|
76
|
+
* When `false`, the transaction is simulated via `eth_estimateGas` and
|
|
77
|
+
* broadcast without waiting for inclusion. The receipt will optimistically
|
|
78
|
+
* report `status: 'success'` based on simulation alone — if the
|
|
79
|
+
* transaction reverts on-chain after broadcast (e.g. due to a state
|
|
80
|
+
* change between simulation and inclusion), the receipt will not reflect
|
|
81
|
+
* the failure.
|
|
82
|
+
*/
|
|
83
|
+
waitForConfirmation?: boolean | undefined;
|
|
72
84
|
} & Client.getResolver.Parameters & Account.resolve.Parameters & Defaults;
|
|
73
85
|
type DeriveDefaults<parameters extends Parameters> = types.DeriveDefaults<parameters, Defaults> & {
|
|
74
86
|
decimals: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Charge.d.ts","sourceRoot":"","sources":["../../../src/tempo/server/Charge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Charge.d.ts","sourceRoot":"","sources":["../../../src/tempo/server/Charge.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAKjD,OAAO,KAAK,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAExC;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,UAAU,SAAS,MAAM,CAAC,UAAU,EAC/D,UAAU,GAAE,UAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAyP1C;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAK,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC,CAAA;IAElG,KAAK,UAAU,GAAG;QAChB,oBAAoB;QACpB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC7B;;;;;;;;;;WAUG;QACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC1C,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,GAC/B,OAAO,CAAC,OAAO,CAAC,UAAU,GAC1B,QAAQ,CAAA;IAEV,KAAK,cAAc,CAAC,UAAU,SAAS,UAAU,IAAI,KAAK,CAAC,cAAc,CACvE,UAAU,EACV,QAAQ,CACT,GAAG;QACF,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { decodeFunctionData, isAddressEqual, parseEventLogs
|
|
2
|
-
import { getTransactionReceipt, sendRawTransactionSync, signTransaction } from 'viem/actions';
|
|
1
|
+
import { decodeFunctionData, isAddressEqual, parseEventLogs } from 'viem';
|
|
2
|
+
import { getTransactionReceipt, sendRawTransaction, sendRawTransactionSync, signTransaction, } from 'viem/actions';
|
|
3
3
|
import { tempo as tempo_chain } from 'viem/chains';
|
|
4
4
|
import { Abis, Transaction } from 'viem/tempo';
|
|
5
5
|
import { PaymentExpiredError } from '../../Errors.js';
|
|
@@ -7,9 +7,10 @@ import * as Method from '../../Method.js';
|
|
|
7
7
|
import * as Client from '../../viem/Client.js';
|
|
8
8
|
import * as Account from '../internal/account.js';
|
|
9
9
|
import * as defaults from '../internal/defaults.js';
|
|
10
|
+
import * as FeePayer from '../internal/fee-payer.js';
|
|
11
|
+
import * as Selectors from '../internal/selectors.js';
|
|
12
|
+
import { simulateTransaction } from '../internal/simulate.js';
|
|
10
13
|
import * as Methods from '../Methods.js';
|
|
11
|
-
const transferSelector = /*#__PURE__*/ toFunctionSelector('function transfer(address to, uint256 amount)');
|
|
12
|
-
const transferWithMemoSelector = /*#__PURE__*/ toFunctionSelector('function transferWithMemo(address to, uint256 amount, bytes32 memo)');
|
|
13
14
|
/**
|
|
14
15
|
* Creates a Tempo charge method intent for usage on the server.
|
|
15
16
|
*
|
|
@@ -21,7 +22,7 @@ const transferWithMemoSelector = /*#__PURE__*/ toFunctionSelector('function tran
|
|
|
21
22
|
* ```
|
|
22
23
|
*/
|
|
23
24
|
export function charge(parameters = {}) {
|
|
24
|
-
const { amount, currency = defaults.resolveCurrency(parameters), decimals = defaults.decimals, description, externalId, memo, } = parameters;
|
|
25
|
+
const { amount, currency = defaults.resolveCurrency(parameters), decimals = defaults.decimals, description, externalId, memo, waitForConfirmation = true, } = parameters;
|
|
25
26
|
const { recipient, feePayer } = Account.resolve(parameters);
|
|
26
27
|
const getClient = Client.getResolver({
|
|
27
28
|
chain: { ...tempo_chain, experimental_preconfirmationTime: 500 },
|
|
@@ -143,7 +144,7 @@ export function charge(parameters = {}) {
|
|
|
143
144
|
return false;
|
|
144
145
|
const selector = call.data.slice(0, 10);
|
|
145
146
|
if (memo) {
|
|
146
|
-
if (selector !==
|
|
147
|
+
if (selector !== Selectors.transferWithMemo)
|
|
147
148
|
return false;
|
|
148
149
|
try {
|
|
149
150
|
const { args } = decodeFunctionData({ abi: Abis.tip20, data: call.data });
|
|
@@ -156,7 +157,7 @@ export function charge(parameters = {}) {
|
|
|
156
157
|
return false;
|
|
157
158
|
}
|
|
158
159
|
}
|
|
159
|
-
if (selector ===
|
|
160
|
+
if (selector === Selectors.transfer) {
|
|
160
161
|
try {
|
|
161
162
|
const { args } = decodeFunctionData({ abi: Abis.tip20, data: call.data });
|
|
162
163
|
const [to, amount_] = args;
|
|
@@ -166,7 +167,7 @@ export function charge(parameters = {}) {
|
|
|
166
167
|
return false;
|
|
167
168
|
}
|
|
168
169
|
}
|
|
169
|
-
if (selector ===
|
|
170
|
+
if (selector === Selectors.transferWithMemo) {
|
|
170
171
|
try {
|
|
171
172
|
const { args } = decodeFunctionData({ abi: Abis.tip20, data: call.data });
|
|
172
173
|
const [to, amount_] = args;
|
|
@@ -184,6 +185,8 @@ export function charge(parameters = {}) {
|
|
|
184
185
|
currency,
|
|
185
186
|
recipient,
|
|
186
187
|
});
|
|
188
|
+
if (feePayer && methodDetails?.feePayer !== false)
|
|
189
|
+
FeePayer.validateCalls(calls, { amount, currency, recipient });
|
|
187
190
|
const serializedTransaction_final = await (async () => {
|
|
188
191
|
if (feePayer && methodDetails?.feePayer !== false) {
|
|
189
192
|
return signTransaction(client, {
|
|
@@ -194,10 +197,31 @@ export function charge(parameters = {}) {
|
|
|
194
197
|
}
|
|
195
198
|
return serializedTransaction;
|
|
196
199
|
})();
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
200
|
+
if (waitForConfirmation) {
|
|
201
|
+
const receipt = await sendRawTransactionSync(client, {
|
|
202
|
+
serializedTransaction: serializedTransaction_final,
|
|
203
|
+
});
|
|
204
|
+
return toReceipt(receipt);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Optimistic path: simulate to catch obvious reverts, then broadcast
|
|
208
|
+
// without waiting for on-chain confirmation. The returned receipt
|
|
209
|
+
// assumes success — callers opt into this risk via waitForConfirmation: false.
|
|
210
|
+
await simulateTransaction(client, {
|
|
211
|
+
...transaction,
|
|
212
|
+
from: transaction.from,
|
|
213
|
+
calls,
|
|
214
|
+
});
|
|
215
|
+
const hash = await sendRawTransaction(client, {
|
|
216
|
+
serializedTransaction: serializedTransaction_final,
|
|
217
|
+
});
|
|
218
|
+
return {
|
|
219
|
+
method: 'tempo',
|
|
220
|
+
status: 'success',
|
|
221
|
+
timestamp: new Date().toISOString(),
|
|
222
|
+
reference: hash,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
201
225
|
}
|
|
202
226
|
default:
|
|
203
227
|
throw new Error(`Unsupported credential type "${payload.type}".`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Charge.js","sourceRoot":"","sources":["../../../src/tempo/server/Charge.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Charge.js","sourceRoot":"","sources":["../../../src/tempo/server/Charge.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,8 +115,22 @@ export declare function session<const parameters extends session.Parameters>(p?:
|
|
|
115
115
|
export declare namespace session {
|
|
116
116
|
type Defaults = LooseOmit<Method.RequestDefaults<typeof Methods.session>, 'feePayer' | 'recipient'>;
|
|
117
117
|
type Parameters = {
|
|
118
|
+
/** TTL in milliseconds for cached on-chain channel state. After this duration, the server re-queries on-chain state during voucher handling to detect forced close requests. @default 60_000 */
|
|
119
|
+
channelStateTtl?: number | undefined;
|
|
118
120
|
/** Minimum voucher delta to accept (numeric string, default: "0"). */
|
|
119
121
|
minVoucherDelta?: string | undefined;
|
|
122
|
+
/**
|
|
123
|
+
* Whether to wait for the open transaction to confirm on-chain before
|
|
124
|
+
* responding. @default true
|
|
125
|
+
*
|
|
126
|
+
* When `false`, the transaction is simulated via `eth_estimateGas` and
|
|
127
|
+
* broadcast without waiting for inclusion. The receipt will optimistically
|
|
128
|
+
* report `status: 'success'` based on simulation alone — if the
|
|
129
|
+
* transaction reverts on-chain after broadcast (e.g. due to a state
|
|
130
|
+
* change between simulation and inclusion), the receipt will not reflect
|
|
131
|
+
* the failure.
|
|
132
|
+
*/
|
|
133
|
+
waitForConfirmation?: boolean | undefined;
|
|
120
134
|
/** Store backend for channel state. */
|
|
121
135
|
store?: Store.Store | undefined;
|
|
122
136
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../src/tempo/server/Session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,GAAG,EAER,KAAK,OAAO,IAAI,YAAY,EAC5B,KAAK,MAAM,IAAI,WAAW,EAC3B,MAAM,MAAM,CAAA;AAab,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAEjD,OAAO,KAAK,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AASxC,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAA;AAI1D,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAA;AAWpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,UAAU,SAAS,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../src/tempo/server/Session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,GAAG,EAER,KAAK,OAAO,IAAI,YAAY,EAC5B,KAAK,MAAM,IAAI,WAAW,EAC3B,MAAM,MAAM,CAAA;AAab,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAEjD,OAAO,KAAK,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AASxC,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAA;AAI1D,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAA;AAWpD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,UAAU,SAAS,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gHAgMlF;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,QAAQ,GAAG,SAAS,CACvB,MAAM,CAAC,eAAe,CAAC,OAAO,OAAO,CAAC,OAAO,CAAC,EAC9C,UAAU,GAAG,WAAW,CACzB,CAAA;IAED,KAAK,UAAU,GAAG;QAChB,gMAAgM;QAChM,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACpC,sEAAsE;QACtE,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACpC;;;;;;;;;;WAUG;QACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QACzC,uCAAuC;QACvC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAA;QAC/B;;;;;;WAMG;QACH,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,GAAG,SAAS,CAAA;QACjD,oBAAoB;QACpB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC9B,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,GAC5B,MAAM,CAAC,WAAW,CAAC,UAAU,GAC7B,QAAQ,CAAA;IAEV,KAAK,cAAc,CAAC,UAAU,SAAS,UAAU,IAAI,KAAK,CAAC,cAAc,CACvE,UAAU,EACV,QAAQ,CACT,GAAG;QACF,QAAQ,EAAE,MAAM,CAAA;QAChB,cAAc,EAAE,OAAO,CAAA;KACxB,CAAA;CACF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,YAAY,CAAC,YAAY,EAChC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,GAAG,EACd,OAAO,CAAC,EAAE;IACR,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;CACpC,GACA,OAAO,CAAC,GAAG,CAAC,CA2Bd;AAED;;;;;;;;GAQG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,YAAY,CAAC,YAAY,EAChC,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAc7B"}
|