@cowprotocol/sdk-trading 0.1.0-monorepo.0

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/index.js ADDED
@@ -0,0 +1,1067 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var src_exports = {};
32
+ __export(src_exports, {
33
+ ORDER_PRIMARY_TYPE: () => ORDER_PRIMARY_TYPE,
34
+ TradingSdk: () => TradingSdk,
35
+ buildAppData: () => buildAppData,
36
+ calculateUniqueOrderId: () => calculateUniqueOrderId,
37
+ disableUtm: () => disableUtm,
38
+ generateAppDataFromDoc: () => generateAppDataFromDoc,
39
+ getEthFlowContract: () => getEthFlowContract,
40
+ getEthFlowTransaction: () => getEthFlowTransaction,
41
+ getOrderToSign: () => getOrderToSign,
42
+ getPartnerFeeBps: () => getPartnerFeeBps,
43
+ getPreSignTransaction: () => getPreSignTransaction,
44
+ getQuote: () => getQuote,
45
+ getQuoteWithSigner: () => getQuoteWithSigner,
46
+ getTradeParametersAfterQuote: () => getTradeParametersAfterQuote,
47
+ mapQuoteAmountsAndCosts: () => mapQuoteAmountsAndCosts,
48
+ mergeAppDataDoc: () => mergeAppDataDoc,
49
+ postCoWProtocolTrade: () => postCoWProtocolTrade,
50
+ postLimitOrder: () => postLimitOrder,
51
+ postSellNativeCurrencyOrder: () => postSellNativeCurrencyOrder,
52
+ postSwapOrder: () => postSwapOrder,
53
+ postSwapOrderFromQuote: () => postSwapOrderFromQuote,
54
+ suggestSlippageBps: () => suggestSlippageBps,
55
+ swapParamsToLimitOrderParams: () => swapParamsToLimitOrderParams,
56
+ utmContent: () => utmContent
57
+ });
58
+ module.exports = __toCommonJS(src_exports);
59
+
60
+ // src/postCoWProtocolTrade.ts
61
+ var import_sdk_order_book4 = require("@cowprotocol/sdk-order-book");
62
+
63
+ // src/consts.ts
64
+ var import_sdk_order_book = require("@cowprotocol/sdk-order-book");
65
+ var import_sdk_config = require("@cowprotocol/sdk-config");
66
+ var DEFAULT_QUOTE_VALIDITY = 60 * 30;
67
+ var DEFAULT_SLIPPAGE_BPS = 50;
68
+ var ETH_FLOW_DEFAULT_SLIPPAGE_BPS = {
69
+ [import_sdk_config.SupportedChainId.MAINNET]: 200,
70
+ // 2%,
71
+ [import_sdk_config.SupportedChainId.ARBITRUM_ONE]: 50,
72
+ // 0.5%,
73
+ [import_sdk_config.SupportedChainId.BASE]: 50,
74
+ // 0.5%,
75
+ [import_sdk_config.SupportedChainId.GNOSIS_CHAIN]: 50,
76
+ // 0.5%,
77
+ [import_sdk_config.SupportedChainId.SEPOLIA]: 50,
78
+ // 0.5%,
79
+ [import_sdk_config.SupportedChainId.POLYGON]: 50,
80
+ // 0.5%,
81
+ [import_sdk_config.SupportedChainId.AVALANCHE]: 50
82
+ // 0.5%,
83
+ };
84
+ var SIGN_SCHEME_MAP = {
85
+ [import_sdk_order_book.EcdsaSigningScheme.EIP712]: import_sdk_order_book.SigningScheme.EIP712,
86
+ [import_sdk_order_book.EcdsaSigningScheme.ETHSIGN]: import_sdk_order_book.SigningScheme.ETHSIGN
87
+ };
88
+ var GAS_LIMIT_DEFAULT = BigInt(15e4);
89
+
90
+ // src/postCoWProtocolTrade.ts
91
+ var import_sdk_order_signing2 = require("@cowprotocol/sdk-order-signing");
92
+
93
+ // src/getOrderToSign.ts
94
+ var import_sdk_order_book2 = require("@cowprotocol/sdk-order-book");
95
+
96
+ // src/utils/getPartnerFeeBps.ts
97
+ function getPartnerFeeBps(partnerFee) {
98
+ if (!partnerFee) {
99
+ return void 0;
100
+ }
101
+ if ("volumeBps" in partnerFee) {
102
+ return partnerFee.volumeBps;
103
+ }
104
+ if (Array.isArray(partnerFee)) {
105
+ for (const fee of partnerFee) {
106
+ if ("volumeBps" in fee) {
107
+ return fee.volumeBps;
108
+ }
109
+ }
110
+ }
111
+ return void 0;
112
+ }
113
+
114
+ // src/getOrderToSign.ts
115
+ function getOrderToSign({ from, networkCostsAmount = "0" }, limitOrderParams, appDataKeccak256) {
116
+ const {
117
+ sellAmount,
118
+ buyAmount,
119
+ sellToken,
120
+ sellTokenDecimals,
121
+ buyToken,
122
+ buyTokenDecimals,
123
+ kind,
124
+ partiallyFillable = false,
125
+ slippageBps = DEFAULT_SLIPPAGE_BPS,
126
+ partnerFee,
127
+ validFor
128
+ } = limitOrderParams;
129
+ const receiver = limitOrderParams.receiver || from;
130
+ const validTo = limitOrderParams.validTo || Math.floor(Date.now() / 1e3) + (validFor || DEFAULT_QUOTE_VALIDITY);
131
+ const orderParams = {
132
+ sellToken,
133
+ buyToken,
134
+ sellAmount,
135
+ buyAmount,
136
+ receiver,
137
+ validTo,
138
+ kind,
139
+ feeAmount: networkCostsAmount,
140
+ appData: appDataKeccak256,
141
+ partiallyFillable
142
+ };
143
+ const { afterSlippage } = (0, import_sdk_order_book2.getQuoteAmountsAndCosts)({
144
+ orderParams,
145
+ slippagePercentBps: slippageBps,
146
+ partnerFeeBps: getPartnerFeeBps(partnerFee),
147
+ sellDecimals: sellTokenDecimals,
148
+ buyDecimals: buyTokenDecimals
149
+ });
150
+ return {
151
+ sellToken,
152
+ buyToken,
153
+ sellAmount: afterSlippage.sellAmount.toString(),
154
+ buyAmount: afterSlippage.buyAmount.toString(),
155
+ validTo,
156
+ kind,
157
+ partiallyFillable,
158
+ appData: appDataKeccak256,
159
+ receiver,
160
+ feeAmount: "0",
161
+ sellTokenBalance: import_sdk_order_book2.SellTokenSource.ERC20,
162
+ buyTokenBalance: import_sdk_order_book2.BuyTokenDestination.ERC20
163
+ };
164
+ }
165
+
166
+ // src/postSellNativeCurrencyOrder.ts
167
+ var import_sdk_common2 = require("@cowprotocol/sdk-common");
168
+ var import_sdk_order_book3 = require("@cowprotocol/sdk-order-book");
169
+
170
+ // src/calculateUniqueOrderId.ts
171
+ var import_sdk_order_signing = require("@cowprotocol/sdk-order-signing");
172
+ var import_sdk_config2 = require("@cowprotocol/sdk-config");
173
+ async function calculateUniqueOrderId(chainId, order, checkEthFlowOrderExists, env) {
174
+ const { orderDigest, orderId } = await import_sdk_order_signing.OrderSigningUtils.generateOrderId(
175
+ chainId,
176
+ {
177
+ ...order,
178
+ sellTokenBalance: order.sellTokenBalance,
179
+ buyTokenBalance: order.buyTokenBalance,
180
+ validTo: import_sdk_config2.MAX_VALID_TO_EPOCH,
181
+ sellToken: import_sdk_config2.WRAPPED_NATIVE_CURRENCIES[chainId].address
182
+ },
183
+ {
184
+ owner: env === "staging" ? import_sdk_config2.BARN_ETH_FLOW_ADDRESS : import_sdk_config2.ETH_FLOW_ADDRESS
185
+ }
186
+ );
187
+ if (checkEthFlowOrderExists && await checkEthFlowOrderExists(orderId, orderDigest)) {
188
+ console.error("ETH FLOW", "[calculateUniqueOrderId] \u274C Collision detected: " + orderId, {
189
+ sellAmount: order.sellAmount,
190
+ fee: order.feeAmount
191
+ });
192
+ return calculateUniqueOrderId(chainId, adjustAmounts(order), checkEthFlowOrderExists);
193
+ }
194
+ return orderId;
195
+ }
196
+ function adjustAmounts(order) {
197
+ const buyAmount = BigInt(order.buyAmount);
198
+ return { ...order, buyAmount: (buyAmount - BigInt(1)).toString() };
199
+ }
200
+
201
+ // src/getEthFlowTransaction.ts
202
+ var import_sdk_config4 = require("@cowprotocol/sdk-config");
203
+
204
+ // src/utils/misc.ts
205
+ var import_sdk_config3 = require("@cowprotocol/sdk-config");
206
+ function swapParamsToLimitOrderParams(params, quoteResponse) {
207
+ return {
208
+ ...params,
209
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
210
+ quoteId: quoteResponse.id,
211
+ sellAmount: quoteResponse.quote.sellAmount,
212
+ buyAmount: quoteResponse.quote.buyAmount
213
+ };
214
+ }
215
+ function getIsEthFlowOrder(params) {
216
+ return params.sellToken.toLowerCase() === import_sdk_config3.ETH_ADDRESS.toLowerCase();
217
+ }
218
+ function calculateGasMargin(value) {
219
+ return value + value * BigInt(20) / BigInt(100);
220
+ }
221
+ function mapQuoteAmountsAndCosts(value, mapper) {
222
+ const {
223
+ costs: { networkFee, partnerFee }
224
+ } = value;
225
+ function serializeAmounts(value2) {
226
+ return {
227
+ sellAmount: mapper(value2.sellAmount),
228
+ buyAmount: mapper(value2.buyAmount)
229
+ };
230
+ }
231
+ return {
232
+ ...value,
233
+ costs: {
234
+ ...value.costs,
235
+ networkFee: {
236
+ ...networkFee,
237
+ amountInSellCurrency: mapper(networkFee.amountInSellCurrency),
238
+ amountInBuyCurrency: mapper(networkFee.amountInBuyCurrency)
239
+ },
240
+ partnerFee: {
241
+ ...partnerFee,
242
+ amount: mapper(partnerFee.amount)
243
+ }
244
+ },
245
+ beforeNetworkCosts: serializeAmounts(value.beforeNetworkCosts),
246
+ afterNetworkCosts: serializeAmounts(value.afterNetworkCosts),
247
+ afterPartnerFees: serializeAmounts(value.afterPartnerFees),
248
+ afterSlippage: serializeAmounts(value.afterSlippage)
249
+ };
250
+ }
251
+ function getTradeParametersAfterQuote({
252
+ quoteParameters,
253
+ sellToken
254
+ }) {
255
+ return { ...quoteParameters, sellToken };
256
+ }
257
+ function adjustEthFlowOrderParams(chainId, params) {
258
+ return {
259
+ ...params,
260
+ sellToken: import_sdk_config3.WRAPPED_NATIVE_CURRENCIES[chainId].address,
261
+ slippageBps: typeof params.slippageBps === "number" ? params.slippageBps : ETH_FLOW_DEFAULT_SLIPPAGE_BPS[chainId]
262
+ };
263
+ }
264
+
265
+ // src/getEthFlowTransaction.ts
266
+ var import_sdk_common = require("@cowprotocol/sdk-common");
267
+ async function getEthFlowTransaction(appDataKeccak256, _params, chainId, additionalParams = {}, paramSigner) {
268
+ const signer = paramSigner ? (0, import_sdk_common.getGlobalAdapter)().createSigner(paramSigner) : (0, import_sdk_common.getGlobalAdapter)().signer;
269
+ const { networkCostsAmount = "0", checkEthFlowOrderExists } = additionalParams;
270
+ const from = await signer.getAddress();
271
+ const params = {
272
+ ..._params,
273
+ ...adjustEthFlowOrderParams(chainId, _params)
274
+ };
275
+ const { quoteId } = params;
276
+ const contract = getEthFlowContract(signer, params.env);
277
+ const orderToSign = getOrderToSign({ from, networkCostsAmount }, params, appDataKeccak256);
278
+ const orderId = await calculateUniqueOrderId(chainId, orderToSign, checkEthFlowOrderExists, params.env);
279
+ const ethOrderParams = {
280
+ buyToken: orderToSign.buyToken,
281
+ receiver: orderToSign.receiver,
282
+ sellAmount: orderToSign.sellAmount,
283
+ buyAmount: orderToSign.buyAmount,
284
+ feeAmount: orderToSign.feeAmount,
285
+ partiallyFillable: orderToSign.partiallyFillable,
286
+ quoteId,
287
+ appData: appDataKeccak256,
288
+ validTo: orderToSign.validTo.toString()
289
+ };
290
+ const estimatedGas = await contract.estimateGas.createOrder?.(ethOrderParams, { value: orderToSign.sellAmount }).catch((error) => {
291
+ console.error(error);
292
+ return GAS_LIMIT_DEFAULT;
293
+ }) || GAS_LIMIT_DEFAULT;
294
+ const data = contract.interface.encodeFunctionData("createOrder", [ethOrderParams]);
295
+ return {
296
+ orderId,
297
+ orderToSign,
298
+ transaction: {
299
+ data,
300
+ gasLimit: "0x" + calculateGasMargin(estimatedGas).toString(16),
301
+ to: contract.address,
302
+ value: "0x" + BigInt(orderToSign.sellAmount).toString(16)
303
+ }
304
+ };
305
+ }
306
+ function getEthFlowContract(signer, env) {
307
+ const address = env === "staging" ? import_sdk_config4.BARN_ETH_FLOW_ADDRESS : import_sdk_config4.ETH_FLOW_ADDRESS;
308
+ return import_sdk_common.ContractFactory.createEthFlowContract(address, signer);
309
+ }
310
+
311
+ // src/postSellNativeCurrencyOrder.ts
312
+ var import_sdk_common3 = require("@cowprotocol/sdk-common");
313
+ async function postSellNativeCurrencyOrder(orderBookApi, appData, _params, additionalParams = {}, paramSigner) {
314
+ const signer = paramSigner ? (0, import_sdk_common2.getGlobalAdapter)().createSigner(paramSigner) : (0, import_sdk_common2.getGlobalAdapter)().signer;
315
+ const { appDataKeccak256, fullAppData } = appData;
316
+ const { orderId, transaction, orderToSign } = await getEthFlowTransaction(
317
+ appDataKeccak256,
318
+ _params,
319
+ orderBookApi.context.chainId,
320
+ additionalParams,
321
+ signer
322
+ );
323
+ (0, import_sdk_common3.log)("Uploading app-data");
324
+ await orderBookApi.uploadAppData(appDataKeccak256, fullAppData);
325
+ (0, import_sdk_common3.log)("Sending on-chain order transaction");
326
+ const txReceipt = await signer.sendTransaction(transaction);
327
+ (0, import_sdk_common3.log)(`On-chain order transaction sent, txHash: ${txReceipt.hash}, order: ${orderId}`);
328
+ return { txHash: txReceipt.hash, orderId, orderToSign, signature: "", signingScheme: import_sdk_order_book3.SigningScheme.EIP1271 };
329
+ }
330
+
331
+ // src/postCoWProtocolTrade.ts
332
+ var import_sdk_common5 = require("@cowprotocol/sdk-common");
333
+
334
+ // src/appDataUtils.ts
335
+ var import_sdk_app_data = require("@cowprotocol/sdk-app-data");
336
+ var import_sdk_common4 = require("@cowprotocol/sdk-common");
337
+ var import_deepmerge = __toESM(require("deepmerge"));
338
+ async function buildAppData({ slippageBps, appCode, orderClass: orderClassName, partnerFee }, advancedParams) {
339
+ const quoteParams = { slippageBips: slippageBps };
340
+ const orderClass = { orderClass: orderClassName };
341
+ const metadataApiSdk = new import_sdk_app_data.MetadataApi((0, import_sdk_common4.getGlobalAdapter)());
342
+ const doc = await metadataApiSdk.generateAppDataDoc(
343
+ (0, import_deepmerge.default)(
344
+ {
345
+ appCode,
346
+ metadata: {
347
+ quote: quoteParams,
348
+ orderClass,
349
+ partnerFee
350
+ }
351
+ },
352
+ advancedParams || {}
353
+ )
354
+ );
355
+ const { fullAppData, appDataKeccak256 } = await generateAppDataFromDoc(doc);
356
+ return { doc, fullAppData, appDataKeccak256 };
357
+ }
358
+ async function generateAppDataFromDoc(doc) {
359
+ const adapter = (0, import_sdk_common4.getGlobalAdapter)();
360
+ const fullAppData = await (0, import_sdk_app_data.stringifyDeterministic)(doc);
361
+ const appDataKeccak256 = adapter.utils.keccak256(adapter.utils.toUtf8Bytes(fullAppData));
362
+ return { fullAppData, appDataKeccak256 };
363
+ }
364
+ async function mergeAppDataDoc(_doc, appDataOverride) {
365
+ const doc = appDataOverride.metadata?.hooks ? {
366
+ ..._doc,
367
+ metadata: {
368
+ ..._doc.metadata,
369
+ hooks: {}
370
+ }
371
+ } : _doc;
372
+ const appData = appDataOverride ? (0, import_deepmerge.default)(doc, appDataOverride) : doc;
373
+ const { fullAppData, appDataKeccak256 } = await generateAppDataFromDoc(appData);
374
+ return {
375
+ fullAppData,
376
+ appDataKeccak256,
377
+ doc: appData
378
+ };
379
+ }
380
+
381
+ // ../sdk/package.json
382
+ var package_default = {
383
+ name: "@cowprotocol/cow-sdk",
384
+ version: "7.0.0-monorepo.0",
385
+ license: "(MIT OR Apache-2.0)",
386
+ description: "CowProtocol SDK - Complete umbrella package for CoW Protocol interactions",
387
+ main: "./dist/index.js",
388
+ module: "./dist/index.mjs",
389
+ types: "./dist/index.d.ts",
390
+ exports: {
391
+ ".": {
392
+ types: "./dist/index.d.ts",
393
+ import: "./dist/index.mjs",
394
+ require: "./dist/index.js"
395
+ }
396
+ },
397
+ sideEffects: false,
398
+ files: [
399
+ "dist/**"
400
+ ],
401
+ scripts: {
402
+ build: "tsup src/index.ts --format esm,cjs --dts --treeshake",
403
+ postbuild: "cp package.json dist && pnpm copy-md-files",
404
+ "copy-md-files": 'npx cpx "**/*.md" dist',
405
+ lint: "eslint src/**/*.ts",
406
+ typecheck: "tsc --noEmit",
407
+ clean: "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
408
+ },
409
+ devDependencies: {
410
+ "@cow-sdk/typescript-config": "workspace:*",
411
+ "@types/node": "^20.17.31",
412
+ jest: "^29.7.0",
413
+ "ts-node": "^10.8.2",
414
+ tsup: "^7.2.0",
415
+ typescript: "^5.2.2"
416
+ },
417
+ dependencies: {
418
+ "@cowprotocol/sdk-app-data": "workspace:*",
419
+ "@cowprotocol/sdk-bridging": "workspace:*",
420
+ "@cowprotocol/sdk-common": "workspace:*",
421
+ "@cowprotocol/sdk-composable": "workspace:*",
422
+ "@cowprotocol/sdk-config": "workspace:*",
423
+ "@cowprotocol/sdk-contracts-ts": "workspace:*",
424
+ "@cowprotocol/sdk-cow-shed": "workspace:*",
425
+ "@cowprotocol/sdk-order-book": "workspace:*",
426
+ "@cowprotocol/sdk-order-signing": "workspace:*",
427
+ "@cowprotocol/sdk-subgraph": "workspace:*",
428
+ "@cowprotocol/sdk-trading": "workspace:*",
429
+ "@cowprotocol/sdk-weiroll": "workspace:*"
430
+ },
431
+ peerDependencies: {
432
+ "@openzeppelin/merkle-tree": "^1.x",
433
+ "cross-fetch": "^3.x",
434
+ "ipfs-only-hash": "^4.x",
435
+ multiformats: "^9.x"
436
+ },
437
+ peerDependenciesMeta: {
438
+ "cross-fetch": {
439
+ optional: false
440
+ },
441
+ "ipfs-only-hash": {
442
+ optional: true
443
+ },
444
+ multiformats: {
445
+ optional: true
446
+ },
447
+ "@openzeppelin/merkle-tree": {
448
+ optional: true
449
+ }
450
+ },
451
+ keywords: [
452
+ "cow",
453
+ "cow-protocol",
454
+ "sdk",
455
+ "crypto",
456
+ "typescript",
457
+ "subgraph"
458
+ ],
459
+ repository: {
460
+ type: "git",
461
+ url: "https://github.com/cowprotocol/cow-sdk.git",
462
+ directory: "packages/sdk"
463
+ },
464
+ bugs: {
465
+ url: "https://github.com/cowprotocol/cow-sdk/issues"
466
+ },
467
+ homepage: "https://github.com/cowprotocol/cow-sdk#readme"
468
+ };
469
+
470
+ // src/postCoWProtocolTrade.ts
471
+ async function postCoWProtocolTrade(orderBookApi, paramAppData, params, additionalParams = {}, paramSigner) {
472
+ const adapter = (0, import_sdk_common5.getGlobalAdapter)();
473
+ const appData = await createAppDataWithUTM(paramAppData);
474
+ const signer = paramSigner ? adapter.createSigner(paramSigner) : adapter.signer;
475
+ const { networkCostsAmount = "0", signingScheme: _signingScheme = import_sdk_order_book4.SigningScheme.EIP712 } = additionalParams;
476
+ if (getIsEthFlowOrder(params)) {
477
+ const quoteId2 = params.quoteId;
478
+ if (typeof quoteId2 === "number") {
479
+ return postSellNativeCurrencyOrder(orderBookApi, appData, { ...params, quoteId: quoteId2 }, additionalParams, paramSigner);
480
+ } else {
481
+ throw new Error("quoteId is required for EthFlow orders");
482
+ }
483
+ }
484
+ const { quoteId = null, owner } = params;
485
+ const { appDataKeccak256, fullAppData } = appData;
486
+ const chainId = orderBookApi.context.chainId;
487
+ const from = owner || await signer.getAddress();
488
+ const orderToSign = getOrderToSign({ from, networkCostsAmount }, params, appData.appDataKeccak256);
489
+ (0, import_sdk_common5.log)("Signing order...");
490
+ const { signature, signingScheme } = await (async () => {
491
+ if (_signingScheme === import_sdk_order_book4.SigningScheme.PRESIGN) {
492
+ return { signature: from, signingScheme: import_sdk_order_book4.SigningScheme.PRESIGN };
493
+ } else {
494
+ const signingResult = await import_sdk_order_signing2.OrderSigningUtils.signOrder(orderToSign, chainId, signer);
495
+ return { signature: signingResult.signature, signingScheme: SIGN_SCHEME_MAP[signingResult.signingScheme] };
496
+ }
497
+ })();
498
+ const orderBody = {
499
+ ...orderToSign,
500
+ from,
501
+ signature,
502
+ signingScheme,
503
+ quoteId,
504
+ appData: fullAppData,
505
+ appDataHash: appDataKeccak256
506
+ };
507
+ (0, import_sdk_common5.log)("Posting order...");
508
+ const orderId = await orderBookApi.sendOrder(orderBody);
509
+ (0, import_sdk_common5.log)(`Order created, id: ${orderId}`);
510
+ return { orderId, signature, signingScheme, orderToSign };
511
+ }
512
+ async function createAppDataWithUTM(originalAppData) {
513
+ if (disableUtm) {
514
+ return originalAppData;
515
+ }
516
+ let parsedData;
517
+ try {
518
+ parsedData = JSON.parse(originalAppData.fullAppData);
519
+ } catch {
520
+ try {
521
+ const unescapedData = originalAppData.fullAppData.replace(/\\"/g, '"');
522
+ parsedData = JSON.parse(unescapedData);
523
+ } catch (error) {
524
+ throw new import_sdk_common5.CowError(`Failed to parse app data: ${originalAppData.fullAppData}: ${error}`);
525
+ }
526
+ }
527
+ const orderSpecificUtmContent = parsedData.utm?.utmContent;
528
+ const defaultUtmContent = "\u{1F42E} moo-ving to defi \u{1F42E}";
529
+ const utmContent2 = orderSpecificUtmContent || utmContent || defaultUtmContent;
530
+ const defaultUtm = {
531
+ utmCampaign: "developer-cohort",
532
+ utmContent: utmContent2,
533
+ utmMedium: `cow-sdk@${package_default.version}`,
534
+ utmSource: "cowmunity",
535
+ utmTerm: "js"
536
+ };
537
+ parsedData.utm = defaultUtm;
538
+ const { fullAppData, appDataKeccak256 } = await generateAppDataFromDoc(parsedData);
539
+ return {
540
+ ...originalAppData,
541
+ fullAppData,
542
+ appDataKeccak256
543
+ };
544
+ }
545
+
546
+ // src/getQuote.ts
547
+ var import_sdk_common9 = require("@cowprotocol/sdk-common");
548
+ var import_sdk_order_book6 = require("@cowprotocol/sdk-order-book");
549
+
550
+ // src/getOrderTypedData.ts
551
+ var import_sdk_contracts_ts = require("@cowprotocol/sdk-contracts-ts");
552
+
553
+ // src/types.ts
554
+ var ORDER_PRIMARY_TYPE = "Order";
555
+
556
+ // src/getOrderTypedData.ts
557
+ var import_sdk_order_signing3 = require("@cowprotocol/sdk-order-signing");
558
+ var EIP712DomainTypes = [
559
+ { name: "name", type: "string" },
560
+ { name: "version", type: "string" },
561
+ { name: "chainId", type: "uint256" },
562
+ { name: "verifyingContract", type: "address" }
563
+ ];
564
+ async function getOrderTypedData(chainId, orderToSign) {
565
+ const domain = await import_sdk_order_signing3.OrderSigningUtils.getDomain(chainId);
566
+ return {
567
+ domain,
568
+ primaryType: ORDER_PRIMARY_TYPE,
569
+ types: {
570
+ [ORDER_PRIMARY_TYPE]: import_sdk_contracts_ts.ORDER_TYPE_FIELDS,
571
+ EIP712Domain: EIP712DomainTypes
572
+ },
573
+ message: orderToSign
574
+ };
575
+ }
576
+
577
+ // src/suggestSlippageBps.ts
578
+ var import_sdk_common8 = require("@cowprotocol/sdk-common");
579
+ var import_sdk_order_book5 = require("@cowprotocol/sdk-order-book");
580
+
581
+ // src/utils/slippage.ts
582
+ var SCALE = 10n ** 6n;
583
+ function getSlippagePercent(params) {
584
+ const { sellAmountBeforeNetworkCosts, sellAmountAfterNetworkCosts, slippage, isSell } = params;
585
+ const sellAmount = isSell ? sellAmountAfterNetworkCosts : sellAmountBeforeNetworkCosts;
586
+ if (sellAmount <= 0n) {
587
+ throw new Error("sellAmount must be greater than 0: " + sellAmount);
588
+ }
589
+ if (slippage < 0n) {
590
+ throw new Error("slippage must be non-negative: " + slippage);
591
+ }
592
+ if (isSell) {
593
+ const percentageInScale = SCALE - SCALE * (sellAmount - slippage) / sellAmount;
594
+ return Number(percentageInScale) / Number(SCALE);
595
+ } else {
596
+ const percentageInScale = SCALE * (sellAmount + slippage) / sellAmount - SCALE;
597
+ return Number(percentageInScale) / Number(SCALE);
598
+ }
599
+ }
600
+
601
+ // src/suggestSlippageFromFee.ts
602
+ var import_sdk_common6 = require("@cowprotocol/sdk-common");
603
+ function suggestSlippageFromFee(params) {
604
+ const { feeAmount, multiplyingFactorPercent } = params;
605
+ if (feeAmount < 0n) {
606
+ throw new Error("Fee amount must be non-negative: " + feeAmount);
607
+ }
608
+ if (multiplyingFactorPercent < 0) {
609
+ throw new Error("multiplyingFactorPercent must be non-negative: " + multiplyingFactorPercent);
610
+ }
611
+ return (0, import_sdk_common6.applyPercentage)(feeAmount, multiplyingFactorPercent);
612
+ }
613
+
614
+ // src/suggestSlippageFromVolume.ts
615
+ var import_sdk_common7 = require("@cowprotocol/sdk-common");
616
+ function suggestSlippageFromVolume(params) {
617
+ const { sellAmountBeforeNetworkCosts, sellAmountAfterNetworkCosts, isSell, slippagePercent } = params;
618
+ const sellAmount = isSell ? sellAmountAfterNetworkCosts : sellAmountBeforeNetworkCosts;
619
+ if (sellAmount <= 0n) {
620
+ throw new Error("sellAmount must be greater than 0: " + sellAmount);
621
+ }
622
+ if (slippagePercent < 0) {
623
+ throw new Error("slippagePercent must be non-negative: " + slippagePercent);
624
+ }
625
+ return (0, import_sdk_common7.applyPercentage)(sellAmount, slippagePercent);
626
+ }
627
+
628
+ // src/suggestSlippageBps.ts
629
+ var MIN_SLIPPAGE_BPS = 50;
630
+ var MAX_SLIPPAGE_BPS = 1e4;
631
+ var SLIPPAGE_FEE_MULTIPLIER_PERCENT = 50;
632
+ var SLIPPAGE_VOLUME_MULTIPLIER_PERCENT = 0.5;
633
+ function suggestSlippageBps(params) {
634
+ const { quote, tradeParameters } = params;
635
+ const { sellTokenDecimals, buyTokenDecimals } = tradeParameters;
636
+ const { isSell, sellAmountBeforeNetworkCosts, sellAmountAfterNetworkCosts } = (0, import_sdk_order_book5.getQuoteAmountsWithCosts)({
637
+ sellDecimals: sellTokenDecimals,
638
+ buyDecimals: buyTokenDecimals,
639
+ orderParams: quote.quote
640
+ });
641
+ const { feeAmount: feeAmountString } = quote.quote;
642
+ const feeAmount = BigInt(feeAmountString);
643
+ const slippageBpsFromFee = suggestSlippageFromFee({
644
+ feeAmount,
645
+ multiplyingFactorPercent: SLIPPAGE_FEE_MULTIPLIER_PERCENT
646
+ });
647
+ const slippageBpsFromVolume = suggestSlippageFromVolume({
648
+ isSell,
649
+ sellAmountBeforeNetworkCosts,
650
+ sellAmountAfterNetworkCosts,
651
+ slippagePercent: SLIPPAGE_VOLUME_MULTIPLIER_PERCENT
652
+ });
653
+ const totalSlippageBps = slippageBpsFromFee + slippageBpsFromVolume;
654
+ const slippagePercent = getSlippagePercent({
655
+ isSell,
656
+ sellAmountBeforeNetworkCosts,
657
+ sellAmountAfterNetworkCosts,
658
+ slippage: totalSlippageBps
659
+ });
660
+ const slippageBps = (0, import_sdk_common8.percentageToBps)(slippagePercent);
661
+ return Math.max(Math.min(slippageBps, MAX_SLIPPAGE_BPS), MIN_SLIPPAGE_BPS);
662
+ }
663
+
664
+ // src/getQuote.ts
665
+ var ETH_FLOW_AUX_QUOTE_PARAMS = {
666
+ signingScheme: import_sdk_order_book6.SigningScheme.EIP1271,
667
+ onchainOrder: true,
668
+ // Ethflow orders are subsidized in the backend.
669
+ // This means we can assume the verification gas costs are zero for the quote/fee estimation
670
+ verificationGasLimit: 0
671
+ };
672
+ async function getQuoteRaw(_tradeParameters, trader, advancedSettings, _orderBookApi) {
673
+ const { appCode, chainId, account: from } = trader;
674
+ const isEthFlow = getIsEthFlowOrder(_tradeParameters);
675
+ const tradeParameters = isEthFlow ? {
676
+ ..._tradeParameters,
677
+ ...adjustEthFlowOrderParams(chainId, _tradeParameters)
678
+ } : _tradeParameters;
679
+ const {
680
+ sellToken,
681
+ buyToken,
682
+ amount,
683
+ kind,
684
+ partnerFee,
685
+ validFor = DEFAULT_QUOTE_VALIDITY,
686
+ slippageBps,
687
+ env = "prod"
688
+ } = tradeParameters;
689
+ (0, import_sdk_common9.log)(
690
+ `getQuote for: Swap ${amount} ${sellToken} for ${buyToken} on chain ${chainId} with ${slippageBps !== void 0 ? `${slippageBps} BPS` : "AUTO"} slippage`
691
+ );
692
+ const orderBookApi = _orderBookApi || new import_sdk_order_book6.OrderBookApi({ chainId, env });
693
+ const receiver = tradeParameters.receiver || from;
694
+ const isSell = kind === "sell";
695
+ (0, import_sdk_common9.log)("Building app data...");
696
+ const slippageBpsOrDefault = slippageBps ?? DEFAULT_SLIPPAGE_BPS;
697
+ const buildAppDataParams = {
698
+ slippageBps: slippageBpsOrDefault,
699
+ orderClass: "market",
700
+ appCode,
701
+ partnerFee
702
+ };
703
+ const appDataInfo = await buildAppData(buildAppDataParams, advancedSettings?.appData);
704
+ const { appDataKeccak256, fullAppData } = appDataInfo;
705
+ (0, import_sdk_common9.log)(`App data: appDataKeccak256=${appDataKeccak256} fullAppData=${fullAppData}`);
706
+ const quoteRequest = {
707
+ from,
708
+ sellToken,
709
+ buyToken,
710
+ receiver,
711
+ validFor,
712
+ appData: fullAppData,
713
+ appDataHash: appDataKeccak256,
714
+ priceQuality: import_sdk_order_book6.PriceQuality.OPTIMAL,
715
+ // Do not change this parameter because we rely on the fact that quote has id
716
+ signingScheme: import_sdk_order_book6.SigningScheme.EIP712,
717
+ ...isEthFlow ? ETH_FLOW_AUX_QUOTE_PARAMS : {},
718
+ ...isSell ? { kind: import_sdk_order_book6.OrderQuoteSideKindSell.SELL, sellAmountBeforeFee: amount } : { kind: import_sdk_order_book6.OrderQuoteSideKindBuy.BUY, buyAmountAfterFee: amount },
719
+ ...advancedSettings?.quoteRequest
720
+ };
721
+ (0, import_sdk_common9.log)("Getting quote...");
722
+ const quote = await orderBookApi.getQuote(quoteRequest);
723
+ const suggestedSlippageBps = suggestSlippageBps({ quote, tradeParameters, trader, advancedSettings });
724
+ if (slippageBps === void 0) {
725
+ if (suggestedSlippageBps > DEFAULT_SLIPPAGE_BPS) {
726
+ (0, import_sdk_common9.log)(
727
+ `Suggested slippage is greater than ${DEFAULT_SLIPPAGE_BPS} BPS (default), using the suggested slippage (${suggestedSlippageBps} BPS)`
728
+ );
729
+ const newAppDataInfo = await buildAppData(
730
+ {
731
+ ...buildAppDataParams,
732
+ slippageBps: suggestedSlippageBps
733
+ },
734
+ advancedSettings?.appData
735
+ );
736
+ (0, import_sdk_common9.log)(
737
+ `App data with new suggested slippage: appDataKeccak256=${newAppDataInfo.appDataKeccak256} fullAppData=${newAppDataInfo.fullAppData}`
738
+ );
739
+ return {
740
+ slippageBps: suggestedSlippageBps,
741
+ suggestedSlippageBps,
742
+ tradeParameters: { ..._tradeParameters, slippageBps: suggestedSlippageBps },
743
+ appDataInfo: newAppDataInfo,
744
+ // We reuse the quote, because the slippage has no fundamental impact on the quote
745
+ quote,
746
+ orderBookApi
747
+ };
748
+ } else {
749
+ (0, import_sdk_common9.log)(
750
+ `Suggested slippage is only ${suggestedSlippageBps} BPS. Using the default slippage (${DEFAULT_SLIPPAGE_BPS} BPS)`
751
+ );
752
+ }
753
+ }
754
+ return {
755
+ quote,
756
+ appDataInfo,
757
+ orderBookApi,
758
+ tradeParameters,
759
+ slippageBps: slippageBpsOrDefault,
760
+ suggestedSlippageBps
761
+ };
762
+ }
763
+ async function getQuote(_tradeParameters, trader, advancedSettings, _orderBookApi) {
764
+ const { quote, orderBookApi, tradeParameters, slippageBps, suggestedSlippageBps, appDataInfo } = await getQuoteRaw(
765
+ _tradeParameters,
766
+ trader,
767
+ advancedSettings,
768
+ _orderBookApi
769
+ );
770
+ const { partnerFee, sellTokenDecimals, buyTokenDecimals } = tradeParameters;
771
+ const { chainId, account: from } = trader;
772
+ const amountsAndCosts = (0, import_sdk_order_book6.getQuoteAmountsAndCosts)({
773
+ orderParams: quote.quote,
774
+ slippagePercentBps: slippageBps,
775
+ partnerFeeBps: getPartnerFeeBps(partnerFee),
776
+ sellDecimals: sellTokenDecimals,
777
+ buyDecimals: buyTokenDecimals
778
+ });
779
+ const orderToSign = getOrderToSign(
780
+ { from, networkCostsAmount: quote.quote.feeAmount },
781
+ swapParamsToLimitOrderParams(tradeParameters, quote),
782
+ appDataInfo.appDataKeccak256
783
+ );
784
+ const orderTypedData = await getOrderTypedData(chainId, orderToSign);
785
+ return {
786
+ result: {
787
+ tradeParameters,
788
+ suggestedSlippageBps,
789
+ amountsAndCosts,
790
+ orderToSign,
791
+ quoteResponse: quote,
792
+ appDataInfo,
793
+ orderTypedData
794
+ },
795
+ orderBookApi
796
+ };
797
+ }
798
+ async function getTrader(swapParameters) {
799
+ const signer = (0, import_sdk_common9.getGlobalAdapter)().signerOrNull();
800
+ const account = swapParameters.owner || await signer?.getAddress();
801
+ return {
802
+ chainId: swapParameters.chainId,
803
+ appCode: swapParameters.appCode,
804
+ account
805
+ };
806
+ }
807
+ async function getQuoteWithSigner(swapParameters, advancedSettings, orderBookApi) {
808
+ const adapter = (0, import_sdk_common9.getGlobalAdapter)();
809
+ const signer = swapParameters.signer ? adapter.createSigner(swapParameters.signer) : adapter.signer;
810
+ const trader = await getTrader(swapParameters);
811
+ const result = await getQuote(swapParameters, trader, advancedSettings, orderBookApi);
812
+ return {
813
+ result: {
814
+ ...result.result,
815
+ signer
816
+ },
817
+ orderBookApi: result.orderBookApi
818
+ };
819
+ }
820
+
821
+ // src/postSwapOrder.ts
822
+ async function postSwapOrder(params, advancedSettings, orderBookApi) {
823
+ return postSwapOrderFromQuote(await getQuoteWithSigner(params, advancedSettings, orderBookApi), advancedSettings);
824
+ }
825
+ async function postSwapOrderFromQuote({
826
+ orderBookApi,
827
+ result: { signer, appDataInfo: _appDataInfo, quoteResponse, tradeParameters }
828
+ }, advancedSettings) {
829
+ const params = swapParamsToLimitOrderParams(tradeParameters, quoteResponse);
830
+ const appDataOverride = advancedSettings?.appData;
831
+ const appDataInfo = appDataOverride ? await mergeAppDataDoc(_appDataInfo.doc, appDataOverride) : _appDataInfo;
832
+ const appDataSlippageOverride = appDataOverride?.metadata?.quote?.slippageBips;
833
+ const partnerFeeOverride = appDataOverride?.metadata?.partnerFee;
834
+ if (typeof appDataSlippageOverride !== "undefined") {
835
+ params.slippageBps = appDataSlippageOverride;
836
+ }
837
+ if (partnerFeeOverride) {
838
+ params.partnerFee = partnerFeeOverride;
839
+ }
840
+ if (advancedSettings?.quoteRequest) {
841
+ const { receiver, validTo, sellToken, buyToken } = advancedSettings.quoteRequest;
842
+ if (receiver)
843
+ params.receiver = receiver;
844
+ if (validTo)
845
+ params.validTo = validTo;
846
+ if (sellToken)
847
+ params.sellToken = sellToken;
848
+ if (buyToken)
849
+ params.buyToken = buyToken;
850
+ }
851
+ return postCoWProtocolTrade(
852
+ orderBookApi,
853
+ appDataInfo,
854
+ params,
855
+ {
856
+ signingScheme: advancedSettings?.quoteRequest?.signingScheme,
857
+ networkCostsAmount: quoteResponse.quote.feeAmount,
858
+ ...advancedSettings?.additionalParams
859
+ },
860
+ signer
861
+ );
862
+ }
863
+
864
+ // src/postLimitOrder.ts
865
+ var import_sdk_order_book7 = require("@cowprotocol/sdk-order-book");
866
+ var import_sdk_common10 = require("@cowprotocol/sdk-common");
867
+ async function postLimitOrder(params, advancedSettings, _orderBookApi) {
868
+ const appDataSlippage = advancedSettings?.appData?.metadata?.quote?.slippageBips;
869
+ const partnerFeeOverride = advancedSettings?.appData?.metadata?.partnerFee;
870
+ if (typeof appDataSlippage !== "undefined") {
871
+ params.slippageBps = appDataSlippage;
872
+ }
873
+ if (partnerFeeOverride) {
874
+ params.partnerFee = partnerFeeOverride;
875
+ }
876
+ if (!params.slippageBps) {
877
+ params.slippageBps = 0;
878
+ }
879
+ if (!params.env) {
880
+ params.env = "prod";
881
+ }
882
+ const { appCode, chainId, sellToken, buyToken, sellAmount, buyAmount, partnerFee } = params;
883
+ (0, import_sdk_common10.log)(`Limit order ${sellAmount} ${sellToken} for ${buyAmount} ${buyToken} on chain ${chainId}`);
884
+ const orderBookApi = _orderBookApi || new import_sdk_order_book7.OrderBookApi({ chainId, env: params.env });
885
+ (0, import_sdk_common10.log)("Building app data...");
886
+ const appDataInfo = await buildAppData(
887
+ {
888
+ slippageBps: params.slippageBps,
889
+ orderClass: "limit",
890
+ appCode,
891
+ partnerFee
892
+ },
893
+ advancedSettings?.appData
894
+ );
895
+ return postCoWProtocolTrade(orderBookApi, appDataInfo, params, advancedSettings?.additionalParams, params.signer);
896
+ }
897
+
898
+ // src/getPreSignTransaction.ts
899
+ var import_sdk_config5 = require("@cowprotocol/sdk-config");
900
+ var import_sdk_common11 = require("@cowprotocol/sdk-common");
901
+ async function getPreSignTransaction(signer, chainId, account, orderId) {
902
+ const contract = import_sdk_common11.ContractFactory.createSettlementContract(account, signer);
903
+ const settlementContractAddress = import_sdk_config5.COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS[chainId];
904
+ const preSignatureCall = contract.interface.encodeFunctionData("setPreSignature", [orderId, true]);
905
+ const gas = await contract.estimateGas.setPreSignature?.(orderId, true).catch(() => GAS_LIMIT_DEFAULT) || GAS_LIMIT_DEFAULT;
906
+ return {
907
+ data: preSignatureCall,
908
+ gasLimit: "0x" + calculateGasMargin(gas).toString(16),
909
+ to: settlementContractAddress,
910
+ // Para onde enviar a transação
911
+ value: "0"
912
+ };
913
+ }
914
+
915
+ // src/tradingSdk.ts
916
+ var import_sdk_common12 = require("@cowprotocol/sdk-common");
917
+ var import_sdk_common13 = require("@cowprotocol/sdk-common");
918
+ var utmContent = void 0;
919
+ var disableUtm = false;
920
+ var TradingSdk = class {
921
+ constructor(traderParams = {}, options = {}, adapter) {
922
+ this.traderParams = traderParams;
923
+ this.options = options;
924
+ if (options.enableLogging !== void 0) {
925
+ (0, import_sdk_common12.enableLogging)(options.enableLogging);
926
+ }
927
+ if (adapter) {
928
+ (0, import_sdk_common13.setGlobalAdapter)(adapter);
929
+ }
930
+ utmContent = options.utmContent;
931
+ disableUtm = options.disableUtm || false;
932
+ }
933
+ setTraderParams(params) {
934
+ this.traderParams = { ...this.traderParams, ...params };
935
+ return this;
936
+ }
937
+ async getQuote(params, advancedSettings) {
938
+ const quoteResults = await getQuoteWithSigner(this.mergeParams(params), advancedSettings, this.options.orderBookApi);
939
+ return {
940
+ quoteResults: quoteResults.result,
941
+ postSwapOrderFromQuote: (advancedSettings2) => postSwapOrderFromQuote(
942
+ {
943
+ ...quoteResults,
944
+ result: {
945
+ ...quoteResults.result,
946
+ tradeParameters: getTradeParametersAfterQuote({
947
+ quoteParameters: quoteResults.result.tradeParameters,
948
+ sellToken: params.sellToken
949
+ })
950
+ }
951
+ },
952
+ advancedSettings2
953
+ )
954
+ };
955
+ }
956
+ async getQuoteResults(params, advancedSettings) {
957
+ return getQuoteWithSigner(this.mergeParams(params), advancedSettings, this.options.orderBookApi);
958
+ }
959
+ async postSwapOrder(params, advancedSettings) {
960
+ return postSwapOrder(this.mergeParams(params), advancedSettings, this.options.orderBookApi);
961
+ }
962
+ async postLimitOrder(params, advancedSettings) {
963
+ return postLimitOrder(this.mergeParams(params), advancedSettings, this.options.orderBookApi);
964
+ }
965
+ /**
966
+ * Posts a sell order for native currency (e.g., ETH) using the EthFlow contract.
967
+ * This method creates an on-chain transaction for selling native tokens.
968
+ *
969
+ * @param params - The trade parameters including token addresses and amounts
970
+ * @param advancedSettings - Optional advanced settings for the swap
971
+ * @returns Promise resolving to the order posting result with transaction hash and order ID
972
+ *
973
+ * @example
974
+ * ```typescript
975
+ * const parameters: TradeParameters = {
976
+ * kind: OrderKind.SELL,
977
+ * sellToken: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', // Native ETH
978
+ * sellTokenDecimals: 18,
979
+ * buyToken: '0x0625afb445c3b6b7b929342a04a22599fd5dbb59',
980
+ * buyTokenDecimals: 18,
981
+ * amount: '100000000000000000', // 0.1 ETH
982
+ * }
983
+ *
984
+ * const { orderId, txHash } = await sdk.postSellNativeCurrencyOrder(parameters)
985
+ * ```
986
+ */
987
+ async postSellNativeCurrencyOrder(params, advancedSettings) {
988
+ const quoteResults = await getQuoteWithSigner(this.mergeParams(params), advancedSettings, this.options.orderBookApi);
989
+ const { tradeParameters, quoteResponse } = quoteResults.result;
990
+ return postSellNativeCurrencyOrder(
991
+ quoteResults.orderBookApi,
992
+ quoteResults.result.appDataInfo,
993
+ // Quote response always has an id
994
+ swapParamsToLimitOrderParams(
995
+ getTradeParametersAfterQuote({ quoteParameters: tradeParameters, sellToken: params.sellToken }),
996
+ quoteResponse
997
+ ),
998
+ advancedSettings?.additionalParams,
999
+ quoteResults.result.signer
1000
+ );
1001
+ }
1002
+ async getPreSignTransaction(params) {
1003
+ const adapter = (0, import_sdk_common12.getGlobalAdapter)();
1004
+ const traderParams = this.mergeParams(params);
1005
+ const signer = traderParams.signer ? adapter.createSigner(traderParams.signer) : adapter.signer;
1006
+ return getPreSignTransaction(signer, traderParams.chainId, params.account, params.orderId);
1007
+ }
1008
+ mergeParams(params) {
1009
+ const { chainId, signer, appCode, env } = params;
1010
+ const traderParams = {
1011
+ chainId: chainId || this.traderParams.chainId,
1012
+ signer: signer || this.traderParams.signer,
1013
+ appCode: appCode || this.traderParams.appCode,
1014
+ env: env || this.traderParams.env
1015
+ };
1016
+ assertTraderParams(traderParams);
1017
+ return {
1018
+ ...params,
1019
+ ...traderParams
1020
+ };
1021
+ }
1022
+ };
1023
+ function assertTraderParams(params) {
1024
+ if (!isTraderParameters(params)) {
1025
+ throw new Error("Missing trader parameters: " + getMissingTraderParams(params).join(", "));
1026
+ }
1027
+ }
1028
+ function getMissingTraderParams(params) {
1029
+ const missingParams = [];
1030
+ if (!params.chainId)
1031
+ missingParams.push("chainId");
1032
+ if (!params.signer)
1033
+ missingParams.push("signer");
1034
+ if (!params.appCode)
1035
+ missingParams.push("appCode");
1036
+ return missingParams;
1037
+ }
1038
+ function isTraderParameters(params) {
1039
+ return getMissingTraderParams(params).length === 0;
1040
+ }
1041
+ // Annotate the CommonJS export names for ESM import in node:
1042
+ 0 && (module.exports = {
1043
+ ORDER_PRIMARY_TYPE,
1044
+ TradingSdk,
1045
+ buildAppData,
1046
+ calculateUniqueOrderId,
1047
+ disableUtm,
1048
+ generateAppDataFromDoc,
1049
+ getEthFlowContract,
1050
+ getEthFlowTransaction,
1051
+ getOrderToSign,
1052
+ getPartnerFeeBps,
1053
+ getPreSignTransaction,
1054
+ getQuote,
1055
+ getQuoteWithSigner,
1056
+ getTradeParametersAfterQuote,
1057
+ mapQuoteAmountsAndCosts,
1058
+ mergeAppDataDoc,
1059
+ postCoWProtocolTrade,
1060
+ postLimitOrder,
1061
+ postSellNativeCurrencyOrder,
1062
+ postSwapOrder,
1063
+ postSwapOrderFromQuote,
1064
+ suggestSlippageBps,
1065
+ swapParamsToLimitOrderParams,
1066
+ utmContent
1067
+ });