@orderly.network/web3-provider-ethers 2.5.3 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var v=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var b=(o,r,t)=>r in o?v(o,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[r]=t;var y=(o,r)=>{for(var t in r)v(o,t,{get:r[t],enumerable:!0})},f=(o,r,t,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of E(r))!m.call(o,i)&&i!==t&&v(o,i,{get:()=>r[i],enumerable:!(e=u(r,i))||e.enumerable});return o};var T=o=>f(v({},"__esModule",{value:!0}),o);var l=(o,r,t)=>(b(o,typeof r!="symbol"?r+"":r,t),t);var g=(o,r,t)=>new Promise((e,i)=>{var a=n=>{try{s(t.next(n))}catch(c){i(c)}},d=n=>{try{s(t.throw(n))}catch(c){i(c)}},s=n=>n.done?e(n.value):Promise.resolve(n.value).then(a,d);s((t=t.apply(o,r)).next())});var _={};y(_,{EthersProvider:()=>p});module.exports=T(_);var w=require("@enzoferey/ethers-error-parser"),h=require("ethers");var p=class{constructor(){l(this,"_provider");l(this,"_originalProvider")}parseUnits(r,t){return h.ethers.parseUnits(r,t).toString()}formatUnits(r,t){return h.ethers.formatUnits(r,t)}set provider(r){this._provider=new h.BrowserProvider(r,"any"),this._originalProvider=r}get browserProvider(){if(!this._provider)throw new Error("browserProvider is not initialized");return this._provider}signTypedData(r,t){return g(this,null,function*(){var e;return yield(e=this.browserProvider)==null?void 0:e.send("eth_signTypedData_v4",[r,t])})}call(r,t,e,i){return g(this,null,function*(){let a=["approve"];if(this._originalProvider.agwWallet&&a.includes(t))try{return{hash:yield this._originalProvider.writeContract({abi:i.abi,address:r,functionName:t,args:e})}}catch(n){let c=(0,w.getParsedEthersError)(n);throw n.message.includes("rejected")?new Error({content:"REJECTED_TRANSACTION"}):c}let d=yield this.browserProvider.getSigner();return new h.ethers.Contract(r,i.abi,d)[t].apply(null,e).catch(n=>{throw(0,w.getParsedEthersError)(n)})})}send(r,t){return this.browserProvider.send(r,t)}sendTransaction(r,t,e,i){return g(this,null,function*(){var c;let a=yield(c=this.browserProvider)==null?void 0:c.getSigner();if(!a)throw new Error("singer is not exist");let s=new h.ethers.Contract(r,i.abi,this.browserProvider).interface.encodeFunctionData(t,e.data),n={from:e.from,to:e.to,data:s,value:e.value};try{return t==="depositTo"?yield this._originalProvider.sendTransaction({to:r,data:s,value:e.value}):yield a.sendTransaction(n)}catch(P){throw(0,w.getParsedEthersError)(P)}})}pollTransactionReceiptWithBackoff(r,t=1e3,e=6e3,i=30){return g(this,null,function*(){let a=t,d=0;for(;d<i;){try{let s=yield this.browserProvider.getTransactionReceipt(r);if(s)return s}catch(s){}yield new Promise(s=>setTimeout(s,a)),a=Math.min(a*2,e),d++}throw new Error("Transaction did not complete after maximum retries.")})}callOnChain(r,t,e,i,a){let d=new h.ethers.JsonRpcProvider(r.public_rpc_url);return new h.ethers.Contract(t,a.abi,d)[e].apply(null,i).catch(n=>{throw(0,w.getParsedEthersError)(n)})}getBalance(r){return this.browserProvider.getBalance(r).then(t=>t)}};0&&(module.exports={EthersProvider});
1
+ "use strict";var w=Object.defineProperty,_=Object.defineProperties,T=Object.getOwnPropertyDescriptor,x=Object.getOwnPropertyDescriptors,D=Object.getOwnPropertyNames,P=Object.getOwnPropertySymbols;var m=Object.prototype.hasOwnProperty,B=Object.prototype.propertyIsEnumerable;var v=(e,r,t)=>r in e?w(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,f=(e,r)=>{for(var t in r||(r={}))m.call(r,t)&&v(e,t,r[t]);if(P)for(var t of P(r))B.call(r,t)&&v(e,t,r[t]);return e},E=(e,r)=>_(e,x(r));var C=(e,r)=>{for(var t in r)w(e,t,{get:r[t],enumerable:!0})},R=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of D(r))!m.call(e,n)&&n!==t&&w(e,n,{get:()=>r[n],enumerable:!(i=T(r,n))||i.enumerable});return e};var W=e=>R(w({},"__esModule",{value:!0}),e);var l=(e,r,t)=>(v(e,typeof r!="symbol"?r+"":r,t),t);var p=(e,r,t)=>new Promise((i,n)=>{var a=o=>{try{s(t.next(o))}catch(d){n(d)}},c=o=>{try{s(t.throw(o))}catch(d){n(d)}},s=o=>o.done?i(o.value):Promise.resolve(o.value).then(a,c);s((t=t.apply(e,r)).next())});var S={};C(S,{EthersProvider:()=>u});module.exports=W(S);var g=require("ethers");var y=require("ethers-decode-error");var U=y.ErrorDecoder.create();function h(e){return p(this,null,function*(){var i;let r=yield U.decode(e),t=(i=r.reason)!=null?i:"";return console.error("parsedError",r),E(f({},r),{message:I(t)})})}function I(e){let r=["ethers-user-denied: ","ethers-unsupported: "];if(typeof e!="string")return e;for(let t of r)if(e.startsWith(t))return e.replace(t,"");return e}var u=class{constructor(){l(this,"_provider");l(this,"_originalProvider")}parseUnits(r,t){return g.ethers.parseUnits(r,t).toString()}formatUnits(r,t){return g.ethers.formatUnits(r,t)}set provider(r){this._provider=new g.BrowserProvider(r,"any"),this._originalProvider=r}get browserProvider(){if(!this._provider)throw new Error("browserProvider is not initialized");return this._provider}signTypedData(r,t){return p(this,null,function*(){var i;return yield(i=this.browserProvider)==null?void 0:i.send("eth_signTypedData_v4",[r,t])})}call(r,t,i,n){return p(this,null,function*(){let a=["approve"];if(this._originalProvider.agwWallet&&a.includes(t))try{return{hash:yield this._originalProvider.writeContract({abi:n.abi,address:r,functionName:t,args:i})}}catch(o){throw yield h(o)}let c=yield this.browserProvider.getSigner();return new g.ethers.Contract(r,n.abi,c)[t].apply(null,i).catch(o=>p(this,null,function*(){throw yield h(o)}))})}send(r,t){return this.browserProvider.send(r,t)}sendTransaction(r,t,i,n){return p(this,null,function*(){var d;let a=yield(d=this.browserProvider)==null?void 0:d.getSigner();if(!a)throw new Error("singer is not exist");let s=new g.ethers.Contract(r,n.abi,this.browserProvider).interface.encodeFunctionData(t,i.data),o={from:i.from,to:i.to,data:s,value:i.value};try{return t==="depositTo"?yield this._originalProvider.sendTransaction({to:r,data:s,value:i.value}):yield a.sendTransaction(o)}catch(b){throw yield h(b)}})}pollTransactionReceiptWithBackoff(r,t=1e3,i=6e3,n=30){return p(this,null,function*(){let a=t,c=0;for(;c<n;){try{let s=yield this.browserProvider.getTransactionReceipt(r);if(s)return s}catch(s){}yield new Promise(s=>setTimeout(s,a)),a=Math.min(a*2,i),c++}throw new Error("Transaction did not complete after maximum retries.")})}callOnChain(r,t,i,n,a){let c=new g.ethers.JsonRpcProvider(r.public_rpc_url);return new g.ethers.Contract(t,a.abi,c)[i].apply(null,n).catch(o=>p(this,null,function*(){throw yield h(o)}))}getBalance(r){return this.browserProvider.getBalance(r).then(t=>t)}};0&&(module.exports={EthersProvider});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/ethersProvider.ts"],"sourcesContent":["export { EthersProvider } from \"./ethersProvider\";\n","import {\n EthersError,\n getParsedEthersError,\n} from \"@enzoferey/ethers-error-parser\";\nimport { BrowserProvider, Eip1193Provider, ethers } from \"ethers\";\nimport { Web3Provider } from \"@orderly.network/default-evm-adapter\";\nimport { API } from \"@orderly.network/types\";\n\nclass EthersProvider implements Web3Provider {\n private _provider!: BrowserProvider;\n private _originalProvider!: Eip1193Provider;\n\n parseUnits(amount: string, decimals?: number): string {\n return ethers.parseUnits(amount, decimals).toString();\n }\n\n formatUnits(amount: string, decimals?: number): string {\n return ethers.formatUnits(amount, decimals);\n }\n\n set provider(provider: Eip1193Provider) {\n this._provider = new BrowserProvider(provider, \"any\");\n this._originalProvider = provider;\n }\n\n get browserProvider(): BrowserProvider {\n if (!this._provider) {\n throw new Error(\"browserProvider is not initialized\");\n }\n return this._provider;\n }\n\n async signTypedData(\n address: string,\n toSignatureMessage: any,\n ): Promise<string> {\n return await this.browserProvider?.send(\"eth_signTypedData_v4\", [\n address,\n toSignatureMessage,\n ]);\n }\n\n async call(\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const writeMethod: string[] = [\"approve\"];\n // @ts-ignore\n if (this._originalProvider.agwWallet && writeMethod.includes(method)) {\n try {\n // @ts-ignore\n const transactionHash = await this._originalProvider.writeContract({\n abi: options.abi,\n address: address,\n functionName: method,\n args: params,\n });\n\n return {\n hash: transactionHash,\n };\n } catch (error) {\n const parsedEthersError = getParsedEthersError(error as EthersError);\n if ((error as any).message.includes(\"rejected\")) {\n // @ts-ignore\n throw new Error({ content: \"REJECTED_TRANSACTION\" });\n }\n throw parsedEthersError;\n }\n }\n const singer = await this.browserProvider.getSigner();\n const contract = new ethers.Contract(address, options.abi, singer);\n\n return contract[method].apply(null, params).catch((error) => {\n const parsedEthersError = getParsedEthersError(error);\n\n throw parsedEthersError;\n });\n }\n\n send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n return this.browserProvider.send(method, params);\n }\n\n async sendTransaction(\n contractAddress: string,\n method: string,\n payload: { from: string; to?: string; data: any[]; value?: bigint },\n options: { abi: any },\n ): Promise<any> {\n const singer = await this.browserProvider?.getSigner();\n if (!singer) {\n throw new Error(\"singer is not exist\");\n }\n\n const contract = new ethers.Contract(\n contractAddress,\n options.abi,\n this.browserProvider,\n );\n\n // contract.interface.getAbiCoder().encode(tx.data);\n const encodeFunctionData = contract.interface.encodeFunctionData(\n method,\n payload.data,\n );\n\n const tx: ethers.TransactionRequest = {\n from: payload.from,\n to: payload.to,\n data: encodeFunctionData,\n value: payload.value,\n };\n\n try {\n // for agw wallet\n if (method === \"depositTo\") {\n // @ts-ignore\n return await this._originalProvider.sendTransaction({\n to: contractAddress,\n data: encodeFunctionData,\n value: payload.value,\n });\n }\n return await singer.sendTransaction(tx);\n } catch (error) {\n const parsedEthersError = getParsedEthersError(error as EthersError);\n\n throw parsedEthersError;\n }\n }\n\n async pollTransactionReceiptWithBackoff(\n txHash: string,\n baseInterval = 1000,\n maxInterval = 6000,\n maxRetries = 30,\n ) {\n let interval = baseInterval;\n let retries = 0;\n\n while (retries < maxRetries) {\n try {\n const receipt =\n await this.browserProvider!.getTransactionReceipt(txHash);\n if (receipt) {\n // completed, get receipt\n return receipt;\n }\n } catch (error) {\n // waiting\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n\n interval = Math.min(interval * 2, maxInterval);\n retries++;\n }\n\n throw new Error(\"Transaction did not complete after maximum retries.\");\n }\n\n callOnChain(\n chain: API.NetworkInfos,\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const provider = new ethers.JsonRpcProvider(chain.public_rpc_url);\n\n const contract = new ethers.Contract(address, options.abi, provider);\n\n return contract[method].apply(null, params).catch((error) => {\n const parsedEthersError = getParsedEthersError(error);\n\n throw parsedEthersError;\n });\n }\n\n getBalance(userAddress: string): Promise<bigint> {\n return this.browserProvider!.getBalance(userAddress).then((res) => {\n return res;\n });\n }\n}\n\nexport { EthersProvider };\n"],"mappings":"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","names":["src_exports","__export","EthersProvider","__toCommonJS","import_ethers_error_parser","import_ethers","EthersProvider","__publicField","amount","decimals","provider","address","toSignatureMessage","__async","_a","method","params","options","writeMethod","error","parsedEthersError","singer","contractAddress","payload","encodeFunctionData","tx","txHash","baseInterval","maxInterval","maxRetries","interval","retries","receipt","resolve","chain","userAddress","res"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/ethersProvider.ts","../src/parseError.ts"],"sourcesContent":["export { EthersProvider } from \"./ethersProvider\";\n","import { BrowserProvider, Eip1193Provider, ethers } from \"ethers\";\nimport { Web3Provider } from \"@orderly.network/default-evm-adapter\";\nimport { API } from \"@orderly.network/types\";\nimport { parseError } from \"./parseError\";\n\nclass EthersProvider implements Web3Provider {\n private _provider!: BrowserProvider;\n private _originalProvider!: Eip1193Provider;\n\n parseUnits(amount: string, decimals?: number): string {\n return ethers.parseUnits(amount, decimals).toString();\n }\n\n formatUnits(amount: string, decimals?: number): string {\n return ethers.formatUnits(amount, decimals);\n }\n\n set provider(provider: Eip1193Provider) {\n this._provider = new BrowserProvider(provider, \"any\");\n this._originalProvider = provider;\n }\n\n get browserProvider(): BrowserProvider {\n if (!this._provider) {\n throw new Error(\"browserProvider is not initialized\");\n }\n return this._provider;\n }\n\n async signTypedData(\n address: string,\n toSignatureMessage: any,\n ): Promise<string> {\n return await this.browserProvider?.send(\"eth_signTypedData_v4\", [\n address,\n toSignatureMessage,\n ]);\n }\n\n async call(\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const writeMethod: string[] = [\"approve\"];\n // @ts-ignore\n if (this._originalProvider.agwWallet && writeMethod.includes(method)) {\n try {\n // @ts-ignore\n const transactionHash = await this._originalProvider.writeContract({\n abi: options.abi,\n address: address,\n functionName: method,\n args: params,\n });\n\n return {\n hash: transactionHash,\n };\n } catch (error) {\n // const parsedEthersError = getParsedEthersError(error as EthersError);\n // if ((error as any).message.includes(\"rejected\")) {\n // // @ts-ignore\n // throw new Error({ content: \"REJECTED_TRANSACTION\" });\n // }\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n }\n }\n const singer = await this.browserProvider.getSigner();\n const contract = new ethers.Contract(address, options.abi, singer);\n\n return contract[method].apply(null, params).catch(async (error) => {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n });\n }\n\n send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n return this.browserProvider.send(method, params);\n }\n\n async sendTransaction(\n contractAddress: string,\n method: string,\n payload: { from: string; to?: string; data: any[]; value?: bigint },\n options: { abi: any },\n ): Promise<any> {\n const singer = await this.browserProvider?.getSigner();\n if (!singer) {\n throw new Error(\"singer is not exist\");\n }\n\n const contract = new ethers.Contract(\n contractAddress,\n options.abi,\n this.browserProvider,\n );\n\n // contract.interface.getAbiCoder().encode(tx.data);\n const encodeFunctionData = contract.interface.encodeFunctionData(\n method,\n payload.data,\n );\n\n const tx: ethers.TransactionRequest = {\n from: payload.from,\n to: payload.to,\n data: encodeFunctionData,\n value: payload.value,\n };\n\n try {\n // for agw wallet\n if (method === \"depositTo\") {\n // @ts-ignore\n return await this._originalProvider.sendTransaction({\n to: contractAddress,\n data: encodeFunctionData,\n value: payload.value,\n });\n }\n return await singer.sendTransaction(tx);\n } catch (error) {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n }\n }\n\n async pollTransactionReceiptWithBackoff(\n txHash: string,\n baseInterval = 1000,\n maxInterval = 6000,\n maxRetries = 30,\n ) {\n let interval = baseInterval;\n let retries = 0;\n\n while (retries < maxRetries) {\n try {\n const receipt =\n await this.browserProvider!.getTransactionReceipt(txHash);\n if (receipt) {\n // completed, get receipt\n return receipt;\n }\n } catch (error) {\n // waiting\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n\n interval = Math.min(interval * 2, maxInterval);\n retries++;\n }\n\n throw new Error(\"Transaction did not complete after maximum retries.\");\n }\n\n callOnChain(\n chain: API.NetworkInfos,\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const provider = new ethers.JsonRpcProvider(chain.public_rpc_url);\n\n const contract = new ethers.Contract(address, options.abi, provider);\n\n return contract[method].apply(null, params).catch(async (error) => {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n });\n }\n\n getBalance(userAddress: string): Promise<bigint> {\n return this.browserProvider!.getBalance(userAddress).then((res) => {\n return res;\n });\n }\n}\n\nexport { EthersProvider };\n","import { DecodedError, ErrorDecoder } from \"ethers-decode-error\";\n\nconst errorDecoder = ErrorDecoder.create();\n\ntype ParsedError = DecodedError & {\n message: string;\n};\n\nexport async function parseError(rawError: any): Promise<ParsedError> {\n const error: DecodedError = await errorDecoder.decode(rawError);\n const reason = error.reason ?? \"\";\n console.error(\"parsedError\", error);\n\n return {\n ...error,\n message: replacePrefix(reason),\n };\n}\n\nfunction replacePrefix(reason: string) {\n const prefixes = [\"ethers-user-denied: \", \"ethers-unsupported: \"];\n\n if (typeof reason !== \"string\") {\n return reason;\n }\n\n for (const prefix of prefixes) {\n if (reason.startsWith(prefix)) {\n return reason.replace(prefix, \"\");\n }\n }\n\n return reason;\n}\n"],"mappings":"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","names":["src_exports","__export","EthersProvider","__toCommonJS","import_ethers","import_ethers_decode_error","errorDecoder","parseError","rawError","__async","_a","error","reason","__spreadProps","__spreadValues","replacePrefix","prefixes","prefix","EthersProvider","__publicField","amount","decimals","provider","address","toSignatureMessage","__async","_a","method","params","options","writeMethod","error","parseError","singer","contractAddress","payload","encodeFunctionData","tx","txHash","baseInterval","maxInterval","maxRetries","interval","retries","receipt","resolve","chain","userAddress","res"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var P=Object.defineProperty;var u=(d,r,t)=>r in d?P(d,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):d[r]=t;var v=(d,r,t)=>(u(d,typeof r!="symbol"?r+"":r,t),t);var g=(d,r,t)=>new Promise((e,s)=>{var o=i=>{try{n(t.next(i))}catch(a){s(a)}},c=i=>{try{n(t.throw(i))}catch(a){s(a)}},n=i=>i.done?e(i.value):Promise.resolve(i.value).then(o,c);n((t=t.apply(d,r)).next())});import{getParsedEthersError as w}from"@enzoferey/ethers-error-parser";import{BrowserProvider as E,ethers as h}from"ethers";var p=class{constructor(){v(this,"_provider");v(this,"_originalProvider")}parseUnits(r,t){return h.parseUnits(r,t).toString()}formatUnits(r,t){return h.formatUnits(r,t)}set provider(r){this._provider=new E(r,"any"),this._originalProvider=r}get browserProvider(){if(!this._provider)throw new Error("browserProvider is not initialized");return this._provider}signTypedData(r,t){return g(this,null,function*(){var e;return yield(e=this.browserProvider)==null?void 0:e.send("eth_signTypedData_v4",[r,t])})}call(r,t,e,s){return g(this,null,function*(){let o=["approve"];if(this._originalProvider.agwWallet&&o.includes(t))try{return{hash:yield this._originalProvider.writeContract({abi:s.abi,address:r,functionName:t,args:e})}}catch(i){let a=w(i);throw i.message.includes("rejected")?new Error({content:"REJECTED_TRANSACTION"}):a}let c=yield this.browserProvider.getSigner();return new h.Contract(r,s.abi,c)[t].apply(null,e).catch(i=>{throw w(i)})})}send(r,t){return this.browserProvider.send(r,t)}sendTransaction(r,t,e,s){return g(this,null,function*(){var a;let o=yield(a=this.browserProvider)==null?void 0:a.getSigner();if(!o)throw new Error("singer is not exist");let n=new h.Contract(r,s.abi,this.browserProvider).interface.encodeFunctionData(t,e.data),i={from:e.from,to:e.to,data:n,value:e.value};try{return t==="depositTo"?yield this._originalProvider.sendTransaction({to:r,data:n,value:e.value}):yield o.sendTransaction(i)}catch(l){throw w(l)}})}pollTransactionReceiptWithBackoff(r,t=1e3,e=6e3,s=30){return g(this,null,function*(){let o=t,c=0;for(;c<s;){try{let n=yield this.browserProvider.getTransactionReceipt(r);if(n)return n}catch(n){}yield new Promise(n=>setTimeout(n,o)),o=Math.min(o*2,e),c++}throw new Error("Transaction did not complete after maximum retries.")})}callOnChain(r,t,e,s,o){let c=new h.JsonRpcProvider(r.public_rpc_url);return new h.Contract(t,o.abi,c)[e].apply(null,s).catch(i=>{throw w(i)})}getBalance(r){return this.browserProvider.getBalance(r).then(t=>t)}};export{p as EthersProvider};
1
+ var E=Object.defineProperty,y=Object.defineProperties;var b=Object.getOwnPropertyDescriptors;var l=Object.getOwnPropertySymbols;var _=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable;var w=(e,r,t)=>r in e?E(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,P=(e,r)=>{for(var t in r||(r={}))_.call(r,t)&&w(e,t,r[t]);if(l)for(var t of l(r))T.call(r,t)&&w(e,t,r[t]);return e},m=(e,r)=>y(e,b(r));var u=(e,r,t)=>(w(e,typeof r!="symbol"?r+"":r,t),t);var p=(e,r,t)=>new Promise((i,a)=>{var s=n=>{try{o(t.next(n))}catch(d){a(d)}},c=n=>{try{o(t.throw(n))}catch(d){a(d)}},o=n=>n.done?i(n.value):Promise.resolve(n.value).then(s,c);o((t=t.apply(e,r)).next())});import{BrowserProvider as C,ethers as g}from"ethers";import{ErrorDecoder as x}from"ethers-decode-error";var D=x.create();function h(e){return p(this,null,function*(){var i;let r=yield D.decode(e),t=(i=r.reason)!=null?i:"";return console.error("parsedError",r),m(P({},r),{message:B(t)})})}function B(e){let r=["ethers-user-denied: ","ethers-unsupported: "];if(typeof e!="string")return e;for(let t of r)if(e.startsWith(t))return e.replace(t,"");return e}var v=class{constructor(){u(this,"_provider");u(this,"_originalProvider")}parseUnits(r,t){return g.parseUnits(r,t).toString()}formatUnits(r,t){return g.formatUnits(r,t)}set provider(r){this._provider=new C(r,"any"),this._originalProvider=r}get browserProvider(){if(!this._provider)throw new Error("browserProvider is not initialized");return this._provider}signTypedData(r,t){return p(this,null,function*(){var i;return yield(i=this.browserProvider)==null?void 0:i.send("eth_signTypedData_v4",[r,t])})}call(r,t,i,a){return p(this,null,function*(){let s=["approve"];if(this._originalProvider.agwWallet&&s.includes(t))try{return{hash:yield this._originalProvider.writeContract({abi:a.abi,address:r,functionName:t,args:i})}}catch(n){throw yield h(n)}let c=yield this.browserProvider.getSigner();return new g.Contract(r,a.abi,c)[t].apply(null,i).catch(n=>p(this,null,function*(){throw yield h(n)}))})}send(r,t){return this.browserProvider.send(r,t)}sendTransaction(r,t,i,a){return p(this,null,function*(){var d;let s=yield(d=this.browserProvider)==null?void 0:d.getSigner();if(!s)throw new Error("singer is not exist");let o=new g.Contract(r,a.abi,this.browserProvider).interface.encodeFunctionData(t,i.data),n={from:i.from,to:i.to,data:o,value:i.value};try{return t==="depositTo"?yield this._originalProvider.sendTransaction({to:r,data:o,value:i.value}):yield s.sendTransaction(n)}catch(f){throw yield h(f)}})}pollTransactionReceiptWithBackoff(r,t=1e3,i=6e3,a=30){return p(this,null,function*(){let s=t,c=0;for(;c<a;){try{let o=yield this.browserProvider.getTransactionReceipt(r);if(o)return o}catch(o){}yield new Promise(o=>setTimeout(o,s)),s=Math.min(s*2,i),c++}throw new Error("Transaction did not complete after maximum retries.")})}callOnChain(r,t,i,a,s){let c=new g.JsonRpcProvider(r.public_rpc_url);return new g.Contract(t,s.abi,c)[i].apply(null,a).catch(n=>p(this,null,function*(){throw yield h(n)}))}getBalance(r){return this.browserProvider.getBalance(r).then(t=>t)}};export{v as EthersProvider};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ethersProvider.ts"],"sourcesContent":["import {\n EthersError,\n getParsedEthersError,\n} from \"@enzoferey/ethers-error-parser\";\nimport { BrowserProvider, Eip1193Provider, ethers } from \"ethers\";\nimport { Web3Provider } from \"@orderly.network/default-evm-adapter\";\nimport { API } from \"@orderly.network/types\";\n\nclass EthersProvider implements Web3Provider {\n private _provider!: BrowserProvider;\n private _originalProvider!: Eip1193Provider;\n\n parseUnits(amount: string, decimals?: number): string {\n return ethers.parseUnits(amount, decimals).toString();\n }\n\n formatUnits(amount: string, decimals?: number): string {\n return ethers.formatUnits(amount, decimals);\n }\n\n set provider(provider: Eip1193Provider) {\n this._provider = new BrowserProvider(provider, \"any\");\n this._originalProvider = provider;\n }\n\n get browserProvider(): BrowserProvider {\n if (!this._provider) {\n throw new Error(\"browserProvider is not initialized\");\n }\n return this._provider;\n }\n\n async signTypedData(\n address: string,\n toSignatureMessage: any,\n ): Promise<string> {\n return await this.browserProvider?.send(\"eth_signTypedData_v4\", [\n address,\n toSignatureMessage,\n ]);\n }\n\n async call(\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const writeMethod: string[] = [\"approve\"];\n // @ts-ignore\n if (this._originalProvider.agwWallet && writeMethod.includes(method)) {\n try {\n // @ts-ignore\n const transactionHash = await this._originalProvider.writeContract({\n abi: options.abi,\n address: address,\n functionName: method,\n args: params,\n });\n\n return {\n hash: transactionHash,\n };\n } catch (error) {\n const parsedEthersError = getParsedEthersError(error as EthersError);\n if ((error as any).message.includes(\"rejected\")) {\n // @ts-ignore\n throw new Error({ content: \"REJECTED_TRANSACTION\" });\n }\n throw parsedEthersError;\n }\n }\n const singer = await this.browserProvider.getSigner();\n const contract = new ethers.Contract(address, options.abi, singer);\n\n return contract[method].apply(null, params).catch((error) => {\n const parsedEthersError = getParsedEthersError(error);\n\n throw parsedEthersError;\n });\n }\n\n send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n return this.browserProvider.send(method, params);\n }\n\n async sendTransaction(\n contractAddress: string,\n method: string,\n payload: { from: string; to?: string; data: any[]; value?: bigint },\n options: { abi: any },\n ): Promise<any> {\n const singer = await this.browserProvider?.getSigner();\n if (!singer) {\n throw new Error(\"singer is not exist\");\n }\n\n const contract = new ethers.Contract(\n contractAddress,\n options.abi,\n this.browserProvider,\n );\n\n // contract.interface.getAbiCoder().encode(tx.data);\n const encodeFunctionData = contract.interface.encodeFunctionData(\n method,\n payload.data,\n );\n\n const tx: ethers.TransactionRequest = {\n from: payload.from,\n to: payload.to,\n data: encodeFunctionData,\n value: payload.value,\n };\n\n try {\n // for agw wallet\n if (method === \"depositTo\") {\n // @ts-ignore\n return await this._originalProvider.sendTransaction({\n to: contractAddress,\n data: encodeFunctionData,\n value: payload.value,\n });\n }\n return await singer.sendTransaction(tx);\n } catch (error) {\n const parsedEthersError = getParsedEthersError(error as EthersError);\n\n throw parsedEthersError;\n }\n }\n\n async pollTransactionReceiptWithBackoff(\n txHash: string,\n baseInterval = 1000,\n maxInterval = 6000,\n maxRetries = 30,\n ) {\n let interval = baseInterval;\n let retries = 0;\n\n while (retries < maxRetries) {\n try {\n const receipt =\n await this.browserProvider!.getTransactionReceipt(txHash);\n if (receipt) {\n // completed, get receipt\n return receipt;\n }\n } catch (error) {\n // waiting\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n\n interval = Math.min(interval * 2, maxInterval);\n retries++;\n }\n\n throw new Error(\"Transaction did not complete after maximum retries.\");\n }\n\n callOnChain(\n chain: API.NetworkInfos,\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const provider = new ethers.JsonRpcProvider(chain.public_rpc_url);\n\n const contract = new ethers.Contract(address, options.abi, provider);\n\n return contract[method].apply(null, params).catch((error) => {\n const parsedEthersError = getParsedEthersError(error);\n\n throw parsedEthersError;\n });\n }\n\n getBalance(userAddress: string): Promise<bigint> {\n return this.browserProvider!.getBalance(userAddress).then((res) => {\n return res;\n });\n }\n}\n\nexport { EthersProvider };\n"],"mappings":"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","names":["getParsedEthersError","BrowserProvider","ethers","EthersProvider","__publicField","amount","decimals","ethers","provider","BrowserProvider","address","toSignatureMessage","__async","_a","method","params","options","writeMethod","error","parsedEthersError","getParsedEthersError","singer","contractAddress","payload","encodeFunctionData","tx","txHash","baseInterval","maxInterval","maxRetries","interval","retries","receipt","resolve","chain","userAddress","res"]}
1
+ {"version":3,"sources":["../src/ethersProvider.ts","../src/parseError.ts"],"sourcesContent":["import { BrowserProvider, Eip1193Provider, ethers } from \"ethers\";\nimport { Web3Provider } from \"@orderly.network/default-evm-adapter\";\nimport { API } from \"@orderly.network/types\";\nimport { parseError } from \"./parseError\";\n\nclass EthersProvider implements Web3Provider {\n private _provider!: BrowserProvider;\n private _originalProvider!: Eip1193Provider;\n\n parseUnits(amount: string, decimals?: number): string {\n return ethers.parseUnits(amount, decimals).toString();\n }\n\n formatUnits(amount: string, decimals?: number): string {\n return ethers.formatUnits(amount, decimals);\n }\n\n set provider(provider: Eip1193Provider) {\n this._provider = new BrowserProvider(provider, \"any\");\n this._originalProvider = provider;\n }\n\n get browserProvider(): BrowserProvider {\n if (!this._provider) {\n throw new Error(\"browserProvider is not initialized\");\n }\n return this._provider;\n }\n\n async signTypedData(\n address: string,\n toSignatureMessage: any,\n ): Promise<string> {\n return await this.browserProvider?.send(\"eth_signTypedData_v4\", [\n address,\n toSignatureMessage,\n ]);\n }\n\n async call(\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const writeMethod: string[] = [\"approve\"];\n // @ts-ignore\n if (this._originalProvider.agwWallet && writeMethod.includes(method)) {\n try {\n // @ts-ignore\n const transactionHash = await this._originalProvider.writeContract({\n abi: options.abi,\n address: address,\n functionName: method,\n args: params,\n });\n\n return {\n hash: transactionHash,\n };\n } catch (error) {\n // const parsedEthersError = getParsedEthersError(error as EthersError);\n // if ((error as any).message.includes(\"rejected\")) {\n // // @ts-ignore\n // throw new Error({ content: \"REJECTED_TRANSACTION\" });\n // }\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n }\n }\n const singer = await this.browserProvider.getSigner();\n const contract = new ethers.Contract(address, options.abi, singer);\n\n return contract[method].apply(null, params).catch(async (error) => {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n });\n }\n\n send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n return this.browserProvider.send(method, params);\n }\n\n async sendTransaction(\n contractAddress: string,\n method: string,\n payload: { from: string; to?: string; data: any[]; value?: bigint },\n options: { abi: any },\n ): Promise<any> {\n const singer = await this.browserProvider?.getSigner();\n if (!singer) {\n throw new Error(\"singer is not exist\");\n }\n\n const contract = new ethers.Contract(\n contractAddress,\n options.abi,\n this.browserProvider,\n );\n\n // contract.interface.getAbiCoder().encode(tx.data);\n const encodeFunctionData = contract.interface.encodeFunctionData(\n method,\n payload.data,\n );\n\n const tx: ethers.TransactionRequest = {\n from: payload.from,\n to: payload.to,\n data: encodeFunctionData,\n value: payload.value,\n };\n\n try {\n // for agw wallet\n if (method === \"depositTo\") {\n // @ts-ignore\n return await this._originalProvider.sendTransaction({\n to: contractAddress,\n data: encodeFunctionData,\n value: payload.value,\n });\n }\n return await singer.sendTransaction(tx);\n } catch (error) {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n }\n }\n\n async pollTransactionReceiptWithBackoff(\n txHash: string,\n baseInterval = 1000,\n maxInterval = 6000,\n maxRetries = 30,\n ) {\n let interval = baseInterval;\n let retries = 0;\n\n while (retries < maxRetries) {\n try {\n const receipt =\n await this.browserProvider!.getTransactionReceipt(txHash);\n if (receipt) {\n // completed, get receipt\n return receipt;\n }\n } catch (error) {\n // waiting\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n\n interval = Math.min(interval * 2, maxInterval);\n retries++;\n }\n\n throw new Error(\"Transaction did not complete after maximum retries.\");\n }\n\n callOnChain(\n chain: API.NetworkInfos,\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n const provider = new ethers.JsonRpcProvider(chain.public_rpc_url);\n\n const contract = new ethers.Contract(address, options.abi, provider);\n\n return contract[method].apply(null, params).catch(async (error) => {\n const parsedEthersError = await parseError(error);\n throw parsedEthersError;\n });\n }\n\n getBalance(userAddress: string): Promise<bigint> {\n return this.browserProvider!.getBalance(userAddress).then((res) => {\n return res;\n });\n }\n}\n\nexport { EthersProvider };\n","import { DecodedError, ErrorDecoder } from \"ethers-decode-error\";\n\nconst errorDecoder = ErrorDecoder.create();\n\ntype ParsedError = DecodedError & {\n message: string;\n};\n\nexport async function parseError(rawError: any): Promise<ParsedError> {\n const error: DecodedError = await errorDecoder.decode(rawError);\n const reason = error.reason ?? \"\";\n console.error(\"parsedError\", error);\n\n return {\n ...error,\n message: replacePrefix(reason),\n };\n}\n\nfunction replacePrefix(reason: string) {\n const prefixes = [\"ethers-user-denied: \", \"ethers-unsupported: \"];\n\n if (typeof reason !== \"string\") {\n return reason;\n }\n\n for (const prefix of prefixes) {\n if (reason.startsWith(prefix)) {\n return reason.replace(prefix, \"\");\n }\n }\n\n return reason;\n}\n"],"mappings":"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","names":["BrowserProvider","ethers","ErrorDecoder","errorDecoder","ErrorDecoder","parseError","rawError","__async","_a","error","reason","__spreadProps","__spreadValues","replacePrefix","prefixes","prefix","EthersProvider","__publicField","amount","decimals","ethers","provider","BrowserProvider","address","toSignatureMessage","__async","_a","method","params","options","writeMethod","error","parseError","singer","contractAddress","payload","encodeFunctionData","tx","txHash","baseInterval","maxInterval","maxRetries","interval","retries","receipt","resolve","chain","userAddress","res"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderly.network/web3-provider-ethers",
3
- "version": "2.5.3",
3
+ "version": "2.6.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -13,16 +13,16 @@
13
13
  "access": "public"
14
14
  },
15
15
  "dependencies": {
16
- "@enzoferey/ethers-error-parser": "^0.2.3",
17
- "ethers": "^6.13.2",
18
- "@orderly.network/default-evm-adapter": "2.5.3",
19
- "@orderly.network/types": "2.5.3"
16
+ "ethers": "^6.15.0",
17
+ "ethers-decode-error": "^2.1.3",
18
+ "@orderly.network/default-evm-adapter": "2.6.0",
19
+ "@orderly.network/types": "2.6.0"
20
20
  },
21
21
  "devDependencies": {
22
22
  "jest": "^29.7.0",
23
23
  "tsup": "^7.1.0",
24
24
  "typescript": "^5.1.6",
25
- "tsconfig": "0.8.3"
25
+ "tsconfig": "0.9.0"
26
26
  },
27
27
  "scripts": {
28
28
  "build": "tsup",