@vultisig/core-chain 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/chains/cosmos/account/getCosmosAccountInfo.d.ts.map +1 -1
  3. package/dist/chains/cosmos/account/getCosmosAccountInfo.js +41 -5
  4. package/dist/chains/cosmos/account/getCosmosAccountInfo.js.map +1 -1
  5. package/dist/swap/NoSwapRoutesError.d.ts +2 -1
  6. package/dist/swap/NoSwapRoutesError.d.ts.map +1 -1
  7. package/dist/swap/NoSwapRoutesError.js +3 -2
  8. package/dist/swap/NoSwapRoutesError.js.map +1 -1
  9. package/dist/swap/SwapError.d.ts +18 -0
  10. package/dist/swap/SwapError.d.ts.map +1 -0
  11. package/dist/swap/SwapError.js +22 -0
  12. package/dist/swap/SwapError.js.map +1 -0
  13. package/dist/swap/general/GeneralSwapProvider.d.ts +1 -1
  14. package/dist/swap/general/GeneralSwapProvider.d.ts.map +1 -1
  15. package/dist/swap/general/GeneralSwapProvider.js +2 -1
  16. package/dist/swap/general/GeneralSwapProvider.js.map +1 -1
  17. package/dist/swap/general/GeneralSwapQuote.d.ts +24 -0
  18. package/dist/swap/general/GeneralSwapQuote.d.ts.map +1 -1
  19. package/dist/swap/general/cowswap/api/getCowSwapOrderStatus.d.ts +9 -0
  20. package/dist/swap/general/cowswap/api/getCowSwapOrderStatus.d.ts.map +1 -0
  21. package/dist/swap/general/cowswap/api/getCowSwapOrderStatus.js +11 -0
  22. package/dist/swap/general/cowswap/api/getCowSwapOrderStatus.js.map +1 -0
  23. package/dist/swap/general/cowswap/api/getCowSwapQuote.d.ts +14 -0
  24. package/dist/swap/general/cowswap/api/getCowSwapQuote.d.ts.map +1 -0
  25. package/dist/swap/general/cowswap/api/getCowSwapQuote.js +51 -0
  26. package/dist/swap/general/cowswap/api/getCowSwapQuote.js.map +1 -0
  27. package/dist/swap/general/cowswap/api/submitCowSwapOrder.d.ts +12 -0
  28. package/dist/swap/general/cowswap/api/submitCowSwapOrder.d.ts.map +1 -0
  29. package/dist/swap/general/cowswap/api/submitCowSwapOrder.js +17 -0
  30. package/dist/swap/general/cowswap/api/submitCowSwapOrder.js.map +1 -0
  31. package/dist/swap/general/cowswap/config.d.ts +18 -0
  32. package/dist/swap/general/cowswap/config.d.ts.map +1 -0
  33. package/dist/swap/general/cowswap/config.js +83 -0
  34. package/dist/swap/general/cowswap/config.js.map +1 -0
  35. package/dist/swap/general/cowswap/permit/buildEip2612Permit.d.ts +39 -0
  36. package/dist/swap/general/cowswap/permit/buildEip2612Permit.d.ts.map +1 -0
  37. package/dist/swap/general/cowswap/permit/buildEip2612Permit.js +32 -0
  38. package/dist/swap/general/cowswap/permit/buildEip2612Permit.js.map +1 -0
  39. package/dist/swap/general/cowswap/sign/buildCowSwapOrder.d.ts +31 -0
  40. package/dist/swap/general/cowswap/sign/buildCowSwapOrder.d.ts.map +1 -0
  41. package/dist/swap/general/cowswap/sign/buildCowSwapOrder.js +45 -0
  42. package/dist/swap/general/cowswap/sign/buildCowSwapOrder.js.map +1 -0
  43. package/dist/swap/general/cowswap/sign/buildEip712Domain.d.ts +9 -0
  44. package/dist/swap/general/cowswap/sign/buildEip712Domain.d.ts.map +1 -0
  45. package/dist/swap/general/cowswap/sign/buildEip712Domain.js +11 -0
  46. package/dist/swap/general/cowswap/sign/buildEip712Domain.js.map +1 -0
  47. package/dist/swap/general/cowswap/types.d.ts +31 -0
  48. package/dist/swap/general/cowswap/types.d.ts.map +1 -0
  49. package/dist/swap/general/cowswap/types.js +2 -0
  50. package/dist/swap/general/cowswap/types.js.map +1 -0
  51. package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts +11 -1
  52. package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts.map +1 -1
  53. package/dist/swap/general/lifi/api/getLifiSwapQuote.js +34 -2
  54. package/dist/swap/general/lifi/api/getLifiSwapQuote.js.map +1 -1
  55. package/dist/swap/keysign/getSwapDestinationAddress.d.ts.map +1 -1
  56. package/dist/swap/keysign/getSwapDestinationAddress.js +8 -0
  57. package/dist/swap/keysign/getSwapDestinationAddress.js.map +1 -1
  58. package/dist/swap/native/api/getNativeSwapQuote.d.ts.map +1 -1
  59. package/dist/swap/native/api/getNativeSwapQuote.js +1 -2
  60. package/dist/swap/native/api/getNativeSwapQuote.js.map +1 -1
  61. package/dist/swap/quote/findSwapQuote.d.ts +1 -1
  62. package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
  63. package/dist/swap/quote/findSwapQuote.js +24 -4
  64. package/dist/swap/quote/findSwapQuote.js.map +1 -1
  65. package/package.json +46 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
1
  # @vultisig/core-chain
2
2
 
3
+ ## 2.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#584](https://github.com/vultisig/vultisig-sdk/pull/584) [`a13c644`](https://github.com/vultisig/vultisig-sdk/commit/a13c644be796a7bf10dc0ab426ac888b9e962585) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - feat(cowswap): add CowSwap RFQ as swap provider for same-chain EVM trades (phase 1 sdk scaffold)
8
+
9
+ New `cowswap` module under `packages/core/chain/swap/general/cowswap/`:
10
+ - `config.ts` - chain configs (Ethereum, Arbitrum, Base, Avalanche), static EIP-2612 permit allowlist, app code / affiliate constants
11
+ - `types.ts` - CowSwap API response types
12
+ - `sign/buildCowSwapOrder.ts` - builds the EIP-712 CowSwap order struct; exports `buildCowSwapAppData` and `keccak256Hex` (uses viem)
13
+ - `sign/buildEip712Domain.ts` - EIP-712 domain for GPv2 settlement contract
14
+ - `api/getCowSwapQuote.ts` - POSTs to `/api/v1/quote`, returns `GeneralSwapQuote` with new `cowswap_order` tx arm
15
+ - `api/submitCowSwapOrder.ts` - POSTs signed order to `/api/v1/orders`
16
+ - `api/getCowSwapOrderStatus.ts` - polls order status
17
+ - `permit/buildEip2612Permit.ts` - builds EIP-2612 permit typed data for permit-eligible sell tokens
18
+
19
+ `GeneralSwapTx` union extended with `cowswap_order` arm.
20
+ `GeneralSwapProvider` extended with `'cowswap'`.
21
+ CowSwap is intentionally NOT registered as a live `findSwapQuote` fetcher (nor in
22
+ `aggregatorPreferenceOrder`) in phase 1 — the consumer build/sign path is wired in phase 2.
23
+ All `matchRecordUnion` call-sites over `GeneralSwapTx` updated for exhaustiveness.
24
+
25
+ No live fetcher registration, no mcp-ts wiring, no app UI changes. Consumer (mcp-ts) is responsible for USD threshold gating in phase 2.
26
+
27
+ - [#584](https://github.com/vultisig/vultisig-sdk/pull/584) [`a13c644`](https://github.com/vultisig/vultisig-sdk/commit/a13c644be796a7bf10dc0ab426ac888b9e962585) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - ## New
28
+ - Polkadot Asset Hub USDT (asset_id 1984) + USDC (asset_id 1337) token registry ([#562](https://github.com/vultisig/vultisig-sdk/issues/562))
29
+ - Polkadot `pallet_assets.Account` balance resolver for Asset Hub tokens - replaces placeholder 0n guard ([#563](https://github.com/vultisig/vultisig-sdk/issues/563))
30
+ - Tron native send `data` field (proto field 12) for THORChain memos + exchange deposit memos; `BuildTronSendOptions` and `BuildTrc20TransferOptions` gain optional `data?: Uint8Array` field ([#559](https://github.com/vultisig/vultisig-sdk/issues/559))
31
+
32
+ ## Fixed
33
+ - Tron TRC-20 fee estimate now subtracts sender's available energy before charging TRX ([#556](https://github.com/vultisig/vultisig-sdk/issues/556))
34
+ - Tron native send free bandwidth check prevents spurious fee charge when bandwidth is available ([#555](https://github.com/vultisig/vultisig-sdk/issues/555))
35
+
36
+ ### Patch Changes
37
+
38
+ - [#602](https://github.com/vultisig/vultisig-sdk/pull/602) [`5bb56a4`](https://github.com/vultisig/vultisig-sdk/commit/5bb56a4daba8b896626c54fabd94fd6c9a35320e) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - `getCosmosAccountInfo` now retries against a registered fallback LCD when the primary endpoint fails. Without this, a single-provider degradation (e.g. `terra-classic-lcd.publicnode.com` outage on 2026-05-28) hard-failed every cosmos signing surface that touches this code path — there was no recovery.
39
+
40
+ Fallback URLs per chain (Polkachu mirrors where available; Hexxagon for `TerraClassic` since polkachu has no Terra Classic endpoint, verified 2026-05-28). Chains not in the map preserve fail-closed behaviour.
41
+
42
+ Parallel to vultiagent-app#1017 (app-side fix) + mcp-ts#266 (mcp-side fix).
43
+
44
+ - [#592](https://github.com/vultisig/vultisig-sdk/pull/592) [`c4b4560`](https://github.com/vultisig/vultisig-sdk/commit/c4b45604f043700068aaf1c3c1a1ecad5c8a874f) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - lifi: tighten slippage to 0.3% for stablecoin pairs (USDC/USDT/DAI/...), keep 1% for volatile pairs
45
+
46
+ - [#596](https://github.com/vultisig/vultisig-sdk/pull/596) [`880cde0`](https://github.com/vultisig/vultisig-sdk/commit/880cde00a5978e8a4dff2cf8adb627059e4af5bf) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - Remove i18next dependency from `getNativeSwapQuote` — the lone `t()` call was the only i18next usage in the entire chain package, and consuming apps that don't initialize i18next (or initialize it without a Backend plugin) crash with `Cannot read property 'reload' of undefined` whenever code touches the SDK swap path. Replaced with a plain English fallback string. Drops i18next from `dependencies`.
47
+
48
+ - [#593](https://github.com/vultisig/vultisig-sdk/pull/593) [`5d11cf3`](https://github.com/vultisig/vultisig-sdk/commit/5d11cf3bfb81aba929fe8e81bb77e7aebff15129) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - refactor(swap): typed SwapError class with stable codes at findSwapQuote throw sites - enables instanceof checks instead of message string matching
49
+
3
50
  ## 2.5.0
4
51
 
5
52
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"getCosmosAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAsEhE,eAAO,MAAM,oBAAoB,GAAU,oBAAoB,YAAY,CAAC,WAAW,CAAC;;;;;;EAgCvF,CAAA"}
1
+ {"version":3,"file":"getCosmosAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAyGhE,eAAO,MAAM,oBAAoB,GAAU,oBAAoB,YAAY,CAAC,WAAW,CAAC;;;;;;EAgCvF,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { Chain } from '@vultisig/core-chain/Chain';
1
2
  import { getCosmosClient } from '@vultisig/core-chain/chains/cosmos/client';
2
3
  import { cosmosRpcUrl } from '@vultisig/core-chain/chains/cosmos/cosmosRpcUrl';
3
4
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
@@ -23,19 +24,54 @@ const parseLcdAccount = (resp) => {
23
24
  // LCD uses a different infra path (REST vs Tendermint RPC), supports
24
25
  // extended account types (vesting, module wrappers) via JSON shape parsing,
25
26
  // and gives us a second chance before we ship a doomed tx.
26
- const fetchAccountViaLcd = async (chain, address) => {
27
- const base = cosmosRpcUrl[chain];
28
- if (!base)
29
- return null;
27
+ //
28
+ // SamYap timeout report (vultiagent-app#1017, 2026-05-28): the primary LCD
29
+ // for Terra Classic (terra-classic-lcd.publicnode.com) was degraded for
30
+ // hours, causing every cosmos signing surface that touches this code path
31
+ // to hard-fail. The single-URL design had no recovery. Add a fallback URL
32
+ // per chain so a publicnode degradation doesn't take out signing entirely.
33
+ //
34
+ // Polkachu mirrors per cosmos chain. Hexxagon for columbus-5 since polkachu
35
+ // has no Terra Classic endpoint (verified 2026-05-28 — see
36
+ // vultiagent-app#1017 + mcp-ts#266). Keys are the chain id used by
37
+ // cosmos-sdk; chains not in this map have no fallback (degrade fail-closed
38
+ // behaviour preserved).
39
+ const COSMOS_LCD_FALLBACK_URLS = {
40
+ [Chain.Cosmos]: 'https://cosmos-api.polkachu.com',
41
+ [Chain.Osmosis]: 'https://osmosis-api.polkachu.com',
42
+ [Chain.Kujira]: 'https://kujira-api.polkachu.com',
43
+ [Chain.Terra]: 'https://terra-api.polkachu.com',
44
+ [Chain.TerraClassic]: 'https://lcd.terra-classic.hexxagon.io',
45
+ [Chain.THORChain]: 'https://thorchain-api.polkachu.com',
46
+ [Chain.Noble]: 'https://noble-api.polkachu.com',
47
+ [Chain.Dydx]: 'https://dydx-api.polkachu.com',
48
+ [Chain.Akash]: 'https://akash-api.polkachu.com',
49
+ };
50
+ const tryLcd = async (base, address) => {
30
51
  try {
31
52
  const resp = await queryUrl(`${base}/cosmos/auth/v1beta1/accounts/${address}`);
32
53
  return parseLcdAccount(resp);
33
54
  }
34
55
  catch {
35
- // 404 (account not found) or transient LCD error — caller decides.
36
56
  return null;
37
57
  }
38
58
  };
59
+ const fetchAccountViaLcd = async (chain, address) => {
60
+ const base = cosmosRpcUrl[chain];
61
+ if (!base)
62
+ return null;
63
+ const primary = await tryLcd(base, address);
64
+ if (primary)
65
+ return primary;
66
+ // Primary failed (network / 5xx / shape mismatch). Try the registered
67
+ // fallback for this chain. Both-failed surfaces as null and the caller
68
+ // ships with sequence:0 default — same legacy behaviour, but only after
69
+ // we've actually exhausted both endpoints.
70
+ const fallback = COSMOS_LCD_FALLBACK_URLS[chain];
71
+ if (!fallback)
72
+ return null;
73
+ return tryLcd(fallback, address);
74
+ };
39
75
  export const getCosmosAccountInfo = async ({ chain, address }) => {
40
76
  const client = await getCosmosClient(chain);
41
77
  const [accountInfo, block] = await Promise.all([client.getAccount(address), client.getBlock()]);
@@ -1 +1 @@
1
- {"version":3,"file":"getCosmosAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getCosmosAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- export declare class NoSwapRoutesError extends Error {
1
+ import { SwapError } from './SwapError.js';
2
+ export declare class NoSwapRoutesError extends SwapError {
2
3
  constructor();
3
4
  }
4
5
  //# sourceMappingURL=NoSwapRoutesError.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NoSwapRoutesError.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/NoSwapRoutesError.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;;CAI3C"}
1
+ {"version":3,"file":"NoSwapRoutesError.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/NoSwapRoutesError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,aAAa,CAAA;AAEtD,qBAAa,iBAAkB,SAAQ,SAAS;;CAI/C"}
@@ -1,6 +1,7 @@
1
- export class NoSwapRoutesError extends Error {
1
+ import { SwapError, SwapErrorCode } from './SwapError.js';
2
+ export class NoSwapRoutesError extends SwapError {
2
3
  constructor() {
3
- super(`No swap routes found.`);
4
+ super(SwapErrorCode.NoRoutesFound, `No swap routes found.`);
4
5
  }
5
6
  }
6
7
  //# sourceMappingURL=NoSwapRoutesError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NoSwapRoutesError.js","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/NoSwapRoutesError.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C;QACE,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"NoSwapRoutesError.js","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/NoSwapRoutesError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEtD,MAAM,OAAO,iBAAkB,SAAQ,SAAS;IAC9C;QACE,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAA;IAC7D,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ export declare enum SwapErrorCode {
2
+ /** No swap provider supports this chain pair - swap cannot be attempted at all */
3
+ NoRoutesFound = "SWAP_NO_ROUTES_FOUND",
4
+ /** Amount is below the dust threshold of one or more providers */
5
+ AmountTooSmall = "SWAP_AMOUNT_TOO_SMALL",
6
+ /** Amount is below a provider's minimum but above dust - provider surfaced an explicit min */
7
+ AmountBelowMinimum = "SWAP_AMOUNT_BELOW_MINIMUM",
8
+ /** All configured providers were attempted and all failed */
9
+ AllProvidersFailed = "SWAP_ALL_PROVIDERS_FAILED",
10
+ /** Caller passed invalid configuration (e.g. mixed-case THORName affiliateFeeAddress) */
11
+ InvalidConfig = "SWAP_INVALID_CONFIG"
12
+ }
13
+ export declare class SwapError extends Error {
14
+ readonly code: SwapErrorCode;
15
+ readonly name = "SwapError";
16
+ constructor(code: SwapErrorCode, message: string);
17
+ }
18
+ //# sourceMappingURL=SwapError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwapError.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,kFAAkF;IAClF,aAAa,yBAAyB;IACtC,kEAAkE;IAClE,cAAc,0BAA0B;IACxC,8FAA8F;IAC9F,kBAAkB,8BAA8B;IAChD,6DAA6D;IAC7D,kBAAkB,8BAA8B;IAChD,yFAAyF;IACzF,aAAa,wBAAwB;CACtC;AAED,qBAAa,SAAU,SAAQ,KAAK;aAIhB,IAAI,EAAE,aAAa;IAHrC,QAAQ,CAAC,IAAI,eAAc;gBAGT,IAAI,EAAE,aAAa,EACnC,OAAO,EAAE,MAAM;CAIlB"}
@@ -0,0 +1,22 @@
1
+ export var SwapErrorCode;
2
+ (function (SwapErrorCode) {
3
+ /** No swap provider supports this chain pair - swap cannot be attempted at all */
4
+ SwapErrorCode["NoRoutesFound"] = "SWAP_NO_ROUTES_FOUND";
5
+ /** Amount is below the dust threshold of one or more providers */
6
+ SwapErrorCode["AmountTooSmall"] = "SWAP_AMOUNT_TOO_SMALL";
7
+ /** Amount is below a provider's minimum but above dust - provider surfaced an explicit min */
8
+ SwapErrorCode["AmountBelowMinimum"] = "SWAP_AMOUNT_BELOW_MINIMUM";
9
+ /** All configured providers were attempted and all failed */
10
+ SwapErrorCode["AllProvidersFailed"] = "SWAP_ALL_PROVIDERS_FAILED";
11
+ /** Caller passed invalid configuration (e.g. mixed-case THORName affiliateFeeAddress) */
12
+ SwapErrorCode["InvalidConfig"] = "SWAP_INVALID_CONFIG";
13
+ })(SwapErrorCode || (SwapErrorCode = {}));
14
+ export class SwapError extends Error {
15
+ code;
16
+ name = 'SwapError';
17
+ constructor(code, message) {
18
+ super(message);
19
+ this.code = code;
20
+ }
21
+ }
22
+ //# sourceMappingURL=SwapError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwapError.js","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAWX;AAXD,WAAY,aAAa;IACvB,kFAAkF;IAClF,uDAAsC,CAAA;IACtC,kEAAkE;IAClE,yDAAwC,CAAA;IACxC,8FAA8F;IAC9F,iEAAgD,CAAA;IAChD,6DAA6D;IAC7D,iEAAgD,CAAA;IAChD,yFAAyF;IACzF,sDAAqC,CAAA;AACvC,CAAC,EAXW,aAAa,KAAb,aAAa,QAWxB;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAIhB;IAHT,IAAI,GAAG,WAAW,CAAA;IAE3B,YACkB,IAAmB,EACnC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAe;IAIrC,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- export declare const generalSwapProviders: readonly ["1inch", "li.fi", "kyber", "swapkit"];
1
+ export declare const generalSwapProviders: readonly ["1inch", "li.fi", "kyber", "swapkit", "cowswap"];
2
2
  export type GeneralSwapProvider = (typeof generalSwapProviders)[number];
3
3
  export declare const generalSwapProviderName: Record<GeneralSwapProvider, string>;
4
4
  //# sourceMappingURL=GeneralSwapProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeneralSwapProvider.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapProvider.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,iDAAkD,CAAA;AAEnF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAKvE,CAAA"}
1
+ {"version":3,"file":"GeneralSwapProvider.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapProvider.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,4DAA6D,CAAA;AAE9F,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAMvE,CAAA"}
@@ -1,8 +1,9 @@
1
- export const generalSwapProviders = ['1inch', 'li.fi', 'kyber', 'swapkit'];
1
+ export const generalSwapProviders = ['1inch', 'li.fi', 'kyber', 'swapkit', 'cowswap'];
2
2
  export const generalSwapProviderName = {
3
3
  '1inch': '1Inch',
4
4
  'li.fi': 'LI.FI',
5
5
  kyber: 'KyberSwap',
6
6
  swapkit: 'SwapKit',
7
+ cowswap: 'CowSwap',
7
8
  };
8
9
  //# sourceMappingURL=GeneralSwapProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeneralSwapProvider.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapProvider.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAInF,MAAM,CAAC,MAAM,uBAAuB,GAAwC;IAC1E,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,SAAS;CACnB,CAAA"}
1
+ {"version":3,"file":"GeneralSwapProvider.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapProvider.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAU,CAAA;AAI9F,MAAM,CAAC,MAAM,uBAAuB,GAAwC;IAC1E,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACnB,CAAA"}
@@ -1,4 +1,6 @@
1
1
  import { SwapFee } from '@vultisig/core-chain/swap/SwapFee';
2
+ import { CowSwapTokenBalance } from './cowswap/sign/buildCowSwapOrder.js';
3
+ import { CowSwapOrderKind } from './cowswap/types.js';
2
4
  import { GeneralSwapProvider } from './GeneralSwapProvider.js';
3
5
  export type GeneralSwapTx = {
4
6
  evm: {
@@ -25,6 +27,28 @@ export type GeneralSwapTx = {
25
27
  inboundAddress?: string;
26
28
  swapId?: string;
27
29
  };
30
+ } | {
31
+ cowswap_order: {
32
+ sellToken: string;
33
+ buyToken: string;
34
+ receiver: string;
35
+ sellAmount: string;
36
+ buyAmount: string;
37
+ validTo: number;
38
+ appData: string;
39
+ appDataHash: string;
40
+ feeAmount: string;
41
+ kind: CowSwapOrderKind;
42
+ partiallyFillable: boolean;
43
+ sellTokenBalance: CowSwapTokenBalance;
44
+ buyTokenBalance: CowSwapTokenBalance;
45
+ chainId: number;
46
+ apiBase: string;
47
+ /** Set to true when the sellToken supports EIP-2612 permit. When true
48
+ * the signing flow should build and include a permit signature alongside
49
+ * the order signature, avoiding a separate ERC-20 approve transaction. */
50
+ permitRequired?: true;
51
+ };
28
52
  };
29
53
  export type GeneralSwapQuote = {
30
54
  dstAmount: string;
@@ -1 +1 @@
1
- {"version":3,"file":"GeneralSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,MAAM,MAAM,aAAa,GACrB;IACE,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAA;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;CACF,GACD;IACE,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,OAAO,CAAA;KACjB,CAAA;CACF,GACD;IACE,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,UAAU,CAAA;QACtB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,CAAA;AAEL,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,EAAE,EAAE,aAAa,CAAA;CAClB,CAAA"}
1
+ {"version":3,"file":"GeneralSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/general/GeneralSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,MAAM,MAAM,aAAa,GACrB;IACE,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAA;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;CACF,GACD;IACE,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,OAAO,CAAA;KACjB,CAAA;CACF,GACD;IACE,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,UAAU,CAAA;QACtB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,GACD;IACE,aAAa,EAAE;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;QAChB,UAAU,EAAE,MAAM,CAAA;QAClB,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,EAAE,MAAM,CAAA;QACjB,IAAI,EAAE,gBAAgB,CAAA;QACtB,iBAAiB,EAAE,OAAO,CAAA;QAC1B,gBAAgB,EAAE,mBAAmB,CAAA;QACrC,eAAe,EAAE,mBAAmB,CAAA;QACpC,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf;;kFAE0E;QAC1E,cAAc,CAAC,EAAE,IAAI,CAAA;KACtB,CAAA;CACF,CAAA;AAEL,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,EAAE,EAAE,aAAa,CAAA;CAClB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { CowSwapOrderStatusResponse } from '../types.js';
2
+ type GetCowSwapOrderStatusInput = {
3
+ apiBase: string;
4
+ uid: string;
5
+ };
6
+ /** GET /api/v1/orders/{uid} — poll order status. */
7
+ export declare function getCowSwapOrderStatus({ apiBase, uid, }: GetCowSwapOrderStatusInput): Promise<CowSwapOrderStatusResponse>;
8
+ export {};
9
+ //# sourceMappingURL=getCowSwapOrderStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCowSwapOrderStatus.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/getCowSwapOrderStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAA;AAErD,KAAK,0BAA0B,GAAG;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,oDAAoD;AACpD,wBAAsB,qBAAqB,CAAC,EAC1C,OAAO,EACP,GAAG,GACJ,EAAE,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAUlE"}
@@ -0,0 +1,11 @@
1
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
2
+ /** GET /api/v1/orders/{uid} — poll order status. */
3
+ export async function getCowSwapOrderStatus({ apiBase, uid, }) {
4
+ const raw = await queryUrl(`${apiBase}/api/v1/orders/${uid}`);
5
+ return {
6
+ status: raw.status,
7
+ txHash: raw.txHash,
8
+ executedBuyAmount: raw.executedBuyAmount,
9
+ };
10
+ }
11
+ //# sourceMappingURL=getCowSwapOrderStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCowSwapOrderStatus.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/getCowSwapOrderStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAS7D,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAC1C,OAAO,EACP,GAAG,GACwB;IAC3B,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,GAAG,OAAO,kBAAkB,GAAG,EAAE,CAClC,CAAA;IAED,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAA8C;QAC1D,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;KACzC,CAAA;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { GeneralSwapQuote } from '../../GeneralSwapQuote.js';
2
+ import { CowSwapChainConfig } from '../config.js';
3
+ type GetCowSwapQuoteInput = {
4
+ sellToken: string;
5
+ buyToken: string;
6
+ sellAmount: bigint;
7
+ from: string;
8
+ receiver: string;
9
+ chainConfig: CowSwapChainConfig;
10
+ affiliateBps?: number;
11
+ };
12
+ export declare function getCowSwapQuote({ sellToken, buyToken, sellAmount, from, receiver, chainConfig, affiliateBps, }: GetCowSwapQuoteInput): Promise<GeneralSwapQuote>;
13
+ export {};
14
+ //# sourceMappingURL=getCowSwapQuote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCowSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/getCowSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAGL,kBAAkB,EAEnB,MAAM,WAAW,CAAA;AAiBlB,KAAK,oBAAoB,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,kBAAkB,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,wBAAsB,eAAe,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqDlD"}
@@ -0,0 +1,51 @@
1
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
2
+ import { COWSWAP_DEFAULT_AFFILIATE_BPS, COWSWAP_FEE_RECIPIENT, KNOWN_PERMIT_TOKENS, } from '../config.js';
3
+ import { buildCowSwapAppData, keccak256Hex } from '../sign/buildCowSwapOrder.js';
4
+ export async function getCowSwapQuote({ sellToken, buyToken, sellAmount, from, receiver, chainConfig, affiliateBps, }) {
5
+ const bps = affiliateBps ?? COWSWAP_DEFAULT_AFFILIATE_BPS;
6
+ const appData = buildCowSwapAppData(bps, COWSWAP_FEE_RECIPIENT);
7
+ const appDataHash = keccak256Hex(appData);
8
+ const body = {
9
+ sellToken: sellToken.toLowerCase(),
10
+ buyToken: buyToken.toLowerCase(),
11
+ sellAmountBeforeFee: sellAmount.toString(),
12
+ from: from.toLowerCase(),
13
+ receiver: receiver.toLowerCase(),
14
+ kind: 'sell',
15
+ signingScheme: 'eip712',
16
+ partiallyFillable: false,
17
+ appData,
18
+ appDataHash,
19
+ };
20
+ const response = await queryUrl(`${chainConfig.apiBase}/api/v1/quote`, {
21
+ method: 'POST',
22
+ body,
23
+ });
24
+ const { quote } = response;
25
+ const permitRequired = KNOWN_PERMIT_TOKENS[chainConfig.chainId]?.some(addr => addr.toLowerCase() === sellToken.toLowerCase());
26
+ return {
27
+ dstAmount: quote.buyAmount,
28
+ provider: 'cowswap',
29
+ tx: {
30
+ cowswap_order: {
31
+ sellToken: quote.sellToken,
32
+ buyToken: quote.buyToken,
33
+ receiver,
34
+ sellAmount: quote.sellAmount,
35
+ buyAmount: quote.buyAmount,
36
+ validTo: quote.validTo,
37
+ appData,
38
+ appDataHash,
39
+ feeAmount: quote.feeAmount,
40
+ kind: quote.kind,
41
+ partiallyFillable: quote.partiallyFillable,
42
+ sellTokenBalance: 'erc20',
43
+ buyTokenBalance: 'erc20',
44
+ chainId: chainConfig.chainId,
45
+ apiBase: chainConfig.apiBase,
46
+ ...(permitRequired ? { permitRequired: true } : {}),
47
+ },
48
+ },
49
+ };
50
+ }
51
+ //# sourceMappingURL=getCowSwapQuote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCowSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/getCowSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAG7D,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EAErB,mBAAmB,GACpB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AA0B7E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,YAAY,GACS;IACrB,MAAM,GAAG,GAAG,YAAY,IAAI,6BAA6B,CAAA;IACzD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAA;IAC/D,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAEzC,MAAM,IAAI,GAAwB;QAChC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;QAClC,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;QAChC,mBAAmB,EAAE,UAAU,CAAC,QAAQ,EAAE;QAC1C,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;QACxB,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;QAChC,IAAI,EAAE,MAAM;QACZ,aAAa,EAAE,QAAQ;QACvB,iBAAiB,EAAE,KAAK;QACxB,OAAO;QACP,WAAW;KACZ,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA0B,GAAG,WAAW,CAAC,OAAO,eAAe,EAAE;QAC9F,MAAM,EAAE,MAAM;QACd,IAAI;KACL,CAAC,CAAA;IAEF,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAA;IAE1B,MAAM,cAAc,GAAG,mBAAmB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CACnE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CACvD,CAAA;IAED,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,SAAS;QACnB,EAAE,EAAE;YACF,aAAa,EAAE;gBACb,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ;gBACR,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO;gBACP,WAAW;gBACX,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,gBAAgB,EAAE,OAAO;gBACzB,eAAe,EAAE,OAAO;gBACxB,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD;SACF;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { CowSwapOrder } from '../sign/buildCowSwapOrder.js';
2
+ type SubmitCowSwapOrderInput = {
3
+ apiBase: string;
4
+ order: CowSwapOrder;
5
+ signature: string;
6
+ from: string;
7
+ };
8
+ /** POST /api/v1/orders — submit a signed CowSwap order.
9
+ * Returns the orderUid assigned by the API. */
10
+ export declare function submitCowSwapOrder({ apiBase, order, signature, from, }: SubmitCowSwapOrderInput): Promise<string>;
11
+ export {};
12
+ //# sourceMappingURL=submitCowSwapOrder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitCowSwapOrder.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/submitCowSwapOrder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,KAAK,uBAAuB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,YAAY,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;+CAC+C;AAC/C,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,KAAK,EACL,SAAS,EACT,IAAI,GACL,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAc3C"}
@@ -0,0 +1,17 @@
1
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
2
+ /** POST /api/v1/orders — submit a signed CowSwap order.
3
+ * Returns the orderUid assigned by the API. */
4
+ export async function submitCowSwapOrder({ apiBase, order, signature, from, }) {
5
+ const body = {
6
+ ...order,
7
+ signature,
8
+ signingScheme: 'eip712',
9
+ from: from.toLowerCase(),
10
+ };
11
+ const orderUid = await queryUrl(`${apiBase}/api/v1/orders`, {
12
+ method: 'POST',
13
+ body,
14
+ });
15
+ return orderUid;
16
+ }
17
+ //# sourceMappingURL=submitCowSwapOrder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitCowSwapOrder.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/api/submitCowSwapOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAW7D;+CAC+C;AAC/C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,OAAO,EACP,KAAK,EACL,SAAS,EACT,IAAI,GACoB;IACxB,MAAM,IAAI,GAAG;QACX,GAAG,KAAK;QACR,SAAS;QACT,aAAa,EAAE,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;KACzB,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAS,GAAG,OAAO,gBAAgB,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,IAAI;KACL,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare const cowSwapSupportedChains: readonly ["Ethereum", "Arbitrum", "Base", "Avalanche"];
2
+ export type CowSwapSupportedChain = (typeof cowSwapSupportedChains)[number];
3
+ export declare const COW_SETTLEMENT_ADDRESS = "0x9008D19f58AAbD9eD0D60971565AA8510560ab41";
4
+ export declare const COW_VAULT_RELAYER_ADDRESS = "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110";
5
+ export type CowSwapChainConfig = {
6
+ apiBase: string;
7
+ settlementContract: string;
8
+ vaultRelayer: string;
9
+ chainId: number;
10
+ };
11
+ export declare const cowSwapChainConfig: Record<CowSwapSupportedChain, CowSwapChainConfig>;
12
+ export declare const KNOWN_PERMIT_TOKENS: Record<number, string[]>;
13
+ export declare const COWSWAP_APP_CODE = "vultisig";
14
+ export declare const COWSWAP_APP_VERSION = "0.1.0";
15
+ export declare const COWSWAP_DEFAULT_AFFILIATE_BPS = 50;
16
+ export declare const COWSWAP_FEE_RECIPIENT = "0x8E247a480449c84a5fDD25974A8501f3EFa4ABb9";
17
+ export declare const COWSWAP_VALID_TO_SECONDS: number;
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/cowswap/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,wDAAqF,CAAA;AAExH,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAA;AAG3E,eAAO,MAAM,sBAAsB,+CAA+C,CAAA;AAClF,eAAO,MAAM,yBAAyB,+CAA+C,CAAA;AAErF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAyBhF,CAAA;AAqBD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAqBxD,CAAA;AAED,eAAO,MAAM,gBAAgB,aAAa,CAAA;AAC1C,eAAO,MAAM,mBAAmB,UAAU,CAAA;AAK1C,eAAO,MAAM,6BAA6B,KAAK,CAAA;AAG/C,eAAO,MAAM,qBAAqB,+CAA+C,CAAA;AAGjF,eAAO,MAAM,wBAAwB,QAAU,CAAA"}
@@ -0,0 +1,83 @@
1
+ import { EvmChain } from '@vultisig/core-chain/Chain';
2
+ export const cowSwapSupportedChains = [EvmChain.Ethereum, EvmChain.Arbitrum, EvmChain.Base, EvmChain.Avalanche];
3
+ // CowSwap GPv2 contract addresses — same across all supported EVM chains.
4
+ export const COW_SETTLEMENT_ADDRESS = '0x9008D19f58AAbD9eD0D60971565AA8510560ab41';
5
+ export const COW_VAULT_RELAYER_ADDRESS = '0xC92E8bdf79f0507f65a392b0ab4667716BFE0110';
6
+ export const cowSwapChainConfig = {
7
+ [EvmChain.Ethereum]: {
8
+ apiBase: 'https://api.cow.fi/mainnet',
9
+ settlementContract: COW_SETTLEMENT_ADDRESS,
10
+ vaultRelayer: COW_VAULT_RELAYER_ADDRESS,
11
+ chainId: 1,
12
+ },
13
+ [EvmChain.Arbitrum]: {
14
+ apiBase: 'https://api.cow.fi/arbitrum_one',
15
+ settlementContract: COW_SETTLEMENT_ADDRESS,
16
+ vaultRelayer: COW_VAULT_RELAYER_ADDRESS,
17
+ chainId: 42161,
18
+ },
19
+ [EvmChain.Base]: {
20
+ apiBase: 'https://api.cow.fi/base',
21
+ settlementContract: COW_SETTLEMENT_ADDRESS,
22
+ vaultRelayer: COW_VAULT_RELAYER_ADDRESS,
23
+ chainId: 8453,
24
+ },
25
+ [EvmChain.Avalanche]: {
26
+ apiBase: 'https://api.cow.fi/avalanche',
27
+ settlementContract: COW_SETTLEMENT_ADDRESS,
28
+ vaultRelayer: COW_VAULT_RELAYER_ADDRESS,
29
+ chainId: 43114,
30
+ },
31
+ };
32
+ // Static allowlist of EIP-2612 permit-supporting tokens per chain.
33
+ // Tradeoff: an RPC-probe approach would be fully dynamic but requires an extra
34
+ // call per token per quote. Static list covers the vast majority of common
35
+ // pairs (USDC/USDT on all v1 chains) at zero overhead. Track additions
36
+ // as a follow-up when new permit tokens need support.
37
+ //
38
+ // IMPORTANT: every entry MUST implement the canonical EIP-2612 Permit struct
39
+ // (`owner,spender,value,nonce,deadline`). Tokens with a non-EIP-2612 permit, or
40
+ // no permit at all, are deliberately EXCLUDED — flagging them `permitRequired`
41
+ // would have Phase 2 build an EIP-2612 signature the token can't honor, and the
42
+ // CowSwap order would fail at settlement. On-chain `PERMIT_TYPEHASH()` /
43
+ // `DOMAIN_SEPARATOR()` verified 2026-05-28:
44
+ // - Ethereum DAI (0x6B17…) — Maker-style permit (holder,spender,nonce,expiry,
45
+ // allowed); typehash 0xea2aa0a1…, NOT EIP-2612. EXCLUDED.
46
+ // - Ethereum USDT (0xdAC1…) — no EIP-2612 permit (DOMAIN_SEPARATOR reverts).
47
+ // EXCLUDED.
48
+ // - Base DAI (0x50c5…) / Avalanche DAI.e (0xd586…) — bridged tokens with no
49
+ // EIP-2612 permit (DOMAIN_SEPARATOR reverts). EXCLUDED.
50
+ // - Arbitrum DAI (0xDA10…) — genuine EIP-2612 permit. KEPT.
51
+ export const KNOWN_PERMIT_TOKENS = {
52
+ // Ethereum
53
+ 1: [
54
+ '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
55
+ ],
56
+ // Arbitrum
57
+ 42161: [
58
+ '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', // USDC.e
59
+ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', // USDC native
60
+ '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', // USDT
61
+ '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', // DAI (EIP-2612 on Arbitrum)
62
+ ],
63
+ // Base
64
+ 8453: [
65
+ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC
66
+ ],
67
+ // Avalanche
68
+ 43114: [
69
+ '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', // USDC
70
+ '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7', // USDT
71
+ ],
72
+ };
73
+ export const COWSWAP_APP_CODE = 'vultisig';
74
+ export const COWSWAP_APP_VERSION = '0.1.0';
75
+ // CowSwap partner fee BPS for affiliate revenue.
76
+ // Phase 2 (mcp-ts) will wire the consumer-level affiliateBps through.
77
+ // Phase 1 uses a fixed default matching the vultisig-0 baseline.
78
+ export const COWSWAP_DEFAULT_AFFILIATE_BPS = 50;
79
+ // Vultisig fee recipient address for CowSwap partner fees.
80
+ export const COWSWAP_FEE_RECIPIENT = '0x8E247a480449c84a5fDD25974A8501f3EFa4ABb9';
81
+ // Order validity window in seconds (15 minutes).
82
+ export const COWSWAP_VALID_TO_SECONDS = 15 * 60;
83
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/cowswap/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAU,CAAA;AAIxH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,4CAA4C,CAAA;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,4CAA4C,CAAA;AASrF,MAAM,CAAC,MAAM,kBAAkB,GAAsD;IACnF,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACnB,OAAO,EAAE,4BAA4B;QACrC,kBAAkB,EAAE,sBAAsB;QAC1C,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,CAAC;KACX;IACD,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACnB,OAAO,EAAE,iCAAiC;QAC1C,kBAAkB,EAAE,sBAAsB;QAC1C,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,KAAK;KACf;IACD,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACf,OAAO,EAAE,yBAAyB;QAClC,kBAAkB,EAAE,sBAAsB;QAC1C,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,IAAI;KACd;IACD,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;QACpB,OAAO,EAAE,8BAA8B;QACvC,kBAAkB,EAAE,sBAAsB;QAC1C,YAAY,EAAE,yBAAyB;QACvC,OAAO,EAAE,KAAK;KACf;CACF,CAAA;AAED,mEAAmE;AACnE,+EAA+E;AAC/E,2EAA2E;AAC3E,uEAAuE;AACvE,sDAAsD;AACtD,EAAE;AACF,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,yEAAyE;AACzE,4CAA4C;AAC5C,gFAAgF;AAChF,8DAA8D;AAC9D,+EAA+E;AAC/E,gBAAgB;AAChB,8EAA8E;AAC9E,4DAA4D;AAC5D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAA6B;IAC3D,WAAW;IACX,CAAC,EAAE;QACD,4CAA4C,EAAE,OAAO;KACtD;IACD,WAAW;IACX,KAAK,EAAE;QACL,4CAA4C,EAAE,SAAS;QACvD,4CAA4C,EAAE,cAAc;QAC5D,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,6BAA6B;KAC5E;IACD,OAAO;IACP,IAAI,EAAE;QACJ,4CAA4C,EAAE,OAAO;KACtD;IACD,YAAY;IACZ,KAAK,EAAE;QACL,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;CACF,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAA;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAA;AAE1C,iDAAiD;AACjD,sEAAsE;AACtE,iEAAiE;AACjE,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAA;AAE/C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,4CAA4C,CAAA;AAEjF,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,CAAA"}
@@ -0,0 +1,39 @@
1
+ export type Eip2612PermitMessage = {
2
+ owner: string;
3
+ spender: string;
4
+ value: string;
5
+ nonce: bigint;
6
+ deadline: bigint;
7
+ };
8
+ export type Eip2612PermitDomain = {
9
+ name: string;
10
+ version: string;
11
+ chainId: number;
12
+ verifyingContract: string;
13
+ };
14
+ export type Eip2612PermitTypedData = {
15
+ primaryType: 'Permit';
16
+ domain: Eip2612PermitDomain;
17
+ types: {
18
+ Permit: Array<{
19
+ name: string;
20
+ type: string;
21
+ }>;
22
+ };
23
+ message: Eip2612PermitMessage;
24
+ };
25
+ export type BuildEip2612PermitInput = {
26
+ tokenAddress: string;
27
+ tokenName: string;
28
+ chainId: number;
29
+ owner: string;
30
+ spender: string;
31
+ value: bigint;
32
+ nonce: bigint;
33
+ deadline: bigint;
34
+ };
35
+ /** Build EIP-2612 Permit typed data for a known-permit-token.
36
+ * The token must be in KNOWN_PERMIT_TOKENS for the chain — callers are
37
+ * responsible for checking eligibility before calling this function. */
38
+ export declare function buildEip2612Permit({ tokenAddress, tokenName, chainId, owner, spender, value, nonce, deadline, }: BuildEip2612PermitInput): Eip2612PermitTypedData;
39
+ //# sourceMappingURL=buildEip2612Permit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildEip2612Permit.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/cowswap/permit/buildEip2612Permit.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IAEb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,QAAQ,CAAA;IACrB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,KAAK,EAAE;QACL,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAC9C,CAAA;IACD,OAAO,EAAE,oBAAoB,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IAGb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAUD;;wEAEwE;AACxE,wBAAgB,kBAAkB,CAAC,EACjC,YAAY,EACZ,SAAS,EACT,OAAO,EACP,KAAK,EACL,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE,uBAAuB,GAAG,sBAAsB,CAoBlD"}