diff --git a/apps/api/src/app/routes/proxies/socket/index.ts b/apps/api/src/app/routes/proxies/socket/index.ts index 77a83605..86f09f7b 100644 --- a/apps/api/src/app/routes/proxies/socket/index.ts +++ b/apps/api/src/app/routes/proxies/socket/index.ts @@ -51,7 +51,7 @@ const proxy: FastifyPluginAsync = async (fastify, opts): Promise => { replyOptions: { rewriteRequestHeaders: (request, headers) => ({ 'x-api-key': apiKey, - origin: 'https://swap.cow.fi', + origin: 'https://swap.cow.finance', Affiliate: affiliateCode, }), }, diff --git a/apps/notification-producer/src/sendPush.test.ts b/apps/notification-producer/src/sendPush.test.ts index 5b21bc78..32acdbde 100644 --- a/apps/notification-producer/src/sendPush.test.ts +++ b/apps/notification-producer/src/sendPush.test.ts @@ -24,7 +24,7 @@ This \`message\` has been generated by [sendPush.test.ts](https://github.com/cow title: 'My little test', message: markdown, account: POST_TO_QUEUE_ACCOUNT, - url: 'https://swap.cow.fi/#/1/limit/WETH/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48?tab=all&page=1', + url: 'https://swap.cow.finance/#/1/limit/WETH/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48?tab=all&page=1', }; await pushNotificationsRepository.send([message]); diff --git a/apps/twap/src/app/utils/getApiBaseUrl.ts b/apps/twap/src/app/utils/getApiBaseUrl.ts index b517075c..b400e94d 100644 --- a/apps/twap/src/app/utils/getApiBaseUrl.ts +++ b/apps/twap/src/app/utils/getApiBaseUrl.ts @@ -1,7 +1,7 @@ import { SupportedChainId } from '@cowprotocol/cow-sdk'; import { COW_API_NETWORK_NAMES } from '@cowprotocol/shared'; -const COW_API_BASE_URL = 'https://api.cow.fi'; +const COW_API_BASE_URL = 'https://api.cow.finance'; export function getApiBaseUrl(chainId: SupportedChainId): string { const chainName = COW_API_NETWORK_NAMES[chainId]; diff --git a/libs/repositories/src/datasources/coingecko.test.ts b/libs/repositories/src/datasources/coingecko.test.ts index 28c7b639..777d189b 100644 --- a/libs/repositories/src/datasources/coingecko.test.ts +++ b/libs/repositories/src/datasources/coingecko.test.ts @@ -1,12 +1,16 @@ import { getCoingeckoProClient } from './coingecko'; describe('getCoingeckoProClient', () => { + const originalApiKey = process.env.COINGECKO_API_KEY; + beforeEach(() => { jest.resetModules(); - - // Clear the singleton instance by re-requiring the module jest.clearAllMocks(); + process.env.COINGECKO_API_KEY = originalApiKey; + }); + afterAll(() => { + process.env.COINGECKO_API_KEY = originalApiKey; }); it('should create and return a client when COINGECKO_API_KEY is set', () => { @@ -27,6 +31,8 @@ describe('getCoingeckoProClient', () => { }); it('should throw an error when COINGECKO_API_KEY is not set', () => { + delete process.env.COINGECKO_API_KEY; + expect(() => { getCoingeckoProClient(); }).toThrow('COINGECKO_API_KEY is not set'); @@ -37,4 +43,4 @@ describe('getCoingeckoProClient', () => { getCoingeckoProClient(''); }).toThrow('COINGECKO_API_KEY is not set'); }); -}); \ No newline at end of file +}); diff --git a/libs/repositories/src/datasources/cowApi.ts b/libs/repositories/src/datasources/cowApi.ts index 8b6963bb..b9dab04a 100644 --- a/libs/repositories/src/datasources/cowApi.ts +++ b/libs/repositories/src/datasources/cowApi.ts @@ -1,6 +1,7 @@ import createClient from 'openapi-fetch'; -const COW_API_BASE_URL = process.env.COW_API_BASE_URL || 'https://api.cow.fi'; +const COW_API_BASE_URL = + process.env.COW_API_BASE_URL || 'https://api.cow.finance'; import { AllChainIds, COW_API_NETWORK_NAMES } from '@cowprotocol/shared'; import { SupportedChainId } from '@cowprotocol/cow-sdk'; diff --git a/libs/repositories/src/gen/cow/cow-api-types.ts b/libs/repositories/src/gen/cow/cow-api-types.ts index 1929543b..dc43dbf0 100644 --- a/libs/repositories/src/gen/cow/cow-api-types.ts +++ b/libs/repositories/src/gen/cow/cow-api-types.ts @@ -481,6 +481,27 @@ export interface paths { patch?: never; trace?: never; }; + "/api/v1/debug/simulation": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Simulate an arbitrary order. + * @description Simulates an arbitrary order specified in the request body and returns the Tenderly simulation request, along with any simulation error if applicable. + * + */ + post: operations["debugSimulationPost"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/api/v1/debug/simulation/{uid}": { parameters: { query?: never; @@ -1472,6 +1493,40 @@ export interface components { /** @description EIP-2930 access list for the transaction. */ access_list?: components["schemas"]["AccessListItem"][]; }; + /** @description Request body for simulating an arbitrary order without it being stored in the orderbook. + * */ + SimulationRequest: { + /** @description The token being sold. */ + sellToken: components["schemas"]["Address"]; + /** @description The token being bought. */ + buyToken: components["schemas"]["Address"]; + /** @description Amount of sell token (hex- or decimal-encoded uint256). Must be greater than zero. + * */ + sellAmount: components["schemas"]["TokenAmount"]; + /** @description Amount of buy token (hex- or decimal-encoded uint256). */ + buyAmount: components["schemas"]["TokenAmount"]; + /** @description Whether this is a sell or buy order. */ + kind: components["schemas"]["OrderKind"]; + /** @description The address of the order owner. */ + owner: components["schemas"]["Address"]; + /** @description The address that will receive the buy tokens. Defaults to the owner if omitted. + * */ + receiver?: components["schemas"]["Address"] | null; + /** + * @description Where the sell token should be drawn from. + * @default erc20 + */ + sellTokenBalance: components["schemas"]["SellTokenSource"]; + /** + * @description Where the buy token should be transferred to. + * @default erc20 + */ + buyTokenBalance: components["schemas"]["BuyTokenDestination"]; + /** @description Full app data JSON string. Defaults to `"{}"` if omitted. + * */ + appData?: string | null; + blockNumber?: number; + }; /** @description The Tenderly simulation request for an order, along with any simulation error. * */ OrderSimulation: { @@ -2437,10 +2492,68 @@ export interface operations { }; }; }; - debugSimulation: { + debugSimulationPost: { parameters: { query?: never; header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SimulationRequest"]; + }; + }; + responses: { + /** @description Simulation request returned. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OrderSimulation"]; + }; + }; + /** @description Invalid JSON body, or `appData` is not valid JSON. + * */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Order simulation endpoint is not enabled. */ + 405: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Request body failed schema validation: missing required field, wrong field type, zero `sellAmount`, or unrecognised `kind` value. + * */ + 422: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal error. */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + debugSimulation: { + parameters: { + query?: { + /** @description Block number to simulate the order at. If not specified, the simulation uses the latest block. + * */ + block_number?: number; + }; + header?: never; path: { uid: components["schemas"]["UID"]; }; @@ -2457,7 +2570,8 @@ export interface operations { "application/json": components["schemas"]["OrderSimulation"]; }; }; - /** @description Invalid order UID. */ + /** @description Malformed path parameter (invalid order UID format) or invalid `block_number` query parameter. + * */ 400: { headers: { [name: string]: unknown; diff --git a/libs/repositories/src/repos/UsdRepository/UsdRepositoryCow.spec.ts b/libs/repositories/src/repos/UsdRepository/UsdRepositoryCow.spec.ts index c5a7ce50..e25e7a58 100644 --- a/libs/repositories/src/repos/UsdRepository/UsdRepositoryCow.spec.ts +++ b/libs/repositories/src/repos/UsdRepository/UsdRepositoryCow.spec.ts @@ -20,8 +20,8 @@ const mockApi: CowApiClient = { } as unknown as jest.Mocked; const NATIVE_PRICE_ENDPOINT = '/api/v1/token/{token}/native_price'; -const WETH_NATIVE_PRICE = 1; // See https://api.cow.fi/mainnet/api/v1/token/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/native_price -const USDC_PRICE = 288778763.042292; // USD price: 3,462.8585200136 (calculated 1e12 / 288778763.042292). See https://api.cow.fi/mainnet/api/v1/token/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/native_price +const WETH_NATIVE_PRICE = 1; // See https://api.cow.finance/mainnet/api/v1/token/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/native_price +const USDC_PRICE = 288778763.042292; // USD price: 3,462.8585200136 (calculated 1e12 / 288778763.042292). See https://api.cow.finance/mainnet/api/v1/token/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/native_price const CHAIN_ID = SupportedChainId.MAINNET.toString(); const mockErc20Repository = { @@ -133,7 +133,7 @@ describe('UsdRepositoryCow', () => { // Get USD price for a not supported token const price = await usdRepositoryCow.getUsdPrice( CHAIN_ID, - NULL_ADDRESS // See https://api.cow.fi/mainnet/api/v1/token/0x0000000000000000000000000000000000000000/native_price + NULL_ADDRESS // See https://api.cow.finance/mainnet/api/v1/token/0x0000000000000000000000000000000000000000/native_price ); // USD calculation based on native price is correct @@ -176,7 +176,7 @@ describe('UsdRepositoryCow', () => { // Get USD price for something is not even an address const price = await usdRepositoryCow.getUsdPrice( CHAIN_ID, - 'this-is-not-a-token' // See https://api.cow.fi/mainnet/api/v1/token/this-is-not-a-token/native_price + 'this-is-not-a-token' // See https://api.cow.finance/mainnet/api/v1/token/this-is-not-a-token/native_price ); // USD calculation based on native price is correct diff --git a/libs/repositories/src/repos/UsdRepository/UsdRepositoryCow.ts b/libs/repositories/src/repos/UsdRepository/UsdRepositoryCow.ts index 6b289de1..fc8f12fc 100644 --- a/libs/repositories/src/repos/UsdRepository/UsdRepositoryCow.ts +++ b/libs/repositories/src/repos/UsdRepository/UsdRepositoryCow.ts @@ -105,12 +105,12 @@ export class UsdRepositoryCow extends UsdRepositoryNoop { }, }); - // If tokens is not found, return null. See See https://api.cow.fi/mainnet/api/v1/token/this-is-not-a-token/native_price + // If tokens is not found, return null. See See https://api.cow.finance/mainnet/api/v1/token/this-is-not-a-token/native_price if (response.status === 404) { return null; } - // Unsupported tokens return undefined. See https://api.cow.fi/mainnet/api/v1/token/0x0000000000000000000000000000000000000000/native_price + // Unsupported tokens return undefined. See https://api.cow.finance/mainnet/api/v1/token/0x0000000000000000000000000000000000000000/native_price if (response.status === 400) { const errorType = (error as any)?.errorType; const description = (error as any)?.description; diff --git a/libs/shared/src/utils/format.ts b/libs/shared/src/utils/format.ts index a18eda66..052fb759 100644 --- a/libs/shared/src/utils/format.ts +++ b/libs/shared/src/utils/format.ts @@ -13,7 +13,7 @@ export function getExplorerBaseUrl(chainId: SupportedChainId) { chainId === SupportedChainId.MAINNET ? '' : `/${EXPLORER_NETWORK_NAMES[chainId]}`; - return `https://explorer.cow.fi${suffix}`; + return `https://explorer.cow.finance${suffix}`; } export function formatAmount(amount: bigint, decimals: number | undefined) { diff --git a/package.json b/package.json index 38e19ba4..011c6f9b 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "private": true, "dependencies": { "@cowprotocol/cms": "^0.3.0-RC.4", - "@cowprotocol/cow-sdk": "^8.0.0", + "@cowprotocol/cow-sdk": "8.1.0", "@fastify/autoload": "~5.7.1", "@fastify/caching": "^8.3.0", "@fastify/cors": "^8.2.1", @@ -112,4 +112,4 @@ "vite-plugin-dts": "^3.0.3", "vite-tsconfig-paths": "^4.2.0" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index a5e3d722..3b74267d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1101,86 +1101,86 @@ dependencies: openapi-fetch "^0.9.3" -"@cowprotocol/cow-sdk@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@cowprotocol/cow-sdk/-/cow-sdk-8.0.0.tgz#873527b9935a32513361fdd0d4d0cfee15ded255" - integrity sha512-vhwEedCx8mZwi1FJCO5gCM1XkoJ5OHM0sclQNZ45UnRrYic55qpAhjpDyN7jui/oxDGX5s4YtXKU+CInFKwbrw== - dependencies: - "@cowprotocol/sdk-app-data" "4.6.8" - "@cowprotocol/sdk-common" "0.7.1" - "@cowprotocol/sdk-config" "1.0.0" - "@cowprotocol/sdk-contracts-ts" "2.0.0" - "@cowprotocol/sdk-order-book" "2.0.0" - "@cowprotocol/sdk-order-signing" "0.1.38" - "@cowprotocol/sdk-trading" "1.0.4" - -"@cowprotocol/sdk-app-data@4.6.8": - version "4.6.8" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-app-data/-/sdk-app-data-4.6.8.tgz#b940da5d7573a9e3ef0c54642529f634911e15ad" - integrity sha512-JlHprXVhiqxU6ESBxzLsoVxjfeQi6E0jg27g6nX0t/RlrGQjgxzIe0kV+aaI932Aih5fZoIUhg6VebTab14WlQ== - dependencies: - "@cowprotocol/sdk-common" "0.7.1" +"@cowprotocol/cow-sdk@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@cowprotocol/cow-sdk/-/cow-sdk-8.1.0.tgz#4274f8cb2ddccfae8f313115a27d327fb9be8e4e" + integrity sha512-hoA9ZNPnjoFu0FbNexafFbu+M1yiGryVB1h3l2ay1qh4NCsEMZiySearfegK95M8kSvICoBkL4xO8ILMRdj2rw== + dependencies: + "@cowprotocol/sdk-app-data" "4.7.0" + "@cowprotocol/sdk-common" "0.10.1" + "@cowprotocol/sdk-config" "1.2.0" + "@cowprotocol/sdk-contracts-ts" "2.5.0" + "@cowprotocol/sdk-order-book" "2.1.0" + "@cowprotocol/sdk-order-signing" "0.3.0" + "@cowprotocol/sdk-trading" "1.3.0" + +"@cowprotocol/sdk-app-data@4.7.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-app-data/-/sdk-app-data-4.7.0.tgz#9a0f3375aebe0a347faded431ec851293f8510bd" + integrity sha512-HgVsZ9mTnGIOLm9RMkPyDCRedP5/uGih5UtvJYM0DKXRz7yHKlWx2HUTslbEQc6ReDA6uxbLsmhVQ6tBcsOS1Q== + dependencies: + "@cowprotocol/sdk-common" "0.10.1" ajv "^8.11.0" cross-fetch "^3.1.5" ipfs-only-hash "^4.0.0" json-stringify-deterministic "^1.0.8" multiformats "^9.6.4" -"@cowprotocol/sdk-common@0.7.1": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-common/-/sdk-common-0.7.1.tgz#2f98a60851aa0a0ead6068a8d1673418120aaade" - integrity sha512-YnCrvNGuaE+OI6RwXQ5ZOX2ci2CZT3rLFVgSnUggAS9TmklCfK01EqAAxdzheu/vICv+1DGBuGrzcR0o/+OkJQ== +"@cowprotocol/sdk-common@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-common/-/sdk-common-0.10.1.tgz#78004d1a0e43efbccf3450775692bd5af6da839a" + integrity sha512-2EYpgXDwD0F5KR9W+jT2Vr/vzaJ8meAvEPm4fGjJUVr2otrUkhUG7ayx68L1AgKZWYzDtNrlM/+1EeyEjjEaWg== dependencies: - "@cowprotocol/sdk-config" "1.0.0" + "@cowprotocol/sdk-config" "1.2.0" -"@cowprotocol/sdk-config@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-config/-/sdk-config-1.0.0.tgz#ebb6713f7fbbcab9bdd5be42acb130b17a903644" - integrity sha512-iS/9CA8hNA/BAtzXHMRnsmuigc0i2v4FlPiCMKHyYtLhRLFI7Yo/cogZKYL/9Mbt4GamdQeZ+nH92xl3KYyAtg== +"@cowprotocol/sdk-config@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-config/-/sdk-config-1.2.0.tgz#7259772f8053f23ebd770e522279146fb66c5764" + integrity sha512-upZ2OPycc+rikwAnfNt58qBMlYb+7zpFPzG6zT/sfE50FS1f2ba4SMtw37HVq+v0e9R32o/rWZFcDZT5Ty5yyQ== dependencies: exponential-backoff "^3.1.1" limiter "^2.1.0" -"@cowprotocol/sdk-contracts-ts@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-contracts-ts/-/sdk-contracts-ts-2.0.0.tgz#615b881abd00e40d1a1f3dcc05f21998aa8b238b" - integrity sha512-4mH5aEsouRAD9nQr03FcwayqVL89nDDchubm/bXcsz5ucOwPqfS+1aEgT1NrPBAW88KUy6GTrhTHxPbFJylu9A== +"@cowprotocol/sdk-contracts-ts@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-contracts-ts/-/sdk-contracts-ts-2.5.0.tgz#125dfb8591a76d02aeca27da6f78bb8d038a746f" + integrity sha512-UZSmqUO+XPwxQ/w75nwkLBK/sjUHdYgWBPhA4EV5x8y5XdBm5Dk8UqrLUemgAAVKwuXaWcoqhkoJWKrV2/gqGQ== dependencies: - "@cowprotocol/sdk-common" "0.7.1" - "@cowprotocol/sdk-config" "1.0.0" + "@cowprotocol/sdk-common" "0.10.1" + "@cowprotocol/sdk-config" "1.2.0" -"@cowprotocol/sdk-order-book@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-book/-/sdk-order-book-2.0.0.tgz#3dc83b1ba8606eb3e5cf45ad8fac45971fdbc96c" - integrity sha512-4mDIYQc7ro2dm7co9gMfsab1zPpElhmKuqWr6BcCQ4huJI69pzPYj7PNpToIKL7ZNemV7UeAjuu4ftZKFx7ttw== +"@cowprotocol/sdk-order-book@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-book/-/sdk-order-book-2.1.0.tgz#0af7f0888b350fe28d7de35eb502813f0a4c6912" + integrity sha512-mbWNDV2hRnd9wXT7n5/HOw8RufprusLVOW+Du/u/3syLApDaPUjtUvqTzEg3n3qxeqccAz99OeCW2i8BojUL9A== dependencies: - "@cowprotocol/sdk-common" "0.7.1" - "@cowprotocol/sdk-config" "1.0.0" + "@cowprotocol/sdk-common" "0.10.1" + "@cowprotocol/sdk-config" "1.2.0" cross-fetch "^3.2.0" exponential-backoff "^3.1.2" limiter "^3.0.0" -"@cowprotocol/sdk-order-signing@0.1.38": - version "0.1.38" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-signing/-/sdk-order-signing-0.1.38.tgz#a2009dc450d3ed7a0716406f638c1c3b4851afde" - integrity sha512-Kts658oFbe516w1/LNux6hpbavjgjWx0zs6ZZJHKao/FcPKMjueorOFPfSFkfMEpeRsoUazOmaGzIJpWdjz+AA== +"@cowprotocol/sdk-order-signing@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-order-signing/-/sdk-order-signing-0.3.0.tgz#e0b0a68051e227b18ac92a5417e650c61df793d3" + integrity sha512-7+SVwsxW7tMipXhu+Se1pzvKm9XfSvHMNZbF28t0VCKigA39bUY9n5LZ6KLF9GTejswK6Rn/BKo6f7sl0RjKFw== dependencies: - "@cowprotocol/sdk-common" "0.7.1" - "@cowprotocol/sdk-config" "1.0.0" - "@cowprotocol/sdk-contracts-ts" "2.0.0" - "@cowprotocol/sdk-order-book" "2.0.0" + "@cowprotocol/sdk-common" "0.10.1" + "@cowprotocol/sdk-config" "1.2.0" + "@cowprotocol/sdk-contracts-ts" "2.5.0" + "@cowprotocol/sdk-order-book" "2.1.0" -"@cowprotocol/sdk-trading@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-trading/-/sdk-trading-1.0.4.tgz#04cc8493b3159b49ea025d768064fc9c3b8b4ced" - integrity sha512-DhS06tDpFHSoq1MlkcXmW9cdMK9pkfuxyLbvCFwjoqx2uUxX1l6MGIWwWR/sQkiWK4bDJCxEBHX80L3G4MkLqA== - dependencies: - "@cowprotocol/sdk-app-data" "4.6.8" - "@cowprotocol/sdk-common" "0.7.1" - "@cowprotocol/sdk-config" "1.0.0" - "@cowprotocol/sdk-contracts-ts" "2.0.0" - "@cowprotocol/sdk-order-book" "2.0.0" - "@cowprotocol/sdk-order-signing" "0.1.38" +"@cowprotocol/sdk-trading@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@cowprotocol/sdk-trading/-/sdk-trading-1.3.0.tgz#d3bbcd417d837ba0096d8530825353f092bbba64" + integrity sha512-xzBwRWCSTPoKDyc2DjgjMhvE2vUMkSkag3hGNTLDb8smJD0zTVhk0oruEQiX7T0MrgGgwgenxeF4ZpywtWhAZg== + dependencies: + "@cowprotocol/sdk-app-data" "4.7.0" + "@cowprotocol/sdk-common" "0.10.1" + "@cowprotocol/sdk-config" "1.2.0" + "@cowprotocol/sdk-contracts-ts" "2.5.0" + "@cowprotocol/sdk-order-book" "2.1.0" + "@cowprotocol/sdk-order-signing" "0.3.0" deepmerge "^4.3.1" "@cspotcode/source-map-support@^0.8.0":