@cowprotocol/cow-sdk 2.1.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/{index-ed2b18ee.js → index-472d7872.js} +3 -3
  2. package/dist/index-472d7872.js.map +1 -0
  3. package/dist/index.js +4 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.modern.mjs +1 -1
  6. package/dist/index.module.js +2 -2
  7. package/dist/index.module.js.map +1 -1
  8. package/dist/order-book/generated/index.d.ts +3 -2
  9. package/dist/order-book/generated/models/{AppData.d.ts → AppDataHash.d.ts} +1 -1
  10. package/dist/order-book/generated/models/Auction.d.ts +1 -1
  11. package/dist/order-book/generated/models/BackendAppData.d.ts +1 -0
  12. package/dist/order-book/generated/models/BuyTokenDestination.d.ts +1 -1
  13. package/dist/order-book/generated/models/CallData.d.ts +1 -1
  14. package/dist/order-book/generated/models/CompetitionAuction.d.ts +1 -1
  15. package/dist/order-book/generated/models/EcdsaSignature.d.ts +1 -1
  16. package/dist/order-book/generated/models/EthflowData.d.ts +5 -5
  17. package/dist/order-book/generated/models/NativePriceResponse.d.ts +1 -1
  18. package/dist/order-book/generated/models/OnchainOrderData.d.ts +8 -8
  19. package/dist/order-book/generated/models/OrderCancellation.d.ts +2 -1
  20. package/dist/order-book/generated/models/OrderCancellations.d.ts +3 -3
  21. package/dist/order-book/generated/models/OrderClass.d.ts +1 -1
  22. package/dist/order-book/generated/models/OrderCreation.d.ts +67 -5
  23. package/dist/order-book/generated/models/OrderKind.d.ts +1 -1
  24. package/dist/order-book/generated/models/OrderMetaData.d.ts +25 -16
  25. package/dist/order-book/generated/models/OrderParameters.d.ts +12 -20
  26. package/dist/order-book/generated/models/OrderPostError.d.ts +4 -1
  27. package/dist/order-book/generated/models/OrderQuoteRequest.d.ts +9 -13
  28. package/dist/order-book/generated/models/OrderQuoteResponse.d.ts +2 -2
  29. package/dist/order-book/generated/models/OrderQuoteSide.d.ts +2 -2
  30. package/dist/order-book/generated/models/OrderQuoteValidity.d.ts +3 -3
  31. package/dist/order-book/generated/models/OrderStatus.d.ts +1 -1
  32. package/dist/order-book/generated/models/PriceQuality.d.ts +2 -1
  33. package/dist/order-book/generated/models/SellTokenSource.d.ts +1 -1
  34. package/dist/order-book/generated/models/SolverCompetitionResponse.d.ts +3 -3
  35. package/dist/order-book/generated/models/SolverSettlement.d.ts +13 -10
  36. package/dist/order-book/generated/models/TokenAmount.d.ts +1 -1
  37. package/dist/order-book/generated/models/TotalSurplus.d.ts +10 -0
  38. package/dist/order-book/generated/models/Trade.d.ts +6 -6
  39. package/dist/order-book/generated/models/UID.d.ts +2 -2
  40. package/dist/package.json +1 -1
  41. package/dist/subgraph/graphql.d.ts +1 -0
  42. package/dist/{utils-65bc03ac.js → utils-02f4dcd1.js} +1 -1
  43. package/dist/{utils-65bc03ac.js.map → utils-02f4dcd1.js.map} +1 -1
  44. package/dist/{utils-7b0a629b.js → utils-3ac5d3d0.js} +2 -2
  45. package/dist/{utils-7b0a629b.js.map → utils-3ac5d3d0.js.map} +1 -1
  46. package/dist/{utils-b35881cd.js → utils-5111115b.js} +1 -1
  47. package/dist/{utils-b35881cd.js.map → utils-5111115b.js.map} +1 -1
  48. package/package.json +1 -1
  49. package/dist/index-ed2b18ee.js.map +0 -1
  50. package/dist/order-book/generated/models/VersionResponse.d.ts +0 -18
@@ -1 +1 @@
1
- {"version":3,"file":"utils-7b0a629b.js","sources":["../src/order-signing/utils.ts"],"sourcesContent":["import type {\n Order as OrderFromContract,\n Signature,\n TypedDataDomain,\n EcdsaSigningScheme as EcdsaSigningSchemeContract,\n} from '@cowprotocol/contracts'\nimport {\n domain as domainGp,\n EcdsaSignature,\n IntChainIdTypedDataV4Signer,\n SigningScheme,\n signOrder as signOrderGp,\n signOrderCancellation as signOrderCancellationGp,\n signOrderCancellations as signOrderCancellationsGp,\n TypedDataVersionedSigner,\n} from '@cowprotocol/contracts'\nimport type { Signer } from '@ethersproject/abstract-signer'\nimport type { SigningResult, SignOrderParams, SingOrderCancellationParams, UnsignedOrder } from './types'\n\nimport { COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS } from '../common/consts'\nimport { CowError, SupportedChainId } from '../common'\nimport { EcdsaSigningScheme } from '../order-book'\nimport { SingOrderCancellationsParams } from './types'\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\n// Added the following because of 1Inch walet who doesn't send the error code\n// So we will check the actual error text\nconst METHOD_NOT_FOUND_ERROR_MSG_REGEX = /Method not found/i\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\nconst mapSigningSchema: Record<EcdsaSigningScheme, EcdsaSigningSchemeContract> = {\n [EcdsaSigningScheme.EIP712]: SigningScheme.EIP712,\n [EcdsaSigningScheme.ETHSIGN]: SigningScheme.ETHSIGN,\n}\n\ninterface ProviderRpcError extends Error {\n message: string\n code: number\n data?: unknown\n}\n\ntype PayloadParams =\n | Pick<SignOrderParams, 'order' & 'chainId'>\n | Pick<SingOrderCancellationParams, 'chainId' & 'orderId'>\n | Pick<SingOrderCancellationsParams, 'chainId' & 'orderUids'>\n\nfunction isProviderRpcError(error: unknown): error is ProviderRpcError {\n return (error as ProviderRpcError).code !== undefined || (error as ProviderRpcError).message !== undefined\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 as OrderFromContract, signer, mapSigningSchema[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, mapSigningSchema[signingScheme])\n}\n\nasync function _signOrderCancellations(params: SingOrderCancellationsParams): Promise<Signature> {\n const { chainId, signer, signingScheme, orderUids } = params\n\n const domain = getDomain(chainId)\n\n return signOrderCancellationsGp(domain, orderUids, signer, mapSigningSchema[signingScheme])\n}\n\nasync function _signPayload(\n payload: PayloadParams,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n signFn: (params: any) => Promise<Signature>,\n signer: Signer,\n signingMethod: 'default' | 'v4' | 'int_v4' | 'v3' | 'eth_sign' = 'v4'\n): Promise<SigningResult> {\n const signingScheme: EcdsaSigningScheme =\n signingMethod === 'eth_sign' ? EcdsaSigningScheme.ETHSIGN : EcdsaSigningScheme.EIP712\n let signature: Signature | null = null\n\n let _signer\n try {\n switch (signingMethod) {\n case 'default':\n case 'v3':\n _signer = new TypedDataVersionedSigner(signer)\n break\n case 'int_v4':\n _signer = new IntChainIdTypedDataV4Signer(signer)\n break\n default:\n _signer = signer\n }\n } catch (e) {\n console.error('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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (!isProviderRpcError(e)) {\n // Some other error signing. Let it bubble up.\n console.error(e)\n throw e\n }\n\n const regexErrorCheck = [METHOD_NOT_FOUND_ERROR_MSG_REGEX, RPC_REQUEST_FAILED_REGEX].some((regex) =>\n // for example 1Inch error doesn't have e.message so we will check the output of toString()\n [e.message, e.toString()].some((msg) => regex.test(msg))\n )\n\n if (e.code === METHOD_NOT_FOUND_ERROR_CODE || regexErrorCheck) {\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, 'default')\n case 'default':\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 } else {\n // Some other error signing. Let it bubble up.\n console.error(e)\n throw e\n }\n }\n\n const data: unknown = signature?.data\n\n return { signature: data?.toString() || '', signingScheme }\n}\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 {SupportedChainId} 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(\n order: UnsignedOrder,\n chainId: SupportedChainId,\n signer: Signer\n): 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 {SupportedChainId} 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(\n orderId: string,\n chainId: SupportedChainId,\n signer: Signer\n): Promise<SigningResult> {\n return _signPayload({ orderId, chainId }, _signOrderCancellation, signer)\n}\n\nexport async function signOrderCancellations(\n orderUids: string[],\n chainId: SupportedChainId,\n signer: Signer\n): Promise<SigningResult> {\n return _signPayload({ orderUids, chainId }, _signOrderCancellations, signer)\n}\n\nexport function getDomain(chainId: SupportedChainId): 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"],"names":["METAMASK_SIGNATURE_ERROR_CODE","METHOD_NOT_FOUND_ERROR_CODE","METHOD_NOT_FOUND_ERROR_MSG_REGEX","V4_ERROR_MSG_REGEX","V3_ERROR_MSG_REGEX","RPC_REQUEST_FAILED_REGEX","METAMASK_STRING_CHAINID_REGEX","mapSigningSchema","EcdsaSigningScheme","EIP712","SigningScheme","ETHSIGN","async","_signOrder","params","chainId","signer","order","signingScheme","domain","getDomain","signOrderGp","_signOrderCancellation","orderId","signOrderCancellationGp","_signOrderCancellations","orderUids","signOrderCancellationsGp","_signPayload","payload","signFn","signingMethod","_signature","_signer","signature","TypedDataVersionedSigner","IntChainIdTypedDataV4Signer","e","console","error","CowError","_extends","undefined","code","message","regexErrorCheck","some","regex","toString","msg","test","data","signOrder","signOrderCancellation","signOrderCancellations","settlementContract","COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS","domainGp"],"mappings":"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"}
1
+ {"version":3,"file":"utils-3ac5d3d0.js","sources":["../src/order-signing/utils.ts"],"sourcesContent":["import type {\n Order as OrderFromContract,\n Signature,\n TypedDataDomain,\n EcdsaSigningScheme as EcdsaSigningSchemeContract,\n} from '@cowprotocol/contracts'\nimport {\n domain as domainGp,\n EcdsaSignature,\n IntChainIdTypedDataV4Signer,\n SigningScheme,\n signOrder as signOrderGp,\n signOrderCancellation as signOrderCancellationGp,\n signOrderCancellations as signOrderCancellationsGp,\n TypedDataVersionedSigner,\n} from '@cowprotocol/contracts'\nimport type { Signer } from '@ethersproject/abstract-signer'\nimport type { SigningResult, SignOrderParams, SingOrderCancellationParams, UnsignedOrder } from './types'\n\nimport { COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS } from '../common/consts'\nimport { CowError, SupportedChainId } from '../common'\nimport { EcdsaSigningScheme } from '../order-book'\nimport { SingOrderCancellationsParams } from './types'\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\n// Added the following because of 1Inch walet who doesn't send the error code\n// So we will check the actual error text\nconst METHOD_NOT_FOUND_ERROR_MSG_REGEX = /Method not found/i\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\nconst mapSigningSchema: Record<EcdsaSigningScheme, EcdsaSigningSchemeContract> = {\n [EcdsaSigningScheme.EIP712]: SigningScheme.EIP712,\n [EcdsaSigningScheme.ETHSIGN]: SigningScheme.ETHSIGN,\n}\n\ninterface ProviderRpcError extends Error {\n message: string\n code: number\n data?: unknown\n}\n\ntype PayloadParams =\n | Pick<SignOrderParams, 'order' & 'chainId'>\n | Pick<SingOrderCancellationParams, 'chainId' & 'orderId'>\n | Pick<SingOrderCancellationsParams, 'chainId' & 'orderUids'>\n\nfunction isProviderRpcError(error: unknown): error is ProviderRpcError {\n return (error as ProviderRpcError).code !== undefined || (error as ProviderRpcError).message !== undefined\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 as OrderFromContract, signer, mapSigningSchema[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, mapSigningSchema[signingScheme])\n}\n\nasync function _signOrderCancellations(params: SingOrderCancellationsParams): Promise<Signature> {\n const { chainId, signer, signingScheme, orderUids } = params\n\n const domain = getDomain(chainId)\n\n return signOrderCancellationsGp(domain, orderUids, signer, mapSigningSchema[signingScheme])\n}\n\nasync function _signPayload(\n payload: PayloadParams,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n signFn: (params: any) => Promise<Signature>,\n signer: Signer,\n signingMethod: 'default' | 'v4' | 'int_v4' | 'v3' | 'eth_sign' = 'v4'\n): Promise<SigningResult> {\n const signingScheme: EcdsaSigningScheme =\n signingMethod === 'eth_sign' ? EcdsaSigningScheme.ETHSIGN : EcdsaSigningScheme.EIP712\n let signature: Signature | null = null\n\n let _signer\n try {\n switch (signingMethod) {\n case 'default':\n case 'v3':\n _signer = new TypedDataVersionedSigner(signer)\n break\n case 'int_v4':\n _signer = new IntChainIdTypedDataV4Signer(signer)\n break\n default:\n _signer = signer\n }\n } catch (e) {\n console.error('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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (!isProviderRpcError(e)) {\n // Some other error signing. Let it bubble up.\n console.error(e)\n throw e\n }\n\n const regexErrorCheck = [METHOD_NOT_FOUND_ERROR_MSG_REGEX, RPC_REQUEST_FAILED_REGEX].some((regex) =>\n // for example 1Inch error doesn't have e.message so we will check the output of toString()\n [e.message, e.toString()].some((msg) => regex.test(msg))\n )\n\n if (e.code === METHOD_NOT_FOUND_ERROR_CODE || regexErrorCheck) {\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, 'default')\n case 'default':\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 } else {\n // Some other error signing. Let it bubble up.\n console.error(e)\n throw e\n }\n }\n\n const data: unknown = signature?.data\n\n return { signature: data?.toString() || '', signingScheme }\n}\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 {SupportedChainId} 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(\n order: UnsignedOrder,\n chainId: SupportedChainId,\n signer: Signer\n): 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 {SupportedChainId} 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(\n orderId: string,\n chainId: SupportedChainId,\n signer: Signer\n): Promise<SigningResult> {\n return _signPayload({ orderId, chainId }, _signOrderCancellation, signer)\n}\n\nexport async function signOrderCancellations(\n orderUids: string[],\n chainId: SupportedChainId,\n signer: Signer\n): Promise<SigningResult> {\n return _signPayload({ orderUids, chainId }, _signOrderCancellations, signer)\n}\n\nexport function getDomain(chainId: SupportedChainId): 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"],"names":["METAMASK_SIGNATURE_ERROR_CODE","METHOD_NOT_FOUND_ERROR_CODE","METHOD_NOT_FOUND_ERROR_MSG_REGEX","V4_ERROR_MSG_REGEX","V3_ERROR_MSG_REGEX","RPC_REQUEST_FAILED_REGEX","METAMASK_STRING_CHAINID_REGEX","mapSigningSchema","EcdsaSigningScheme","EIP712","SigningScheme","ETHSIGN","async","_signOrder","params","chainId","signer","order","signingScheme","domain","getDomain","signOrderGp","_signOrderCancellation","orderId","signOrderCancellationGp","_signOrderCancellations","orderUids","signOrderCancellationsGp","_signPayload","payload","signFn","signingMethod","_signature","_signer","signature","TypedDataVersionedSigner","IntChainIdTypedDataV4Signer","e","console","error","CowError","_extends","undefined","code","message","regexErrorCheck","some","regex","toString","msg","test","data","signOrder","signOrderCancellation","signOrderCancellations","settlementContract","COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS","domainGp"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  var e=require("@cowprotocol/contracts"),r=require("./index.js");require("cross-fetch/polyfill"),require("limiter"),require("exponential-backoff"),require("graphql-request");const n=function(t,i,o,l="v4"){try{let f;function m(e){if(f)return e;const r=p?.data;return{signature:r?.toString()||"",signingScheme:S}}const S="eth_sign"===l?r.EcdsaSigningScheme.ETHSIGN:r.EcdsaSigningScheme.EIP712;let v,p=null;try{switch(l){case"default":case"v3":v=new e.TypedDataVersionedSigner(o);break;case"int_v4":v=new e.IntChainIdTypedDataV4Signer(o);break;default:v=o}}catch(I){throw console.error("Wallet not supported:",I),new r.CowError("Wallet not supported")}const E=function(e,r){try{var n=Promise.resolve(i({...t,signer:v,signingScheme:S})).then(function(e){p=e})}catch(e){return r(e)}return n&&n.then?n.then(void 0,r):n}(0,function(e){if(void 0===(r=e).code&&void 0===r.message)throw console.error(e),e;var r;const m=[a,g].some(r=>[e.message,e.toString()].some(e=>r.test(e)));if(e.code!==c&&!m){if(h.test(e.message)){const e=n(t,i,o,"int_v4");return f=1,e}if(e.code===s){const e=n(t,i,o,"eth_sign");return f=1,e}if(d.test(e.message)){const e=n(t,i,o,"v3");return f=1,e}if(u.test(e.message)){const e=n(t,i,o,"eth_sign");return f=1,e}throw console.error(e),e}switch(l){case"v4":const r=n(t,i,o,"default");return f=1,r;case"default":const s=n(t,i,o,"v3");return f=1,s;case"v3":const c=n(t,i,o,"eth_sign");return f=1,c;default:throw e}});return Promise.resolve(E&&E.then?E.then(m):m(E))}catch(w){return Promise.reject(w)}},t=function(r){try{const{chainId:n,signer:t,signingScheme:i,orderUids:o}=r,s=m(n);return Promise.resolve(e.signOrderCancellations(s,o,t,l[i]))}catch(e){return Promise.reject(e)}},i=function(r){try{const{chainId:n,signer:t,signingScheme:i,orderId:o}=r,s=m(n);return Promise.resolve(e.signOrderCancellation(s,o,t,l[i]))}catch(e){return Promise.reject(e)}},o=function(r){try{const{chainId:n,signer:t,order:i,signingScheme:o}=r,s=m(n);return Promise.resolve(e.signOrder(s,i,t,l[o]))}catch(e){return Promise.reject(e)}},s=-32603,c=-32601,a=/Method not found/i,d=/eth_signTypedData_v4 does not exist/i,u=/eth_signTypedData_v3 does not exist/i,g=/RPC request failed/i,h=/provided chainid .* must match the active chainid/i,l={[r.EcdsaSigningScheme.EIP712]:e.SigningScheme.EIP712,[r.EcdsaSigningScheme.ETHSIGN]:e.SigningScheme.ETHSIGN};function m(n){const t=r.COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS[n];if(!t)throw new r.CowError("Unsupported network. Settlement contract is not deployed");return e.domain(n,t)}exports.getDomain=m,exports.signOrder=function(e,r,t){return n({order:e,chainId:r},o,t)},exports.signOrderCancellation=function(e,r,t){return n({orderId:e,chainId:r},i,t)},exports.signOrderCancellations=function(e,r,i){return n({orderUids:e,chainId:r},t,i)};
2
- //# sourceMappingURL=utils-b35881cd.js.map
2
+ //# sourceMappingURL=utils-5111115b.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils-b35881cd.js","sources":["../src/order-signing/utils.ts"],"sourcesContent":["import type {\n Order as OrderFromContract,\n Signature,\n TypedDataDomain,\n EcdsaSigningScheme as EcdsaSigningSchemeContract,\n} from '@cowprotocol/contracts'\nimport {\n domain as domainGp,\n EcdsaSignature,\n IntChainIdTypedDataV4Signer,\n SigningScheme,\n signOrder as signOrderGp,\n signOrderCancellation as signOrderCancellationGp,\n signOrderCancellations as signOrderCancellationsGp,\n TypedDataVersionedSigner,\n} from '@cowprotocol/contracts'\nimport type { Signer } from '@ethersproject/abstract-signer'\nimport type { SigningResult, SignOrderParams, SingOrderCancellationParams, UnsignedOrder } from './types'\n\nimport { COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS } from '../common/consts'\nimport { CowError, SupportedChainId } from '../common'\nimport { EcdsaSigningScheme } from '../order-book'\nimport { SingOrderCancellationsParams } from './types'\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\n// Added the following because of 1Inch walet who doesn't send the error code\n// So we will check the actual error text\nconst METHOD_NOT_FOUND_ERROR_MSG_REGEX = /Method not found/i\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\nconst mapSigningSchema: Record<EcdsaSigningScheme, EcdsaSigningSchemeContract> = {\n [EcdsaSigningScheme.EIP712]: SigningScheme.EIP712,\n [EcdsaSigningScheme.ETHSIGN]: SigningScheme.ETHSIGN,\n}\n\ninterface ProviderRpcError extends Error {\n message: string\n code: number\n data?: unknown\n}\n\ntype PayloadParams =\n | Pick<SignOrderParams, 'order' & 'chainId'>\n | Pick<SingOrderCancellationParams, 'chainId' & 'orderId'>\n | Pick<SingOrderCancellationsParams, 'chainId' & 'orderUids'>\n\nfunction isProviderRpcError(error: unknown): error is ProviderRpcError {\n return (error as ProviderRpcError).code !== undefined || (error as ProviderRpcError).message !== undefined\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 as OrderFromContract, signer, mapSigningSchema[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, mapSigningSchema[signingScheme])\n}\n\nasync function _signOrderCancellations(params: SingOrderCancellationsParams): Promise<Signature> {\n const { chainId, signer, signingScheme, orderUids } = params\n\n const domain = getDomain(chainId)\n\n return signOrderCancellationsGp(domain, orderUids, signer, mapSigningSchema[signingScheme])\n}\n\nasync function _signPayload(\n payload: PayloadParams,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n signFn: (params: any) => Promise<Signature>,\n signer: Signer,\n signingMethod: 'default' | 'v4' | 'int_v4' | 'v3' | 'eth_sign' = 'v4'\n): Promise<SigningResult> {\n const signingScheme: EcdsaSigningScheme =\n signingMethod === 'eth_sign' ? EcdsaSigningScheme.ETHSIGN : EcdsaSigningScheme.EIP712\n let signature: Signature | null = null\n\n let _signer\n try {\n switch (signingMethod) {\n case 'default':\n case 'v3':\n _signer = new TypedDataVersionedSigner(signer)\n break\n case 'int_v4':\n _signer = new IntChainIdTypedDataV4Signer(signer)\n break\n default:\n _signer = signer\n }\n } catch (e) {\n console.error('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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (!isProviderRpcError(e)) {\n // Some other error signing. Let it bubble up.\n console.error(e)\n throw e\n }\n\n const regexErrorCheck = [METHOD_NOT_FOUND_ERROR_MSG_REGEX, RPC_REQUEST_FAILED_REGEX].some((regex) =>\n // for example 1Inch error doesn't have e.message so we will check the output of toString()\n [e.message, e.toString()].some((msg) => regex.test(msg))\n )\n\n if (e.code === METHOD_NOT_FOUND_ERROR_CODE || regexErrorCheck) {\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, 'default')\n case 'default':\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 } else {\n // Some other error signing. Let it bubble up.\n console.error(e)\n throw e\n }\n }\n\n const data: unknown = signature?.data\n\n return { signature: data?.toString() || '', signingScheme }\n}\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 {SupportedChainId} 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(\n order: UnsignedOrder,\n chainId: SupportedChainId,\n signer: Signer\n): 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 {SupportedChainId} 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(\n orderId: string,\n chainId: SupportedChainId,\n signer: Signer\n): Promise<SigningResult> {\n return _signPayload({ orderId, chainId }, _signOrderCancellation, signer)\n}\n\nexport async function signOrderCancellations(\n orderUids: string[],\n chainId: SupportedChainId,\n signer: Signer\n): Promise<SigningResult> {\n return _signPayload({ orderUids, chainId }, _signOrderCancellations, signer)\n}\n\nexport function getDomain(chainId: SupportedChainId): 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"],"names":["_signPayload","payload","signFn","signer","signingMethod","_exit","_temp2","_result","data","signature","toString","signingScheme","EcdsaSigningScheme","ETHSIGN","EIP712","_signer","TypedDataVersionedSigner","IntChainIdTypedDataV4Signer","e","console","error","CowError","_temp","Promise","resolve","then","_signFn","_catch","undefined","code","message","regexErrorCheck","METHOD_NOT_FOUND_ERROR_MSG_REGEX","RPC_REQUEST_FAILED_REGEX","some","regex","msg","test","METHOD_NOT_FOUND_ERROR_CODE","METAMASK_STRING_CHAINID_REGEX","_signPayload5","METAMASK_SIGNATURE_ERROR_CODE","_signPayload6","V4_ERROR_MSG_REGEX","_signPayload7","V3_ERROR_MSG_REGEX","_signPayload8","_signPayload2","_signPayload3","_signPayload4","reject","_signOrderCancellations","params","chainId","orderUids","domain","getDomain","signOrderCancellationsGp","signOrderCancellations","mapSigningSchema","_signOrderCancellation","orderId","signOrderCancellationGp","_signOrder","order","signOrderGp","signOrder","SigningScheme","settlementContract","COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS","domainGp"],"mappings":"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"}
1
+ {"version":3,"file":"utils-5111115b.js","sources":["../src/order-signing/utils.ts"],"sourcesContent":["import type {\n Order as OrderFromContract,\n Signature,\n TypedDataDomain,\n EcdsaSigningScheme as EcdsaSigningSchemeContract,\n} from '@cowprotocol/contracts'\nimport {\n domain as domainGp,\n EcdsaSignature,\n IntChainIdTypedDataV4Signer,\n SigningScheme,\n signOrder as signOrderGp,\n signOrderCancellation as signOrderCancellationGp,\n signOrderCancellations as signOrderCancellationsGp,\n TypedDataVersionedSigner,\n} from '@cowprotocol/contracts'\nimport type { Signer } from '@ethersproject/abstract-signer'\nimport type { SigningResult, SignOrderParams, SingOrderCancellationParams, UnsignedOrder } from './types'\n\nimport { COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS } from '../common/consts'\nimport { CowError, SupportedChainId } from '../common'\nimport { EcdsaSigningScheme } from '../order-book'\nimport { SingOrderCancellationsParams } from './types'\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\n// Added the following because of 1Inch walet who doesn't send the error code\n// So we will check the actual error text\nconst METHOD_NOT_FOUND_ERROR_MSG_REGEX = /Method not found/i\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\nconst mapSigningSchema: Record<EcdsaSigningScheme, EcdsaSigningSchemeContract> = {\n [EcdsaSigningScheme.EIP712]: SigningScheme.EIP712,\n [EcdsaSigningScheme.ETHSIGN]: SigningScheme.ETHSIGN,\n}\n\ninterface ProviderRpcError extends Error {\n message: string\n code: number\n data?: unknown\n}\n\ntype PayloadParams =\n | Pick<SignOrderParams, 'order' & 'chainId'>\n | Pick<SingOrderCancellationParams, 'chainId' & 'orderId'>\n | Pick<SingOrderCancellationsParams, 'chainId' & 'orderUids'>\n\nfunction isProviderRpcError(error: unknown): error is ProviderRpcError {\n return (error as ProviderRpcError).code !== undefined || (error as ProviderRpcError).message !== undefined\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 as OrderFromContract, signer, mapSigningSchema[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, mapSigningSchema[signingScheme])\n}\n\nasync function _signOrderCancellations(params: SingOrderCancellationsParams): Promise<Signature> {\n const { chainId, signer, signingScheme, orderUids } = params\n\n const domain = getDomain(chainId)\n\n return signOrderCancellationsGp(domain, orderUids, signer, mapSigningSchema[signingScheme])\n}\n\nasync function _signPayload(\n payload: PayloadParams,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n signFn: (params: any) => Promise<Signature>,\n signer: Signer,\n signingMethod: 'default' | 'v4' | 'int_v4' | 'v3' | 'eth_sign' = 'v4'\n): Promise<SigningResult> {\n const signingScheme: EcdsaSigningScheme =\n signingMethod === 'eth_sign' ? EcdsaSigningScheme.ETHSIGN : EcdsaSigningScheme.EIP712\n let signature: Signature | null = null\n\n let _signer\n try {\n switch (signingMethod) {\n case 'default':\n case 'v3':\n _signer = new TypedDataVersionedSigner(signer)\n break\n case 'int_v4':\n _signer = new IntChainIdTypedDataV4Signer(signer)\n break\n default:\n _signer = signer\n }\n } catch (e) {\n console.error('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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (!isProviderRpcError(e)) {\n // Some other error signing. Let it bubble up.\n console.error(e)\n throw e\n }\n\n const regexErrorCheck = [METHOD_NOT_FOUND_ERROR_MSG_REGEX, RPC_REQUEST_FAILED_REGEX].some((regex) =>\n // for example 1Inch error doesn't have e.message so we will check the output of toString()\n [e.message, e.toString()].some((msg) => regex.test(msg))\n )\n\n if (e.code === METHOD_NOT_FOUND_ERROR_CODE || regexErrorCheck) {\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, 'default')\n case 'default':\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 } else {\n // Some other error signing. Let it bubble up.\n console.error(e)\n throw e\n }\n }\n\n const data: unknown = signature?.data\n\n return { signature: data?.toString() || '', signingScheme }\n}\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 {SupportedChainId} 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(\n order: UnsignedOrder,\n chainId: SupportedChainId,\n signer: Signer\n): 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 {SupportedChainId} 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(\n orderId: string,\n chainId: SupportedChainId,\n signer: Signer\n): Promise<SigningResult> {\n return _signPayload({ orderId, chainId }, _signOrderCancellation, signer)\n}\n\nexport async function signOrderCancellations(\n orderUids: string[],\n chainId: SupportedChainId,\n signer: Signer\n): Promise<SigningResult> {\n return _signPayload({ orderUids, chainId }, _signOrderCancellations, signer)\n}\n\nexport function getDomain(chainId: SupportedChainId): 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"],"names":["_signPayload","payload","signFn","signer","signingMethod","_exit","_temp2","_result","data","signature","toString","signingScheme","EcdsaSigningScheme","ETHSIGN","EIP712","_signer","TypedDataVersionedSigner","IntChainIdTypedDataV4Signer","e","console","error","CowError","_temp","Promise","resolve","then","_signFn","_catch","undefined","code","message","regexErrorCheck","METHOD_NOT_FOUND_ERROR_MSG_REGEX","RPC_REQUEST_FAILED_REGEX","some","regex","msg","test","METHOD_NOT_FOUND_ERROR_CODE","METAMASK_STRING_CHAINID_REGEX","_signPayload5","METAMASK_SIGNATURE_ERROR_CODE","_signPayload6","V4_ERROR_MSG_REGEX","_signPayload7","V3_ERROR_MSG_REGEX","_signPayload8","_signPayload2","_signPayload3","_signPayload4","reject","_signOrderCancellations","params","chainId","orderUids","domain","getDomain","signOrderCancellationsGp","signOrderCancellations","mapSigningSchema","_signOrderCancellation","orderId","signOrderCancellationGp","_signOrder","order","signOrderGp","signOrder","SigningScheme","settlementContract","COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS","domainGp"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cowprotocol/cow-sdk",
3
- "version": "2.1.0",
3
+ "version": "2.2.1",
4
4
  "license": "(MIT OR Apache-2.0)",
5
5
  "files": [
6
6
  "/dist"
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-ed2b18ee.js","sources":["../src/common/chains.ts","../src/common/configs.ts","../src/common/cow-error.ts","../src/common/ipfs.ts","../src/common/consts.ts","../src/order-book/transformOrder.ts","../src/order-book/request.ts","../src/order-book/api.ts","../src/order-book/generated/models/BuyTokenDestination.ts","../src/order-book/generated/models/EcdsaSigningScheme.ts","../src/order-book/generated/models/FeeAndQuoteError.ts","../src/order-book/generated/models/OnchainOrderData.ts","../src/order-book/generated/models/OrderCancellationError.ts","../src/order-book/generated/models/OrderClass.ts","../src/order-book/generated/models/OrderKind.ts","../src/order-book/generated/models/OrderPostError.ts","../src/order-book/generated/models/OrderQuoteSide.ts","../src/order-book/generated/models/OrderStatus.ts","../src/order-book/generated/models/PriceQuality.ts","../src/order-book/generated/models/ReplaceOrderError.ts","../src/order-book/generated/models/SellTokenSource.ts","../src/order-book/generated/models/SigningScheme.ts","../src/subgraph/queries.ts","../src/subgraph/api.ts","../src/order-signing/orderSigningUtils.ts"],"sourcesContent":["export enum SupportedChainId {\n MAINNET = 1,\n GOERLI = 5,\n GNOSIS_CHAIN = 100,\n}\n","import { SupportedChainId } from './chains'\nimport { BackoffOptions } from 'exponential-backoff'\nimport { RateLimiterOpts } from 'limiter/dist/esm'\n\nexport interface IpfsConfig {\n uri?: string\n writeUri?: string\n readUri?: string\n pinataApiKey?: string\n pinataApiSecret?: string\n}\n\nexport interface RequestOptions {\n limiterOpts?: RateLimiterOpts\n backoffOpts?: BackoffOptions\n}\n\nexport type CowEnv = 'prod' | 'staging'\n\nexport type PartialApiContext = Partial<ApiContext>\n\nexport type ApiBaseUrls = Record<SupportedChainId, string>\n\nexport interface ApiContext {\n chainId: SupportedChainId\n env: CowEnv\n baseUrls?: ApiBaseUrls\n}\n\nexport const ENVS_LIST: CowEnv[] = ['prod', 'staging']\n\nexport const DEFAULT_COW_API_CONTEXT: ApiContext = {\n env: 'prod',\n chainId: SupportedChainId.MAINNET,\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 const logPrefix = 'cow-sdk:'\n","export const DEFAULT_IPFS_READ_URI = 'https://gnosis.mypinata.cloud/ipfs'\nexport const DEFAULT_IPFS_WRITE_URI = 'https://api.pinata.cloud'\n","import { SupportedChainId } from './chains'\nimport contractNetworks from '@cowprotocol/contracts/networks.json'\n\nconst { GPv2Settlement } = JSON.parse(contractNetworks as unknown as string) as typeof contractNetworks\n\nexport const ALL_SUPPORTED_CHAIN_IDS: SupportedChainId[] = [\n SupportedChainId.MAINNET,\n SupportedChainId.GOERLI,\n SupportedChainId.GNOSIS_CHAIN,\n]\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","import { Order } from './generated'\nimport { EnrichedOrder } from './types'\n\nexport const BUY_ETH_ADDRESS = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'\n\nexport function transformOrder(order: Order): EnrichedOrder {\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: Order): EnrichedOrder {\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: EnrichedOrder): EnrichedOrder {\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 { backOff, BackoffOptions } from 'exponential-backoff'\nimport { RateLimiter, RateLimiterOpts } from 'limiter'\n\nexport class OrderBookApiError<T = unknown> extends Error {\n constructor(public readonly response: Response, public readonly body: T) {\n super(typeof body === 'string' ? body : response.statusText)\n }\n}\n\nconst REQUEST_TIMEOUT = 408\nconst TOO_EARLY = 425\nconst TOO_MANY_REQUESTS = 429\nconst INTERNAL_SERVER_ERROR = 500\nconst BAD_GATEWAY = 502\nconst SERVICE_UNAVAILABLE = 503\nconst GATEWAY_TIMEOUT = 504\n\nconst STATUS_CODES_TO_RETRY = [\n REQUEST_TIMEOUT,\n TOO_EARLY,\n TOO_MANY_REQUESTS,\n INTERNAL_SERVER_ERROR,\n BAD_GATEWAY,\n SERVICE_UNAVAILABLE,\n GATEWAY_TIMEOUT,\n]\n\n// See config in https://www.npmjs.com/package/@insertish/exponential-backoff\nexport const DEFAULT_BACKOFF_OPTIONS: BackoffOptions = {\n numOfAttempts: 10,\n maxDelay: Infinity,\n jitter: 'none',\n retry: (error: Error | OrderBookApiError) => {\n if (error instanceof OrderBookApiError) {\n return STATUS_CODES_TO_RETRY.includes(error.response.status)\n }\n\n return true\n },\n}\n\n// CowSwap order-book API is limited by 5 requests per second from one IP\nexport const DEFAULT_LIMITER_OPTIONS: RateLimiterOpts = {\n tokensPerInterval: 5,\n interval: 'second',\n}\n\nexport interface FetchParams {\n path: string\n method: 'GET' | 'POST' | 'DELETE' | 'PUT'\n body?: unknown\n query?: URLSearchParams\n}\n\nconst getResponseBody = async (response: Response): Promise<unknown> => {\n if (response.status !== 204) {\n try {\n const contentType = response.headers.get('Content-Type')\n if (contentType) {\n if (contentType.toLowerCase().startsWith('application/json')) {\n return await response.json()\n } else {\n return await response.text()\n }\n }\n } catch (error) {\n console.error(error)\n }\n }\n return undefined\n}\n\nexport async function request<T>(\n baseUrl: string,\n { path, query, method, body }: FetchParams,\n rateLimiter: RateLimiter,\n backoffOpts: BackoffOptions\n): Promise<T> {\n const queryString = query ? '?' + query : ''\n const headers = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n }\n\n const url = `${baseUrl}${path}${queryString}`\n const init: RequestInit = { method, body: body ? JSON.stringify(body) : undefined, headers }\n\n return backOff<T>(async () => {\n await rateLimiter.removeTokens(1)\n\n const response = await fetch(url, init)\n const responseBody = (await getResponseBody(response)) as T\n\n // Successful response\n if (response.status >= 200 && response.status < 300) {\n return responseBody\n }\n\n return Promise.reject(new OrderBookApiError(response, responseBody))\n }, backoffOpts)\n}\n","import 'cross-fetch/polyfill'\nimport {\n Address,\n NativePriceResponse,\n Order,\n OrderCancellations,\n OrderCreation,\n OrderQuoteRequest,\n OrderQuoteResponse,\n Trade,\n TransactionHash,\n UID,\n} from './generated'\nimport { CowError } from '../common/cow-error'\nimport {\n ApiContext,\n CowEnv,\n DEFAULT_COW_API_CONTEXT,\n ApiBaseUrls,\n ENVS_LIST,\n PartialApiContext,\n RequestOptions,\n} from '../common/configs'\nimport { transformOrder } from './transformOrder'\nimport { EnrichedOrder } from './types'\nimport { SupportedChainId } from '../common/chains'\nimport { RateLimiter } from 'limiter'\nimport { DEFAULT_BACKOFF_OPTIONS, DEFAULT_LIMITER_OPTIONS, FetchParams, OrderBookApiError, request } from './request'\n\nexport const ORDER_BOOK_PROD_CONFIG: ApiBaseUrls = {\n [SupportedChainId.MAINNET]: 'https://api.cow.fi/mainnet',\n [SupportedChainId.GNOSIS_CHAIN]: 'https://api.cow.fi/xdai',\n [SupportedChainId.GOERLI]: 'https://api.cow.fi/goerli',\n}\n\nexport const ORDER_BOOK_STAGING_CONFIG: ApiBaseUrls = {\n [SupportedChainId.MAINNET]: 'https://barn.api.cow.fi/mainnet',\n [SupportedChainId.GNOSIS_CHAIN]: 'https://barn.api.cow.fi/xdai',\n [SupportedChainId.GOERLI]: 'https://barn.api.cow.fi/goerli',\n}\n\nfunction cleanObjectFromUndefinedValues(obj: Record<string, string>): typeof obj {\n return Object.keys(obj).reduce((acc, key) => {\n const val = obj[key]\n if (typeof val !== 'undefined') acc[key] = val\n return acc\n }, {} as typeof obj)\n}\n\nexport class OrderBookApi {\n public context: ApiContext & RequestOptions\n\n private rateLimiter: RateLimiter\n\n constructor(context: PartialApiContext & RequestOptions = {}) {\n this.context = { ...DEFAULT_COW_API_CONTEXT, ...context }\n this.rateLimiter = new RateLimiter(context.limiterOpts || DEFAULT_LIMITER_OPTIONS)\n }\n\n getTrades(\n request: { owner?: Address; orderUid?: UID },\n contextOverride: PartialApiContext = {}\n ): Promise<Array<Trade>> {\n if (request.owner && request.orderUid) {\n return Promise.reject(new CowError('Cannot specify both owner and orderId'))\n }\n\n const query = new URLSearchParams(cleanObjectFromUndefinedValues(request))\n\n return this.fetch({ path: '/api/v1/trades', method: 'GET', query }, contextOverride)\n }\n\n getOrders(\n {\n owner,\n offset = 0,\n limit = 1000,\n }: {\n owner: Address\n offset?: number\n limit?: number\n },\n contextOverride: PartialApiContext = {}\n ): Promise<Array<EnrichedOrder>> {\n const query = new URLSearchParams(\n cleanObjectFromUndefinedValues({ offset: offset.toString(), limit: limit.toString() })\n )\n\n return this.fetch<Array<EnrichedOrder>>(\n { path: `/api/v1/account/${owner}/orders`, method: 'GET', query },\n contextOverride\n ).then((orders) => {\n return orders.map(transformOrder)\n })\n }\n\n getTxOrders(txHash: TransactionHash, contextOverride: PartialApiContext = {}): Promise<Array<EnrichedOrder>> {\n return this.fetch<Array<EnrichedOrder>>(\n { path: `/api/v1/transactions/${txHash}/orders`, method: 'GET' },\n contextOverride\n ).then((orders) => {\n return orders.map(transformOrder)\n })\n }\n\n getOrder(uid: UID, contextOverride: PartialApiContext = {}): Promise<EnrichedOrder> {\n return this.fetch<Order>({ path: `/api/v1/orders/${uid}`, method: 'GET' }, contextOverride).then((order) => {\n return transformOrder(order)\n })\n }\n\n getOrderMultiEnv(uid: UID, contextOverride: PartialApiContext = {}): Promise<EnrichedOrder> {\n const { env } = this.getContextWithOverride(contextOverride)\n const otherEnvs = ENVS_LIST.filter((i) => i !== env)\n\n let attemptsCount = 0\n\n const fallback = (error: Error | OrderBookApiError): Promise<EnrichedOrder> => {\n const nextEnv = otherEnvs[attemptsCount]\n\n if (error instanceof OrderBookApiError && error.response.status === 404 && nextEnv) {\n attemptsCount++\n\n return this.getOrder(uid, { ...contextOverride, env: nextEnv }).catch(fallback)\n }\n\n return Promise.reject(error)\n }\n\n return this.getOrder(uid, { ...contextOverride, env }).catch(fallback)\n }\n\n getQuote(requestBody: OrderQuoteRequest, contextOverride: PartialApiContext = {}): Promise<OrderQuoteResponse> {\n return this.fetch({ path: '/api/v1/quote', method: 'POST', body: requestBody }, contextOverride)\n }\n\n sendSignedOrderCancellations(\n requestBody: OrderCancellations,\n contextOverride: PartialApiContext = {}\n ): Promise<void> {\n return this.fetch({ path: '/api/v1/orders', method: 'DELETE', body: requestBody }, contextOverride)\n }\n\n sendOrder(requestBody: OrderCreation, contextOverride: PartialApiContext = {}): Promise<UID> {\n return this.fetch({ path: '/api/v1/orders', method: 'POST', body: requestBody }, contextOverride)\n }\n\n getNativePrice(tokenAddress: Address, contextOverride: PartialApiContext = {}): Promise<NativePriceResponse> {\n return this.fetch({ path: `/api/v1/token/${tokenAddress}/native_price`, method: 'GET' }, contextOverride)\n }\n\n getOrderLink(uid: UID, contextOverride?: PartialApiContext): string {\n const { chainId, env } = this.getContextWithOverride(contextOverride)\n return this.getApiBaseUrls(env)[chainId] + `/api/v1/orders/${uid}`\n }\n\n private getContextWithOverride(contextOverride: PartialApiContext = {}): ApiContext & RequestOptions {\n return { ...this.context, ...contextOverride }\n }\n\n private getApiBaseUrls(env: CowEnv): ApiBaseUrls {\n if (this.context.baseUrls) return this.context.baseUrls\n\n return env === 'prod' ? ORDER_BOOK_PROD_CONFIG : ORDER_BOOK_STAGING_CONFIG\n }\n\n private fetch<T>(params: FetchParams, contextOverride: PartialApiContext = {}): Promise<T> {\n const { chainId, env } = this.getContextWithOverride(contextOverride)\n const baseUrl = this.getApiBaseUrls(env)[chainId]\n const backoffOpts = this.context.backoffOpts || DEFAULT_BACKOFF_OPTIONS\n\n return request(baseUrl, params, this.rateLimiter, backoffOpts)\n }\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * Where should the buy token be transfered to?\n */\nexport enum BuyTokenDestination {\n ERC20 = 'erc20',\n INTERNAL = 'internal',\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * How was the order signed?\n */\nexport enum EcdsaSigningScheme {\n EIP712 = 'eip712',\n ETHSIGN = 'ethsign',\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type FeeAndQuoteError = {\n errorType: FeeAndQuoteError.errorType;\n description: string;\n};\n\nexport namespace FeeAndQuoteError {\n\n export enum errorType {\n NO_LIQUIDITY = 'NoLiquidity',\n UNSUPPORTED_TOKEN = 'UnsupportedToken',\n AMOUNT_IS_ZERO = 'AmountIsZero',\n SELL_AMOUNT_DOES_NOT_COVER_FEE = 'SellAmountDoesNotCoverFee',\n }\n\n\n}\n\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nimport type { Address } from './Address';\n\nexport type OnchainOrderData = {\n /**\n * If orders are placed as onchain orders, the owner of the order might\n * be a smart contract, but not the user placing the order. The\n * actual user will be provided in this field\n *\n */\n sender: Address;\n /**\n * Describes the error, if the order placement was not\n * successful. This could happen, for example, if the\n * valid_to is too high, or no valid quote was found or generated\n *\n */\n placementError?: OnchainOrderData.placementError;\n};\n\nexport namespace OnchainOrderData {\n\n /**\n * Describes the error, if the order placement was not\n * successful. This could happen, for example, if the\n * valid_to is too high, or no valid quote was found or generated\n *\n */\n export enum placementError {\n QUOTE_NOT_FOUND = 'QuoteNotFound',\n VALID_TO_TOO_FAR_IN_FUTURE = 'ValidToTooFarInFuture',\n PRE_VALIDATION_ERROR = 'PreValidationError',\n }\n\n\n}\n\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type OrderCancellationError = {\n errorType: OrderCancellationError.errorType;\n description: string;\n};\n\nexport namespace OrderCancellationError {\n\n export enum errorType {\n INVALID_SIGNATURE = 'InvalidSignature',\n WRONG_OWNER = 'WrongOwner',\n ORDER_NOT_FOUND = 'OrderNotFound',\n ALREADY_CANCELLED = 'AlreadyCancelled',\n ORDER_FULLY_EXECUTED = 'OrderFullyExecuted',\n ORDER_EXPIRED = 'OrderExpired',\n ON_CHAIN_ORDER = 'OnChainOrder',\n }\n\n\n}\n\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * Order class\n */\nexport enum OrderClass {\n MARKET = 'market',\n LIMIT = 'limit',\n LIQUIDITY = 'liquidity',\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * Is this a buy order or sell order?\n */\nexport enum OrderKind {\n BUY = 'buy',\n SELL = 'sell',\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type OrderPostError = {\n errorType: OrderPostError.errorType;\n description: string;\n};\n\nexport namespace OrderPostError {\n\n export enum errorType {\n DUPLICATE_ORDER = 'DuplicateOrder',\n INSUFFICIENT_FEE = 'InsufficientFee',\n INSUFFICIENT_ALLOWANCE = 'InsufficientAllowance',\n INSUFFICIENT_BALANCE = 'InsufficientBalance',\n INSUFFICIENT_VALID_TO = 'InsufficientValidTo',\n EXCESSIVE_VALID_TO = 'ExcessiveValidTo',\n INVALID_SIGNATURE = 'InvalidSignature',\n TRANSFER_ETH_TO_CONTRACT = 'TransferEthToContract',\n TRANSFER_SIMULATION_FAILED = 'TransferSimulationFailed',\n UNSUPPORTED_TOKEN = 'UnsupportedToken',\n WRONG_OWNER = 'WrongOwner',\n MISSING_FROM = 'MissingFrom',\n SAME_BUY_AND_SELL_TOKEN = 'SameBuyAndSellToken',\n ZERO_AMOUNT = 'ZeroAmount',\n UNSUPPORTED_BUY_TOKEN_DESTINATION = 'UnsupportedBuyTokenDestination',\n UNSUPPORTED_SELL_TOKEN_SOURCE = 'UnsupportedSellTokenSource',\n UNSUPPORTED_ORDER_TYPE = 'UnsupportedOrderType',\n UNSUPPORTED_SIGNATURE = 'UnsupportedSignature',\n TOO_MANY_LIMIT_ORDERS = 'TooManyLimitOrders',\n }\n\n\n}\n\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nimport type { TokenAmount } from './TokenAmount';\n\n/**\n * The buy or sell side when quoting an order.\n */\nexport type OrderQuoteSide = ({\n kind: OrderQuoteSide.kind;\n /**\n * The total amount that is available for the order. From this value, the fee\n * is deducted and the buy amount is calculated.\n *\n */\n sellAmountBeforeFee: TokenAmount;\n} | {\n kind: OrderQuoteSide.kind;\n /**\n * The sell amount for the order.\n */\n sellAmountAfterFee: TokenAmount;\n} | {\n kind: OrderQuoteSide.kind;\n /**\n * The buy amount for the order.\n */\n buyAmountAfterFee: TokenAmount;\n});\n\nexport namespace OrderQuoteSide {\n\n export enum kind {\n SELL = 'sell',\n }\n\n\n}\n\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * The current order status\n */\nexport enum OrderStatus {\n PRESIGNATURE_PENDING = 'presignaturePending',\n OPEN = 'open',\n FULFILLED = 'fulfilled',\n CANCELLED = 'cancelled',\n EXPIRED = 'expired',\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * How good should the price estimate be?\n * Note that orders are supposed to be created from \"optimal\" price estimates.\n *\n */\nexport enum PriceQuality {\n FAST = 'fast',\n OPTIMAL = 'optimal',\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\nexport type ReplaceOrderError = {\n errorType: ReplaceOrderError.errorType;\n description: string;\n};\n\nexport namespace ReplaceOrderError {\n\n export enum errorType {\n ALREADY_CANCELLED = 'AlreadyCancelled',\n ORDER_FULLY_EXECUTED = 'OrderFullyExecuted',\n ORDER_EXPIRED = 'OrderExpired',\n ON_CHAIN_ORDER = 'OnChainOrder',\n DUPLICATE_ORDER = 'DuplicateOrder',\n INSUFFICIENT_FEE = 'InsufficientFee',\n INSUFFICIENT_ALLOWANCE = 'InsufficientAllowance',\n INSUFFICIENT_BALANCE = 'InsufficientBalance',\n INSUFFICIENT_VALID_TO = 'InsufficientValidTo',\n EXCESSIVE_VALID_TO = 'ExcessiveValidTo',\n INVALID_SIGNATURE = 'InvalidSignature',\n TRANSFER_ETH_TO_CONTRACT = 'TransferEthToContract',\n TRANSFER_SIMULATION_FAILED = 'TransferSimulationFailed',\n UNSUPPORTED_TOKEN = 'UnsupportedToken',\n WRONG_OWNER = 'WrongOwner',\n SAME_BUY_AND_SELL_TOKEN = 'SameBuyAndSellToken',\n ZERO_AMOUNT = 'ZeroAmount',\n UNSUPPORTED_BUY_TOKEN_DESTINATION = 'UnsupportedBuyTokenDestination',\n UNSUPPORTED_SELL_TOKEN_SOURCE = 'UnsupportedSellTokenSource',\n UNSUPPORTED_ORDER_TYPE = 'UnsupportedOrderType',\n UNSUPPORTED_SIGNATURE = 'UnsupportedSignature',\n }\n\n\n}\n\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * Where should the sell token be drawn from?\n */\nexport enum SellTokenSource {\n ERC20 = 'erc20',\n INTERNAL = 'internal',\n EXTERNAL = 'external',\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\n\n/**\n * How was the order signed?\n */\nexport enum SigningScheme {\n EIP712 = 'eip712',\n ETHSIGN = 'ethsign',\n PRESIGN = 'presign',\n EIP1271 = 'eip1271',\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 { CowError } from '../common/cow-error'\nimport { LastDaysVolumeQuery, LastHoursVolumeQuery, TotalsQuery } from './graphql'\nimport { LAST_DAYS_VOLUME_QUERY, LAST_HOURS_VOLUME_QUERY, TOTALS_QUERY } from './queries'\nimport { DocumentNode } from 'graphql/index'\nimport { request, Variables } from 'graphql-request'\nimport { ApiContext, CowEnv, DEFAULT_COW_API_CONTEXT, ApiBaseUrls, PartialApiContext } from '../common/configs'\nimport { SupportedChainId } from '../common/chains'\n\nexport const SUBGRAPH_PROD_CONFIG: ApiBaseUrls = {\n [SupportedChainId.MAINNET]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow',\n [SupportedChainId.GNOSIS_CHAIN]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-gc',\n [SupportedChainId.GOERLI]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-goerli',\n}\n\nexport const SUBGRAPH_STAGING_CONFIG: ApiBaseUrls = {\n [SupportedChainId.MAINNET]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-staging',\n [SupportedChainId.GNOSIS_CHAIN]: 'https://api.thegraph.com/subgraphs/name/cowprotocol/cow-gc-staging',\n [SupportedChainId.GOERLI]: '',\n}\n\nexport class SubgraphApi {\n API_NAME = 'CoW Protocol Subgraph'\n\n public context: ApiContext\n\n constructor(context: PartialApiContext = {}) {\n this.context = {\n ...DEFAULT_COW_API_CONTEXT,\n ...context,\n }\n }\n\n async getTotals(contextOverride: PartialApiContext = {}): Promise<TotalsQuery['totals'][0]> {\n const response = await this.runQuery<TotalsQuery>(TOTALS_QUERY, undefined, contextOverride)\n return response.totals[0]\n }\n\n async getLastDaysVolume(days: number, contextOverride: PartialApiContext = {}): Promise<LastDaysVolumeQuery> {\n return this.runQuery<LastDaysVolumeQuery>(LAST_DAYS_VOLUME_QUERY, { days }, contextOverride)\n }\n\n async getLastHoursVolume(hours: number, contextOverride: PartialApiContext = {}): Promise<LastHoursVolumeQuery> {\n return this.runQuery<LastHoursVolumeQuery>(LAST_HOURS_VOLUME_QUERY, { hours }, contextOverride)\n }\n\n async runQuery<T>(\n query: string | DocumentNode,\n variables: Variables | undefined = undefined,\n contextOverride: PartialApiContext = {}\n ): Promise<T> {\n const { chainId, env } = this.getContextWithOverride(contextOverride)\n const baseUrl = this.getEnvConfigs(env)[chainId]\n\n try {\n return await request(baseUrl, query, variables)\n } catch (error) {\n console.error(`[subgraph:${this.API_NAME}]`, error)\n throw new CowError(\n `Error running query: ${query}. Variables: ${JSON.stringify(variables)}. API: ${baseUrl}. Inner Error: ${error}`\n )\n }\n }\n\n private getContextWithOverride(contextOverride: PartialApiContext = {}): ApiContext {\n return { ...this.context, ...contextOverride }\n }\n\n private getEnvConfigs(env: CowEnv): ApiBaseUrls {\n if (this.context.baseUrls) return this.context.baseUrls\n\n return env === 'prod' ? SUBGRAPH_PROD_CONFIG : SUBGRAPH_STAGING_CONFIG\n }\n}\n","import type { SupportedChainId } from '../common'\nimport type { Signer } from '@ethersproject/abstract-signer'\nimport type { TypedDataDomain } from '@cowprotocol/contracts'\nimport type { SigningResult, UnsignedOrder } from './types'\n\nconst getSignUtils = () => import('./utils')\n\nexport class OrderSigningUtils {\n static async signOrder(order: UnsignedOrder, chainId: SupportedChainId, signer: Signer): Promise<SigningResult> {\n const { signOrder } = await getSignUtils()\n return signOrder(order, chainId, signer)\n }\n\n static async signOrderCancellation(\n orderId: string,\n chainId: SupportedChainId,\n signer: Signer\n ): Promise<SigningResult> {\n const { signOrderCancellation } = await getSignUtils()\n return signOrderCancellation(orderId, chainId, signer)\n }\n\n static async signOrderCancellations(\n orderUid: string[],\n chainId: SupportedChainId,\n signer: Signer\n ): Promise<SigningResult> {\n const { signOrderCancellations } = await getSignUtils()\n return signOrderCancellations(orderUid, chainId, signer)\n }\n\n static async getDomain(chainId: SupportedChainId): Promise<TypedDataDomain> {\n const { getDomain } = await getSignUtils()\n return getDomain(chainId)\n }\n}\n"],"names":["SupportedChainId","ENVS_LIST","DEFAULT_COW_API_CONTEXT","env","chainId","MAINNET","CowError","Error","constructor","message","error_code","super","this","logPrefix","DEFAULT_IPFS_READ_URI","DEFAULT_IPFS_WRITE_URI","GPv2Settlement","JSON","parse","ALL_SUPPORTED_CHAIN_IDS","GOERLI","GNOSIS_CHAIN","COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS","reduce","acc","_extends","address","BUY_ETH_ADDRESS","transformOrder","order","ethflowData","userValidTo","validTo","owner","onchainUser","sellToken","transformEthFlowOrder","dto","executedFeeAmount","executedSurplusFee","totalFee","addTotalFeeToOrder","OrderBookApiError","response","body","statusText","STATUS_CODES_TO_RETRY","DEFAULT_BACKOFF_OPTIONS","numOfAttempts","maxDelay","Infinity","jitter","retry","error","includes","status","DEFAULT_LIMITER_OPTIONS","tokensPerInterval","interval","getResponseBody","async","contentType","headers","get","toLowerCase","startsWith","json","text","console","undefined","request","baseUrl","path","query","method","rateLimiter","backoffOpts","url","init","stringify","Accept","backOff","removeTokens","fetch","responseBody","Promise","reject","ORDER_BOOK_PROD_CONFIG","ORDER_BOOK_STAGING_CONFIG","cleanObjectFromUndefinedValues","obj","Object","keys","key","val","OrderBookApi","context","RateLimiter","limiterOpts","getTrades","contextOverride","orderUid","URLSearchParams","getOrders","offset","limit","toString","then","orders","map","getTxOrders","txHash","getOrder","uid","getOrderMultiEnv","getContextWithOverride","otherEnvs","filter","i","attemptsCount","fallback","nextEnv","catch","getQuote","requestBody","sendSignedOrderCancellations","sendOrder","getNativePrice","tokenAddress","getOrderLink","getApiBaseUrls","baseUrls","params","BuyTokenDestination","EcdsaSigningScheme","FeeAndQuoteError","OnchainOrderData","OrderCancellationError","OrderClass","OrderKind","OrderPostError","OrderQuoteSide","OrderStatus","PriceQuality","ReplaceOrderError","SellTokenSource","SigningScheme","errorType","placementError","kind","_t","_t2","_t3","_","t","TOTALS_QUERY","gql","LAST_DAYS_VOLUME_QUERY","LAST_HOURS_VOLUME_QUERY","SUBGRAPH_PROD_CONFIG","SUBGRAPH_STAGING_CONFIG","SubgraphApi","API_NAME","runQuery","totals","days","hours","variables","getEnvConfigs","getSignUtils","import","OrderSigningUtils","static","signer","signOrder","orderId","signOrderCancellation","signOrderCancellations","getDomain"],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * The version of the codebase that is currently running.
3
- *
4
- */
5
- export type VersionResponse = {
6
- /**
7
- * the git branch name at the time of build
8
- */
9
- branch?: string;
10
- /**
11
- * the git commit hash at the time of build
12
- */
13
- commit?: string;
14
- /**
15
- * the git tagged version (if any) at the time of the build
16
- */
17
- version?: string;
18
- };