mppx 0.3.11 → 0.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/client/Mppx.d.ts +1 -1
  2. package/dist/client/Mppx.d.ts.map +1 -1
  3. package/dist/client/internal/Fetch.d.ts +1 -1
  4. package/dist/client/internal/Fetch.d.ts.map +1 -1
  5. package/dist/client/internal/Fetch.js +76 -11
  6. package/dist/client/internal/Fetch.js.map +1 -1
  7. package/dist/internal/constantTimeEqual.d.ts.map +1 -1
  8. package/dist/internal/constantTimeEqual.js +7 -4
  9. package/dist/internal/constantTimeEqual.js.map +1 -1
  10. package/dist/tempo/client/Charge.d.ts +10 -0
  11. package/dist/tempo/client/Charge.d.ts.map +1 -1
  12. package/dist/tempo/client/Charge.js +23 -9
  13. package/dist/tempo/client/Charge.js.map +1 -1
  14. package/dist/tempo/client/Methods.d.ts +1 -0
  15. package/dist/tempo/client/Methods.d.ts.map +1 -1
  16. package/dist/tempo/internal/auto-swap.d.ts +49 -0
  17. package/dist/tempo/internal/auto-swap.d.ts.map +1 -0
  18. package/dist/tempo/internal/auto-swap.js +89 -0
  19. package/dist/tempo/internal/auto-swap.js.map +1 -0
  20. package/dist/tempo/internal/fee-payer.d.ts +15 -0
  21. package/dist/tempo/internal/fee-payer.d.ts.map +1 -0
  22. package/dist/tempo/internal/fee-payer.js +41 -0
  23. package/dist/tempo/internal/fee-payer.js.map +1 -0
  24. package/dist/tempo/internal/selectors.d.ts +5 -0
  25. package/dist/tempo/internal/selectors.d.ts.map +1 -0
  26. package/dist/tempo/internal/selectors.js +7 -0
  27. package/dist/tempo/internal/selectors.js.map +1 -0
  28. package/dist/tempo/server/Charge.d.ts.map +1 -1
  29. package/dist/tempo/server/Charge.js +8 -6
  30. package/dist/tempo/server/Charge.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/client/Mppx.test-d.ts +28 -0
  33. package/src/client/Mppx.ts +3 -3
  34. package/src/client/internal/Fetch.test.ts +454 -0
  35. package/src/client/internal/Fetch.ts +89 -14
  36. package/src/internal/constantTimeEqual.ts +6 -4
  37. package/src/tempo/client/Charge.ts +40 -9
  38. package/src/tempo/internal/auto-swap.test.ts +113 -0
  39. package/src/tempo/internal/auto-swap.ts +141 -0
  40. package/src/tempo/internal/fee-payer.test.ts +223 -0
  41. package/src/tempo/internal/fee-payer.ts +53 -0
  42. package/src/tempo/internal/selectors.ts +10 -0
  43. package/src/tempo/server/Charge.test.ts +374 -3
  44. package/src/tempo/server/Charge.ts +9 -18
@@ -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 Method.Client<any, infer context> ? context extends z.ZodMiniType ? z.input<context> : undefined : undefined;
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,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC,GAChF,OAAO,SAAS,CAAC,CAAC,WAAW,GAC3B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAChB,SAAS,GACX,SAAS;CACd,CAAC,MAAM,CAAC,CAAA;AAET;;;GAGG;AACH,KAAK,cAAc,CAAC,OAAO,SAAS,OAAO,IAAI,OAAO,SAAS,SAAS;IACtE,MAAM,IAAI;IACV,GAAG,MAAM,IAAI,SAAS,OAAO;CAC9B,GACG,IAAI,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,GACtC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,GAC3C,IAAI,SAAS,MAAM,CAAC,SAAS,GAC3B,SAAS,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,GACxC,KAAK,GACT,SAAS,EAAE,CAAA"}
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 Method.Client<any, infer contextSchema> ? contextSchema extends z.ZodMiniType ? z.input<contextSchema> : undefined : undefined;
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,CAiCrB;AAED,6EAA6E;AAC7E,KAAK,aAAa,CAAC,OAAO,SAAS,SAAS,MAAM,CAAC,SAAS,EAAE,IAAI;KAC/D,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,aAAa,CAAC,GAC5E,aAAa,SAAS,CAAC,CAAC,WAAW,GACjC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GACtB,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"}
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;AAatC;;;;;;;;;;;;;;;;;;;;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,CA2CrB;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,CASN;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,CAO9B"}
@@ -1,4 +1,8 @@
1
1
  import * as Challenge from '../../Challenge.js';
2
+ // We tag wrappers with a global symbol so we can recognize wrappers created by mppx,
3
+ // even across multiple module instances/bundles. This lets restore() avoid clobbering
4
+ // an unrelated fetch installed by user code or another library.
5
+ const MPPX_FETCH_WRAPPER = Symbol.for('mppx.fetch.wrapper');
2
6
  let originalFetch;
3
7
  /**
4
8
  * Creates a fetch wrapper that automatically handles 402 Payment Required responses.
@@ -23,11 +27,17 @@ let originalFetch;
23
27
  */
24
28
  export function from(config) {
25
29
  const { fetch = globalThis.fetch, methods, onChallenge } = config;
26
- return async (input, init) => {
27
- const { context, ...fetchInit } = init ?? {};
28
- const response = await fetch(input, fetchInit);
30
+ // Always operate on the true underlying fetch to avoid wrapper-on-wrapper stacking,
31
+ // which can duplicate retries and make restore semantics fragile.
32
+ const baseFetch = unwrapFetch(fetch);
33
+ const wrappedFetch = async (input, init) => {
34
+ // Pass init through untouched to preserve object identity for non-402 responses.
35
+ const response = await baseFetch(input, init);
29
36
  if (response.status !== 402)
30
37
  return response;
38
+ // Only extract context for payment handling after confirming 402.
39
+ const context = init?.context;
40
+ const { context: _, ...fetchInit } = (init ?? {});
31
41
  const challenge = Challenge.fromResponse(response);
32
42
  const mi = methods.find((m) => m.name === challenge.method && m.intent === challenge.intent);
33
43
  if (!mi)
@@ -38,14 +48,14 @@ export function from(config) {
38
48
  })
39
49
  : undefined;
40
50
  const credential = onChallengeCredential ?? (await resolveCredential(challenge, mi, context));
41
- return fetch(input, {
51
+ validateCredentialHeaderValue(credential);
52
+ return baseFetch(input, {
42
53
  ...fetchInit,
43
- headers: {
44
- ...fetchInit.headers,
45
- Authorization: credential,
46
- },
54
+ headers: withAuthorizationHeader(fetchInit.headers, credential),
47
55
  });
48
56
  };
57
+ wrappedFetch[MPPX_FETCH_WRAPPER] = baseFetch;
58
+ return wrappedFetch;
49
59
  }
50
60
  /**
51
61
  * Replaces the global `fetch` with a payment-aware wrapper.
@@ -68,8 +78,14 @@ export function from(config) {
68
78
  * ```
69
79
  */
70
80
  export function polyfill(config) {
71
- originalFetch = globalThis.fetch;
72
- globalThis.fetch = from(config);
81
+ // Defensive guard for runtimes/tests where fetch might be non-configurable.
82
+ const descriptor = Object.getOwnPropertyDescriptor(globalThis, 'fetch');
83
+ if (!descriptor || (!descriptor.writable && !descriptor.set)) {
84
+ throw new Error('globalThis.fetch is not writable');
85
+ }
86
+ if (!originalFetch)
87
+ originalFetch = globalThis.fetch;
88
+ globalThis.fetch = from({ ...config, fetch: globalThis.fetch });
73
89
  }
74
90
  /**
75
91
  * Restores the original `fetch` after calling `polyfill`.
@@ -86,11 +102,60 @@ export function polyfill(config) {
86
102
  * ```
87
103
  */
88
104
  export function restore() {
89
- if (originalFetch) {
105
+ // Only restore if the current fetch is still an mppx wrapper.
106
+ // If app code replaced fetch after polyfill(), we must not overwrite it.
107
+ if (originalFetch && isWrappedFetch(globalThis.fetch)) {
90
108
  globalThis.fetch = originalFetch;
91
109
  originalFetch = undefined;
92
110
  }
93
111
  }
112
+ /** @internal Normalizes headers to a plain object for spreading. */
113
+ function normalizeHeaders(headers) {
114
+ if (!headers)
115
+ return {};
116
+ if (headers instanceof Headers) {
117
+ const result = {};
118
+ headers.forEach((value, key) => {
119
+ result[key] = value;
120
+ });
121
+ return result;
122
+ }
123
+ if (Array.isArray(headers))
124
+ return Object.fromEntries(headers);
125
+ return headers;
126
+ }
127
+ /** @internal */
128
+ function withAuthorizationHeader(headers, credential) {
129
+ const normalized = normalizeHeaders(headers);
130
+ // Remove any existing Authorization header regardless of casing to avoid
131
+ // duplicate/conflicting credentials on retry.
132
+ for (const key of Object.keys(normalized)) {
133
+ if (key.toLowerCase() === 'authorization')
134
+ delete normalized[key];
135
+ }
136
+ normalized.Authorization = credential;
137
+ return normalized;
138
+ }
139
+ /** @internal */
140
+ function unwrapFetch(fetch) {
141
+ let current = fetch;
142
+ while (current[MPPX_FETCH_WRAPPER]) {
143
+ current = current[MPPX_FETCH_WRAPPER];
144
+ }
145
+ return current;
146
+ }
147
+ /** @internal */
148
+ function isWrappedFetch(fetch) {
149
+ return Boolean(fetch[MPPX_FETCH_WRAPPER]);
150
+ }
151
+ /** @internal */
152
+ function validateCredentialHeaderValue(credential) {
153
+ if (!credential.trim())
154
+ throw new Error('Credential header value must be non-empty');
155
+ if (credential.includes('\r') || credential.includes('\n')) {
156
+ throw new Error('Credential header value contains illegal newline characters');
157
+ }
158
+ }
94
159
  /** @internal */
95
160
  async function resolveCredential(challenge, mi, context) {
96
161
  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,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAA;QAE5C,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QAElD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC,CAAA;QAC5F,IAAI,CAAC,EAAE;YACL,MAAM,IAAI,KAAK,CACb,wBAAwB,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,iBAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtI,CAAA;QAEH,MAAM,qBAAqB,GAAG,WAAW;YACvC,CAAC,CAAC,MAAM,WAAW,CAAC,SAAS,EAAE;gBAC3B,gBAAgB,EAAE,KAAK,EAAE,eAAwC,EAAE,EAAE,CACnE,iBAAiB,CAAC,SAAS,EAAE,EAAE,EAAE,eAAe,IAAI,OAAO,CAAC;aAC/D,CAAC;YACJ,CAAC,CAAC,SAAS,CAAA;QACb,MAAM,UAAU,GAAG,qBAAqB,IAAI,CAAC,MAAM,iBAAiB,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;QAE7F,OAAO,KAAK,CAAC,KAAK,EAAE;YAClB,GAAG,SAAS;YACZ,OAAO,EAAE;gBACP,GAAG,SAAS,CAAC,OAAO;gBACpB,aAAa,EAAE,UAAU;aAC1B;SACF,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC;AAwCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAgC;IAEhC,aAAa,GAAG,UAAU,CAAC,KAAK,CAAA;IAChC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAA4B,CAAA;AAC5D,CAAC;AAOD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO;IACrB,IAAI,aAAa,EAAE,CAAC;QAClB,UAAU,CAAC,KAAK,GAAG,aAAa,CAAA;QAChC,aAAa,GAAG,SAAS,CAAA;IAC3B,CAAC;AACH,CAAC;AAED,gBAAgB;AAChB,KAAK,UAAU,iBAAiB,CAC9B,SAA8B,EAC9B,EAAoB,EACpB,OAAgB;IAEhB,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,OAAO,EAAE,CAAC,gBAAgB,CACxB,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAE,EAAE,SAAS,EAAY,CAC/F,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Fetch.js","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constantTimeEqual.d.ts","sourceRoot":"","sources":["../../src/internal/constantTimeEqual.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAI/D"}
1
+ {"version":3,"file":"constantTimeEqual.d.ts","sourceRoot":"","sources":["../../src/internal/constantTimeEqual.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAM/D"}
@@ -1,8 +1,11 @@
1
- import { createHash, timingSafeEqual } from 'node:crypto';
1
+ import { Hash, Hex } from 'ox';
2
2
  /** Constant-time string comparison to prevent timing attacks. */
3
3
  export function constantTimeEqual(a, b) {
4
- const hashA = createHash('sha256').update(a).digest();
5
- const hashB = createHash('sha256').update(b).digest();
6
- return timingSafeEqual(hashA, hashB);
4
+ const hashA = Hash.sha256(Hex.fromString(a));
5
+ const hashB = Hash.sha256(Hex.fromString(b));
6
+ let result = 0;
7
+ for (let i = 0; i < hashA.length; i++)
8
+ result |= hashA.charCodeAt(i) ^ hashB.charCodeAt(i);
9
+ return result === 0;
7
10
  }
8
11
  //# sourceMappingURL=constantTimeEqual.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constantTimeEqual.js","sourceRoot":"","sources":["../../src/internal/constantTimeEqual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAEzD,iEAAiE;AACjE,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;IACrD,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"constantTimeEqual.js","sourceRoot":"","sources":["../../src/internal/constantTimeEqual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AAE9B,iEAAiE;AACjE,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC1F,OAAO,MAAM,KAAK,CAAC,CAAA;AACrB,CAAC"}
@@ -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":"AAKA,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;AAKjC;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,UAAU,GAAE,MAAM,CAAC,UAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkDxD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAK,UAAU,GAAG;QAChB,oFAAoF;QACpF,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC9B,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,GAChC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAA;CAChC"}
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, currency, recipient, methodDetails } = request;
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":"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"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
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,5 @@
1
+ export declare const approve: `0x${string}`;
2
+ export declare const transfer: `0x${string}`;
3
+ export declare const transferWithMemo: `0x${string}`;
4
+ export declare const swapExactAmountOut: `0x${string}`;
5
+ //# sourceMappingURL=selectors.d.ts.map
@@ -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":"AAgBA,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;AAGjD,OAAO,KAAK,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAUxC;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,UAAU,SAAS,MAAM,CAAC,UAAU,EAC/D,UAAU,GAAE,UAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAsP1C;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
+ {"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"}