sushi 5.0.9 → 5.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # sushi
2
2
 
3
+ ## 5.0.11
4
+
5
+ ### Patch Changes
6
+
7
+ - [#105](https://github.com/sushi-labs/sushi/pull/105) [`d0f4cc9`](https://github.com/sushi-labs/sushi/commit/d0f4cc9cc4f6e46903c4e811866a82fb8e765a05) Thanks [@LufyCZ](https://github.com/LufyCZ)! - Fix getSwap types
8
+
9
+ ## 5.0.10
10
+
11
+ ### Patch Changes
12
+
13
+ - [#103](https://github.com/sushi-labs/sushi/pull/103) [`553ac34`](https://github.com/sushi-labs/sushi/commit/553ac340ea74ac09a4b109cc4887dd35486bdef1) Thanks [@LufyCZ](https://github.com/LufyCZ)! - Improved the getSwap function
14
+
3
15
  ## 5.0.9
4
16
 
5
17
  ### Patch Changes
package/_cjs/api/swap.js CHANGED
@@ -1,28 +1,74 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getSwap = getSwap;
4
+ const zod_1 = require("zod");
5
+ const package_json_1 = require("../package.json");
6
+ const route_status_js_1 = require("../router/route-status.js");
7
+ const zod_js_1 = require("../validate/zod.js");
8
+ function swapResponseSchema(includeTransaction) {
9
+ const tokenSchema = zod_1.z.object({
10
+ address: zod_js_1.sz.address(),
11
+ decimals: zod_1.z.number(),
12
+ symbol: zod_1.z.string(),
13
+ name: zod_1.z.string(),
14
+ });
15
+ const baseSuccessPartial = zod_1.z
16
+ .object({
17
+ status: zod_1.z.literal(route_status_js_1.RouteStatus.Success).or(zod_1.z.literal(route_status_js_1.RouteStatus.Partial)),
18
+ tokens: zod_1.z.array(tokenSchema),
19
+ tokenFrom: zod_1.z.number(),
20
+ tokenTo: zod_1.z.number(),
21
+ swapPrice: zod_1.z.number(),
22
+ priceImpact: zod_1.z.number(),
23
+ amountIn: zod_1.z.string(),
24
+ assumedAmountOut: zod_1.z.string(),
25
+ })
26
+ .transform((data) => ({
27
+ ...data,
28
+ tokenFrom: data.tokens[data.tokenFrom],
29
+ tokenTo: data.tokens[data.tokenTo],
30
+ }));
31
+ const baseNoWay = zod_1.z.object({
32
+ status: zod_1.z.literal(route_status_js_1.RouteStatus.NoWay),
33
+ });
34
+ const txSchema = zod_1.z.object({
35
+ from: zod_js_1.sz.address(),
36
+ to: zod_js_1.sz.address(),
37
+ data: zod_js_1.sz.hex(),
38
+ value: zod_1.z.string(),
39
+ });
40
+ const baseSchema = baseSuccessPartial.or(baseNoWay);
41
+ const baseTxSchema = baseSchema.and(zod_1.z.object({ tx: txSchema })).or(baseNoWay);
42
+ return (includeTransaction ? baseTxSchema : baseSchema);
43
+ }
4
44
  async function getSwap(params, options) {
5
45
  const url = new URL(`swap/v5/${params.chainId}`, 'https://api.sushi.com');
6
46
  url.searchParams.append('tokenIn', params.tokenIn);
7
47
  url.searchParams.append('tokenOut', params.tokenOut);
8
48
  url.searchParams.append('amount', params.amount.toString());
9
49
  url.searchParams.append('maxSlippage', params.maxSlippage.toString());
10
- if (params?.maxPriceImpact)
50
+ if (params.maxPriceImpact) {
11
51
  url.searchParams.append('maxPriceImpact', params.maxPriceImpact.toString());
12
- if (params?.gasPrice)
13
- url.searchParams.append('gasPrice', params.gasPrice.toString());
14
- if (params?.to)
52
+ }
53
+ if (params.to) {
15
54
  url.searchParams.append('to', params.to);
16
- if (params?.enableFee && params?.fee && params?.feeReceiver) {
17
- url.searchParams.append('enableFee', params.enableFee.toString());
18
- url.searchParams.append('fee', params.fee.toString());
19
- url.searchParams.append('feeReceiver', params.feeReceiver);
20
- if (params?.feeBy)
21
- url.searchParams.append('feeBy', params.feeBy);
22
55
  }
23
- if (params?.includeTransaction)
56
+ if (params.fee?.enableFee) {
57
+ url.searchParams.append('enableFee', params.fee.enableFee.toString());
58
+ url.searchParams.append('fee', params.fee.fee.toString());
59
+ url.searchParams.append('feeReceiver', params.fee.feeReceiver);
60
+ if (params.fee.feeBy) {
61
+ url.searchParams.append('feeBy', params.fee.feeBy);
62
+ }
63
+ }
64
+ if (params.includeTransaction) {
24
65
  url.searchParams.append('includeTransaction', params.includeTransaction.toString());
66
+ }
67
+ url.searchParams.append('referrer', params.referrer ?? `sushi-sdk/${package_json_1.version}`);
25
68
  const res = await fetch(url.toString(), options);
26
- return res.json();
69
+ if (!res.ok) {
70
+ throw new Error(`Failed to fetch swap: ${await res.text()}`);
71
+ }
72
+ return swapResponseSchema(params.includeTransaction).parse(await res.json());
27
73
  }
28
74
  //# sourceMappingURL=swap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../api/swap.ts"],"names":[],"mappings":";;AAgCA,0BAyBC;AAzBM,KAAK,UAAU,OAAO,CAAC,MAAmB,EAAE,OAAqB;IAEtE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,MAAM,CAAC,OAAO,EAAE,EAAE,uBAAuB,CAAC,CAAA;IACzE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAClD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;IACpD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC3D,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrE,IAAI,MAAM,EAAE,cAAc;QACxB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC7E,IAAI,MAAM,EAAE,QAAQ;QAClB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjE,IAAI,MAAM,EAAE,EAAE;QAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IACxD,IAAI,MAAM,EAAE,SAAS,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC;QAC5D,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;QACjE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAC1D,IAAI,MAAM,EAAE,KAAK;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,MAAM,EAAE,kBAAkB;QAC5B,GAAG,CAAC,YAAY,CAAC,MAAM,CACrB,oBAAoB,EACpB,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CACrC,CAAA;IACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;IAChD,OAAO,GAAG,CAAC,IAAI,EAA2B,CAAA;AAC5C,CAAC"}
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../api/swap.ts"],"names":[],"mappings":"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"}
@@ -18,4 +18,5 @@ __exportStar(require("./isPromiseFulfilled.js"), exports);
18
18
  __exportStar(require("./isPromiseRejected.js"), exports);
19
19
  __exportStar(require("./isZero.js"), exports);
20
20
  __exportStar(require("./isAddressFast.js"), exports);
21
+ __exportStar(require("./zod.js"), exports);
21
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../validate/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAuC;AACvC,yDAAsC;AACtC,8CAA2B;AAC3B,qDAAkC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../validate/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAuC;AACvC,yDAAsC;AACtC,8CAA2B;AAC3B,qDAAkC;AAClC,2CAAwB"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sz = exports.hex = exports.address = void 0;
4
+ const viem_1 = require("viem");
5
+ const zod_1 = require("zod");
6
+ const address = () => zod_1.z.string().refine((value) => (0, viem_1.isAddress)(value, { strict: false }), {
7
+ message: 'Invalid address',
8
+ });
9
+ exports.address = address;
10
+ const hex = () => zod_1.z
11
+ .string()
12
+ .refine((value) => /^0x[0-9a-fA-F]*$/.test(value), {
13
+ message: 'Invalid hex',
14
+ })
15
+ .transform((value) => value.toLowerCase());
16
+ exports.hex = hex;
17
+ exports.sz = {
18
+ address: exports.address,
19
+ hex: exports.hex,
20
+ };
21
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../../validate/zod.ts"],"names":[],"mappings":";;;AACA,+BAAgC;AAChC,6BAAuB;AAEhB,MAAM,OAAO,GAAG,GAAG,EAAE,CAC1B,OAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,gBAAS,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;IAChE,OAAO,EAAE,iBAAiB;CAC3B,CAAC,CAAA;AAHS,QAAA,OAAO,WAGhB;AAEG,MAAM,GAAG,GAAG,GAAG,EAAE,CACtB,OAAC;KACE,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IACjD,OAAO,EAAE,aAAa;CACvB,CAAC;KACD,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAS,CAAC,CAAA;AANxC,QAAA,GAAG,OAMqC;AAExC,QAAA,EAAE,GAAG;IAChB,OAAO,EAAP,eAAO;IACP,GAAG,EAAH,WAAG;CACJ,CAAA"}
package/_esm/api/swap.js CHANGED
@@ -1,3 +1,44 @@
1
+ import { z } from 'zod';
2
+ import { version } from '../package.json';
3
+ import { RouteStatus } from '../router/route-status.js';
4
+ import { TransferValue } from '../router/transfer-value.js';
5
+ import { sz } from '../validate/zod.js';
6
+ function swapResponseSchema(includeTransaction) {
7
+ const tokenSchema = z.object({
8
+ address: sz.address(),
9
+ decimals: z.number(),
10
+ symbol: z.string(),
11
+ name: z.string(),
12
+ });
13
+ const baseSuccessPartial = z
14
+ .object({
15
+ status: z.literal(RouteStatus.Success).or(z.literal(RouteStatus.Partial)),
16
+ tokens: z.array(tokenSchema),
17
+ tokenFrom: z.number(),
18
+ tokenTo: z.number(),
19
+ swapPrice: z.number(),
20
+ priceImpact: z.number(),
21
+ amountIn: z.string(),
22
+ assumedAmountOut: z.string(),
23
+ })
24
+ .transform((data) => ({
25
+ ...data,
26
+ tokenFrom: data.tokens[data.tokenFrom],
27
+ tokenTo: data.tokens[data.tokenTo],
28
+ }));
29
+ const baseNoWay = z.object({
30
+ status: z.literal(RouteStatus.NoWay),
31
+ });
32
+ const txSchema = z.object({
33
+ from: sz.address(),
34
+ to: sz.address(),
35
+ data: sz.hex(),
36
+ value: z.string(),
37
+ });
38
+ const baseSchema = baseSuccessPartial.or(baseNoWay);
39
+ const baseTxSchema = baseSchema.and(z.object({ tx: txSchema })).or(baseNoWay);
40
+ return (includeTransaction ? baseTxSchema : baseSchema);
41
+ }
1
42
  export async function getSwap(params, options) {
2
43
  // TODO: VALIDATE PARAMS
3
44
  const url = new URL(`swap/v5/${params.chainId}`, 'https://api.sushi.com');
@@ -5,22 +46,28 @@ export async function getSwap(params, options) {
5
46
  url.searchParams.append('tokenOut', params.tokenOut);
6
47
  url.searchParams.append('amount', params.amount.toString());
7
48
  url.searchParams.append('maxSlippage', params.maxSlippage.toString());
8
- if (params?.maxPriceImpact)
49
+ if (params.maxPriceImpact) {
9
50
  url.searchParams.append('maxPriceImpact', params.maxPriceImpact.toString());
10
- if (params?.gasPrice)
11
- url.searchParams.append('gasPrice', params.gasPrice.toString());
12
- if (params?.to)
51
+ }
52
+ if (params.to) {
13
53
  url.searchParams.append('to', params.to);
14
- if (params?.enableFee && params?.fee && params?.feeReceiver) {
15
- url.searchParams.append('enableFee', params.enableFee.toString());
16
- url.searchParams.append('fee', params.fee.toString());
17
- url.searchParams.append('feeReceiver', params.feeReceiver);
18
- if (params?.feeBy)
19
- url.searchParams.append('feeBy', params.feeBy);
20
54
  }
21
- if (params?.includeTransaction)
55
+ if (params.fee?.enableFee) {
56
+ url.searchParams.append('enableFee', params.fee.enableFee.toString());
57
+ url.searchParams.append('fee', params.fee.fee.toString());
58
+ url.searchParams.append('feeReceiver', params.fee.feeReceiver);
59
+ if (params.fee.feeBy) {
60
+ url.searchParams.append('feeBy', params.fee.feeBy);
61
+ }
62
+ }
63
+ if (params.includeTransaction) {
22
64
  url.searchParams.append('includeTransaction', params.includeTransaction.toString());
65
+ }
66
+ url.searchParams.append('referrer', params.referrer ?? `sushi-sdk/${version}`);
23
67
  const res = await fetch(url.toString(), options);
24
- return res.json();
68
+ if (!res.ok) {
69
+ throw new Error(`Failed to fetch swap: ${await res.text()}`);
70
+ }
71
+ return swapResponseSchema(params.includeTransaction).parse(await res.json());
25
72
  }
26
73
  //# sourceMappingURL=swap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../api/swap.ts"],"names":[],"mappings":"AAgCA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAmB,EAAE,OAAqB;IACtE,wBAAwB;IACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,MAAM,CAAC,OAAO,EAAE,EAAE,uBAAuB,CAAC,CAAA;IACzE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAClD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;IACpD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC3D,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrE,IAAI,MAAM,EAAE,cAAc;QACxB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC7E,IAAI,MAAM,EAAE,QAAQ;QAClB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjE,IAAI,MAAM,EAAE,EAAE;QAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IACxD,IAAI,MAAM,EAAE,SAAS,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC;QAC5D,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;QACjE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAC1D,IAAI,MAAM,EAAE,KAAK;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,MAAM,EAAE,kBAAkB;QAC5B,GAAG,CAAC,YAAY,CAAC,MAAM,CACrB,oBAAoB,EACpB,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CACrC,CAAA;IACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;IAChD,OAAO,GAAG,CAAC,IAAI,EAA2B,CAAA;AAC5C,CAAC"}
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../api/swap.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export * from './isPromiseFulfilled.js';
2
2
  export * from './isPromiseRejected.js';
3
3
  export * from './isZero.js';
4
4
  export * from './isAddressFast.js';
5
+ export * from './zod.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../validate/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../validate/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { isAddress } from 'viem';
2
+ import { z } from 'zod';
3
+ export const address = () => z.string().refine((value) => isAddress(value, { strict: false }), {
4
+ message: 'Invalid address',
5
+ });
6
+ export const hex = () => z
7
+ .string()
8
+ .refine((value) => /^0x[0-9a-fA-F]*$/.test(value), {
9
+ message: 'Invalid hex',
10
+ })
11
+ .transform((value) => value.toLowerCase());
12
+ export const sz = {
13
+ address,
14
+ hex,
15
+ };
16
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../../validate/zod.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE,CAC1B,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;IAChE,OAAO,EAAE,iBAAiB;CAC3B,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CACtB,CAAC;KACE,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IACjD,OAAO,EAAE,aAAa;CACvB,CAAC;KACD,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAS,CAAC,CAAA;AAErD,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,OAAO;IACP,GAAG;CACJ,CAAA"}
@@ -1,36 +1,266 @@
1
1
  import type { Address } from 'viem';
2
- import type { Hex } from 'viem';
3
- import type { RouteStatus } from '../router/route-status.js';
4
- import type { TransferValue } from '../router/transfer-value.js';
5
- export interface SwapRequest {
6
- chainId: number;
2
+ import { z } from 'zod';
3
+ import type { ExtractorSupportedChainId } from '../config/index.js';
4
+ import { RouteStatus } from '../router/route-status.js';
5
+ import { TransferValue } from '../router/transfer-value.js';
6
+ type To<Required extends boolean> = Required extends true ? {
7
+ to: Address;
8
+ } : {
9
+ to?: Address;
10
+ };
11
+ type Fee<Enabled extends boolean> = Enabled extends true ? {
12
+ enableFee: Enabled;
13
+ fee: bigint;
14
+ feeReceiver: Address;
15
+ feeBy?: TransferValue;
16
+ } : {
17
+ enableFee?: Enabled;
18
+ fee?: bigint;
19
+ feeReceiver?: Address;
20
+ feeBy?: TransferValue;
21
+ };
22
+ export type SwapRequest<IncludeTransaction extends boolean, EnableFee extends boolean> = {
23
+ chainId: ExtractorSupportedChainId;
7
24
  tokenIn: Address;
8
25
  tokenOut: Address;
9
26
  amount: bigint;
10
27
  maxSlippage: number;
11
28
  maxPriceImpact?: number;
12
- gasPrice?: bigint;
13
- to?: Address;
14
- enableFee?: boolean;
15
- feeReceiver?: Address;
16
- fee?: bigint;
17
- feeBy?: TransferValue;
18
- includeTransaction?: boolean;
19
- }
20
- export type SwapResponse = {
21
- status: typeof RouteStatus.NoWay;
22
- } | {
23
- status: typeof RouteStatus.Success | typeof RouteStatus.Partial;
29
+ includeTransaction?: IncludeTransaction;
30
+ fee?: Fee<EnableFee>;
31
+ referrer?: string;
32
+ } & To<IncludeTransaction>;
33
+ declare function swapResponseSchema<IncludeTransaction extends boolean>(includeTransaction?: IncludeTransaction): IncludeTransaction extends true ? z.ZodUnion<[z.ZodIntersection<z.ZodUnion<[z.ZodEffects<z.ZodObject<{
34
+ status: z.ZodUnion<[z.ZodLiteral<RouteStatus.Success>, z.ZodLiteral<RouteStatus.Partial>]>;
35
+ tokens: z.ZodArray<z.ZodObject<{
36
+ address: z.ZodEffects<z.ZodString, `0x${string}`, string>;
37
+ decimals: z.ZodNumber;
38
+ symbol: z.ZodString;
39
+ name: z.ZodString;
40
+ }, "strip", z.ZodTypeAny, {
41
+ symbol: string;
42
+ name: string;
43
+ address: `0x${string}`;
44
+ decimals: number;
45
+ }, {
46
+ symbol: string;
47
+ name: string;
48
+ address: string;
49
+ decimals: number;
50
+ }>, "many">;
51
+ tokenFrom: z.ZodNumber;
52
+ tokenTo: z.ZodNumber;
53
+ swapPrice: z.ZodNumber;
54
+ priceImpact: z.ZodNumber;
55
+ amountIn: z.ZodString;
56
+ assumedAmountOut: z.ZodString;
57
+ }, "strip", z.ZodTypeAny, {
58
+ status: RouteStatus.Success | RouteStatus.Partial;
59
+ tokens: {
60
+ symbol: string;
61
+ name: string;
62
+ address: `0x${string}`;
63
+ decimals: number;
64
+ }[];
65
+ tokenFrom: number;
66
+ tokenTo: number;
67
+ swapPrice: number;
68
+ priceImpact: number;
69
+ amountIn: string;
70
+ assumedAmountOut: string;
71
+ }, {
72
+ status: RouteStatus.Success | RouteStatus.Partial;
73
+ tokens: {
74
+ symbol: string;
75
+ name: string;
76
+ address: string;
77
+ decimals: number;
78
+ }[];
79
+ tokenFrom: number;
80
+ tokenTo: number;
81
+ swapPrice: number;
82
+ priceImpact: number;
83
+ amountIn: string;
84
+ assumedAmountOut: string;
85
+ }>, {
86
+ tokenFrom: {
87
+ symbol: string;
88
+ name: string;
89
+ address: `0x${string}`;
90
+ decimals: number;
91
+ };
92
+ tokenTo: {
93
+ symbol: string;
94
+ name: string;
95
+ address: `0x${string}`;
96
+ decimals: number;
97
+ };
98
+ status: RouteStatus.Success | RouteStatus.Partial;
99
+ tokens: {
100
+ symbol: string;
101
+ name: string;
102
+ address: `0x${string}`;
103
+ decimals: number;
104
+ }[];
105
+ swapPrice: number;
106
+ priceImpact: number;
107
+ amountIn: string;
108
+ assumedAmountOut: string;
109
+ }, {
110
+ status: RouteStatus.Success | RouteStatus.Partial;
111
+ tokens: {
112
+ symbol: string;
113
+ name: string;
114
+ address: string;
115
+ decimals: number;
116
+ }[];
117
+ tokenFrom: number;
118
+ tokenTo: number;
24
119
  swapPrice: number;
25
120
  priceImpact: number;
26
121
  amountIn: string;
27
122
  assumedAmountOut: string;
123
+ }>, z.ZodObject<{
124
+ status: z.ZodLiteral<RouteStatus.NoWay>;
125
+ }, "strip", z.ZodTypeAny, {
126
+ status: RouteStatus.NoWay;
127
+ }, {
128
+ status: RouteStatus.NoWay;
129
+ }>]>, z.ZodObject<{
130
+ tx: z.ZodObject<{
131
+ from: z.ZodEffects<z.ZodString, `0x${string}`, string>;
132
+ to: z.ZodEffects<z.ZodString, `0x${string}`, string>;
133
+ data: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, `0x${string}`, string>;
134
+ value: z.ZodString;
135
+ }, "strip", z.ZodTypeAny, {
136
+ value: string;
137
+ from: `0x${string}`;
138
+ to: `0x${string}`;
139
+ data: `0x${string}`;
140
+ }, {
141
+ value: string;
142
+ from: string;
143
+ to: string;
144
+ data: string;
145
+ }>;
146
+ }, "strip", z.ZodTypeAny, {
28
147
  tx: {
29
- from: Address;
30
- to: Address;
31
- data: Hex;
32
- value: bigint;
148
+ value: string;
149
+ from: `0x${string}`;
150
+ to: `0x${string}`;
151
+ data: `0x${string}`;
33
152
  };
34
- };
35
- export declare function getSwap(params: SwapRequest, options?: RequestInit): Promise<SwapResponse>;
153
+ }, {
154
+ tx: {
155
+ value: string;
156
+ from: string;
157
+ to: string;
158
+ data: string;
159
+ };
160
+ }>>, z.ZodObject<{
161
+ status: z.ZodLiteral<RouteStatus.NoWay>;
162
+ }, "strip", z.ZodTypeAny, {
163
+ status: RouteStatus.NoWay;
164
+ }, {
165
+ status: RouteStatus.NoWay;
166
+ }>]> : z.ZodUnion<[z.ZodEffects<z.ZodObject<{
167
+ status: z.ZodUnion<[z.ZodLiteral<RouteStatus.Success>, z.ZodLiteral<RouteStatus.Partial>]>;
168
+ tokens: z.ZodArray<z.ZodObject<{
169
+ address: z.ZodEffects<z.ZodString, `0x${string}`, string>;
170
+ decimals: z.ZodNumber;
171
+ symbol: z.ZodString;
172
+ name: z.ZodString;
173
+ }, "strip", z.ZodTypeAny, {
174
+ symbol: string;
175
+ name: string;
176
+ address: `0x${string}`;
177
+ decimals: number;
178
+ }, {
179
+ symbol: string;
180
+ name: string;
181
+ address: string;
182
+ decimals: number;
183
+ }>, "many">;
184
+ tokenFrom: z.ZodNumber;
185
+ tokenTo: z.ZodNumber;
186
+ swapPrice: z.ZodNumber;
187
+ priceImpact: z.ZodNumber;
188
+ amountIn: z.ZodString;
189
+ assumedAmountOut: z.ZodString;
190
+ }, "strip", z.ZodTypeAny, {
191
+ status: RouteStatus.Success | RouteStatus.Partial;
192
+ tokens: {
193
+ symbol: string;
194
+ name: string;
195
+ address: `0x${string}`;
196
+ decimals: number;
197
+ }[];
198
+ tokenFrom: number;
199
+ tokenTo: number;
200
+ swapPrice: number;
201
+ priceImpact: number;
202
+ amountIn: string;
203
+ assumedAmountOut: string;
204
+ }, {
205
+ status: RouteStatus.Success | RouteStatus.Partial;
206
+ tokens: {
207
+ symbol: string;
208
+ name: string;
209
+ address: string;
210
+ decimals: number;
211
+ }[];
212
+ tokenFrom: number;
213
+ tokenTo: number;
214
+ swapPrice: number;
215
+ priceImpact: number;
216
+ amountIn: string;
217
+ assumedAmountOut: string;
218
+ }>, {
219
+ tokenFrom: {
220
+ symbol: string;
221
+ name: string;
222
+ address: `0x${string}`;
223
+ decimals: number;
224
+ };
225
+ tokenTo: {
226
+ symbol: string;
227
+ name: string;
228
+ address: `0x${string}`;
229
+ decimals: number;
230
+ };
231
+ status: RouteStatus.Success | RouteStatus.Partial;
232
+ tokens: {
233
+ symbol: string;
234
+ name: string;
235
+ address: `0x${string}`;
236
+ decimals: number;
237
+ }[];
238
+ swapPrice: number;
239
+ priceImpact: number;
240
+ amountIn: string;
241
+ assumedAmountOut: string;
242
+ }, {
243
+ status: RouteStatus.Success | RouteStatus.Partial;
244
+ tokens: {
245
+ symbol: string;
246
+ name: string;
247
+ address: string;
248
+ decimals: number;
249
+ }[];
250
+ tokenFrom: number;
251
+ tokenTo: number;
252
+ swapPrice: number;
253
+ priceImpact: number;
254
+ amountIn: string;
255
+ assumedAmountOut: string;
256
+ }>, z.ZodObject<{
257
+ status: z.ZodLiteral<RouteStatus.NoWay>;
258
+ }, "strip", z.ZodTypeAny, {
259
+ status: RouteStatus.NoWay;
260
+ }, {
261
+ status: RouteStatus.NoWay;
262
+ }>]>;
263
+ export type SwapResponse<IncludeTransaction extends boolean> = z.infer<ReturnType<typeof swapResponseSchema<IncludeTransaction>>>;
264
+ export declare function getSwap<IncludeTransaction extends boolean = false, EnableFee extends boolean = false>(params: SwapRequest<IncludeTransaction, EnableFee>, options?: RequestInit): Promise<SwapResponse<IncludeTransaction>>;
265
+ export {};
36
266
  //# sourceMappingURL=swap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../api/swap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEhE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,OAAO,WAAW,CAAC,KAAK,CAAA;CAAE,GACpC;IACE,MAAM,EAAE,OAAO,WAAW,CAAC,OAAO,GAAG,OAAO,WAAW,CAAC,OAAO,CAAA;IAC/D,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,EAAE,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAC7D,CAAA;AAEL,wBAAsB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,yBAyBvE"}
1
+ {"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../api/swap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAG3D,KAAK,EAAE,CAAC,QAAQ,SAAS,OAAO,IAAI,QAAQ,SAAS,IAAI,GACrD;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,GACf;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEpB,KAAK,GAAG,CAAC,OAAO,SAAS,OAAO,IAAI,OAAO,SAAS,IAAI,GACpD;IACE,SAAS,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB,GACD;IACE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB,CAAA;AAEL,MAAM,MAAM,WAAW,CACrB,kBAAkB,SAAS,OAAO,EAClC,SAAS,SAAS,OAAO,IACvB;IACF,OAAO,EAAE,yBAAyB,CAAA;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAA;AAE1B,iBAAS,kBAAkB,CAAC,kBAAkB,SAAS,OAAO,EAC5D,kBAAkB,CAAC,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+CxC;AAED,MAAM,MAAM,YAAY,CAAC,kBAAkB,SAAS,OAAO,IAAI,CAAC,CAAC,KAAK,CACpE,UAAU,CAAC,OAAO,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAC1D,CAAA;AAED,wBAAsB,OAAO,CAC3B,kBAAkB,SAAS,OAAO,GAAG,KAAK,EAC1C,SAAS,SAAS,OAAO,GAAG,KAAK,EAEjC,MAAM,EAAE,WAAW,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAClD,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CA2C3C"}
@@ -20,9 +20,9 @@ export declare const swapSchema: z.ZodObject<{
20
20
  feeReceiver: z.ZodOptional<z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>>;
21
21
  feeBy: z.ZodDefault<z.ZodOptional<z.ZodNativeEnum<typeof TransferValue>>>;
22
22
  }, "strip", z.ZodTypeAny, {
23
+ amount: bigint;
23
24
  tokenIn: `0x${string}`;
24
25
  tokenOut: `0x${string}`;
25
- amount: bigint;
26
26
  maxSlippage: number;
27
27
  fee: number;
28
28
  feeBy: TransferValue;
@@ -32,24 +32,24 @@ export declare const swapSchema: z.ZodObject<{
32
32
  includeRouteProcessorParams: boolean;
33
33
  includeTokens: boolean;
34
34
  includeRoute: boolean;
35
- maxPriceImpact?: number | undefined;
36
- gasPrice?: number | undefined;
37
35
  to?: `0x${string}` | undefined;
36
+ maxPriceImpact?: number | undefined;
38
37
  enableFee?: boolean | undefined;
39
38
  feeReceiver?: `0x${string}` | undefined;
39
+ gasPrice?: number | undefined;
40
40
  }, {
41
+ amount: bigint;
41
42
  tokenIn: `0x${string}`;
42
43
  tokenOut: `0x${string}`;
43
- amount: bigint;
44
+ to?: `0x${string}` | undefined;
44
45
  maxSlippage?: number | undefined;
45
46
  maxPriceImpact?: number | undefined;
46
- gasPrice?: number | undefined;
47
- to?: `0x${string}` | undefined;
48
47
  enableFee?: unknown;
49
48
  fee?: number | undefined;
50
49
  feeReceiver?: `0x${string}` | undefined;
51
50
  feeBy?: TransferValue | undefined;
52
51
  includeTransaction?: unknown;
52
+ gasPrice?: number | undefined;
53
53
  source?: RouterLiquiditySource | undefined;
54
54
  preferSushi?: unknown;
55
55
  includeRouteProcessorParams?: unknown;
@@ -2,4 +2,5 @@ export * from './isPromiseFulfilled.js';
2
2
  export * from './isPromiseRejected.js';
3
3
  export * from './isZero.js';
4
4
  export * from './isAddressFast.js';
5
+ export * from './zod.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../validate/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../validate/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ export declare const address: () => z.ZodEffects<z.ZodString, `0x${string}`, string>;
3
+ export declare const hex: () => z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, `0x${string}`, string>;
4
+ export declare const sz: {
5
+ address: () => z.ZodEffects<z.ZodString, `0x${string}`, string>;
6
+ hex: () => z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, `0x${string}`, string>;
7
+ };
8
+ //# sourceMappingURL=zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../validate/zod.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,OAAO,wDAGhB,CAAA;AAEJ,eAAO,MAAM,GAAG,sFAMqC,CAAA;AAErD,eAAO,MAAM,EAAE;;;CAGd,CAAA"}
package/api/swap.ts CHANGED
@@ -1,58 +1,145 @@
1
1
  import type { Address } from 'viem'
2
- import type { Hex } from 'viem'
3
- import type { RouteStatus } from '../router/route-status.js'
4
- import type { TransferValue } from '../router/transfer-value.js'
2
+ import { z } from 'zod'
3
+ import type { ExtractorSupportedChainId } from '../config/index.js'
4
+ import { version } from '../package.json'
5
+ import { RouteStatus } from '../router/route-status.js'
6
+ import { TransferValue } from '../router/transfer-value.js'
7
+ import { sz } from '../validate/zod.js'
5
8
 
6
- export interface SwapRequest {
7
- chainId: number
9
+ type To<Required extends boolean> = Required extends true
10
+ ? { to: Address }
11
+ : { to?: Address }
12
+
13
+ type Fee<Enabled extends boolean> = Enabled extends true
14
+ ? {
15
+ enableFee: Enabled
16
+ fee: bigint
17
+ feeReceiver: Address
18
+ feeBy?: TransferValue
19
+ }
20
+ : {
21
+ enableFee?: Enabled
22
+ fee?: bigint
23
+ feeReceiver?: Address
24
+ feeBy?: TransferValue
25
+ }
26
+
27
+ export type SwapRequest<
28
+ IncludeTransaction extends boolean,
29
+ EnableFee extends boolean,
30
+ > = {
31
+ chainId: ExtractorSupportedChainId
8
32
  tokenIn: Address
9
33
  tokenOut: Address
10
34
  amount: bigint
11
35
  maxSlippage: number
12
36
  maxPriceImpact?: number
13
- gasPrice?: bigint
14
- to?: Address
15
- enableFee?: boolean
16
- feeReceiver?: Address
17
- fee?: bigint
18
- feeBy?: TransferValue
19
- includeTransaction?: boolean
37
+ includeTransaction?: IncludeTransaction
38
+ fee?: Fee<EnableFee>
39
+ referrer?: string
40
+ } & To<IncludeTransaction>
41
+
42
+ function swapResponseSchema<IncludeTransaction extends boolean>(
43
+ includeTransaction?: IncludeTransaction,
44
+ ) {
45
+ const tokenSchema = z.object({
46
+ address: sz.address(),
47
+ decimals: z.number(),
48
+ symbol: z.string(),
49
+ name: z.string(),
50
+ })
51
+
52
+ const baseSuccessPartial = z
53
+ .object({
54
+ status: z.literal(RouteStatus.Success).or(z.literal(RouteStatus.Partial)),
55
+ tokens: z.array(tokenSchema),
56
+ tokenFrom: z.number(),
57
+ tokenTo: z.number(),
58
+
59
+ swapPrice: z.number(),
60
+ priceImpact: z.number(),
61
+
62
+ amountIn: z.string(),
63
+ assumedAmountOut: z.string(),
64
+ })
65
+ .transform((data) => ({
66
+ ...data,
67
+ tokenFrom: data.tokens[data.tokenFrom]!,
68
+ tokenTo: data.tokens[data.tokenTo]!,
69
+ }))
70
+
71
+ const baseNoWay = z.object({
72
+ status: z.literal(RouteStatus.NoWay),
73
+ })
74
+
75
+ const txSchema = z.object({
76
+ from: sz.address(),
77
+ to: sz.address(),
78
+ data: sz.hex(),
79
+ value: z.string(),
80
+ })
81
+
82
+ const baseSchema = baseSuccessPartial.or(baseNoWay)
83
+ const baseTxSchema = baseSchema.and(z.object({ tx: txSchema })).or(baseNoWay)
84
+
85
+ type Schema = IncludeTransaction extends true
86
+ ? typeof baseTxSchema
87
+ : typeof baseSchema
88
+
89
+ return (includeTransaction ? baseTxSchema : baseSchema) as Schema
20
90
  }
21
91
 
22
- export type SwapResponse =
23
- | { status: typeof RouteStatus.NoWay }
24
- | {
25
- status: typeof RouteStatus.Success | typeof RouteStatus.Partial
26
- swapPrice: number
27
- priceImpact: number
28
- amountIn: string
29
- assumedAmountOut: string
30
- tx: { from: Address; to: Address; data: Hex; value: bigint }
31
- }
92
+ export type SwapResponse<IncludeTransaction extends boolean> = z.infer<
93
+ ReturnType<typeof swapResponseSchema<IncludeTransaction>>
94
+ >
32
95
 
33
- export async function getSwap(params: SwapRequest, options?: RequestInit) {
96
+ export async function getSwap<
97
+ IncludeTransaction extends boolean = false,
98
+ EnableFee extends boolean = false,
99
+ >(
100
+ params: SwapRequest<IncludeTransaction, EnableFee>,
101
+ options?: RequestInit,
102
+ ): Promise<SwapResponse<IncludeTransaction>> {
34
103
  // TODO: VALIDATE PARAMS
35
104
  const url = new URL(`swap/v5/${params.chainId}`, 'https://api.sushi.com')
105
+
36
106
  url.searchParams.append('tokenIn', params.tokenIn)
37
107
  url.searchParams.append('tokenOut', params.tokenOut)
38
108
  url.searchParams.append('amount', params.amount.toString())
39
109
  url.searchParams.append('maxSlippage', params.maxSlippage.toString())
40
- if (params?.maxPriceImpact)
110
+
111
+ if (params.maxPriceImpact) {
41
112
  url.searchParams.append('maxPriceImpact', params.maxPriceImpact.toString())
42
- if (params?.gasPrice)
43
- url.searchParams.append('gasPrice', params.gasPrice.toString())
44
- if (params?.to) url.searchParams.append('to', params.to)
45
- if (params?.enableFee && params?.fee && params?.feeReceiver) {
46
- url.searchParams.append('enableFee', params.enableFee.toString())
47
- url.searchParams.append('fee', params.fee.toString())
48
- url.searchParams.append('feeReceiver', params.feeReceiver)
49
- if (params?.feeBy) url.searchParams.append('feeBy', params.feeBy)
50
113
  }
51
- if (params?.includeTransaction)
114
+
115
+ if (params.to) {
116
+ url.searchParams.append('to', params.to)
117
+ }
118
+
119
+ if (params.fee?.enableFee) {
120
+ url.searchParams.append('enableFee', params.fee.enableFee.toString())
121
+ url.searchParams.append('fee', params.fee.fee.toString())
122
+ url.searchParams.append('feeReceiver', params.fee.feeReceiver)
123
+
124
+ if (params.fee.feeBy) {
125
+ url.searchParams.append('feeBy', params.fee.feeBy)
126
+ }
127
+ }
128
+
129
+ if (params.includeTransaction) {
52
130
  url.searchParams.append(
53
131
  'includeTransaction',
54
132
  params.includeTransaction.toString(),
55
133
  )
134
+ }
135
+
136
+ url.searchParams.append('referrer', params.referrer ?? `sushi-sdk/${version}`)
137
+
56
138
  const res = await fetch(url.toString(), options)
57
- return res.json() as Promise<SwapResponse>
139
+
140
+ if (!res.ok) {
141
+ throw new Error(`Failed to fetch swap: ${await res.text()}`)
142
+ }
143
+
144
+ return swapResponseSchema(params.includeTransaction).parse(await res.json())
58
145
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sushi",
3
3
  "description": "Sushi",
4
- "version": "5.0.9",
4
+ "version": "5.0.11",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
package/validate/index.ts CHANGED
@@ -2,3 +2,4 @@ export * from './isPromiseFulfilled.js'
2
2
  export * from './isPromiseRejected.js'
3
3
  export * from './isZero.js'
4
4
  export * from './isAddressFast.js'
5
+ export * from './zod.js'
@@ -0,0 +1,21 @@
1
+ import type { Hex } from 'viem'
2
+ import { isAddress } from 'viem'
3
+ import { z } from 'zod'
4
+
5
+ export const address = () =>
6
+ z.string().refine((value) => isAddress(value, { strict: false }), {
7
+ message: 'Invalid address',
8
+ })
9
+
10
+ export const hex = () =>
11
+ z
12
+ .string()
13
+ .refine((value) => /^0x[0-9a-fA-F]*$/.test(value), {
14
+ message: 'Invalid hex',
15
+ })
16
+ .transform((value) => value.toLowerCase() as Hex)
17
+
18
+ export const sz = {
19
+ address,
20
+ hex,
21
+ }