@cowprotocol/permit-utils 3.0.1 → 3.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.
Files changed (62) hide show
  1. package/1inchPermitUtils-BDO_CqjL.cjs +1 -0
  2. package/1inchPermitUtils-CXu6m1-9.js +4 -0
  3. package/const.d.ts +24 -0
  4. package/index.cjs +1 -0
  5. package/index.js +547 -0
  6. package/{src/lib → lib}/checkIsCallDataAValidPermit.d.ts +1 -1
  7. package/{src/lib → lib}/getPermitUtilsInstance.d.ts +2 -2
  8. package/package.json +16 -26
  9. package/{src/types.d.ts → types.d.ts} +3 -3
  10. package/{src/utils → utils}/PermitProviderConnector.d.ts +2 -2
  11. package/{src/utils → utils}/getContract.d.ts +1 -1
  12. package/{src/utils → utils}/getEip712Domain.d.ts +1 -1
  13. package/{src/utils → utils}/getTokenName.d.ts +1 -1
  14. package/{src/utils → utils}/getTokenPermitVersion.d.ts +1 -1
  15. package/CHANGELOG.md +0 -322
  16. package/src/abi/erc20.json +0 -59
  17. package/src/abi/versionAbis.js +0 -41
  18. package/src/abi/versionAbis.js.map +0 -1
  19. package/src/const.d.ts +0 -24
  20. package/src/const.js +0 -18
  21. package/src/const.js.map +0 -1
  22. package/src/consts/1inchPermitUtils.js +0 -68
  23. package/src/consts/1inchPermitUtils.js.map +0 -1
  24. package/src/imports/1inchPermitUtils.js +0 -14
  25. package/src/imports/1inchPermitUtils.js.map +0 -1
  26. package/src/index.js +0 -20
  27. package/src/index.js.map +0 -1
  28. package/src/lib/checkIsCallDataAValidPermit.js +0 -47
  29. package/src/lib/checkIsCallDataAValidPermit.js.map +0 -1
  30. package/src/lib/generatePermitHook.js +0 -106
  31. package/src/lib/generatePermitHook.js.map +0 -1
  32. package/src/lib/getPermitUtilsInstance.js +0 -71
  33. package/src/lib/getPermitUtilsInstance.js.map +0 -1
  34. package/src/lib/getTokenPermitInfo.js +0 -204
  35. package/src/lib/getTokenPermitInfo.js.map +0 -1
  36. package/src/types.js +0 -3
  37. package/src/types.js.map +0 -1
  38. package/src/utils/PermitProviderConnector.js +0 -64
  39. package/src/utils/PermitProviderConnector.js.map +0 -1
  40. package/src/utils/buildPermitCallData.js +0 -20
  41. package/src/utils/buildPermitCallData.js.map +0 -1
  42. package/src/utils/getContract.js +0 -8
  43. package/src/utils/getContract.js.map +0 -1
  44. package/src/utils/getEip712Domain.js +0 -44
  45. package/src/utils/getEip712Domain.js.map +0 -1
  46. package/src/utils/getPermitDeadline.js +0 -10
  47. package/src/utils/getPermitDeadline.js.map +0 -1
  48. package/src/utils/getTokenName.js +0 -13
  49. package/src/utils/getTokenName.js.map +0 -1
  50. package/src/utils/getTokenPermitVersion.js +0 -28
  51. package/src/utils/getTokenPermitVersion.js.map +0 -1
  52. package/src/utils/isSupportedPermitInfo.js +0 -7
  53. package/src/utils/isSupportedPermitInfo.js.map +0 -1
  54. /package/{src/abi → abi}/versionAbis.d.ts +0 -0
  55. /package/{src/consts → consts}/1inchPermitUtils.d.ts +0 -0
  56. /package/{src/imports → imports}/1inchPermitUtils.d.ts +0 -0
  57. /package/{src/index.d.ts → index.d.ts} +0 -0
  58. /package/{src/lib → lib}/generatePermitHook.d.ts +0 -0
  59. /package/{src/lib → lib}/getTokenPermitInfo.d.ts +0 -0
  60. /package/{src/utils → utils}/buildPermitCallData.d.ts +0 -0
  61. /package/{src/utils → utils}/getPermitDeadline.d.ts +0 -0
  62. /package/{src/utils → utils}/isSupportedPermitInfo.d.ts +0 -0
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkIsCallDataAValidPermit = checkIsCallDataAValidPermit;
4
- const __1 = require("..");
5
- async function checkIsCallDataAValidPermit(owner, chainId, eip2612Utils, tokenAddress, _tokenName, callData, { version, type, name }) {
6
- // TODO: take name only from PermitInfo
7
- const tokenName = name || _tokenName;
8
- if (type === 'unsupported') {
9
- return false;
10
- }
11
- if (!tokenName) {
12
- throw new Error(`No token name for ${tokenAddress}`);
13
- }
14
- const params = { chainId, tokenName, tokenAddress, callData, version };
15
- let recoverPermitOwnerPromise = undefined;
16
- // If pre-hook doesn't start with either selector, it's not a permit
17
- if (callData.startsWith(__1.oneInchPermitUtilsConsts.EIP_2612_PERMIT_SELECTOR)) {
18
- recoverPermitOwnerPromise = eip2612Utils.recoverPermitOwnerFromCallData({
19
- ...params,
20
- // I don't know why this was removed, ok?
21
- // We added it back on buildPermitCallData.ts
22
- // But it looks like this is needed 🤷
23
- // Check the test for this method https://github.com/1inch/permit-signed-approvals-utils/blob/master/src/eip-2612-permit.test.ts#L85-L106
24
- callData: callData.replace(__1.oneInchPermitUtilsConsts.EIP_2612_PERMIT_SELECTOR, '0x'),
25
- });
26
- }
27
- else if (callData.startsWith(__1.oneInchPermitUtilsConsts.DAI_PERMIT_SELECTOR)) {
28
- recoverPermitOwnerPromise = eip2612Utils.recoverDaiLikePermitOwnerFromCallData({
29
- ...params,
30
- callData: callData.replace(__1.oneInchPermitUtilsConsts.DAI_PERMIT_SELECTOR, '0x'),
31
- });
32
- }
33
- if (!recoverPermitOwnerPromise) {
34
- // The callData doesn't match any known permit type
35
- return undefined;
36
- }
37
- try {
38
- const recoveredOwner = await recoverPermitOwnerPromise;
39
- // Permit is valid when recovered owner matches order owner
40
- return recoveredOwner.toLowerCase() === owner.toLowerCase();
41
- }
42
- catch (e) {
43
- console.debug(`[checkHasValidPendingPermit] Failed to check permit validity for owner ${owner} with callData ${callData}`, e);
44
- return false;
45
- }
46
- }
47
- //# sourceMappingURL=checkIsCallDataAValidPermit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkIsCallDataAValidPermit.js","sourceRoot":"","sources":["../../../../../libs/permit-utils/src/lib/checkIsCallDataAValidPermit.ts"],"names":[],"mappings":";;AAKA,kEA0DC;AA/DD,0BAA6C;AAKtC,KAAK,UAAU,2BAA2B,CAC/C,KAAa,EACb,OAAe,EACf,YAAgC,EAChC,YAAoB,EACpB,UAA8B,EAC9B,QAAgB,EAChB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAc;IAEnC,uCAAuC;IACvC,MAAM,SAAS,GAAG,IAAI,IAAI,UAAU,CAAA;IAEpC,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IAEtE,IAAI,yBAAyB,GAAgC,SAAS,CAAA;IAEtE,oEAAoE;IACpE,IAAI,QAAQ,CAAC,UAAU,CAAC,4BAAwB,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC3E,yBAAyB,GAAG,YAAY,CAAC,8BAA8B,CAAC;YACtE,GAAG,MAAM;YACT,yCAAyC;YACzC,6CAA6C;YAC7C,sCAAsC;YACtC,yIAAyI;YACzI,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,4BAAwB,CAAC,wBAAwB,EAAE,IAAI,CAAC;SACpF,CAAC,CAAA;IACJ,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,4BAAwB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC7E,yBAAyB,GAAG,YAAY,CAAC,qCAAqC,CAAC;YAC7E,GAAG,MAAM;YACT,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,4BAAwB,CAAC,mBAAmB,EAAE,IAAI,CAAC;SAC/E,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/B,mDAAmD;QACnD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,yBAAyB,CAAA;QAEtD,2DAA2D;QAC3D,OAAO,cAAc,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAA;IAC7D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CACX,0EAA0E,KAAK,kBAAkB,QAAQ,EAAE,EAC3G,CAAC,CACF,CAAA;QACD,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
@@ -1,106 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generatePermitHook = generatePermitHook;
4
- const hook_dapp_lib_1 = require("@cowprotocol/hook-dapp-lib");
5
- const const_1 = require("../const");
6
- const buildPermitCallData_1 = require("../utils/buildPermitCallData");
7
- const getPermitDeadline_1 = require("../utils/getPermitDeadline");
8
- const isSupportedPermitInfo_1 = require("../utils/isSupportedPermitInfo");
9
- const REQUESTS_CACHE = {};
10
- async function generatePermitHook(params) {
11
- const permitKey = getCacheKey(params);
12
- const cachedRequest = REQUESTS_CACHE[permitKey];
13
- if (cachedRequest) {
14
- return await cachedRequest;
15
- }
16
- const request = generatePermitHookRaw(params)
17
- .catch((e) => {
18
- console.debug(`[generatePermitHook] cached request failed`, e);
19
- return undefined;
20
- })
21
- .finally(() => {
22
- // Remove consumed request to avoid stale data
23
- delete REQUESTS_CACHE[permitKey];
24
- });
25
- REQUESTS_CACHE[permitKey] = request;
26
- return request;
27
- }
28
- async function generatePermitHookRaw(params) {
29
- const { inputToken, spender, chainId, permitInfo, provider, account, eip2612Utils, nonce: preFetchedNonce } = params;
30
- const tokenAddress = inputToken.address;
31
- // TODO: remove the need for `name` from input token. Should come from permitInfo instead
32
- const tokenName = permitInfo.name || inputToken.name;
33
- if (!(0, isSupportedPermitInfo_1.isSupportedPermitInfo)(permitInfo)) {
34
- throw new Error(`Trying to generate permit hook for unsupported token: ${tokenAddress}`);
35
- }
36
- if (!tokenName) {
37
- throw new Error(`No token name for token: ${tokenAddress}`);
38
- }
39
- const owner = account || const_1.PERMIT_SIGNER.address;
40
- // Only fetch the nonce in case it wasn't pre-fetched before
41
- // That's the case for static account
42
- const nonce = preFetchedNonce === undefined ? await eip2612Utils.getTokenNonce(tokenAddress, owner) : preFetchedNonce;
43
- const deadline = (0, getPermitDeadline_1.getPermitDeadline)();
44
- const value = params.amount || const_1.DEFAULT_PERMIT_VALUE;
45
- const callData = permitInfo.type === 'eip-2612'
46
- ? await (0, buildPermitCallData_1.buildEip2612PermitCallData)({
47
- eip2612Utils,
48
- callDataParams: [
49
- {
50
- owner,
51
- spender,
52
- value: value.toString(),
53
- nonce,
54
- deadline,
55
- },
56
- chainId,
57
- tokenName,
58
- tokenAddress,
59
- permitInfo.version,
60
- ],
61
- })
62
- : await (0, buildPermitCallData_1.buildDaiLikePermitCallData)({
63
- eip2612Utils,
64
- callDataParams: [
65
- {
66
- holder: owner,
67
- spender,
68
- allowed: true,
69
- value: value.toString(),
70
- nonce,
71
- expiry: deadline,
72
- },
73
- chainId,
74
- tokenName,
75
- tokenAddress,
76
- permitInfo.version,
77
- ],
78
- });
79
- const gasLimit = await calculateGasLimit(callData, owner, tokenAddress, provider, !!account);
80
- return {
81
- target: tokenAddress,
82
- callData,
83
- gasLimit,
84
- dappId: hook_dapp_lib_1.PERMIT_HOOK_DAPP_ID,
85
- };
86
- }
87
- async function calculateGasLimit(data, from, to, provider, isUserAccount) {
88
- try {
89
- // Query the actual gas estimate
90
- const actual = await provider.estimateGas({ data, from, to });
91
- // Add 10% to actual value to account for minor differences with real account
92
- // Do not add it if this is the real user's account
93
- const gasLimit = !isUserAccount ? actual.add(actual.div(10)) : actual;
94
- // Pick the biggest between estimated and default
95
- return gasLimit.gt(const_1.DEFAULT_PERMIT_GAS_LIMIT) ? gasLimit.toString() : const_1.DEFAULT_PERMIT_GAS_LIMIT;
96
- }
97
- catch (e) {
98
- console.debug(`[calculatePermitGasLimit] Failed to estimateGas, using default`, e);
99
- return const_1.DEFAULT_PERMIT_GAS_LIMIT;
100
- }
101
- }
102
- function getCacheKey(params) {
103
- const { inputToken, chainId, account, amount } = params;
104
- return `${inputToken.address.toLowerCase()}-${chainId}${account ? `-${account.toLowerCase()}` : ''}${amount ? `-${amount.toString()}` : ''}`;
105
- }
106
- //# sourceMappingURL=generatePermitHook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generatePermitHook.js","sourceRoot":"","sources":["../../../../../libs/permit-utils/src/lib/generatePermitHook.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getPermitUtilsInstance = getPermitUtilsInstance;
37
- const const_1 = require("../const");
38
- const PermitProviderConnector_1 = require("../utils/PermitProviderConnector");
39
- /**
40
- * Cache by network. Here we don't care about the provider as a static account will be used for the signature
41
- */
42
- const CHAIN_UTILS_CACHE = new Map();
43
- /**
44
- * Cache by provider. Here we cache per provider as each account should have its own instance
45
- */
46
- const PROVIDER_UTILS_CACHE = new Map();
47
- async function getPermitUtilsInstance(chainId, provider, account) {
48
- const chainCache = CHAIN_UTILS_CACHE.get(chainId);
49
- if (!account && chainCache) {
50
- return chainCache;
51
- }
52
- const providerCacheKey = `${chainId}-${account}`;
53
- const providerCache = PROVIDER_UTILS_CACHE.get(providerCacheKey);
54
- if (providerCache) {
55
- return providerCache;
56
- }
57
- // TODO: allow to receive the signer as a parameter
58
- const web3ProviderConnector = new PermitProviderConnector_1.PermitProviderConnector(provider, account ? undefined : const_1.PERMIT_SIGNER);
59
- const Eip2612PermitUtilsClass = await Promise.resolve().then(() => __importStar(require('../imports/1inchPermitUtils'))).then((r) => r.Eip2612PermitUtils);
60
- const eip2612PermitUtils = new Eip2612PermitUtilsClass(web3ProviderConnector, { enabledCheckSalt: true });
61
- if (!account) {
62
- console.log(`[getPermitUtilsInstance] Set cached chain utils for chain ${chainId}`, eip2612PermitUtils);
63
- CHAIN_UTILS_CACHE.set(chainId, eip2612PermitUtils);
64
- }
65
- else {
66
- console.log(`[getPermitUtilsInstance] Set cached provider utils for chain ${chainId}-${account}`, eip2612PermitUtils);
67
- PROVIDER_UTILS_CACHE.set(providerCacheKey, eip2612PermitUtils);
68
- }
69
- return eip2612PermitUtils;
70
- }
71
- //# sourceMappingURL=getPermitUtilsInstance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getPermitUtilsInstance.js","sourceRoot":"","sources":["../../../../../libs/permit-utils/src/lib/getPermitUtilsInstance.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,wDAkCC;AAhDD,oCAAwC;AACxC,8EAA0E;AAI1E;;GAEG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA8B,CAAA;AAC/D;;GAEG;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAA8B,CAAA;AAE3D,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,QAAyB,EACzB,OAA4B;IAE5B,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAEjD,IAAI,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,MAAM,gBAAgB,GAAG,GAAG,OAAO,IAAI,OAAO,EAAE,CAAA;IAChD,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAEhE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,mDAAmD;IACnD,MAAM,qBAAqB,GAAG,IAAI,iDAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAa,CAAC,CAAA;IACxG,MAAM,uBAAuB,GAAG,MAAM,kDAAO,6BAA6B,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;IAC7G,MAAM,kBAAkB,GAAG,IAAI,uBAAuB,CAAC,qBAAqB,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAA;IAEzG,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,6DAA6D,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAA;QACvG,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,gEAAgE,OAAO,IAAI,OAAO,EAAE,EACpF,kBAAkB,CACnB,CAAA;QACD,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,kBAAkB,CAAA;AAC3B,CAAC"}
@@ -1,204 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTokenPermitInfo = getTokenPermitInfo;
4
- const cow_sdk_1 = require("@cowprotocol/cow-sdk");
5
- const getPermitUtilsInstance_1 = require("./getPermitUtilsInstance");
6
- const __1 = require("..");
7
- const const_1 = require("../const");
8
- const buildPermitCallData_1 = require("../utils/buildPermitCallData");
9
- const getEip712Domain_1 = require("../utils/getEip712Domain");
10
- const getPermitDeadline_1 = require("../utils/getPermitDeadline");
11
- const getTokenName_1 = require("../utils/getTokenName");
12
- const getTokenPermitVersion_1 = require("../utils/getTokenPermitVersion");
13
- const EIP_2612_PERMIT_PARAMS = {
14
- nonce: 0,
15
- deadline: (0, getPermitDeadline_1.getPermitDeadline)(),
16
- };
17
- const DAI_LIKE_PERMIT_PARAMS = {
18
- allowed: true,
19
- nonce: 0,
20
- expiry: (0, getPermitDeadline_1.getPermitDeadline)(),
21
- };
22
- const REQUESTS_CACHE = {};
23
- const UNSUPPORTED = { type: 'unsupported' };
24
- async function getTokenPermitInfo(params) {
25
- const { tokenAddress, chainId } = params;
26
- const key = (0, cow_sdk_1.getTokenId)({ address: tokenAddress, chainId });
27
- const cached = REQUESTS_CACHE[key];
28
- if (cached) {
29
- return cached;
30
- }
31
- const request = actuallyCheckTokenIsPermittable(params);
32
- REQUESTS_CACHE[key] = request;
33
- return request;
34
- }
35
- // TODO: Break down this large function into smaller functions
36
- // TODO: Reduce function complexity by extracting logic
37
- // eslint-disable-next-line max-lines-per-function, complexity
38
- async function actuallyCheckTokenIsPermittable(params) {
39
- const { spender, tokenAddress, chainId, provider, minGasLimit, amount } = params;
40
- const eip2612PermitUtils = await (0, getPermitUtilsInstance_1.getPermitUtilsInstance)(chainId, provider);
41
- const owner = const_1.PERMIT_SIGNER.address;
42
- let domain = undefined;
43
- // Try to get eip712domain, which contains most of the info we'll need here
44
- try {
45
- domain = await (0, getEip712Domain_1.getEip712Domain)(tokenAddress, chainId, provider);
46
- }
47
- catch {
48
- console.debug(`[checkTokenIsPermittable] Couldn't fetch eip712domain for token ${tokenAddress}`);
49
- }
50
- let tokenName = domain?.name;
51
- try {
52
- if (!tokenName) {
53
- tokenName = await (0, getTokenName_1.getTokenName)(tokenAddress, chainId, provider);
54
- }
55
- }
56
- catch (e) {
57
- if (/ETIMEDOUT/.test(e) && !tokenName) {
58
- // Network issue or another temporary failure, return error
59
- return { error: `Failed to fetch token name from contract. RPC connection error` };
60
- }
61
- console.debug(`[checkTokenIsPermittable] Couldn't fetch token name from the contract for token ${tokenAddress}, using provided '${tokenName}'`, e);
62
- }
63
- if (!tokenName) {
64
- const error = `Token name could not be determined for ${tokenAddress}`;
65
- return { error };
66
- }
67
- let nonce;
68
- try {
69
- nonce = await eip2612PermitUtils.getTokenNonce(tokenAddress, owner);
70
- }
71
- catch (e) {
72
- if (e === 'nonce not supported' || e.message === 'nonce is NaN') {
73
- console.debug(`[checkTokenIsPermittable] Not a permittable token ${tokenAddress} - ${tokenName}`, e?.message || e);
74
- // Here we know it's not supported, return unsupported
75
- // See https://github.com/1inch/permit-signed-approvals-utils/blob/b190197a45c3289867ee4e6da93f10dea51ef276/src/eip-2612-permit.utils.ts#L309
76
- // and https://github.com/1inch/permit-signed-approvals-utils/blob/b190197a45c3289867ee4e6da93f10dea51ef276/src/eip-2612-permit.utils.ts#L325
77
- return { ...UNSUPPORTED, name: tokenName };
78
- }
79
- console.debug(`[checkTokenIsPermittable] Failed to get nonce for ${tokenAddress} - ${tokenName}`, e);
80
- // Otherwise, it might have been a network issue or another temporary failure, return error
81
- return { error: e.message || e.toString() };
82
- }
83
- let version = domain?.version;
84
- if (version === undefined) {
85
- // If the token does not outright fails when calling with the `version` value
86
- // returned by the contract, fetch it.
87
- try {
88
- // Required by USDC-mainnet as its version is `2`.
89
- // There might be other tokens that need this as well.
90
- version = await (0, getTokenPermitVersion_1.getTokenPermitVersion)(tokenAddress, provider);
91
- }
92
- catch (e) {
93
- // Not a problem, we can (try to) continue without it, and will default to `1` (part of the 1inch lib)
94
- console.debug(`[checkTokenIsPermittable] Failed to get version for ${tokenAddress} - ${tokenName}`, e);
95
- }
96
- }
97
- const baseParams = {
98
- chainId,
99
- eip2612PermitUtils,
100
- nonce,
101
- spender,
102
- tokenAddress,
103
- tokenName,
104
- walletAddress: owner,
105
- version,
106
- minGasLimit,
107
- amount,
108
- };
109
- try {
110
- // Try to estimate with eip-2612 first
111
- return await estimateTokenPermit({ ...baseParams, type: 'eip-2612', provider });
112
- }
113
- catch (e) {
114
- // Not eip-2612, try dai-like
115
- try {
116
- const isDaiLike = await isDaiLikeTypeHash(tokenAddress, eip2612PermitUtils);
117
- if (!isDaiLike) {
118
- // These might be supported, as they have nonces, but we don't know why the permit call fails
119
- // TODO: further investigate this kind of token
120
- // For now mark them as unsupported and don't check it again
121
- if (/invalid signature/.test(e) || e?.code === 'UNPREDICTABLE_GAS_LIMIT') {
122
- console.debug(`[checkTokenIsPermittable] Token ${tokenAddress} - ${tokenName} might be permittable, but it's not supported for now. Reason:`, e?.reason);
123
- return { ...UNSUPPORTED, name: tokenName };
124
- }
125
- // Maybe a temporary failure
126
- console.debug(`[checkTokenIsPermittable] Failed to estimate eip-2612 permit for ${tokenAddress} - ${tokenName}`, e);
127
- return { error: e.message || e.toString() };
128
- }
129
- return await estimateTokenPermit({ ...baseParams, type: 'dai-like', provider });
130
- }
131
- catch (e) {
132
- // Not dai-like either, return error
133
- console.debug(`[checkTokenIsPermittable] Failed to estimate dai-like permit for ${tokenAddress} - ${tokenName}`, e);
134
- return { error: e.message || e.toString() };
135
- }
136
- }
137
- }
138
- async function estimateTokenPermit(params) {
139
- const { provider, walletAddress, tokenAddress, tokenName, type, version, minGasLimit = const_1.DEFAULT_MIN_GAS_LIMIT, } = params;
140
- const getCallDataFn = type === 'eip-2612' ? getEip2612CallData : getDaiLikeCallData;
141
- const data = await getCallDataFn(params);
142
- if (!data) {
143
- return { ...UNSUPPORTED, name: tokenName };
144
- }
145
- const estimatedGas = await provider.estimateGas({
146
- data,
147
- from: walletAddress,
148
- to: tokenAddress,
149
- });
150
- const gasLimit = estimatedGas.toNumber();
151
- return gasLimit > minGasLimit
152
- ? {
153
- type,
154
- version,
155
- name: tokenName,
156
- }
157
- : { ...UNSUPPORTED, name: tokenName };
158
- }
159
- async function getEip2612CallData(params) {
160
- const { eip2612PermitUtils, walletAddress, spender, nonce, chainId, tokenName, tokenAddress, version, amount } = params;
161
- return (0, buildPermitCallData_1.buildEip2612PermitCallData)({
162
- eip2612Utils: eip2612PermitUtils,
163
- callDataParams: [
164
- {
165
- ...EIP_2612_PERMIT_PARAMS,
166
- owner: walletAddress,
167
- spender,
168
- nonce,
169
- value: amount ? amount.toString() : const_1.DEFAULT_PERMIT_VALUE.toString(),
170
- },
171
- +chainId,
172
- tokenName,
173
- tokenAddress,
174
- version,
175
- ],
176
- });
177
- }
178
- async function isDaiLikeTypeHash(tokenAddress, eip2612PermitUtils) {
179
- const permitTypeHash = await eip2612PermitUtils.getPermitTypeHash(tokenAddress);
180
- return permitTypeHash === __1.oneInchPermitUtilsConsts.DAI_LIKE_PERMIT_TYPEHASH;
181
- }
182
- async function getDaiLikeCallData(params) {
183
- const { eip2612PermitUtils, tokenAddress, walletAddress, spender, nonce, chainId, tokenName, version } = params;
184
- const permitTypeHash = await eip2612PermitUtils.getPermitTypeHash(tokenAddress);
185
- if (permitTypeHash === __1.oneInchPermitUtilsConsts.DAI_LIKE_PERMIT_TYPEHASH) {
186
- return (0, buildPermitCallData_1.buildDaiLikePermitCallData)({
187
- eip2612Utils: eip2612PermitUtils,
188
- callDataParams: [
189
- {
190
- ...DAI_LIKE_PERMIT_PARAMS,
191
- holder: walletAddress,
192
- spender,
193
- nonce,
194
- },
195
- chainId,
196
- tokenName,
197
- tokenAddress,
198
- version,
199
- ],
200
- });
201
- }
202
- return false;
203
- }
204
- //# sourceMappingURL=getTokenPermitInfo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTokenPermitInfo.js","sourceRoot":"","sources":["../../../../../libs/permit-utils/src/lib/getTokenPermitInfo.ts"],"names":[],"mappings":"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"}
package/src/types.js DELETED
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
package/src/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../libs/permit-utils/src/types.ts"],"names":[],"mappings":""}
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PermitProviderConnector = void 0;
4
- const abi_1 = require("@ethersproject/abi");
5
- const bignumber_1 = require("@ethersproject/bignumber");
6
- const getContract_1 = require("./getContract");
7
- class PermitProviderConnector {
8
- provider;
9
- walletSigner;
10
- constructor(provider, walletSigner) {
11
- this.provider = provider;
12
- this.walletSigner = walletSigner;
13
- }
14
- contractEncodeABI(abi, address, methodName, methodParams) {
15
- const contract = (0, getContract_1.getContract)(address || '', abi, this.provider);
16
- return contract.interface.encodeFunctionData(methodName, methodParams);
17
- }
18
- signTypedData(_walletAddress, typedData, _typedDataHash) {
19
- // Removes `EIP712Domain` as it's already part of EIP712 (see https://ethereum.stackexchange.com/a/151930/55204)
20
- // and EthersJS complains when a type is not needed (see https://github.com/ethers-io/ethers.js/discussions/4000)
21
- const types = Object.keys(typedData.types).reduce((acc, type) => {
22
- if (type !== 'EIP712Domain') {
23
- acc[type] = typedData.types[type];
24
- }
25
- return acc;
26
- }, {});
27
- const signer = this.walletSigner || this.provider.getSigner();
28
- return signer._signTypedData(typedData.domain, types, typedData.message);
29
- }
30
- ethCall(contractAddress, callData) {
31
- return this.provider.call({
32
- to: contractAddress,
33
- data: callData,
34
- });
35
- }
36
- decodeABIParameter(type, hex) {
37
- return abi_1.defaultAbiCoder.decode([type], hex)[0];
38
- }
39
- decodeABIParameters(types, hex) {
40
- const decodedValues = abi_1.defaultAbiCoder.decode(types, hex);
41
- // Ethersjs decodes numbers as BigNumber instances
42
- // However, 1inch utils do not deal with BigNumber instances,
43
- // so we need this mess to convert them to hex strings, which 1inch understands
44
- // TODO: Any way to make this typing mess any cleaner?
45
- if (decodedValues && typeof decodedValues === 'object') {
46
- const copy = {};
47
- Object.keys(decodedValues).forEach((key) => {
48
- // @ts-ignore
49
- const value = decodedValues[key];
50
- if (bignumber_1.BigNumber.isBigNumber(value)) {
51
- // @ts-ignore
52
- copy[key] = value.toHexString();
53
- }
54
- else {
55
- copy[key] = value;
56
- }
57
- });
58
- return copy;
59
- }
60
- return decodedValues;
61
- }
62
- }
63
- exports.PermitProviderConnector = PermitProviderConnector;
64
- //# sourceMappingURL=PermitProviderConnector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PermitProviderConnector.js","sourceRoot":"","sources":["../../../../../libs/permit-utils/src/utils/PermitProviderConnector.ts"],"names":[],"mappings":";;;AAAA,4CAA+D;AAE/D,wDAAoD;AAIpD,+CAA2C;AAI3C,MAAa,uBAAuB;IAExB;IACA;IAFV,YACU,QAAyB,EACzB,YAAiC;QADjC,aAAQ,GAAR,QAAQ,CAAiB;QACzB,iBAAY,GAAZ,YAAY,CAAqB;IACxC,CAAC;IAEJ,iBAAiB,CAAC,GAAc,EAAE,OAAsB,EAAE,UAAkB,EAAE,YAAuB;QACnG,MAAM,QAAQ,GAAG,IAAA,yBAAW,EAAC,OAAO,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE/D,OAAO,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACxE,CAAC;IAED,aAAa,CAAC,cAAsB,EAAE,SAA0B,EAAE,cAAsB;QACtF,gHAAgH;QAChH,iHAAiH;QACjH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAmC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChG,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACnC,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;QAE7D,OAAO,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,CAAC,eAAuB,EAAE,QAAgB;QAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACxB,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;IACJ,CAAC;IAED,kBAAkB,CAAI,IAAY,EAAE,GAAW;QAC7C,OAAO,qBAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,mBAAmB,CAAI,KAAiB,EAAE,GAAW;QACnD,MAAM,aAAa,GAAG,qBAAe,CAAC,MAAM,CAAC,KAA0C,EAAE,GAAG,CAAM,CAAA;QAElG,kDAAkD;QAClD,6DAA6D;QAC7D,+EAA+E;QAC/E,sDAAsD;QACtD,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,GAA4B,EAAE,CAAA;YAExC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzC,aAAa;gBACb,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;gBAChC,IAAI,qBAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjC,aAAa;oBACb,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;gBACjC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBACnB,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,OAAO,IAAS,CAAA;QAClB,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;CACF;AAhED,0DAgEC"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildEip2612PermitCallData = buildEip2612PermitCallData;
4
- exports.buildDaiLikePermitCallData = buildDaiLikePermitCallData;
5
- const __1 = require("..");
6
- async function buildEip2612PermitCallData({ eip2612Utils, callDataParams, }) {
7
- const [permitParams, chainId, tokenName, ...rest] = callDataParams;
8
- const callData = await eip2612Utils.buildPermitCallData(permitParams, chainId, tokenName, ...rest);
9
- // For some reason, the method above removes the permit selector prefix
10
- // https://github.com/1inch/permit-signed-approvals-utils/blob/master/src/eip-2612-permit.utils.ts#L92
11
- // Adding it back
12
- return callData.replace('0x', __1.oneInchPermitUtilsConsts.EIP_2612_PERMIT_SELECTOR);
13
- }
14
- async function buildDaiLikePermitCallData({ eip2612Utils, callDataParams, }) {
15
- const callData = await eip2612Utils.buildDaiLikePermitCallData(...callDataParams);
16
- // Same as above, but for dai like
17
- // https://github.com/1inch/permit-signed-approvals-utils/blob/master/src/eip-2612-permit.utils.ts#L140
18
- return callData.replace('0x', __1.oneInchPermitUtilsConsts.DAI_PERMIT_SELECTOR);
19
- }
20
- //# sourceMappingURL=buildPermitCallData.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildPermitCallData.js","sourceRoot":"","sources":["../../../../../libs/permit-utils/src/utils/buildPermitCallData.ts"],"names":[],"mappings":";;AAGA,gEAWC;AAED,gEASC;AAzBD,0BAA6C;AAGtC,KAAK,UAAU,0BAA0B,CAAC,EAC/C,YAAY,EACZ,cAAc,GACmB;IACjC,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,cAAc,CAAA;IAElE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAA;IAClG,uEAAuE;IACvE,sGAAsG;IACtG,iBAAiB;IACjB,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,4BAAwB,CAAC,wBAAwB,CAAC,CAAA;AAClF,CAAC;AAEM,KAAK,UAAU,0BAA0B,CAAC,EAC/C,YAAY,EACZ,cAAc,GACmB;IACjC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,0BAA0B,CAAC,GAAG,cAAc,CAAC,CAAA;IAEjF,kCAAkC;IAClC,uGAAuG;IACvG,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,4BAAwB,CAAC,mBAAmB,CAAC,CAAA;AAC7E,CAAC"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getContract = getContract;
4
- const contracts_1 = require("@ethersproject/contracts");
5
- function getContract(address, abi, provider) {
6
- return new contracts_1.Contract(address, abi, provider);
7
- }
8
- //# sourceMappingURL=getContract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getContract.js","sourceRoot":"","sources":["../../../../../libs/permit-utils/src/utils/getContract.ts"],"names":[],"mappings":";;AAGA,kCAEC;AALD,wDAAsE;AAGtE,SAAgB,WAAW,CAAC,OAAe,EAAE,GAAsB,EAAE,QAAyB;IAC5F,OAAO,IAAI,oBAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;AAC7C,CAAC"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEip712Domain = getEip712Domain;
4
- const tslib_1 = require("tslib");
5
- const address_1 = require("@ethersproject/address");
6
- const getContract_1 = require("./getContract");
7
- const erc20_json_1 = tslib_1.__importDefault(require("../abi/erc20.json"));
8
- // See https://eips.ethereum.org/EIPS/eip-5267
9
- async function getEip712Domain(tokenAddress, chainId, provider) {
10
- const formattedAddress = (0, address_1.getAddress)(tokenAddress);
11
- const erc20Contract = (0, getContract_1.getContract)(formattedAddress, erc20_json_1.default, provider);
12
- const eip5267Domain = await erc20Contract.callStatic['eip712Domain']();
13
- return processDomain(eip5267Domain, chainId, tokenAddress);
14
- }
15
- /** Retrieves the EIP-712 domain of a contract using EIP-5267 without extensions.
16
- *
17
- * Derived from https://eips.ethereum.org/EIPS/eip-5267 reference Javascript implementation
18
- **/
19
- async function processDomain(domain, chainId, address) {
20
- const { extensions, ...rest } = domain;
21
- if (extensions.length > 0) {
22
- throw Error('Extensions not implemented');
23
- }
24
- if (rest.chainId && chainId !== parseInt(rest.chainId, 16)) {
25
- throw Error(`ChainId mismatch. Received: '${rest.chainId}', expected: '${chainId}'`);
26
- }
27
- if (rest.verifyingContract && address.toLowerCase() !== rest.verifyingContract.toLowerCase()) {
28
- throw Error(`Address mismatch. Received: '${rest.verifyingContract}', expected: '${address}'`);
29
- }
30
- return buildBasicDomain(rest);
31
- }
32
- const FIELD_NAMES = ['name', 'version', 'chainId', 'verifyingContract', 'salt'];
33
- /** Builds a domain object without extensions based on the return values of `eip712Domain()`. */
34
- function buildBasicDomain(domain) {
35
- // Will be a 5bit number as a hex string
36
- const fields = parseInt(domain.fields, 16);
37
- return FIELD_NAMES.reduce((acc, field, i) => {
38
- if (fields & (1 << i)) {
39
- acc[field] = domain[field];
40
- }
41
- return acc;
42
- }, {});
43
- }
44
- //# sourceMappingURL=getEip712Domain.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getEip712Domain.js","sourceRoot":"","sources":["../../../../../libs/permit-utils/src/utils/getEip712Domain.ts"],"names":[],"mappings":";;AASA,0CAWC;;AApBD,oDAAmD;AAGnD,+CAA2C;AAE3C,2EAAwC;AAExC,8CAA8C;AAEvC,KAAK,UAAU,eAAe,CACnC,YAAoB,EACpB,OAAe,EACf,QAAyB;IAEzB,MAAM,gBAAgB,GAAG,IAAA,oBAAU,EAAC,YAAY,CAAC,CAAA;IACjD,MAAM,aAAa,GAAG,IAAA,yBAAW,EAAC,gBAAgB,EAAE,oBAAQ,EAAE,QAAQ,CAAC,CAAA;IAEvE,MAAM,aAAa,GAA4B,MAAM,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAA;IAE/F,OAAO,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;AAC5D,CAAC;AAcD;;;IAGI;AACJ,KAAK,UAAU,aAAa,CAAC,MAA+B,EAAE,OAAe,EAAE,OAAe;IAC5F,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;IAEtC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3D,MAAM,KAAK,CAAC,gCAAgC,IAAI,CAAC,OAAO,iBAAiB,OAAO,GAAG,CAAC,CAAA;IACtF,CAAC;IAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7F,MAAM,KAAK,CAAC,gCAAgC,IAAI,CAAC,iBAAiB,iBAAiB,OAAO,GAAG,CAAC,CAAA;IAChG,CAAC;IAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAA;AAE/E,gGAAgG;AAChG,SAAS,gBAAgB,CAAC,MAAmD;IAC3E,wCAAwC;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAE1C,OAAO,WAAW,CAAC,MAAM,CAAe,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxD,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,KAA2B,CAAC,GAAG,MAAM,CAAC,KAAgD,CAAC,CAAA;QAC7F,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC"}
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPermitDeadline = getPermitDeadline;
4
- const const_1 = require("../const");
5
- // TODO: Add proper return type annotation
6
- // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
7
- function getPermitDeadline() {
8
- return Math.ceil((Date.now() + const_1.DEFAULT_PERMIT_DURATION) / 1000);
9
- }
10
- //# sourceMappingURL=getPermitDeadline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getPermitDeadline.js","sourceRoot":"","sources":["../../../../../libs/permit-utils/src/utils/getPermitDeadline.ts"],"names":[],"mappings":";;AAIA,8CAEC;AAND,oCAAkD;AAElD,0CAA0C;AAC1C,4EAA4E;AAC5E,SAAgB,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,+BAAuB,CAAC,GAAG,IAAI,CAAC,CAAA;AACjE,CAAC"}