@dev.sail.money/sailor 0.0.2-13 → 0.0.2-16

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 (33) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/index.cjs +292 -11
  3. package/packages/sdk/dist/intelligence.d.ts +1 -1
  4. package/packages/sdk/dist/intelligence.js +1 -1
  5. package/packages/sdk/dist/templates/ammLiquidity.d.ts +24 -11
  6. package/packages/sdk/dist/templates/ammLiquidity.d.ts.map +1 -1
  7. package/packages/sdk/dist/templates/ammLiquidity.js +39 -31
  8. package/packages/sdk/dist/templates/ammLiquidity.js.map +1 -1
  9. package/packages/sdk/dist/templates/approveAndCallBatch.d.ts +24 -10
  10. package/packages/sdk/dist/templates/approveAndCallBatch.d.ts.map +1 -1
  11. package/packages/sdk/dist/templates/approveAndCallBatch.js +36 -23
  12. package/packages/sdk/dist/templates/approveAndCallBatch.js.map +1 -1
  13. package/packages/sdk/dist/templates/boundedBorrow.d.ts +19 -9
  14. package/packages/sdk/dist/templates/boundedBorrow.d.ts.map +1 -1
  15. package/packages/sdk/dist/templates/boundedBorrow.js +28 -19
  16. package/packages/sdk/dist/templates/boundedBorrow.js.map +1 -1
  17. package/packages/sdk/dist/templates/boundedSwap.d.ts +19 -9
  18. package/packages/sdk/dist/templates/boundedSwap.d.ts.map +1 -1
  19. package/packages/sdk/dist/templates/boundedSwap.js +30 -20
  20. package/packages/sdk/dist/templates/boundedSwap.js.map +1 -1
  21. package/packages/sdk/dist/templates/defiBundle.d.ts +35 -9
  22. package/packages/sdk/dist/templates/defiBundle.d.ts.map +1 -1
  23. package/packages/sdk/dist/templates/defiBundle.js +84 -22
  24. package/packages/sdk/dist/templates/defiBundle.js.map +1 -1
  25. package/packages/sdk/dist/templates/pendle.d.ts +23 -8
  26. package/packages/sdk/dist/templates/pendle.d.ts.map +1 -1
  27. package/packages/sdk/dist/templates/pendle.js +34 -14
  28. package/packages/sdk/dist/templates/pendle.js.map +1 -1
  29. package/packages/sdk/dist/templates/transferTarget.d.ts +11 -3
  30. package/packages/sdk/dist/templates/transferTarget.d.ts.map +1 -1
  31. package/packages/sdk/dist/templates/transferTarget.js +14 -7
  32. package/packages/sdk/dist/templates/transferTarget.js.map +1 -1
  33. package/packages/sdk/package.json +1 -0
@@ -1,14 +1,29 @@
1
1
  import type { Address, PermissionTemplate } from "../types.js";
2
- /** Params for SharedPendlePermission. */
2
+ /**
3
+ * Params for SharedPendlePermission.
4
+ *
5
+ * Matches the on-chain `_applyConfig` decode exactly:
6
+ * abi.decode(params, (address, address[], uint128, bool, bool, bool, bool, bool))
7
+ * → pendleRouter, allowedMarkets, maxAmountPerTx,
8
+ * allowLiquidityOps, allowPtSwaps, allowYtSwaps, allowMintRedeem, allowClaimYield
9
+ */
3
10
  export type PendleParams = {
4
- /** Maximum position size in USD-equivalent (18-decimal WAD). */
5
- maxPositionValueUsd: number;
6
- /** Pendle market addresses the agent may interact with. */
11
+ /** Pendle Router V4 address the agent may call. Must be non-zero. */
12
+ pendleRouter: Address;
13
+ /** Pendle market (and YT, for mint/redeem) addresses the agent may interact with. */
7
14
  allowedMarkets: Address[];
8
- /** Allowed action types (e.g. ["addLiquidity", "swapPT", "swapYT", "redeem"]). */
9
- allowedActions: string[];
10
- /** Minimum implied APY gate in basis points (e.g. 500 = 5%). */
11
- minImpliedApyBps: number;
15
+ /** Maximum amount of a single tx, in base units (uint128). */
16
+ maxAmountPerTx: bigint;
17
+ /** Allow add/remove liquidity operations. */
18
+ allowLiquidityOps: boolean;
19
+ /** Allow PT swaps. */
20
+ allowPtSwaps: boolean;
21
+ /** Allow YT swaps. */
22
+ allowYtSwaps: boolean;
23
+ /** Allow mint / redeem of PY. */
24
+ allowMintRedeem: boolean;
25
+ /** Allow claiming yield (redeemDueInterestAndRewards). */
26
+ allowClaimYield: boolean;
12
27
  };
13
28
  export declare const pendleTemplate: PermissionTemplate<PendleParams>;
14
29
  //# sourceMappingURL=pendle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pendle.d.ts","sourceRoot":"","sources":["../../src/templates/pendle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG;IACzB,gEAAgE;IAChE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,kFAAkF;IAClF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AASF,eAAO,MAAM,cAAc,EAAE,kBAAkB,CAAC,YAAY,CA6C3D,CAAC"}
1
+ {"version":3,"file":"pendle.d.ts","sourceRoot":"","sources":["../../src/templates/pendle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,qEAAqE;IACrE,YAAY,EAAE,OAAO,CAAC;IACtB,qFAAqF;IACrF,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,sBAAsB;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,iCAAiC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAeF,eAAO,MAAM,cAAc,EAAE,kBAAkB,CAAC,YAAY,CA4D3D,CAAC"}
@@ -1,47 +1,67 @@
1
1
  import { decodeAbiParameters, encodeAbiParameters } from "viem";
2
2
  const ABI = [
3
- { name: "maxPositionValueUsd", type: "uint256" },
3
+ { name: "pendleRouter", type: "address" },
4
4
  { name: "allowedMarkets", type: "address[]" },
5
- { name: "allowedActions", type: "string[]" },
6
- { name: "minImpliedApyBps", type: "uint256" },
5
+ { name: "maxAmountPerTx", type: "uint128" },
6
+ { name: "allowLiquidityOps", type: "bool" },
7
+ { name: "allowPtSwaps", type: "bool" },
8
+ { name: "allowYtSwaps", type: "bool" },
9
+ { name: "allowMintRedeem", type: "bool" },
10
+ { name: "allowClaimYield", type: "bool" },
7
11
  ];
12
+ const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
8
13
  export const pendleTemplate = {
9
14
  name: "SharedPendlePermission",
10
15
  address: "0x0000000000000000000000000000000000000000",
11
16
  encoder: {
12
17
  encode(params) {
13
18
  return encodeAbiParameters(ABI, [
14
- BigInt(Math.round(params.maxPositionValueUsd)),
19
+ params.pendleRouter,
15
20
  params.allowedMarkets,
16
- params.allowedActions,
17
- BigInt(params.minImpliedApyBps),
21
+ params.maxAmountPerTx,
22
+ params.allowLiquidityOps,
23
+ params.allowPtSwaps,
24
+ params.allowYtSwaps,
25
+ params.allowMintRedeem,
26
+ params.allowClaimYield,
18
27
  ]);
19
28
  },
20
29
  decode(data) {
21
30
  const decoded = decodeAbiParameters(ABI, data);
22
31
  return {
23
- maxPositionValueUsd: Number(decoded[0]),
32
+ pendleRouter: decoded[0],
24
33
  allowedMarkets: [...decoded[1]],
25
- allowedActions: [...decoded[2]],
26
- minImpliedApyBps: Number(decoded[3]),
34
+ maxAmountPerTx: decoded[2],
35
+ allowLiquidityOps: decoded[3],
36
+ allowPtSwaps: decoded[4],
37
+ allowYtSwaps: decoded[5],
38
+ allowMintRedeem: decoded[6],
39
+ allowClaimYield: decoded[7],
27
40
  };
28
41
  },
29
42
  },
30
43
  explainer: {
31
44
  explain(params) {
32
45
  const warnings = [];
33
- if (params.minImpliedApyBps === 0) {
34
- warnings.push("No minimum APY gateagent may enter low-yield positions");
46
+ if (params.pendleRouter === ZERO_ADDRESS) {
47
+ warnings.push("Pendle router is zeroconfiguration will revert on-chain");
35
48
  }
36
49
  if (params.allowedMarkets.length === 0) {
37
50
  warnings.push("No markets specified — all Pendle market interactions will be blocked");
38
51
  }
52
+ const ops = [
53
+ params.allowLiquidityOps && "liquidity",
54
+ params.allowPtSwaps && "PT swaps",
55
+ params.allowYtSwaps && "YT swaps",
56
+ params.allowMintRedeem && "mint/redeem",
57
+ params.allowClaimYield && "claim yield",
58
+ ].filter(Boolean);
39
59
  return {
40
60
  templateName: "SharedPendlePermission",
41
61
  humanReadable: [
42
- `Maximum position size: $${params.maxPositionValueUsd.toLocaleString()} USD`,
43
- `Minimum implied APY: ${params.minImpliedApyBps / 100}%`,
44
- `Allowed actions: ${params.allowedActions.join(", ")}`,
62
+ `Pendle router: ${params.pendleRouter}`,
63
+ `Maximum amount per tx: ${params.maxAmountPerTx.toString()} (base units)`,
64
+ `Enabled operations: ${ops.length ? ops.join(", ") : "none"}`,
45
65
  `Allowed markets (${params.allowedMarkets.length}): ${params.allowedMarkets.join(", ")}`,
46
66
  ],
47
67
  warnings,
@@ -1 +1 @@
1
- {"version":3,"file":"pendle.js","sourceRoot":"","sources":["../../src/templates/pendle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAehE,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE;IAChD,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE;IAC7C,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;CACrC,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAqC;IAC9D,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,4CAA4C;IAErD,OAAO,EAAE;QACP,MAAM,CAAC,MAAoB;YACzB,OAAO,mBAAmB,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBAC9C,MAAM,CAAC,cAAc;gBACrB,MAAM,CAAC,cAAc;gBACrB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;aAChC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAS;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;gBACL,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvC,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACrC,CAAC;QACJ,CAAC;KACF;IAED,SAAS,EAAE;QACT,OAAO,CAAC,MAAoB;YAC1B,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvC,QAAQ,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YACzF,CAAC;YACD,OAAO;gBACL,YAAY,EAAE,wBAAwB;gBACtC,aAAa,EAAE;oBACb,2BAA2B,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,MAAM;oBAC5E,wBAAwB,MAAM,CAAC,gBAAgB,GAAG,GAAG,GAAG;oBACxD,oBAAoB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtD,oBAAoB,MAAM,CAAC,cAAc,CAAC,MAAM,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACzF;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"pendle.js","sourceRoot":"","sources":["../../src/templates/pendle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AA8BhE,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;IACzC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE;IAC7C,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3C,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3C,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE;IACtC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE;IACtC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE;IACzC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE;CACjC,CAAC;AAEX,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAElE,MAAM,CAAC,MAAM,cAAc,GAAqC;IAC9D,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,4CAA4C;IAErD,OAAO,EAAE;QACP,MAAM,CAAC,MAAoB;YACzB,OAAO,mBAAmB,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,YAAY;gBACnB,MAAM,CAAC,cAAc;gBACrB,MAAM,CAAC,cAAc;gBACrB,MAAM,CAAC,iBAAiB;gBACxB,MAAM,CAAC,YAAY;gBACnB,MAAM,CAAC,YAAY;gBACnB,MAAM,CAAC,eAAe;gBACtB,MAAM,CAAC,eAAe;aACvB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAS;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;gBACL,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBACxB,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1B,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC7B,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBACxB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBACxB,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC3B,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;aAC5B,CAAC;QACJ,CAAC;KACF;IAED,SAAS,EAAE;QACT,OAAO,CAAC,MAAoB;YAC1B,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC9E,CAAC;YACD,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvC,QAAQ,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YACzF,CAAC;YACD,MAAM,GAAG,GAAG;gBACV,MAAM,CAAC,iBAAiB,IAAI,WAAW;gBACvC,MAAM,CAAC,YAAY,IAAI,UAAU;gBACjC,MAAM,CAAC,YAAY,IAAI,UAAU;gBACjC,MAAM,CAAC,eAAe,IAAI,aAAa;gBACvC,MAAM,CAAC,eAAe,IAAI,aAAa;aACxC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClB,OAAO;gBACL,YAAY,EAAE,wBAAwB;gBACtC,aAAa,EAAE;oBACb,kBAAkB,MAAM,CAAC,YAAY,EAAE;oBACvC,0BAA0B,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe;oBACzE,uBAAuB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;oBAC7D,oBAAoB,MAAM,CAAC,cAAc,CAAC,MAAM,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACzF;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -1,10 +1,18 @@
1
1
  import type { Address, PermissionTemplate } from "../types.js";
2
- /** Params for SharedTransferTargetPermission. */
2
+ /**
3
+ * Params for SharedTransferTargetPermission.
4
+ *
5
+ * Matches the on-chain `_applyConfig` decode exactly:
6
+ * abi.decode(params, (address[], address[], uint256))
7
+ * → recipients, tokens, maxAmountPerTx
8
+ */
3
9
  export type TransferTargetParams = {
4
- /** Addresses that ERC-20 transfer() calls are allowed to send funds to. */
10
+ /** Addresses that ERC-20 transfer()/transferFrom() calls are allowed to send funds to. */
5
11
  allowedRecipients: Address[];
6
- /** Token addresses for which transfer restrictions apply. Empty = all tokens. */
12
+ /** Token addresses for which transfers are gated. The token is the call target. */
7
13
  allowedTokens: Address[];
14
+ /** Maximum amount per transfer, in the token's base units. */
15
+ maxAmountPerTx: bigint;
8
16
  };
9
17
  export declare const transferTargetTemplate: PermissionTemplate<TransferTargetParams>;
10
18
  //# sourceMappingURL=transferTarget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transferTarget.d.ts","sourceRoot":"","sources":["../../src/templates/transferTarget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF,iDAAiD;AACjD,MAAM,MAAM,oBAAoB,GAAG;IACjC,2EAA2E;IAC3E,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC7B,iFAAiF;IACjF,aAAa,EAAE,OAAO,EAAE,CAAC;CAC1B,CAAC;AAOF,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,oBAAoB,CAsC3E,CAAC"}
1
+ {"version":3,"file":"transferTarget.d.ts","sourceRoot":"","sources":["../../src/templates/transferTarget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,0FAA0F;IAC1F,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC7B,mFAAmF;IACnF,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAQF,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,oBAAoB,CA2C3E,CAAC"}
@@ -1,20 +1,26 @@
1
1
  import { decodeAbiParameters, encodeAbiParameters } from "viem";
2
2
  const ABI = [
3
- { name: "allowedRecipients", type: "address[]" },
4
- { name: "allowedTokens", type: "address[]" },
3
+ { name: "recipients", type: "address[]" },
4
+ { name: "tokens", type: "address[]" },
5
+ { name: "maxAmountPerTx", type: "uint256" },
5
6
  ];
6
7
  export const transferTargetTemplate = {
7
8
  name: "SharedTransferTargetPermission",
8
9
  address: "0x0000000000000000000000000000000000000000",
9
10
  encoder: {
10
11
  encode(params) {
11
- return encodeAbiParameters(ABI, [params.allowedRecipients, params.allowedTokens]);
12
+ return encodeAbiParameters(ABI, [
13
+ params.allowedRecipients,
14
+ params.allowedTokens,
15
+ params.maxAmountPerTx,
16
+ ]);
12
17
  },
13
18
  decode(data) {
14
19
  const decoded = decodeAbiParameters(ABI, data);
15
20
  return {
16
21
  allowedRecipients: [...decoded[0]],
17
22
  allowedTokens: [...decoded[1]],
23
+ maxAmountPerTx: decoded[2],
18
24
  };
19
25
  },
20
26
  },
@@ -24,14 +30,15 @@ export const transferTargetTemplate = {
24
30
  if (params.allowedRecipients.length === 0) {
25
31
  warnings.push("No recipients specified — all transfers will be blocked");
26
32
  }
27
- const tokenScope = params.allowedTokens.length === 0
28
- ? "all tokens"
29
- : params.allowedTokens.join(", ");
33
+ if (params.allowedTokens.length === 0) {
34
+ warnings.push("No tokens specified — all transfers will be blocked");
35
+ }
30
36
  return {
31
37
  templateName: "SharedTransferTargetPermission",
32
38
  humanReadable: [
33
39
  `ERC-20 transfers restricted to ${params.allowedRecipients.length} approved recipient(s)`,
34
- `Applies to: ${tokenScope}`,
40
+ `Gated tokens: ${params.allowedTokens.join(", ")}`,
41
+ `Maximum amount per transfer: ${params.maxAmountPerTx.toString()} (base units)`,
35
42
  `Approved recipients: ${params.allowedRecipients.join(", ")}`,
36
43
  ],
37
44
  warnings,
@@ -1 +1 @@
1
- {"version":3,"file":"transferTarget.js","sourceRoot":"","sources":["../../src/templates/transferTarget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAWhE,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE;IAChD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE;CACpC,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAA6C;IAC9E,IAAI,EAAE,gCAAgC;IACtC,OAAO,EAAE,4CAA4C;IAErD,OAAO,EAAE;QACP,MAAM,CAAC,MAA4B;YACjC,OAAO,mBAAmB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,CAAC,IAAS;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;gBACL,iBAAiB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClC,aAAa,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;aAC/B,CAAC;QACJ,CAAC;KACF;IAED,SAAS,EAAE;QACT,OAAO,CAAC,MAA4B;YAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,UAAU,GACd,MAAM,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;gBAC/B,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,OAAO;gBACL,YAAY,EAAE,gCAAgC;gBAC9C,aAAa,EAAE;oBACb,kCAAkC,MAAM,CAAC,iBAAiB,CAAC,MAAM,wBAAwB;oBACzF,eAAe,UAAU,EAAE;oBAC3B,wBAAwB,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC9D;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"transferTarget.js","sourceRoot":"","sources":["../../src/templates/transferTarget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAmBhE,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE;IACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE;CACnC,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAA6C;IAC9E,IAAI,EAAE,gCAAgC;IACtC,OAAO,EAAE,4CAA4C;IAErD,OAAO,EAAE;QACP,MAAM,CAAC,MAA4B;YACjC,OAAO,mBAAmB,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,iBAAiB;gBACxB,MAAM,CAAC,aAAa;gBACpB,MAAM,CAAC,cAAc;aACtB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAS;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;gBACL,iBAAiB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClC,aAAa,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9B,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;aAC3B,CAAC;QACJ,CAAC;KACF;IAED,SAAS,EAAE;QACT,OAAO,CAAC,MAA4B;YAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACvE,CAAC;YACD,OAAO;gBACL,YAAY,EAAE,gCAAgC;gBAC9C,aAAa,EAAE;oBACb,kCAAkC,MAAM,CAAC,iBAAiB,CAAC,MAAM,wBAAwB;oBACzF,iBAAiB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAClD,gCAAgC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe;oBAC/E,wBAAwB,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC9D;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -39,6 +39,7 @@
39
39
  "prebuild": "node scripts/generate-intelligence.mjs",
40
40
  "build": "tsc -p tsconfig.json",
41
41
  "typecheck": "tsc -p tsconfig.json --noEmit",
42
+ "test": "tsx --test src/**/*.test.ts",
42
43
  "generate:intelligence": "node scripts/generate-intelligence.mjs"
43
44
  },
44
45
  "peerDependencies": {