mppx 0.3.11 → 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/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/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/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +8 -6
- package/dist/tempo/server/Charge.js.map +1 -1
- package/package.json +1 -1
- package/src/client/Mppx.test-d.ts +28 -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/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/server/Charge.test.ts +374 -3
- package/src/tempo/server/Charge.ts +9 -18
package/dist/client/Mppx.d.ts
CHANGED
|
@@ -75,7 +75,7 @@ export declare namespace create {
|
|
|
75
75
|
* @internal
|
|
76
76
|
*/
|
|
77
77
|
type AnyContextFor<methods extends readonly Method.AnyClient[]> = {
|
|
78
|
-
[method in keyof methods]: methods[method] extends
|
|
78
|
+
[method in keyof methods]: NonNullable<methods[method]['context']> extends infer ctx ? ctx extends z.ZodMiniType ? z.input<ctx> : undefined : undefined;
|
|
79
79
|
}[number];
|
|
80
80
|
/**
|
|
81
81
|
* Flattens a methods config tuple, preserving positional types.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mppx.d.ts","sourceRoot":"","sources":["../../src/client/Mppx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,KAAK,CAAC,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAA;AAEjF;;GAEG;AACH,MAAM,MAAM,IAAI,CACd,OAAO,SAAS,OAAO,GAAG,OAAO,EACjC,SAAS,SAAS,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,IACzD;IACF,6EAA6E;IAC7E,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IAChD,4BAA4B;IAC5B,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IAChC,0BAA0B;IAC1B,SAAS,EAAE,SAAS,CAAA;IACpB,8FAA8F;IAC9F,gBAAgB,EAAE,CAChB,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EACzC,OAAO,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,KACzD,OAAO,CAAC,MAAM,CAAC,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CACpB,KAAK,CAAC,OAAO,SAAS,OAAO,EAC7B,KAAK,CAAC,SAAS,SAAS,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,CACzE,WAAW,EACX,QAAQ,CACT,EACD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAuCrE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAK,MAAM,CACT,OAAO,SAAS,OAAO,GAAG,OAAO,EACjC,SAAS,SAAS,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,IACzD;QACF,qEAAqE;QACrE,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;QAC/B,2EAA2E;QAC3E,WAAW,CAAC,EACR,CAAC,CACC,SAAS,EAAE,SAAS,CAAC,SAAS,EAC9B,OAAO,EAAE;YACP,gBAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;SACxF,KACE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,GACjC,SAAS,CAAA;QACb,2FAA2F;QAC3F,OAAO,EAAE,OAAO,CAAA;QAChB,2FAA2F;QAC3F,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC9B,2CAA2C;QAC3C,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;KAClC,CAAA;CACF;AAED;;;GAGG;AACH,KAAK,aAAa,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,IAAI;KAC/D,MAAM,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"Mppx.d.ts","sourceRoot":"","sources":["../../src/client/Mppx.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ import type * as z from '../../zod.js';
|
|
|
25
25
|
export declare function from<const methods extends readonly Method.AnyClient[]>(config: from.Config<methods>): from.Fetch<methods>;
|
|
26
26
|
/** Union of all context types from all methods that have context schemas. */
|
|
27
27
|
type AnyContextFor<methods extends readonly Method.AnyClient[]> = {
|
|
28
|
-
[K in keyof methods]: methods[K] extends
|
|
28
|
+
[K in keyof methods]: NonNullable<methods[K]['context']> extends infer ctx ? ctx extends z.ZodMiniType ? z.input<ctx> : undefined : undefined;
|
|
29
29
|
}[number];
|
|
30
30
|
export declare namespace from {
|
|
31
31
|
type Config<methods extends readonly Method.AnyClient[] = readonly Method.AnyClient[]> = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fetch.d.ts","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAItC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,EACpE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Fetch.d.ts","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAItC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,EACpE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAqCrB;AAED,6EAA6E;AAC7E,KAAK,aAAa,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,IAAI;KAC/D,CAAC,IAAI,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,GACtE,GAAG,SAAS,CAAC,CAAC,WAAW,GACvB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GACZ,SAAS,GACX,SAAS;CACd,CAAC,MAAM,CAAC,CAAA;AAET,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,KAAK,MAAM,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,GAAG,SAAS,MAAM,CAAC,SAAS,EAAE,IAAI;QACvF,qEAAqE;QACrE,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;QAC/B,+BAA+B;QAC/B,OAAO,EAAE,OAAO,CAAA;QAChB,2EAA2E;QAC3E,WAAW,CAAC,EACR,CAAC,CACC,SAAS,EAAE,SAAS,CAAC,SAAS,EAC9B,OAAO,EAAE;YACP,gBAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;SACxE,KACE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,GACjC,SAAS,CAAA;KACd,CAAA;IAED,KAAK,KAAK,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,GAAG,SAAS,MAAM,CAAC,SAAS,EAAE,IAAI,CACtF,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KACxB,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEtB,KAAK,WAAW,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,GAAG,SAAS,MAAM,CAAC,SAAS,EAAE,IACxF,UAAU,CAAC,WAAW,GAAG;QACvB,+DAA+D;QAC/D,OAAO,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KACjC,CAAA;CACJ;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,EACxE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAC/B,IAAI,CAGN;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,KAAK,MAAM,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,GAAG,SAAS,MAAM,CAAC,SAAS,EAAE,IACnF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAK9B"}
|
|
@@ -24,10 +24,13 @@ let originalFetch;
|
|
|
24
24
|
export function from(config) {
|
|
25
25
|
const { fetch = globalThis.fetch, methods, onChallenge } = config;
|
|
26
26
|
return async (input, init) => {
|
|
27
|
-
|
|
28
|
-
const response = await fetch(input,
|
|
27
|
+
// Pass init through untouched to preserve object identity for non-402 responses.
|
|
28
|
+
const response = await fetch(input, init);
|
|
29
29
|
if (response.status !== 402)
|
|
30
30
|
return response;
|
|
31
|
+
// Only extract context for payment handling after confirming 402.
|
|
32
|
+
const context = init?.context;
|
|
33
|
+
const { context: _, ...fetchInit } = (init ?? {});
|
|
31
34
|
const challenge = Challenge.fromResponse(response);
|
|
32
35
|
const mi = methods.find((m) => m.name === challenge.method && m.intent === challenge.intent);
|
|
33
36
|
if (!mi)
|
|
@@ -41,7 +44,7 @@ export function from(config) {
|
|
|
41
44
|
return fetch(input, {
|
|
42
45
|
...fetchInit,
|
|
43
46
|
headers: {
|
|
44
|
-
...fetchInit.headers,
|
|
47
|
+
...normalizeHeaders(fetchInit.headers),
|
|
45
48
|
Authorization: credential,
|
|
46
49
|
},
|
|
47
50
|
});
|
|
@@ -68,7 +71,8 @@ export function from(config) {
|
|
|
68
71
|
* ```
|
|
69
72
|
*/
|
|
70
73
|
export function polyfill(config) {
|
|
71
|
-
originalFetch
|
|
74
|
+
if (!originalFetch)
|
|
75
|
+
originalFetch = globalThis.fetch;
|
|
72
76
|
globalThis.fetch = from(config);
|
|
73
77
|
}
|
|
74
78
|
/**
|
|
@@ -91,6 +95,21 @@ export function restore() {
|
|
|
91
95
|
originalFetch = undefined;
|
|
92
96
|
}
|
|
93
97
|
}
|
|
98
|
+
/** @internal Normalizes headers to a plain object for spreading. */
|
|
99
|
+
function normalizeHeaders(headers) {
|
|
100
|
+
if (!headers)
|
|
101
|
+
return {};
|
|
102
|
+
if (headers instanceof Headers) {
|
|
103
|
+
const result = {};
|
|
104
|
+
headers.forEach((value, key) => {
|
|
105
|
+
result[key] = value;
|
|
106
|
+
});
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
if (Array.isArray(headers))
|
|
110
|
+
return Object.fromEntries(headers);
|
|
111
|
+
return headers;
|
|
112
|
+
}
|
|
94
113
|
/** @internal */
|
|
95
114
|
async function resolveCredential(challenge, mi, context) {
|
|
96
115
|
const parsedContext = mi.context && context !== undefined ? mi.context.parse(context) : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fetch.js","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAI/C,IAAI,aAAkD,CAAA;AAEtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,IAAI,CAClB,MAA4B;IAE5B,MAAM,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;IAEjE,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,
|
|
1
|
+
{"version":3,"file":"Fetch.js","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import * as Method from '../../Method.js';
|
|
|
2
2
|
import * as Account from '../../viem/Account.js';
|
|
3
3
|
import * as Client from '../../viem/Client.js';
|
|
4
4
|
import * as z from '../../zod.js';
|
|
5
|
+
import * as AutoSwap from '../internal/auto-swap.js';
|
|
5
6
|
/**
|
|
6
7
|
* Creates a Tempo charge method intent for usage on the client.
|
|
7
8
|
*
|
|
@@ -66,9 +67,18 @@ export declare function charge(parameters?: charge.Parameters): Method.Client<{
|
|
|
66
67
|
};
|
|
67
68
|
}, z.ZodMiniObject<{
|
|
68
69
|
account: z.ZodMiniOptional<z.ZodMiniCustom<`0x${string}` | Account.Account | undefined, `0x${string}` | Account.Account | undefined>>;
|
|
70
|
+
autoSwap: z.ZodMiniOptional<z.ZodMiniCustom<AutoSwap.resolve.Value, AutoSwap.resolve.Value>>;
|
|
69
71
|
}, z.core.$strip>>;
|
|
70
72
|
export declare namespace charge {
|
|
73
|
+
type AutoSwap = AutoSwap.resolve.Value;
|
|
71
74
|
type Parameters = {
|
|
75
|
+
/**
|
|
76
|
+
* Automatically swap from a fallback currency (pathUsd, USDC.e) via the
|
|
77
|
+
* Tempo DEX when the user lacks sufficient balance of the target currency.
|
|
78
|
+
*
|
|
79
|
+
* @default false
|
|
80
|
+
*/
|
|
81
|
+
autoSwap?: AutoSwap | undefined;
|
|
72
82
|
/** Client identifier used to derive the client fingerprint in attribution memos. */
|
|
73
83
|
clientId?: string | undefined;
|
|
74
84
|
} & Account.getResolver.Parameters & Client.getResolver.Parameters;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Charge.d.ts","sourceRoot":"","sources":["../../../src/tempo/client/Charge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Charge.d.ts","sourceRoot":"","sources":["../../../src/tempo/client/Charge.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAA;AAIpD;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,UAAU,GAAE,MAAM,CAAC,UAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAsExD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAK,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAA;IAEtC,KAAK,UAAU,GAAG;QAChB;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;QAC/B,oFAAoF;QACpF,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC9B,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,GAChC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAA;CAChC"}
|
|
@@ -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"}
|
|
@@ -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,4 +1,4 @@
|
|
|
1
|
-
import { decodeFunctionData, isAddressEqual, parseEventLogs
|
|
1
|
+
import { decodeFunctionData, isAddressEqual, parseEventLogs } from 'viem';
|
|
2
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';
|
|
@@ -7,10 +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';
|
|
10
12
|
import { simulateTransaction } from '../internal/simulate.js';
|
|
11
13
|
import * as Methods from '../Methods.js';
|
|
12
|
-
const transferSelector = /*#__PURE__*/ toFunctionSelector('function transfer(address to, uint256 amount)');
|
|
13
|
-
const transferWithMemoSelector = /*#__PURE__*/ toFunctionSelector('function transferWithMemo(address to, uint256 amount, bytes32 memo)');
|
|
14
14
|
/**
|
|
15
15
|
* Creates a Tempo charge method intent for usage on the server.
|
|
16
16
|
*
|
|
@@ -144,7 +144,7 @@ export function charge(parameters = {}) {
|
|
|
144
144
|
return false;
|
|
145
145
|
const selector = call.data.slice(0, 10);
|
|
146
146
|
if (memo) {
|
|
147
|
-
if (selector !==
|
|
147
|
+
if (selector !== Selectors.transferWithMemo)
|
|
148
148
|
return false;
|
|
149
149
|
try {
|
|
150
150
|
const { args } = decodeFunctionData({ abi: Abis.tip20, data: call.data });
|
|
@@ -157,7 +157,7 @@ export function charge(parameters = {}) {
|
|
|
157
157
|
return false;
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
if (selector ===
|
|
160
|
+
if (selector === Selectors.transfer) {
|
|
161
161
|
try {
|
|
162
162
|
const { args } = decodeFunctionData({ abi: Abis.tip20, data: call.data });
|
|
163
163
|
const [to, amount_] = args;
|
|
@@ -167,7 +167,7 @@ export function charge(parameters = {}) {
|
|
|
167
167
|
return false;
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
|
-
if (selector ===
|
|
170
|
+
if (selector === Selectors.transferWithMemo) {
|
|
171
171
|
try {
|
|
172
172
|
const { args } = decodeFunctionData({ abi: Abis.tip20, data: call.data });
|
|
173
173
|
const [to, amount_] = args;
|
|
@@ -185,6 +185,8 @@ export function charge(parameters = {}) {
|
|
|
185
185
|
currency,
|
|
186
186
|
recipient,
|
|
187
187
|
});
|
|
188
|
+
if (feePayer && methodDetails?.feePayer !== false)
|
|
189
|
+
FeePayer.validateCalls(calls, { amount, currency, recipient });
|
|
188
190
|
const serializedTransaction_final = await (async () => {
|
|
189
191
|
if (feePayer && methodDetails?.feePayer !== false) {
|
|
190
192
|
return signTransaction(client, {
|
|
@@ -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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"}
|