@1inch/fusion-sdk 2.4.7-rc.1 → 2.4.7-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +174 -25
- package/dist/cjs/api/quoter/quote/quote.js +6 -20
- package/dist/cjs/api/quoter/quoter.api.spec.js +6 -103
- package/dist/cjs/api/quoter/quoter.request.js +4 -1
- package/dist/cjs/api/quoter/quoter.request.spec.js +8 -2
- package/dist/cjs/constants.js +19 -1
- package/dist/cjs/fusion-order/fusion-order.js +120 -0
- package/dist/cjs/fusion-order/fusion-order.spec.js +100 -0
- package/dist/cjs/fusion-order/index.js +1 -0
- package/dist/cjs/fusion-order/permit/constants.js +98 -0
- package/dist/cjs/fusion-order/permit/index.js +34 -0
- package/dist/cjs/fusion-order/permit/permit-transfer-from.js +115 -0
- package/dist/cjs/fusion-order/permit/permit-transfer-from.spec.js +232 -0
- package/dist/cjs/fusion-order/permit/transfer-from-suffix.js +61 -0
- package/dist/cjs/fusion-order/permit/utils.js +35 -0
- package/dist/cjs/index.js +0 -3
- package/dist/cjs/sdk/README.md +14 -18
- package/dist/esm/api/quoter/quote/quote.js +6 -20
- package/dist/esm/api/quoter/quote/types.js +3 -15
- package/dist/esm/api/quoter/quoter.api.spec.js +6 -103
- package/dist/esm/api/quoter/quoter.request.js +4 -1
- package/dist/esm/api/quoter/quoter.request.spec.js +8 -2
- package/dist/esm/constants.js +16 -1
- package/dist/esm/fusion-order/fusion-order.js +121 -1
- package/dist/esm/fusion-order/fusion-order.spec.js +100 -0
- package/dist/esm/fusion-order/index.js +1 -0
- package/dist/esm/fusion-order/permit/constants.js +71 -0
- package/dist/esm/fusion-order/permit/index.js +3 -0
- package/dist/esm/fusion-order/permit/permit-transfer-from.js +105 -0
- package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +228 -0
- package/dist/esm/fusion-order/permit/transfer-from-suffix.js +38 -0
- package/dist/esm/fusion-order/permit/utils.js +12 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/esm/sdk/README.md +14 -18
- package/dist/types/src/api/quoter/quote/quote.d.ts +2 -3
- package/dist/types/src/api/quoter/quote/types.d.ts +1 -6
- package/dist/types/src/api/quoter/quoter.request.d.ts +3 -3
- package/dist/types/src/api/quoter/types.d.ts +2 -2
- package/dist/types/src/constants.d.ts +1 -0
- package/dist/types/src/fusion-order/fusion-order.d.ts +6 -0
- package/dist/types/src/fusion-order/index.d.ts +1 -0
- package/dist/types/src/fusion-order/permit/constants.d.ts +7 -0
- package/dist/types/src/fusion-order/permit/index.d.ts +3 -0
- package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +11 -0
- package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +10 -0
- package/dist/types/src/fusion-order/permit/utils.d.ts +3 -0
- package/dist/types/src/index.d.ts +2 -2
- package/dist/types/src/sdk/types.d.ts +3 -3
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
var _limitordersdk = require("@1inch/limit-order-sdk");
|
|
6
|
+
var _ethers = require("ethers");
|
|
7
|
+
var _permittransferfrom = require("./permit-transfer-from.js");
|
|
8
|
+
var _constants = require("./constants.js");
|
|
9
|
+
var _utils = require("./utils.js");
|
|
10
|
+
var _constants1 = require("../../constants.js");
|
|
11
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
12
|
+
try {
|
|
13
|
+
var info = gen[key](arg);
|
|
14
|
+
var value = info.value;
|
|
15
|
+
} catch (error) {
|
|
16
|
+
reject(error);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (info.done) {
|
|
20
|
+
resolve(value);
|
|
21
|
+
} else {
|
|
22
|
+
Promise.resolve(value).then(_next, _throw);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function _async_to_generator(fn) {
|
|
26
|
+
return function() {
|
|
27
|
+
var self = this, args = arguments;
|
|
28
|
+
return new Promise(function(resolve, reject) {
|
|
29
|
+
var gen = fn.apply(self, args);
|
|
30
|
+
function _next(value) {
|
|
31
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
32
|
+
}
|
|
33
|
+
function _throw(err) {
|
|
34
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
35
|
+
}
|
|
36
|
+
_next(undefined);
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function _define_property(obj, key, value) {
|
|
41
|
+
if (key in obj) {
|
|
42
|
+
Object.defineProperty(obj, key, {
|
|
43
|
+
value: value,
|
|
44
|
+
enumerable: true,
|
|
45
|
+
configurable: true,
|
|
46
|
+
writable: true
|
|
47
|
+
});
|
|
48
|
+
} else {
|
|
49
|
+
obj[key] = value;
|
|
50
|
+
}
|
|
51
|
+
return obj;
|
|
52
|
+
}
|
|
53
|
+
function _object_spread(target) {
|
|
54
|
+
for(var i = 1; i < arguments.length; i++){
|
|
55
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
56
|
+
var ownKeys = Object.keys(source);
|
|
57
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
58
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
59
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
ownKeys.forEach(function(key) {
|
|
63
|
+
_define_property(target, key, source[key]);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return target;
|
|
67
|
+
}
|
|
68
|
+
function _ts_generator(thisArg, body) {
|
|
69
|
+
var f, y, t, g, _ = {
|
|
70
|
+
label: 0,
|
|
71
|
+
sent: function() {
|
|
72
|
+
if (t[0] & 1) throw t[1];
|
|
73
|
+
return t[1];
|
|
74
|
+
},
|
|
75
|
+
trys: [],
|
|
76
|
+
ops: []
|
|
77
|
+
};
|
|
78
|
+
return g = {
|
|
79
|
+
next: verb(0),
|
|
80
|
+
"throw": verb(1),
|
|
81
|
+
"return": verb(2)
|
|
82
|
+
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
83
|
+
return this;
|
|
84
|
+
}), g;
|
|
85
|
+
function verb(n) {
|
|
86
|
+
return function(v) {
|
|
87
|
+
return step([
|
|
88
|
+
n,
|
|
89
|
+
v
|
|
90
|
+
]);
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function step(op) {
|
|
94
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
95
|
+
while(_)try {
|
|
96
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
97
|
+
if (y = 0, t) op = [
|
|
98
|
+
op[0] & 2,
|
|
99
|
+
t.value
|
|
100
|
+
];
|
|
101
|
+
switch(op[0]){
|
|
102
|
+
case 0:
|
|
103
|
+
case 1:
|
|
104
|
+
t = op;
|
|
105
|
+
break;
|
|
106
|
+
case 4:
|
|
107
|
+
_.label++;
|
|
108
|
+
return {
|
|
109
|
+
value: op[1],
|
|
110
|
+
done: false
|
|
111
|
+
};
|
|
112
|
+
case 5:
|
|
113
|
+
_.label++;
|
|
114
|
+
y = op[1];
|
|
115
|
+
op = [
|
|
116
|
+
0
|
|
117
|
+
];
|
|
118
|
+
continue;
|
|
119
|
+
case 7:
|
|
120
|
+
op = _.ops.pop();
|
|
121
|
+
_.trys.pop();
|
|
122
|
+
continue;
|
|
123
|
+
default:
|
|
124
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
125
|
+
_ = 0;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
129
|
+
_.label = op[1];
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
133
|
+
_.label = t[1];
|
|
134
|
+
t = op;
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
if (t && _.label < t[2]) {
|
|
138
|
+
_.label = t[2];
|
|
139
|
+
_.ops.push(op);
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
if (t[2]) _.ops.pop();
|
|
143
|
+
_.trys.pop();
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
op = body.call(thisArg, _);
|
|
147
|
+
} catch (e) {
|
|
148
|
+
op = [
|
|
149
|
+
6,
|
|
150
|
+
e
|
|
151
|
+
];
|
|
152
|
+
y = 0;
|
|
153
|
+
} finally{
|
|
154
|
+
f = t = 0;
|
|
155
|
+
}
|
|
156
|
+
if (op[0] & 5) throw op[1];
|
|
157
|
+
return {
|
|
158
|
+
value: op[0] ? op[1] : void 0,
|
|
159
|
+
done: true
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
describe('PermitTransferFrom', function() {
|
|
164
|
+
var token = new _limitordersdk.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2');
|
|
165
|
+
var spender = new _limitordersdk.Address('0x1111111254eeb25477b68fb85ed929f73a960582');
|
|
166
|
+
var maxSpendAmount = 1000000000000000000n;
|
|
167
|
+
var nonce = 42n;
|
|
168
|
+
var deadline = 1700000000n;
|
|
169
|
+
it('should return correct typed data for ethereum', function() {
|
|
170
|
+
var permit = new _permittransferfrom.PermitTransferFrom(token, maxSpendAmount, spender, nonce, deadline);
|
|
171
|
+
var typedData = permit.getTypedData(_constants1.NetworkEnum.ETHEREUM);
|
|
172
|
+
expect(typedData).toStrictEqual({
|
|
173
|
+
primaryType: 'PermitTransferFrom',
|
|
174
|
+
types: _constants.PERMIT_TRANSFER_FROM_TYPES,
|
|
175
|
+
domain: {
|
|
176
|
+
name: _constants.PERMIT2_DOMAIN_NAME,
|
|
177
|
+
chainId: _constants1.NetworkEnum.ETHEREUM,
|
|
178
|
+
verifyingContract: (0, _utils.getPermit2Address)(_constants1.NetworkEnum.ETHEREUM)
|
|
179
|
+
},
|
|
180
|
+
message: {
|
|
181
|
+
permitted: {
|
|
182
|
+
token: token.toString(),
|
|
183
|
+
amount: maxSpendAmount
|
|
184
|
+
},
|
|
185
|
+
spender: spender.toString(),
|
|
186
|
+
nonce: nonce,
|
|
187
|
+
deadline: deadline
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
it('should use zksync permit2 address for zksync chain', function() {
|
|
192
|
+
var permit = new _permittransferfrom.PermitTransferFrom(token, maxSpendAmount, spender, nonce, deadline);
|
|
193
|
+
var typedData = permit.getTypedData(_constants1.NetworkEnum.ZKSYNC);
|
|
194
|
+
expect(typedData.domain.verifyingContract).toBe((0, _utils.getPermit2Address)(_constants1.NetworkEnum.ZKSYNC));
|
|
195
|
+
});
|
|
196
|
+
it('should use custom permit2 address when provided', function() {
|
|
197
|
+
var customPermit2 = '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
|
|
198
|
+
var permit = new _permittransferfrom.PermitTransferFrom(token, maxSpendAmount, spender, nonce, deadline);
|
|
199
|
+
var typedData = permit.getTypedData(_constants1.NetworkEnum.ETHEREUM, customPermit2);
|
|
200
|
+
expect(typedData.domain.verifyingContract).toBe(customPermit2);
|
|
201
|
+
});
|
|
202
|
+
it('should throw for unsupported chain id without custom address', function() {
|
|
203
|
+
var permit = new _permittransferfrom.PermitTransferFrom(token, maxSpendAmount, spender, nonce, deadline);
|
|
204
|
+
expect(function() {
|
|
205
|
+
return permit.getTypedData(999);
|
|
206
|
+
}).toThrow('unsupported chainId');
|
|
207
|
+
});
|
|
208
|
+
it('should produce signable typed data that recovers to the signer', /*#__PURE__*/ _async_to_generator(function() {
|
|
209
|
+
var wallet, permit, typedData, types, signature, recovered;
|
|
210
|
+
return _ts_generator(this, function(_state) {
|
|
211
|
+
switch(_state.label){
|
|
212
|
+
case 0:
|
|
213
|
+
wallet = _ethers.Wallet.createRandom();
|
|
214
|
+
permit = new _permittransferfrom.PermitTransferFrom(token, maxSpendAmount, spender, nonce, deadline);
|
|
215
|
+
typedData = permit.getTypedData(_constants1.NetworkEnum.ETHEREUM);
|
|
216
|
+
types = _object_spread({}, typedData.types);
|
|
217
|
+
delete types['EIP712Domain'];
|
|
218
|
+
return [
|
|
219
|
+
4,
|
|
220
|
+
wallet.signTypedData(typedData.domain, types, typedData.message)
|
|
221
|
+
];
|
|
222
|
+
case 1:
|
|
223
|
+
signature = _state.sent();
|
|
224
|
+
recovered = (0, _ethers.verifyTypedData)(typedData.domain, types, typedData.message, signature);
|
|
225
|
+
expect(recovered).toBe(wallet.address);
|
|
226
|
+
return [
|
|
227
|
+
2
|
|
228
|
+
];
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}));
|
|
232
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
decodeTransferFromSuffix: function() {
|
|
13
|
+
return decodeTransferFromSuffix;
|
|
14
|
+
},
|
|
15
|
+
encodeTransferFromSuffix: function() {
|
|
16
|
+
return encodeTransferFromSuffix;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
var _limitordersdk = require("@1inch/limit-order-sdk");
|
|
20
|
+
var _ethers = require("ethers");
|
|
21
|
+
var _assert = /*#__PURE__*/ _interop_require_default(require("assert"));
|
|
22
|
+
function _interop_require_default(obj) {
|
|
23
|
+
return obj && obj.__esModule ? obj : {
|
|
24
|
+
default: obj
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Permit2Proxy exposes `func_nZHTch(address,address,uint256,((address,uint256),uint256,uint256),bytes)`
|
|
29
|
+
* whose selector collides with `transferFrom(address,address,uint256)` (0x23b872dd).
|
|
30
|
+
* The LOP calls `_callTransferFromWithSuffix`, appending these extra params as raw suffix bytes.
|
|
31
|
+
*/ var PERMIT2_TRANSFER_FROM_EXTRA_PARAMS_ABI = [
|
|
32
|
+
'tuple(tuple(address token, uint256 amount) permitted, uint256 nonce, uint256 deadline)',
|
|
33
|
+
'bytes'
|
|
34
|
+
];
|
|
35
|
+
var abiCoder = _ethers.AbiCoder.defaultAbiCoder();
|
|
36
|
+
function encodeTransferFromSuffix(token, amount, nonce, deadline, signature) {
|
|
37
|
+
return abiCoder.encode(PERMIT2_TRANSFER_FROM_EXTRA_PARAMS_ABI, [
|
|
38
|
+
{
|
|
39
|
+
permitted: {
|
|
40
|
+
token: token.toString(),
|
|
41
|
+
amount: amount
|
|
42
|
+
},
|
|
43
|
+
nonce: nonce,
|
|
44
|
+
deadline: deadline
|
|
45
|
+
},
|
|
46
|
+
signature
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
function decodeTransferFromSuffix(suffix) {
|
|
50
|
+
var decoded = abiCoder.decode(PERMIT2_TRANSFER_FROM_EXTRA_PARAMS_ABI, suffix);
|
|
51
|
+
var permit = decoded[0];
|
|
52
|
+
var sig = decoded[1];
|
|
53
|
+
(0, _assert.default)(sig.length > 0, 'empty permit signature');
|
|
54
|
+
return {
|
|
55
|
+
token: new _limitordersdk.Address(permit.permitted.token),
|
|
56
|
+
amount: BigInt(permit.permitted.amount),
|
|
57
|
+
nonce: BigInt(permit.nonce),
|
|
58
|
+
deadline: BigInt(permit.deadline),
|
|
59
|
+
signature: sig
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
getPermit2Address: function() {
|
|
13
|
+
return getPermit2Address;
|
|
14
|
+
},
|
|
15
|
+
getPermit2ProxyAddress: function() {
|
|
16
|
+
return getPermit2ProxyAddress;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
var _limitordersdk = require("@1inch/limit-order-sdk");
|
|
20
|
+
var _assert = /*#__PURE__*/ _interop_require_default(require("assert"));
|
|
21
|
+
var _constants = require("./constants.js");
|
|
22
|
+
var _constants1 = require("../../constants.js");
|
|
23
|
+
function _interop_require_default(obj) {
|
|
24
|
+
return obj && obj.__esModule ? obj : {
|
|
25
|
+
default: obj
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function getPermit2Address(chainId) {
|
|
29
|
+
(0, _assert.default)(_constants1.NetworkEnum[chainId], 'unsupported chainId');
|
|
30
|
+
return _constants.PERMIT2_ADDRESSES[chainId];
|
|
31
|
+
}
|
|
32
|
+
function getPermit2ProxyAddress(chainId) {
|
|
33
|
+
(0, _assert.default)(_constants1.NetworkEnum[chainId], 'unsupported chainId');
|
|
34
|
+
return new _limitordersdk.Address(_constants.PERMIT2_PROXY_ADDRESSES[chainId]);
|
|
35
|
+
}
|
package/dist/cjs/index.js
CHANGED
package/dist/cjs/sdk/README.md
CHANGED
|
@@ -204,11 +204,12 @@ sdk.placeOrder({
|
|
|
204
204
|
toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
205
205
|
amount: '50000000000000000', // 0.05 ETH
|
|
206
206
|
walletAddress: makerAddress,
|
|
207
|
-
//
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
207
|
+
// fee is an optional field
|
|
208
|
+
fee: {
|
|
209
|
+
takingFeeBps: 100, // 1% as we use bps format, 1% is equal to 100bps
|
|
210
|
+
takingFeeReceiver: '0x0000000000000000000000000000000000000000' // fee receiver address
|
|
211
|
+
},
|
|
212
|
+
source: 'platform-name'
|
|
212
213
|
}).then(console.log)
|
|
213
214
|
```
|
|
214
215
|
|
|
@@ -223,15 +224,6 @@ type PaginationParams = {
|
|
|
223
224
|
}
|
|
224
225
|
```
|
|
225
226
|
|
|
226
|
-
### IntegratorFeeRequest
|
|
227
|
-
|
|
228
|
-
```typescript
|
|
229
|
-
type IntegratorFeeRequest = {
|
|
230
|
-
receiver: Address // fee receiver address
|
|
231
|
-
value: Bps // 100 == 1%
|
|
232
|
-
}
|
|
233
|
-
```
|
|
234
|
-
|
|
235
227
|
### QuoteParams
|
|
236
228
|
|
|
237
229
|
```typescript
|
|
@@ -239,9 +231,8 @@ type QuoteParams = {
|
|
|
239
231
|
fromTokenAddress: string
|
|
240
232
|
toTokenAddress: string
|
|
241
233
|
amount: string
|
|
242
|
-
walletAddress?: string
|
|
243
234
|
permit?: string // a permit (EIP-2612) call data, user approval sign
|
|
244
|
-
|
|
235
|
+
takingFeeBps?: number // 100 == 1%
|
|
245
236
|
}
|
|
246
237
|
```
|
|
247
238
|
|
|
@@ -262,7 +253,12 @@ type OrderParams = {
|
|
|
262
253
|
permit?: string // a permit (EIP-2612) call data, user approval sign
|
|
263
254
|
receiver?: string // address
|
|
264
255
|
preset?: PresetEnum
|
|
265
|
-
nonce?:
|
|
266
|
-
|
|
256
|
+
nonce?: OrderNonce | string | number // allows to batch cancel orders. by default: not used
|
|
257
|
+
fee?: TakingFeeInfo
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export type TakingFeeInfo = {
|
|
261
|
+
takingFeeBps: number // 100 == 1%
|
|
262
|
+
takingFeeReceiver: string
|
|
267
263
|
}
|
|
268
264
|
```
|
|
@@ -87,7 +87,11 @@ export var Quote = /*#__PURE__*/ function() {
|
|
|
87
87
|
bps: new Bps(BigInt(response.fee.bps))
|
|
88
88
|
};
|
|
89
89
|
this.surplusFee = response.surplusFee;
|
|
90
|
-
this.integratorFeeParams =
|
|
90
|
+
this.integratorFeeParams = response.integratorFee && response.integratorFeeReceiver ? {
|
|
91
|
+
receiver: new Address(response.integratorFeeReceiver),
|
|
92
|
+
value: new Bps(BigInt(response.integratorFee)),
|
|
93
|
+
share: Bps.fromPercent(response.integratorFeeShare || 0)
|
|
94
|
+
} : undefined;
|
|
91
95
|
}
|
|
92
96
|
_create_class(Quote, [
|
|
93
97
|
{
|
|
@@ -134,7 +138,7 @@ export var Quote = /*#__PURE__*/ function() {
|
|
|
134
138
|
orderExpirationDelay: paramsData === null || paramsData === void 0 ? void 0 : paramsData.orderExpirationDelay,
|
|
135
139
|
source: this.params.source,
|
|
136
140
|
enablePermit2: params.isPermit2,
|
|
137
|
-
fees: buildFees(this.resolverFeePreset, this.integratorFeeParams, this.surplusFee)
|
|
141
|
+
fees: buildFees(this.resolverFeePreset, this.params.integratorFee || this.integratorFeeParams, this.surplusFee)
|
|
138
142
|
};
|
|
139
143
|
return this._createOrder(paramsData.network, this.settlementAddress, orderInfo, details, extra);
|
|
140
144
|
}
|
|
@@ -175,24 +179,6 @@ export var Quote = /*#__PURE__*/ function() {
|
|
|
175
179
|
}
|
|
176
180
|
return FusionOrder.new(settlementExtension, orderInfo, details, extra);
|
|
177
181
|
}
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
key: "parseIntegratorFee",
|
|
181
|
-
value: function parseIntegratorFee(response) {
|
|
182
|
-
var _this_params_integratorFee_receiver, _this_params_integratorFee;
|
|
183
|
-
if (!response.integratorFee) {
|
|
184
|
-
return undefined;
|
|
185
|
-
}
|
|
186
|
-
var receiver = response.integratorFeeReceiver || ((_this_params_integratorFee = this.params.integratorFee) === null || _this_params_integratorFee === void 0 ? void 0 : (_this_params_integratorFee_receiver = _this_params_integratorFee.receiver) === null || _this_params_integratorFee_receiver === void 0 ? void 0 : _this_params_integratorFee_receiver.toString());
|
|
187
|
-
if (!receiver) {
|
|
188
|
-
return undefined;
|
|
189
|
-
}
|
|
190
|
-
return {
|
|
191
|
-
receiver: new Address(receiver),
|
|
192
|
-
value: new Bps(BigInt(response.integratorFee)),
|
|
193
|
-
share: Bps.fromPercent(response.integratorFeeShare || 0)
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
182
|
}
|
|
197
183
|
]);
|
|
198
184
|
return Quote;
|
|
@@ -2,23 +2,11 @@
|
|
|
2
2
|
* Order will expire in `orderExpirationDelay` after auction ends
|
|
3
3
|
* Default 12s
|
|
4
4
|
*/ /**
|
|
5
|
-
* Integrator fee parameters for SDK requests.
|
|
6
|
-
* Used when calling getQuote() or createOrder().
|
|
7
|
-
*/ /**
|
|
8
|
-
* Address which will receive integrator's portion of the fee.
|
|
9
|
-
*/ /**
|
|
10
|
-
* How much to charge in basis points (1% = 100 bps)
|
|
11
|
-
*/ /**
|
|
12
|
-
* Integrator fee parameters from API response.
|
|
13
|
-
* Contains authoritative values calculated by backend.
|
|
14
|
-
*/ /**
|
|
15
5
|
* Address which will receive `share` of `value` fee, other part will be sent to protocol
|
|
16
6
|
*/ /**
|
|
17
|
-
* How much to charge
|
|
18
|
-
*/ /**
|
|
19
|
-
* Integrator will receive only `share` part from charged fee (rest goes to protocol)
|
|
7
|
+
* How much to charge
|
|
20
8
|
*/ /**
|
|
21
|
-
|
|
22
|
-
|
|
9
|
+
* Integrator will receive only `share` part from charged fee
|
|
10
|
+
*/ export { }; /**
|
|
23
11
|
* protocol address
|
|
24
12
|
*/
|
|
@@ -27,58 +27,6 @@ function _async_to_generator(fn) {
|
|
|
27
27
|
});
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
-
function _define_property(obj, key, value) {
|
|
31
|
-
if (key in obj) {
|
|
32
|
-
Object.defineProperty(obj, key, {
|
|
33
|
-
value: value,
|
|
34
|
-
enumerable: true,
|
|
35
|
-
configurable: true,
|
|
36
|
-
writable: true
|
|
37
|
-
});
|
|
38
|
-
} else {
|
|
39
|
-
obj[key] = value;
|
|
40
|
-
}
|
|
41
|
-
return obj;
|
|
42
|
-
}
|
|
43
|
-
function _object_spread(target) {
|
|
44
|
-
for(var i = 1; i < arguments.length; i++){
|
|
45
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
46
|
-
var ownKeys = Object.keys(source);
|
|
47
|
-
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
48
|
-
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
49
|
-
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
ownKeys.forEach(function(key) {
|
|
53
|
-
_define_property(target, key, source[key]);
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
return target;
|
|
57
|
-
}
|
|
58
|
-
function ownKeys(object, enumerableOnly) {
|
|
59
|
-
var keys = Object.keys(object);
|
|
60
|
-
if (Object.getOwnPropertySymbols) {
|
|
61
|
-
var symbols = Object.getOwnPropertySymbols(object);
|
|
62
|
-
if (enumerableOnly) {
|
|
63
|
-
symbols = symbols.filter(function(sym) {
|
|
64
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
keys.push.apply(keys, symbols);
|
|
68
|
-
}
|
|
69
|
-
return keys;
|
|
70
|
-
}
|
|
71
|
-
function _object_spread_props(target, source) {
|
|
72
|
-
source = source != null ? source : {};
|
|
73
|
-
if (Object.getOwnPropertyDescriptors) {
|
|
74
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
75
|
-
} else {
|
|
76
|
-
ownKeys(Object(source)).forEach(function(key) {
|
|
77
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
return target;
|
|
81
|
-
}
|
|
82
30
|
function _ts_generator(thisArg, body) {
|
|
83
31
|
var f, y, t, g, _ = {
|
|
84
32
|
label: 0,
|
|
@@ -180,7 +128,6 @@ import { QuoterRequest } from './quoter.request.js';
|
|
|
180
128
|
import { Quote } from './quote/index.js';
|
|
181
129
|
import { PresetEnum } from './types.js';
|
|
182
130
|
import { QuoterCustomPresetRequest } from './quoter-custom-preset.request.js';
|
|
183
|
-
import { ONE_INCH_LIMIT_ORDER_V4 } from '../../constants.js';
|
|
184
131
|
describe('Quoter API', function() {
|
|
185
132
|
var httpProvider;
|
|
186
133
|
beforeEach(function() {
|
|
@@ -292,7 +239,7 @@ describe('Quoter API', function() {
|
|
|
292
239
|
],
|
|
293
240
|
fee: {
|
|
294
241
|
whitelistDiscountPercent: 1,
|
|
295
|
-
receiver:
|
|
242
|
+
receiver: '0x02f92800F57BCD74066F5709F1Daa1A4302Df875',
|
|
296
243
|
bps: 10
|
|
297
244
|
},
|
|
298
245
|
marketAmount: '626772029219852913'
|
|
@@ -314,7 +261,7 @@ describe('Quoter API', function() {
|
|
|
314
261
|
case 1:
|
|
315
262
|
res = _state.sent();
|
|
316
263
|
expect(res).toStrictEqual(QuoterResponseMock);
|
|
317
|
-
expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&surplus=true');
|
|
264
|
+
expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&source=sdk&surplus=true');
|
|
318
265
|
return [
|
|
319
266
|
2
|
|
320
267
|
];
|
|
@@ -336,6 +283,7 @@ describe('Quoter API', function() {
|
|
|
336
283
|
amount: '1000000000000000000000',
|
|
337
284
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
338
285
|
integratorFee: {
|
|
286
|
+
share: Bps.fromPercent(50),
|
|
339
287
|
receiver: Address.fromBigInt(10n),
|
|
340
288
|
value: new Bps(1n)
|
|
341
289
|
},
|
|
@@ -371,6 +319,7 @@ describe('Quoter API', function() {
|
|
|
371
319
|
amount: '1000000000000000000000',
|
|
372
320
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
373
321
|
integratorFee: {
|
|
322
|
+
share: Bps.fromPercent(50),
|
|
374
323
|
receiver: Address.fromBigInt(10n),
|
|
375
324
|
value: new Bps(1n)
|
|
376
325
|
},
|
|
@@ -407,6 +356,7 @@ describe('Quoter API', function() {
|
|
|
407
356
|
amount: '1000000000000000000000',
|
|
408
357
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
409
358
|
integratorFee: {
|
|
359
|
+
share: Bps.fromPercent(50),
|
|
410
360
|
receiver: Address.fromBigInt(10n),
|
|
411
361
|
value: new Bps(1n)
|
|
412
362
|
},
|
|
@@ -459,6 +409,7 @@ describe('Quoter API', function() {
|
|
|
459
409
|
amount: '1000000000000000000000',
|
|
460
410
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
461
411
|
integratorFee: {
|
|
412
|
+
share: Bps.fromPercent(50),
|
|
462
413
|
receiver: Address.fromBigInt(10n),
|
|
463
414
|
value: new Bps(1n)
|
|
464
415
|
},
|
|
@@ -497,52 +448,4 @@ describe('Quoter API', function() {
|
|
|
497
448
|
}
|
|
498
449
|
});
|
|
499
450
|
}));
|
|
500
|
-
describe('parseIntegratorFee', function() {
|
|
501
|
-
it('should use response receiver when provided', function() {
|
|
502
|
-
var _quote_integratorFeeParams, _quote_integratorFeeParams1, _quote_integratorFeeParams2;
|
|
503
|
-
var responseWithFee = _object_spread_props(_object_spread({}, ResponseMock), {
|
|
504
|
-
integratorFee: 100,
|
|
505
|
-
integratorFeeReceiver: '0x1234567890123456789012345678901234567890',
|
|
506
|
-
integratorFeeShare: 50
|
|
507
|
-
});
|
|
508
|
-
var quote = new Quote(params, responseWithFee);
|
|
509
|
-
expect(quote.integratorFeeParams).toBeDefined();
|
|
510
|
-
expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0x1234567890123456789012345678901234567890');
|
|
511
|
-
expect(Number((_quote_integratorFeeParams1 = quote.integratorFeeParams) === null || _quote_integratorFeeParams1 === void 0 ? void 0 : _quote_integratorFeeParams1.value.value)).toBe(100);
|
|
512
|
-
expect(Number((_quote_integratorFeeParams2 = quote.integratorFeeParams) === null || _quote_integratorFeeParams2 === void 0 ? void 0 : _quote_integratorFeeParams2.share.value)).toBe(5000);
|
|
513
|
-
});
|
|
514
|
-
it('should fallback to request receiver when response receiver is missing', function() {
|
|
515
|
-
var _quote_integratorFeeParams;
|
|
516
|
-
var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
|
|
517
|
-
integratorFee: 100,
|
|
518
|
-
integratorFeeShare: 50
|
|
519
|
-
});
|
|
520
|
-
var paramsWithFee = QuoterRequest.new({
|
|
521
|
-
fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
|
522
|
-
toTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
|
523
|
-
amount: '1000000000000000000000',
|
|
524
|
-
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
525
|
-
integratorFee: {
|
|
526
|
-
receiver: new Address('0xabcdef0123456789abcdef0123456789abcdef01'),
|
|
527
|
-
value: new Bps(100n)
|
|
528
|
-
},
|
|
529
|
-
source: 'test-source'
|
|
530
|
-
});
|
|
531
|
-
var quote = new Quote(paramsWithFee, responseWithFeeNoReceiver);
|
|
532
|
-
expect(quote.integratorFeeParams).toBeDefined();
|
|
533
|
-
expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0xabcdef0123456789abcdef0123456789abcdef01');
|
|
534
|
-
});
|
|
535
|
-
it('should return undefined when no receiver available', function() {
|
|
536
|
-
var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
|
|
537
|
-
integratorFee: 100,
|
|
538
|
-
integratorFeeShare: 50
|
|
539
|
-
});
|
|
540
|
-
var quote = new Quote(params, responseWithFeeNoReceiver);
|
|
541
|
-
expect(quote.integratorFeeParams).toBeUndefined();
|
|
542
|
-
});
|
|
543
|
-
it('should return undefined when no integratorFee in response', function() {
|
|
544
|
-
var quote = new Quote(params, ResponseMock);
|
|
545
|
-
expect(quote.integratorFeeParams).toBeUndefined();
|
|
546
|
-
});
|
|
547
|
-
});
|
|
548
451
|
});
|
|
@@ -53,7 +53,7 @@ export var QuoterRequest = /*#__PURE__*/ function() {
|
|
|
53
53
|
this.enableEstimate = params.enableEstimate || false;
|
|
54
54
|
this.permit = params.permit;
|
|
55
55
|
this.integratorFee = params.integratorFee;
|
|
56
|
-
this.source = params.source;
|
|
56
|
+
this.source = params.source || 'sdk';
|
|
57
57
|
var _params_isPermit2;
|
|
58
58
|
this.isPermit2 = (_params_isPermit2 = params.isPermit2) !== null && _params_isPermit2 !== void 0 ? _params_isPermit2 : false;
|
|
59
59
|
this.slippage = params.slippage;
|
|
@@ -66,6 +66,9 @@ export var QuoterRequest = /*#__PURE__*/ function() {
|
|
|
66
66
|
if (!isValidAmount(this.amount)) {
|
|
67
67
|
throw new Error("".concat(this.amount, " is invalid amount"));
|
|
68
68
|
}
|
|
69
|
+
if (this.integratorFee && this.source === 'sdk') {
|
|
70
|
+
throw new Error('cannot use fee without source');
|
|
71
|
+
}
|
|
69
72
|
}
|
|
70
73
|
_create_class(QuoterRequest, [
|
|
71
74
|
{
|