@kayibal/fynd-client 0.98.0 → 0.99.1
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-fee.d.ts +21 -1
- package/dist/client-fee.d.ts.map +1 -1
- package/dist/client-fee.js +60 -26
- package/dist/client-fee.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/client-fee.d.ts
CHANGED
|
@@ -1,13 +1,33 @@
|
|
|
1
1
|
import type { Address, ClientFeeParams, EncodingOptions, Hex } from './types.js';
|
|
2
|
+
/** Swap-specific inputs the router binds the client fee signature to. */
|
|
3
|
+
export interface ClientFeeSwapContext {
|
|
4
|
+
/** Exact input amount from the order. */
|
|
5
|
+
amountIn: bigint;
|
|
6
|
+
/** Input token address. */
|
|
7
|
+
tokenIn: Address;
|
|
8
|
+
/** Output token address. */
|
|
9
|
+
tokenOut: Address;
|
|
10
|
+
/** Quoted output amount — the `amountOut` of the unsigned quote. */
|
|
11
|
+
expectedAmountOut: bigint;
|
|
12
|
+
/** Minimum output after fees — `feeBreakdown.minAmountReceived`. */
|
|
13
|
+
minAmountOut: bigint;
|
|
14
|
+
/** Address receiving the swap output. */
|
|
15
|
+
receiver: Address;
|
|
16
|
+
/** keccak256 of the encoded swaps bytes — `feeBreakdown.swapsHash`. */
|
|
17
|
+
swapsHash: Hex;
|
|
18
|
+
}
|
|
2
19
|
/**
|
|
3
20
|
* Computes the EIP-712 signing hash for client fee params.
|
|
4
21
|
*
|
|
5
22
|
* Pass the returned hash to the fee receiver's signer, then set the
|
|
6
23
|
* 65-byte signature on the `ClientFeeParams` before passing to `withClientFee`.
|
|
7
24
|
*
|
|
25
|
+
* The hash covers all 11 `ClientFee` fields: the fee params plus the swap they are bound to,
|
|
26
|
+
* which come from a prior unsigned quote request.
|
|
27
|
+
*
|
|
8
28
|
* `routerAddress` is the TychoRouter contract address.
|
|
9
29
|
*/
|
|
10
|
-
export declare function clientFeeSigningHash(params: ClientFeeParams, chainId: number, routerAddress: Address): Hex;
|
|
30
|
+
export declare function clientFeeSigningHash(params: ClientFeeParams, chainId: number, routerAddress: Address, swap: ClientFeeSwapContext): Hex;
|
|
11
31
|
/**
|
|
12
32
|
* Attach client fee configuration to encoding options.
|
|
13
33
|
* Validates that signature is present and exactly 65 bytes (130 hex chars + '0x' prefix).
|
package/dist/client-fee.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-fee.d.ts","sourceRoot":"","sources":["../src/client-fee.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client-fee.d.ts","sourceRoot":"","sources":["../src/client-fee.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AA2BjF,yEAAyE;AACzE,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,SAAS,EAAE,GAAG,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,EACtB,IAAI,EAAE,oBAAoB,GACzB,GAAG,CAsDL;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,eAAe,GACtB,eAAe,CAUjB"}
|
package/dist/client-fee.js
CHANGED
|
@@ -1,38 +1,72 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { concatHex, encodeAbiParameters, keccak256, stringToHex } from 'viem';
|
|
2
2
|
import { FyndError } from './error.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Fee units per basis point in the router's `ClientFeeParams.clientFeeBps`.
|
|
5
|
+
*
|
|
6
|
+
* Fynd's API takes the client fee in basis points, while the router takes it in the
|
|
7
|
+
* FeeCalculator's fee units (`MAX_BPS` = 100,000,000 = 100%). The signature must cover the
|
|
8
|
+
* scaled value that ends up in the calldata.
|
|
9
|
+
*/
|
|
10
|
+
const CLIENT_FEE_UNITS_PER_BPS = 10000n;
|
|
11
|
+
/** Must match `CLIENT_FEE_TYPEHASH` in `TychoRouter.sol`. */
|
|
12
|
+
const CLIENT_FEE_TYPEHASH = keccak256(stringToHex('ClientFee(uint32 clientFeeBps,address clientFeeReceiver,' +
|
|
13
|
+
'uint256 maxClientContribution,uint256 deadline,' +
|
|
14
|
+
'uint256 amountIn,address tokenIn,address tokenOut,' +
|
|
15
|
+
'uint256 expectedAmountOut,uint256 minAmountOut,address receiver,bytes swaps)'));
|
|
16
|
+
const EIP712_DOMAIN_TYPEHASH = keccak256(stringToHex('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'));
|
|
11
17
|
/**
|
|
12
18
|
* Computes the EIP-712 signing hash for client fee params.
|
|
13
19
|
*
|
|
14
20
|
* Pass the returned hash to the fee receiver's signer, then set the
|
|
15
21
|
* 65-byte signature on the `ClientFeeParams` before passing to `withClientFee`.
|
|
16
22
|
*
|
|
23
|
+
* The hash covers all 11 `ClientFee` fields: the fee params plus the swap they are bound to,
|
|
24
|
+
* which come from a prior unsigned quote request.
|
|
25
|
+
*
|
|
17
26
|
* `routerAddress` is the TychoRouter contract address.
|
|
18
27
|
*/
|
|
19
|
-
export function clientFeeSigningHash(params, chainId, routerAddress) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
},
|
|
35
|
-
|
|
28
|
+
export function clientFeeSigningHash(params, chainId, routerAddress, swap) {
|
|
29
|
+
const domainSeparator = keccak256(encodeAbiParameters([
|
|
30
|
+
{ type: 'bytes32' },
|
|
31
|
+
{ type: 'bytes32' },
|
|
32
|
+
{ type: 'bytes32' },
|
|
33
|
+
{ type: 'uint256' },
|
|
34
|
+
{ type: 'address' },
|
|
35
|
+
], [
|
|
36
|
+
EIP712_DOMAIN_TYPEHASH,
|
|
37
|
+
keccak256(stringToHex('TychoRouter')),
|
|
38
|
+
keccak256(stringToHex('1')),
|
|
39
|
+
BigInt(chainId),
|
|
40
|
+
routerAddress,
|
|
41
|
+
]));
|
|
42
|
+
const structHash = keccak256(encodeAbiParameters([
|
|
43
|
+
{ type: 'bytes32' },
|
|
44
|
+
{ type: 'uint256' },
|
|
45
|
+
{ type: 'address' },
|
|
46
|
+
{ type: 'uint256' },
|
|
47
|
+
{ type: 'uint256' },
|
|
48
|
+
{ type: 'uint256' },
|
|
49
|
+
{ type: 'address' },
|
|
50
|
+
{ type: 'address' },
|
|
51
|
+
{ type: 'uint256' },
|
|
52
|
+
{ type: 'uint256' },
|
|
53
|
+
{ type: 'address' },
|
|
54
|
+
{ type: 'bytes32' },
|
|
55
|
+
], [
|
|
56
|
+
CLIENT_FEE_TYPEHASH,
|
|
57
|
+
BigInt(params.bps) * CLIENT_FEE_UNITS_PER_BPS,
|
|
58
|
+
params.receiver,
|
|
59
|
+
params.maxContribution,
|
|
60
|
+
BigInt(params.deadline),
|
|
61
|
+
swap.amountIn,
|
|
62
|
+
swap.tokenIn,
|
|
63
|
+
swap.tokenOut,
|
|
64
|
+
swap.expectedAmountOut,
|
|
65
|
+
swap.minAmountOut,
|
|
66
|
+
swap.receiver,
|
|
67
|
+
swap.swapsHash,
|
|
68
|
+
]));
|
|
69
|
+
return keccak256(concatHex(['0x1901', domainSeparator, structHash]));
|
|
36
70
|
}
|
|
37
71
|
/**
|
|
38
72
|
* Attach client fee configuration to encoding options.
|
package/dist/client-fee.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-fee.js","sourceRoot":"","sources":["../src/client-fee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"client-fee.js","sourceRoot":"","sources":["../src/client-fee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC;;;;;;GAMG;AACH,MAAM,wBAAwB,GAAG,MAAO,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,mBAAmB,GAAG,SAAS,CACnC,WAAW,CACT,0DAA0D;IACxD,iDAAiD;IACjD,oDAAoD;IACpD,8EAA8E,CACjF,CACF,CAAC;AAEF,MAAM,sBAAsB,GAAG,SAAS,CACtC,WAAW,CACT,oFAAoF,CACrF,CACF,CAAC;AAoBF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAuB,EACvB,OAAe,EACf,aAAsB,EACtB,IAA0B;IAE1B,MAAM,eAAe,GAAG,SAAS,CAC/B,mBAAmB,CACjB;QACE,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;KACpB,EACD;QACE,sBAAsB;QACtB,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACrC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,OAAO,CAAC;QACf,aAAa;KACd,CACF,CACF,CAAC;IAEF,MAAM,UAAU,GAAG,SAAS,CAC1B,mBAAmB,CACjB;QACE,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;QACnB,EAAE,IAAI,EAAE,SAAS,EAAE;KACpB,EACD;QACE,mBAAmB;QACnB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,wBAAwB;QAC7C,MAAM,CAAC,QAAQ;QACf,MAAM,CAAC,eAAe;QACtB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvB,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,iBAAiB;QACtB,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,SAAS;KACf,CACF,CACF,CAAC;IAEF,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAqB,EACrB,MAAuB;IAEvB,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,SAAS,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACpC,MAAM,SAAS,CAAC,MAAM,CACpB,sEAAsE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAC9G,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AAC9C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type { ApprovalPayload, Eip1559Transaction, ExecutionReceipt, FyndPayload
|
|
|
5
5
|
export { approvalSigningHash, assembleSignedSwap, DEFAULT_SETTLE_TIMEOUT_MS, swapSigningHash } from "./signing.js";
|
|
6
6
|
export { permit2SigningHash, encodingOptions, withPermit2, withVaultFunds, } from "./permit2.js";
|
|
7
7
|
export { clientFeeSigningHash, withClientFee, } from "./client-fee.js";
|
|
8
|
+
export type { ClientFeeSwapContext } from "./client-fee.js";
|
|
8
9
|
export { FyndClient } from "./client.js";
|
|
9
10
|
export type { EthProvider, ExecutionOptions, FyndClientOptions, MinimalReceipt, RetryConfig, SigningHints, } from "./client.js";
|
|
10
11
|
export { createFyndClient } from "./autogen.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,EACf,eAAe,EACf,YAAY,EACZ,GAAG,EACH,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,SAAS,EACT,aAAa,EACb,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,WAAW,EACX,KAAK,EACL,cAAc,EACd,IAAI,EACJ,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,EACf,eAAe,EACf,YAAY,EACZ,GAAG,EACH,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,SAAS,EACT,aAAa,EACb,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,WAAW,EACX,KAAK,EACL,cAAc,EACd,IAAI,EACJ,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAevC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,aAAa,GACd,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAevC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|