@lit-protocol/vincent-ability-aave 0.2.8 → 1.0.0-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 (87) hide show
  1. package/README.md +51 -86
  2. package/dist/CHANGELOG.md +7 -0
  3. package/dist/README.md +51 -86
  4. package/dist/generated/vincent-bundled-ability.d.ts +1440 -0
  5. package/dist/generated/vincent-bundled-ability.d.ts.map +1 -0
  6. package/dist/generated/vincent-bundled-ability.js +15 -0
  7. package/dist/generated/vincent-bundled-ability.js.map +1 -0
  8. package/dist/index.d.ts +4 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +22 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/lib/decodeTransaction.d.ts +3 -0
  13. package/dist/lib/decodeTransaction.d.ts.map +1 -0
  14. package/dist/lib/decodeTransaction.js +49 -0
  15. package/dist/lib/decodeTransaction.js.map +1 -0
  16. package/dist/lib/helpers/aave.d.ts +85 -0
  17. package/dist/lib/helpers/aave.d.ts.map +1 -0
  18. package/dist/lib/helpers/aave.js +331 -0
  19. package/dist/lib/helpers/aave.js.map +1 -0
  20. package/dist/lib/helpers/erc20.d.ts +6 -0
  21. package/dist/lib/helpers/erc20.d.ts.map +1 -0
  22. package/dist/lib/helpers/erc20.js +53 -0
  23. package/dist/lib/helpers/erc20.js.map +1 -0
  24. package/dist/lib/helpers/transactionKind.d.ts +6 -0
  25. package/dist/lib/helpers/transactionKind.d.ts.map +1 -0
  26. package/dist/lib/helpers/transactionKind.js +10 -0
  27. package/dist/lib/helpers/transactionKind.js.map +1 -0
  28. package/dist/lib/validateSimulation.d.ts +3 -0
  29. package/dist/lib/validateSimulation.d.ts.map +1 -0
  30. package/dist/lib/validateSimulation.js +56 -0
  31. package/dist/lib/validateSimulation.js.map +1 -0
  32. package/dist/lib/validateTransaction.d.ts +3 -0
  33. package/dist/lib/validateTransaction.d.ts.map +1 -0
  34. package/dist/lib/validateTransaction.js +79 -0
  35. package/dist/lib/validateTransaction.js.map +1 -0
  36. package/dist/lib/vincent-ability.d.ts +1437 -0
  37. package/dist/lib/vincent-ability.d.ts.map +1 -0
  38. package/dist/lib/vincent-ability.js +15 -0
  39. package/dist/lib/vincent-ability.js.map +1 -0
  40. package/dist/package.json +5 -5
  41. package/dist/src/generated/lit-action.js +2 -2
  42. package/dist/src/generated/vincent-ability-metadata.json +1 -1
  43. package/dist/src/generated/vincent-bundled-ability.d.ts +1417 -66
  44. package/dist/src/generated/vincent-bundled-ability.d.ts.map +1 -1
  45. package/dist/src/generated/vincent-bundled-ability.js +3 -5
  46. package/dist/src/index.d.ts +2 -0
  47. package/dist/src/index.d.ts.map +1 -1
  48. package/dist/src/index.js +17 -1
  49. package/dist/src/index.js.map +1 -1
  50. package/dist/src/lib/decodeTransaction.d.ts +3 -0
  51. package/dist/src/lib/decodeTransaction.d.ts.map +1 -0
  52. package/dist/src/lib/decodeTransaction.js +49 -0
  53. package/dist/src/lib/decodeTransaction.js.map +1 -0
  54. package/dist/src/lib/helpers/aave.d.ts +85 -0
  55. package/dist/src/lib/helpers/aave.d.ts.map +1 -0
  56. package/dist/src/lib/helpers/aave.js +331 -0
  57. package/dist/src/lib/helpers/aave.js.map +1 -0
  58. package/dist/src/lib/helpers/erc20.d.ts +6 -0
  59. package/dist/src/lib/helpers/erc20.d.ts.map +1 -0
  60. package/dist/src/lib/helpers/erc20.js +53 -0
  61. package/dist/src/lib/helpers/erc20.js.map +1 -0
  62. package/dist/src/lib/helpers/transactionKind.d.ts +6 -0
  63. package/dist/src/lib/helpers/transactionKind.d.ts.map +1 -0
  64. package/dist/src/lib/helpers/transactionKind.js +10 -0
  65. package/dist/src/lib/helpers/transactionKind.js.map +1 -0
  66. package/dist/src/lib/lit-action.js.map +1 -1
  67. package/dist/src/lib/validateSimulation.d.ts +3 -0
  68. package/dist/src/lib/validateSimulation.d.ts.map +1 -0
  69. package/dist/src/lib/validateSimulation.js +56 -0
  70. package/dist/src/lib/validateSimulation.js.map +1 -0
  71. package/dist/src/lib/validateTransaction.d.ts +3 -0
  72. package/dist/src/lib/validateTransaction.d.ts.map +1 -0
  73. package/dist/src/lib/validateTransaction.js +79 -0
  74. package/dist/src/lib/validateTransaction.js.map +1 -0
  75. package/dist/src/lib/vincent-ability.d.ts +1417 -67
  76. package/dist/src/lib/vincent-ability.d.ts.map +1 -1
  77. package/dist/src/lib/vincent-ability.js +9 -345
  78. package/dist/src/lib/vincent-ability.js.map +1 -1
  79. package/package.json +6 -6
  80. package/dist/src/lib/helpers/index.d.ts +0 -71
  81. package/dist/src/lib/helpers/index.d.ts.map +0 -1
  82. package/dist/src/lib/helpers/index.js +0 -345
  83. package/dist/src/lib/helpers/index.js.map +0 -1
  84. package/dist/src/lib/schemas.d.ts +0 -115
  85. package/dist/src/lib/schemas.d.ts.map +0 -1
  86. package/dist/src/lib/schemas.js +0 -110
  87. package/dist/src/lib/schemas.js.map +0 -1
@@ -0,0 +1,6 @@
1
+ export declare enum TransactionKind {
2
+ AAVE = "aave",
3
+ ERC20 = "erc20",
4
+ FEE = "fee"
5
+ }
6
+ //# sourceMappingURL=transactionKind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionKind.d.ts","sourceRoot":"","sources":["../../../src/lib/helpers/transactionKind.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;CACZ"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionKind = void 0;
4
+ var TransactionKind;
5
+ (function (TransactionKind) {
6
+ TransactionKind["AAVE"] = "aave";
7
+ TransactionKind["ERC20"] = "erc20";
8
+ TransactionKind["FEE"] = "fee";
9
+ })(TransactionKind || (exports.TransactionKind = TransactionKind = {}));
10
+ //# sourceMappingURL=transactionKind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionKind.js","sourceRoot":"","sources":["../../../src/lib/helpers/transactionKind.ts"],"names":[],"mappings":";;;AAAA,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,kCAAe,CAAA;IACf,8BAAW,CAAA;AACb,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B"}
@@ -0,0 +1,3 @@
1
+ import type { ValidateSimulationParams } from '@lit-protocol/vincent-ability-sdk/gatedSigner';
2
+ export declare const validateSimulation: (params: ValidateSimulationParams) => void;
3
+ //# sourceMappingURL=validateSimulation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateSimulation.d.ts","sourceRoot":"","sources":["../../src/lib/validateSimulation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAM9F,eAAO,MAAM,kBAAkB,GAAI,QAAQ,wBAAwB,SA8DlE,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSimulation = void 0;
4
+ const viem_1 = require("viem");
5
+ const aave_1 = require("./helpers/aave");
6
+ const validateSimulation = (params) => {
7
+ const { chainId, sender: _sender, simulation } = params;
8
+ if (simulation.error) {
9
+ const { message, revertReason } = simulation.error;
10
+ throw new Error(`Simulation failed - Reason: ${revertReason} - Message: ${message}`);
11
+ }
12
+ const feeContract = (0, aave_1.getFeeContractAddress)(chainId);
13
+ const { POOL: aavePoolAddress } = (0, aave_1.getAaveAddresses)(chainId);
14
+ const aaveATokens = (0, aave_1.getATokens)(chainId);
15
+ const sender = (0, viem_1.getAddress)(_sender);
16
+ const pool = (0, viem_1.getAddress)(aavePoolAddress);
17
+ const aTokens = Object.values(aaveATokens).map(viem_1.getAddress);
18
+ const allowed = new Set([viem_1.zeroAddress, sender, pool, feeContract, ...aTokens]);
19
+ simulation.changes.forEach((c, idx) => {
20
+ const assetType = c.assetType;
21
+ const changeType = c.changeType;
22
+ const from = (0, viem_1.getAddress)(c.from);
23
+ const to = (0, viem_1.getAddress)(c.to);
24
+ // Helper for throwing with context
25
+ const fail = (reason) => {
26
+ throw new Error(`Invalid simulation change at index ${idx}: ${reason} [assetType=${assetType}, changeType=${changeType}, from=${from}, to=${to}]`);
27
+ };
28
+ if (assetType === 'NATIVE') {
29
+ if (changeType !== 'TRANSFER') {
30
+ fail('Only TRANSFER is allowed for NATIVE');
31
+ }
32
+ // TODO no chequeamos el source y destination?
33
+ return;
34
+ }
35
+ if (assetType === 'ERC20') {
36
+ if (changeType === 'APPROVE') {
37
+ if (![sender, feeContract].includes(from) || ![pool, feeContract].includes(to)) {
38
+ fail('ERC20 APPROVE must be from userOp.sender to aave pool or fee contract');
39
+ }
40
+ return;
41
+ }
42
+ if (changeType === 'TRANSFER') {
43
+ if (!allowed.has(from) || !allowed.has(to)) {
44
+ fail('ERC20 TRANSFER endpoints must be within {zero address, sender, fee contract or Aave addresses}');
45
+ }
46
+ return;
47
+ }
48
+ // Unknown change type for ERC20
49
+ fail('Unsupported ERC20 change type');
50
+ }
51
+ // Any other asset types are not permitted
52
+ fail('Unsupported asset type');
53
+ });
54
+ };
55
+ exports.validateSimulation = validateSimulation;
56
+ //# sourceMappingURL=validateSimulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateSimulation.js","sourceRoot":"","sources":["../../src/lib/validateSimulation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ValidateTransactionParams } from '@lit-protocol/vincent-ability-sdk/gatedSigner';
2
+ export declare const validateTransaction: (params: ValidateTransactionParams) => void;
3
+ //# sourceMappingURL=validateTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateTransaction.d.ts","sourceRoot":"","sources":["../../src/lib/validateTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,yBAAyB,EAC1B,MAAM,+CAA+C,CAAC;AAQvD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,yBAAyB,SAsEpE,CAAC"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateTransaction = void 0;
4
+ const viem_1 = require("viem");
5
+ const aave_1 = require("./helpers/aave");
6
+ const transactionKind_1 = require("./helpers/transactionKind");
7
+ const validateTransaction = (params) => {
8
+ const { chainId, decodedTransaction, sender } = params;
9
+ if (decodedTransaction.kind === 'error') {
10
+ const decodedTransactionError = decodedTransaction;
11
+ throw new Error(`Transaction failed to decode: ${decodedTransactionError.message}`);
12
+ }
13
+ const decodedTransactionSuccess = decodedTransaction;
14
+ const feeContractAddress = (0, aave_1.getFeeContractAddress)(chainId);
15
+ if (!feeContractAddress) {
16
+ throw new Error(`Fee contract address not found for chainId ${chainId}`);
17
+ }
18
+ if (decodedTransaction.kind === transactionKind_1.TransactionKind.ERC20) {
19
+ if (['approve', 'increaseAllowance'].includes(decodedTransactionSuccess.fn)) {
20
+ const [spender, amount] = decodedTransactionSuccess.args;
21
+ if (!(0, viem_1.isAddressEqual)(spender, feeContractAddress)) {
22
+ throw new Error(`ERC20 approval to forbidden spender ${spender}`);
23
+ }
24
+ if (amount === 2n ** 256n - 1n)
25
+ throw new Error('Infinite approval not allowed');
26
+ }
27
+ else {
28
+ throw new Error('ERC20 function not allowed');
29
+ }
30
+ return;
31
+ }
32
+ if (decodedTransaction.kind === transactionKind_1.TransactionKind.FEE) {
33
+ if (['depositToAave', 'withdrawFromAave'].includes(decodedTransactionSuccess.fn)) {
34
+ // const [appId, assetAddress, amount] =
35
+ // decodedTransactionSuccess.args as [number, Address, bigint];
36
+ // There is nothing to block here
37
+ // A wrong appId and the delegatee will produce an invalid signature
38
+ // A wrong assetAddress or amount and the deposit/withdrawal will fail
39
+ }
40
+ else {
41
+ throw new Error('Fee function not allowed');
42
+ }
43
+ return;
44
+ }
45
+ if (decodedTransaction.kind === transactionKind_1.TransactionKind.AAVE) {
46
+ const fn = decodedTransactionSuccess.fn;
47
+ const args = decodedTransactionSuccess.args; // Args depend on the function being called
48
+ if (fn === 'supply') {
49
+ const onBehalfOf = (0, viem_1.getAddress)(args[2]);
50
+ if (!(0, viem_1.isAddressEqual)(onBehalfOf, sender))
51
+ throw new Error('supply.onBehalfOf != sender');
52
+ }
53
+ else if (fn === 'withdraw') {
54
+ const to = (0, viem_1.getAddress)(args[2]);
55
+ if (!(0, viem_1.isAddressEqual)(to, sender))
56
+ throw new Error('withdraw.to != sender');
57
+ }
58
+ else if (fn === 'borrow') {
59
+ const onBehalfOf = (0, viem_1.getAddress)(args[4]);
60
+ if (!(0, viem_1.isAddressEqual)(onBehalfOf, sender))
61
+ throw new Error('borrow.onBehalfOf != sender');
62
+ }
63
+ else if (fn === 'repay') {
64
+ const onBehalfOf = (0, viem_1.getAddress)(args[3]);
65
+ if (!(0, viem_1.isAddressEqual)(onBehalfOf, sender))
66
+ throw new Error('repay.onBehalfOf != sender');
67
+ }
68
+ else if (fn === 'setUserUseReserveAsCollateral') {
69
+ // ok; self-scoped setting
70
+ }
71
+ else {
72
+ throw new Error(`Aave Pool function not allowed: ${fn}`);
73
+ }
74
+ return;
75
+ }
76
+ throw new Error('Unknown decoded transaction kind. Could not validate transaction.');
77
+ };
78
+ exports.validateTransaction = validateTransaction;
79
+ //# sourceMappingURL=validateTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateTransaction.js","sourceRoot":"","sources":["../../src/lib/validateTransaction.ts"],"names":[],"mappings":"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"}