@cowprotocol/cow-sdk 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/index.d.ts +1 -0
- package/dist/index-5cf8c805.js +29 -0
- package/dist/index-5cf8c805.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/index.modern.mjs +1 -1
- package/dist/index.module.js +4 -4
- package/dist/index.module.js.map +1 -1
- package/dist/order-book/api.d.ts +1 -1
- package/dist/order-book/generated/index.d.ts +3 -4
- package/dist/order-book/generated/models/Auction.d.ts +2 -9
- package/dist/order-book/generated/models/AuctionPrices.d.ts +9 -0
- package/dist/order-book/generated/models/CallData.d.ts +4 -0
- package/dist/order-book/generated/models/CompetitionAuction.d.ts +14 -0
- package/dist/order-book/generated/models/SolverCompetitionResponse.d.ts +2 -0
- package/dist/order-book/generated/models/SolverSettlement.d.ts +23 -3
- package/dist/order-book/transformError.d.ts +6 -0
- package/dist/package.json +6 -3
- package/dist/utils-0f9d3673.js +2 -0
- package/dist/utils-0f9d3673.js.map +1 -0
- package/dist/utils-68e76765.js +2 -0
- package/dist/utils-68e76765.js.map +1 -0
- package/dist/utils-f5939feb.js +2 -0
- package/dist/utils-f5939feb.js.map +1 -0
- package/package.json +6 -3
- package/dist/index-5399fca9.js +0 -29
- package/dist/index-5399fca9.js.map +0 -1
- package/dist/order-book/generated/models/AmountEstimate.d.ts +0 -16
- package/dist/order-book/generated/models/FeeAndQuoteBuyResponse.d.ts +0 -9
- package/dist/order-book/generated/models/FeeAndQuoteSellResponse.d.ts +0 -9
- package/dist/order-book/generated/models/FeeInformation.d.ts +0 -17
- package/dist/utils-4aa913b1.js +0 -2
- package/dist/utils-4aa913b1.js.map +0 -1
- package/dist/utils-6247cf36.js +0 -2
- package/dist/utils-6247cf36.js.map +0 -1
- package/dist/utils-b7397d0a.js +0 -2
- package/dist/utils-b7397d0a.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-0f9d3673.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":["signOrderCancellations","orderUids","chainId","signer","_signPayload","_signOrderCancellations","signOrderCancellation","orderId","_signOrderCancellation","signOrder","order","_signOrder","payload","signFn","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","params","domain","getDomain","signOrderCancellationsGp","mapSigningSchema","signOrderCancellationGp","signOrderGp","SigningScheme","settlementContract","COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS","domainGp"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=require("@cowprotocol/contracts"),n=require("./index.js");require("cross-fetch/polyfill"),require("graphql-request");const r=function(t,i,o,l="v4"){try{let f;function m(e){if(f)return e;const n=p?.data;return{signature:n?.toString()||"",signingScheme:S}}const S="eth_sign"===l?n.EcdsaSigningScheme.ETHSIGN:n.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 n.CowError("Wallet not supported")}const E=function(e,n){try{var r=Promise.resolve(i({...t,signer:v,signingScheme:S})).then(function(e){p=e})}catch(e){return n(e)}return r&&r.then?r.then(void 0,n):r}(0,function(e){if(void 0===(n=e).code&&void 0===n.message)throw console.error(e),e;var n;const m=[a,g].some(n=>[e.message,e.toString()].some(e=>n.test(e)));if(e.code!==c&&!m){if(h.test(e.message)){const e=r(t,i,o,"int_v4");return f=1,e}if(e.code===s){const e=r(t,i,o,"eth_sign");return f=1,e}if(d.test(e.message)){const e=r(t,i,o,"v3");return f=1,e}if(u.test(e.message)){const e=r(t,i,o,"eth_sign");return f=1,e}throw console.error(e),e}switch(l){case"v4":const n=r(t,i,o,"default");return f=1,n;case"default":const s=r(t,i,o,"v3");return f=1,s;case"v3":const c=r(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(n){try{const{chainId:r,signer:t,signingScheme:i,orderUids:o}=n,s=m(r);return Promise.resolve(e.signOrderCancellations(s,o,t,l[i]))}catch(e){return Promise.reject(e)}},i=function(n){try{const{chainId:r,signer:t,signingScheme:i,orderId:o}=n,s=m(r);return Promise.resolve(e.signOrderCancellation(s,o,t,l[i]))}catch(e){return Promise.reject(e)}},o=function(n){try{const{chainId:r,signer:t,order:i,signingScheme:o}=n,s=m(r);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={[n.EcdsaSigningScheme.EIP712]:e.SigningScheme.EIP712,[n.EcdsaSigningScheme.ETHSIGN]:e.SigningScheme.ETHSIGN};function m(r){const t=n.COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS[r];if(!t)throw new n.CowError("Unsupported network. Settlement contract is not deployed");return e.domain(r,t)}exports.getDomain=m,exports.signOrder=function(e,n,t){return r({order:e,chainId:n},o,t)},exports.signOrderCancellation=function(e,n,t){return r({orderId:e,chainId:n},i,t)},exports.signOrderCancellations=function(e,n,i){return r({orderUids:e,chainId:n},t,i)};
|
|
2
|
+
//# sourceMappingURL=utils-68e76765.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-68e76765.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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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{C as e,_ as t,a as n,E as r}from"./index-5cf8c805.js";import{domain as s,IntChainIdTypedDataV4Signer as i,TypedDataVersionedSigner as o,signOrder as c,signOrderCancellation as a,signOrderCancellations as d,SigningScheme as u}from"@cowprotocol/contracts";import"cross-fetch/polyfill";import"graphql-request";const h=-32603,g=-32601,l=/Method not found/i,f=/eth_signTypedData_v4 does not exist/i,m=/eth_signTypedData_v3 does not exist/i,p=/RPC request failed/i,v=/provided chainid .* must match the active chainid/i,w={[r.EIP712]:u.EIP712,[r.ETHSIGN]:u.ETHSIGN};async function I(e){const{chainId:t,signer:n,order:r,signingScheme:s}=e,i=C(t);return c(i,r,n,w[s])}async function y(e){const{chainId:t,signer:n,signingScheme:r,orderId:s}=e,i=C(t);return a(i,s,n,w[r])}async function S(e){const{chainId:t,signer:n,signingScheme:r,orderUids:s}=e,i=C(t);return d(i,s,n,w[r])}async function _(n,s,c,a="v4"){var d;const u="eth_sign"===a?r.ETHSIGN:r.EIP712;let w,I=null;try{switch(a){case"default":case"v3":w=new o(c);break;case"int_v4":w=new i(c);break;default:w=c}}catch(t){throw console.error("Wallet not supported:",t),new e("Wallet not supported")}try{I=await s(t({},n,{signer:w,signingScheme:u}))}catch(e){if(void 0===(y=e).code&&void 0===y.message)throw console.error(e),e;const t=[l,p].some(t=>[e.message,e.toString()].some(e=>t.test(e)));if(e.code!==g&&!t){if(v.test(e.message))return _(n,s,c,"int_v4");if(e.code===h)return _(n,s,c,"eth_sign");if(f.test(e.message))return _(n,s,c,"v3");if(m.test(e.message))return _(n,s,c,"eth_sign");throw console.error(e),e}switch(a){case"v4":return _(n,s,c,"default");case"default":return _(n,s,c,"v3");case"v3":return _(n,s,c,"eth_sign");default:throw e}}var y;const S=null==(d=I)?void 0:d.data;return{signature:(null==S?void 0:S.toString())||"",signingScheme:u}}async function E(e,t,n){return _({order:e,chainId:t},I,n)}async function T(e,t,n){return _({orderId:e,chainId:t},y,n)}async function x(e,t,n){return _({orderUids:e,chainId:t},S,n)}function C(t){const r=n[t];if(!r)throw new e("Unsupported network. Settlement contract is not deployed");return s(t,r)}export{C as getDomain,E as signOrder,T as signOrderCancellation,x as signOrderCancellations};
|
|
2
|
+
//# sourceMappingURL=utils-f5939feb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-f5939feb.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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cowprotocol/cow-sdk",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"license": "(MIT OR Apache-2.0)",
|
|
5
5
|
"files": [
|
|
6
6
|
"/dist"
|
|
@@ -30,10 +30,11 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@cowprotocol/contracts": "^1.4.0",
|
|
33
|
-
"
|
|
33
|
+
"@ethersproject/abstract-signer": "^5.7.0"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
34
36
|
"cross-fetch": "^3.1.5",
|
|
35
37
|
"ethers": "^5.7.2",
|
|
36
|
-
"graphql": "^16.3.0",
|
|
37
38
|
"graphql-request": "^4.3.0"
|
|
38
39
|
},
|
|
39
40
|
"devDependencies": {
|
|
@@ -53,6 +54,8 @@
|
|
|
53
54
|
"eslint": "^8.33.0",
|
|
54
55
|
"eslint-config-prettier": "^8.6.0",
|
|
55
56
|
"eslint-plugin-prettier": "^4.2.1",
|
|
57
|
+
"ethers": "^5.7.2",
|
|
58
|
+
"graphql": "^16.3.0",
|
|
56
59
|
"jest": "^29.4.2",
|
|
57
60
|
"jest-fetch-mock": "^3.0.3",
|
|
58
61
|
"microbundle": "^0.15.1",
|
package/dist/index-5399fca9.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import"cross-fetch/polyfill";import{gql as e,request as t}from"graphql-request";var r;!function(e){e[e.MAINNET=1]="MAINNET",e[e.GOERLI=5]="GOERLI",e[e.GNOSIS_CHAIN=100]="GNOSIS_CHAIN"}(r||(r={}));const o=["prod","staging"],s={env:"prod",chainId:r.MAINNET};class n extends Error{constructor(e,t){super(e),this.error_code=void 0,this.error_code=t}}const i="cow-sdk:",a="https://gnosis.mypinata.cloud/ipfs",c="https://api.pinata.cloud";function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},d.apply(this,arguments)}class u{constructor(e){this.config=void 0,this.config=e}}class l extends Error{constructor(e,t,r){super(r),this.url=void 0,this.status=void 0,this.statusText=void 0,this.body=void 0,this.request=void 0,this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}}let h;class p extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}}h=Symbol.toStringTag;class E{constructor(e){this[h]=void 0,this._isResolved=void 0,this._isRejected=void 0,this._isCancelled=void 0,this._cancelHandlers=void 0,this._promise=void 0,this._resolve=void 0,this._reject=void 0,this._isResolved=!1,this._isRejected=!1,this._isCancelled=!1,this._cancelHandlers=[],this._promise=new Promise((t,r)=>{this._resolve=t,this._reject=r;const o=e=>{this._isResolved||this._isRejected||this._isCancelled||this._cancelHandlers.push(e)};return Object.defineProperty(o,"isResolved",{get:()=>this._isResolved}),Object.defineProperty(o,"isRejected",{get:()=>this._isRejected}),Object.defineProperty(o,"isCancelled",{get:()=>this._isCancelled}),e(e=>{var t;this._isResolved||this._isRejected||this._isCancelled||(this._isResolved=!0,null==(t=this._resolve)||t.call(this,e))},e=>{var t;this._isResolved||this._isRejected||this._isCancelled||(this._isRejected=!0,null==(t=this._reject)||t.call(this,e))},o)})}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(){var e;if(!(this._isResolved||this._isRejected||this._isCancelled)){if(this._isCancelled=!0,this._cancelHandlers.length)try{for(const e of this._cancelHandlers)e()}catch(e){return void console.warn("Cancellation threw an error",e)}this._cancelHandlers.length=0,null==(e=this._reject)||e.call(this,new p("Request aborted"))}}get isCancelled(){return this._isCancelled}}const T=e=>null!=e,O=e=>"string"==typeof e,N=e=>O(e)&&""!==e,_=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]),I=e=>e instanceof FormData,A=async(e,t)=>"function"==typeof t?t(e):t,f=async(e,t)=>{const r=await A(t,e.TOKEN),o=await A(t,e.USERNAME),s=await A(t,e.PASSWORD),n=await A(t,e.HEADERS),i=Object.entries(d({Accept:"application/json"},n,t.headers)).filter(([e,t])=>T(t)).reduce((e,[t,r])=>d({},e,{[t]:String(r)}),{});if(N(r)&&(i.Authorization=`Bearer ${r}`),N(o)&&N(s)){const e=(e=>{try{return btoa(e)}catch(t){return Buffer.from(e).toString("base64")}})(`${o}:${s}`);i.Authorization=`Basic ${e}`}return t.body&&(t.mediaType?i["Content-Type"]=t.mediaType:_(t.body)?i["Content-Type"]=t.body.type||"application/octet-stream":O(t.body)?i["Content-Type"]="text/plain":I(t.body)||(i["Content-Type"]="application/json")),new Headers(i)},R=(e,t)=>new E(async(r,o,s)=>{try{const o=((e,t)=>{const r=e.ENCODE_PATH||encodeURI,o=t.url.replace("{api-version}",e.VERSION).replace(/{(.*?)}/g,(e,o)=>{var s;return null!=(s=t.path)&&s.hasOwnProperty(o)?r(String(t.path[o])):e}),s=`${e.BASE}${o}`;return t.query?`${s}${(e=>{const t=[],r=(e,o)=>{T(o)&&(Array.isArray(o)?o.forEach(t=>{r(e,t)}):"object"==typeof o?Object.entries(o).forEach(([t,o])=>{r(`${e}[${t}]`,o)}):((e,r)=>{t.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(r))}`)})(e,o))};return Object.entries(e).forEach(([e,t])=>{r(e,t)}),t.length>0?`?${t.join("&")}`:""})(t.query)}`:s})(e,t),n=(e=>{if(e.formData){const t=new FormData,r=(e,r)=>{O(r)||_(r)?t.append(e,r):t.append(e,JSON.stringify(r))};return Object.entries(e.formData).filter(([e,t])=>T(t)).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>r(e,t)):r(e,t)}),t}})(t),i=(e=>{var t;if(e.body)return null!=(t=e.mediaType)&&t.includes("/json")?JSON.stringify(e.body):O(e.body)||_(e.body)||I(e.body)?e.body:JSON.stringify(e.body)})(t),a=await f(e,t);if(!s.isCancelled){const c=await(async(e,t,r,o,s,n,i)=>{const a=new AbortController,c={headers:n,body:null!=o?o:s,method:t.method,signal:a.signal};return e.WITH_CREDENTIALS&&(c.credentials=e.CREDENTIALS),i(()=>a.abort()),await fetch(r,c)})(e,t,o,i,n,a,s),u=await(async e=>{if(204!==e.status)try{const t=e.headers.get("Content-Type");if(t)return t.toLowerCase().startsWith("application/json")?await e.json():await e.text()}catch(e){console.error(e)}})(c),h=((e,t)=>{if(t){const r=e.headers.get(t);if(O(r))return r}})(c,t.responseHeader),p={url:o,ok:c.ok,status:c.status,statusText:c.statusText,body:null!=h?h:u};((e,t)=>{const r=d({400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable"},e.errors)[t.status];if(r)throw new l(e,t,r);if(!t.ok)throw new l(e,t,"Generic Error")})(t,p),r(p.body)}}catch(e){o(e)}});class g extends u{constructor(e){super(e)}request(e){return R(this.config,e)}}class S{constructor(e){this.httpRequest=void 0,this.httpRequest=e}postApiV1Orders(e){return this.httpRequest.request({method:"POST",url:"/api/v1/orders",body:e,mediaType:"application/json",errors:{400:"Error during order validation",403:"Forbidden, your account is deny-listed",429:"Too many order placements",500:"Error adding an order"}})}deleteApiV1Orders(e){return this.httpRequest.request({method:"DELETE",url:"/api/v1/orders",body:e,mediaType:"application/json",errors:{400:"Malformed signature",401:"Invalid signature",404:"One or more orders were not found and no orders were cancelled."}})}getApiV1Orders(e){return this.httpRequest.request({method:"GET",url:"/api/v1/orders/{UID}",path:{UID:e},errors:{404:"Order was not found"}})}deleteApiV1Orders1(e,t){return this.httpRequest.request({method:"DELETE",url:"/api/v1/orders/{UID}",path:{UID:e},body:t,mediaType:"application/json",errors:{400:"Malformed signature",401:"Invalid signature",404:"Order was not found"}})}patchApiV1Orders(e,t){return this.httpRequest.request({method:"PATCH",url:"/api/v1/orders/{UID}",path:{UID:e},body:t,mediaType:"application/json",errors:{400:"Error cancelling and replacing new order with an old one.",401:"Invalid replacement order. This can happen if the old and new orders have\n different signers, the new order's app data is not an encoded cancellation of\n the old order, or the new order is based on presign or EIP-1271 signatures.\n ",403:"Forbidden",404:"Order was not found"}})}getApiV1TransactionsOrders(e){return this.httpRequest.request({method:"GET",url:"/api/v1/transactions/{txHash}/orders",path:{txHash:e}})}getApiV1Trades(e,t){return this.httpRequest.request({method:"GET",url:"/api/v1/trades",query:{owner:e,orderUid:t}})}getApiV1Auction(){return this.httpRequest.request({method:"GET",url:"/api/v1/auction"})}getApiV1AccountOrders(e,t,r){return this.httpRequest.request({method:"GET",url:"/api/v1/account/{owner}/orders",path:{owner:e},query:{offset:t,limit:r},errors:{400:"Problem with parameters like limit being too large."}})}getApiV1TokenNativePrice(e){return this.httpRequest.request({method:"GET",url:"/api/v1/token/{token}/native_price",path:{token:e},errors:{400:"Error finding the price.",404:"No liquidity was found",500:"Unexpected error"}})}postApiV1Quote(e){return this.httpRequest.request({method:"POST",url:"/api/v1/quote",body:e,mediaType:"application/json",errors:{400:"Error quoting order.",403:"Forbidden, your account is deny-listed",429:"Too many order quotes",500:"Unexpected error quoting an order"}})}getApiV1SolverCompetition(e){return this.httpRequest.request({method:"GET",url:"/api/v1/solver_competition/{auction_id}",path:{auction_id:e},errors:{404:"No competition information available for this auction id."}})}getApiV1SolverCompetitionByTxHash(e){return this.httpRequest.request({method:"GET",url:"/api/v1/solver_competition/by_tx_hash/{tx_hash}",path:{tx_hash:e},errors:{404:"No competition information available for this tx hash."}})}getApiV1Version(){return this.httpRequest.request({method:"GET",url:"/api/v1/version"})}}class y{constructor(e,t=g){var r,o,s,n;this.default=void 0,this.request=void 0,this.request=new t({BASE:null!==(r=null==e?void 0:e.BASE)&&void 0!==r?r:"https://api.cow.fi/mainnet",VERSION:null!==(o=null==e?void 0:e.VERSION)&&void 0!==o?o:"0.0.1",WITH_CREDENTIALS:null!==(s=null==e?void 0:e.WITH_CREDENTIALS)&&void 0!==s&&s,CREDENTIALS:null!==(n=null==e?void 0:e.CREDENTIALS)&&void 0!==n?n:"include",TOKEN:null==e?void 0:e.TOKEN,USERNAME:null==e?void 0:e.USERNAME,PASSWORD:null==e?void 0:e.PASSWORD,HEADERS:null==e?void 0:e.HEADERS,ENCODE_PATH:null==e?void 0:e.ENCODE_PATH}),this.default=new S(this.request)}}const v={BASE:"https://api.cow.fi/mainnet",VERSION:"0.0.1",WITH_CREDENTIALS:!1,CREDENTIALS:"include",TOKEN:void 0,USERNAME:void 0,PASSWORD:void 0,HEADERS:void 0,ENCODE_PATH:void 0};var m,C,U,D,w,L,b,P,F,q,x,V,j,k;!function(e){e.ERC20="erc20",e.INTERNAL="internal"}(m||(m={})),function(e){e.EIP712="eip712",e.ETHSIGN="ethsign"}(C||(C={})),function(e){var t;(t=e.errorType||(e.errorType={})).NO_LIQUIDITY="NoLiquidity",t.UNSUPPORTED_TOKEN="UnsupportedToken",t.AMOUNT_IS_ZERO="AmountIsZero",t.SELL_AMOUNT_DOES_NOT_COVER_FEE="SellAmountDoesNotCoverFee"}(U||(U={})),function(e){var t;(t=e.placementError||(e.placementError={})).QUOTE_NOT_FOUND="QuoteNotFound",t.VALID_TO_TOO_FAR_IN_FUTURE="ValidToTooFarInFuture",t.PRE_VALIDATION_ERROR="PreValidationError"}(D||(D={})),function(e){var t;(t=e.errorType||(e.errorType={})).INVALID_SIGNATURE="InvalidSignature",t.WRONG_OWNER="WrongOwner",t.ORDER_NOT_FOUND="OrderNotFound",t.ALREADY_CANCELLED="AlreadyCancelled",t.ORDER_FULLY_EXECUTED="OrderFullyExecuted",t.ORDER_EXPIRED="OrderExpired",t.ON_CHAIN_ORDER="OnChainOrder"}(w||(w={})),function(e){e.MARKET="market",e.LIMIT="limit",e.LIQUIDITY="liquidity"}(L||(L={})),function(e){e.BUY="buy",e.SELL="sell"}(b||(b={})),function(e){var t;(t=e.errorType||(e.errorType={})).DUPLICATE_ORDER="DuplicateOrder",t.INSUFFICIENT_FEE="InsufficientFee",t.INSUFFICIENT_ALLOWANCE="InsufficientAllowance",t.INSUFFICIENT_BALANCE="InsufficientBalance",t.INSUFFICIENT_VALID_TO="InsufficientValidTo",t.EXCESSIVE_VALID_TO="ExcessiveValidTo",t.INVALID_SIGNATURE="InvalidSignature",t.TRANSFER_ETH_TO_CONTRACT="TransferEthToContract",t.TRANSFER_SIMULATION_FAILED="TransferSimulationFailed",t.UNSUPPORTED_TOKEN="UnsupportedToken",t.WRONG_OWNER="WrongOwner",t.MISSING_FROM="MissingFrom",t.SAME_BUY_AND_SELL_TOKEN="SameBuyAndSellToken",t.ZERO_AMOUNT="ZeroAmount",t.UNSUPPORTED_BUY_TOKEN_DESTINATION="UnsupportedBuyTokenDestination",t.UNSUPPORTED_SELL_TOKEN_SOURCE="UnsupportedSellTokenSource",t.UNSUPPORTED_ORDER_TYPE="UnsupportedOrderType",t.UNSUPPORTED_SIGNATURE="UnsupportedSignature",t.TOO_MANY_LIMIT_ORDERS="TooManyLimitOrders"}(P||(P={})),function(e){(e.kind||(e.kind={})).SELL="sell"}(F||(F={})),function(e){e.PRESIGNATURE_PENDING="presignaturePending",e.OPEN="open",e.FULFILLED="fulfilled",e.CANCELLED="cancelled",e.EXPIRED="expired"}(q||(q={})),function(e){e.FAST="fast",e.OPTIMAL="optimal"}(x||(x={})),function(e){var t;(t=e.errorType||(e.errorType={})).ALREADY_CANCELLED="AlreadyCancelled",t.ORDER_FULLY_EXECUTED="OrderFullyExecuted",t.ORDER_EXPIRED="OrderExpired",t.ON_CHAIN_ORDER="OnChainOrder",t.DUPLICATE_ORDER="DuplicateOrder",t.INSUFFICIENT_FEE="InsufficientFee",t.INSUFFICIENT_ALLOWANCE="InsufficientAllowance",t.INSUFFICIENT_BALANCE="InsufficientBalance",t.INSUFFICIENT_VALID_TO="InsufficientValidTo",t.EXCESSIVE_VALID_TO="ExcessiveValidTo",t.INVALID_SIGNATURE="InvalidSignature",t.TRANSFER_ETH_TO_CONTRACT="TransferEthToContract",t.TRANSFER_SIMULATION_FAILED="TransferSimulationFailed",t.UNSUPPORTED_TOKEN="UnsupportedToken",t.WRONG_OWNER="WrongOwner",t.SAME_BUY_AND_SELL_TOKEN="SameBuyAndSellToken",t.ZERO_AMOUNT="ZeroAmount",t.UNSUPPORTED_BUY_TOKEN_DESTINATION="UnsupportedBuyTokenDestination",t.UNSUPPORTED_SELL_TOKEN_SOURCE="UnsupportedSellTokenSource",t.UNSUPPORTED_ORDER_TYPE="UnsupportedOrderType",t.UNSUPPORTED_SIGNATURE="UnsupportedSignature"}(V||(V={})),function(e){e.ERC20="erc20",e.INTERNAL="internal",e.EXTERNAL="external"}(j||(j={})),function(e){e.EIP712="eip712",e.ETHSIGN="ethsign",e.PRESIGN="presign",e.EIP1271="eip1271"}(k||(k={}));const H="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";function G(e){return function(e){const{ethflowData:t}=e;if(!t)return e;const{userValidTo:r}=t;return d({},e,{validTo:r,owner:e.onchainUser||e.owner,sellToken:H})}(function(e){const{executedFeeAmount:t,executedSurplusFee:r}=e;return d({},e,{totalFee:null!=r?r:t})}(e))}const B={[r.MAINNET]:"https://api.cow.fi/mainnet",[r.GNOSIS_CHAIN]:"https://api.cow.fi/xdai",[r.GOERLI]:"https://api.cow.fi/goerli"},M={[r.MAINNET]:"https://barn.api.cow.fi/mainnet",[r.GNOSIS_CHAIN]:"https://barn.api.cow.fi/xdai",[r.GOERLI]:"https://barn.api.cow.fi/goerli"};class W extends u{constructor(e){super(e)}request(e){return R(this.config,d({},e,{headers:d({},e.headers,{"Content-Type":"application/json"})}))}}class ${constructor(e={}){this.context=void 0,this.servicePerNetwork={},this.context=d({},s,e)}getTrades({owner:e,orderId:t},r={}){return e&&t?new E((e,t)=>{t(new n("Cannot specify both owner and orderId"))}):this.getServiceForNetwork(r).getApiV1Trades(e,t)}getOrders({owner:e,offset:t=0,limit:r=1e3},o={}){return this.getServiceForNetwork(o).getApiV1AccountOrders(e,t,r).then(e=>e.map(G))}getTxOrders(e,t={}){return this.getServiceForNetwork(t).getApiV1TransactionsOrders(e).then(e=>e.map(G))}getOrder(e,t={}){return this.getServiceForNetwork(t).getApiV1Orders(e).then(e=>G(e))}getOrderMultiEnv(e,t={}){const{env:r}=this.getContextWithOverride(t),s=o.filter(e=>e!==r);let n=0;const i=r=>{const o=s[n];return r instanceof l&&404===r.status&&o?(n++,this.getOrder(e,d({},t,{env:o})).catch(i)):Promise.reject(r)};return this.getOrder(e,d({},t,{env:r})).catch(i)}getQuote(e,t={}){return this.getServiceForNetwork(t).postApiV1Quote(e).catch(e=>Promise.reject(e.body||e))}sendSignedOrderCancellations(e,t={}){return this.getServiceForNetwork(t).deleteApiV1Orders(e)}sendOrder(e,t={}){return this.getServiceForNetwork(t).postApiV1Orders(e).catch(e=>{const t=e.body;if(null!=t&&t.errorType)throw new Error(t.errorType);throw e})}getNativePrice(e,t={}){return this.getServiceForNetwork(t).getApiV1TokenNativePrice(e)}getOrderLink(e,t){const{chainId:r,env:o}=this.getContextWithOverride(t);return this.getApiBaseUrls(o)[r]+`/api/v1/orders/${e}`}getServiceForNetwork(e){const{chainId:t,env:r}=this.getContextWithOverride(e),o=`${r}|${t}`,s=this.servicePerNetwork[o];if(s)return s.default;const n=new y({BASE:this.getApiBaseUrls(r)[t]},W);return this.servicePerNetwork[o]=n,n.default}getContextWithOverride(e={}){return d({},this.context,e)}getApiBaseUrls(e){return this.context.baseUrls?this.context.baseUrls:"prod"===e?B:M}}let K,Y,Q,X=e=>e;const Z=e(K||(K=X`
|
|
2
|
-
query Totals {
|
|
3
|
-
totals {
|
|
4
|
-
tokens
|
|
5
|
-
orders
|
|
6
|
-
traders
|
|
7
|
-
settlements
|
|
8
|
-
volumeUsd
|
|
9
|
-
volumeEth
|
|
10
|
-
feesUsd
|
|
11
|
-
feesEth
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
`)),J=e(Y||(Y=X`
|
|
15
|
-
query LastDaysVolume($days: Int!) {
|
|
16
|
-
dailyTotals(orderBy: timestamp, orderDirection: desc, first: $days) {
|
|
17
|
-
timestamp
|
|
18
|
-
volumeUsd
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
`)),z=e(Q||(Q=X`
|
|
22
|
-
query LastHoursVolume($hours: Int!) {
|
|
23
|
-
hourlyTotals(orderBy: timestamp, orderDirection: desc, first: $hours) {
|
|
24
|
-
timestamp
|
|
25
|
-
volumeUsd
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
`)),ee={[r.MAINNET]:"https://api.thegraph.com/subgraphs/name/cowprotocol/cow",[r.GNOSIS_CHAIN]:"https://api.thegraph.com/subgraphs/name/cowprotocol/cow-gc",[r.GOERLI]:"https://api.thegraph.com/subgraphs/name/cowprotocol/cow-goerli"},te={[r.MAINNET]:"https://api.thegraph.com/subgraphs/name/cowprotocol/cow-staging",[r.GNOSIS_CHAIN]:"https://api.thegraph.com/subgraphs/name/cowprotocol/cow-gc-staging",[r.GOERLI]:""};class re{constructor(e={}){this.API_NAME="CoW Protocol Subgraph",this.context=void 0,this.context=d({},s,e)}async getTotals(e={}){return(await this.runQuery(Z,void 0,e)).totals[0]}async getLastDaysVolume(e,t={}){return this.runQuery(J,{days:e},t)}async getLastHoursVolume(e,t={}){return this.runQuery(z,{hours:e},t)}async runQuery(e,r=undefined,o={}){const{chainId:s,env:i}=this.getContextWithOverride(o),a=this.getEnvConfigs(i)[s];try{return await t(a,e,r)}catch(t){throw console.error(`[subgraph:${this.API_NAME}]`,t),new n(`Error running query: ${e}. Variables: ${JSON.stringify(r)}. API: ${a}. Inner Error: ${t}`)}}getContextWithOverride(e={}){return d({},this.context,e)}getEnvConfigs(e){return this.context.baseUrls?this.context.baseUrls:"prod"===e?ee:te}}const oe=()=>import("./utils-6247cf36.js");class se{static async signOrder(e,t,r){const{signOrder:o}=await oe();return o(e,t,r)}static async signOrderCancellation(e,t,r){const{signOrderCancellation:o}=await oe();return o(e,t,r)}static async signOrderCancellations(e,t,r){const{signOrderCancellations:o}=await oe();return o(e,t,r)}static async getDomain(e){const{getDomain:t}=await oe();return t(e)}}export{l as A,u as B,n as C,s as D,C as E,U as F,B as O,x as P,V as R,r as S,d as _,o as a,a as b,c,M as d,$ as e,y as f,E as g,p as h,v as i,m as j,D as k,i as l,w as m,L as n,b as o,P as p,F as q,q as r,j as s,k as t,S as u,ee as v,te as w,re as x,se as y};
|
|
29
|
-
//# sourceMappingURL=index-5399fca9.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-5399fca9.js","sources":["../src/common/chains.ts","../src/common/configs.ts","../src/common/cow-error.ts","../src/common/ipfs.ts","../src/order-book/generated/core/BaseHttpRequest.ts","../src/order-book/generated/core/ApiError.ts","../src/order-book/generated/core/CancelablePromise.ts","../src/order-book/generated/core/request.ts","../src/order-book/generated/core/FetchHttpRequest.ts","../src/order-book/generated/services/DefaultService.ts","../src/order-book/generated/OrderBookClient.ts","../src/order-book/generated/core/OpenAPI.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/order-book/transformOrder.ts","../src/order-book/api.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'\n\nexport interface IpfsConfig {\n uri?: string\n writeUri?: string\n readUri?: string\n pinataApiKey?: string\n pinataApiSecret?: string\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","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { CancelablePromise } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\nexport abstract class BaseHttpRequest {\n\n constructor(public readonly config: OpenAPIConfig) {}\n\n public abstract request<T>(options: ApiRequestOptions): CancelablePromise<T>;\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\n\nexport class ApiError extends Error {\n public readonly url: string;\n public readonly status: number;\n public readonly statusText: string;\n public readonly body: any;\n public readonly request: ApiRequestOptions;\n\n constructor(request: ApiRequestOptions, response: ApiResult, message: string) {\n super(message);\n\n this.name = 'ApiError';\n this.url = response.url;\n this.status = response.status;\n this.statusText = response.statusText;\n this.body = response.body;\n this.request = request;\n }\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nexport class CancelError extends Error {\n\n constructor(message: string) {\n super(message);\n this.name = 'CancelError';\n }\n\n public get isCancelled(): boolean {\n return true;\n }\n}\n\nexport interface OnCancel {\n readonly isResolved: boolean;\n readonly isRejected: boolean;\n readonly isCancelled: boolean;\n\n (cancelHandler: () => void): void;\n}\n\nexport class CancelablePromise<T> implements Promise<T> {\n readonly [Symbol.toStringTag]!: string;\n\n private _isResolved: boolean;\n private _isRejected: boolean;\n private _isCancelled: boolean;\n private readonly _cancelHandlers: (() => void)[];\n private readonly _promise: Promise<T>;\n private _resolve?: (value: T | PromiseLike<T>) => void;\n private _reject?: (reason?: any) => void;\n\n constructor(\n executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void,\n onCancel: OnCancel\n ) => void\n ) {\n this._isResolved = false;\n this._isRejected = false;\n this._isCancelled = false;\n this._cancelHandlers = [];\n this._promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n\n const onResolve = (value: T | PromiseLike<T>): void => {\n if (this._isResolved || this._isRejected || this._isCancelled) {\n return;\n }\n this._isResolved = true;\n this._resolve?.(value);\n };\n\n const onReject = (reason?: any): void => {\n if (this._isResolved || this._isRejected || this._isCancelled) {\n return;\n }\n this._isRejected = true;\n this._reject?.(reason);\n };\n\n const onCancel = (cancelHandler: () => void): void => {\n if (this._isResolved || this._isRejected || this._isCancelled) {\n return;\n }\n this._cancelHandlers.push(cancelHandler);\n };\n\n Object.defineProperty(onCancel, 'isResolved', {\n get: (): boolean => this._isResolved,\n });\n\n Object.defineProperty(onCancel, 'isRejected', {\n get: (): boolean => this._isRejected,\n });\n\n Object.defineProperty(onCancel, 'isCancelled', {\n get: (): boolean => this._isCancelled,\n });\n\n return executor(onResolve, onReject, onCancel as OnCancel);\n });\n }\n\n public then<TResult1 = T, TResult2 = never>(\n onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null\n ): Promise<TResult1 | TResult2> {\n return this._promise.then(onFulfilled, onRejected);\n }\n\n public catch<TResult = never>(\n onRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null\n ): Promise<T | TResult> {\n return this._promise.catch(onRejected);\n }\n\n public finally(onFinally?: (() => void) | null): Promise<T> {\n return this._promise.finally(onFinally);\n }\n\n public cancel(): void {\n if (this._isResolved || this._isRejected || this._isCancelled) {\n return;\n }\n this._isCancelled = true;\n if (this._cancelHandlers.length) {\n try {\n for (const cancelHandler of this._cancelHandlers) {\n cancelHandler();\n }\n } catch (error) {\n console.warn('Cancellation threw an error', error);\n return;\n }\n }\n this._cancelHandlers.length = 0;\n this._reject?.(new CancelError('Request aborted'));\n }\n\n public get isCancelled(): boolean {\n return this._isCancelled;\n }\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport { ApiError } from './ApiError';\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\nimport { CancelablePromise } from './CancelablePromise';\nimport type { OnCancel } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\nconst isDefined = <T>(value: T | null | undefined): value is Exclude<T, null | undefined> => {\n return value !== undefined && value !== null;\n};\n\nconst isString = (value: any): value is string => {\n return typeof value === 'string';\n};\n\nconst isStringWithValue = (value: any): value is string => {\n return isString(value) && value !== '';\n};\n\nconst isBlob = (value: any): value is Blob => {\n return (\n typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.constructor === 'function' &&\n typeof value.constructor.name === 'string' &&\n /^(Blob|File)$/.test(value.constructor.name) &&\n /^(Blob|File)$/.test(value[Symbol.toStringTag])\n );\n};\n\nconst isFormData = (value: any): value is FormData => {\n return value instanceof FormData;\n};\n\nconst base64 = (str: string): string => {\n try {\n return btoa(str);\n } catch (err) {\n // @ts-ignore\n return Buffer.from(str).toString('base64');\n }\n};\n\nconst getQueryString = (params: Record<string, any>): string => {\n const qs: string[] = [];\n\n const append = (key: string, value: any) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n\n const process = (key: string, value: any) => {\n if (isDefined(value)) {\n if (Array.isArray(value)) {\n value.forEach(v => {\n process(key, v);\n });\n } else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n } else {\n append(key, value);\n }\n }\n };\n\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n\n return '';\n};\n\nconst getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {\n const encoder = config.ENCODE_PATH || encodeURI;\n\n const path = options.url\n .replace('{api-version}', config.VERSION)\n .replace(/{(.*?)}/g, (substring: string, group: string) => {\n if (options.path?.hasOwnProperty(group)) {\n return encoder(String(options.path[group]));\n }\n return substring;\n });\n\n const url = `${config.BASE}${path}`;\n if (options.query) {\n return `${url}${getQueryString(options.query)}`;\n }\n return url;\n};\n\nconst getFormData = (options: ApiRequestOptions): FormData | undefined => {\n if (options.formData) {\n const formData = new FormData();\n\n const process = (key: string, value: any) => {\n if (isString(value) || isBlob(value)) {\n formData.append(key, value);\n } else {\n formData.append(key, JSON.stringify(value));\n }\n };\n\n Object.entries(options.formData)\n .filter(([_, value]) => isDefined(value))\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => process(key, v));\n } else {\n process(key, value);\n }\n });\n\n return formData;\n }\n return undefined;\n};\n\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\n\nconst resolve = async <T>(options: ApiRequestOptions, resolver?: T | Resolver<T>): Promise<T | undefined> => {\n if (typeof resolver === 'function') {\n return (resolver as Resolver<T>)(options);\n }\n return resolver;\n};\n\nconst getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions): Promise<Headers> => {\n const token = await resolve(options, config.TOKEN);\n const username = await resolve(options, config.USERNAME);\n const password = await resolve(options, config.PASSWORD);\n const additionalHeaders = await resolve(options, config.HEADERS);\n\n const headers = Object.entries({\n Accept: 'application/json',\n ...additionalHeaders,\n ...options.headers,\n })\n .filter(([_, value]) => isDefined(value))\n .reduce((headers, [key, value]) => ({\n ...headers,\n [key]: String(value),\n }), {} as Record<string, string>);\n\n if (isStringWithValue(token)) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n if (isStringWithValue(username) && isStringWithValue(password)) {\n const credentials = base64(`${username}:${password}`);\n headers['Authorization'] = `Basic ${credentials}`;\n }\n\n if (options.body) {\n if (options.mediaType) {\n headers['Content-Type'] = options.mediaType;\n } else if (isBlob(options.body)) {\n headers['Content-Type'] = options.body.type || 'application/octet-stream';\n } else if (isString(options.body)) {\n headers['Content-Type'] = 'text/plain';\n } else if (!isFormData(options.body)) {\n headers['Content-Type'] = 'application/json';\n }\n }\n\n return new Headers(headers);\n};\n\nconst getRequestBody = (options: ApiRequestOptions): any => {\n if (options.body) {\n if (options.mediaType?.includes('/json')) {\n return JSON.stringify(options.body)\n } else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {\n return options.body;\n } else {\n return JSON.stringify(options.body);\n }\n }\n return undefined;\n};\n\nexport const sendRequest = async (\n config: OpenAPIConfig,\n options: ApiRequestOptions,\n url: string,\n body: any,\n formData: FormData | undefined,\n headers: Headers,\n onCancel: OnCancel\n): Promise<Response> => {\n const controller = new AbortController();\n\n const request: RequestInit = {\n headers,\n body: body ?? formData,\n method: options.method,\n signal: controller.signal,\n };\n\n if (config.WITH_CREDENTIALS) {\n request.credentials = config.CREDENTIALS;\n }\n\n onCancel(() => controller.abort());\n\n return await fetch(url, request);\n};\n\nconst getResponseHeader = (response: Response, responseHeader?: string): string | undefined => {\n if (responseHeader) {\n const content = response.headers.get(responseHeader);\n if (isString(content)) {\n return content;\n }\n }\n return undefined;\n};\n\nconst getResponseBody = async (response: Response): Promise<any> => {\n if (response.status !== 204) {\n try {\n const contentType = response.headers.get('Content-Type');\n if (contentType) {\n const isJSON = contentType.toLowerCase().startsWith('application/json');\n if (isJSON) {\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\nconst catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => {\n const errors: Record<number, string> = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n ...options.errors,\n }\n\n const error = errors[result.status];\n if (error) {\n throw new ApiError(options, result, error);\n }\n\n if (!result.ok) {\n throw new ApiError(options, result, 'Generic Error');\n }\n};\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise<T>\n * @throws ApiError\n */\nexport const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions): CancelablePromise<T> => {\n return new CancelablePromise(async (resolve, reject, onCancel) => {\n try {\n const url = getUrl(config, options);\n const formData = getFormData(options);\n const body = getRequestBody(options);\n const headers = await getHeaders(config, options);\n\n if (!onCancel.isCancelled) {\n const response = await sendRequest(config, options, url, body, formData, headers, onCancel);\n const responseBody = await getResponseBody(response);\n const responseHeader = getResponseHeader(response, options.responseHeader);\n\n const result: ApiResult = {\n url,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n body: responseHeader ?? responseBody,\n };\n\n catchErrorCodes(options, result);\n\n resolve(result.body);\n }\n } catch (error) {\n reject(error);\n }\n });\n};\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport { BaseHttpRequest } from './BaseHttpRequest';\nimport type { CancelablePromise } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\nimport { request as __request } from './request';\n\nexport class FetchHttpRequest extends BaseHttpRequest {\n\n constructor(config: OpenAPIConfig) {\n super(config);\n }\n\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise<T>\n * @throws ApiError\n */\n public override request<T>(options: ApiRequestOptions): CancelablePromise<T> {\n return __request(this.config, options);\n }\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { Address } from '../models/Address';\nimport type { Auction } from '../models/Auction';\nimport type { NativePriceResponse } from '../models/NativePriceResponse';\nimport type { Order } from '../models/Order';\nimport type { OrderCancellation } from '../models/OrderCancellation';\nimport type { OrderCancellations } from '../models/OrderCancellations';\nimport type { OrderCreation } from '../models/OrderCreation';\nimport type { OrderQuoteRequest } from '../models/OrderQuoteRequest';\nimport type { OrderQuoteResponse } from '../models/OrderQuoteResponse';\nimport type { SolverCompetitionResponse } from '../models/SolverCompetitionResponse';\nimport type { Trade } from '../models/Trade';\nimport type { TransactionHash } from '../models/TransactionHash';\nimport type { UID } from '../models/UID';\nimport type { VersionResponse } from '../models/VersionResponse';\n\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\n\nexport class DefaultService {\n\n constructor(public readonly httpRequest: BaseHttpRequest) {}\n\n /**\n * Create a new order.\n * @param requestBody The order to create.\n * @returns UID Order has been accepted.\n * @throws ApiError\n */\n public postApiV1Orders(\n requestBody: OrderCreation,\n ): CancelablePromise<UID> {\n return this.httpRequest.request({\n method: 'POST',\n url: '/api/v1/orders',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `Error during order validation`,\n 403: `Forbidden, your account is deny-listed`,\n 429: `Too many order placements`,\n 500: `Error adding an order`,\n },\n });\n }\n\n /**\n * Cancels multiple orders by marking them invalid with a timestamp.\n * This is a best effort cancellation, and might not prevent solvers from\n * settling the orders (if the order is part of an in-flight settlement\n * transaction for example). Authentication must be provided by an EIP-712\n * signature of an \"OrderCacellations(bytes[] orderUids)\" message.\n *\n * @param requestBody Signed OrderCancellations\n * @returns any Orders deleted\n * @throws ApiError\n */\n public deleteApiV1Orders(\n requestBody: OrderCancellations,\n ): CancelablePromise<any> {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/api/v1/orders',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `Malformed signature`,\n 401: `Invalid signature`,\n 404: `One or more orders were not found and no orders were cancelled.`,\n },\n });\n }\n\n /**\n * Get existing order from UID.\n * @param uid\n * @returns Order Order\n * @throws ApiError\n */\n public getApiV1Orders(\n uid: UID,\n ): CancelablePromise<Order> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/api/v1/orders/{UID}',\n path: {\n 'UID': uid,\n },\n errors: {\n 404: `Order was not found`,\n },\n });\n }\n\n /**\n * @deprecated\n * Cancels order by marking it invalid with a timestamp.\n * The successful deletion might not prevent solvers from settling the order.\n * Authentication must be provided by providing an EIP-712 signature of an\n * \"OrderCacellation(bytes orderUids)\" message.\n *\n * @param uid\n * @param requestBody Signed OrderCancellation\n * @returns any Order deleted\n * @throws ApiError\n */\n public deleteApiV1Orders1(\n uid: UID,\n requestBody: OrderCancellation,\n ): CancelablePromise<any> {\n return this.httpRequest.request({\n method: 'DELETE',\n url: '/api/v1/orders/{UID}',\n path: {\n 'UID': uid,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `Malformed signature`,\n 401: `Invalid signature`,\n 404: `Order was not found`,\n },\n });\n }\n\n /**\n * Cancels order and replaces it with a new one\n * Cancel an order by providing a replacement order where the app data field\n * is the EIP-712-struct-hash of a cancellation for the original order. This\n * allows an old order to be cancelled AND a new order to be created in an\n * atomic operation with a single signature. This may be useful for replacing\n * orders when on-chain prices move outside of the original order's limit price.\n *\n * @param uid\n * @param requestBody replacement order\n * @returns UID Previous order was cancelled and the new replacement order was created.\n * @throws ApiError\n */\n public patchApiV1Orders(\n uid: UID,\n requestBody: OrderCreation,\n ): CancelablePromise<UID> {\n return this.httpRequest.request({\n method: 'PATCH',\n url: '/api/v1/orders/{UID}',\n path: {\n 'UID': uid,\n },\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `Error cancelling and replacing new order with an old one.`,\n 401: `Invalid replacement order. This can happen if the old and new orders have\n different signers, the new order's app data is not an encoded cancellation of\n the old order, or the new order is based on presign or EIP-1271 signatures.\n `,\n 403: `Forbidden`,\n 404: `Order was not found`,\n },\n });\n }\n\n /**\n * Get orders by settlement transaction hash.\n * @param txHash\n * @returns Order Order\n * @throws ApiError\n */\n public getApiV1TransactionsOrders(\n txHash: TransactionHash,\n ): CancelablePromise<Array<Order>> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/api/v1/transactions/{txHash}/orders',\n path: {\n 'txHash': txHash,\n },\n });\n }\n\n /**\n * Get existing Trades.\n * Exactly one of owner or order_uid has to be set.\n *\n * @param owner\n * @param orderUid\n * @returns Trade all trades\n * @throws ApiError\n */\n public getApiV1Trades(\n owner?: Address,\n orderUid?: UID,\n ): CancelablePromise<Array<Trade>> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/api/v1/trades',\n query: {\n 'owner': owner,\n 'orderUid': orderUid,\n },\n });\n }\n\n /**\n * Gets the current batch auction.\n * The current batch auction that solvers should be solving right now. Includes the list of\n * solvable orders, the block on which the batch was created, as well as prices for all tokens\n * being traded (used for objective value computation).\n *\n * @returns Auction the auction\n * @throws ApiError\n */\n public getApiV1Auction(): CancelablePromise<Auction> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/api/v1/auction',\n });\n }\n\n /**\n * Get orders of one user paginated.\n * The orders are ordered by their creation date descending (newest orders first).\n * To enumerate all orders start with offset 0 and keep increasing the offset by the total\n * number of returned results. When a response contains less than the limit the last page has\n * been reached.\n *\n * @param owner\n * @param offset The pagination offset. Defaults to 0.\n *\n * @param limit The pagination limit. Defaults to 10. Maximum 1000. Minimum 1.\n *\n * @returns Order the orders\n * @throws ApiError\n */\n public getApiV1AccountOrders(\n owner: Address,\n offset?: number,\n limit?: number,\n ): CancelablePromise<Array<Order>> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/api/v1/account/{owner}/orders',\n path: {\n 'owner': owner,\n },\n query: {\n 'offset': offset,\n 'limit': limit,\n },\n errors: {\n 400: `Problem with parameters like limit being too large.`,\n },\n });\n }\n\n /**\n * Get native price for the given token.\n * Price is the exchange rate between the specified token and the network's native currency.\n * It represents the amount of native token atoms needed to buy 1 atom of the specified token.\n *\n * @param token\n * @returns NativePriceResponse the estimated native price\n * @throws ApiError\n */\n public getApiV1TokenNativePrice(\n token: Address,\n ): CancelablePromise<NativePriceResponse> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/api/v1/token/{token}/native_price',\n path: {\n 'token': token,\n },\n errors: {\n 400: `Error finding the price.`,\n 404: `No liquidity was found`,\n 500: `Unexpected error`,\n },\n });\n }\n\n /**\n * Quotes a price and fee for the specified order parameters.\n * This API endpoint accepts a partial order and computes the minimum fee and\n * a price estimate for the order. It returns a full order that can be used\n * directly for signing, and with an included signature, passed directly to\n * the order creation endpoint.\n *\n * @param requestBody The order parameters to compute a quote for.\n * @returns OrderQuoteResponse Quoted order.\n * @throws ApiError\n */\n public postApiV1Quote(\n requestBody: OrderQuoteRequest,\n ): CancelablePromise<OrderQuoteResponse> {\n return this.httpRequest.request({\n method: 'POST',\n url: '/api/v1/quote',\n body: requestBody,\n mediaType: 'application/json',\n errors: {\n 400: `Error quoting order.`,\n 403: `Forbidden, your account is deny-listed`,\n 429: `Too many order quotes`,\n 500: `Unexpected error quoting an order`,\n },\n });\n }\n\n /**\n * Information about solver competition\n * Returns the competition information by auction id.\n *\n * @param auctionId\n * @returns SolverCompetitionResponse competition info\n * @throws ApiError\n */\n public getApiV1SolverCompetition(\n auctionId: number,\n ): CancelablePromise<SolverCompetitionResponse> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/api/v1/solver_competition/{auction_id}',\n path: {\n 'auction_id': auctionId,\n },\n errors: {\n 404: `No competition information available for this auction id.`,\n },\n });\n }\n\n /**\n * Information about solver competition\n * Returns the competition information by transaction hash.\n *\n * @param txHash\n * @returns SolverCompetitionResponse competition info\n * @throws ApiError\n */\n public getApiV1SolverCompetitionByTxHash(\n txHash: TransactionHash,\n ): CancelablePromise<SolverCompetitionResponse> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/api/v1/solver_competition/by_tx_hash/{tx_hash}',\n path: {\n 'tx_hash': txHash,\n },\n errors: {\n 404: `No competition information available for this tx hash.`,\n },\n });\n }\n\n /**\n * Information about the current deployed version of the API\n * Returns the git commit hash, branch name and release tag (code: https://github.com/cowprotocol/services).\n *\n * @returns VersionResponse version info\n * @throws ApiError\n */\n public getApiV1Version(): CancelablePromise<VersionResponse> {\n return this.httpRequest.request({\n method: 'GET',\n url: '/api/v1/version',\n });\n }\n\n}\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { BaseHttpRequest } from './core/BaseHttpRequest';\nimport type { OpenAPIConfig } from './core/OpenAPI';\nimport { FetchHttpRequest } from './core/FetchHttpRequest';\n\nimport { DefaultService } from './services/DefaultService';\n\ntype HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest;\n\nexport class OrderBookClient {\n\n public readonly default: DefaultService;\n\n public readonly request: BaseHttpRequest;\n\n constructor(config?: Partial<OpenAPIConfig>, HttpRequest: HttpRequestConstructor = FetchHttpRequest) {\n this.request = new HttpRequest({\n BASE: config?.BASE ?? 'https://api.cow.fi/mainnet',\n VERSION: config?.VERSION ?? '0.0.1',\n WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n CREDENTIALS: config?.CREDENTIALS ?? 'include',\n TOKEN: config?.TOKEN,\n USERNAME: config?.USERNAME,\n PASSWORD: config?.PASSWORD,\n HEADERS: config?.HEADERS,\n ENCODE_PATH: config?.ENCODE_PATH,\n });\n\n this.default = new DefaultService(this.request);\n }\n}\n\n","/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\n\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\ntype Headers = Record<string, string>;\n\nexport type OpenAPIConfig = {\n BASE: string;\n VERSION: string;\n WITH_CREDENTIALS: boolean;\n CREDENTIALS: 'include' | 'omit' | 'same-origin';\n TOKEN?: string | Resolver<string>;\n USERNAME?: string | Resolver<string>;\n PASSWORD?: string | Resolver<string>;\n HEADERS?: Headers | Resolver<Headers>;\n ENCODE_PATH?: (path: string) => string;\n};\n\nexport const OpenAPI: OpenAPIConfig = {\n BASE: 'https://api.cow.fi/mainnet',\n VERSION: '0.0.1',\n WITH_CREDENTIALS: false,\n CREDENTIALS: 'include',\n TOKEN: undefined,\n USERNAME: undefined,\n PASSWORD: undefined,\n HEADERS: undefined,\n ENCODE_PATH: undefined,\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 { 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 'cross-fetch/polyfill'\nimport {\n Address,\n ApiError,\n BaseHttpRequest,\n CancelablePromise,\n DefaultService,\n FeeAndQuoteError,\n NativePriceResponse,\n OpenAPIConfig,\n OrderBookClient,\n OrderCancellations,\n OrderCreation,\n OrderPostError,\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} from '../common/configs'\nimport { transformOrder } from './transformOrder'\nimport { EnrichedOrder } from './types'\nimport { ApiRequestOptions } from './generated/core/ApiRequestOptions'\nimport { request as __request } from './generated/core/request'\nimport { SupportedChainId } from '../common/chains'\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\nclass FetchHttpRequest extends BaseHttpRequest {\n constructor(config: OpenAPIConfig) {\n super(config)\n }\n\n /**\n * Request method\n * @param options The request options from the service\n * @returns CancelablePromise<T>\n * @throws ApiError\n */\n public override request<T>(options: ApiRequestOptions): CancelablePromise<T> {\n return __request(this.config, {\n ...options,\n headers: {\n ...options.headers,\n 'Content-Type': 'application/json',\n },\n })\n }\n}\n\nexport class OrderBookApi {\n public context: ApiContext\n private servicePerNetwork: Record<string, OrderBookClient | null> = {}\n\n constructor(context: PartialApiContext = {}) {\n this.context = { ...DEFAULT_COW_API_CONTEXT, ...context }\n }\n\n getTrades(\n { owner, orderId }: { owner?: Address; orderId?: UID },\n contextOverride: PartialApiContext = {}\n ): CancelablePromise<Array<Trade>> {\n if (owner && orderId) {\n return new CancelablePromise((_, reject) => {\n reject(new CowError('Cannot specify both owner and orderId'))\n })\n }\n\n return this.getServiceForNetwork(contextOverride).getApiV1Trades(owner, orderId)\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 return this.getServiceForNetwork(contextOverride)\n .getApiV1AccountOrders(owner, offset, limit)\n .then((orders) => {\n return orders.map(transformOrder)\n })\n }\n\n getTxOrders(txHash: TransactionHash, contextOverride: PartialApiContext = {}): Promise<Array<EnrichedOrder>> {\n return this.getServiceForNetwork(contextOverride)\n .getApiV1TransactionsOrders(txHash)\n .then((orders) => {\n return orders.map(transformOrder)\n })\n }\n\n getOrder(uid: UID, contextOverride: PartialApiContext = {}): Promise<EnrichedOrder> {\n return this.getServiceForNetwork(contextOverride)\n .getApiV1Orders(uid)\n .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): Promise<EnrichedOrder> => {\n const nextEnv = otherEnvs[attemptsCount]\n\n if (error instanceof ApiError && error.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.getServiceForNetwork(contextOverride)\n .postApiV1Quote(requestBody)\n .catch((error: { body: FeeAndQuoteError }) => {\n return Promise.reject(error.body || error)\n })\n }\n\n sendSignedOrderCancellations(\n requestBody: OrderCancellations,\n contextOverride: PartialApiContext = {}\n ): CancelablePromise<void> {\n return this.getServiceForNetwork(contextOverride).deleteApiV1Orders(requestBody)\n }\n\n sendOrder(requestBody: OrderCreation, contextOverride: PartialApiContext = {}): Promise<UID> {\n return this.getServiceForNetwork(contextOverride)\n .postApiV1Orders(requestBody)\n .catch((error) => {\n const body: OrderPostError = error.body\n\n if (body?.errorType) {\n throw new Error(body.errorType)\n }\n\n throw error\n })\n }\n\n getNativePrice(\n tokenAddress: Address,\n contextOverride: PartialApiContext = {}\n ): CancelablePromise<NativePriceResponse> {\n return this.getServiceForNetwork(contextOverride).getApiV1TokenNativePrice(tokenAddress)\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 getServiceForNetwork(contextOverride: PartialApiContext): DefaultService {\n const { chainId, env } = this.getContextWithOverride(contextOverride)\n const key = `${env}|${chainId}`\n const cached = this.servicePerNetwork[key]\n\n if (cached) return cached.default\n\n const client = new OrderBookClient({ BASE: this.getApiBaseUrls(env)[chainId] }, FetchHttpRequest)\n this.servicePerNetwork[key] = client\n\n return client.default\n }\n\n private getContextWithOverride(contextOverride: PartialApiContext = {}): ApiContext {\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","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","BaseHttpRequest","config","ApiError","request","response","url","status","statusText","body","name","CancelError","isCancelled","_Symbol$toStringTag","Symbol","toStringTag","CancelablePromise","executor","_isResolved","_isRejected","_isCancelled","_cancelHandlers","_promise","_resolve","_reject","Promise","resolve","reject","onCancel","cancelHandler","push","Object","defineProperty","get","value","_this$_resolve","call","reason","_this$_reject","then","onFulfilled","onRejected","catch","finally","onFinally","cancel","_this$_reject2","length","error","console","warn","isDefined","isString","isStringWithValue","isBlob","type","stream","arrayBuffer","test","isFormData","FormData","async","options","resolver","getHeaders","token","TOKEN","username","USERNAME","password","PASSWORD","additionalHeaders","HEADERS","headers","entries","_extends","Accept","filter","_","reduce","key","String","credentials","str","btoa","err","Buffer","from","toString","base64","mediaType","Headers","getUrl","encoder","ENCODE_PATH","encodeURI","path","replace","VERSION","substring","group","_options$path","hasOwnProperty","BASE","query","params","qs","process","Array","isArray","forEach","v","k","append","encodeURIComponent","join","getQueryString","formData","JSON","stringify","undefined","getFormData","_options$mediaType","includes","getRequestBody","controller","AbortController","method","signal","WITH_CREDENTIALS","CREDENTIALS","abort","fetch","sendRequest","responseBody","contentType","toLowerCase","startsWith","json","text","getResponseBody","responseHeader","getResponseHeader","content","result","ok","catchErrorCodes","errors","FetchHttpRequest","__request","DefaultService","httpRequest","postApiV1Orders","requestBody","deleteApiV1Orders","getApiV1Orders","uid","UID","deleteApiV1Orders1","patchApiV1Orders","getApiV1TransactionsOrders","txHash","getApiV1Trades","owner","orderUid","getApiV1Auction","getApiV1AccountOrders","offset","limit","getApiV1TokenNativePrice","postApiV1Quote","getApiV1SolverCompetition","auctionId","auction_id","getApiV1SolverCompetitionByTxHash","tx_hash","getApiV1Version","OrderBookClient","HttpRequest","_config$BASE","_config$VERSION","_config$WITH_CREDENTI","_config$CREDENTIALS","default","OpenAPI","BuyTokenDestination","EcdsaSigningScheme","FeeAndQuoteError","OnchainOrderData","OrderCancellationError","OrderClass","OrderKind","OrderPostError","OrderQuoteSide","OrderStatus","PriceQuality","ReplaceOrderError","SellTokenSource","SigningScheme","errorType","placementError","kind","BUY_ETH_ADDRESS","transformOrder","order","ethflowData","userValidTo","validTo","onchainUser","sellToken","transformEthFlowOrder","dto","executedFeeAmount","executedSurplusFee","totalFee","addTotalFeeToOrder","ORDER_BOOK_PROD_CONFIG","GNOSIS_CHAIN","GOERLI","ORDER_BOOK_STAGING_CONFIG","OrderBookApi","context","servicePerNetwork","getTrades","orderId","contextOverride","getServiceForNetwork","getOrders","orders","map","getTxOrders","getOrder","getOrderMultiEnv","getContextWithOverride","otherEnvs","i","attemptsCount","fallback","nextEnv","getQuote","sendSignedOrderCancellations","sendOrder","getNativePrice","tokenAddress","getOrderLink","getApiBaseUrls","cached","client","baseUrls","_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","baseUrl","getEnvConfigs","getSignUtils","import","OrderSigningUtils","static","signer","signOrder","signOrderCancellation","signOrderCancellations","getDomain"],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Address } from './Address';
|
|
2
|
-
import type { TokenAmount } from './TokenAmount';
|
|
3
|
-
/**
|
|
4
|
-
* Provides the information about an estimated price.
|
|
5
|
-
*
|
|
6
|
-
*/
|
|
7
|
-
export type AmountEstimate = {
|
|
8
|
-
/**
|
|
9
|
-
* The estimated amount
|
|
10
|
-
*/
|
|
11
|
-
amount?: TokenAmount;
|
|
12
|
-
/**
|
|
13
|
-
* The token in which the amount is given
|
|
14
|
-
*/
|
|
15
|
-
token?: Address;
|
|
16
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { FeeInformation } from './FeeInformation';
|
|
2
|
-
import type { TokenAmount } from './TokenAmount';
|
|
3
|
-
export type FeeAndQuoteBuyResponse = {
|
|
4
|
-
fee?: FeeInformation;
|
|
5
|
-
/**
|
|
6
|
-
* The sell amount including the fee.
|
|
7
|
-
*/
|
|
8
|
-
sellAmountBeforeFee?: TokenAmount;
|
|
9
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { FeeInformation } from './FeeInformation';
|
|
2
|
-
import type { TokenAmount } from './TokenAmount';
|
|
3
|
-
export type FeeAndQuoteSellResponse = {
|
|
4
|
-
fee?: FeeInformation;
|
|
5
|
-
/**
|
|
6
|
-
* The buy amount after deducting the fee.
|
|
7
|
-
*/
|
|
8
|
-
buyAmountAfterFee?: TokenAmount;
|
|
9
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { TokenAmount } from './TokenAmount';
|
|
2
|
-
/**
|
|
3
|
-
* Provides the information to calculate the fees.
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
6
|
-
export type FeeInformation = {
|
|
7
|
-
/**
|
|
8
|
-
* Expiration date of the offered fee. Order service might not accept
|
|
9
|
-
* the fee after this expiration date. Encoded as ISO 8601 UTC.
|
|
10
|
-
*
|
|
11
|
-
*/
|
|
12
|
-
expiration: string;
|
|
13
|
-
/**
|
|
14
|
-
* Absolute amount of fee charged per order in specified sellToken
|
|
15
|
-
*/
|
|
16
|
-
amount: TokenAmount;
|
|
17
|
-
};
|
package/dist/utils-4aa913b1.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{IntChainIdTypedDataV4Signer as n,TypedDataVersionedSigner as e,signOrderCancellations as a,signOrderCancellation as d,signOrder as t,SigningScheme as c,domain as s}from"@cowprotocol/contracts";import{SupportedChainId as r,EcdsaSigningScheme as f,CowError as o}from"./index.module.js";import"cross-fetch/polyfill";import"graphql-request";const{GPv2Settlement:b}=JSON.parse('{\n "GPv2AllowListAuthentication_Implementation": {\n "1": {\n "address": "0x9E7Ae8Bdba9AA346739792d219a808884996Db67",\n "transactionHash": "0x58340aa44119c74e48635fab0ac344170c6d6e8b42e5714baa4ba4e1651f63ad"\n },\n "4": {\n "address": "0x9E7Ae8Bdba9AA346739792d219a808884996Db67"\n },\n "5": {\n "address": "0x9E7Ae8Bdba9AA346739792d219a808884996Db67",\n "transactionHash": "0x24f4f80b46a17345011065f9ea2af823f582db56be81098b3b66cc2db9659ea7"\n },\n "100": {\n "address": "0x9E7Ae8Bdba9AA346739792d219a808884996Db67",\n "transactionHash": "0xe52d425fe34d6d5215ccfc9ddfa485d490b3018f0ee5bbed708f2d172044d60d"\n }\n },\n "GPv2AllowListAuthentication_Proxy": {\n "1": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0xb84bf720364f94c749f1ec1cdf0d4c44c70411b716459aaccfd24fc677013375"\n },\n "4": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x57b2278fd3a13ab1b132031024475ba1a4e28d7d4d37f556134c84512b742c1f"\n },\n "5": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x39dcf30baf887a5db54551a84de8bfdb6cf418bb284b09680d13aed17d5fa0c1"\n },\n "100": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x1a2d87a05a94bc6680a4faee31bbafbd74e9ddb63dd3941c717b5c609c08b957"\n }\n },\n "GPv2AllowListAuthentication": {\n "1": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0xb84bf720364f94c749f1ec1cdf0d4c44c70411b716459aaccfd24fc677013375"\n },\n "4": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x57b2278fd3a13ab1b132031024475ba1a4e28d7d4d37f556134c84512b742c1f"\n },\n "5": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x39dcf30baf887a5db54551a84de8bfdb6cf418bb284b09680d13aed17d5fa0c1"\n },\n "100": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x1a2d87a05a94bc6680a4faee31bbafbd74e9ddb63dd3941c717b5c609c08b957"\n }\n },\n "GPv2Settlement": {\n "1": {\n "address": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",\n "transactionHash": "0xf49f90aa5a268c40001d1227b76bb4dd8247f18361fcad9fffd4a7a44f1320d3"\n },\n "4": {\n "address": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",\n "transactionHash": "0x609fa2e8f32c73c1f5dc21ff60a26238dacb50d4674d336c90d6950bdda17a21"\n },\n "5": {\n "address": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",\n "transactionHash": "0x982f089060ff66e19d0683ef1cc6a637297331a9ba95b65d8eb84b9f8dc64b04"\n },\n "100": {\n "address": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",\n "transactionHash": "0x9ddc538f89cd8433f4a19bc4de0de27e7c68a1d04a14b327185e4bba9af87133"\n }\n },\n "GPv2VaultRelayer": {\n "1": {\n "address": "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",\n "transactionHash": "0xf49f90aa5a268c40001d1227b76bb4dd8247f18361fcad9fffd4a7a44f1320d3"\n },\n "4": {\n "address": "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",\n "transactionHash": "0x609fa2e8f32c73c1f5dc21ff60a26238dacb50d4674d336c90d6950bdda17a21"\n },\n "5": {\n "address": "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",\n "transactionHash": "0x982f089060ff66e19d0683ef1cc6a637297331a9ba95b65d8eb84b9f8dc64b04"\n },\n "100": {\n "address": "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",\n "transactionHash": "0x9ddc538f89cd8433f4a19bc4de0de27e7c68a1d04a14b327185e4bba9af87133"\n }\n }\n}'),i=[r.MAINNET,r.GOERLI,r.GNOSIS_CHAIN].reduce((n,e)=>({...n,[e]:b[e].address}),{}),h=function(n,e,a){return D({orderUids:n,chainId:e},l,a)},u=function(n,e,a){return D({orderId:n,chainId:e},x,a)},A=function(n,e,a){return D({order:n,chainId:e},E,a)},D=function(a,d,t,c="v4"){try{let r;function s(n){if(r)return n;const e=h?.data;return{signature:e?.toString()||"",signingScheme:b}}const b="eth_sign"===c?f.ETHSIGN:f.EIP712;let i,h=null;try{switch(c){case"default":case"v3":i=new e(t);break;case"int_v4":i=new n(t);break;default:i=t}}catch(A){throw console.error("Wallet not supported:",A),new o("Wallet not supported")}const u=function(n,e){try{var t=Promise.resolve(d({...a,signer:i,signingScheme:b})).then(function(n){h=n})}catch(n){return e(n)}return t&&t.then?t.then(void 0,e):t}(0,function(n){if(void 0===(e=n).code&&void 0===e.message)throw console.error(n),n;var e;const s=[v,p].some(e=>[n.message,n.toString()].some(n=>e.test(n)));if(n.code!==g&&!s){if(P.test(n.message)){const n=D(a,d,t,"int_v4");return r=1,n}if(n.code===m){const n=D(a,d,t,"eth_sign");return r=1,n}if(C.test(n.message)){const n=D(a,d,t,"v3");return r=1,n}if(H.test(n.message)){const n=D(a,d,t,"eth_sign");return r=1,n}throw console.error(n),n}switch(c){case"v4":const e=D(a,d,t,"default");return r=1,e;case"default":const c=D(a,d,t,"v3");return r=1,c;case"v3":const s=D(a,d,t,"eth_sign");return r=1,s;default:throw n}});return Promise.resolve(u&&u.then?u.then(s):s(u))}catch(l){return Promise.reject(l)}},l=function(n){try{const{chainId:e,signer:d,signingScheme:t,orderUids:c}=n,s=w(e);return Promise.resolve(a(s,c,d,I[t]))}catch(n){return Promise.reject(n)}},x=function(n){try{const{chainId:e,signer:a,signingScheme:t,orderId:c}=n,s=w(e);return Promise.resolve(d(s,c,a,I[t]))}catch(n){return Promise.reject(n)}},E=function(n){try{const{chainId:e,signer:a,order:d,signingScheme:c}=n,s=w(e);return Promise.resolve(t(s,d,a,I[c]))}catch(n){return Promise.reject(n)}},m=-32603,g=-32601,v=/Method not found/i,C=/eth_signTypedData_v4 does not exist/i,H=/eth_signTypedData_v3 does not exist/i,p=/RPC request failed/i,P=/provided chainid .* must match the active chainid/i,I={[f.EIP712]:c.EIP712,[f.ETHSIGN]:c.ETHSIGN};function w(n){const e=i[n];if(!e)throw new o("Unsupported network. Settlement contract is not deployed");return s(n,e)}export{w as getDomain,A as signOrder,u as signOrderCancellation,h as signOrderCancellations};
|
|
2
|
-
//# sourceMappingURL=utils-4aa913b1.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils-4aa913b1.js","sources":["../src/common/consts.ts","../src/order-signing/utils.ts"],"sourcesContent":["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 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":["GPv2Settlement","JSON","parse","COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS","SupportedChainId","MAINNET","GOERLI","GNOSIS_CHAIN","reduce","acc","chainId","address","signOrderCancellations","orderUids","signer","_signPayload","_signOrderCancellations","signOrderCancellation","orderId","_signOrderCancellation","signOrder","order","_signOrder","payload","signFn","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","params","domain","getDomain","signOrderCancellationsGp","mapSigningSchema","signOrderCancellationGp","signOrderGp","SigningScheme","settlementContract","domainGp"],"mappings":"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"}
|
package/dist/utils-6247cf36.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{_ as a,S as n,C as e,E as d}from"./index-5399fca9.js";import{domain as c,IntChainIdTypedDataV4Signer as s,TypedDataVersionedSigner as t,signOrder as r,signOrderCancellation as b,signOrderCancellations as f,SigningScheme as i}from"@cowprotocol/contracts";import"cross-fetch/polyfill";import"graphql-request";const{GPv2Settlement:o}=JSON.parse('{\n "GPv2AllowListAuthentication_Implementation": {\n "1": {\n "address": "0x9E7Ae8Bdba9AA346739792d219a808884996Db67",\n "transactionHash": "0x58340aa44119c74e48635fab0ac344170c6d6e8b42e5714baa4ba4e1651f63ad"\n },\n "4": {\n "address": "0x9E7Ae8Bdba9AA346739792d219a808884996Db67"\n },\n "5": {\n "address": "0x9E7Ae8Bdba9AA346739792d219a808884996Db67",\n "transactionHash": "0x24f4f80b46a17345011065f9ea2af823f582db56be81098b3b66cc2db9659ea7"\n },\n "100": {\n "address": "0x9E7Ae8Bdba9AA346739792d219a808884996Db67",\n "transactionHash": "0xe52d425fe34d6d5215ccfc9ddfa485d490b3018f0ee5bbed708f2d172044d60d"\n }\n },\n "GPv2AllowListAuthentication_Proxy": {\n "1": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0xb84bf720364f94c749f1ec1cdf0d4c44c70411b716459aaccfd24fc677013375"\n },\n "4": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x57b2278fd3a13ab1b132031024475ba1a4e28d7d4d37f556134c84512b742c1f"\n },\n "5": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x39dcf30baf887a5db54551a84de8bfdb6cf418bb284b09680d13aed17d5fa0c1"\n },\n "100": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x1a2d87a05a94bc6680a4faee31bbafbd74e9ddb63dd3941c717b5c609c08b957"\n }\n },\n "GPv2AllowListAuthentication": {\n "1": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0xb84bf720364f94c749f1ec1cdf0d4c44c70411b716459aaccfd24fc677013375"\n },\n "4": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x57b2278fd3a13ab1b132031024475ba1a4e28d7d4d37f556134c84512b742c1f"\n },\n "5": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x39dcf30baf887a5db54551a84de8bfdb6cf418bb284b09680d13aed17d5fa0c1"\n },\n "100": {\n "address": "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE",\n "transactionHash": "0x1a2d87a05a94bc6680a4faee31bbafbd74e9ddb63dd3941c717b5c609c08b957"\n }\n },\n "GPv2Settlement": {\n "1": {\n "address": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",\n "transactionHash": "0xf49f90aa5a268c40001d1227b76bb4dd8247f18361fcad9fffd4a7a44f1320d3"\n },\n "4": {\n "address": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",\n "transactionHash": "0x609fa2e8f32c73c1f5dc21ff60a26238dacb50d4674d336c90d6950bdda17a21"\n },\n "5": {\n "address": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",\n "transactionHash": "0x982f089060ff66e19d0683ef1cc6a637297331a9ba95b65d8eb84b9f8dc64b04"\n },\n "100": {\n "address": "0x9008D19f58AAbD9eD0D60971565AA8510560ab41",\n "transactionHash": "0x9ddc538f89cd8433f4a19bc4de0de27e7c68a1d04a14b327185e4bba9af87133"\n }\n },\n "GPv2VaultRelayer": {\n "1": {\n "address": "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",\n "transactionHash": "0xf49f90aa5a268c40001d1227b76bb4dd8247f18361fcad9fffd4a7a44f1320d3"\n },\n "4": {\n "address": "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",\n "transactionHash": "0x609fa2e8f32c73c1f5dc21ff60a26238dacb50d4674d336c90d6950bdda17a21"\n },\n "5": {\n "address": "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",\n "transactionHash": "0x982f089060ff66e19d0683ef1cc6a637297331a9ba95b65d8eb84b9f8dc64b04"\n },\n "100": {\n "address": "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",\n "transactionHash": "0x9ddc538f89cd8433f4a19bc4de0de27e7c68a1d04a14b327185e4bba9af87133"\n }\n }\n}'),h=[n.MAINNET,n.GOERLI,n.GNOSIS_CHAIN].reduce((n,e)=>a({},n,{[e]:o[e].address}),{}),A=-32603,D=-32601,u=/Method not found/i,x=/eth_signTypedData_v4 does not exist/i,l=/eth_signTypedData_v3 does not exist/i,E=/RPC request failed/i,g=/provided chainid .* must match the active chainid/i,m={[d.EIP712]:i.EIP712,[d.ETHSIGN]:i.ETHSIGN};async function C(a){const{chainId:n,signer:e,order:d,signingScheme:c}=a,s=B(n);return r(s,d,e,m[c])}async function v(a){const{chainId:n,signer:e,signingScheme:d,orderId:c}=a,s=B(n);return b(s,c,e,m[d])}async function H(a){const{chainId:n,signer:e,signingScheme:d,orderUids:c}=a,s=B(n);return f(s,c,e,m[d])}async function p(n,c,r,b="v4"){var f;const i="eth_sign"===b?d.ETHSIGN:d.EIP712;let o,h=null;try{switch(b){case"default":case"v3":o=new t(r);break;case"int_v4":o=new s(r);break;default:o=r}}catch(a){throw console.error("Wallet not supported:",a),new e("Wallet not supported")}try{h=await c(a({},n,{signer:o,signingScheme:i}))}catch(a){if(void 0===(m=a).code&&void 0===m.message)throw console.error(a),a;const e=[u,E].some(n=>[a.message,a.toString()].some(a=>n.test(a)));if(a.code!==D&&!e){if(g.test(a.message))return p(n,c,r,"int_v4");if(a.code===A)return p(n,c,r,"eth_sign");if(x.test(a.message))return p(n,c,r,"v3");if(l.test(a.message))return p(n,c,r,"eth_sign");throw console.error(a),a}switch(b){case"v4":return p(n,c,r,"default");case"default":return p(n,c,r,"v3");case"v3":return p(n,c,r,"eth_sign");default:throw a}}var m;const C=null==(f=h)?void 0:f.data;return{signature:(null==C?void 0:C.toString())||"",signingScheme:i}}async function I(a,n,e){return p({order:a,chainId:n},C,e)}async function w(a,n,e){return p({orderId:a,chainId:n},v,e)}async function S(a,n,e){return p({orderUids:a,chainId:n},H,e)}function B(a){const n=h[a];if(!n)throw new e("Unsupported network. Settlement contract is not deployed");return c(a,n)}export{B as getDomain,I as signOrder,w as signOrderCancellation,S as signOrderCancellations};
|
|
2
|
-
//# sourceMappingURL=utils-6247cf36.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils-6247cf36.js","sources":["../src/common/consts.ts","../src/order-signing/utils.ts"],"sourcesContent":["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 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":["GPv2Settlement","JSON","parse","COW_PROTOCOL_SETTLEMENT_CONTRACT_ADDRESS","SupportedChainId","MAINNET","GOERLI","GNOSIS_CHAIN","reduce","acc","chainId","_extends","address","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","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","undefined","code","message","regexErrorCheck","some","regex","toString","msg","test","data","signOrder","signOrderCancellation","signOrderCancellations","settlementContract","domainGp"],"mappings":"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"}
|