@lit-protocol/vincent-policy-send-counter 0.0.7-mma → 0.0.11-mma

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 (64) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/CONTRIBUTING.md +6 -6
  3. package/README.md +1 -1
  4. package/dist/CHANGELOG.md +14 -0
  5. package/dist/CONTRIBUTING.md +6 -6
  6. package/dist/README.md +1 -1
  7. package/dist/package.json +2 -2
  8. package/dist/src/generated/lit-action.js +2 -2
  9. package/dist/src/generated/vincent-bundled-policy.d.ts +183 -144
  10. package/dist/src/generated/vincent-bundled-policy.d.ts.map +1 -1
  11. package/dist/src/generated/vincent-policy-metadata.json +1 -1
  12. package/dist/src/lib/abi/counterSignatures.d.ts +82 -0
  13. package/dist/src/lib/abi/counterSignatures.d.ts.map +1 -0
  14. package/dist/src/lib/abi/counterSignatures.js +100 -0
  15. package/dist/src/lib/abi/counterSignatures.js.map +1 -0
  16. package/dist/src/lib/helpers/index.d.ts +26 -0
  17. package/dist/src/lib/helpers/index.d.ts.map +1 -0
  18. package/dist/src/lib/helpers/index.js +107 -0
  19. package/dist/src/lib/helpers/index.js.map +1 -0
  20. package/dist/src/lib/schemas.d.ts +115 -64
  21. package/dist/src/lib/schemas.d.ts.map +1 -1
  22. package/dist/src/lib/schemas.js +75 -36
  23. package/dist/src/lib/schemas.js.map +1 -1
  24. package/dist/src/lib/vincent-policy.d.ts +183 -144
  25. package/dist/src/lib/vincent-policy.d.ts.map +1 -1
  26. package/dist/src/lib/vincent-policy.js +154 -73
  27. package/dist/src/lib/vincent-policy.js.map +1 -1
  28. package/package.json +4 -4
  29. package/dist/src/lib/policy-helpers/calculate-usd-value.d.ts +0 -7
  30. package/dist/src/lib/policy-helpers/calculate-usd-value.d.ts.map +0 -1
  31. package/dist/src/lib/policy-helpers/calculate-usd-value.js +0 -22
  32. package/dist/src/lib/policy-helpers/calculate-usd-value.js.map +0 -1
  33. package/dist/src/lib/policy-helpers/check-spending-limit.d.ts +0 -16
  34. package/dist/src/lib/policy-helpers/check-spending-limit.d.ts.map +0 -1
  35. package/dist/src/lib/policy-helpers/check-spending-limit.js +0 -29
  36. package/dist/src/lib/policy-helpers/check-spending-limit.js.map +0 -1
  37. package/dist/src/lib/policy-helpers/get-eth-usd-price.d.ts +0 -6
  38. package/dist/src/lib/policy-helpers/get-eth-usd-price.d.ts.map +0 -1
  39. package/dist/src/lib/policy-helpers/get-eth-usd-price.js +0 -22
  40. package/dist/src/lib/policy-helpers/get-eth-usd-price.js.map +0 -1
  41. package/dist/src/lib/policy-helpers/get-token-amount-in-usd.d.ts +0 -10
  42. package/dist/src/lib/policy-helpers/get-token-amount-in-usd.d.ts.map +0 -1
  43. package/dist/src/lib/policy-helpers/get-token-amount-in-usd.js +0 -68
  44. package/dist/src/lib/policy-helpers/get-token-amount-in-usd.js.map +0 -1
  45. package/dist/src/lib/policy-helpers/get-uniswap-quote.d.ts +0 -15
  46. package/dist/src/lib/policy-helpers/get-uniswap-quote.d.ts.map +0 -1
  47. package/dist/src/lib/policy-helpers/get-uniswap-quote.js +0 -114
  48. package/dist/src/lib/policy-helpers/get-uniswap-quote.js.map +0 -1
  49. package/dist/src/lib/policy-helpers/index.d.ts +0 -7
  50. package/dist/src/lib/policy-helpers/index.d.ts.map +0 -1
  51. package/dist/src/lib/policy-helpers/index.js +0 -10
  52. package/dist/src/lib/policy-helpers/index.js.map +0 -1
  53. package/dist/src/lib/policy-helpers/send-spend-tx.d.ts +0 -9
  54. package/dist/src/lib/policy-helpers/send-spend-tx.d.ts.map +0 -1
  55. package/dist/src/lib/policy-helpers/send-spend-tx.js +0 -144
  56. package/dist/src/lib/policy-helpers/send-spend-tx.js.map +0 -1
  57. package/dist/src/lib/policy-helpers/sign-tx.d.ts +0 -3
  58. package/dist/src/lib/policy-helpers/sign-tx.d.ts.map +0 -1
  59. package/dist/src/lib/policy-helpers/sign-tx.js +0 -28
  60. package/dist/src/lib/policy-helpers/sign-tx.js.map +0 -1
  61. package/dist/src/lib/policy-helpers/spending-limit-contract.d.ts +0 -4
  62. package/dist/src/lib/policy-helpers/spending-limit-contract.d.ts.map +0 -1
  63. package/dist/src/lib/policy-helpers/spending-limit-contract.js +0 -22
  64. package/dist/src/lib/policy-helpers/spending-limit-contract.js.map +0 -1
@@ -2,11 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.vincentPolicy = void 0;
4
4
  const vincent_ability_sdk_1 = require("@lit-protocol/vincent-ability-sdk");
5
- const send_spend_tx_1 = require("./policy-helpers/send-spend-tx");
6
- const check_spending_limit_1 = require("./policy-helpers/check-spending-limit");
5
+ const vincent_scaffold_sdk_1 = require("@lit-protocol/vincent-scaffold-sdk");
6
+ const index_1 = require("./helpers/index");
7
7
  const schemas_1 = require("./schemas");
8
+ const counterSignatures_1 = require("./abi/counterSignatures");
8
9
  exports.vincentPolicy = (0, vincent_ability_sdk_1.createVincentPolicy)({
9
- packageName: '@lit-protocol/vincent-policy-spending-limit',
10
+ packageName: '@lit-protocol/vincent-policy-send-counter-limit',
10
11
  abilityParamsSchema: schemas_1.abilityParamsSchema,
11
12
  userParamsSchema: schemas_1.userParamsSchema,
12
13
  commitParamsSchema: schemas_1.commitParamsSchema,
@@ -17,55 +18,81 @@ exports.vincentPolicy = (0, vincent_ability_sdk_1.createVincentPolicy)({
17
18
  commitAllowResultSchema: schemas_1.commitAllowResultSchema,
18
19
  commitDenyResultSchema: schemas_1.commitDenyResultSchema,
19
20
  precheck: async ({ abilityParams, userParams }, { allow, deny, appId, delegation: { delegatorPkpInfo } }) => {
20
- console.log('Prechecking spending limit policy', { abilityParams, userParams });
21
- const { ethAddress } = delegatorPkpInfo;
22
- const { buyAmount, ethRpcUrl, rpcUrlForUniswap, chainIdForUniswap, tokenAddress, tokenDecimals, } = abilityParams;
23
- const { maxDailySpendingLimitInUsdCents } = userParams;
24
- const { buyAmountAllowed, buyAmountInUsd, adjustedMaxDailySpendingLimit } = await (0, check_spending_limit_1.checkIfBuyAmountAllowed)({
25
- ethRpcUrl,
26
- rpcUrlForUniswap,
27
- chainIdForUniswap,
28
- tokenAddress: tokenAddress,
29
- tokenDecimals,
30
- buyAmount,
31
- maxDailySpendingLimitInUsdCents,
32
- pkpEthAddress: ethAddress,
21
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/precheck] 🔍 POLICY PRECHECK CALLED');
22
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/precheck] 🔍 Policy precheck params:', {
23
+ abilityParams,
24
+ userParams,
25
+ ethAddress: delegatorPkpInfo.ethAddress,
33
26
  appId,
34
27
  });
35
- return buyAmountAllowed
36
- ? allow({
37
- maxSpendingLimitInUsd: Number(adjustedMaxDailySpendingLimit),
38
- buyAmountInUsd: Number(buyAmountInUsd),
39
- })
40
- : deny({
41
- reason: 'Attempted buy amount exceeds daily limit',
42
- maxSpendingLimitInUsd: Number(adjustedMaxDailySpendingLimit),
43
- buyAmountInUsd: Number(buyAmountInUsd),
28
+ // Only use what we actually need - no defaults in policy logic
29
+ const { maxSends, timeWindowSeconds } = userParams;
30
+ const { ethAddress } = delegatorPkpInfo;
31
+ try {
32
+ // Convert BigInt to number for helper function
33
+ const maxSendsNum = Number(maxSends);
34
+ const timeWindowSecondsNum = Number(timeWindowSeconds);
35
+ // Check current send limit for the user
36
+ const limitCheck = await (0, index_1.checkSendLimit)(ethAddress, maxSendsNum, timeWindowSecondsNum);
37
+ if (!limitCheck.allowed) {
38
+ const denyResult = {
39
+ reason: `Send limit exceeded. Maximum ${Number(maxSends)} sends per ${Number(timeWindowSeconds)} seconds. Try again in ${limitCheck.secondsUntilReset} seconds.`,
40
+ currentCount: limitCheck.currentCount,
41
+ maxSends: Number(maxSends),
42
+ secondsUntilReset: limitCheck.secondsUntilReset || 0,
43
+ };
44
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/precheck] 🚫 POLICY PRECHECK DENYING REQUEST:');
45
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/precheck] 🚫 Deny result:', JSON.stringify(denyResult, null, 2));
46
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/precheck] 🚫 Current count:', limitCheck.currentCount);
47
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/precheck] 🚫 Max sends:', Number(maxSends));
48
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/precheck] 🚫 Limit check result:', JSON.stringify(limitCheck, null, 2));
49
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/precheck] 🚫 About to call deny() function...');
50
+ const denyResponse = deny(denyResult);
51
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/precheck] 🚫 POLICY PRECHECK DENY RESPONSE:', JSON.stringify(denyResponse, null, 2));
52
+ return denyResponse;
53
+ }
54
+ const allowResult = {
55
+ currentCount: limitCheck.currentCount,
56
+ maxSends: Number(maxSends),
57
+ remainingSends: limitCheck.remainingSends,
58
+ timeWindowSeconds: Number(timeWindowSeconds),
59
+ };
60
+ console.log('[SendLimitPolicy/precheck] ✅ POLICY PRECHECK ALLOWING REQUEST:');
61
+ console.log('[SendLimitPolicy/precheck] ✅ Allow result:', JSON.stringify(allowResult, null, 2));
62
+ console.log('[SendLimitPolicy/precheck] ✅ Current count:', limitCheck.currentCount);
63
+ console.log('[SendLimitPolicy/precheck] ✅ Max sends:', Number(maxSends));
64
+ console.log('[SendLimitPolicy/precheck] ✅ Remaining sends:', limitCheck.remainingSends);
65
+ const allowResponse = allow(allowResult);
66
+ console.log('[SendLimitPolicy/precheck] ✅ POLICY PRECHECK ALLOW RESPONSE:', JSON.stringify(allowResponse, null, 2));
67
+ return allowResponse;
68
+ }
69
+ catch (error) {
70
+ console.error('[SendLimitPolicy/precheck] Error in precheck:', error);
71
+ return deny({
72
+ reason: `Policy error: ${error instanceof Error ? error.message : 'Unknown error'}`,
73
+ currentCount: 0,
74
+ maxSends: Number(maxSends),
75
+ secondsUntilReset: 0,
44
76
  });
77
+ }
45
78
  },
46
79
  evaluate: async ({ abilityParams, userParams }, { allow, deny, appId, delegation: { delegatorPkpInfo } }) => {
80
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/evaluate] Evaluating send limit policy', {
81
+ abilityParams,
82
+ userParams,
83
+ });
84
+ // Only use what we actually need - no defaults in policy logic
85
+ const { maxSends, timeWindowSeconds } = userParams;
47
86
  const { ethAddress } = delegatorPkpInfo;
48
- console.log('Evaluating spending limit policy', JSON.stringify(abilityParams));
49
- const { buyAmount, ethRpcUrl, rpcUrlForUniswap, chainIdForUniswap, tokenAddress, tokenDecimals, } = abilityParams;
50
- const { maxDailySpendingLimitInUsdCents } = userParams;
51
- const checkBuyAmountResponse = await Lit.Actions.runOnce({ waitForResponse: true, name: 'checkBuyAmount' }, async () => {
87
+ const checkSendResponse = await Lit.Actions.runOnce({ waitForResponse: true, name: 'checkSendLimit' }, async () => {
52
88
  try {
53
- const { buyAmountAllowed, buyAmountInUsd, adjustedMaxDailySpendingLimit } = await (0, check_spending_limit_1.checkIfBuyAmountAllowed)({
54
- ethRpcUrl,
55
- rpcUrlForUniswap,
56
- chainIdForUniswap,
57
- tokenAddress: tokenAddress,
58
- tokenDecimals,
59
- buyAmount,
60
- maxDailySpendingLimitInUsdCents,
61
- pkpEthAddress: ethAddress,
62
- appId,
63
- });
89
+ // Convert BigInt to number for helper function
90
+ const maxSendsNum = Number(maxSends);
91
+ const timeWindowSecondsNum = Number(timeWindowSeconds);
92
+ const limitCheck = await (0, index_1.checkSendLimit)(ethAddress, maxSendsNum, timeWindowSecondsNum);
64
93
  return JSON.stringify({
65
94
  status: 'success',
66
- buyAmountAllowed,
67
- buyAmountInUsd: buyAmountInUsd.toString(),
68
- adjustedMaxDailySpendingLimit: adjustedMaxDailySpendingLimit.toString(),
95
+ ...limitCheck,
69
96
  });
70
97
  }
71
98
  catch (error) {
@@ -75,43 +102,97 @@ exports.vincentPolicy = (0, vincent_ability_sdk_1.createVincentPolicy)({
75
102
  });
76
103
  }
77
104
  });
78
- const parsedCheckBuyAmountResponse = JSON.parse(checkBuyAmountResponse);
79
- if (parsedCheckBuyAmountResponse.status === 'error') {
105
+ const parsedResponse = JSON.parse(checkSendResponse);
106
+ if (parsedResponse.status === 'error') {
80
107
  return deny({
81
- reason: `Error checking buy amount: ${parsedCheckBuyAmountResponse.error} (evaluate)`,
108
+ reason: `Error checking send limit: ${parsedResponse.error} (evaluate)`,
109
+ currentCount: 0,
110
+ maxSends: Number(maxSends),
111
+ secondsUntilReset: 0,
112
+ timeWindowSeconds: Number(timeWindowSeconds),
82
113
  });
83
114
  }
84
- const { buyAmountAllowed, buyAmountInUsd, adjustedMaxDailySpendingLimit } = parsedCheckBuyAmountResponse;
85
- console.log('Evaluated spending limit policy', {
86
- buyAmountAllowed,
87
- buyAmountInUsd,
88
- adjustedMaxDailySpendingLimit,
89
- });
90
- return buyAmountAllowed
91
- ? allow({
92
- maxSpendingLimitInUsd: Number(adjustedMaxDailySpendingLimit),
93
- buyAmountInUsd: Number(buyAmountInUsd),
94
- })
95
- : deny({
96
- reason: 'Attempted buy amount exceeds daily limit',
97
- maxSpendingLimitInUsd: Number(adjustedMaxDailySpendingLimit),
98
- buyAmountInUsd: Number(buyAmountInUsd),
115
+ const { allowed, currentCount, remainingSends, secondsUntilReset } = parsedResponse;
116
+ if (!allowed) {
117
+ return deny({
118
+ reason: `Send limit exceeded during evaluation. Maximum ${Number(maxSends)} sends per ${Number(timeWindowSeconds)} seconds. Try again in ${secondsUntilReset} seconds.`,
119
+ currentCount,
120
+ maxSends: Number(maxSends),
121
+ secondsUntilReset: secondsUntilReset || 0,
122
+ timeWindowSeconds: Number(timeWindowSeconds),
99
123
  });
100
- },
101
- commit: async (params, { allow, appId, delegation: { delegatorPkpInfo } }) => {
102
- const { ethAddress, publicKey } = delegatorPkpInfo;
103
- const { amountSpentUsd, maxSpendingLimitInUsd } = params;
104
- const spendTxHash = await (0, send_spend_tx_1.sendSpendTx)({
105
- appId,
106
- amountSpentUsd,
107
- maxSpendingLimitInUsd,
108
- spendingLimitDuration: 86400, // number of seconds in a day
109
- pkpEthAddress: ethAddress,
110
- pkpPubKey: publicKey,
124
+ }
125
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/evaluate] Evaluated send limit policy', {
126
+ currentCount,
127
+ maxSends,
128
+ remainingSends,
111
129
  });
112
130
  return allow({
113
- spendTxHash,
131
+ currentCount,
132
+ maxSends: Number(maxSends),
133
+ remainingSends,
134
+ timeWindowSeconds: Number(timeWindowSeconds),
114
135
  });
115
136
  },
137
+ commit: async ({ currentCount, maxSends, timeWindowSeconds }, { allow, appId, delegation: { delegatorPkpInfo } }) => {
138
+ const { ethAddress } = delegatorPkpInfo;
139
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/commit] 🚀 IM COMMITING!');
140
+ // Check if we need to reset the counter first
141
+ const checkResponse = await (0, index_1.checkSendLimit)(ethAddress, maxSends, Number(timeWindowSeconds));
142
+ if (checkResponse.shouldReset) {
143
+ console.log(`[@lit-protocol/vincent-policy-send-counter-limit/commit] Resetting counter for ${ethAddress} due to time window expiration`);
144
+ try {
145
+ await (0, index_1.resetSendCounter)(ethAddress, delegatorPkpInfo.publicKey);
146
+ console.log(`[@lit-protocol/vincent-policy-send-counter-limit/commit] Counter reset successful for ${ethAddress}`);
147
+ }
148
+ catch (error) {
149
+ console.warn(`Counter reset failed for ${ethAddress}:`, error);
150
+ // Continue anyway, the counter will still work
151
+ }
152
+ }
153
+ try {
154
+ // Record the send to the smart contract
155
+ console.log(`[@lit-protocol/vincent-policy-send-counter-limit/commit] Recording send to contract for ${ethAddress} (appId: ${appId})`);
156
+ // Execute the contract call to increment the counter directly
157
+ console.log(`[@lit-protocol/vincent-policy-send-counter-limit/commit] Calling incrementByAddress(${ethAddress}) on contract ${counterSignatures_1.counterSignatures.address}`);
158
+ const provider = await Lit.Actions.getRpcUrl({ chain: 'yellowstone' });
159
+ // Call contract directly without Lit.Actions.runOnce wrapper
160
+ const txHash = await vincent_scaffold_sdk_1.laUtils.transaction.handler.contractCall({
161
+ provider,
162
+ pkpPublicKey: delegatorPkpInfo.publicKey,
163
+ callerAddress: ethAddress,
164
+ abi: [counterSignatures_1.counterSignatures.methods.increment],
165
+ contractAddress: counterSignatures_1.counterSignatures.address,
166
+ functionName: 'increment',
167
+ args: [],
168
+ overrides: {
169
+ gasLimit: 100000,
170
+ },
171
+ });
172
+ const newCount = currentCount + 1;
173
+ const remainingSends = Number(maxSends) - newCount;
174
+ console.log('[@lit-protocol/vincent-policy-send-counter-limit/commit] Policy commit successful', {
175
+ ethAddress,
176
+ newCount,
177
+ maxSends,
178
+ remainingSends,
179
+ txHash,
180
+ });
181
+ return allow({
182
+ recorded: true,
183
+ newCount,
184
+ remainingSends: Math.max(0, remainingSends),
185
+ });
186
+ }
187
+ catch (error) {
188
+ console.error('[@lit-protocol/vincent-policy-send-counter-limit/commit] Error in commit phase:', error);
189
+ // Still return success since the transaction itself succeeded
190
+ return allow({
191
+ recorded: false,
192
+ newCount: currentCount + 1,
193
+ remainingSends: Math.max(0, Number(maxSends) - currentCount - 1),
194
+ });
195
+ }
196
+ },
116
197
  });
117
198
  //# sourceMappingURL=vincent-policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vincent-policy.js","sourceRoot":"","sources":["../../../src/lib/vincent-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vincent-policy.js","sourceRoot":"","sources":["../../../src/lib/vincent-policy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@lit-protocol/vincent-policy-send-counter",
3
- "version": "0.0.7-mma",
3
+ "version": "0.0.11-mma",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
7
  "dependencies": {
8
- "@uniswap/sdk-core": "^7.7.2",
8
+ "@lit-protocol/vincent-scaffold-sdk": "^1.1.7",
9
9
  "ethers": "^5.8.0",
10
10
  "tslib": "2.8.1",
11
11
  "zod": "^3.25.64",
12
- "@lit-protocol/vincent-ability-sdk": "0.0.7-mma"
12
+ "@lit-protocol/vincent-ability-sdk": "0.0.11-mma"
13
13
  },
14
14
  "peerDependencies": {
15
- "@lit-protocol/vincent-app-sdk": "^0.0.7-mma"
15
+ "@lit-protocol/vincent-app-sdk": "^0.0.11-mma"
16
16
  },
17
17
  "devDependencies": {
18
18
  "esbuild": "^0.19.12",
@@ -1,7 +0,0 @@
1
- import { ethers } from 'ethers';
2
- export declare const calculateUsdValue: ({ ethRpcUrl, chainlinkPriceFeedAddress, amountInWeth, }: {
3
- ethRpcUrl: string;
4
- chainlinkPriceFeedAddress: string;
5
- amountInWeth: ethers.BigNumber;
6
- }) => Promise<ethers.BigNumber>;
7
- //# sourceMappingURL=calculate-usd-value.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calculate-usd-value.d.ts","sourceRoot":"","sources":["../../../../src/lib/policy-helpers/calculate-usd-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,eAAO,MAAM,iBAAiB,GAAU,yDAIrC;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB,EAAE,MAAM,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC;CAChC,KAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAgB3B,CAAC"}
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calculateUsdValue = void 0;
4
- const ethers_1 = require("ethers");
5
- const get_eth_usd_price_1 = require("./get-eth-usd-price");
6
- const calculateUsdValue = async ({ ethRpcUrl, chainlinkPriceFeedAddress, amountInWeth, }) => {
7
- const ethPriceInUsd = await (0, get_eth_usd_price_1.getEthUsdPriceFromChainlink)({ ethRpcUrl, chainlinkPriceFeedAddress });
8
- // Calculate USD value (8 decimals precision)
9
- const CHAINLINK_DECIMALS = 8;
10
- const WETH_DECIMALS = 18; // WETH decimals
11
- const amountInUsd = amountInWeth
12
- .mul(ethPriceInUsd)
13
- .div(ethers_1.ethers.utils.parseUnits('1', WETH_DECIMALS));
14
- console.log(`Calculate token amount in USDC (calculateUsdValue)`, {
15
- tokenAmountInWeth: ethers_1.ethers.utils.formatUnits(amountInWeth, WETH_DECIMALS),
16
- ethPriceInUsd: ethers_1.ethers.utils.formatUnits(ethPriceInUsd, CHAINLINK_DECIMALS),
17
- tokenAmountInUsd: ethers_1.ethers.utils.formatUnits(amountInUsd, CHAINLINK_DECIMALS),
18
- });
19
- return amountInUsd;
20
- };
21
- exports.calculateUsdValue = calculateUsdValue;
22
- //# sourceMappingURL=calculate-usd-value.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"calculate-usd-value.js","sourceRoot":"","sources":["../../../../src/lib/policy-helpers/calculate-usd-value.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,2DAAkE;AAE3D,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACtC,SAAS,EACT,yBAAyB,EACzB,YAAY,GAKb,EAA6B,EAAE;IAC9B,MAAM,aAAa,GAAG,MAAM,IAAA,+CAA2B,EAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAElG,6CAA6C;IAC7C,MAAM,kBAAkB,GAAG,CAAC,CAAC;IAC7B,MAAM,aAAa,GAAG,EAAE,CAAC,CAAC,gBAAgB;IAC1C,MAAM,WAAW,GAAG,YAAY;SAC7B,GAAG,CAAC,aAAa,CAAC;SAClB,GAAG,CAAC,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,oDAAoD,EAAE;QAChE,iBAAiB,EAAE,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,aAAa,CAAC;QACxE,aAAa,EAAE,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,kBAAkB,CAAC;QAC1E,gBAAgB,EAAE,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,kBAAkB,CAAC;KAC5E,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAxBW,QAAA,iBAAiB,qBAwB5B"}
@@ -1,16 +0,0 @@
1
- export declare const checkIfBuyAmountAllowed: ({ ethRpcUrl, rpcUrlForUniswap, chainIdForUniswap, tokenAddress, tokenDecimals, buyAmount, maxDailySpendingLimitInUsdCents, pkpEthAddress, appId, }: {
2
- ethRpcUrl: string;
3
- rpcUrlForUniswap: string;
4
- chainIdForUniswap: number;
5
- tokenAddress: `0x${string}`;
6
- tokenDecimals: number;
7
- buyAmount: number;
8
- maxDailySpendingLimitInUsdCents: bigint;
9
- pkpEthAddress: `0x${string}`;
10
- appId: number;
11
- }) => Promise<{
12
- buyAmountAllowed: boolean;
13
- buyAmountInUsd: bigint;
14
- adjustedMaxDailySpendingLimit: bigint;
15
- }>;
16
- //# sourceMappingURL=check-spending-limit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-spending-limit.d.ts","sourceRoot":"","sources":["../../../../src/lib/policy-helpers/check-spending-limit.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,uBAAuB,GAAU,oJAU3C;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B,EAAE,MAAM,CAAC;IACxC,aAAa,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf,KAAG,OAAO,CAAC;IACV,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B,EAAE,MAAM,CAAC;CACvC,CAoCA,CAAC"}
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkIfBuyAmountAllowed = void 0;
4
- const get_token_amount_in_usd_1 = require("./get-token-amount-in-usd");
5
- const spending_limit_contract_1 = require("./spending-limit-contract");
6
- const checkIfBuyAmountAllowed = async ({ ethRpcUrl, rpcUrlForUniswap, chainIdForUniswap, tokenAddress, tokenDecimals, buyAmount, maxDailySpendingLimitInUsdCents, pkpEthAddress, appId, }) => {
7
- const buyAmountInUsd = await (0, get_token_amount_in_usd_1.getTokenAmountInUsd)({
8
- ethRpcUrl,
9
- rpcUrlForUniswap,
10
- chainIdForUniswap,
11
- tokenAddress,
12
- tokenDecimals,
13
- tokenAmount: buyAmount,
14
- });
15
- // maxDailySpendingLimitInUsdCents has 2 decimal precision, but tokenAmountInUsd has 8,
16
- // so we multiply by 10^6 to match the precision
17
- const adjustedMaxDailySpendingLimit = maxDailySpendingLimitInUsdCents * 1000000n;
18
- console.log(`Adjusted maxDailySpendingLimitInUsdCents to 8 decimal precision: ${adjustedMaxDailySpendingLimit.toString()} (spendingLimitPolicyPrecheck)`);
19
- const spendingLimitContract = (0, spending_limit_contract_1.getSpendingLimitContractInstance)();
20
- const buyAmountAllowed = await spendingLimitContract.checkLimit(pkpEthAddress, BigInt(appId), buyAmountInUsd.toBigInt(), adjustedMaxDailySpendingLimit, 86400n);
21
- console.log(`Buy amount allowed: ${JSON.stringify(buyAmountAllowed)} (spendingLimitPolicyPrecheck)`);
22
- return {
23
- buyAmountAllowed,
24
- buyAmountInUsd: buyAmountInUsd.toBigInt(),
25
- adjustedMaxDailySpendingLimit,
26
- };
27
- };
28
- exports.checkIfBuyAmountAllowed = checkIfBuyAmountAllowed;
29
- //# sourceMappingURL=check-spending-limit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-spending-limit.js","sourceRoot":"","sources":["../../../../src/lib/policy-helpers/check-spending-limit.ts"],"names":[],"mappings":";;;AAAA,uEAAgE;AAChE,uEAA6E;AAEtE,MAAM,uBAAuB,GAAG,KAAK,EAAE,EAC5C,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,+BAA+B,EAC/B,aAAa,EACb,KAAK,GAWN,EAIE,EAAE;IACH,MAAM,cAAc,GAAG,MAAM,IAAA,6CAAmB,EAAC;QAC/C,SAAS;QACT,gBAAgB;QAChB,iBAAiB;QACjB,YAAY;QACZ,aAAa;QACb,WAAW,EAAE,SAAS;KACvB,CAAC,CAAC;IAEH,uFAAuF;IACvF,gDAAgD;IAChD,MAAM,6BAA6B,GAAG,+BAA+B,GAAG,QAAU,CAAC;IACnF,OAAO,CAAC,GAAG,CACT,oEAAoE,6BAA6B,CAAC,QAAQ,EAAE,gCAAgC,CAC7I,CAAC;IAEF,MAAM,qBAAqB,GAAG,IAAA,0DAAgC,GAAE,CAAC;IAEjE,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAC7D,aAAa,EACb,MAAM,CAAC,KAAK,CAAC,EACb,cAAc,CAAC,QAAQ,EAAE,EACzB,6BAA6B,EAC7B,MAAM,CACP,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,uBAAuB,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,gCAAgC,CACxF,CAAC;IAEF,OAAO;QACL,gBAAgB;QAChB,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE;QACzC,6BAA6B;KAC9B,CAAC;AACJ,CAAC,CAAC;AA5DW,QAAA,uBAAuB,2BA4DlC"}
@@ -1,6 +0,0 @@
1
- import { ethers } from 'ethers';
2
- export declare const getEthUsdPriceFromChainlink: ({ chainlinkPriceFeedAddress, ethRpcUrl, }: {
3
- chainlinkPriceFeedAddress: string;
4
- ethRpcUrl: string;
5
- }) => Promise<ethers.BigNumber>;
6
- //# sourceMappingURL=get-eth-usd-price.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-eth-usd-price.d.ts","sourceRoot":"","sources":["../../../../src/lib/policy-helpers/get-eth-usd-price.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMhC,eAAO,MAAM,2BAA2B,GAAU,2CAG/C;IACD,yBAAyB,EAAE,MAAM,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB,KAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAiB3B,CAAC"}
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEthUsdPriceFromChainlink = void 0;
4
- const ethers_1 = require("ethers");
5
- const CHAINLINK_AGGREGATOR_ABI = [
6
- 'function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)',
7
- ];
8
- const getEthUsdPriceFromChainlink = async ({ chainlinkPriceFeedAddress, ethRpcUrl, }) => {
9
- console.log(`Getting ETH price in USD from Chainlink (getEthUsdPriceFromChainlink)`, {
10
- chainlinkPriceFeedAddress,
11
- ethRpcUrl,
12
- });
13
- const provider = new ethers_1.ethers.providers.StaticJsonRpcProvider(ethRpcUrl);
14
- const contract = new ethers_1.ethers.Contract(chainlinkPriceFeedAddress, CHAINLINK_AGGREGATOR_ABI, provider);
15
- const [_, answer] = await contract.latestRoundData();
16
- console.log(`Got ETH price in USD (getEthUsdPriceFromChainlink)`, {
17
- ethPriceInUsd: ethers_1.ethers.utils.formatUnits(answer, 8),
18
- });
19
- return answer;
20
- };
21
- exports.getEthUsdPriceFromChainlink = getEthUsdPriceFromChainlink;
22
- //# sourceMappingURL=get-eth-usd-price.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-eth-usd-price.js","sourceRoot":"","sources":["../../../../src/lib/policy-helpers/get-eth-usd-price.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,MAAM,wBAAwB,GAAG;IAC/B,gJAAgJ;CACjJ,CAAC;AAEK,MAAM,2BAA2B,GAAG,KAAK,EAAE,EAChD,yBAAyB,EACzB,SAAS,GAIV,EAA6B,EAAE;IAC9B,OAAO,CAAC,GAAG,CAAC,uEAAuE,EAAE;QACnF,yBAAyB;QACzB,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,QAAQ,CAClC,yBAAyB,EACzB,wBAAwB,EACxB,QAAQ,CACT,CAAC;IACF,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,oDAAoD,EAAE;QAChE,aAAa,EAAE,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;KACnD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAvBW,QAAA,2BAA2B,+BAuBtC"}
@@ -1,10 +0,0 @@
1
- import { ethers } from 'ethers';
2
- export declare const getTokenAmountInUsd: ({ ethRpcUrl, rpcUrlForUniswap, chainIdForUniswap, tokenAddress, tokenAmount, tokenDecimals, }: {
3
- ethRpcUrl: string;
4
- rpcUrlForUniswap: string;
5
- chainIdForUniswap: number;
6
- tokenAddress: string;
7
- tokenDecimals: number;
8
- tokenAmount: number;
9
- }) => Promise<ethers.BigNumber>;
10
- //# sourceMappingURL=get-token-amount-in-usd.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-token-amount-in-usd.d.ts","sourceRoot":"","sources":["../../../../src/lib/policy-helpers/get-token-amount-in-usd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAWhC,eAAO,MAAM,mBAAmB,GAAU,+FAOvC;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,KAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAiE3B,CAAC"}
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTokenAmountInUsd = void 0;
4
- const ethers_1 = require("ethers");
5
- const calculate_usd_value_1 = require("./calculate-usd-value");
6
- const get_uniswap_quote_1 = require("./get-uniswap-quote");
7
- const ETH_MAINNET_WETH_ADDRESS = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';
8
- /**
9
- * Source: https://docs.chain.link/data-feeds/price-feeds/addresses/?network=ethereum&page=1&search=ETH%2FUSD
10
- */
11
- const ETH_MAINNET_ETH_USD_CHAINLINK_FEED = '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419';
12
- const getTokenAmountInUsd = async ({ ethRpcUrl, rpcUrlForUniswap, chainIdForUniswap, tokenAddress, tokenAmount, tokenDecimals, }) => {
13
- console.log(`Getting token amount in USD (getTokenAmountInUsd)`, {
14
- ethRpcUrl,
15
- rpcUrlForUniswap,
16
- chainIdForUniswap,
17
- tokenAddress,
18
- tokenAmount,
19
- tokenDecimals,
20
- ethMainnetWethAddress: ETH_MAINNET_WETH_ADDRESS,
21
- ethMainnetEthUsdChainlinkFeed: ETH_MAINNET_ETH_USD_CHAINLINK_FEED,
22
- });
23
- const provider = new ethers_1.ethers.providers.JsonRpcProvider(rpcUrlForUniswap);
24
- const tokenInContract = new ethers_1.ethers.Contract(tokenAddress, ['function symbol() view returns (string)'], provider);
25
- const tokenInSymbol = await tokenInContract.symbol();
26
- console.log(`tokenInSymbol: ${tokenInSymbol} (getTokenAmountInUsd)`);
27
- // Special case for WETH - no need to get a quote since it's already in ETH terms
28
- if (tokenInSymbol.toUpperCase() === 'WETH') {
29
- console.log(`Token is WETH, using amount directly: ${tokenAmount} (getTokenAmountInUsd)`);
30
- const amountInWeth = ethers_1.ethers.utils.parseUnits(tokenAmount.toString(), tokenDecimals);
31
- return (0, calculate_usd_value_1.calculateUsdValue)({
32
- ethRpcUrl,
33
- chainlinkPriceFeedAddress: ETH_MAINNET_ETH_USD_CHAINLINK_FEED,
34
- amountInWeth,
35
- });
36
- }
37
- console.log(`Getting price in WETH from Uniswap (getTokenAmountInUsd)`, {
38
- tokenInAddress: tokenAddress,
39
- tokenInDecimals: tokenDecimals,
40
- tokenInAmount: tokenAmount,
41
- tokenOutAddress: ETH_MAINNET_WETH_ADDRESS,
42
- tokenOutDecimals: 18,
43
- rpcUrl: rpcUrlForUniswap,
44
- chainId: chainIdForUniswap,
45
- });
46
- const amountInWeth = await (0, get_uniswap_quote_1.getUniswapQuote)({
47
- tokenInAddress: tokenAddress,
48
- tokenInDecimals: tokenDecimals,
49
- tokenInAmount: tokenAmount,
50
- tokenOutAddress: ETH_MAINNET_WETH_ADDRESS,
51
- tokenOutDecimals: 18,
52
- rpcUrl: rpcUrlForUniswap,
53
- chainId: chainIdForUniswap,
54
- });
55
- // Convert WETH amount to USD
56
- const amountInUsdc = await (0, calculate_usd_value_1.calculateUsdValue)({
57
- ethRpcUrl,
58
- chainlinkPriceFeedAddress: ETH_MAINNET_ETH_USD_CHAINLINK_FEED,
59
- amountInWeth: amountInWeth.bestQuote,
60
- });
61
- console.log('Calculated token amount in USDC (getTokenAmountInUsd)', {
62
- amountInWeth: ethers_1.ethers.utils.formatUnits(amountInWeth.bestQuote, 18),
63
- amountInUsdc: ethers_1.ethers.utils.formatUnits(amountInUsdc, 8),
64
- });
65
- return amountInUsdc;
66
- };
67
- exports.getTokenAmountInUsd = getTokenAmountInUsd;
68
- //# sourceMappingURL=get-token-amount-in-usd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-token-amount-in-usd.js","sourceRoot":"","sources":["../../../../src/lib/policy-helpers/get-token-amount-in-usd.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAEhC,+DAA0D;AAC1D,2DAAsD;AAEtD,MAAM,wBAAwB,GAAG,4CAA4C,CAAC;AAC9E;;GAEG;AACH,MAAM,kCAAkC,GAAG,4CAA4C,CAAC;AAEjF,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,aAAa,GAQd,EAA6B,EAAE;IAC9B,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE;QAC/D,SAAS;QACT,gBAAgB;QAChB,iBAAiB;QACjB,YAAY;QACZ,WAAW;QACX,aAAa;QACb,qBAAqB,EAAE,wBAAwB;QAC/C,6BAA6B,EAAE,kCAAkC;KAClE,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,SAAS,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,IAAI,eAAM,CAAC,QAAQ,CACzC,YAAY,EACZ,CAAC,yCAAyC,CAAC,EAC3C,QAAQ,CACT,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,kBAAkB,aAAa,wBAAwB,CAAC,CAAC;IAErE,iFAAiF;IACjF,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,yCAAyC,WAAW,wBAAwB,CAAC,CAAC;QAC1F,MAAM,YAAY,GAAG,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;QACpF,OAAO,IAAA,uCAAiB,EAAC;YACvB,SAAS;YACT,yBAAyB,EAAE,kCAAkC;YAC7D,YAAY;SACb,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0DAA0D,EAAE;QACtE,cAAc,EAAE,YAAY;QAC5B,eAAe,EAAE,aAAa;QAC9B,aAAa,EAAE,WAAW;QAC1B,eAAe,EAAE,wBAAwB;QACzC,gBAAgB,EAAE,EAAE;QACpB,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,IAAA,mCAAe,EAAC;QACzC,cAAc,EAAE,YAAY;QAC5B,eAAe,EAAE,aAAa;QAC9B,aAAa,EAAE,WAAW;QAC1B,eAAe,EAAE,wBAAwB;QACzC,gBAAgB,EAAE,EAAE;QACpB,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;IAEH,6BAA6B;IAC7B,MAAM,YAAY,GAAG,MAAM,IAAA,uCAAiB,EAAC;QAC3C,SAAS;QACT,yBAAyB,EAAE,kCAAkC;QAC7D,YAAY,EAAE,YAAY,CAAC,SAAS;KACrC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE;QACnE,YAAY,EAAE,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;QAClE,YAAY,EAAE,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;KACxD,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AA/EW,QAAA,mBAAmB,uBA+E9B"}
@@ -1,15 +0,0 @@
1
- import { ethers } from 'ethers';
2
- export declare const getUniswapQuote: ({ rpcUrl, chainId, tokenInAddress, tokenInDecimals, tokenInAmount, tokenOutAddress, tokenOutDecimals, }: {
3
- rpcUrl: string;
4
- chainId: number;
5
- tokenInAddress: string;
6
- tokenInDecimals: number;
7
- tokenInAmount: number;
8
- tokenOutAddress: string;
9
- tokenOutDecimals: number;
10
- }) => Promise<{
11
- bestQuote: ethers.BigNumber;
12
- bestFee: number;
13
- amountOutMin: ethers.BigNumber;
14
- }>;
15
- //# sourceMappingURL=get-uniswap-quote.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-uniswap-quote.d.ts","sourceRoot":"","sources":["../../../../src/lib/policy-helpers/get-uniswap-quote.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMhC,eAAO,MAAM,eAAe,GAAU,yGAQnC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,KAAG,OAAO,CAAC;IACV,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC;CAChC,CA8HA,CAAC"}