@cowprotocol/permit-utils 0.3.1 → 0.6.1-RC.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/README.md +3 -3
- package/index.cjs +1 -1
- package/index.js +63 -62
- package/lib/checkIsCallDataAValidPermit.d.ts +1 -1
- package/package.json +1 -1
- package/types.d.ts +3 -3
- package/utils/buildPermitCallData.d.ts +3 -3
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ const hookData = await generatePermitHook({
|
|
|
43
43
|
spender,
|
|
44
44
|
provider,
|
|
45
45
|
permitInfo,
|
|
46
|
-
|
|
46
|
+
eip2612Utils,
|
|
47
47
|
account,
|
|
48
48
|
nonce
|
|
49
49
|
})
|
|
@@ -57,7 +57,7 @@ import { checkIsCallDataAValidPermit } from "@cowprotocol/permit-utils"
|
|
|
57
57
|
const isCallDataAValidPermit = await checkIsCallDataAValidPermit(
|
|
58
58
|
account,
|
|
59
59
|
chainId,
|
|
60
|
-
eip2612Utils,
|
|
60
|
+
eip2612Utils,
|
|
61
61
|
tokenAddress,
|
|
62
62
|
tokenName,
|
|
63
63
|
callData,
|
|
@@ -97,7 +97,7 @@ if (!permitInfo) {
|
|
|
97
97
|
const eip2612Utils = getPermitUtilsInstance(chainId, provider, account)
|
|
98
98
|
|
|
99
99
|
// Need to know what the current permit nonce is
|
|
100
|
-
const nonce = await
|
|
100
|
+
const nonce = await eip2612Utils.getTokenNonce(inputToken.address, account)
|
|
101
101
|
|
|
102
102
|
// Calling this fn should trigger the signature in the user's wallet
|
|
103
103
|
const hookData = await generatePermitHook({
|
package/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const O=require("@ethersproject/constants"),F=require("@ethersproject/wallet"),p=require("@1inch/permit-signed-approvals-utils"),E=require("@ethersproject/abi"),x=require("@ethersproject/bignumber"),G=require("@ethersproject/contracts"),A=require("@ethersproject/address"),q="0x68012a4467ce455b6b278b1a6815db9b7224deaa6bced68c3848ec21e6380f8a",I=new F.Wallet(q),v=55e3,h="80000",S=O.MaxUint256.toString(),V=157788e6;async function B(n,t,e,a,r,i,{version:o,type:l,name:d}){const s=d||r;if(l==="unsupported")return!1;if(!s)throw new Error(`No token name for ${a}`);const m={chainId:t,tokenName:s,tokenAddress:a,callData:i,version:o};let u;if(i.startsWith(p.EIP_2612_PERMIT_SELECTOR)?u=e.recoverPermitOwnerFromCallData({...m,callData:i.replace(p.EIP_2612_PERMIT_SELECTOR,"0x")}):i.startsWith(p.DAI_PERMIT_SELECTOR)&&(u=e.recoverDaiLikePermitOwnerFromCallData({...m,callData:i.replace(p.DAI_PERMIT_SELECTOR,"0x")})),!!u)try{return(await u).toLowerCase()===n.toLowerCase()}catch(f){return console.debug(`[checkHasValidPendingPermit] Failed to check permit validity for owner ${n} with callData ${i}`,f),!1}}async function L({eip2612Utils:n,callDataParams:t}){const[e,a,r,...i]=t;return(await n.buildPermitCallData(e,a,r,...i)).replace("0x",p.EIP_2612_PERMIT_SELECTOR)}async function R({eip2612Utils:n,callDataParams:t}){return(await n.buildDaiLikePermitCallData(...t)).replace("0x",p.DAI_PERMIT_SELECTOR)}function b(){return Math.ceil((Date.now()+V)/1e3)}function $(n){return!!n&&n.type!=="unsupported"}const K="1db4bacb661a90fb6b475fd5b585acba9745bc373573c65ecc3e8f5bfd5dee1f",T={};async function j(n){const t=Y(n),e=T[t];if(e)return await e;const a=W(n).catch(r=>{console.debug("[generatePermitHook] cached request failed",r)}).finally(()=>{delete T[t]});return T[t]=a,a}async function W(n){const{inputToken:t,spender:e,chainId:a,permitInfo:r,provider:i,account:o,eip2612Utils:l,nonce:d}=n,s=t.address,m=r.name||t.name;if(!$(r))throw new Error(`Trying to generate permit hook for unsupported token: ${s}`);if(!m)throw new Error(`No token name for token: ${s}`);const u=o||I.address,f=d===void 0?await l.getTokenNonce(s,u):d,c=b(),g=S,w=r.type==="eip-2612"?await L({eip2612Utils:l,callDataParams:[{owner:u,spender:e,value:g,nonce:f,deadline:c},a,m,s,r.version]}):await R({eip2612Utils:l,callDataParams:[{holder:u,spender:e,allowed:!0,value:g,nonce:f,expiry:c},a,m,s,r.version]}),H=await Q(w,u,s,i,!!o);return{target:s,callData:w,gasLimit:H,dappId:K}}async function Q(n,t,e,a,r){try{const i=await a.estimateGas({data:n,from:t,to:e}),o=r?i:i.add(i.div(10));return o.gt(h)?o.toString():h}catch(i){return console.debug("[calculatePermitGasLimit] Failed to estimateGas, using default",i),h}}function Y(n){const{inputToken:t,chainId:e,account:a}=n;return`${t.address.toLowerCase()}-${e}${a?`-${a.toLowerCase()}`:""}`}function P(n,t,e){return new G.Contract(n,t,e)}class z{constructor(t,e){this.provider=t,this.walletSigner=e}contractEncodeABI(t,e,a,r){return P(e||"",t,this.provider).interface.encodeFunctionData(a,r)}signTypedData(t,e,a){const r=Object.keys(e.types).reduce((o,l)=>(l!=="EIP712Domain"&&(o[l]=e.types[l]),o),{});return(this.walletSigner||this.provider.getSigner())._signTypedData(e.domain,r,e.message)}ethCall(t,e){return this.provider.call({to:t,data:e})}decodeABIParameter(t,e){return E.defaultAbiCoder.decode([t],e)[0]}decodeABIParameters(t,e){const a=E.defaultAbiCoder.decode(t,e);if(a&&typeof a=="object"){const r={};return Object.keys(a).forEach(i=>{const o=a[i];x.BigNumber.isBigNumber(o)?r[i]=o.toHexString():r[i]=o}),r}return a}}const k=new Map,C=new Map;function M(n,t,e){const a=k.get(n);if(!e&&a)return a;const r=`${n}-${e}`,i=C.get(r);if(i)return i;const o=new z(t,e?void 0:I),l=new p.Eip2612PermitUtils(o);return e?(console.log(`[getPermitUtilsInstance] Set cached provider utils for chain ${n}-${e}`,l),C.set(r,l)):(console.log(`[getPermitUtilsInstance] Set cached chain utils for chain ${n}`,l),k.set(n,l)),l}const N=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{inputs:[],name:"eip712Domain",outputs:[{internalType:"bytes1",name:"fields",type:"bytes1"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"version",type:"string"},{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"address",name:"verifyingContract",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"},{internalType:"uint256[]",name:"extensions",type:"uint256[]"}],stateMutability:"view",type:"function"}];async function J(n,t,e){const a=A.getAddress(n),i=await P(a,N,e).callStatic.eip712Domain();return X(i,t,n)}async function X(n,t,e){const{extensions:a,...r}=n;if(a.length>0)throw Error("Extensions not implemented");if(r.chainId&&t!==parseInt(r.chainId,16))throw Error(`ChainId mismatch. Received: '${r.chainId}', expected: '${t}'`);if(r.verifyingContract&&e.toLowerCase()!==r.verifyingContract.toLowerCase())throw Error(`Address mismatch. Received: '${r.verifyingContract}', expected: '${e}'`);return ee(r)}const Z=["name","version","chainId","verifyingContract","salt"];function ee(n){const t=parseInt(n.fields,16);return Z.reduce((e,a,r)=>(t&1<<r&&(e[a]=n[a]),e),{})}async function te(n,t,e){const a=A.getAddress(n);return P(a,N,e).callStatic.name()}const ne=[[{constant:!0,inputs:[],name:"version",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"}],[{constant:!0,inputs:[],name:"ERC712_VERSION",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"}]];async function U(n,t,e=0){const a=ne[e];if(!a)return"1";try{const i=P(n,a,t).interface.encodeFunctionData(a[0].name),o=await t.call({to:n,data:i});return o==="0x"||Number.isNaN(Number(o))?"1":o.startsWith("0x")?E.defaultAbiCoder.decode(["string"],o).toString():o}catch{return U(n,t,e+1)}}const re={value:S,nonce:0,deadline:b()},ae={allowed:!0,nonce:0,expiry:b()},_={},y={type:"unsupported"};async function ie(n){const{tokenAddress:t,chainId:e}=n,a=`${e}-${t.toLowerCase()}`,r=_[a];if(r)return r;const i=oe(n);return _[a]=i,i}async function oe(n){const{spender:t,tokenAddress:e,chainId:a,provider:r,minGasLimit:i}=n,o=M(a,r),l=I.address;let d;try{d=await J(e,a,r)}catch{console.debug(`[checkTokenIsPermittable] Couldn't fetch eip712domain for token ${e}`)}let s=d==null?void 0:d.name;try{s||(s=await te(e,a,r))}catch(c){if(/ETIMEDOUT/.test(c)&&!s)return{error:"Failed to fetch token name from contract. RPC connection error"};console.debug(`[checkTokenIsPermittable] Couldn't fetch token name from the contract for token ${e}, using provided '${s}'`,c)}if(!s)return{error:`Token name could not be determined for ${e}`};let m;try{m=await o.getTokenNonce(e,l)}catch(c){return c==="nonce not supported"||c.message==="nonce is NaN"?(console.debug(`[checkTokenIsPermittable] Not a permittable token ${e} - ${s}`,(c==null?void 0:c.message)||c),{...y,name:s}):(console.debug(`[checkTokenIsPermittable] Failed to get nonce for ${e} - ${s}`,c),{error:c.message||c.toString()})}let u=d==null?void 0:d.version;if(u===void 0)try{u=await U(e,r)}catch(c){console.debug(`[checkTokenIsPermittable] Failed to get version for ${e} - ${s}`,c)}const f={chainId:a,eip2612PermitUtils:o,nonce:m,spender:t,tokenAddress:e,tokenName:s,walletAddress:l,version:u,minGasLimit:i};try{return await D({...f,type:"eip-2612",provider:r})}catch(c){try{return await ce(e,o)?await D({...f,type:"dai-like",provider:r}):/invalid signature/.test(c)||(c==null?void 0:c.code)==="UNPREDICTABLE_GAS_LIMIT"?(console.debug(`[checkTokenIsPermittable] Token ${e} - ${s} might be permittable, but it's not supported for now. Reason:`,c==null?void 0:c.reason),{...y,name:s}):(console.debug(`[checkTokenIsPermittable] Failed to estimate eip-2612 permit for ${e} - ${s}`,c),{error:c.message||c.toString()})}catch(g){return console.debug(`[checkTokenIsPermittable] Failed to estimate dai-like permit for ${e} - ${s}`,g),{error:g.message||g.toString()}}}}async function D(n){const{provider:t,walletAddress:e,tokenAddress:a,tokenName:r,type:i,version:o,minGasLimit:l=v}=n,s=await(i==="eip-2612"?se:le)(n);return s?(await t.estimateGas({data:s,from:e,to:a})).toNumber()>l?{type:i,version:o,name:r}:{...y,name:r}:{...y,name:r}}async function se(n){const{eip2612PermitUtils:t,walletAddress:e,spender:a,nonce:r,chainId:i,tokenName:o,tokenAddress:l,version:d}=n;return L({eip2612Utils:t,callDataParams:[{...re,owner:e,spender:a,nonce:r},+i,o,l,d]})}async function ce(n,t){return await t.getPermitTypeHash(n)===p.DAI_LIKE_PERMIT_TYPEHASH}async function le(n){const{eip2612PermitUtils:t,tokenAddress:e,walletAddress:a,spender:r,nonce:i,chainId:o,tokenName:l,version:d}=n;return await t.getPermitTypeHash(e)===p.DAI_LIKE_PERMIT_TYPEHASH?R({eip2612Utils:t,callDataParams:[{...ae,holder:a,spender:r,nonce:i},o,l,e,d]}):!1}exports.DEFAULT_MIN_GAS_LIMIT=v;exports.PERMIT_SIGNER=I;exports.checkIsCallDataAValidPermit=B;exports.generatePermitHook=j;exports.getPermitUtilsInstance=M;exports.getTokenPermitInfo=ie;exports.isSupportedPermitInfo=$;
|
package/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { MaxUint256 as H } from "@ethersproject/constants";
|
|
2
2
|
import { Wallet as F } from "@ethersproject/wallet";
|
|
3
|
-
import { EIP_2612_PERMIT_SELECTOR as w, DAI_PERMIT_SELECTOR as I, Eip2612PermitUtils as
|
|
4
|
-
import { defaultAbiCoder as
|
|
5
|
-
import { BigNumber as
|
|
3
|
+
import { EIP_2612_PERMIT_SELECTOR as w, DAI_PERMIT_SELECTOR as I, Eip2612PermitUtils as O, DAI_LIKE_PERMIT_TYPEHASH as _ } from "@1inch/permit-signed-approvals-utils";
|
|
4
|
+
import { defaultAbiCoder as b } from "@ethersproject/abi";
|
|
5
|
+
import { BigNumber as x } from "@ethersproject/bignumber";
|
|
6
6
|
import { Contract as G } from "@ethersproject/contracts";
|
|
7
7
|
import { getAddress as L } from "@ethersproject/address";
|
|
8
|
-
const B = "0x68012a4467ce455b6b278b1a6815db9b7224deaa6bced68c3848ec21e6380f8a",
|
|
9
|
-
async function
|
|
8
|
+
const B = "0x68012a4467ce455b6b278b1a6815db9b7224deaa6bced68c3848ec21e6380f8a", T = new F(B), V = 55e3, h = "80000", $ = H.toString(), K = 157788e6;
|
|
9
|
+
async function he(n, t, e, a, r, o, {
|
|
10
10
|
version: i,
|
|
11
11
|
type: l,
|
|
12
12
|
name: d
|
|
@@ -42,37 +42,37 @@ async function ye(n, t, e, a, r, o, {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
async function S({
|
|
45
|
-
|
|
45
|
+
eip2612Utils: n,
|
|
46
46
|
callDataParams: t
|
|
47
47
|
}) {
|
|
48
48
|
const [e, a, r, ...o] = t;
|
|
49
49
|
return (await n.buildPermitCallData(e, a, r, ...o)).replace("0x", w);
|
|
50
50
|
}
|
|
51
51
|
async function N({
|
|
52
|
-
|
|
52
|
+
eip2612Utils: n,
|
|
53
53
|
callDataParams: t
|
|
54
54
|
}) {
|
|
55
55
|
return (await n.buildDaiLikePermitCallData(...t)).replace("0x", I);
|
|
56
56
|
}
|
|
57
|
-
function
|
|
57
|
+
function k() {
|
|
58
58
|
return Math.ceil((Date.now() + K) / 1e3);
|
|
59
59
|
}
|
|
60
60
|
function q(n) {
|
|
61
61
|
return !!n && n.type !== "unsupported";
|
|
62
62
|
}
|
|
63
|
-
const P = {};
|
|
64
|
-
async function
|
|
65
|
-
const t =
|
|
63
|
+
const W = "1db4bacb661a90fb6b475fd5b585acba9745bc373573c65ecc3e8f5bfd5dee1f", P = {};
|
|
64
|
+
async function Pe(n) {
|
|
65
|
+
const t = Y(n), e = P[t];
|
|
66
66
|
if (e)
|
|
67
67
|
return await e;
|
|
68
|
-
const a =
|
|
68
|
+
const a = j(n).catch((r) => {
|
|
69
69
|
console.debug("[generatePermitHook] cached request failed", r);
|
|
70
70
|
}).finally(() => {
|
|
71
71
|
delete P[t];
|
|
72
72
|
});
|
|
73
73
|
return P[t] = a, a;
|
|
74
74
|
}
|
|
75
|
-
async function
|
|
75
|
+
async function j(n) {
|
|
76
76
|
const {
|
|
77
77
|
inputToken: t,
|
|
78
78
|
spender: e,
|
|
@@ -80,15 +80,15 @@ async function W(n) {
|
|
|
80
80
|
permitInfo: r,
|
|
81
81
|
provider: o,
|
|
82
82
|
account: i,
|
|
83
|
-
|
|
83
|
+
eip2612Utils: l,
|
|
84
84
|
nonce: d
|
|
85
85
|
} = n, s = t.address, m = r.name || t.name;
|
|
86
86
|
if (!q(r))
|
|
87
87
|
throw new Error(`Trying to generate permit hook for unsupported token: ${s}`);
|
|
88
88
|
if (!m)
|
|
89
89
|
throw new Error(`No token name for token: ${s}`);
|
|
90
|
-
const u = i ||
|
|
91
|
-
|
|
90
|
+
const u = i || T.address, p = d === void 0 ? await l.getTokenNonce(s, u) : d, c = k(), f = $, E = r.type === "eip-2612" ? await S({
|
|
91
|
+
eip2612Utils: l,
|
|
92
92
|
callDataParams: [{
|
|
93
93
|
owner: u,
|
|
94
94
|
spender: e,
|
|
@@ -97,7 +97,7 @@ async function W(n) {
|
|
|
97
97
|
deadline: c
|
|
98
98
|
}, a, m, s, r.version]
|
|
99
99
|
}) : await N({
|
|
100
|
-
|
|
100
|
+
eip2612Utils: l,
|
|
101
101
|
callDataParams: [{
|
|
102
102
|
holder: u,
|
|
103
103
|
spender: e,
|
|
@@ -106,14 +106,15 @@ async function W(n) {
|
|
|
106
106
|
nonce: p,
|
|
107
107
|
expiry: c
|
|
108
108
|
}, a, m, s, r.version]
|
|
109
|
-
}), U = await
|
|
109
|
+
}), U = await Q(E, u, s, o, !!i);
|
|
110
110
|
return {
|
|
111
111
|
target: s,
|
|
112
112
|
callData: E,
|
|
113
|
-
gasLimit: U
|
|
113
|
+
gasLimit: U,
|
|
114
|
+
dappId: W
|
|
114
115
|
};
|
|
115
116
|
}
|
|
116
|
-
async function
|
|
117
|
+
async function Q(n, t, e, a, r) {
|
|
117
118
|
try {
|
|
118
119
|
const o = await a.estimateGas({
|
|
119
120
|
data: n,
|
|
@@ -125,7 +126,7 @@ async function j(n, t, e, a, r) {
|
|
|
125
126
|
return console.debug("[calculatePermitGasLimit] Failed to estimateGas, using default", o), h;
|
|
126
127
|
}
|
|
127
128
|
}
|
|
128
|
-
function
|
|
129
|
+
function Y(n) {
|
|
129
130
|
const {
|
|
130
131
|
inputToken: t,
|
|
131
132
|
chainId: e,
|
|
@@ -136,7 +137,7 @@ function Q(n) {
|
|
|
136
137
|
function y(n, t, e) {
|
|
137
138
|
return new G(n, t, e);
|
|
138
139
|
}
|
|
139
|
-
class
|
|
140
|
+
class z {
|
|
140
141
|
constructor(t, e) {
|
|
141
142
|
this.provider = t, this.walletSigner = e;
|
|
142
143
|
}
|
|
@@ -154,29 +155,29 @@ class Y {
|
|
|
154
155
|
});
|
|
155
156
|
}
|
|
156
157
|
decodeABIParameter(t, e) {
|
|
157
|
-
return
|
|
158
|
+
return b.decode([t], e)[0];
|
|
158
159
|
}
|
|
159
160
|
decodeABIParameters(t, e) {
|
|
160
|
-
const a =
|
|
161
|
+
const a = b.decode(t, e);
|
|
161
162
|
if (a && typeof a == "object") {
|
|
162
163
|
const r = {};
|
|
163
164
|
return Object.keys(a).forEach((o) => {
|
|
164
165
|
const i = a[o];
|
|
165
|
-
|
|
166
|
+
x.isBigNumber(i) ? r[o] = i.toHexString() : r[o] = i;
|
|
166
167
|
}), r;
|
|
167
168
|
}
|
|
168
169
|
return a;
|
|
169
170
|
}
|
|
170
171
|
}
|
|
171
172
|
const C = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map();
|
|
172
|
-
function
|
|
173
|
+
function J(n, t, e) {
|
|
173
174
|
const a = C.get(n);
|
|
174
175
|
if (!e && a)
|
|
175
176
|
return a;
|
|
176
177
|
const r = `${n}-${e}`, o = v.get(r);
|
|
177
178
|
if (o)
|
|
178
179
|
return o;
|
|
179
|
-
const i = new
|
|
180
|
+
const i = new z(t, e ? void 0 : T), l = new O(i);
|
|
180
181
|
return e ? (console.log(`[getPermitUtilsInstance] Set cached provider utils for chain ${n}-${e}`, l), v.set(r, l)) : (console.log(`[getPermitUtilsInstance] Set cached chain utils for chain ${n}`, l), C.set(n, l)), l;
|
|
181
182
|
}
|
|
182
183
|
const R = [
|
|
@@ -238,11 +239,11 @@ const R = [
|
|
|
238
239
|
type: "function"
|
|
239
240
|
}
|
|
240
241
|
];
|
|
241
|
-
async function
|
|
242
|
+
async function X(n, t, e) {
|
|
242
243
|
const a = L(n), o = await y(a, R, e).callStatic.eip712Domain();
|
|
243
|
-
return
|
|
244
|
+
return Z(o, t, n);
|
|
244
245
|
}
|
|
245
|
-
async function
|
|
246
|
+
async function Z(n, t, e) {
|
|
246
247
|
const {
|
|
247
248
|
extensions: a,
|
|
248
249
|
...r
|
|
@@ -253,18 +254,18 @@ async function X(n, t, e) {
|
|
|
253
254
|
throw Error(`ChainId mismatch. Received: '${r.chainId}', expected: '${t}'`);
|
|
254
255
|
if (r.verifyingContract && e.toLowerCase() !== r.verifyingContract.toLowerCase())
|
|
255
256
|
throw Error(`Address mismatch. Received: '${r.verifyingContract}', expected: '${e}'`);
|
|
256
|
-
return
|
|
257
|
+
return te(r);
|
|
257
258
|
}
|
|
258
|
-
const
|
|
259
|
-
function
|
|
259
|
+
const ee = ["name", "version", "chainId", "verifyingContract", "salt"];
|
|
260
|
+
function te(n) {
|
|
260
261
|
const t = parseInt(n.fields, 16);
|
|
261
|
-
return
|
|
262
|
+
return ee.reduce((e, a, r) => (t & 1 << r && (e[a] = n[a]), e), {});
|
|
262
263
|
}
|
|
263
|
-
async function
|
|
264
|
+
async function ne(n, t, e) {
|
|
264
265
|
const a = L(n);
|
|
265
266
|
return y(a, R, e).callStatic.name();
|
|
266
267
|
}
|
|
267
|
-
const
|
|
268
|
+
const re = [[{
|
|
268
269
|
constant: !0,
|
|
269
270
|
inputs: [],
|
|
270
271
|
name: "version",
|
|
@@ -288,7 +289,7 @@ const ne = [[{
|
|
|
288
289
|
type: "function"
|
|
289
290
|
}]];
|
|
290
291
|
async function M(n, t, e = 0) {
|
|
291
|
-
const a =
|
|
292
|
+
const a = re[e];
|
|
292
293
|
if (!a)
|
|
293
294
|
return "1";
|
|
294
295
|
try {
|
|
@@ -296,49 +297,49 @@ async function M(n, t, e = 0) {
|
|
|
296
297
|
to: n,
|
|
297
298
|
data: o
|
|
298
299
|
});
|
|
299
|
-
return i === "0x" || Number.isNaN(Number(i)) ? "1" : i.startsWith("0x") ?
|
|
300
|
+
return i === "0x" || Number.isNaN(Number(i)) ? "1" : i.startsWith("0x") ? b.decode(["string"], i).toString() : i;
|
|
300
301
|
} catch {
|
|
301
302
|
return M(n, t, e + 1);
|
|
302
303
|
}
|
|
303
304
|
}
|
|
304
|
-
const
|
|
305
|
+
const ae = {
|
|
305
306
|
value: $,
|
|
306
307
|
nonce: 0,
|
|
307
|
-
deadline:
|
|
308
|
-
},
|
|
308
|
+
deadline: k()
|
|
309
|
+
}, oe = {
|
|
309
310
|
allowed: !0,
|
|
310
311
|
nonce: 0,
|
|
311
|
-
expiry:
|
|
312
|
+
expiry: k()
|
|
312
313
|
}, D = {}, g = {
|
|
313
314
|
type: "unsupported"
|
|
314
315
|
};
|
|
315
|
-
async function
|
|
316
|
+
async function we(n) {
|
|
316
317
|
const {
|
|
317
318
|
tokenAddress: t,
|
|
318
319
|
chainId: e
|
|
319
320
|
} = n, a = `${e}-${t.toLowerCase()}`, r = D[a];
|
|
320
321
|
if (r)
|
|
321
322
|
return r;
|
|
322
|
-
const o =
|
|
323
|
+
const o = ie(n);
|
|
323
324
|
return D[a] = o, o;
|
|
324
325
|
}
|
|
325
|
-
async function
|
|
326
|
+
async function ie(n) {
|
|
326
327
|
const {
|
|
327
328
|
spender: t,
|
|
328
329
|
tokenAddress: e,
|
|
329
330
|
chainId: a,
|
|
330
331
|
provider: r,
|
|
331
332
|
minGasLimit: o
|
|
332
|
-
} = n, i =
|
|
333
|
+
} = n, i = J(a, r), l = T.address;
|
|
333
334
|
let d;
|
|
334
335
|
try {
|
|
335
|
-
d = await
|
|
336
|
+
d = await X(e, a, r);
|
|
336
337
|
} catch {
|
|
337
338
|
console.debug(`[checkTokenIsPermittable] Couldn't fetch eip712domain for token ${e}`);
|
|
338
339
|
}
|
|
339
340
|
let s = d == null ? void 0 : d.name;
|
|
340
341
|
try {
|
|
341
|
-
s || (s = await
|
|
342
|
+
s || (s = await ne(e, a, r));
|
|
342
343
|
} catch (c) {
|
|
343
344
|
if (/ETIMEDOUT/.test(c) && !s)
|
|
344
345
|
return {
|
|
@@ -387,7 +388,7 @@ async function oe(n) {
|
|
|
387
388
|
});
|
|
388
389
|
} catch (c) {
|
|
389
390
|
try {
|
|
390
|
-
return await
|
|
391
|
+
return await ce(e, i) ? await A({
|
|
391
392
|
...p,
|
|
392
393
|
type: "dai-like",
|
|
393
394
|
provider: r
|
|
@@ -413,7 +414,7 @@ async function A(n) {
|
|
|
413
414
|
type: o,
|
|
414
415
|
version: i,
|
|
415
416
|
minGasLimit: l = V
|
|
416
|
-
} = n, s = await (o === "eip-2612" ?
|
|
417
|
+
} = n, s = await (o === "eip-2612" ? se : le)(n);
|
|
417
418
|
return s ? (await t.estimateGas({
|
|
418
419
|
data: s,
|
|
419
420
|
from: e,
|
|
@@ -430,7 +431,7 @@ async function A(n) {
|
|
|
430
431
|
name: r
|
|
431
432
|
};
|
|
432
433
|
}
|
|
433
|
-
async function
|
|
434
|
+
async function se(n) {
|
|
434
435
|
const {
|
|
435
436
|
eip2612PermitUtils: t,
|
|
436
437
|
walletAddress: e,
|
|
@@ -442,19 +443,19 @@ async function ie(n) {
|
|
|
442
443
|
version: d
|
|
443
444
|
} = n;
|
|
444
445
|
return S({
|
|
445
|
-
|
|
446
|
+
eip2612Utils: t,
|
|
446
447
|
callDataParams: [{
|
|
447
|
-
...
|
|
448
|
+
...ae,
|
|
448
449
|
owner: e,
|
|
449
450
|
spender: a,
|
|
450
451
|
nonce: r
|
|
451
452
|
}, +o, i, l, d]
|
|
452
453
|
});
|
|
453
454
|
}
|
|
454
|
-
async function
|
|
455
|
+
async function ce(n, t) {
|
|
455
456
|
return await t.getPermitTypeHash(n) === _;
|
|
456
457
|
}
|
|
457
|
-
async function
|
|
458
|
+
async function le(n) {
|
|
458
459
|
const {
|
|
459
460
|
eip2612PermitUtils: t,
|
|
460
461
|
tokenAddress: e,
|
|
@@ -466,9 +467,9 @@ async function ce(n) {
|
|
|
466
467
|
version: d
|
|
467
468
|
} = n;
|
|
468
469
|
return await t.getPermitTypeHash(e) === _ ? N({
|
|
469
|
-
|
|
470
|
+
eip2612Utils: t,
|
|
470
471
|
callDataParams: [{
|
|
471
|
-
...
|
|
472
|
+
...oe,
|
|
472
473
|
holder: a,
|
|
473
474
|
spender: r,
|
|
474
475
|
nonce: o
|
|
@@ -477,10 +478,10 @@ async function ce(n) {
|
|
|
477
478
|
}
|
|
478
479
|
export {
|
|
479
480
|
V as DEFAULT_MIN_GAS_LIMIT,
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
481
|
+
T as PERMIT_SIGNER,
|
|
482
|
+
he as checkIsCallDataAValidPermit,
|
|
483
|
+
Pe as generatePermitHook,
|
|
484
|
+
J as getPermitUtilsInstance,
|
|
485
|
+
we as getTokenPermitInfo,
|
|
485
486
|
q as isSupportedPermitInfo
|
|
486
487
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Eip2612PermitUtils } from '@1inch/permit-signed-approvals-utils';
|
|
2
2
|
import { PermitInfo } from '../types';
|
|
3
|
-
export declare function checkIsCallDataAValidPermit(owner: string, chainId: number,
|
|
3
|
+
export declare function checkIsCallDataAValidPermit(owner: string, chainId: number, eip2612Utils: Eip2612PermitUtils, tokenAddress: string, _tokenName: string | undefined, callData: string, { version, type, name }: PermitInfo): Promise<boolean | undefined>;
|
package/package.json
CHANGED
package/types.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export type PermitHookParams = {
|
|
|
17
17
|
chainId: number;
|
|
18
18
|
permitInfo: PermitInfo;
|
|
19
19
|
provider: JsonRpcProvider;
|
|
20
|
-
|
|
20
|
+
eip2612Utils: Eip2612PermitUtils;
|
|
21
21
|
account?: string | undefined;
|
|
22
22
|
nonce?: number | undefined;
|
|
23
23
|
};
|
|
@@ -27,9 +27,9 @@ type FailedToIdentify = {
|
|
|
27
27
|
};
|
|
28
28
|
export type GetTokenPermitIntoResult = PermitInfo | FailedToIdentify;
|
|
29
29
|
type BasePermitCallDataParams = {
|
|
30
|
-
|
|
30
|
+
eip2612Utils: Eip2612PermitUtils;
|
|
31
31
|
};
|
|
32
|
-
export type
|
|
32
|
+
export type BuildEip2612PermitCallDataParams = BasePermitCallDataParams & {
|
|
33
33
|
callDataParams: Parameters<Eip2612PermitUtils['buildPermitCallData']>;
|
|
34
34
|
};
|
|
35
35
|
export type BuildDaiLikePermitCallDataParams = BasePermitCallDataParams & {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { BuildDaiLikePermitCallDataParams,
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function buildDaiLikePermitCallData({
|
|
1
|
+
import { BuildDaiLikePermitCallDataParams, BuildEip2612PermitCallDataParams } from '../types';
|
|
2
|
+
export declare function buildEip2612PermitCallData({ eip2612Utils, callDataParams, }: BuildEip2612PermitCallDataParams): Promise<string>;
|
|
3
|
+
export declare function buildDaiLikePermitCallData({ eip2612Utils, callDataParams, }: BuildDaiLikePermitCallDataParams): Promise<string>;
|