@cowprotocol/cow-sdk 1.0.2-RC.6 → 2.0.0-alpha.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.
Files changed (86) hide show
  1. package/LICENSE-APACHE +201 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +11 -13
  4. package/package.json +28 -31
  5. package/dist/CowSdk.d.ts +0 -21
  6. package/dist/api/0x/error/index.d.ts +0 -21
  7. package/dist/api/0x/index.d.ts +0 -11
  8. package/dist/api/0x/types.d.ts +0 -87
  9. package/dist/api/0x/utils.d.ts +0 -17
  10. package/dist/api/base/index.d.ts +0 -27
  11. package/dist/api/cow/errors/OperatorError.d.ts +0 -63
  12. package/dist/api/cow/errors/QuoteError.d.ts +0 -32
  13. package/dist/api/cow/index.d.ts +0 -26
  14. package/dist/api/cow/transformOrder.d.ts +0 -2
  15. package/dist/api/cow/types.d.ts +0 -133
  16. package/dist/api/cow-subgraph/graphql.d.ts +0 -2957
  17. package/dist/api/cow-subgraph/index.d.ts +0 -23
  18. package/dist/api/cow-subgraph/queries.d.ts +0 -3
  19. package/dist/api/index.d.ts +0 -3
  20. package/dist/api/metadata/index.d.ts +0 -58
  21. package/dist/api/metadata/types.d.ts +0 -22
  22. package/dist/api/paraswap/constants.d.ts +0 -10
  23. package/dist/api/paraswap/error/index.d.ts +0 -10
  24. package/dist/api/paraswap/index.d.ts +0 -32
  25. package/dist/api/paraswap/types.d.ts +0 -19
  26. package/dist/api/paraswap/utils.d.ts +0 -19
  27. package/dist/appData.schema-0c8db23b.js +0 -2
  28. package/dist/appData.schema-0c8db23b.js.map +0 -1
  29. package/dist/appData.schema-412cbfbf.js +0 -2
  30. package/dist/appData.schema-412cbfbf.js.map +0 -1
  31. package/dist/appData.schema-42d10730.js +0 -2
  32. package/dist/appData.schema-42d10730.js.map +0 -1
  33. package/dist/appData.schema-4c010c50.js +0 -2
  34. package/dist/appData.schema-4c010c50.js.map +0 -1
  35. package/dist/appData.schema-adfc1c6f.js +0 -2
  36. package/dist/appData.schema-adfc1c6f.js.map +0 -1
  37. package/dist/appData.schema-b8f018d7.js +0 -2
  38. package/dist/appData.schema-b8f018d7.js.map +0 -1
  39. package/dist/constants/chains.d.ts +0 -6
  40. package/dist/constants/index.d.ts +0 -5
  41. package/dist/constants/tokens.d.ts +0 -5
  42. package/dist/index.d.ts +0 -6
  43. package/dist/index.js +0 -29
  44. package/dist/index.js.map +0 -1
  45. package/dist/index.modern.js +0 -29
  46. package/dist/index.modern.js.map +0 -1
  47. package/dist/index.modern.mjs +0 -29
  48. package/dist/index.modern.mjs.map +0 -1
  49. package/dist/index.module.js +0 -29
  50. package/dist/index.module.js.map +0 -1
  51. package/dist/src/appData.schema-d44994e0.js +0 -2
  52. package/dist/src/appData.schema-d44994e0.js.map +0 -1
  53. package/dist/src/appData.schema-fb2df827.js +0 -2
  54. package/dist/src/appData.schema-fb2df827.js.map +0 -1
  55. package/dist/src/cow-sdk.esm.js +0 -2
  56. package/dist/src/cow-sdk.esm.js.map +0 -1
  57. package/dist/src/cow-sdk.js +0 -2
  58. package/dist/src/cow-sdk.js.map +0 -1
  59. package/dist/src/cow-sdk.modern.js +0 -2
  60. package/dist/src/cow-sdk.modern.js.map +0 -1
  61. package/dist/src/src/CowSdk.d.ts +0 -16
  62. package/dist/src/src/api/cow/errors/OperatorError.d.ts +0 -63
  63. package/dist/src/src/api/cow/errors/QuoteError.d.ts +0 -32
  64. package/dist/src/src/api/cow/index.d.ts +0 -38
  65. package/dist/src/src/api/cow/types.d.ts +0 -73
  66. package/dist/src/src/api/index.d.ts +0 -1
  67. package/dist/src/src/constants/chains.d.ts +0 -6
  68. package/dist/src/src/constants/index.d.ts +0 -3
  69. package/dist/src/src/constants/tokens.d.ts +0 -5
  70. package/dist/src/src/index.d.ts +0 -4
  71. package/dist/src/src/types/index.d.ts +0 -7
  72. package/dist/src/src/utils/appData.d.ts +0 -7
  73. package/dist/src/src/utils/common.d.ts +0 -5
  74. package/dist/src/src/utils/context.d.ts +0 -24
  75. package/dist/src/src/utils/sign.d.ts +0 -54
  76. package/dist/src/src/utils/tokens.d.ts +0 -2
  77. package/dist/types/index.d.ts +0 -15
  78. package/dist/types/sdk.d.ts +0 -39
  79. package/dist/types/utilities.d.ts +0 -5
  80. package/dist/utils/appData.d.ts +0 -3
  81. package/dist/utils/common.d.ts +0 -9
  82. package/dist/utils/context.d.ts +0 -42
  83. package/dist/utils/ipfs.d.ts +0 -10
  84. package/dist/utils/market.d.ts +0 -16
  85. package/dist/utils/sign.d.ts +0 -55
  86. package/dist/utils/tokens.d.ts +0 -2
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.modern.mjs","sources":["../src/constants/chains.ts","../src/utils/common.ts","../src/constants/index.ts","../src/utils/sign.ts","../src/api/cow/errors/OperatorError.ts","../src/api/cow/errors/QuoteError.ts","../src/api/0x/types.ts","../src/types/index.ts","../src/constants/tokens.ts","../src/utils/tokens.ts","../src/api/base/index.ts","../src/api/cow/transformOrder.ts","../src/api/cow/index.ts","../src/api/cow-subgraph/queries.ts","../src/api/cow-subgraph/index.ts","../src/utils/appData.ts","../src/api/metadata/index.ts","../src/utils/ipfs.ts","../src/utils/context.ts","../src/utils/market.ts","../src/api/0x/error/index.ts","../src/api/0x/utils.ts","../src/api/0x/index.ts","../src/api/paraswap/constants.ts","../src/api/paraswap/error/index.ts","../src/api/paraswap/utils.ts","../src/api/cow-subgraph/graphql.ts","../src/api/paraswap/index.ts","../src/CowSdk.ts"],"sourcesContent":["export enum SupportedChainId {\n MAINNET = 1,\n GOERLI = 5,\n GNOSIS_CHAIN = 100,\n}\n\nexport const ALL_SUPPORTED_CHAIN_IDS: SupportedChainId[] = [\n SupportedChainId.MAINNET,\n SupportedChainId.GOERLI,\n SupportedChainId.GNOSIS_CHAIN,\n]\n","export class CowError extends Error {\n error_code?: string\n\n constructor(message: string, error_code?: string) {\n super(message)\n this.error_code = error_code\n }\n}\n\nexport function objectToQueryString(o: { [key: string]: string | number | undefined }): string {\n if (!o) {\n return ''\n }\n\n const qs = new URLSearchParams()\n\n for (const key of Object.keys(o)) {\n const value = o[key]\n if (value) {\n qs.append(key, value.toString())\n }\n }\n\n const qsResult = qs.toString()\n\n return qsResult ? `?${qsResult}` : ''\n}\n\nexport const logPrefix = 'cow-sdk:'\n\nexport function fromHexString(hexString: string) {\n const stringMatch = hexString.match(/.{1,2}/g)\n if (!stringMatch) return\n return new Uint8Array(stringMatch.map((byte) => parseInt(byte, 16)))\n}\n","import contractNetworks from '@cowprotocol/contracts/networks.json'\nimport { ALL_SUPPORTED_CHAIN_IDS } from './chains'\n\nconst { GPv2Settlement } = JSON.parse(contractNetworks as unknown as string) as typeof contractNetworks\n\nexport const COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS = ALL_SUPPORTED_CHAIN_IDS.reduce<Record<number, string>>(\n (acc, chainId) => ({\n ...acc,\n [chainId]: GPv2Settlement[chainId].address,\n }),\n {}\n)\n\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nexport const DEFAULT_APP_DATA_HASH = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport const DEFAULT_IPFS_READ_URI = 'https://gnosis.mypinata.cloud/ipfs'\nexport const DEFAULT_IPFS_WRITE_URI = 'https://api.pinata.cloud'\n","import {\n domain as domainGp,\n EcdsaSignature,\n IntChainIdTypedDataV4Signer,\n Order,\n OrderCancellation as OrderCancellationGp,\n Signature,\n SigningScheme,\n signOrder as signOrderGp,\n signOrderCancellation as signOrderCancellationGp,\n TypedDataV3Signer,\n} from '@cowprotocol/contracts'\nimport log from 'loglevel'\n\nimport { SupportedChainId as ChainId } from '../constants/chains'\nimport { COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS } from '../constants'\nimport { Signer, TypedDataDomain } from '@ethersproject/abstract-signer'\nimport { CowError, logPrefix } from './common'\n\n// For error codes, see:\n// - https://eth.wiki/json-rpc/json-rpc-error-codes-improvement-proposal\n// - https://www.jsonrpc.org/specification#error_object\nconst METAMASK_SIGNATURE_ERROR_CODE = -32603\nconst METHOD_NOT_FOUND_ERROR_CODE = -32601\nconst V4_ERROR_MSG_REGEX = /eth_signTypedData_v4 does not exist/i\nconst V3_ERROR_MSG_REGEX = /eth_signTypedData_v3 does not exist/i\nconst RPC_REQUEST_FAILED_REGEX = /RPC request failed/i\nconst METAMASK_STRING_CHAINID_REGEX = /provided chainid .* must match the active chainid/i\n\nexport type UnsignedOrder = Omit<Order, 'receiver'> & { receiver: string }\n\nexport interface SignOrderParams {\n chainId: ChainId\n signer: Signer\n order: UnsignedOrder\n signingScheme: SigningScheme\n}\n\n// posted to /api/v1/orders on Order creation\n// serializable, so no BigNumbers\n// See https://api.cow.fi/docs\nexport interface OrderCreation extends UnsignedOrder {\n signingScheme: SigningScheme // signed method\n\n // Signature is used for:\n // - Signature: EIP-712,ETHSIGN\n // - Owner address: for PRESIGN\n signature: string // 65 bytes encoded as hex without `0x` prefix. r + s + v from the spec\n quoteId?: number | null\n}\n\nexport interface SingOrderCancellationParams {\n chainId: ChainId\n signer: Signer\n orderId: string\n signingScheme: SigningScheme\n}\n\nexport interface OrderCancellation extends OrderCancellationGp {\n signature: string\n signingScheme: SigningScheme\n}\n\nexport type SigningSchemeValue = 'eip712' | 'ethsign' | 'eip1271' | 'presign'\n\ninterface SchemaInfo {\n libraryValue: number\n apiValue: SigningSchemeValue\n}\nconst mapSigningSchema: Map<SigningScheme, SchemaInfo> = new Map([\n [SigningScheme.EIP712, { libraryValue: 0, apiValue: 'eip712' }],\n [SigningScheme.ETHSIGN, { libraryValue: 1, apiValue: 'ethsign' }],\n [SigningScheme.EIP1271, { libraryValue: 2, apiValue: 'eip1271' }],\n [SigningScheme.PRESIGN, { libraryValue: 3, apiValue: 'presign' }],\n])\n\nfunction _getSigningSchemeInfo(ecdaSigningScheme: SigningScheme): SchemaInfo {\n const value = mapSigningSchema.get(ecdaSigningScheme)\n if (value === undefined) {\n throw new CowError('Unknown schema ' + ecdaSigningScheme)\n }\n\n return value\n}\n\ninterface ProviderRpcError extends Error {\n message: string\n code: number\n data?: unknown\n}\n\nfunction isProviderRpcError(error: unknown): error is ProviderRpcError {\n return (error as ProviderRpcError).code !== undefined || (error as ProviderRpcError).message !== undefined\n}\n\nexport function getSigningSchemeApiValue(ecdaSigningScheme: SigningScheme): string {\n return _getSigningSchemeInfo(ecdaSigningScheme).apiValue\n}\n\nexport function getSigningSchemeLibValue(ecdaSigningScheme: SigningScheme): number {\n return _getSigningSchemeInfo(ecdaSigningScheme).libraryValue\n}\n\nfunction _getDomain(chainId: ChainId): TypedDataDomain {\n // Get settlement contract address\n const settlementContract = COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS[chainId]\n\n if (!settlementContract) {\n throw new CowError('Unsupported network. Settlement contract is not deployed')\n }\n\n return domainGp(chainId, settlementContract)\n}\n\nasync function _signOrder(params: SignOrderParams): Promise<Signature> {\n const { chainId, signer, order, signingScheme } = params\n\n const domain = _getDomain(chainId)\n\n return signOrderGp(domain, order, signer, getSigningSchemeLibValue(signingScheme))\n}\n\nasync function _signOrderCancellation(params: SingOrderCancellationParams): Promise<Signature> {\n const { chainId, signer, signingScheme, orderId } = params\n\n const domain = _getDomain(chainId)\n\n return signOrderCancellationGp(domain, orderId, signer, getSigningSchemeLibValue(signingScheme))\n}\n\nexport type SigningResult = { signature?: string; signingScheme: SigningScheme }\n\nasync function _signPayload(\n payload: Pick<SignOrderParams, 'order' & 'chainId'> | Pick<SingOrderCancellationParams, 'chainId' & 'orderId'>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n signFn: (params: any) => Promise<Signature>,\n signer: Signer,\n signingMethod: 'v4' | 'int_v4' | 'v3' | 'eth_sign' = 'v4'\n): Promise<SigningResult> {\n const signingScheme: SigningScheme = signingMethod === 'eth_sign' ? SigningScheme.ETHSIGN : SigningScheme.EIP712\n let signature: Signature | null = null\n\n let _signer\n try {\n switch (signingMethod) {\n case 'v3':\n _signer = new TypedDataV3Signer(signer)\n break\n case 'int_v4':\n _signer = new IntChainIdTypedDataV4Signer(signer)\n break\n default:\n _signer = signer\n }\n } catch (e) {\n log.error(logPrefix, 'Wallet not supported:', e)\n throw new CowError('Wallet not supported')\n }\n\n try {\n signature = (await signFn({ ...payload, signer: _signer, signingScheme })) as EcdsaSignature // Only ECDSA signing supported for now\n } catch (e) {\n if (!isProviderRpcError(e)) {\n // Some other error signing. Let it bubble up.\n log.error(logPrefix, e)\n throw e\n }\n\n if (e.code === METHOD_NOT_FOUND_ERROR_CODE || RPC_REQUEST_FAILED_REGEX.test(e.message)) {\n // Maybe the wallet returns the proper error code? We can only hope 🤞\n // OR it failed with a generic message, there's no error code set, and we also hope it'll work\n // with other methods...\n switch (signingMethod) {\n case 'v4':\n return _signPayload(payload, signFn, signer, 'v3')\n case 'v3':\n return _signPayload(payload, signFn, signer, 'eth_sign')\n default:\n throw e\n }\n } else if (METAMASK_STRING_CHAINID_REGEX.test(e.message)) {\n // Metamask now enforces chainId to be an integer\n return _signPayload(payload, signFn, signer, 'int_v4')\n } else if (e.code === METAMASK_SIGNATURE_ERROR_CODE) {\n // We tried to sign order the nice way.\n // That works fine for regular MM addresses. Does not work for Hardware wallets, though.\n // See https://github.com/MetaMask/metamask-extension/issues/10240#issuecomment-810552020\n // So, when that specific error occurs, we know this is a problem with MM + HW.\n // Then, we fallback to ETHSIGN.\n return _signPayload(payload, signFn, signer, 'eth_sign')\n } else if (V4_ERROR_MSG_REGEX.test(e.message)) {\n // Failed with `v4`, and the wallet does not set the proper error code\n return _signPayload(payload, signFn, signer, 'v3')\n } else if (V3_ERROR_MSG_REGEX.test(e.message)) {\n // Failed with `v3`, and the wallet does not set the proper error code\n return _signPayload(payload, signFn, signer, 'eth_sign')\n }\n }\n return { signature: signature?.data.toString(), signingScheme }\n}\n/**\n * Returns the signature for the specified order with the signing scheme encoded\n * into the signature.\n * @export\n * @param {UnsignedOrder} order The order to sign.\n * @param {ChainId} chainId The chain Id\n * @param {Signer} signer The owner for the order used to sign.\n * @return {*} Encoded signature including signing scheme for the order.\n */\nexport async function signOrder(order: UnsignedOrder, chainId: ChainId, signer: Signer): Promise<SigningResult> {\n return _signPayload({ order, chainId }, _signOrder, signer)\n}\n\n/**\n * Returns the signature for the Order Cancellation with the signing scheme encoded\n * into the signature.\n *\n * @export\n * @param {string} orderId The unique identifier of the order being cancelled.\n * @param {ChainId} chainId The chain Id\n * @param {Signer} signer The owner for the order used to sign.\n * @return {*} Encoded signature including signing scheme for the order.\n */\nexport async function signOrderCancellation(orderId: string, chainId: ChainId, signer: Signer): Promise<SigningResult> {\n return _signPayload({ orderId, chainId }, _signOrderCancellation, signer)\n}\n","import log from 'loglevel'\nimport { CowError, logPrefix } from '../../../utils/common'\n\ntype ApiActionType = 'get' | 'create' | 'delete'\n\nexport interface ApiErrorObject {\n errorType: ApiErrorCodes\n description: string\n data?: unknown\n}\n\n// Conforms to backend API\n// https://github.com/gnosis/gp-v2-services/blob/d932e11c9a2125fdba239530be7684799f694909/crates/orderbook/openapi.yml#L801\n// and\n// https://github.com/gnosis/gp-v2-services/blob/d932e11c9a2125fdba239530be7684799f694909/crates/orderbook/openapi.yml#L740\nexport enum ApiErrorCodes {\n DuplicateOrder = 'DuplicateOrder',\n InvalidSignature = 'InvalidSignature',\n MissingOrderData = 'MissingOrderData',\n InsufficientValidTo = 'InsufficientValidTo',\n InsufficientAllowance = 'InsufficientAllowance',\n InsufficientBalance = 'InsufficientBalance',\n InsufficientFee = 'InsufficientFee',\n WrongOwner = 'WrongOwner',\n NotFound = 'NotFound',\n OrderNotFound = 'OrderNotFound',\n AlreadyCancelled = 'AlreadyCancelled',\n OrderFullyExecuted = 'OrderFullyExecuted',\n OrderExpired = 'OrderExpired',\n NoLiquidity = 'NoLiquidity',\n UnsupportedToken = 'UnsupportedToken',\n AmountIsZero = 'AmountIsZero',\n SellAmountDoesNotCoverFee = 'SellAmountDoesNotCoverFee',\n TransferEthToContract = 'TransferEthToContract',\n UNHANDLED_GET_ERROR = 'UNHANDLED_GET_ERROR',\n UNHANDLED_CREATE_ERROR = 'UNHANDLED_CREATE_ERROR',\n UNHANDLED_DELETE_ERROR = 'UNHANDLED_DELETE_ERROR',\n}\n\nexport enum ApiErrorCodeDetails {\n DuplicateOrder = 'There was another identical order already submitted. Please try again.',\n InsufficientFee = \"The signed fee is insufficient. It's possible that is higher now due to a change in the gas price, ether price, or the sell token price. Please try again to get an updated fee quote.\",\n InvalidSignature = 'The order signature is invalid. Check whether your Wallet app supports off-chain signing.',\n MissingOrderData = 'The order has missing information',\n InsufficientValidTo = 'The order you are signing is already expired. This can happen if you set a short expiration in the settings and waited too long before signing the transaction. Please try again.',\n InsufficientAllowance = \"The account doesn't have enough funds\",\n InsufficientBalance = 'The account needs to approve the selling token in order to trade',\n WrongOwner = \"The signature is invalid.\\n\\nIt's likely that the signing method provided by your wallet doesn't comply with the standards required by CowSwap.\\n\\nCheck whether your Wallet app supports off-chain signing (EIP-712 or ETHSIGN).\",\n NotFound = 'Not found',\n OrderNotFound = 'The order you are trying to cancel does not exist',\n AlreadyCancelled = 'Order is already cancelled',\n OrderFullyExecuted = 'Order is already filled',\n OrderExpired = 'Order is expired',\n NoLiquidity = 'Token pair selected has insufficient liquidity',\n UnsupportedToken = 'One of the tokens you are trading is unsupported. Please read the FAQ for more info.',\n AmountIsZero = 'Amount is zero',\n SellAmountDoesNotCoverFee = 'Sell amount does not sufficiently cover the current fee',\n TransferEthToContract = 'Sending the native currency to smart contract wallets is not currently supported',\n UNHANDLED_GET_ERROR = 'Order fetch failed. This may be due to a server or network connectivity issue. Please try again later.',\n UNHANDLED_CREATE_ERROR = 'The order was not accepted by the network',\n UNHANDLED_DELETE_ERROR = 'The order cancellation was not accepted by the network',\n}\n\nfunction _mapActionToErrorDetail(action?: ApiActionType) {\n switch (action) {\n case 'get':\n return ApiErrorCodeDetails.UNHANDLED_GET_ERROR\n case 'create':\n return ApiErrorCodeDetails.UNHANDLED_CREATE_ERROR\n case 'delete':\n return ApiErrorCodeDetails.UNHANDLED_DELETE_ERROR\n default:\n log.error(\n logPrefix,\n '[OperatorError::_mapActionToErrorDetails] Uncaught error mapping error action type to server error. Please try again later.'\n )\n return 'Something failed. Please try again later.'\n }\n}\n\nexport default class OperatorError extends CowError {\n name = 'OperatorError'\n description: ApiErrorObject['description']\n\n // Status 400 errors\n // https://github.com/gnosis/gp-v2-services/blob/9014ae55412a356e46343e051aefeb683cc69c41/orderbook/openapi.yml#L563\n static apiErrorDetails = ApiErrorCodeDetails\n\n public static async getErrorMessage(response: Response, action: ApiActionType) {\n try {\n const orderPostError: ApiErrorObject = await response.json()\n\n if (orderPostError.errorType) {\n const errorMessage = OperatorError.apiErrorDetails[orderPostError.errorType]\n // shouldn't fall through as this error constructor expects the error code to exist but just in case\n return errorMessage || orderPostError.errorType\n } else {\n log.error(logPrefix, 'Unknown reason for bad order submission', orderPostError)\n return orderPostError.description\n }\n } catch (error) {\n log.error(logPrefix, 'Error handling a 400 error. Likely a problem deserialising the JSON response')\n return _mapActionToErrorDetail(action)\n }\n }\n static async getErrorFromStatusCode(response: Response, action: 'create' | 'delete') {\n switch (response.status) {\n case 400:\n case 404:\n return this.getErrorMessage(response, action)\n\n case 403:\n return `The order cannot be ${action === 'create' ? 'accepted' : 'cancelled'}. Your account is deny-listed.`\n\n case 429:\n return `The order cannot be ${\n action === 'create' ? 'accepted. Too many order placements' : 'cancelled. Too many order cancellations'\n }. Please, retry in a minute`\n\n case 500:\n default:\n log.error(\n logPrefix,\n `[OperatorError::getErrorFromStatusCode] Error ${\n action === 'create' ? 'creating' : 'cancelling'\n } the order, status code:`,\n response.status || 'unknown'\n )\n return `Error ${action === 'create' ? 'creating' : 'cancelling'} the order`\n }\n }\n constructor(apiError: ApiErrorObject) {\n super(apiError.description, apiError.errorType)\n\n this.description = apiError.description\n this.message = ApiErrorCodeDetails[apiError.errorType]\n }\n}\n\nexport function isValidOperatorError(error: unknown): error is OperatorError {\n return error instanceof OperatorError\n}\n","import log from 'loglevel'\nimport { CowError, logPrefix } from '../../../utils/common'\nimport { ApiErrorCodes, ApiErrorObject } from './OperatorError'\n\nexport interface GpQuoteErrorObject {\n errorType: GpQuoteErrorCodes\n description: string\n data?: unknown\n}\n\n// Conforms to backend API\n// https://github.com/gnosis/gp-v2-services/blob/0bd5f7743bebaa5acd3be13e35ede2326a096f14/orderbook/openapi.yml#L562\nexport enum GpQuoteErrorCodes {\n UnsupportedToken = 'UnsupportedToken',\n InsufficientLiquidity = 'InsufficientLiquidity',\n FeeExceedsFrom = 'FeeExceedsFrom',\n ZeroPrice = 'ZeroPrice',\n UNHANDLED_ERROR = 'UNHANDLED_ERROR',\n}\n\nexport enum GpQuoteErrorDetails {\n UnsupportedToken = 'One of the tokens you are trading is unsupported. Please read the FAQ for more info.',\n InsufficientLiquidity = 'Token pair selected has insufficient liquidity',\n FeeExceedsFrom = 'Current fee exceeds entered \"from\" amount',\n ZeroPrice = 'Quoted price is zero. This is likely due to a significant price difference between the two tokens. Please try increasing amounts.',\n UNHANDLED_ERROR = 'Quote fetch failed. This may be due to a server or network connectivity issue. Please try again later.',\n}\n\nexport function mapOperatorErrorToQuoteError(error?: ApiErrorObject): GpQuoteErrorObject {\n switch (error?.errorType) {\n case ApiErrorCodes.NotFound:\n case ApiErrorCodes.NoLiquidity:\n return {\n errorType: GpQuoteErrorCodes.InsufficientLiquidity,\n description: GpQuoteErrorDetails.InsufficientLiquidity,\n }\n\n case ApiErrorCodes.SellAmountDoesNotCoverFee:\n return {\n errorType: GpQuoteErrorCodes.FeeExceedsFrom,\n description: GpQuoteErrorDetails.FeeExceedsFrom,\n data: error?.data,\n }\n\n case ApiErrorCodes.UnsupportedToken:\n return {\n errorType: GpQuoteErrorCodes.UnsupportedToken,\n description: error.description,\n }\n case ApiErrorCodes.SellAmountDoesNotCoverFee:\n return {\n errorType: GpQuoteErrorCodes.FeeExceedsFrom,\n description: error.description,\n }\n default:\n return { errorType: GpQuoteErrorCodes.UNHANDLED_ERROR, description: GpQuoteErrorDetails.UNHANDLED_ERROR }\n }\n}\n\nexport default class GpQuoteError extends CowError {\n name = 'QuoteErrorObject'\n description: string\n // any data attached\n data?: unknown\n\n // Status 400 errors\n // https://github.com/gnosis/gp-v2-services/blob/9014ae55412a356e46343e051aefeb683cc69c41/orderbook/openapi.yml#L563\n static quoteErrorDetails = GpQuoteErrorDetails\n\n public static async getErrorMessage(response: Response) {\n try {\n const orderPostError: GpQuoteErrorObject = await response.json()\n\n if (orderPostError.errorType) {\n const errorMessage = GpQuoteError.quoteErrorDetails[orderPostError.errorType]\n // shouldn't fall through as this error constructor expects the error code to exist but just in case\n return errorMessage || orderPostError.errorType\n } else {\n log.error(logPrefix, 'Unknown reason for bad quote fetch', orderPostError)\n return orderPostError.description\n }\n } catch (error) {\n log.error(logPrefix, 'Error handling 400/404 error. Likely a problem deserialising the JSON response')\n return GpQuoteError.quoteErrorDetails.UNHANDLED_ERROR\n }\n }\n\n static async getErrorFromStatusCode(response: Response) {\n switch (response.status) {\n case 400:\n case 404:\n return this.getErrorMessage(response)\n\n case 500:\n default:\n log.error(\n logPrefix,\n '[QuoteError::getErrorFromStatusCode] Error fetching quote, status code:',\n response.status || 'unknown'\n )\n return 'Error fetching quote'\n }\n }\n constructor(quoteError: GpQuoteErrorObject) {\n super(quoteError.description, quoteError.errorType)\n\n this.description = quoteError.description\n this.message = GpQuoteError.quoteErrorDetails[quoteError.errorType]\n this.data = quoteError?.data\n }\n}\n\nexport function isValidQuoteError(error: unknown): error is GpQuoteError {\n return error instanceof GpQuoteError\n}\n","import { SupportedChainId } from '../../constants/chains'\n// copy/pasting as the library types correspond to the internal types, not API response\n// e.g \"price: BigNumber\" when we want the API response type: \"price: string\"\n// see link below to see\n// https://github.com/0xProject/0x-api/blob/8c4cc7bb8d4fa06a220b7dfd5784361c05daa92a/src/types.ts#L229\ninterface GetSwapQuoteResponseLiquiditySource {\n name: string\n proportion: string\n intermediateToken?: string\n hops?: string[]\n}\n\n// https://github.com/0xProject/0x-api/blob/8c4cc7bb8d4fa06a220b7dfd5784361c05daa92a/src/types.ts#L229\ninterface ZeroXBaseQuote {\n chainId: SupportedChainId\n price: string\n buyAmount: string\n sellAmount: string\n sources: GetSwapQuoteResponseLiquiditySource[]\n gasPrice: string\n estimatedGas: string\n sellTokenToEthRate: string\n buyTokenToEthRate: string\n protocolFee: string\n minimumProtocolFee: string\n allowanceTarget?: string\n}\n\n// https://github.com/0xProject/0x-api/blob/8c4cc7bb8d4fa06a220b7dfd5784361c05daa92a/src/types.ts#L229\nexport interface ZeroXQuote extends ZeroXBaseQuote {\n sellTokenAddress: string\n buyTokenAddress: string\n value: string\n gas: string\n}\n\nexport type ZeroXOptions = {\n affiliateAddressMap: Partial<Record<number, string>>\n excludedSources: ERC20BridgeSource[]\n}\n\n// Excludable price sources\n// from https://github.com/0xProject/protocol/blob/4f32f3174f25858644eae4c3de59c3a6717a757c/packages/asset-swapper/src/utils/market_operation_utils/types.ts#L38\nexport enum ERC20BridgeSource {\n Native = 'Native',\n Uniswap = 'Uniswap',\n UniswapV2 = 'Uniswap_V2',\n Eth2Dai = 'Eth2Dai',\n Kyber = 'Kyber',\n Curve = 'Curve',\n LiquidityProvider = 'LiquidityProvider',\n MultiBridge = 'MultiBridge',\n Balancer = 'Balancer',\n BalancerV2 = 'Balancer_V2',\n Cream = 'CREAM',\n Bancor = 'Bancor',\n MakerPsm = 'MakerPsm',\n MStable = 'mStable',\n Mooniswap = 'Mooniswap',\n MultiHop = 'MultiHop',\n Shell = 'Shell',\n Swerve = 'Swerve',\n SnowSwap = 'SnowSwap',\n SushiSwap = 'SushiSwap',\n Dodo = 'DODO',\n DodoV2 = 'DODO_V2',\n CryptoCom = 'CryptoCom',\n Linkswap = 'Linkswap',\n KyberDmm = 'KyberDMM',\n Smoothy = 'Smoothy',\n Component = 'Component',\n Saddle = 'Saddle',\n XSigma = 'xSigma',\n UniswapV3 = 'Uniswap_V3',\n CurveV2 = 'Curve_V2',\n Lido = 'Lido',\n ShibaSwap = 'ShibaSwap',\n Clipper = 'Clipper',\n // BSC only\n PancakeSwap = 'PancakeSwap',\n PancakeSwapV2 = 'PancakeSwap_V2',\n BakerySwap = 'BakerySwap',\n Nerve = 'Nerve',\n Belt = 'Belt',\n Ellipsis = 'Ellipsis',\n ApeSwap = 'ApeSwap',\n CafeSwap = 'CafeSwap',\n CheeseSwap = 'CheeseSwap',\n JulSwap = 'JulSwap',\n ACryptos = 'ACryptoS',\n // Polygon only\n QuickSwap = 'QuickSwap',\n ComethSwap = 'ComethSwap',\n Dfyn = 'Dfyn',\n WaultSwap = 'WaultSwap',\n Polydex = 'Polydex',\n FirebirdOneSwap = 'FirebirdOneSwap',\n JetSwap = 'JetSwap',\n IronSwap = 'IronSwap',\n}\n","export * from '../api/cow/types'\nexport * from '../api/0x/types'\nexport * from '../api/paraswap/types'\nexport * from '../api/metadata/types'\nexport * from './sdk'\nexport * from './utilities'\n\nexport { OrderKind } from '@cowprotocol/contracts'\nexport class Token {\n constructor(public symbol: string, public address: string) {}\n}\n\nexport type WithEnabled = {\n enabled: boolean\n}\n","import { SupportedChainId as ChainId } from './chains'\nimport { Token } from '../types'\n\nexport const XDAI_SYMBOL = 'XDAI'\n\nexport const WRAPPED_NATIVE_TOKEN: Record<ChainId, Token> = {\n [ChainId.MAINNET]: new Token('WETH', '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),\n [ChainId.GOERLI]: new Token('WETH', '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6'),\n [ChainId.GNOSIS_CHAIN]: new Token('WXDAI', '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d'),\n}\n\nexport const NATIVE: Record<ChainId, string> = {\n [ChainId.MAINNET]: 'ETH',\n [ChainId.GOERLI]: 'ETH',\n [ChainId.GNOSIS_CHAIN]: XDAI_SYMBOL,\n}\n","import { SupportedChainId as ChainId } from '../constants/chains'\nimport { NATIVE, WRAPPED_NATIVE_TOKEN } from '../constants/tokens'\n\nexport function toErc20Address(tokenAddress: string, chainId: ChainId): string {\n let checkedAddress = tokenAddress\n\n if (tokenAddress === NATIVE[chainId]) {\n checkedAddress = WRAPPED_NATIVE_TOKEN[chainId].address\n }\n\n return checkedAddress\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { SupportedChainId } from '../../constants/chains'\nimport { CowError } from '../../utils/common'\nimport { Context, Env } from '../../utils/context'\nimport { Options } from '../cow/types'\nimport fetch from 'cross-fetch'\n\ninterface ConstructorParams {\n context: Context\n name: string\n apiVersion?: string\n // we want getApiUrl to accept any parameters but return a specific type\n getApiUrl: (...params: any[]) => Partial<Record<SupportedChainId, string>>\n defaultHeaders?: HeadersInit\n}\n\nconst DEFAULT_HEADERS = { 'Content-Type': 'application/json' }\nconst DEFAULT_API_VERSION = 'v1'\n\nexport default class BaseApi {\n context\n API_NAME\n API_VERSION\n API_URL_GETTER\n DEFAULT_HEADERS\n\n constructor({\n context,\n name,\n getApiUrl,\n defaultHeaders = DEFAULT_HEADERS,\n apiVersion = DEFAULT_API_VERSION,\n }: ConstructorParams) {\n this.context = context\n this.API_NAME = name\n this.API_VERSION = apiVersion\n this.API_URL_GETTER = getApiUrl\n this.DEFAULT_HEADERS = defaultHeaders\n }\n\n protected async getApiBaseUrl(...params: unknown[]): Promise<string> {\n const chainId = await this.context.chainId\n const baseUrl = this.API_URL_GETTER(...params)[chainId]\n\n if (!baseUrl) {\n throw new CowError(`Unsupported Network. The ${this.API_NAME} API is not deployed in the Network ` + chainId)\n } else {\n return baseUrl + '/' + this.API_VERSION\n }\n }\n\n protected post(url: string, data: unknown, options: Options = {}, onlySingleEnv?: boolean): Promise<Response> {\n const params = [url, 'POST', this.fetch.bind(this), this.API_URL_GETTER, options, data]\n if (onlySingleEnv) {\n return this.fetchSingleEnv(...(params as Parameters<typeof this.fetchSingleEnv>))\n } else {\n return this.fetchMultipleEnvs(...(params as Parameters<typeof this.fetchMultipleEnvs>))\n }\n }\n\n protected get(url: string, options: Options = {}): Promise<Response> {\n return this.fetchMultipleEnvs(url, 'GET', this.fetch.bind(this), this.API_URL_GETTER, options)\n }\n\n protected delete(url: string, data: unknown, options: Options = {}): Promise<Response> {\n return this.fetchMultipleEnvs(url, 'DELETE', this.fetch.bind(this), this.API_URL_GETTER, options, data)\n }\n\n protected async fetchSingleEnv(\n url: string,\n method: 'GET' | 'POST' | 'DELETE',\n fetchFn: BaseApi['fetch'],\n getApiUrl: BaseApi['API_URL_GETTER'],\n options: Options = {},\n data?: unknown\n ): Promise<Response> {\n const { chainId: networkId, env: _env, requestOptions } = options\n\n const env = _env || (await this.context.env) || 'prod'\n const chainId = networkId || (await this.context.chainId)\n\n const uri = getApiUrl(env)\n return fetchFn(url, method, `${uri[chainId]}/${this.API_VERSION}`, data, requestOptions)\n }\n\n protected async fetchMultipleEnvs(\n url: string,\n method: 'GET' | 'POST' | 'DELETE',\n fetchFn: BaseApi['fetch'],\n getApiUrl: BaseApi['API_URL_GETTER'],\n options: Options = {},\n data?: unknown\n ): Promise<Response> {\n const { env, chainId: networkId, ...otherOptions } = options\n\n // No env set? Check first prod then staging\n // Otherwise use what's passed in\n const envs: Env[] = !env ? ['prod', 'staging'] : [env]\n const chainId = networkId || (await this.context.chainId)\n\n return this.fetchMultipleEnvsRecursive({\n url,\n method,\n fetchFn,\n getApiUrl,\n options: otherOptions,\n envs,\n chainId,\n data,\n })\n }\n\n protected async fetch(\n url: string,\n method: 'GET' | 'POST' | 'DELETE',\n baseUrl: string,\n data?: unknown,\n requestOptions?: RequestInit\n ): Promise<Response> {\n return fetch(baseUrl + url, {\n headers: this.DEFAULT_HEADERS,\n ...requestOptions,\n method,\n body: data !== undefined ? JSON.stringify(data) : data,\n })\n }\n\n private async fetchMultipleEnvsRecursive(params: FetchMultipleEnvsRecursiveParams): Promise<Response> {\n const { url, method, fetchFn, getApiUrl, options = {}, envs, chainId, data } = params\n\n const { requestOptions } = options\n // Pick the first env from the list to try\n const [env, ...nextEnvs] = envs\n\n const uri = getApiUrl(env)[chainId]\n\n try {\n const response = await fetchFn(url, method, `${uri}/${this.API_VERSION}`, data, requestOptions)\n\n if (!response.ok && nextEnvs?.length) {\n // If the response is not ok and there are more envs to try, do that\n return this.fetchMultipleEnvsRecursive({ ...params, envs: nextEnvs })\n }\n\n // Otherwise return response as is\n return response\n } catch (error) {\n if (nextEnvs?.length) {\n // If request failed and there are more envs to try, do that\n return this.fetchMultipleEnvsRecursive({ ...params, envs: nextEnvs })\n } else {\n // Otherwise re-throw error as is\n throw error\n }\n }\n }\n}\n\ntype FetchMultipleEnvsRecursiveParams = {\n url: string\n method: 'GET' | 'POST' | 'DELETE'\n fetchFn: BaseApi['fetch']\n getApiUrl: BaseApi['API_URL_GETTER']\n options: Omit<Options, 'env' | 'chainId'>\n envs: Env[]\n chainId: SupportedChainId\n data?: unknown\n}\n","import { OrderDto, OrderMetaData } from './types'\nimport { BUY_ETH_ADDRESS } from '@cowprotocol/contracts'\n\nexport function transformOrder(order: OrderDto): OrderMetaData {\n return transformEthFlowOrder(addTotalFeeToOrder(order))\n}\n\n/**\n * The executedSurplusFee represents exactly the fee that was charged (regardless of the fee signed with the order).\n * So, while the protocol currently does not allow placing a limit order with any other fee than 0 - the backend is designed to support these kinds of orders for the future.\n */\nfunction addTotalFeeToOrder(dto: OrderDto): OrderMetaData {\n const { executedFeeAmount, executedSurplusFee } = dto\n const totalFee = executedSurplusFee ?? executedFeeAmount\n\n return {\n ...dto,\n totalFee,\n }\n}\n\n/**\n * Transform order field for Native EthFlow orders\n *\n * A no-op for regular orders\n * For Native EthFlow, due to how the contract is setup:\n * - sellToken set to Native token address\n * - owner set to `onchainUser`\n * - validTo set to `ethflowData.userValidTo`\n */\nfunction transformEthFlowOrder(order: OrderMetaData): OrderMetaData {\n const { ethflowData } = order\n\n if (!ethflowData) {\n return order\n }\n\n const { userValidTo: validTo } = ethflowData\n const owner = order.onchainUser || order.owner\n const sellToken = BUY_ETH_ADDRESS\n\n return { ...order, validTo, owner, sellToken }\n}\n","import log from 'loglevel'\nimport { OrderKind, QuoteQuery } from '@cowprotocol/contracts'\nimport { SupportedChainId as ChainId } from '../../constants/chains'\nimport { getSigningSchemeApiValue, OrderCreation } from '../../utils/sign'\nimport OperatorError, { ApiErrorCodeDetails, ApiErrorCodes, ApiErrorObject } from './errors/OperatorError'\nimport QuoteError, {\n GpQuoteErrorCodes,\n GpQuoteErrorDetails,\n GpQuoteErrorObject,\n mapOperatorErrorToQuoteError,\n} from './errors/QuoteError'\nimport { toErc20Address } from '../../utils/tokens'\nimport {\n FeeQuoteParams,\n GetOrdersParams,\n GetTradesParams,\n Options,\n OrderCancellationParams,\n OrderDto,\n OrderID,\n OrderMetaData,\n PriceInformation,\n PriceQuoteLegacyParams,\n ProfileData,\n SimpleGetQuoteResponse,\n TradeMetaData,\n} from './types'\n\nimport { ZERO_ADDRESS } from '../../constants'\nimport { CowError, logPrefix, objectToQueryString } from '../../utils/common'\nimport { Context, Env } from '../../utils/context'\nimport BaseApi from '../base'\nimport { transformOrder } from './transformOrder'\n\nconst API_URL_VERSION = 'v1'\n\nfunction getCowProtocolUrl(env: Env): Partial<Record<ChainId, string>> {\n switch (env) {\n case 'staging':\n return {\n [ChainId.MAINNET]: 'https://barn.api.cow.fi/mainnet/api',\n [ChainId.GOERLI]: 'https://barn.api.cow.fi/goerli/api',\n [ChainId.GNOSIS_CHAIN]: 'https://barn.api.cow.fi/xdai/api',\n }\n case 'prod':\n return {\n [ChainId.MAINNET]: 'https://api.cow.fi/mainnet/api',\n [ChainId.GOERLI]: 'https://api.cow.fi/goerli/api',\n [ChainId.GNOSIS_CHAIN]: 'https://api.cow.fi/xdai/api',\n }\n }\n}\n\nfunction getProfileUrl(env: Env): Partial<Record<ChainId, string>> {\n switch (env) {\n case 'staging':\n return {\n [ChainId.MAINNET]: 'https://barn.api.cow.fi/affiliate/api',\n }\n case 'prod':\n return {\n [ChainId.MAINNET]: 'https://api.cow.fi/affiliate/api',\n }\n }\n}\n\nconst UNHANDLED_QUOTE_ERROR: GpQuoteErrorObject = {\n errorType: GpQuoteErrorCodes.UNHANDLED_ERROR,\n description: GpQuoteErrorDetails.UNHANDLED_ERROR,\n}\n\nconst UNHANDLED_ORDER_GET_ERROR: ApiErrorObject = {\n errorType: ApiErrorCodes.UNHANDLED_GET_ERROR,\n description: ApiErrorCodeDetails.UNHANDLED_GET_ERROR,\n}\n\nasync function _handleQuoteResponse<T = unknown, P extends QuoteQuery = QuoteQuery>(\n response: Response,\n params?: P\n): Promise<T> {\n if (!response.ok) {\n const responseContentType = response.headers.get('Content-Type')\n if (responseContentType === 'application/json') {\n const errorObj: ApiErrorObject = await response.json()\n\n // we need to map the backend error codes to match our own for quotes\n const mappedError = mapOperatorErrorToQuoteError(errorObj)\n const quoteError = new QuoteError(mappedError)\n\n if (params) {\n const { sellToken, buyToken } = params\n log.error(logPrefix, `Error querying fee from API - sellToken: ${sellToken}, buyToken: ${buyToken}`)\n }\n\n throw quoteError\n } else {\n const text = await response.text()\n throw new QuoteError({\n description: text,\n errorType: GpQuoteErrorCodes.UNHANDLED_ERROR,\n })\n }\n } else {\n return response.json()\n }\n}\n\nexport class CowApi extends BaseApi {\n constructor(context: Context) {\n super({ context, name: 'CoW Protocol', apiVersion: API_URL_VERSION, getApiUrl: getCowProtocolUrl })\n }\n\n async getProfileData(address: string, options: Options = {}): Promise<ProfileData | null> {\n const { chainId: networkId, env } = options\n const chainId = networkId || (await this.context.chainId)\n log.debug(logPrefix, `[api:${this.API_NAME}] Get profile data for`, chainId, address)\n if (chainId !== ChainId.MAINNET) {\n log.info(logPrefix, 'Profile data is only available for mainnet')\n return null\n }\n\n const response = await this.getProfile(`/profile/${address}`, { chainId, env })\n\n if (!response.ok) {\n const errorResponse = await response.json()\n log.error(logPrefix, errorResponse)\n throw new CowError(errorResponse?.description)\n } else {\n return response.json()\n }\n }\n\n async getTrades(params: GetTradesParams, options: Options = {}): Promise<TradeMetaData[]> {\n const { chainId: networkId, env = this.context.env } = options\n const { owner, orderId } = params\n if (owner && orderId) {\n throw new CowError('Cannot specify both owner and orderId')\n }\n const qsParams = objectToQueryString({ owner, orderUid: orderId })\n const chainId = networkId || (await this.context.chainId)\n log.debug(logPrefix, '[util:operator] Get trades for', chainId, { owner, orderId })\n try {\n const response = await this.get(`/trades${qsParams}`, { chainId, env })\n\n if (!response.ok) {\n const errorResponse = await response.json()\n throw new OperatorError(errorResponse)\n } else {\n return response.json()\n }\n } catch (error) {\n log.error(logPrefix, 'Error getting trades:', error)\n if (error instanceof OperatorError) throw error\n\n throw new CowError('Error getting trades: ' + error)\n }\n }\n\n async getOrders(params: GetOrdersParams, options: Options = {}): Promise<OrderMetaData[]> {\n const { chainId: networkId, env = this.context.env } = options\n const { owner, limit = 1000, offset = 0 } = params\n const queryString = objectToQueryString({ limit, offset })\n const chainId = networkId || (await this.context.chainId)\n log.debug(logPrefix, `[api:${this.API_NAME}] Get orders for `, chainId, owner, limit, offset)\n\n try {\n const response = await this.get(`/account/${owner}/orders/${queryString}`, { chainId, env })\n\n if (!response.ok) {\n const errorResponse: ApiErrorObject = await response.json()\n throw new OperatorError(errorResponse)\n } else {\n const orders: OrderDto[] = await response.json()\n\n return orders.map(transformOrder)\n }\n } catch (error) {\n log.error(logPrefix, 'Error getting orders information:', error)\n if (error instanceof OperatorError) throw error\n\n throw new OperatorError(UNHANDLED_ORDER_GET_ERROR)\n }\n }\n\n async getTxOrders(txHash: string, options: Options = {}): Promise<OrderMetaData[]> {\n const { chainId: networkId, env } = options\n const chainId = networkId || (await this.context.chainId)\n log.debug(`[api:${this.API_NAME}] Get tx orders for `, chainId, txHash)\n\n try {\n const response = await this.get(`/transactions/${txHash}/orders`, { chainId, env })\n\n if (!response.ok) {\n const errorResponse: ApiErrorObject = await response.json()\n throw new OperatorError(errorResponse)\n } else {\n const orders: OrderDto[] = await response.json()\n\n return orders.map(transformOrder)\n }\n } catch (error) {\n log.error('Error getting transaction orders information:', error)\n if (error instanceof OperatorError) throw error\n throw new OperatorError(UNHANDLED_ORDER_GET_ERROR)\n }\n }\n\n async getOrder(orderId: string, options: Options = {}): Promise<OrderMetaData | null> {\n const { chainId: networkId, env } = options\n const chainId = networkId || (await this.context.chainId)\n log.debug(logPrefix, `[api:${this.API_NAME}] Get order for `, chainId, orderId)\n try {\n const response = await this.get(`/orders/${orderId}`, { chainId, env })\n\n if (!response.ok) {\n const errorResponse: ApiErrorObject = await response.json()\n throw new OperatorError(errorResponse)\n } else {\n const order: OrderDto = await response.json()\n\n return transformOrder(order)\n }\n } catch (error) {\n log.error(logPrefix, 'Error getting order information:', error)\n if (error instanceof OperatorError) throw error\n\n throw new OperatorError(UNHANDLED_ORDER_GET_ERROR)\n }\n }\n\n async getPriceQuoteLegacy(params: PriceQuoteLegacyParams, options: Options = {}): Promise<PriceInformation | null> {\n const { chainId: networkId, env } = options\n const { baseToken, quoteToken, amount, kind } = params\n const chainId = networkId || (await this.context.chainId)\n log.debug(logPrefix, `[api:${this.API_NAME}] Get price from API`, params, 'for', chainId)\n\n const response = await this.get(\n `/markets/${toErc20Address(baseToken, chainId)}-${toErc20Address(quoteToken, chainId)}/${kind}/${amount}`,\n { chainId, env }\n ).catch((error) => {\n log.error(logPrefix, 'Error getting price quote:', error)\n throw new QuoteError(UNHANDLED_QUOTE_ERROR)\n })\n\n return _handleQuoteResponse<PriceInformation | null>(response)\n }\n\n async getQuoteLegacyParams(params: FeeQuoteParams, options: Options = {}): Promise<SimpleGetQuoteResponse> {\n const { chainId: networkId, env } = options\n const chainId = networkId || (await this.context.chainId)\n const quoteParams = this.mapNewToLegacyParams(params, chainId)\n const response = await this.post('/quote', quoteParams, { chainId, env })\n\n return _handleQuoteResponse<SimpleGetQuoteResponse>(response)\n }\n\n async getQuote(params: QuoteQuery, options: Options = {}): Promise<SimpleGetQuoteResponse> {\n const { chainId: networkId, env } = options\n const chainId = networkId || (await this.context.chainId)\n const response = await this.post('/quote', params, { chainId, env })\n\n return _handleQuoteResponse<SimpleGetQuoteResponse>(response)\n }\n\n async sendSignedOrderCancellation(params: OrderCancellationParams, options: Options = {}): Promise<void> {\n const { chainId: networkId, env } = options\n const { cancellation, owner: from } = params\n const chainId = networkId || (await this.context.chainId)\n log.debug(logPrefix, `[api:${this.API_NAME}] Delete signed order for network`, chainId, cancellation)\n\n const response = await this.delete(\n `/orders/${cancellation.orderUid}`,\n {\n signature: cancellation.signature,\n signingScheme: getSigningSchemeApiValue(cancellation.signingScheme),\n from,\n },\n { chainId, env }\n )\n\n if (!response.ok) {\n // Raise an exception\n const errorMessage = await OperatorError.getErrorFromStatusCode(response, 'delete')\n throw new CowError(errorMessage)\n }\n\n log.debug(logPrefix, `[api:${this.API_NAME}] Cancelled order`, cancellation.orderUid, chainId)\n }\n\n async sendOrder(\n params: { order: Omit<OrderCreation, 'appData'>; owner: string },\n options: Options = {}\n ): Promise<OrderID> {\n const fullOrder: OrderCreation = { ...params.order, appData: this.context.appDataHash }\n const { chainId: networkId, env } = options\n const chainId = networkId || (await this.context.chainId)\n const { owner } = params\n log.debug(logPrefix, `[api:${this.API_NAME}] Post signed order for network`, chainId, fullOrder)\n\n // Call API\n const response = await this.post(\n `/orders`,\n {\n ...fullOrder,\n signingScheme: getSigningSchemeApiValue(fullOrder.signingScheme),\n from: owner,\n },\n { chainId, env },\n true // we don't want to try to post to both barn and prod at the same time\n )\n\n // Handle response\n if (!response.ok) {\n // Raise an exception\n const errorMessage = await OperatorError.getErrorFromStatusCode(response, 'create')\n throw new CowError(errorMessage)\n }\n\n const uid = (await response.json()) as string\n log.debug(logPrefix, `[api:${this.API_NAME}] Success posting the signed order`, uid)\n return uid\n }\n\n async getOrderLink(orderId: OrderID): Promise<string> {\n const baseUrl = await this.getApiBaseUrl()\n\n return baseUrl + `/orders/${orderId}`\n }\n\n protected getApiBaseUrl(): Promise<string> {\n return super.getApiBaseUrl(this.context.env)\n }\n\n private getProfile(url: string, options: Options = {}): Promise<Response> {\n return this.fetchMultipleEnvs(url, 'GET', this.fetchProfile.bind(this), getProfileUrl, options)\n }\n\n private mapNewToLegacyParams(params: FeeQuoteParams, chainId: ChainId): QuoteQuery {\n const { amount, kind, userAddress, receiver, validTo, sellToken, buyToken } = params\n const fallbackAddress = userAddress || ZERO_ADDRESS\n\n const baseParams = {\n sellToken: toErc20Address(sellToken, chainId),\n buyToken: toErc20Address(buyToken, chainId),\n from: fallbackAddress,\n receiver: receiver || fallbackAddress,\n appData: this.context.appDataHash,\n validTo,\n partiallyFillable: false,\n }\n\n const finalParams: QuoteQuery =\n kind === OrderKind.SELL\n ? {\n kind: OrderKind.SELL,\n sellAmountBeforeFee: amount,\n ...baseParams,\n }\n : {\n kind: OrderKind.BUY,\n buyAmountAfterFee: amount,\n ...baseParams,\n }\n\n return finalParams\n }\n\n private async fetchProfile(\n url: string,\n method: 'GET' | 'POST' | 'DELETE',\n baseUrl: string,\n data?: unknown\n ): Promise<Response> {\n return fetch(baseUrl + url, {\n headers: this.DEFAULT_HEADERS,\n method,\n body: data !== undefined ? JSON.stringify(data) : data,\n })\n }\n}\n","import { gql } from 'graphql-request'\n\nexport const TOTALS_QUERY = gql`\n query Totals {\n totals {\n tokens\n orders\n traders\n settlements\n volumeUsd\n volumeEth\n feesUsd\n feesEth\n }\n }\n`\n\nexport const LAST_DAYS_VOLUME_QUERY = gql`\n query LastDaysVolume($days: Int!) {\n dailyTotals(orderBy: timestamp, orderDirection: desc, first: $days) {\n timestamp\n volumeUsd\n }\n }\n`\n\nexport const LAST_HOURS_VOLUME_QUERY = gql`\n query LastHoursVolume($hours: Int!) {\n hourlyTotals(orderBy: timestamp, orderDirection: desc, first: $hours) {\n timestamp\n volumeUsd\n }\n }\n`\n","import log from 'loglevel'\nimport { request, Variables } from 'graphql-request'\nimport { DocumentNode } from 'graphql'\nimport { CowError } from '../../utils/common'\nimport { Context, Env } from '../../utils/context'\nimport { SupportedChainId as ChainId } from '../../constants/chains'\nimport { LastDaysVolumeQuery, LastHoursVolumeQuery, TotalsQuery } from './graphql'\nimport { LAST_DAYS_VOLUME_QUERY, LAST_HOURS_VOLUME_QUERY, TOTALS_QUERY } from './queries'\n\nconst DEFAULT_STAGING_URLS = {\n [ChainId.GOERLI]: 'https://subgraph.satsuma-prod.com/94b7bd7c35c5/cow/cow-goerli/api',\n [ChainId.MAINNET]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-staging',\n [ChainId.GNOSIS_CHAIN]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-gc-staging',\n}\n\nconst DEFAULT_PROD_URLS = {\n [ChainId.GOERLI]: 'https://subgraph.satsuma-prod.com/94b7bd7c35c5/cow/cow-goerli/api',\n [ChainId.MAINNET]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow',\n [ChainId.GNOSIS_CHAIN]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-gc',\n}\n\nconst DEFAULT_ENV = 'prod'\n\nexport function getDefaultSubgraphUrl(params: { chainId?: ChainId; env?: Env }): string {\n const { chainId = ChainId.MAINNET, env = DEFAULT_ENV } = params\n switch (env) {\n case 'staging':\n return DEFAULT_STAGING_URLS[chainId]\n case 'prod':\n return DEFAULT_PROD_URLS[chainId]\n }\n}\n\nexport class CowSubgraphApi {\n context: Context\n\n API_NAME = 'CoW Protocol Subgraph'\n\n constructor(context: Context) {\n this.context = context\n }\n\n async getBaseUrl(options: SubgraphOptions = {}): Promise<string> {\n const { chainId: networkId, env = DEFAULT_ENV } = options\n const chainId = networkId || (await this.context.chainId)\n\n const baseUrl = this.context.subgraphBaseUrls[chainId] || getDefaultSubgraphUrl({ chainId, env })\n if (!baseUrl) {\n throw new CowError(`No network support for SubGraph in ChainId ${networkId} and Environment \"${env}\"`)\n }\n\n return baseUrl\n }\n\n async getTotals(options: SubgraphOptions = {}): Promise<TotalsQuery['totals'][0]> {\n const chainId = await this.context.chainId\n log.debug(`[subgraph:${this.API_NAME}] Get totals for:`, chainId)\n const response = await this.runQuery<TotalsQuery>(TOTALS_QUERY, undefined, options)\n return response.totals[0]\n }\n\n async getLastDaysVolume(days: number, options: SubgraphOptions = {}): Promise<LastDaysVolumeQuery> {\n const chainId = await this.context.chainId\n log.debug(`[subgraph:${this.API_NAME}] Get last ${days} days volume for:`, chainId)\n return this.runQuery<LastDaysVolumeQuery>(LAST_DAYS_VOLUME_QUERY, { days }, options)\n }\n\n async getLastHoursVolume(hours: number, options: SubgraphOptions = {}): Promise<LastHoursVolumeQuery> {\n const chainId = await this.context.chainId\n log.debug(`[subgraph:${this.API_NAME}] Get last ${hours} hours volume for:`, chainId)\n return this.runQuery<LastHoursVolumeQuery>(LAST_HOURS_VOLUME_QUERY, { hours }, options)\n }\n\n async runQuery<T>(query: string | DocumentNode, variables?: Variables, options: SubgraphOptions = {}): Promise<T> {\n const { chainId, env } = options\n const baseUrl = await this.getBaseUrl({ chainId, env })\n try {\n return await request(baseUrl, query, variables)\n } catch (error) {\n log.error(`[subgraph:${this.API_NAME}]`, error)\n const baseUrl = await this.getBaseUrl()\n throw new CowError(\n `Error running query: ${query}. Variables: ${JSON.stringify(variables)}. API: ${baseUrl}. Inner Error: ${error}`\n )\n }\n }\n}\n\nexport type SubgraphOptions = {\n chainId?: ChainId\n env?: Env\n}\n","import { fromHexString } from './common'\nimport { DEFAULT_IPFS_READ_URI } from '../constants'\nimport { AnyAppDataDocVersion } from '../types'\n\nexport async function getSerializedCID(hash: string): Promise<void | string> {\n const cidVersion = 0x1 //cidv1\n const codec = 0x70 //dag-pb\n const type = 0x12 //sha2-256\n const length = 32 //256 bits\n const _hash = hash.replace(/(^0x)/, '')\n\n const hexHash = fromHexString(_hash)\n\n if (!hexHash) return\n\n const uint8array = Uint8Array.from([cidVersion, codec, type, length, ...hexHash])\n const { CID } = await import('multiformats/cid')\n return CID.decode(uint8array).toV0().toString()\n}\n\nexport async function loadIpfsFromCid(cid: string, ipfsUri = DEFAULT_IPFS_READ_URI): Promise<AnyAppDataDocVersion> {\n const { default: fetch } = await import('cross-fetch')\n const response = await fetch(`${ipfsUri}/${cid}`)\n\n return await response.json()\n}\n","import {\n createAppDataDoc,\n createQuoteMetadata,\n createReferrerMetadata,\n createOrderClassMetadata,\n latest,\n getAppDataSchema,\n validateAppDataDoc,\n} from '@cowprotocol/app-data'\nimport log from 'loglevel'\nimport { Context } from '../../utils/context'\nimport { getSerializedCID, loadIpfsFromCid } from '../../utils/appData'\nimport { calculateIpfsCidV0, pinJSONToIPFS } from '../../utils/ipfs'\nimport { AnyAppDataDocVersion, LatestAppDataDocVersion, IpfsHashInfo, GenerateAppDataDocParams } from './types'\nimport { CowError } from '../../utils/common'\n\nconst DEFAULT_APP_CODE = 'CowSwap'\n\nexport class MetadataApi {\n context: Context\n\n constructor(context: Context) {\n this.context = context\n }\n\n /**\n * Creates an appDataDoc with the latest version format\n *\n * Without params creates a default minimum appData doc\n * Optionally creates metadata docs\n */\n generateAppDataDoc(params?: GenerateAppDataDocParams): LatestAppDataDocVersion {\n const { appDataParams, metadataParams } = params || {}\n const { referrerParams, quoteParams, orderClassParams } = metadataParams || {}\n\n const metadata: latest.Metadata = {}\n if (referrerParams) {\n metadata.referrer = createReferrerMetadata(referrerParams)\n }\n if (quoteParams) {\n metadata.quote = createQuoteMetadata(quoteParams)\n }\n if (orderClassParams) {\n metadata.orderClass = createOrderClassMetadata(orderClassParams)\n }\n\n const appCode = appDataParams?.appCode || DEFAULT_APP_CODE\n return createAppDataDoc({ ...appDataParams, appCode, metadata })\n }\n\n /**\n * Wrapper around @cowprotocol/app-data getAppDataSchema\n *\n * Returns the appData schema for given version, if any\n * Throws CowError when version doesn't exist\n */\n async getAppDataSchema(version: string): Promise<AnyAppDataDocVersion> {\n try {\n return await getAppDataSchema(version)\n } catch (e) {\n // Wrapping @cowprotocol/app-data Error into CowError\n const error = e as Error\n throw new CowError(error.message)\n }\n }\n\n /**\n * Wrapper around @cowprotocol/app-data validateAppDataDoc\n *\n * Validates given doc against the doc's own version\n */\n async validateAppDataDoc(appDataDoc: AnyAppDataDocVersion): ReturnType<typeof validateAppDataDoc> {\n return validateAppDataDoc(appDataDoc)\n }\n\n async decodeAppData(hash: string): Promise<void | AnyAppDataDocVersion> {\n try {\n const cidV0 = await getSerializedCID(hash)\n if (!cidV0) throw new CowError('Error getting serialized CID')\n return loadIpfsFromCid(cidV0)\n } catch (e) {\n const error = e as CowError\n log.error('Error decoding AppData:', error)\n throw new CowError('Error decoding AppData: ' + error.message)\n }\n }\n\n async cidToAppDataHex(ipfsHash: string): Promise<string | void> {\n const { CID } = await import('multiformats/cid')\n\n const { digest } = CID.parse(ipfsHash).multihash\n return `0x${Buffer.from(digest).toString('hex')}`\n }\n\n async appDataHexToCid(hash: string): Promise<string | void> {\n const cidV0 = await getSerializedCID(hash)\n if (!cidV0) throw new CowError('Error getting serialized CID')\n return cidV0\n }\n\n /**\n * Calculates appDataHash WITHOUT publishing file to IPFS\n *\n * This method is intended to quickly generate the appDataHash independent\n * of IPFS upload/pinning\n * The hash is deterministic thus uploading it to IPFS will give you the same\n * result\n *\n * WARNING!\n * One important caveat is that - like `uploadMetadataDocToIpfs` method - the\n * calculation is done with a stringified file without a new line at the end.\n * That means that you will get different results if the file is uploaded\n * directly as a file. For example:\n *\n * Consider the content `hello world`.\n *\n * Using IPFS's cli tool to updload a file with the contents above\n * (`ipfs add file`), it'll have the line ending and result in this CIDv0:\n * QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o\n *\n * While using this method - and `uploadMetadataDocToIpfs` - will give you\n * this CIDv0:\n * Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD\n *\n * @param appData\n */\n async calculateAppDataHash(appData: AnyAppDataDocVersion): Promise<IpfsHashInfo | void> {\n const validation = await this.validateAppDataDoc(appData)\n if (!validation?.success) {\n throw new CowError('Invalid appData provided', validation?.errors)\n }\n\n try {\n const cidV0 = await calculateIpfsCidV0(appData)\n const appDataHash = await this.cidToAppDataHex(cidV0)\n\n if (!appDataHash) {\n throw new CowError(`Could not extract appDataHash from calculated cidV0 ${cidV0}`)\n }\n\n return { cidV0, appDataHash }\n } catch (e) {\n const error = e as CowError\n throw new CowError('Failed to calculate appDataHash', error.message)\n }\n }\n\n async uploadMetadataDocToIpfs(appDataDoc: AnyAppDataDocVersion): Promise<string | void> {\n const { IpfsHash } = await pinJSONToIPFS(appDataDoc, this.context.ipfs)\n return this.cidToAppDataHex(IpfsHash)\n }\n}\n","import { CowError } from './common'\nimport { Ipfs } from './context'\nimport { AnyAppDataDocVersion } from '../api/metadata/types'\nimport { DEFAULT_IPFS_WRITE_URI } from '../constants'\n\ntype PinataPinResponse = {\n IpfsHash: string\n PinSize: number\n Timestamp: string\n}\n\nexport async function pinJSONToIPFS(\n file: unknown,\n { writeUri = DEFAULT_IPFS_WRITE_URI, pinataApiKey = '', pinataApiSecret = '' }: Ipfs\n): Promise<PinataPinResponse> {\n const { default: fetch } = await import('cross-fetch')\n\n if (!pinataApiKey || !pinataApiSecret) {\n throw new CowError('You need to pass IPFS api credentials.')\n }\n\n const body = JSON.stringify({\n pinataContent: file,\n pinataMetadata: { name: 'appData' },\n })\n\n const pinataUrl = `${writeUri}/pinning/pinJSONToIPFS`\n\n const response = await fetch(pinataUrl, {\n method: 'POST',\n body,\n headers: {\n 'Content-Type': 'application/json',\n pinata_api_key: pinataApiKey,\n pinata_secret_api_key: pinataApiSecret,\n },\n })\n\n const data = await response.json()\n\n if (response.status !== 200) {\n throw new Error(data.error.details || data.error)\n }\n\n return data\n}\n\nexport async function calculateIpfsCidV0(doc: AnyAppDataDocVersion): Promise<string> {\n const docString = JSON.stringify(doc)\n\n const { of } = await import('ipfs-only-hash')\n return of(docString, { cidVersion: 0 })\n}\n","import { Signer } from 'ethers'\nimport log from 'loglevel'\nimport { CowError, logPrefix } from './common'\nimport { SupportedChainId as ChainId, SupportedChainId } from '../constants/chains'\nimport { DEFAULT_APP_DATA_HASH, DEFAULT_IPFS_READ_URI, DEFAULT_IPFS_WRITE_URI } from '../constants'\n\nexport type Env = 'prod' | 'staging'\n\nexport interface Ipfs {\n uri?: string\n writeUri?: string\n readUri?: string\n pinataApiKey?: string\n pinataApiSecret?: string\n}\n\nexport interface CowContext {\n appDataHash?: string\n env?: Env\n signer?: Signer\n ipfs?: Ipfs\n subgraphBaseUrls?: Partial<Record<SupportedChainId, string>>\n}\n\nexport const DefaultCowContext: { appDataHash: string; ipfs: Ipfs; env: Env } = {\n appDataHash: DEFAULT_APP_DATA_HASH,\n env: 'prod',\n ipfs: {\n readUri: DEFAULT_IPFS_READ_URI,\n writeUri: DEFAULT_IPFS_WRITE_URI,\n pinataApiKey: '',\n pinataApiSecret: '',\n },\n}\n\n/**\n *\n *\n * @export\n * @class Context\n * @implements {Required<CowContext>}\n */\nexport class Context implements Partial<CowContext> {\n updateContext(cowContext: CowContext, chainId: ChainId) {\n this.setParams(chainId, cowContext)\n }\n\n #chainId: ChainId = SupportedChainId.MAINNET\n #context: CowContext = DefaultCowContext\n\n constructor(chainId: ChainId, context: CowContext) {\n this.setParams(chainId, context)\n }\n\n private setParams(chainId: ChainId, context: CowContext) {\n this.#chainId = this.updateChainId(chainId)\n this.#context = {\n ...DefaultCowContext,\n ...context,\n ipfs: {\n ...DefaultCowContext.ipfs,\n ...context.ipfs,\n },\n }\n }\n\n updateChainId(chainId: ChainId) {\n if (!ChainId[chainId]) {\n throw new CowError(`Invalid chainId: ${chainId}`)\n }\n\n log.debug(logPrefix, `Updating chainId to: ${chainId}`)\n\n this.#chainId = chainId\n return chainId\n }\n\n get chainId(): Promise<ChainId> {\n const provider = this.#context.signer?.provider\n if (!provider) {\n return Promise.resolve(this.#chainId)\n }\n\n log.debug(logPrefix, 'Getting chainId from provider')\n\n const getAndReconciliateNetwork = async () => {\n const network = await provider.getNetwork()\n const chainId = network.chainId\n\n if (chainId !== this.#chainId) {\n log.debug(\n logPrefix,\n `ChainId mismatch: Provider's chainId: ${chainId} vs Context's chainId: ${\n this.#chainId\n }. Updating Context's chainId`\n )\n this.updateChainId(chainId)\n }\n return chainId\n }\n\n return getAndReconciliateNetwork()\n }\n\n get appDataHash(): string {\n return this.#context.appDataHash ?? DefaultCowContext.appDataHash\n }\n\n get env(): Env {\n return this.#context.env || DefaultCowContext.env\n }\n\n get signer(): Signer | undefined {\n return this.#context.signer\n }\n\n get ipfs(): Ipfs {\n return this.#context.ipfs ?? DefaultCowContext.ipfs\n }\n\n get subgraphBaseUrls(): Partial<Record<SupportedChainId, string>> {\n return this.#context.subgraphBaseUrls || {}\n }\n}\n","import { OrderKind } from '@cowprotocol/contracts'\n\ninterface Market<T = string> {\n baseToken: T\n quoteToken: T\n}\n\nexport interface CanonicalMarketParams<T> {\n sellToken: T\n buyToken: T\n kind: OrderKind\n}\n\nexport interface TokensFromMarketParams<T> extends Market<T> {\n kind: OrderKind\n}\n\nexport function getCanonicalMarket<T>({ sellToken, buyToken, kind }: CanonicalMarketParams<T>): Market<T> {\n // TODO: Implement smarter logic https://github.com/cowprotocol/explorer/issues/9\n\n // Not big reasoning on my selection of what is base and what is quote (important thing in this PR is just to do a consistent selection)\n // The used reasoning is:\n // - If I sell apples, the quote is EUR (buy token)\n // - If I buy apples, the quote is EUR (sell token)\n if (kind === OrderKind.SELL) {\n return {\n baseToken: sellToken,\n quoteToken: buyToken,\n }\n } else {\n return {\n baseToken: buyToken,\n quoteToken: sellToken,\n }\n }\n}\n\nexport function getTokensFromMarket<T>({\n quoteToken,\n baseToken,\n kind,\n}: TokensFromMarketParams<T>): Omit<CanonicalMarketParams<T>, 'kind'> {\n if (kind === OrderKind.SELL) {\n return {\n sellToken: baseToken,\n buyToken: quoteToken,\n }\n } else {\n return {\n buyToken: baseToken,\n sellToken: quoteToken,\n }\n }\n}\n","import log from 'loglevel'\nimport { CowError } from '../../../utils/common'\n\ninterface ValidationError {\n field: string\n code: number\n reason: string\n}\n\nexport interface ZeroXErrorResponse {\n code: number\n reason: string\n validationErrors?: ValidationError[]\n}\n\nexport const logPrefix = '0x-sdk:'\nexport default class ZeroXError extends CowError {\n name = 'ZeroXError'\n description\n message\n\n // Status 400 errors - https://docs.0x.org/0x-api-swap/api-references#introduction\n public static async getErrorMessage(response: Response) {\n try {\n const errorResponse: ZeroXErrorResponse = await response.json()\n\n if (errorResponse.validationErrors?.length) {\n const errorMessage = errorResponse.validationErrors?.[0].reason || errorResponse.reason\n // shouldn't fall through as this error constructor expects the error code to exist but just in case\n return errorMessage\n } else if (errorResponse?.reason) {\n log.error(logPrefix, 'Unknown validation reason for bad price request', errorResponse)\n return errorResponse.reason\n } else {\n throw new Error('Error response body properties \"reason\" and \"validationErrors\" missing.')\n }\n } catch (error) {\n const isError = error instanceof Error\n log.error(\n logPrefix,\n 'Error handling a 4xx error. Likely a problem deserialising the JSON response.',\n isError && error?.message\n )\n return isError\n ? error?.message\n : 'Price fetch failed. This may be due to a server or network connectivity issue. Please try again later.'\n }\n }\n\n static async getErrorFromStatusCode(response: Response) {\n switch (response.status) {\n case 400:\n return this.getErrorMessage(response)\n\n case 404:\n return 'Not found'\n case 429:\n return 'Too many requests - Rate limit exceeded'\n case 500:\n return 'Internal server error'\n case 501:\n return 'Not Implemented'\n case 503:\n return 'Server Error - Too many open connections'\n\n default:\n log.error(logPrefix, 'Error fetching quote, status code:', response.status || 'unknown')\n return 'Error fetching quote'\n }\n }\n\n constructor(apiError: ZeroXErrorResponse) {\n super(apiError.reason, apiError.code.toString())\n this.description = apiError.validationErrors?.[0].reason || apiError.reason\n this.message = apiError.reason\n }\n}\n","import { OrderKind } from '@cowprotocol/contracts'\nimport log from 'loglevel'\nimport { SupportedChainId } from '../../constants/chains'\nimport { objectToQueryString, CowError } from '../../utils/common'\nimport { PriceInformation, PriceQuoteLegacyParams } from '../cow/types'\nimport ZeroXError, { ZeroXErrorResponse, logPrefix } from './error'\nimport { ZeroXOptions, ZeroXQuote } from './types'\n\nexport function get0xUrls(): Partial<Record<SupportedChainId, string>> {\n // Support: Mainnet, Ropsten, Polygon, Binance Smart Chain\n // See https://0x.org/docs/api#introduction\n return {\n [SupportedChainId.MAINNET]: 'https://api.0x.org/swap',\n }\n}\n\nexport function normaliseQuoteResponse(priceRaw: ZeroXQuote | null, kind: OrderKind): PriceInformation | null {\n if (!priceRaw || !priceRaw.price) {\n return null\n }\n\n const { sellAmount, buyAmount, sellTokenAddress, buyTokenAddress } = priceRaw\n\n if (kind === OrderKind.BUY) {\n return { amount: sellAmount, token: sellTokenAddress }\n } else {\n return { amount: buyAmount, token: buyTokenAddress }\n }\n}\n\nexport function getMatchaChainId(chainId: SupportedChainId): SupportedChainId | null {\n switch (chainId) {\n // Support: Mainnet, Ropsten, Polygon, Binance Smart Chain\n // See https://0x.org/docs/api#introduction\n // but we only support mainnet of that list so..\n case SupportedChainId.MAINNET:\n return chainId\n\n default:\n // Unsupported network\n return null\n }\n}\n\nexport function optionsToMatchaParamsUrl({\n excludedSources,\n affiliateAddress,\n}: {\n excludedSources: ZeroXOptions['excludedSources']\n affiliateAddress: string\n}): string {\n const excludedSourceString = extractExcludedSources({ excludedSources })\n\n return objectToQueryString({ excludedSources: excludedSourceString, affiliateAddress })\n}\n\nexport async function handleQuoteResponse<T = unknown, P extends PriceQuoteLegacyParams = PriceQuoteLegacyParams>(\n response: Response,\n params?: P\n): Promise<T> {\n if (!response.ok) {\n const errorObj: ZeroXErrorResponse = await response.clone().json()\n\n let priceError\n if (errorObj?.code && errorObj?.reason) {\n priceError = new ZeroXError(errorObj)\n } else {\n const errorMessage = await ZeroXError.getErrorFromStatusCode(response.clone())\n priceError = new ZeroXError({ code: response.status, reason: errorMessage })\n }\n\n if (params) {\n const { quoteToken, baseToken } = params\n log.error(logPrefix, `Error querying fee from API - quoteToken: ${quoteToken}, baseToken: ${baseToken}`)\n }\n\n throw priceError\n } else {\n return response.json()\n }\n}\n\nexport function throwOrReturnAffiliateAddress({\n affiliateAddressMap,\n chainId,\n}: {\n affiliateAddressMap: ZeroXOptions['affiliateAddressMap']\n chainId: SupportedChainId\n}): string {\n const affiliateAddress = affiliateAddressMap[chainId]\n if (!affiliateAddress) {\n throw _getMissingAffiliateAddressError({ affiliateAddressMap, chainId })\n }\n\n return affiliateAddress\n}\n\nexport function extractExcludedSources({ excludedSources }: Pick<ZeroXOptions, 'excludedSources'>) {\n return excludedSources.length > 0 ? excludedSources.join(',') : ''\n}\n\nfunction _getMissingAffiliateAddressError(params: Record<string, unknown>): CowError {\n return new CowError(`Invalid affiliate address! Parameters passed: ${JSON.stringify(params, null, 2)}`)\n}\n","import { OrderKind } from '@cowprotocol/contracts'\nimport log from 'loglevel'\nimport { COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS } from '../../constants'\nimport { SupportedChainId } from '../../constants/chains'\nimport { objectToQueryString } from '../../utils/common'\nimport { Context } from '../../utils/context'\nimport { getTokensFromMarket } from '../../utils/market'\nimport { toErc20Address } from '../../utils/tokens'\n\nimport BaseApi from '../base'\n\nimport { Options, PriceQuoteLegacyParams } from '../cow/types'\nimport { logPrefix } from './error'\nimport { ERC20BridgeSource, ZeroXOptions, ZeroXQuote } from './types'\nimport {\n extractExcludedSources,\n get0xUrls,\n getMatchaChainId,\n handleQuoteResponse,\n optionsToMatchaParamsUrl,\n throwOrReturnAffiliateAddress,\n} from './utils'\n\nconst EXCLUDED_SOURCES: ERC20BridgeSource[] = []\nconst API_VERSION = 'v1'\n\nexport class ZeroXApi extends BaseApi {\n ZEROX_OPTIONS: ZeroXOptions\n ZEROX_OPTIONS_URL: string\n\n constructor(chainId: SupportedChainId, options: Partial<ZeroXOptions> | undefined) {\n super({ context: new Context(chainId, {}), name: '0x', apiVersion: API_VERSION, getApiUrl: get0xUrls })\n\n // get defaults if necessary\n const affiliateAddressMap = options?.affiliateAddressMap || COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS\n const excludedSources = options?.excludedSources || EXCLUDED_SOURCES\n // checks if missing affiliate address from address map and throws if undefined else returns address string\n const affiliateAddress = throwOrReturnAffiliateAddress({\n affiliateAddressMap,\n chainId,\n })\n\n this.ZEROX_OPTIONS = { affiliateAddressMap, excludedSources }\n this.ZEROX_OPTIONS_URL = optionsToMatchaParamsUrl({\n excludedSources: excludedSources,\n affiliateAddress,\n })\n }\n\n async getQuote(params: PriceQuoteLegacyParams, options: Options = {}): Promise<ZeroXQuote | null> {\n const { amount, baseToken, quoteToken, kind } = params\n const { chainId: customChainId, env = this.context.env } = options\n const chainId = customChainId || (await this.context.chainId)\n // this is handled via an error on L51 via the fetch call\n // but we can handle it here to control the flow better\n const networkId = getMatchaChainId(chainId)\n if (networkId == null) {\n log.debug(logPrefix, 'Network not supported')\n // Unsupported network\n return null\n }\n\n log.debug(logPrefix, `Get price from ${this.API_NAME}`, params, this.ZEROX_OPTIONS)\n\n // Buy/sell token and side (sell/buy)\n const { sellToken, buyToken } = getTokensFromMarket({\n baseToken: toErc20Address(baseToken, chainId),\n quoteToken: toErc20Address(quoteToken, chainId),\n kind,\n })\n const affiliateAddress = throwOrReturnAffiliateAddress({\n affiliateAddressMap: this.ZEROX_OPTIONS.affiliateAddressMap,\n chainId,\n })\n const swapSide = kind === OrderKind.BUY ? 'buyAmount' : 'sellAmount'\n const response = await this.get(\n `/price${objectToQueryString({\n sellToken,\n buyToken,\n [swapSide]: amount,\n affiliateAddress,\n excludedSources: extractExcludedSources(this.ZEROX_OPTIONS),\n })}`,\n { chainId, env }\n ).catch((error) => {\n log.error(`Error getting ${this.API_NAME} price quote:`, error)\n throw new Error(error)\n })\n\n return handleQuoteResponse(response)\n }\n\n public async updateOptions({ affiliateAddressMap, excludedSources }: Partial<ZeroXOptions>) {\n const chainId = await this.context.chainId\n\n if (affiliateAddressMap) {\n log.debug(logPrefix, 'Updating 0x options affiliate address to', affiliateAddressMap)\n this.ZEROX_OPTIONS.affiliateAddressMap = affiliateAddressMap\n }\n if (excludedSources) {\n log.debug(logPrefix, 'Updating 0x options excludedSources to', excludedSources)\n this.ZEROX_OPTIONS.excludedSources = excludedSources\n }\n\n const affiliateAddress = throwOrReturnAffiliateAddress({\n affiliateAddressMap: this.ZEROX_OPTIONS.affiliateAddressMap,\n chainId,\n })\n\n this.ZEROX_OPTIONS_URL = optionsToMatchaParamsUrl({\n ...this.ZEROX_OPTIONS,\n affiliateAddress,\n })\n }\n}\n","import { NetworkID, ParaSwap } from 'paraswap'\nimport { ALL_SUPPORTED_CHAIN_IDS } from '../../constants/chains'\nimport { ParaswapLibMap } from './types'\n\nexport const BASE_URL = 'https://apiv5.paraswap.io'\nexport const API_NAME = 'Paraswap'\nexport const DEFAULT_RATE_OPTIONS = {\n maxImpact: 100,\n excludeDEXS: 'ParaSwapPool4',\n}\nexport const LOG_PREFIX = 'ParaswapApi'\nexport const LIB: ParaswapLibMap = new Map([\n [1, new ParaSwap(1, BASE_URL)],\n [3, new ParaSwap(3, BASE_URL)],\n [56, new ParaSwap(56, BASE_URL)],\n [137, new ParaSwap(137, BASE_URL)],\n [250, new ParaSwap(250, BASE_URL)],\n [42161, new ParaSwap(42161, BASE_URL)],\n [43114, new ParaSwap(43114, BASE_URL)],\n])\nexport const COMPATIBLE_PARASWAP_CHAINS_WITH_COW = ALL_SUPPORTED_CHAIN_IDS.filter((chain: number) =>\n LIB.has(chain as NetworkID)\n)\n","import log from 'loglevel'\nimport { APIError } from 'paraswap'\nimport { CowError } from '../../../utils/common'\nimport { LOG_PREFIX } from '../constants'\n\nexport default class ParaswapError extends CowError {\n name = 'ParaswapError'\n description\n message\n\n public static async getErrorMessage(response: Response) {\n try {\n const errorResponse: APIError = await response.json()\n\n if (errorResponse.data?.error || errorResponse.message) {\n const errorMessage = errorResponse.data?.error || errorResponse.message\n // shouldn't fall through as this error constructor expects the error code to exist but just in case\n return errorMessage\n } else {\n throw new Error('Error response body properties \"data.error\" and \"message\" missing.')\n }\n } catch (error) {\n const isError = error instanceof Error\n log.error(\n LOG_PREFIX,\n 'Error handling a 4xx error. Likely a problem deserialising the JSON response.',\n isError && error?.message\n )\n return isError\n ? error?.message\n : 'Price fetch failed. This may be due to a server or network connectivity issue. Please try again later.'\n }\n }\n\n static async getErrorFromStatusCode(response: Response) {\n switch (response.status) {\n case 400:\n return this.getErrorMessage(response)\n\n case 404:\n return 'Not found'\n\n default:\n log.error(LOG_PREFIX, 'Error fetching quote, status code:', response.status || 'unknown')\n return 'Error fetching quote'\n }\n }\n\n constructor(apiError: APIError) {\n super(apiError.message, apiError.status?.toString())\n this.description = apiError.data?.error || apiError.message\n this.message = apiError.message\n }\n}\n","import { SupportedChainId } from '../../constants/chains'\nimport { ParaswapPriceQuoteParams } from './types'\nimport { toErc20Address } from '../../utils/tokens'\nimport { OptimalRate } from 'paraswap-core'\nimport { APIError, NetworkID } from 'paraswap'\nimport ParaswapError from './error'\n\nexport function getValidParams(chainId: SupportedChainId, params: ParaswapPriceQuoteParams) {\n const { baseToken: baseTokenAux, quoteToken: quoteTokenAux, userAddress } = params\n const baseToken = toErc20Address(baseTokenAux, chainId)\n const quoteToken = toErc20Address(quoteTokenAux, chainId)\n\n return { ...params, baseToken, quoteToken, userAddress: userAddress ?? undefined }\n}\n\nexport function isGetRateSuccess(rateResult: OptimalRate | APIError): rateResult is OptimalRate {\n return !!(rateResult as OptimalRate)?.destAmount\n}\n\nexport function getPriceQuoteFromError(error: APIError): OptimalRate | null {\n if (error?.message === 'ESTIMATED_LOSS_GREATER_THAN_MAX_IMPACT' && error.data && error.data.priceRoute) {\n // If the price impact is too big, it still give you the estimation\n return error.data.priceRoute\n } else {\n return null\n }\n}\n\n// ParaSwap supported: MAINNET, ROPSTEN, BSC, POLYGON, AVALANCHE C, FANTOM OPERA, ARBITRUM ONE\nexport function getParaswapChainId(chainId: SupportedChainId): NetworkID | null {\n switch (chainId) {\n case SupportedChainId.MAINNET:\n // case SupportedChainId.POLYGON:\n return chainId as NetworkID\n\n default:\n // Unsupported network\n return null\n }\n}\n\nexport function handleResponse(rateResult: OptimalRate | APIError) {\n if (isGetRateSuccess(rateResult)) {\n // Success getting the price\n return rateResult\n } else {\n // Error getting the price\n const priceQuote = getPriceQuoteFromError(rateResult)\n if (priceQuote) {\n return priceQuote\n } else {\n throw new ParaswapError(rateResult)\n }\n }\n}\n","export type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n BigDecimal: any;\n BigInt: any;\n Bytes: any;\n};\n\nexport type BlockChangedFilter = {\n number_gte: Scalars['Int'];\n};\n\nexport type Block_Height = {\n hash?: InputMaybe<Scalars['Bytes']>;\n number?: InputMaybe<Scalars['Int']>;\n number_gte?: InputMaybe<Scalars['Int']>;\n};\n\nexport type Bundle = {\n __typename?: 'Bundle';\n /** Price of ETH in usd */\n ethPriceUSD: Scalars['BigDecimal'];\n /** Singleton #1 */\n id: Scalars['ID'];\n};\n\nexport type Bundle_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n ethPriceUSD?: InputMaybe<Scalars['BigDecimal']>;\n ethPriceUSD_gt?: InputMaybe<Scalars['BigDecimal']>;\n ethPriceUSD_gte?: InputMaybe<Scalars['BigDecimal']>;\n ethPriceUSD_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n ethPriceUSD_lt?: InputMaybe<Scalars['BigDecimal']>;\n ethPriceUSD_lte?: InputMaybe<Scalars['BigDecimal']>;\n ethPriceUSD_not?: InputMaybe<Scalars['BigDecimal']>;\n ethPriceUSD_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n};\n\nexport enum Bundle_OrderBy {\n EthPriceUsd = 'ethPriceUSD',\n Id = 'id'\n}\n\nexport type DailyTotal = {\n __typename?: 'DailyTotal';\n /** Total fees in Eth */\n feesEth?: Maybe<Scalars['BigDecimal']>;\n /** Total fees in USD */\n feesUsd?: Maybe<Scalars['BigDecimal']>;\n /** Day timestamp */\n id: Scalars['ID'];\n /** Number of trades */\n numberOfTrades: Scalars['BigInt'];\n /** Total number of orders placed */\n orders: Scalars['BigInt'];\n /** Total number of batches settled */\n settlements: Scalars['BigInt'];\n /** Start day timestamp */\n timestamp: Scalars['Int'];\n /** Traded tokens */\n tokens: Array<Token>;\n /** Total number of tokens traded */\n totalTokens: Scalars['BigInt'];\n /** Total traded volume in ETH */\n volumeEth?: Maybe<Scalars['BigDecimal']>;\n /** Total traded volume in USD */\n volumeUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\n\nexport type DailyTotalTokensArgs = {\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Token_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n where?: InputMaybe<Token_Filter>;\n};\n\nexport type DailyTotal_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n feesEth?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n feesEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_not?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n feesUsd?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n feesUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n numberOfTrades?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_gt?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_gte?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n numberOfTrades_lt?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_lte?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_not?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n orders?: InputMaybe<Scalars['BigInt']>;\n orders_gt?: InputMaybe<Scalars['BigInt']>;\n orders_gte?: InputMaybe<Scalars['BigInt']>;\n orders_in?: InputMaybe<Array<Scalars['BigInt']>>;\n orders_lt?: InputMaybe<Scalars['BigInt']>;\n orders_lte?: InputMaybe<Scalars['BigInt']>;\n orders_not?: InputMaybe<Scalars['BigInt']>;\n orders_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n settlements?: InputMaybe<Scalars['BigInt']>;\n settlements_gt?: InputMaybe<Scalars['BigInt']>;\n settlements_gte?: InputMaybe<Scalars['BigInt']>;\n settlements_in?: InputMaybe<Array<Scalars['BigInt']>>;\n settlements_lt?: InputMaybe<Scalars['BigInt']>;\n settlements_lte?: InputMaybe<Scalars['BigInt']>;\n settlements_not?: InputMaybe<Scalars['BigInt']>;\n settlements_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n timestamp?: InputMaybe<Scalars['Int']>;\n timestamp_gt?: InputMaybe<Scalars['Int']>;\n timestamp_gte?: InputMaybe<Scalars['Int']>;\n timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n timestamp_lt?: InputMaybe<Scalars['Int']>;\n timestamp_lte?: InputMaybe<Scalars['Int']>;\n timestamp_not?: InputMaybe<Scalars['Int']>;\n timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n tokens?: InputMaybe<Array<Scalars['String']>>;\n tokens_?: InputMaybe<Token_Filter>;\n tokens_contains?: InputMaybe<Array<Scalars['String']>>;\n tokens_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n tokens_not?: InputMaybe<Array<Scalars['String']>>;\n tokens_not_contains?: InputMaybe<Array<Scalars['String']>>;\n tokens_not_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n totalTokens?: InputMaybe<Scalars['BigInt']>;\n totalTokens_gt?: InputMaybe<Scalars['BigInt']>;\n totalTokens_gte?: InputMaybe<Scalars['BigInt']>;\n totalTokens_in?: InputMaybe<Array<Scalars['BigInt']>>;\n totalTokens_lt?: InputMaybe<Scalars['BigInt']>;\n totalTokens_lte?: InputMaybe<Scalars['BigInt']>;\n totalTokens_not?: InputMaybe<Scalars['BigInt']>;\n totalTokens_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeEth?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum DailyTotal_OrderBy {\n FeesEth = 'feesEth',\n FeesUsd = 'feesUsd',\n Id = 'id',\n NumberOfTrades = 'numberOfTrades',\n Orders = 'orders',\n Settlements = 'settlements',\n Timestamp = 'timestamp',\n Tokens = 'tokens',\n TotalTokens = 'totalTokens',\n VolumeEth = 'volumeEth',\n VolumeUsd = 'volumeUsd'\n}\n\nexport type HourlyTotal = {\n __typename?: 'HourlyTotal';\n /** Total fees in Eth */\n feesEth?: Maybe<Scalars['BigDecimal']>;\n /** Total fees in USD */\n feesUsd?: Maybe<Scalars['BigDecimal']>;\n /** Hour timestamp */\n id: Scalars['ID'];\n /** Number of trades */\n numberOfTrades: Scalars['BigInt'];\n /** Total number of orders placed */\n orders: Scalars['BigInt'];\n /** Total number of batches settled */\n settlements: Scalars['BigInt'];\n /** Start hour timestamp */\n timestamp: Scalars['Int'];\n /** Traded tokens */\n tokens: Array<Token>;\n /** Total number of tokens traded */\n totalTokens: Scalars['BigInt'];\n /** Total traded volume in ETH */\n volumeEth?: Maybe<Scalars['BigDecimal']>;\n /** Total traded volume in USD */\n volumeUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\n\nexport type HourlyTotalTokensArgs = {\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Token_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n where?: InputMaybe<Token_Filter>;\n};\n\nexport type HourlyTotal_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n feesEth?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n feesEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_not?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n feesUsd?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n feesUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n numberOfTrades?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_gt?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_gte?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n numberOfTrades_lt?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_lte?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_not?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n orders?: InputMaybe<Scalars['BigInt']>;\n orders_gt?: InputMaybe<Scalars['BigInt']>;\n orders_gte?: InputMaybe<Scalars['BigInt']>;\n orders_in?: InputMaybe<Array<Scalars['BigInt']>>;\n orders_lt?: InputMaybe<Scalars['BigInt']>;\n orders_lte?: InputMaybe<Scalars['BigInt']>;\n orders_not?: InputMaybe<Scalars['BigInt']>;\n orders_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n settlements?: InputMaybe<Scalars['BigInt']>;\n settlements_gt?: InputMaybe<Scalars['BigInt']>;\n settlements_gte?: InputMaybe<Scalars['BigInt']>;\n settlements_in?: InputMaybe<Array<Scalars['BigInt']>>;\n settlements_lt?: InputMaybe<Scalars['BigInt']>;\n settlements_lte?: InputMaybe<Scalars['BigInt']>;\n settlements_not?: InputMaybe<Scalars['BigInt']>;\n settlements_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n timestamp?: InputMaybe<Scalars['Int']>;\n timestamp_gt?: InputMaybe<Scalars['Int']>;\n timestamp_gte?: InputMaybe<Scalars['Int']>;\n timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n timestamp_lt?: InputMaybe<Scalars['Int']>;\n timestamp_lte?: InputMaybe<Scalars['Int']>;\n timestamp_not?: InputMaybe<Scalars['Int']>;\n timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n tokens?: InputMaybe<Array<Scalars['String']>>;\n tokens_?: InputMaybe<Token_Filter>;\n tokens_contains?: InputMaybe<Array<Scalars['String']>>;\n tokens_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n tokens_not?: InputMaybe<Array<Scalars['String']>>;\n tokens_not_contains?: InputMaybe<Array<Scalars['String']>>;\n tokens_not_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n totalTokens?: InputMaybe<Scalars['BigInt']>;\n totalTokens_gt?: InputMaybe<Scalars['BigInt']>;\n totalTokens_gte?: InputMaybe<Scalars['BigInt']>;\n totalTokens_in?: InputMaybe<Array<Scalars['BigInt']>>;\n totalTokens_lt?: InputMaybe<Scalars['BigInt']>;\n totalTokens_lte?: InputMaybe<Scalars['BigInt']>;\n totalTokens_not?: InputMaybe<Scalars['BigInt']>;\n totalTokens_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeEth?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum HourlyTotal_OrderBy {\n FeesEth = 'feesEth',\n FeesUsd = 'feesUsd',\n Id = 'id',\n NumberOfTrades = 'numberOfTrades',\n Orders = 'orders',\n Settlements = 'settlements',\n Timestamp = 'timestamp',\n Tokens = 'tokens',\n TotalTokens = 'totalTokens',\n VolumeEth = 'volumeEth',\n VolumeUsd = 'volumeUsd'\n}\n\nexport type Order = {\n __typename?: 'Order';\n /** Trade's OrderUid to hex string */\n id: Scalars['ID'];\n /** block's timestamp on invalidate event */\n invalidateTimestamp?: Maybe<Scalars['Int']>;\n /** Boolean value to show if the order is signed */\n isSigned?: Maybe<Scalars['Boolean']>;\n /** Boolean value true by default unless is invalidated by the event */\n isValid?: Maybe<Scalars['Boolean']>;\n /** Trade's owner or presign User */\n owner?: Maybe<User>;\n /** block's timestamp on presign event */\n presignTimestamp?: Maybe<Scalars['Int']>;\n /** Array of trades on the order */\n trades?: Maybe<Array<Trade>>;\n /** block's timestamp on trade event */\n tradesTimestamp?: Maybe<Scalars['Int']>;\n};\n\n\nexport type OrderTradesArgs = {\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Trade_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n where?: InputMaybe<Trade_Filter>;\n};\n\n/** Defines the order direction, either ascending or descending */\nexport enum OrderDirection {\n Asc = 'asc',\n Desc = 'desc'\n}\n\nexport type Order_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n invalidateTimestamp?: InputMaybe<Scalars['Int']>;\n invalidateTimestamp_gt?: InputMaybe<Scalars['Int']>;\n invalidateTimestamp_gte?: InputMaybe<Scalars['Int']>;\n invalidateTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n invalidateTimestamp_lt?: InputMaybe<Scalars['Int']>;\n invalidateTimestamp_lte?: InputMaybe<Scalars['Int']>;\n invalidateTimestamp_not?: InputMaybe<Scalars['Int']>;\n invalidateTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n isSigned?: InputMaybe<Scalars['Boolean']>;\n isSigned_in?: InputMaybe<Array<Scalars['Boolean']>>;\n isSigned_not?: InputMaybe<Scalars['Boolean']>;\n isSigned_not_in?: InputMaybe<Array<Scalars['Boolean']>>;\n isValid?: InputMaybe<Scalars['Boolean']>;\n isValid_in?: InputMaybe<Array<Scalars['Boolean']>>;\n isValid_not?: InputMaybe<Scalars['Boolean']>;\n isValid_not_in?: InputMaybe<Array<Scalars['Boolean']>>;\n owner?: InputMaybe<Scalars['String']>;\n owner_?: InputMaybe<User_Filter>;\n owner_contains?: InputMaybe<Scalars['String']>;\n owner_contains_nocase?: InputMaybe<Scalars['String']>;\n owner_ends_with?: InputMaybe<Scalars['String']>;\n owner_ends_with_nocase?: InputMaybe<Scalars['String']>;\n owner_gt?: InputMaybe<Scalars['String']>;\n owner_gte?: InputMaybe<Scalars['String']>;\n owner_in?: InputMaybe<Array<Scalars['String']>>;\n owner_lt?: InputMaybe<Scalars['String']>;\n owner_lte?: InputMaybe<Scalars['String']>;\n owner_not?: InputMaybe<Scalars['String']>;\n owner_not_contains?: InputMaybe<Scalars['String']>;\n owner_not_contains_nocase?: InputMaybe<Scalars['String']>;\n owner_not_ends_with?: InputMaybe<Scalars['String']>;\n owner_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n owner_not_in?: InputMaybe<Array<Scalars['String']>>;\n owner_not_starts_with?: InputMaybe<Scalars['String']>;\n owner_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n owner_starts_with?: InputMaybe<Scalars['String']>;\n owner_starts_with_nocase?: InputMaybe<Scalars['String']>;\n presignTimestamp?: InputMaybe<Scalars['Int']>;\n presignTimestamp_gt?: InputMaybe<Scalars['Int']>;\n presignTimestamp_gte?: InputMaybe<Scalars['Int']>;\n presignTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n presignTimestamp_lt?: InputMaybe<Scalars['Int']>;\n presignTimestamp_lte?: InputMaybe<Scalars['Int']>;\n presignTimestamp_not?: InputMaybe<Scalars['Int']>;\n presignTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n tradesTimestamp?: InputMaybe<Scalars['Int']>;\n tradesTimestamp_gt?: InputMaybe<Scalars['Int']>;\n tradesTimestamp_gte?: InputMaybe<Scalars['Int']>;\n tradesTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n tradesTimestamp_lt?: InputMaybe<Scalars['Int']>;\n tradesTimestamp_lte?: InputMaybe<Scalars['Int']>;\n tradesTimestamp_not?: InputMaybe<Scalars['Int']>;\n tradesTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n trades_?: InputMaybe<Trade_Filter>;\n};\n\nexport enum Order_OrderBy {\n Id = 'id',\n InvalidateTimestamp = 'invalidateTimestamp',\n IsSigned = 'isSigned',\n IsValid = 'isValid',\n Owner = 'owner',\n PresignTimestamp = 'presignTimestamp',\n Trades = 'trades',\n TradesTimestamp = 'tradesTimestamp'\n}\n\nexport type Pair = {\n __typename?: 'Pair';\n /** Token0-token1 sorted by token0 < token1 */\n id: Scalars['ID'];\n /** The token 0 address lower than token1 */\n token0: Token;\n /** Token0 last trade price */\n token0Price?: Maybe<Scalars['BigDecimal']>;\n /** Token 0 price expressed in token1 in the last trade */\n token0relativePrice?: Maybe<Scalars['BigDecimal']>;\n /** The token 1 address greater than token0 */\n token1: Token;\n /** Token1 last trade price */\n token1Price?: Maybe<Scalars['BigDecimal']>;\n /** Token 1 price expressed in token1 in the last trade */\n token1relativePrice?: Maybe<Scalars['BigDecimal']>;\n /** Total volume of token 0 traded */\n volumeToken0?: Maybe<Scalars['BigInt']>;\n /** Total volume of token 1 traded */\n volumeToken1?: Maybe<Scalars['BigInt']>;\n /** Total volume in Eth */\n volumeTradedEth?: Maybe<Scalars['BigDecimal']>;\n /** Total volume in Usd */\n volumeTradedUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\nexport type PairDaily = {\n __typename?: 'PairDaily';\n /** token0-token1-timestamp sorted by token0 < token1 */\n id: Scalars['ID'];\n /** Start day timestamp */\n timestamp: Scalars['Int'];\n /** The token 0 address lower than token1 */\n token0: Token;\n /** Token0 last trade price */\n token0Price?: Maybe<Scalars['BigDecimal']>;\n /** Token 0 price expressed in token1 in the last trade */\n token0relativePrice?: Maybe<Scalars['BigDecimal']>;\n /** The token 1 address greater than token0 */\n token1: Token;\n /** Token1 last trade price */\n token1Price?: Maybe<Scalars['BigDecimal']>;\n /** Token 1 price expressed in token1 in the last trade */\n token1relativePrice?: Maybe<Scalars['BigDecimal']>;\n /** Total volume of token 0 traded */\n volumeToken0?: Maybe<Scalars['BigInt']>;\n /** Total volume of token 1 traded */\n volumeToken1?: Maybe<Scalars['BigInt']>;\n /** Total volume in Eth */\n volumeTradedEth?: Maybe<Scalars['BigDecimal']>;\n /** Total volume in Usd */\n volumeTradedUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\nexport type PairDaily_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n timestamp?: InputMaybe<Scalars['Int']>;\n timestamp_gt?: InputMaybe<Scalars['Int']>;\n timestamp_gte?: InputMaybe<Scalars['Int']>;\n timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n timestamp_lt?: InputMaybe<Scalars['Int']>;\n timestamp_lte?: InputMaybe<Scalars['Int']>;\n timestamp_not?: InputMaybe<Scalars['Int']>;\n timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n token0?: InputMaybe<Scalars['String']>;\n token0Price?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_not?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0_?: InputMaybe<Token_Filter>;\n token0_contains?: InputMaybe<Scalars['String']>;\n token0_contains_nocase?: InputMaybe<Scalars['String']>;\n token0_ends_with?: InputMaybe<Scalars['String']>;\n token0_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token0_gt?: InputMaybe<Scalars['String']>;\n token0_gte?: InputMaybe<Scalars['String']>;\n token0_in?: InputMaybe<Array<Scalars['String']>>;\n token0_lt?: InputMaybe<Scalars['String']>;\n token0_lte?: InputMaybe<Scalars['String']>;\n token0_not?: InputMaybe<Scalars['String']>;\n token0_not_contains?: InputMaybe<Scalars['String']>;\n token0_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token0_not_ends_with?: InputMaybe<Scalars['String']>;\n token0_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token0_not_in?: InputMaybe<Array<Scalars['String']>>;\n token0_not_starts_with?: InputMaybe<Scalars['String']>;\n token0_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token0_starts_with?: InputMaybe<Scalars['String']>;\n token0_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token0relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1?: InputMaybe<Scalars['String']>;\n token1Price?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_not?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1_?: InputMaybe<Token_Filter>;\n token1_contains?: InputMaybe<Scalars['String']>;\n token1_contains_nocase?: InputMaybe<Scalars['String']>;\n token1_ends_with?: InputMaybe<Scalars['String']>;\n token1_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token1_gt?: InputMaybe<Scalars['String']>;\n token1_gte?: InputMaybe<Scalars['String']>;\n token1_in?: InputMaybe<Array<Scalars['String']>>;\n token1_lt?: InputMaybe<Scalars['String']>;\n token1_lte?: InputMaybe<Scalars['String']>;\n token1_not?: InputMaybe<Scalars['String']>;\n token1_not_contains?: InputMaybe<Scalars['String']>;\n token1_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token1_not_ends_with?: InputMaybe<Scalars['String']>;\n token1_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token1_not_in?: InputMaybe<Array<Scalars['String']>>;\n token1_not_starts_with?: InputMaybe<Scalars['String']>;\n token1_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token1_starts_with?: InputMaybe<Scalars['String']>;\n token1_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token1relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeToken0?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_gt?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_gte?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeToken0_lt?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_lte?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_not?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeToken1?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_gt?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_gte?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeToken1_lt?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_lte?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_not?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeTradedEth?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeTradedEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeTradedUsd?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeTradedUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum PairDaily_OrderBy {\n Id = 'id',\n Timestamp = 'timestamp',\n Token0 = 'token0',\n Token0Price = 'token0Price',\n Token0relativePrice = 'token0relativePrice',\n Token1 = 'token1',\n Token1Price = 'token1Price',\n Token1relativePrice = 'token1relativePrice',\n VolumeToken0 = 'volumeToken0',\n VolumeToken1 = 'volumeToken1',\n VolumeTradedEth = 'volumeTradedEth',\n VolumeTradedUsd = 'volumeTradedUsd'\n}\n\nexport type PairHourly = {\n __typename?: 'PairHourly';\n /** token0-token1-timestamp sorted by token0 < token1 */\n id: Scalars['ID'];\n /** Start hour timestamp */\n timestamp: Scalars['Int'];\n /** The token 0 address lower than token1 */\n token0: Token;\n /** Token0 last trade price */\n token0Price?: Maybe<Scalars['BigDecimal']>;\n /** Token 0 price expressed in token1 in the last trade */\n token0relativePrice?: Maybe<Scalars['BigDecimal']>;\n /** The token 1 address greater than token0 */\n token1: Token;\n /** Token1 last trade price */\n token1Price?: Maybe<Scalars['BigDecimal']>;\n /** Token 1 price expressed in token1 in the last trade */\n token1relativePrice?: Maybe<Scalars['BigDecimal']>;\n /** Total volume of token 0 traded */\n volumeToken0?: Maybe<Scalars['BigInt']>;\n /** Total volume of token 1 traded */\n volumeToken1?: Maybe<Scalars['BigInt']>;\n /** Total volume in Eth */\n volumeTradedEth?: Maybe<Scalars['BigDecimal']>;\n /** Total volume in Usd */\n volumeTradedUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\nexport type PairHourly_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n timestamp?: InputMaybe<Scalars['Int']>;\n timestamp_gt?: InputMaybe<Scalars['Int']>;\n timestamp_gte?: InputMaybe<Scalars['Int']>;\n timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n timestamp_lt?: InputMaybe<Scalars['Int']>;\n timestamp_lte?: InputMaybe<Scalars['Int']>;\n timestamp_not?: InputMaybe<Scalars['Int']>;\n timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n token0?: InputMaybe<Scalars['String']>;\n token0Price?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_not?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0_?: InputMaybe<Token_Filter>;\n token0_contains?: InputMaybe<Scalars['String']>;\n token0_contains_nocase?: InputMaybe<Scalars['String']>;\n token0_ends_with?: InputMaybe<Scalars['String']>;\n token0_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token0_gt?: InputMaybe<Scalars['String']>;\n token0_gte?: InputMaybe<Scalars['String']>;\n token0_in?: InputMaybe<Array<Scalars['String']>>;\n token0_lt?: InputMaybe<Scalars['String']>;\n token0_lte?: InputMaybe<Scalars['String']>;\n token0_not?: InputMaybe<Scalars['String']>;\n token0_not_contains?: InputMaybe<Scalars['String']>;\n token0_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token0_not_ends_with?: InputMaybe<Scalars['String']>;\n token0_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token0_not_in?: InputMaybe<Array<Scalars['String']>>;\n token0_not_starts_with?: InputMaybe<Scalars['String']>;\n token0_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token0_starts_with?: InputMaybe<Scalars['String']>;\n token0_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token0relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1?: InputMaybe<Scalars['String']>;\n token1Price?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_not?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1_?: InputMaybe<Token_Filter>;\n token1_contains?: InputMaybe<Scalars['String']>;\n token1_contains_nocase?: InputMaybe<Scalars['String']>;\n token1_ends_with?: InputMaybe<Scalars['String']>;\n token1_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token1_gt?: InputMaybe<Scalars['String']>;\n token1_gte?: InputMaybe<Scalars['String']>;\n token1_in?: InputMaybe<Array<Scalars['String']>>;\n token1_lt?: InputMaybe<Scalars['String']>;\n token1_lte?: InputMaybe<Scalars['String']>;\n token1_not?: InputMaybe<Scalars['String']>;\n token1_not_contains?: InputMaybe<Scalars['String']>;\n token1_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token1_not_ends_with?: InputMaybe<Scalars['String']>;\n token1_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token1_not_in?: InputMaybe<Array<Scalars['String']>>;\n token1_not_starts_with?: InputMaybe<Scalars['String']>;\n token1_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token1_starts_with?: InputMaybe<Scalars['String']>;\n token1_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token1relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeToken0?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_gt?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_gte?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeToken0_lt?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_lte?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_not?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeToken1?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_gt?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_gte?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeToken1_lt?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_lte?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_not?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeTradedEth?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeTradedEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeTradedUsd?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeTradedUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum PairHourly_OrderBy {\n Id = 'id',\n Timestamp = 'timestamp',\n Token0 = 'token0',\n Token0Price = 'token0Price',\n Token0relativePrice = 'token0relativePrice',\n Token1 = 'token1',\n Token1Price = 'token1Price',\n Token1relativePrice = 'token1relativePrice',\n VolumeToken0 = 'volumeToken0',\n VolumeToken1 = 'volumeToken1',\n VolumeTradedEth = 'volumeTradedEth',\n VolumeTradedUsd = 'volumeTradedUsd'\n}\n\nexport type Pair_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n token0?: InputMaybe<Scalars['String']>;\n token0Price?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_not?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0_?: InputMaybe<Token_Filter>;\n token0_contains?: InputMaybe<Scalars['String']>;\n token0_contains_nocase?: InputMaybe<Scalars['String']>;\n token0_ends_with?: InputMaybe<Scalars['String']>;\n token0_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token0_gt?: InputMaybe<Scalars['String']>;\n token0_gte?: InputMaybe<Scalars['String']>;\n token0_in?: InputMaybe<Array<Scalars['String']>>;\n token0_lt?: InputMaybe<Scalars['String']>;\n token0_lte?: InputMaybe<Scalars['String']>;\n token0_not?: InputMaybe<Scalars['String']>;\n token0_not_contains?: InputMaybe<Scalars['String']>;\n token0_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token0_not_ends_with?: InputMaybe<Scalars['String']>;\n token0_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token0_not_in?: InputMaybe<Array<Scalars['String']>>;\n token0_not_starts_with?: InputMaybe<Scalars['String']>;\n token0_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token0_starts_with?: InputMaybe<Scalars['String']>;\n token0_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token0relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n token0relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1?: InputMaybe<Scalars['String']>;\n token1Price?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_not?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1_?: InputMaybe<Token_Filter>;\n token1_contains?: InputMaybe<Scalars['String']>;\n token1_contains_nocase?: InputMaybe<Scalars['String']>;\n token1_ends_with?: InputMaybe<Scalars['String']>;\n token1_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token1_gt?: InputMaybe<Scalars['String']>;\n token1_gte?: InputMaybe<Scalars['String']>;\n token1_in?: InputMaybe<Array<Scalars['String']>>;\n token1_lt?: InputMaybe<Scalars['String']>;\n token1_lte?: InputMaybe<Scalars['String']>;\n token1_not?: InputMaybe<Scalars['String']>;\n token1_not_contains?: InputMaybe<Scalars['String']>;\n token1_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token1_not_ends_with?: InputMaybe<Scalars['String']>;\n token1_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token1_not_in?: InputMaybe<Array<Scalars['String']>>;\n token1_not_starts_with?: InputMaybe<Scalars['String']>;\n token1_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token1_starts_with?: InputMaybe<Scalars['String']>;\n token1_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token1relativePrice?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1relativePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n token1relativePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeToken0?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_gt?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_gte?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeToken0_lt?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_lte?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_not?: InputMaybe<Scalars['BigInt']>;\n volumeToken0_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeToken1?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_gt?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_gte?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeToken1_lt?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_lte?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_not?: InputMaybe<Scalars['BigInt']>;\n volumeToken1_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeTradedEth?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeTradedEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeTradedUsd?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeTradedUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeTradedUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum Pair_OrderBy {\n Id = 'id',\n Token0 = 'token0',\n Token0Price = 'token0Price',\n Token0relativePrice = 'token0relativePrice',\n Token1 = 'token1',\n Token1Price = 'token1Price',\n Token1relativePrice = 'token1relativePrice',\n VolumeToken0 = 'volumeToken0',\n VolumeToken1 = 'volumeToken1',\n VolumeTradedEth = 'volumeTradedEth',\n VolumeTradedUsd = 'volumeTradedUsd'\n}\n\nexport type Query = {\n __typename?: 'Query';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n bundle?: Maybe<Bundle>;\n bundles: Array<Bundle>;\n dailyTotal?: Maybe<DailyTotal>;\n dailyTotals: Array<DailyTotal>;\n hourlyTotal?: Maybe<HourlyTotal>;\n hourlyTotals: Array<HourlyTotal>;\n order?: Maybe<Order>;\n orders: Array<Order>;\n pair?: Maybe<Pair>;\n pairDailies: Array<PairDaily>;\n pairDaily?: Maybe<PairDaily>;\n pairHourlies: Array<PairHourly>;\n pairHourly?: Maybe<PairHourly>;\n pairs: Array<Pair>;\n settlement?: Maybe<Settlement>;\n settlements: Array<Settlement>;\n token?: Maybe<Token>;\n tokenDailyTotal?: Maybe<TokenDailyTotal>;\n tokenDailyTotals: Array<TokenDailyTotal>;\n tokenHourlyTotal?: Maybe<TokenHourlyTotal>;\n tokenHourlyTotals: Array<TokenHourlyTotal>;\n tokenTradingEvent?: Maybe<TokenTradingEvent>;\n tokenTradingEvents: Array<TokenTradingEvent>;\n tokens: Array<Token>;\n total?: Maybe<Total>;\n totals: Array<Total>;\n trade?: Maybe<Trade>;\n trades: Array<Trade>;\n uniswapPool?: Maybe<UniswapPool>;\n uniswapPools: Array<UniswapPool>;\n uniswapToken?: Maybe<UniswapToken>;\n uniswapTokens: Array<UniswapToken>;\n user?: Maybe<User>;\n users: Array<User>;\n};\n\n\nexport type Query_MetaArgs = {\n block?: InputMaybe<Block_Height>;\n};\n\n\nexport type QueryBundleArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryBundlesArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Bundle_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Bundle_Filter>;\n};\n\n\nexport type QueryDailyTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryDailyTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<DailyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<DailyTotal_Filter>;\n};\n\n\nexport type QueryHourlyTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryHourlyTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<HourlyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<HourlyTotal_Filter>;\n};\n\n\nexport type QueryOrderArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryOrdersArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Order_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Order_Filter>;\n};\n\n\nexport type QueryPairArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPairDailiesArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<PairDaily_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<PairDaily_Filter>;\n};\n\n\nexport type QueryPairDailyArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPairHourliesArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<PairHourly_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<PairHourly_Filter>;\n};\n\n\nexport type QueryPairHourlyArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPairsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Pair_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Pair_Filter>;\n};\n\n\nexport type QuerySettlementArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySettlementsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Settlement_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Settlement_Filter>;\n};\n\n\nexport type QueryTokenArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenDailyTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenDailyTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<TokenDailyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<TokenDailyTotal_Filter>;\n};\n\n\nexport type QueryTokenHourlyTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenHourlyTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<TokenHourlyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<TokenHourlyTotal_Filter>;\n};\n\n\nexport type QueryTokenTradingEventArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenTradingEventsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<TokenTradingEvent_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<TokenTradingEvent_Filter>;\n};\n\n\nexport type QueryTokensArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Token_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Token_Filter>;\n};\n\n\nexport type QueryTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Total_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Total_Filter>;\n};\n\n\nexport type QueryTradeArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTradesArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Trade_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Trade_Filter>;\n};\n\n\nexport type QueryUniswapPoolArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUniswapPoolsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<UniswapPool_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<UniswapPool_Filter>;\n};\n\n\nexport type QueryUniswapTokenArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUniswapTokensArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<UniswapToken_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<UniswapToken_Filter>;\n};\n\n\nexport type QueryUserArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUsersArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<User_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<User_Filter>;\n};\n\nexport type Settlement = {\n __typename?: 'Settlement';\n /** First trade timestamp */\n firstTradeTimestamp: Scalars['Int'];\n /** TxHash */\n id: Scalars['ID'];\n /** User who solved the settlement */\n solver?: Maybe<User>;\n /** Collection of trades */\n trades?: Maybe<Array<Trade>>;\n /** Transaction hash */\n txHash: Scalars['Bytes'];\n};\n\n\nexport type SettlementTradesArgs = {\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Trade_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n where?: InputMaybe<Trade_Filter>;\n};\n\nexport type Settlement_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n firstTradeTimestamp?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_gt?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_gte?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n firstTradeTimestamp_lt?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_lte?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_not?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n solver?: InputMaybe<Scalars['String']>;\n solver_?: InputMaybe<User_Filter>;\n solver_contains?: InputMaybe<Scalars['String']>;\n solver_contains_nocase?: InputMaybe<Scalars['String']>;\n solver_ends_with?: InputMaybe<Scalars['String']>;\n solver_ends_with_nocase?: InputMaybe<Scalars['String']>;\n solver_gt?: InputMaybe<Scalars['String']>;\n solver_gte?: InputMaybe<Scalars['String']>;\n solver_in?: InputMaybe<Array<Scalars['String']>>;\n solver_lt?: InputMaybe<Scalars['String']>;\n solver_lte?: InputMaybe<Scalars['String']>;\n solver_not?: InputMaybe<Scalars['String']>;\n solver_not_contains?: InputMaybe<Scalars['String']>;\n solver_not_contains_nocase?: InputMaybe<Scalars['String']>;\n solver_not_ends_with?: InputMaybe<Scalars['String']>;\n solver_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n solver_not_in?: InputMaybe<Array<Scalars['String']>>;\n solver_not_starts_with?: InputMaybe<Scalars['String']>;\n solver_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n solver_starts_with?: InputMaybe<Scalars['String']>;\n solver_starts_with_nocase?: InputMaybe<Scalars['String']>;\n trades_?: InputMaybe<Trade_Filter>;\n txHash?: InputMaybe<Scalars['Bytes']>;\n txHash_contains?: InputMaybe<Scalars['Bytes']>;\n txHash_in?: InputMaybe<Array<Scalars['Bytes']>>;\n txHash_not?: InputMaybe<Scalars['Bytes']>;\n txHash_not_contains?: InputMaybe<Scalars['Bytes']>;\n txHash_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n};\n\nexport enum Settlement_OrderBy {\n FirstTradeTimestamp = 'firstTradeTimestamp',\n Id = 'id',\n Solver = 'solver',\n Trades = 'trades',\n TxHash = 'txHash'\n}\n\nexport type Subscription = {\n __typename?: 'Subscription';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n bundle?: Maybe<Bundle>;\n bundles: Array<Bundle>;\n dailyTotal?: Maybe<DailyTotal>;\n dailyTotals: Array<DailyTotal>;\n hourlyTotal?: Maybe<HourlyTotal>;\n hourlyTotals: Array<HourlyTotal>;\n order?: Maybe<Order>;\n orders: Array<Order>;\n pair?: Maybe<Pair>;\n pairDailies: Array<PairDaily>;\n pairDaily?: Maybe<PairDaily>;\n pairHourlies: Array<PairHourly>;\n pairHourly?: Maybe<PairHourly>;\n pairs: Array<Pair>;\n settlement?: Maybe<Settlement>;\n settlements: Array<Settlement>;\n token?: Maybe<Token>;\n tokenDailyTotal?: Maybe<TokenDailyTotal>;\n tokenDailyTotals: Array<TokenDailyTotal>;\n tokenHourlyTotal?: Maybe<TokenHourlyTotal>;\n tokenHourlyTotals: Array<TokenHourlyTotal>;\n tokenTradingEvent?: Maybe<TokenTradingEvent>;\n tokenTradingEvents: Array<TokenTradingEvent>;\n tokens: Array<Token>;\n total?: Maybe<Total>;\n totals: Array<Total>;\n trade?: Maybe<Trade>;\n trades: Array<Trade>;\n uniswapPool?: Maybe<UniswapPool>;\n uniswapPools: Array<UniswapPool>;\n uniswapToken?: Maybe<UniswapToken>;\n uniswapTokens: Array<UniswapToken>;\n user?: Maybe<User>;\n users: Array<User>;\n};\n\n\nexport type Subscription_MetaArgs = {\n block?: InputMaybe<Block_Height>;\n};\n\n\nexport type SubscriptionBundleArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionBundlesArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Bundle_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Bundle_Filter>;\n};\n\n\nexport type SubscriptionDailyTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionDailyTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<DailyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<DailyTotal_Filter>;\n};\n\n\nexport type SubscriptionHourlyTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionHourlyTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<HourlyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<HourlyTotal_Filter>;\n};\n\n\nexport type SubscriptionOrderArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionOrdersArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Order_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Order_Filter>;\n};\n\n\nexport type SubscriptionPairArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPairDailiesArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<PairDaily_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<PairDaily_Filter>;\n};\n\n\nexport type SubscriptionPairDailyArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPairHourliesArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<PairHourly_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<PairHourly_Filter>;\n};\n\n\nexport type SubscriptionPairHourlyArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPairsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Pair_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Pair_Filter>;\n};\n\n\nexport type SubscriptionSettlementArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSettlementsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Settlement_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Settlement_Filter>;\n};\n\n\nexport type SubscriptionTokenArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenDailyTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenDailyTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<TokenDailyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<TokenDailyTotal_Filter>;\n};\n\n\nexport type SubscriptionTokenHourlyTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenHourlyTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<TokenHourlyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<TokenHourlyTotal_Filter>;\n};\n\n\nexport type SubscriptionTokenTradingEventArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenTradingEventsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<TokenTradingEvent_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<TokenTradingEvent_Filter>;\n};\n\n\nexport type SubscriptionTokensArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Token_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Token_Filter>;\n};\n\n\nexport type SubscriptionTotalArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTotalsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Total_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Total_Filter>;\n};\n\n\nexport type SubscriptionTradeArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTradesArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Trade_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<Trade_Filter>;\n};\n\n\nexport type SubscriptionUniswapPoolArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUniswapPoolsArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<UniswapPool_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<UniswapPool_Filter>;\n};\n\n\nexport type SubscriptionUniswapTokenArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUniswapTokensArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<UniswapToken_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<UniswapToken_Filter>;\n};\n\n\nexport type SubscriptionUserArgs = {\n block?: InputMaybe<Block_Height>;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUsersArgs = {\n block?: InputMaybe<Block_Height>;\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<User_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe<User_Filter>;\n};\n\nexport type Token = {\n __typename?: 'Token';\n /** Token address */\n address: Scalars['Bytes'];\n /** Daily totals */\n dailyTotals: Array<TokenDailyTotal>;\n /** Token decimals fetched by contract call */\n decimals: Scalars['Int'];\n /** First token trade block timestamp */\n firstTradeTimestamp: Scalars['Int'];\n /** History of trading for this token */\n history: Array<TokenTradingEvent>;\n /** Hourly totals */\n hourlyTotals: Array<TokenHourlyTotal>;\n /** Token address to hexString */\n id: Scalars['ID'];\n /** Token name fetched by ERC20 contract call */\n name: Scalars['String'];\n /** Total trades */\n numberOfTrades: Scalars['Int'];\n /** Derived price in ETH */\n priceEth?: Maybe<Scalars['BigDecimal']>;\n /** Derived price in USD */\n priceUsd?: Maybe<Scalars['BigDecimal']>;\n /** Token symbol fetched by contract call */\n symbol: Scalars['String'];\n /** Total volume managed in CowSwap */\n totalVolume?: Maybe<Scalars['BigInt']>;\n /** Total volume in Eth */\n totalVolumeEth: Scalars['BigDecimal'];\n /** Total volume in Usd */\n totalVolumeUsd: Scalars['BigDecimal'];\n};\n\n\nexport type TokenDailyTotalsArgs = {\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<TokenDailyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n where?: InputMaybe<TokenDailyTotal_Filter>;\n};\n\n\nexport type TokenHistoryArgs = {\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<TokenTradingEvent_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n where?: InputMaybe<TokenTradingEvent_Filter>;\n};\n\n\nexport type TokenHourlyTotalsArgs = {\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<TokenHourlyTotal_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n where?: InputMaybe<TokenHourlyTotal_Filter>;\n};\n\nexport type TokenDailyTotal = {\n __typename?: 'TokenDailyTotal';\n /** Average trade price */\n averagePrice: Scalars['BigDecimal'];\n /** Last trade price */\n closePrice: Scalars['BigDecimal'];\n /** Higher trade price */\n higherPrice: Scalars['BigDecimal'];\n /** TokenAddress + timestamp day */\n id: Scalars['ID'];\n /** Lower trade price */\n lowerPrice: Scalars['BigDecimal'];\n /** First trade price */\n openPrice: Scalars['BigDecimal'];\n /** Start day timestamp */\n timestamp: Scalars['Int'];\n /** Token address */\n token: Token;\n /** Number of trades that day */\n totalTrades: Scalars['BigInt'];\n /** Total volume traded that day in token */\n totalVolume: Scalars['BigInt'];\n /** Total amount traded that day in ETH */\n totalVolumeEth: Scalars['BigDecimal'];\n /** Total amount traded that day in USD */\n totalVolumeUsd: Scalars['BigDecimal'];\n};\n\nexport type TokenDailyTotal_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n averagePrice?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n averagePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n closePrice?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n closePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n higherPrice?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n higherPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n lowerPrice?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n lowerPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n openPrice?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n openPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n timestamp?: InputMaybe<Scalars['Int']>;\n timestamp_gt?: InputMaybe<Scalars['Int']>;\n timestamp_gte?: InputMaybe<Scalars['Int']>;\n timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n timestamp_lt?: InputMaybe<Scalars['Int']>;\n timestamp_lte?: InputMaybe<Scalars['Int']>;\n timestamp_not?: InputMaybe<Scalars['Int']>;\n timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n token?: InputMaybe<Scalars['String']>;\n token_?: InputMaybe<Token_Filter>;\n token_contains?: InputMaybe<Scalars['String']>;\n token_contains_nocase?: InputMaybe<Scalars['String']>;\n token_ends_with?: InputMaybe<Scalars['String']>;\n token_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token_gt?: InputMaybe<Scalars['String']>;\n token_gte?: InputMaybe<Scalars['String']>;\n token_in?: InputMaybe<Array<Scalars['String']>>;\n token_lt?: InputMaybe<Scalars['String']>;\n token_lte?: InputMaybe<Scalars['String']>;\n token_not?: InputMaybe<Scalars['String']>;\n token_not_contains?: InputMaybe<Scalars['String']>;\n token_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token_not_ends_with?: InputMaybe<Scalars['String']>;\n token_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token_not_in?: InputMaybe<Array<Scalars['String']>>;\n token_not_starts_with?: InputMaybe<Scalars['String']>;\n token_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token_starts_with?: InputMaybe<Scalars['String']>;\n token_starts_with_nocase?: InputMaybe<Scalars['String']>;\n totalTrades?: InputMaybe<Scalars['BigInt']>;\n totalTrades_gt?: InputMaybe<Scalars['BigInt']>;\n totalTrades_gte?: InputMaybe<Scalars['BigInt']>;\n totalTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n totalTrades_lt?: InputMaybe<Scalars['BigInt']>;\n totalTrades_lte?: InputMaybe<Scalars['BigInt']>;\n totalTrades_not?: InputMaybe<Scalars['BigInt']>;\n totalTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n totalVolume?: InputMaybe<Scalars['BigInt']>;\n totalVolumeEth?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolume_gt?: InputMaybe<Scalars['BigInt']>;\n totalVolume_gte?: InputMaybe<Scalars['BigInt']>;\n totalVolume_in?: InputMaybe<Array<Scalars['BigInt']>>;\n totalVolume_lt?: InputMaybe<Scalars['BigInt']>;\n totalVolume_lte?: InputMaybe<Scalars['BigInt']>;\n totalVolume_not?: InputMaybe<Scalars['BigInt']>;\n totalVolume_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n};\n\nexport enum TokenDailyTotal_OrderBy {\n AveragePrice = 'averagePrice',\n ClosePrice = 'closePrice',\n HigherPrice = 'higherPrice',\n Id = 'id',\n LowerPrice = 'lowerPrice',\n OpenPrice = 'openPrice',\n Timestamp = 'timestamp',\n Token = 'token',\n TotalTrades = 'totalTrades',\n TotalVolume = 'totalVolume',\n TotalVolumeEth = 'totalVolumeEth',\n TotalVolumeUsd = 'totalVolumeUsd'\n}\n\nexport type TokenHourlyTotal = {\n __typename?: 'TokenHourlyTotal';\n /** Average trade price */\n averagePrice: Scalars['BigDecimal'];\n /** Last trade price */\n closePrice: Scalars['BigDecimal'];\n /** Higher trade price */\n higherPrice: Scalars['BigDecimal'];\n /** TokenAddress + timestamp hour */\n id: Scalars['ID'];\n /** Lower trade price */\n lowerPrice: Scalars['BigDecimal'];\n /** First trade price */\n openPrice: Scalars['BigDecimal'];\n /** Start hour timestamp */\n timestamp: Scalars['Int'];\n /** Token address */\n token: Token;\n /** Number of trades that hour */\n totalTrades: Scalars['BigInt'];\n /** Total volume traded that day in token */\n totalVolume: Scalars['BigInt'];\n /** Total amount traded that hour in ETH */\n totalVolumeEth: Scalars['BigDecimal'];\n /** Total amount traded that hour in USD */\n totalVolumeUsd: Scalars['BigDecimal'];\n};\n\nexport type TokenHourlyTotal_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n averagePrice?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n averagePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n averagePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n closePrice?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n closePrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_not?: InputMaybe<Scalars['BigDecimal']>;\n closePrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n higherPrice?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n higherPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n higherPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n lowerPrice?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n lowerPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n lowerPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n openPrice?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_gt?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_gte?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n openPrice_lt?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_lte?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_not?: InputMaybe<Scalars['BigDecimal']>;\n openPrice_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n timestamp?: InputMaybe<Scalars['Int']>;\n timestamp_gt?: InputMaybe<Scalars['Int']>;\n timestamp_gte?: InputMaybe<Scalars['Int']>;\n timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n timestamp_lt?: InputMaybe<Scalars['Int']>;\n timestamp_lte?: InputMaybe<Scalars['Int']>;\n timestamp_not?: InputMaybe<Scalars['Int']>;\n timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n token?: InputMaybe<Scalars['String']>;\n token_?: InputMaybe<Token_Filter>;\n token_contains?: InputMaybe<Scalars['String']>;\n token_contains_nocase?: InputMaybe<Scalars['String']>;\n token_ends_with?: InputMaybe<Scalars['String']>;\n token_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token_gt?: InputMaybe<Scalars['String']>;\n token_gte?: InputMaybe<Scalars['String']>;\n token_in?: InputMaybe<Array<Scalars['String']>>;\n token_lt?: InputMaybe<Scalars['String']>;\n token_lte?: InputMaybe<Scalars['String']>;\n token_not?: InputMaybe<Scalars['String']>;\n token_not_contains?: InputMaybe<Scalars['String']>;\n token_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token_not_ends_with?: InputMaybe<Scalars['String']>;\n token_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token_not_in?: InputMaybe<Array<Scalars['String']>>;\n token_not_starts_with?: InputMaybe<Scalars['String']>;\n token_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token_starts_with?: InputMaybe<Scalars['String']>;\n token_starts_with_nocase?: InputMaybe<Scalars['String']>;\n totalTrades?: InputMaybe<Scalars['BigInt']>;\n totalTrades_gt?: InputMaybe<Scalars['BigInt']>;\n totalTrades_gte?: InputMaybe<Scalars['BigInt']>;\n totalTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n totalTrades_lt?: InputMaybe<Scalars['BigInt']>;\n totalTrades_lte?: InputMaybe<Scalars['BigInt']>;\n totalTrades_not?: InputMaybe<Scalars['BigInt']>;\n totalTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n totalVolume?: InputMaybe<Scalars['BigInt']>;\n totalVolumeEth?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolume_gt?: InputMaybe<Scalars['BigInt']>;\n totalVolume_gte?: InputMaybe<Scalars['BigInt']>;\n totalVolume_in?: InputMaybe<Array<Scalars['BigInt']>>;\n totalVolume_lt?: InputMaybe<Scalars['BigInt']>;\n totalVolume_lte?: InputMaybe<Scalars['BigInt']>;\n totalVolume_not?: InputMaybe<Scalars['BigInt']>;\n totalVolume_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n};\n\nexport enum TokenHourlyTotal_OrderBy {\n AveragePrice = 'averagePrice',\n ClosePrice = 'closePrice',\n HigherPrice = 'higherPrice',\n Id = 'id',\n LowerPrice = 'lowerPrice',\n OpenPrice = 'openPrice',\n Timestamp = 'timestamp',\n Token = 'token',\n TotalTrades = 'totalTrades',\n TotalVolume = 'totalVolume',\n TotalVolumeEth = 'totalVolumeEth',\n TotalVolumeUsd = 'totalVolumeUsd'\n}\n\nexport type TokenTradingEvent = {\n __typename?: 'TokenTradingEvent';\n /** Amount in Eth */\n amountEth: Scalars['BigDecimal'];\n /** Amount in Usd */\n amountUsd: Scalars['BigDecimal'];\n /** Id built using token-timestamp */\n id: Scalars['ID'];\n /** Timestamp */\n timestamp: Scalars['Int'];\n /** Token */\n token: Token;\n /** Trade */\n trade: Trade;\n};\n\nexport type TokenTradingEvent_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n amountEth?: InputMaybe<Scalars['BigDecimal']>;\n amountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n amountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n amountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n amountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n amountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n amountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n amountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n amountUsd?: InputMaybe<Scalars['BigDecimal']>;\n amountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n amountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n amountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n amountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n amountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n amountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n amountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n timestamp?: InputMaybe<Scalars['Int']>;\n timestamp_gt?: InputMaybe<Scalars['Int']>;\n timestamp_gte?: InputMaybe<Scalars['Int']>;\n timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n timestamp_lt?: InputMaybe<Scalars['Int']>;\n timestamp_lte?: InputMaybe<Scalars['Int']>;\n timestamp_not?: InputMaybe<Scalars['Int']>;\n timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n token?: InputMaybe<Scalars['String']>;\n token_?: InputMaybe<Token_Filter>;\n token_contains?: InputMaybe<Scalars['String']>;\n token_contains_nocase?: InputMaybe<Scalars['String']>;\n token_ends_with?: InputMaybe<Scalars['String']>;\n token_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token_gt?: InputMaybe<Scalars['String']>;\n token_gte?: InputMaybe<Scalars['String']>;\n token_in?: InputMaybe<Array<Scalars['String']>>;\n token_lt?: InputMaybe<Scalars['String']>;\n token_lte?: InputMaybe<Scalars['String']>;\n token_not?: InputMaybe<Scalars['String']>;\n token_not_contains?: InputMaybe<Scalars['String']>;\n token_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token_not_ends_with?: InputMaybe<Scalars['String']>;\n token_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token_not_in?: InputMaybe<Array<Scalars['String']>>;\n token_not_starts_with?: InputMaybe<Scalars['String']>;\n token_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token_starts_with?: InputMaybe<Scalars['String']>;\n token_starts_with_nocase?: InputMaybe<Scalars['String']>;\n trade?: InputMaybe<Scalars['String']>;\n trade_?: InputMaybe<Trade_Filter>;\n trade_contains?: InputMaybe<Scalars['String']>;\n trade_contains_nocase?: InputMaybe<Scalars['String']>;\n trade_ends_with?: InputMaybe<Scalars['String']>;\n trade_ends_with_nocase?: InputMaybe<Scalars['String']>;\n trade_gt?: InputMaybe<Scalars['String']>;\n trade_gte?: InputMaybe<Scalars['String']>;\n trade_in?: InputMaybe<Array<Scalars['String']>>;\n trade_lt?: InputMaybe<Scalars['String']>;\n trade_lte?: InputMaybe<Scalars['String']>;\n trade_not?: InputMaybe<Scalars['String']>;\n trade_not_contains?: InputMaybe<Scalars['String']>;\n trade_not_contains_nocase?: InputMaybe<Scalars['String']>;\n trade_not_ends_with?: InputMaybe<Scalars['String']>;\n trade_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n trade_not_in?: InputMaybe<Array<Scalars['String']>>;\n trade_not_starts_with?: InputMaybe<Scalars['String']>;\n trade_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n trade_starts_with?: InputMaybe<Scalars['String']>;\n trade_starts_with_nocase?: InputMaybe<Scalars['String']>;\n};\n\nexport enum TokenTradingEvent_OrderBy {\n AmountEth = 'amountEth',\n AmountUsd = 'amountUsd',\n Id = 'id',\n Timestamp = 'timestamp',\n Token = 'token',\n Trade = 'trade'\n}\n\nexport type Token_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n address?: InputMaybe<Scalars['Bytes']>;\n address_contains?: InputMaybe<Scalars['Bytes']>;\n address_in?: InputMaybe<Array<Scalars['Bytes']>>;\n address_not?: InputMaybe<Scalars['Bytes']>;\n address_not_contains?: InputMaybe<Scalars['Bytes']>;\n address_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n dailyTotals_?: InputMaybe<TokenDailyTotal_Filter>;\n decimals?: InputMaybe<Scalars['Int']>;\n decimals_gt?: InputMaybe<Scalars['Int']>;\n decimals_gte?: InputMaybe<Scalars['Int']>;\n decimals_in?: InputMaybe<Array<Scalars['Int']>>;\n decimals_lt?: InputMaybe<Scalars['Int']>;\n decimals_lte?: InputMaybe<Scalars['Int']>;\n decimals_not?: InputMaybe<Scalars['Int']>;\n decimals_not_in?: InputMaybe<Array<Scalars['Int']>>;\n firstTradeTimestamp?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_gt?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_gte?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n firstTradeTimestamp_lt?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_lte?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_not?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n history_?: InputMaybe<TokenTradingEvent_Filter>;\n hourlyTotals_?: InputMaybe<TokenHourlyTotal_Filter>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n name?: InputMaybe<Scalars['String']>;\n name_contains?: InputMaybe<Scalars['String']>;\n name_contains_nocase?: InputMaybe<Scalars['String']>;\n name_ends_with?: InputMaybe<Scalars['String']>;\n name_ends_with_nocase?: InputMaybe<Scalars['String']>;\n name_gt?: InputMaybe<Scalars['String']>;\n name_gte?: InputMaybe<Scalars['String']>;\n name_in?: InputMaybe<Array<Scalars['String']>>;\n name_lt?: InputMaybe<Scalars['String']>;\n name_lte?: InputMaybe<Scalars['String']>;\n name_not?: InputMaybe<Scalars['String']>;\n name_not_contains?: InputMaybe<Scalars['String']>;\n name_not_contains_nocase?: InputMaybe<Scalars['String']>;\n name_not_ends_with?: InputMaybe<Scalars['String']>;\n name_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n name_not_in?: InputMaybe<Array<Scalars['String']>>;\n name_not_starts_with?: InputMaybe<Scalars['String']>;\n name_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n name_starts_with?: InputMaybe<Scalars['String']>;\n name_starts_with_nocase?: InputMaybe<Scalars['String']>;\n numberOfTrades?: InputMaybe<Scalars['Int']>;\n numberOfTrades_gt?: InputMaybe<Scalars['Int']>;\n numberOfTrades_gte?: InputMaybe<Scalars['Int']>;\n numberOfTrades_in?: InputMaybe<Array<Scalars['Int']>>;\n numberOfTrades_lt?: InputMaybe<Scalars['Int']>;\n numberOfTrades_lte?: InputMaybe<Scalars['Int']>;\n numberOfTrades_not?: InputMaybe<Scalars['Int']>;\n numberOfTrades_not_in?: InputMaybe<Array<Scalars['Int']>>;\n priceEth?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n priceEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_not?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n priceUsd?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n priceUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n symbol?: InputMaybe<Scalars['String']>;\n symbol_contains?: InputMaybe<Scalars['String']>;\n symbol_contains_nocase?: InputMaybe<Scalars['String']>;\n symbol_ends_with?: InputMaybe<Scalars['String']>;\n symbol_ends_with_nocase?: InputMaybe<Scalars['String']>;\n symbol_gt?: InputMaybe<Scalars['String']>;\n symbol_gte?: InputMaybe<Scalars['String']>;\n symbol_in?: InputMaybe<Array<Scalars['String']>>;\n symbol_lt?: InputMaybe<Scalars['String']>;\n symbol_lte?: InputMaybe<Scalars['String']>;\n symbol_not?: InputMaybe<Scalars['String']>;\n symbol_not_contains?: InputMaybe<Scalars['String']>;\n symbol_not_contains_nocase?: InputMaybe<Scalars['String']>;\n symbol_not_ends_with?: InputMaybe<Scalars['String']>;\n symbol_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n symbol_not_in?: InputMaybe<Array<Scalars['String']>>;\n symbol_not_starts_with?: InputMaybe<Scalars['String']>;\n symbol_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n symbol_starts_with?: InputMaybe<Scalars['String']>;\n symbol_starts_with_nocase?: InputMaybe<Scalars['String']>;\n totalVolume?: InputMaybe<Scalars['BigInt']>;\n totalVolumeEth?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n totalVolumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalVolume_gt?: InputMaybe<Scalars['BigInt']>;\n totalVolume_gte?: InputMaybe<Scalars['BigInt']>;\n totalVolume_in?: InputMaybe<Array<Scalars['BigInt']>>;\n totalVolume_lt?: InputMaybe<Scalars['BigInt']>;\n totalVolume_lte?: InputMaybe<Scalars['BigInt']>;\n totalVolume_not?: InputMaybe<Scalars['BigInt']>;\n totalVolume_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n};\n\nexport enum Token_OrderBy {\n Address = 'address',\n DailyTotals = 'dailyTotals',\n Decimals = 'decimals',\n FirstTradeTimestamp = 'firstTradeTimestamp',\n History = 'history',\n HourlyTotals = 'hourlyTotals',\n Id = 'id',\n Name = 'name',\n NumberOfTrades = 'numberOfTrades',\n PriceEth = 'priceEth',\n PriceUsd = 'priceUsd',\n Symbol = 'symbol',\n TotalVolume = 'totalVolume',\n TotalVolumeEth = 'totalVolumeEth',\n TotalVolumeUsd = 'totalVolumeUsd'\n}\n\nexport type Total = {\n __typename?: 'Total';\n /** Total fees in Eth */\n feesEth?: Maybe<Scalars['BigDecimal']>;\n /** Total fees in USD */\n feesUsd?: Maybe<Scalars['BigDecimal']>;\n /** This is a singleton entity to contain accumulators for all values. Id will be always 1 */\n id: Scalars['ID'];\n /** Number of trades */\n numberOfTrades: Scalars['BigInt'];\n /** Total number of orders placed */\n orders: Scalars['BigInt'];\n /** Total number of batches settled */\n settlements: Scalars['BigInt'];\n /** Total number of tokens traded */\n tokens: Scalars['BigInt'];\n /** Total number of traders */\n traders: Scalars['BigInt'];\n /** Total traded volume in ETH */\n volumeEth?: Maybe<Scalars['BigDecimal']>;\n /** Total traded volume in USD */\n volumeUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\nexport type Total_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n feesEth?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n feesEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_not?: InputMaybe<Scalars['BigDecimal']>;\n feesEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n feesUsd?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n feesUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n feesUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n numberOfTrades?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_gt?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_gte?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_in?: InputMaybe<Array<Scalars['BigInt']>>;\n numberOfTrades_lt?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_lte?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_not?: InputMaybe<Scalars['BigInt']>;\n numberOfTrades_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n orders?: InputMaybe<Scalars['BigInt']>;\n orders_gt?: InputMaybe<Scalars['BigInt']>;\n orders_gte?: InputMaybe<Scalars['BigInt']>;\n orders_in?: InputMaybe<Array<Scalars['BigInt']>>;\n orders_lt?: InputMaybe<Scalars['BigInt']>;\n orders_lte?: InputMaybe<Scalars['BigInt']>;\n orders_not?: InputMaybe<Scalars['BigInt']>;\n orders_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n settlements?: InputMaybe<Scalars['BigInt']>;\n settlements_gt?: InputMaybe<Scalars['BigInt']>;\n settlements_gte?: InputMaybe<Scalars['BigInt']>;\n settlements_in?: InputMaybe<Array<Scalars['BigInt']>>;\n settlements_lt?: InputMaybe<Scalars['BigInt']>;\n settlements_lte?: InputMaybe<Scalars['BigInt']>;\n settlements_not?: InputMaybe<Scalars['BigInt']>;\n settlements_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n tokens?: InputMaybe<Scalars['BigInt']>;\n tokens_gt?: InputMaybe<Scalars['BigInt']>;\n tokens_gte?: InputMaybe<Scalars['BigInt']>;\n tokens_in?: InputMaybe<Array<Scalars['BigInt']>>;\n tokens_lt?: InputMaybe<Scalars['BigInt']>;\n tokens_lte?: InputMaybe<Scalars['BigInt']>;\n tokens_not?: InputMaybe<Scalars['BigInt']>;\n tokens_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n traders?: InputMaybe<Scalars['BigInt']>;\n traders_gt?: InputMaybe<Scalars['BigInt']>;\n traders_gte?: InputMaybe<Scalars['BigInt']>;\n traders_in?: InputMaybe<Array<Scalars['BigInt']>>;\n traders_lt?: InputMaybe<Scalars['BigInt']>;\n traders_lte?: InputMaybe<Scalars['BigInt']>;\n traders_not?: InputMaybe<Scalars['BigInt']>;\n traders_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n volumeEth?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeUsd?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n volumeUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n volumeUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum Total_OrderBy {\n FeesEth = 'feesEth',\n FeesUsd = 'feesUsd',\n Id = 'id',\n NumberOfTrades = 'numberOfTrades',\n Orders = 'orders',\n Settlements = 'settlements',\n Tokens = 'tokens',\n Traders = 'traders',\n VolumeEth = 'volumeEth',\n VolumeUsd = 'volumeUsd'\n}\n\nexport type Trade = {\n __typename?: 'Trade';\n /** Trade event buyAmount */\n buyAmount: Scalars['BigInt'];\n /** Buy amount in Eth */\n buyAmountEth?: Maybe<Scalars['BigDecimal']>;\n /** Buy amount in Usd */\n buyAmountUsd?: Maybe<Scalars['BigDecimal']>;\n /** Trade event buyToken */\n buyToken: Token;\n /** Trade's fee amount */\n feeAmount: Scalars['BigInt'];\n /** Transaction's gas price */\n gasPrice: Scalars['BigInt'];\n /** This Id is composed using orderId|txHashString|eventIndex */\n id: Scalars['ID'];\n /** Order */\n order: Order;\n /** Trade event sellAmount */\n sellAmount: Scalars['BigInt'];\n /** Sell amount in Eth */\n sellAmountEth?: Maybe<Scalars['BigDecimal']>;\n /** Sell amount in Usd */\n sellAmountUsd?: Maybe<Scalars['BigDecimal']>;\n /** Trade event sellToken */\n sellToken: Token;\n /** Settlement */\n settlement: Settlement;\n /** Block's timestamp */\n timestamp: Scalars['Int'];\n /** Trade event transaction hash */\n txHash: Scalars['Bytes'];\n};\n\nexport type Trade_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n buyAmount?: InputMaybe<Scalars['BigInt']>;\n buyAmountEth?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n buyAmountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n buyAmountUsd?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n buyAmountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n buyAmountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n buyAmount_gt?: InputMaybe<Scalars['BigInt']>;\n buyAmount_gte?: InputMaybe<Scalars['BigInt']>;\n buyAmount_in?: InputMaybe<Array<Scalars['BigInt']>>;\n buyAmount_lt?: InputMaybe<Scalars['BigInt']>;\n buyAmount_lte?: InputMaybe<Scalars['BigInt']>;\n buyAmount_not?: InputMaybe<Scalars['BigInt']>;\n buyAmount_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n buyToken?: InputMaybe<Scalars['String']>;\n buyToken_?: InputMaybe<Token_Filter>;\n buyToken_contains?: InputMaybe<Scalars['String']>;\n buyToken_contains_nocase?: InputMaybe<Scalars['String']>;\n buyToken_ends_with?: InputMaybe<Scalars['String']>;\n buyToken_ends_with_nocase?: InputMaybe<Scalars['String']>;\n buyToken_gt?: InputMaybe<Scalars['String']>;\n buyToken_gte?: InputMaybe<Scalars['String']>;\n buyToken_in?: InputMaybe<Array<Scalars['String']>>;\n buyToken_lt?: InputMaybe<Scalars['String']>;\n buyToken_lte?: InputMaybe<Scalars['String']>;\n buyToken_not?: InputMaybe<Scalars['String']>;\n buyToken_not_contains?: InputMaybe<Scalars['String']>;\n buyToken_not_contains_nocase?: InputMaybe<Scalars['String']>;\n buyToken_not_ends_with?: InputMaybe<Scalars['String']>;\n buyToken_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n buyToken_not_in?: InputMaybe<Array<Scalars['String']>>;\n buyToken_not_starts_with?: InputMaybe<Scalars['String']>;\n buyToken_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n buyToken_starts_with?: InputMaybe<Scalars['String']>;\n buyToken_starts_with_nocase?: InputMaybe<Scalars['String']>;\n feeAmount?: InputMaybe<Scalars['BigInt']>;\n feeAmount_gt?: InputMaybe<Scalars['BigInt']>;\n feeAmount_gte?: InputMaybe<Scalars['BigInt']>;\n feeAmount_in?: InputMaybe<Array<Scalars['BigInt']>>;\n feeAmount_lt?: InputMaybe<Scalars['BigInt']>;\n feeAmount_lte?: InputMaybe<Scalars['BigInt']>;\n feeAmount_not?: InputMaybe<Scalars['BigInt']>;\n feeAmount_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n gasPrice?: InputMaybe<Scalars['BigInt']>;\n gasPrice_gt?: InputMaybe<Scalars['BigInt']>;\n gasPrice_gte?: InputMaybe<Scalars['BigInt']>;\n gasPrice_in?: InputMaybe<Array<Scalars['BigInt']>>;\n gasPrice_lt?: InputMaybe<Scalars['BigInt']>;\n gasPrice_lte?: InputMaybe<Scalars['BigInt']>;\n gasPrice_not?: InputMaybe<Scalars['BigInt']>;\n gasPrice_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n order?: InputMaybe<Scalars['String']>;\n order_?: InputMaybe<Order_Filter>;\n order_contains?: InputMaybe<Scalars['String']>;\n order_contains_nocase?: InputMaybe<Scalars['String']>;\n order_ends_with?: InputMaybe<Scalars['String']>;\n order_ends_with_nocase?: InputMaybe<Scalars['String']>;\n order_gt?: InputMaybe<Scalars['String']>;\n order_gte?: InputMaybe<Scalars['String']>;\n order_in?: InputMaybe<Array<Scalars['String']>>;\n order_lt?: InputMaybe<Scalars['String']>;\n order_lte?: InputMaybe<Scalars['String']>;\n order_not?: InputMaybe<Scalars['String']>;\n order_not_contains?: InputMaybe<Scalars['String']>;\n order_not_contains_nocase?: InputMaybe<Scalars['String']>;\n order_not_ends_with?: InputMaybe<Scalars['String']>;\n order_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n order_not_in?: InputMaybe<Array<Scalars['String']>>;\n order_not_starts_with?: InputMaybe<Scalars['String']>;\n order_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n order_starts_with?: InputMaybe<Scalars['String']>;\n order_starts_with_nocase?: InputMaybe<Scalars['String']>;\n sellAmount?: InputMaybe<Scalars['BigInt']>;\n sellAmountEth?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n sellAmountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n sellAmountUsd?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n sellAmountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n sellAmountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n sellAmount_gt?: InputMaybe<Scalars['BigInt']>;\n sellAmount_gte?: InputMaybe<Scalars['BigInt']>;\n sellAmount_in?: InputMaybe<Array<Scalars['BigInt']>>;\n sellAmount_lt?: InputMaybe<Scalars['BigInt']>;\n sellAmount_lte?: InputMaybe<Scalars['BigInt']>;\n sellAmount_not?: InputMaybe<Scalars['BigInt']>;\n sellAmount_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n sellToken?: InputMaybe<Scalars['String']>;\n sellToken_?: InputMaybe<Token_Filter>;\n sellToken_contains?: InputMaybe<Scalars['String']>;\n sellToken_contains_nocase?: InputMaybe<Scalars['String']>;\n sellToken_ends_with?: InputMaybe<Scalars['String']>;\n sellToken_ends_with_nocase?: InputMaybe<Scalars['String']>;\n sellToken_gt?: InputMaybe<Scalars['String']>;\n sellToken_gte?: InputMaybe<Scalars['String']>;\n sellToken_in?: InputMaybe<Array<Scalars['String']>>;\n sellToken_lt?: InputMaybe<Scalars['String']>;\n sellToken_lte?: InputMaybe<Scalars['String']>;\n sellToken_not?: InputMaybe<Scalars['String']>;\n sellToken_not_contains?: InputMaybe<Scalars['String']>;\n sellToken_not_contains_nocase?: InputMaybe<Scalars['String']>;\n sellToken_not_ends_with?: InputMaybe<Scalars['String']>;\n sellToken_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n sellToken_not_in?: InputMaybe<Array<Scalars['String']>>;\n sellToken_not_starts_with?: InputMaybe<Scalars['String']>;\n sellToken_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n sellToken_starts_with?: InputMaybe<Scalars['String']>;\n sellToken_starts_with_nocase?: InputMaybe<Scalars['String']>;\n settlement?: InputMaybe<Scalars['String']>;\n settlement_?: InputMaybe<Settlement_Filter>;\n settlement_contains?: InputMaybe<Scalars['String']>;\n settlement_contains_nocase?: InputMaybe<Scalars['String']>;\n settlement_ends_with?: InputMaybe<Scalars['String']>;\n settlement_ends_with_nocase?: InputMaybe<Scalars['String']>;\n settlement_gt?: InputMaybe<Scalars['String']>;\n settlement_gte?: InputMaybe<Scalars['String']>;\n settlement_in?: InputMaybe<Array<Scalars['String']>>;\n settlement_lt?: InputMaybe<Scalars['String']>;\n settlement_lte?: InputMaybe<Scalars['String']>;\n settlement_not?: InputMaybe<Scalars['String']>;\n settlement_not_contains?: InputMaybe<Scalars['String']>;\n settlement_not_contains_nocase?: InputMaybe<Scalars['String']>;\n settlement_not_ends_with?: InputMaybe<Scalars['String']>;\n settlement_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n settlement_not_in?: InputMaybe<Array<Scalars['String']>>;\n settlement_not_starts_with?: InputMaybe<Scalars['String']>;\n settlement_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n settlement_starts_with?: InputMaybe<Scalars['String']>;\n settlement_starts_with_nocase?: InputMaybe<Scalars['String']>;\n timestamp?: InputMaybe<Scalars['Int']>;\n timestamp_gt?: InputMaybe<Scalars['Int']>;\n timestamp_gte?: InputMaybe<Scalars['Int']>;\n timestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n timestamp_lt?: InputMaybe<Scalars['Int']>;\n timestamp_lte?: InputMaybe<Scalars['Int']>;\n timestamp_not?: InputMaybe<Scalars['Int']>;\n timestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n txHash?: InputMaybe<Scalars['Bytes']>;\n txHash_contains?: InputMaybe<Scalars['Bytes']>;\n txHash_in?: InputMaybe<Array<Scalars['Bytes']>>;\n txHash_not?: InputMaybe<Scalars['Bytes']>;\n txHash_not_contains?: InputMaybe<Scalars['Bytes']>;\n txHash_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n};\n\nexport enum Trade_OrderBy {\n BuyAmount = 'buyAmount',\n BuyAmountEth = 'buyAmountEth',\n BuyAmountUsd = 'buyAmountUsd',\n BuyToken = 'buyToken',\n FeeAmount = 'feeAmount',\n GasPrice = 'gasPrice',\n Id = 'id',\n Order = 'order',\n SellAmount = 'sellAmount',\n SellAmountEth = 'sellAmountEth',\n SellAmountUsd = 'sellAmountUsd',\n SellToken = 'sellToken',\n Settlement = 'settlement',\n Timestamp = 'timestamp',\n TxHash = 'txHash'\n}\n\nexport type UniswapPool = {\n __typename?: 'UniswapPool';\n /** Pool address */\n id: Scalars['ID'];\n /** In range liquidity */\n liquidity: Scalars['BigInt'];\n /** Current tick */\n tick?: Maybe<Scalars['BigInt']>;\n /** Token0 */\n token0: UniswapToken;\n /** Token0 per token1 */\n token0Price: Scalars['BigDecimal'];\n /** Token1 */\n token1: UniswapToken;\n /** Token1 per token0 */\n token1Price: Scalars['BigDecimal'];\n /** Total token 0 across all ticks */\n totalValueLockedToken0: Scalars['BigDecimal'];\n /** Total token 1 across all ticks */\n totalValueLockedToken1: Scalars['BigDecimal'];\n};\n\nexport type UniswapPool_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n liquidity?: InputMaybe<Scalars['BigInt']>;\n liquidity_gt?: InputMaybe<Scalars['BigInt']>;\n liquidity_gte?: InputMaybe<Scalars['BigInt']>;\n liquidity_in?: InputMaybe<Array<Scalars['BigInt']>>;\n liquidity_lt?: InputMaybe<Scalars['BigInt']>;\n liquidity_lte?: InputMaybe<Scalars['BigInt']>;\n liquidity_not?: InputMaybe<Scalars['BigInt']>;\n liquidity_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n tick?: InputMaybe<Scalars['BigInt']>;\n tick_gt?: InputMaybe<Scalars['BigInt']>;\n tick_gte?: InputMaybe<Scalars['BigInt']>;\n tick_in?: InputMaybe<Array<Scalars['BigInt']>>;\n tick_lt?: InputMaybe<Scalars['BigInt']>;\n tick_lte?: InputMaybe<Scalars['BigInt']>;\n tick_not?: InputMaybe<Scalars['BigInt']>;\n tick_not_in?: InputMaybe<Array<Scalars['BigInt']>>;\n token0?: InputMaybe<Scalars['String']>;\n token0Price?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_not?: InputMaybe<Scalars['BigDecimal']>;\n token0Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token0_?: InputMaybe<UniswapToken_Filter>;\n token0_contains?: InputMaybe<Scalars['String']>;\n token0_contains_nocase?: InputMaybe<Scalars['String']>;\n token0_ends_with?: InputMaybe<Scalars['String']>;\n token0_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token0_gt?: InputMaybe<Scalars['String']>;\n token0_gte?: InputMaybe<Scalars['String']>;\n token0_in?: InputMaybe<Array<Scalars['String']>>;\n token0_lt?: InputMaybe<Scalars['String']>;\n token0_lte?: InputMaybe<Scalars['String']>;\n token0_not?: InputMaybe<Scalars['String']>;\n token0_not_contains?: InputMaybe<Scalars['String']>;\n token0_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token0_not_ends_with?: InputMaybe<Scalars['String']>;\n token0_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token0_not_in?: InputMaybe<Array<Scalars['String']>>;\n token0_not_starts_with?: InputMaybe<Scalars['String']>;\n token0_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token0_starts_with?: InputMaybe<Scalars['String']>;\n token0_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token1?: InputMaybe<Scalars['String']>;\n token1Price?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_gt?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_gte?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1Price_lt?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_lte?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_not?: InputMaybe<Scalars['BigDecimal']>;\n token1Price_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n token1_?: InputMaybe<UniswapToken_Filter>;\n token1_contains?: InputMaybe<Scalars['String']>;\n token1_contains_nocase?: InputMaybe<Scalars['String']>;\n token1_ends_with?: InputMaybe<Scalars['String']>;\n token1_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token1_gt?: InputMaybe<Scalars['String']>;\n token1_gte?: InputMaybe<Scalars['String']>;\n token1_in?: InputMaybe<Array<Scalars['String']>>;\n token1_lt?: InputMaybe<Scalars['String']>;\n token1_lte?: InputMaybe<Scalars['String']>;\n token1_not?: InputMaybe<Scalars['String']>;\n token1_not_contains?: InputMaybe<Scalars['String']>;\n token1_not_contains_nocase?: InputMaybe<Scalars['String']>;\n token1_not_ends_with?: InputMaybe<Scalars['String']>;\n token1_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n token1_not_in?: InputMaybe<Array<Scalars['String']>>;\n token1_not_starts_with?: InputMaybe<Scalars['String']>;\n token1_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n token1_starts_with?: InputMaybe<Scalars['String']>;\n token1_starts_with_nocase?: InputMaybe<Scalars['String']>;\n totalValueLockedToken0?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken0_gt?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken0_gte?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken0_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalValueLockedToken0_lt?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken0_lte?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken0_not?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken0_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalValueLockedToken1?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken1_gt?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken1_gte?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken1_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n totalValueLockedToken1_lt?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken1_lte?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken1_not?: InputMaybe<Scalars['BigDecimal']>;\n totalValueLockedToken1_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum UniswapPool_OrderBy {\n Id = 'id',\n Liquidity = 'liquidity',\n Tick = 'tick',\n Token0 = 'token0',\n Token0Price = 'token0Price',\n Token1 = 'token1',\n Token1Price = 'token1Price',\n TotalValueLockedToken0 = 'totalValueLockedToken0',\n TotalValueLockedToken1 = 'totalValueLockedToken1'\n}\n\nexport type UniswapToken = {\n __typename?: 'UniswapToken';\n /** Token address */\n address: Scalars['Bytes'];\n /** Pools token is in that are allow listed for USD pricing */\n allowedPools: Array<UniswapToken>;\n /** Token decimals fetched by contract call */\n decimals: Scalars['Int'];\n /** Token address to hexString */\n id: Scalars['ID'];\n /** Token name fetched by ERC20 contract call */\n name: Scalars['String'];\n /** Derived price in ETH */\n priceEth?: Maybe<Scalars['BigDecimal']>;\n /** Derived price in USD */\n priceUsd?: Maybe<Scalars['BigDecimal']>;\n /** Token symbol fetched by contract call */\n symbol: Scalars['String'];\n};\n\n\nexport type UniswapTokenAllowedPoolsArgs = {\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<UniswapToken_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n where?: InputMaybe<UniswapToken_Filter>;\n};\n\nexport type UniswapToken_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n address?: InputMaybe<Scalars['Bytes']>;\n address_contains?: InputMaybe<Scalars['Bytes']>;\n address_in?: InputMaybe<Array<Scalars['Bytes']>>;\n address_not?: InputMaybe<Scalars['Bytes']>;\n address_not_contains?: InputMaybe<Scalars['Bytes']>;\n address_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n allowedPools?: InputMaybe<Array<Scalars['String']>>;\n allowedPools_?: InputMaybe<UniswapToken_Filter>;\n allowedPools_contains?: InputMaybe<Array<Scalars['String']>>;\n allowedPools_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n allowedPools_not?: InputMaybe<Array<Scalars['String']>>;\n allowedPools_not_contains?: InputMaybe<Array<Scalars['String']>>;\n allowedPools_not_contains_nocase?: InputMaybe<Array<Scalars['String']>>;\n decimals?: InputMaybe<Scalars['Int']>;\n decimals_gt?: InputMaybe<Scalars['Int']>;\n decimals_gte?: InputMaybe<Scalars['Int']>;\n decimals_in?: InputMaybe<Array<Scalars['Int']>>;\n decimals_lt?: InputMaybe<Scalars['Int']>;\n decimals_lte?: InputMaybe<Scalars['Int']>;\n decimals_not?: InputMaybe<Scalars['Int']>;\n decimals_not_in?: InputMaybe<Array<Scalars['Int']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n name?: InputMaybe<Scalars['String']>;\n name_contains?: InputMaybe<Scalars['String']>;\n name_contains_nocase?: InputMaybe<Scalars['String']>;\n name_ends_with?: InputMaybe<Scalars['String']>;\n name_ends_with_nocase?: InputMaybe<Scalars['String']>;\n name_gt?: InputMaybe<Scalars['String']>;\n name_gte?: InputMaybe<Scalars['String']>;\n name_in?: InputMaybe<Array<Scalars['String']>>;\n name_lt?: InputMaybe<Scalars['String']>;\n name_lte?: InputMaybe<Scalars['String']>;\n name_not?: InputMaybe<Scalars['String']>;\n name_not_contains?: InputMaybe<Scalars['String']>;\n name_not_contains_nocase?: InputMaybe<Scalars['String']>;\n name_not_ends_with?: InputMaybe<Scalars['String']>;\n name_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n name_not_in?: InputMaybe<Array<Scalars['String']>>;\n name_not_starts_with?: InputMaybe<Scalars['String']>;\n name_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n name_starts_with?: InputMaybe<Scalars['String']>;\n name_starts_with_nocase?: InputMaybe<Scalars['String']>;\n priceEth?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n priceEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_not?: InputMaybe<Scalars['BigDecimal']>;\n priceEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n priceUsd?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n priceUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n priceUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n symbol?: InputMaybe<Scalars['String']>;\n symbol_contains?: InputMaybe<Scalars['String']>;\n symbol_contains_nocase?: InputMaybe<Scalars['String']>;\n symbol_ends_with?: InputMaybe<Scalars['String']>;\n symbol_ends_with_nocase?: InputMaybe<Scalars['String']>;\n symbol_gt?: InputMaybe<Scalars['String']>;\n symbol_gte?: InputMaybe<Scalars['String']>;\n symbol_in?: InputMaybe<Array<Scalars['String']>>;\n symbol_lt?: InputMaybe<Scalars['String']>;\n symbol_lte?: InputMaybe<Scalars['String']>;\n symbol_not?: InputMaybe<Scalars['String']>;\n symbol_not_contains?: InputMaybe<Scalars['String']>;\n symbol_not_contains_nocase?: InputMaybe<Scalars['String']>;\n symbol_not_ends_with?: InputMaybe<Scalars['String']>;\n symbol_not_ends_with_nocase?: InputMaybe<Scalars['String']>;\n symbol_not_in?: InputMaybe<Array<Scalars['String']>>;\n symbol_not_starts_with?: InputMaybe<Scalars['String']>;\n symbol_not_starts_with_nocase?: InputMaybe<Scalars['String']>;\n symbol_starts_with?: InputMaybe<Scalars['String']>;\n symbol_starts_with_nocase?: InputMaybe<Scalars['String']>;\n};\n\nexport enum UniswapToken_OrderBy {\n Address = 'address',\n AllowedPools = 'allowedPools',\n Decimals = 'decimals',\n Id = 'id',\n Name = 'name',\n PriceEth = 'priceEth',\n PriceUsd = 'priceUsd',\n Symbol = 'symbol'\n}\n\nexport type User = {\n __typename?: 'User';\n /** Owner's address */\n address: Scalars['Bytes'];\n /** First trade block timestamp */\n firstTradeTimestamp: Scalars['Int'];\n /** Trade event order owner */\n id: Scalars['ID'];\n /** Determine if user has solved a settlement */\n isSolver: Scalars['Boolean'];\n /** Solved trades */\n numberOfTrades: Scalars['Int'];\n /** List of orders placed by this user */\n ordersPlaced: Array<Order>;\n /** total amount solved by the user in Eth */\n solvedAmountEth?: Maybe<Scalars['BigDecimal']>;\n /** total amount solved by the user in Usd */\n solvedAmountUsd?: Maybe<Scalars['BigDecimal']>;\n /** total amount traded by the user in Eth */\n tradedAmountEth?: Maybe<Scalars['BigDecimal']>;\n /** total amount traded by the user in Usd */\n tradedAmountUsd?: Maybe<Scalars['BigDecimal']>;\n};\n\n\nexport type UserOrdersPlacedArgs = {\n first?: InputMaybe<Scalars['Int']>;\n orderBy?: InputMaybe<Order_OrderBy>;\n orderDirection?: InputMaybe<OrderDirection>;\n skip?: InputMaybe<Scalars['Int']>;\n where?: InputMaybe<Order_Filter>;\n};\n\nexport type User_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe<BlockChangedFilter>;\n address?: InputMaybe<Scalars['Bytes']>;\n address_contains?: InputMaybe<Scalars['Bytes']>;\n address_in?: InputMaybe<Array<Scalars['Bytes']>>;\n address_not?: InputMaybe<Scalars['Bytes']>;\n address_not_contains?: InputMaybe<Scalars['Bytes']>;\n address_not_in?: InputMaybe<Array<Scalars['Bytes']>>;\n firstTradeTimestamp?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_gt?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_gte?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_in?: InputMaybe<Array<Scalars['Int']>>;\n firstTradeTimestamp_lt?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_lte?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_not?: InputMaybe<Scalars['Int']>;\n firstTradeTimestamp_not_in?: InputMaybe<Array<Scalars['Int']>>;\n id?: InputMaybe<Scalars['ID']>;\n id_gt?: InputMaybe<Scalars['ID']>;\n id_gte?: InputMaybe<Scalars['ID']>;\n id_in?: InputMaybe<Array<Scalars['ID']>>;\n id_lt?: InputMaybe<Scalars['ID']>;\n id_lte?: InputMaybe<Scalars['ID']>;\n id_not?: InputMaybe<Scalars['ID']>;\n id_not_in?: InputMaybe<Array<Scalars['ID']>>;\n isSolver?: InputMaybe<Scalars['Boolean']>;\n isSolver_in?: InputMaybe<Array<Scalars['Boolean']>>;\n isSolver_not?: InputMaybe<Scalars['Boolean']>;\n isSolver_not_in?: InputMaybe<Array<Scalars['Boolean']>>;\n numberOfTrades?: InputMaybe<Scalars['Int']>;\n numberOfTrades_gt?: InputMaybe<Scalars['Int']>;\n numberOfTrades_gte?: InputMaybe<Scalars['Int']>;\n numberOfTrades_in?: InputMaybe<Array<Scalars['Int']>>;\n numberOfTrades_lt?: InputMaybe<Scalars['Int']>;\n numberOfTrades_lte?: InputMaybe<Scalars['Int']>;\n numberOfTrades_not?: InputMaybe<Scalars['Int']>;\n numberOfTrades_not_in?: InputMaybe<Array<Scalars['Int']>>;\n ordersPlaced_?: InputMaybe<Order_Filter>;\n solvedAmountEth?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n solvedAmountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n solvedAmountUsd?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n solvedAmountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n solvedAmountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n tradedAmountEth?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountEth_gt?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountEth_gte?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountEth_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n tradedAmountEth_lt?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountEth_lte?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountEth_not?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountEth_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n tradedAmountUsd?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountUsd_gt?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountUsd_gte?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountUsd_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n tradedAmountUsd_lt?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountUsd_lte?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountUsd_not?: InputMaybe<Scalars['BigDecimal']>;\n tradedAmountUsd_not_in?: InputMaybe<Array<Scalars['BigDecimal']>>;\n};\n\nexport enum User_OrderBy {\n Address = 'address',\n FirstTradeTimestamp = 'firstTradeTimestamp',\n Id = 'id',\n IsSolver = 'isSolver',\n NumberOfTrades = 'numberOfTrades',\n OrdersPlaced = 'ordersPlaced',\n SolvedAmountEth = 'solvedAmountEth',\n SolvedAmountUsd = 'solvedAmountUsd',\n TradedAmountEth = 'tradedAmountEth',\n TradedAmountUsd = 'tradedAmountUsd'\n}\n\nexport type _Block_ = {\n __typename?: '_Block_';\n /** The hash of the block */\n hash?: Maybe<Scalars['Bytes']>;\n /** The block number */\n number: Scalars['Int'];\n /** Integer representation of the timestamp stored in blocks for the chain */\n timestamp?: Maybe<Scalars['Int']>;\n};\n\n/** The type for the top-level _meta field */\nexport type _Meta_ = {\n __typename?: '_Meta_';\n /**\n * Information about a specific subgraph block. The hash of the block\n * will be null if the _meta field has a block constraint that asks for\n * a block number. It will be filled if the _meta field has no block constraint\n * and therefore asks for the latest block\n *\n */\n block: _Block_;\n /** The deployment ID */\n deployment: Scalars['String'];\n /** If `true`, the subgraph encountered indexing errors at some past block */\n hasIndexingErrors: Scalars['Boolean'];\n};\n\nexport enum _SubgraphErrorPolicy_ {\n /** Data will be returned even if the subgraph has indexing errors */\n Allow = 'allow',\n /** If the subgraph has indexing errors, data will be omitted. The default. */\n Deny = 'deny'\n}\n\nexport type TotalsQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type TotalsQuery = { __typename?: 'Query', totals: Array<{ __typename?: 'Total', tokens: any, orders: any, traders: any, settlements: any, volumeUsd?: any | null, volumeEth?: any | null, feesUsd?: any | null, feesEth?: any | null }> };\n\nexport type LastDaysVolumeQueryVariables = Exact<{\n days: Scalars['Int'];\n}>;\n\n\nexport type LastDaysVolumeQuery = { __typename?: 'Query', dailyTotals: Array<{ __typename?: 'DailyTotal', timestamp: number, volumeUsd?: any | null }> };\n\nexport type LastHoursVolumeQueryVariables = Exact<{\n hours: Scalars['Int'];\n}>;\n\n\nexport type LastHoursVolumeQuery = { __typename?: 'Query', hourlyTotals: Array<{ __typename?: 'HourlyTotal', timestamp: number, volumeUsd?: any | null }> };\n","import { OrderKind } from '@cowprotocol/contracts'\nimport { debug, error } from 'loglevel'\nimport { ParaSwap, SwapSide } from 'paraswap'\nimport { OptimalRate } from 'paraswap-core'\nimport { NetworkID, RateOptions } from 'paraswap/build/types'\nimport { CowError } from '../../utils/common'\nimport { getTokensFromMarket } from '../../utils/market'\nimport {\n API_NAME,\n BASE_URL,\n DEFAULT_RATE_OPTIONS,\n COMPATIBLE_PARASWAP_CHAINS_WITH_COW,\n LIB,\n LOG_PREFIX,\n} from './constants'\nimport { ParaswapCowswapNetworkID, ParaswapLibMap, ParaswapPriceQuoteParams, QuoteOptions } from './types'\nimport { getParaswapChainId, getValidParams, handleResponse } from './utils'\n\nexport default class ParaswapApi {\n name: string\n #libMap: ParaswapLibMap = LIB\n #apiUrl: string\n #rateOptions: RateOptions\n\n constructor(options: RateOptions = {}) {\n this.name = API_NAME\n this.#apiUrl = BASE_URL\n this.#rateOptions = { ...DEFAULT_RATE_OPTIONS, ...options }\n }\n\n async getQuote(\n params: ParaswapPriceQuoteParams & { chainId: NetworkID },\n options?: Omit<QuoteOptions<true>, 'chainId'>\n ): Promise<OptimalRate | null>\n async getQuote(\n params: ParaswapPriceQuoteParams & { chainId: ParaswapCowswapNetworkID },\n options?: Omit<QuoteOptions<false>, 'chainId'>\n ): Promise<OptimalRate | null>\n async getQuote(\n params: ParaswapPriceQuoteParams,\n options: Omit<QuoteOptions<boolean>, 'chainId'> = { allowParaswapNetworks: false }\n ): Promise<OptimalRate | null> {\n const { chainId } = params\n const { baseToken, quoteToken, fromDecimals, toDecimals, amount, kind, userAddress } = getValidParams(\n params.chainId,\n params\n )\n const requireCowCompatibleChain = !options?.allowParaswapNetworks\n const isCowCompatibleChain = !!getParaswapChainId(chainId)\n // Api expect cow/paraswap compatible chainId, check that passed chainId abides\n if (requireCowCompatibleChain && !isCowCompatibleChain) {\n throw new CowError(\"ParaswapApi isn't compatible with chainId \" + chainId)\n }\n\n const paraSwap = this.#getLib(chainId)\n if (!paraSwap) throw new CowError(\"ParaswapApi isn't compatible with chainId \" + chainId)\n\n // Buy/sell token and side (sell/buy)\n const { sellToken, buyToken } = getTokensFromMarket({ baseToken, quoteToken, kind })\n const swapSide = kind === OrderKind.BUY ? SwapSide.BUY : SwapSide.SELL\n\n // https://developers.paraswap.network/api/get-rate-for-a-token-pair\n const paraswapOptions: RateOptions = { ...this.#rateOptions, ...options?.rateOptions }\n // block any non-cow compatible chains\n if (!options?.allowParaswapNetworks) {\n const isCompatibleChain = getParaswapChainId(chainId)\n if (!isCompatibleChain) {\n error(\n LOG_PREFIX,\n `Chain id ${chainId} is not currently supported by the CoW contracts - please use: ${COMPATIBLE_PARASWAP_CHAINS_WITH_COW.join(\n ','\n )}. If you want to query all other ParaSwap specific chain ids, please pass { allowParaswapNetworks: true } as the query's \"options\" parameter.`\n )\n\n // return a null price\n return null\n }\n }\n\n debug(LOG_PREFIX, 'Getting price quote', params)\n\n // Get price\n const rateResult = await paraSwap.getRate(\n sellToken,\n buyToken,\n amount,\n userAddress,\n swapSide,\n paraswapOptions,\n fromDecimals,\n toDecimals\n )\n\n return handleResponse(rateResult)\n }\n\n /**\n * Syntactic sugar for calling getQuote explicitly requiring Paraswap/CoW compatible chains\n */\n public async getQuoteCowNetworks(\n params: ParaswapPriceQuoteParams & { chainId: ParaswapCowswapNetworkID },\n options?: Omit<QuoteOptions<true>, 'chainId' | 'allowParaswapNetworks'>\n ) {\n return this.getQuote(params, { ...options, allowParaswapNetworks: false })\n }\n\n /**\n * Syntactic sugar for calling getQuote explicitly allowing all Paraswap chains\n */\n public async getQuoteAllNetworks(\n params: ParaswapPriceQuoteParams & { chainId: NetworkID },\n options?: Omit<QuoteOptions<true>, 'chainId' | 'allowParaswapNetworks'>\n ) {\n return this.getQuote(params, { ...options, allowParaswapNetworks: true })\n }\n\n public async updateOptions(options: { apiUrl?: string; rateOptions?: RateOptions | null }) {\n // null resets rateOptions to empty\n if (options.rateOptions === null) {\n this.#rateOptions = {}\n } else {\n this.#rateOptions = {\n ...this.#rateOptions,\n ...(options.rateOptions || {}),\n }\n }\n\n if (options.apiUrl) {\n this.#apiUrl = options.apiUrl\n }\n }\n\n get rateOptions() {\n return this.#rateOptions\n }\n\n get apiUrl() {\n return this.#apiUrl\n }\n\n /* ----- PRIVATE ----- */\n #getLib(chainId: NetworkID): ParaSwap | null {\n return this.#libMap.get(chainId) ?? null\n }\n}\n","import { Signer } from 'ethers'\nimport log from 'loglevel'\nimport { CowError } from './utils/common'\nimport { CowApi, CowSubgraphApi, MetadataApi } from './api'\nimport { SupportedChainId as ChainId } from './constants/chains'\nimport { Context, CowContext } from './utils/context'\nimport { signOrder, signOrderCancellation, UnsignedOrder } from './utils/sign'\nimport { ZeroXApi } from './api/0x'\nimport ParaswapApi from './api/paraswap'\n// types\nimport { SdkOptions, ParaswapEnabled, ZeroXEnabled, OptionsWithApisEnabledStatus } from 'sdk'\n\nexport class CowSdk<T extends ChainId = ChainId, Opt extends SdkOptions = OptionsWithApisEnabledStatus> {\n context: Context\n cowApi: CowApi\n metadataApi: MetadataApi\n cowSubgraphApi: CowSubgraphApi\n zeroXApi: ZeroXEnabled<Opt>\n paraswapApi: ParaswapEnabled<Opt>\n\n constructor(chainId: T = ChainId.MAINNET as T, cowContext: CowContext = {}, options: Opt = {} as Opt) {\n const zeroXEnabled = options?.zeroXOptions?.enabled ?? false\n const paraswapEnabled = options?.paraswapOptions?.enabled ?? false\n\n this.context = new Context(chainId, { ...cowContext })\n this.cowApi = new CowApi(this.context)\n this.cowSubgraphApi = new CowSubgraphApi(this.context)\n this.metadataApi = new MetadataApi(this.context)\n\n this.zeroXApi = (zeroXEnabled ? new ZeroXApi(chainId, options.zeroXOptions) : undefined) as ZeroXEnabled<Opt>\n this.paraswapApi = (paraswapEnabled ? new ParaswapApi(options.paraswapOptions) : undefined) as ParaswapEnabled<Opt>\n\n log.setLevel(options.loglevel || 'ERROR')\n }\n\n updateChainId = (chainId: ChainId) => {\n this.context.updateChainId(chainId)\n }\n\n updateContext = async (cowContext: CowContext, chainId?: ChainId) => {\n const networkId = await this.context.chainId\n this.context.updateContext(cowContext, chainId || networkId)\n }\n\n async signOrder(order: Omit<UnsignedOrder, 'appData'>) {\n const signer = this._checkSigner()\n const chainId = await this.context.chainId\n return signOrder({ ...order, appData: this.context.appDataHash }, chainId, signer)\n }\n\n async signOrderCancellation(orderId: string) {\n const signer = this._checkSigner()\n const chainId = await this.context.chainId\n return signOrderCancellation(orderId, chainId, signer)\n }\n\n _checkSigner(signer: Signer | undefined = this.context.signer) {\n if (!signer) {\n throw new CowError('No signer available')\n }\n\n return signer\n }\n}\n\nexport default CowSdk\n"],"names":["SupportedChainId","CowError","Error","constructor","message","error_code","super","this","objectToQueryString","o","qs","URLSearchParams","key","Object","keys","value","append","toString","qsResult","ALL_SUPPORTED_CHAIN_IDS","MAINNET","GOERLI","GNOSIS_CHAIN","GPv2Settlement","JSON","parse","COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS","reduce","acc","chainId","_extends","address","V4_ERROR_MSG_REGEX","V3_ERROR_MSG_REGEX","RPC_REQUEST_FAILED_REGEX","METAMASK_STRING_CHAINID_REGEX","Map","SigningScheme","EIP712","libraryValue","apiValue","ETHSIGN","EIP1271","PRESIGN","_getSigningSchemeInfo","ecdaSigningScheme","mapSigningSchema","get","undefined","getSigningSchemeLibValue","settlementContract","domainGp","async","_signOrder","params","signer","order","signingScheme","domain","_getDomain","_signOrderCancellation","orderId","_signPayload","payload","signFn","signingMethod","_signature","_signer","signature","IntChainIdTypedDataV4Signer","e","log","error","code","isProviderRpcError","test","data","ApiErrorCodes","ApiErrorCodeDetails","GpQuoteErrorCodes","GpQuoteErrorDetails","OperatorError","static","response","action","orderPostError","json","errorType","apiErrorDetails","description","UNHANDLED_GET_ERROR","UNHANDLED_CREATE_ERROR","UNHANDLED_DELETE_ERROR","_mapActionToErrorDetail","status","getErrorMessage","apiError","name","GpQuoteError","quoteErrorDetails","UNHANDLED_ERROR","quoteError","ERC20BridgeSource","Token","symbol","XDAI_SYMBOL","WRAPPED_NATIVE_TOKEN","ChainId","NATIVE","toErc20Address","tokenAddress","checkedAddress","_excluded","DEFAULT_HEADERS","BaseApi","context","getApiUrl","defaultHeaders","apiVersion","API_NAME","API_VERSION","API_URL_GETTER","baseUrl","post","url","options","onlySingleEnv","fetch","bind","fetchSingleEnv","fetchMultipleEnvs","delete","method","fetchFn","networkId","env","_env","requestOptions","otherOptions","envs","fetchMultipleEnvsRecursive","headers","body","stringify","nextEnvs","uri","ok","length","transformOrder","ethflowData","userValidTo","validTo","owner","onchainUser","sellToken","BUY_ETH_ADDRESS","transformEthFlowOrder","dto","executedFeeAmount","executedSurplusFee","totalFee","addTotalFeeToOrder","getCowProtocolUrl","getProfileUrl","UNHANDLED_QUOTE_ERROR","UNHANDLED_ORDER_GET_ERROR","_handleQuoteResponse","mappedError","NotFound","NoLiquidity","InsufficientLiquidity","SellAmountDoesNotCoverFee","FeeExceedsFrom","UnsupportedToken","mapOperatorErrorToQuoteError","QuoteError","buyToken","text","CowApi","debug","info","getProfile","errorResponse","orderUid","qsParams","limit","offset","queryString","map","txHash","baseToken","quoteToken","amount","kind","catch","quoteParams","mapNewToLegacyParams","cancellation","from","getSigningSchemeApiValue","errorMessage","getErrorFromStatusCode","fullOrder","appData","appDataHash","uid","getApiBaseUrl","fetchProfile","userAddress","receiver","fallbackAddress","baseParams","partiallyFillable","OrderKind","SELL","sellAmountBeforeFee","BUY","buyAmountAfterFee","TOTALS_QUERY","gql","_t","_","LAST_DAYS_VOLUME_QUERY","_t2","LAST_HOURS_VOLUME_QUERY","_t3","DEFAULT_STAGING_URLS","DEFAULT_PROD_URLS","DEFAULT_ENV","CowSubgraphApi","subgraphBaseUrls","getDefaultSubgraphUrl","runQuery","totals","days","hours","query","variables","getBaseUrl","request","getSerializedCID","hash","hexString","stringMatch","match","Uint8Array","byte","parseInt","fromHexString","replace","hexHash","uint8array","CID","import","decode","toV0","MetadataApi","generateAppDataDoc","appDataParams","metadataParams","referrerParams","orderClassParams","metadata","referrer","createReferrerMetadata","quote","createQuoteMetadata","orderClass","createOrderClassMetadata","createAppDataDoc","appCode","version","getAppDataSchema","appDataDoc","validateAppDataDoc","cidV0","cid","ipfsUri","default","loadIpfsFromCid","ipfsHash","digest","multihash","Buffer","validation","success","errors","doc","of","docString","cidVersion","calculateIpfsCidV0","cidToAppDataHex","IpfsHash","file","writeUri","pinataApiKey","pinataApiSecret","pinataContent","pinataMetadata","pinataUrl","pinata_api_key","pinata_secret_api_key","details","pinJSONToIPFS","ipfs","DefaultCowContext","readUri","_chainId","_classPrivateFieldLooseKey","_context","Context","updateContext","cowContext","setParams","defineProperty","writable","_classPrivateFieldLooseBase","updateChainId","provider","_classPrivateFieldLoo","getNetwork","_this","getAndReconciliateNetwork","Promise","resolve","_classPrivateFieldLoo2","_classPrivateFieldLoo3","getTokensFromMarket","ZeroXError","_errorResponse$valida","_errorResponse$valida2","validationErrors","reason","isError","_apiError$validationE","excludedSources","affiliateAddress","extractExcludedSources","affiliateAddressMap","join","EXCLUDED_SOURCES","ZeroXApi","get0xUrls","ZEROX_OPTIONS","ZEROX_OPTIONS_URL","throwOrReturnAffiliateAddress","optionsToMatchaParamsUrl","customChainId","getMatchaChainId","swapSide","clone","errorObj","priceError","handleQuoteResponse","BASE_URL","maxImpact","excludeDEXS","LIB","ParaSwap","COMPATIBLE_PARASWAP_CHAINS_WITH_COW","filter","chain","has","ParaswapError","_errorResponse$data2","_apiError$status","_apiError$data","getParaswapChainId","Bundle_OrderBy","DailyTotal_OrderBy","OrderDirection","Order_OrderBy","PairHourly_OrderBy","Pair_OrderBy","Settlement_OrderBy","TokenHourlyTotal_OrderBy","TokenTradingEvent_OrderBy","Total_OrderBy","Trade_OrderBy","UniswapPool_OrderBy","User_OrderBy","_SubgraphErrorPolicy_","ParaswapApi","_getLib","_getLib2","_libMap","_apiUrl","_rateOptions","DEFAULT_RATE_OPTIONS","allowParaswapNetworks","fromDecimals","toDecimals","baseTokenAux","quoteTokenAux","getValidParams","requireCowCompatibleChain","isCowCompatibleChain","paraSwap","SwapSide","rateOptions","rateResult","destAmount","isGetRateSuccess","priceQuote","priceRoute","getPriceQuoteFromError","handleResponse","getRate","paraswapOptions","getQuote","apiUrl","CowSdk","cowApi","metadataApi","cowSubgraphApi","zeroXApi","paraswapApi","zeroXOptions","_options$zeroXOptions2","enabled","paraswapEnabled","_options$paraswapOpti","_options$paraswapOpti2","zeroXEnabled","setLevel","loglevel","_checkSigner","signOrder","signOrderCancellation","HourlyTotal_OrderBy","PairDaily_OrderBy","TokenDailyTotal_OrderBy","Token_OrderBy","UniswapToken_OrderBy"],"mappings":"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"}