@moonwell-fi/moonwell-sdk 0.12.1 → 0.13.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.
- package/CHANGELOG.md +18 -0
- package/_cjs/actions/governance/getDelegates.js.map +1 -1
- package/_cjs/actions/governance/getUserVotingPowers.js +21 -6
- package/_cjs/actions/governance/getUserVotingPowers.js.map +1 -1
- package/_cjs/actions/governance/proposals/common.js +30 -3
- package/_cjs/actions/governance/proposals/common.js.map +1 -1
- package/_cjs/actions/morpho/user-rewards/common.js +95 -199
- package/_cjs/actions/morpho/user-rewards/common.js.map +1 -1
- package/_cjs/actions/morpho/user-rewards/getMorphoUserRewards.js +46 -10
- package/_cjs/actions/morpho/user-rewards/getMorphoUserRewards.js.map +1 -1
- package/_cjs/environments/definitions/ethereum/contracts.js +12 -0
- package/_cjs/environments/definitions/ethereum/contracts.js.map +1 -0
- package/_cjs/environments/definitions/ethereum/custom.js +18 -0
- package/_cjs/environments/definitions/ethereum/custom.js.map +1 -0
- package/_cjs/environments/definitions/ethereum/environment.js +9 -5
- package/_cjs/environments/definitions/ethereum/environment.js.map +1 -1
- package/_cjs/environments/definitions/ethereum/tokens.js +12 -0
- package/_cjs/environments/definitions/ethereum/tokens.js.map +1 -1
- package/_cjs/environments/definitions/governance.js +1 -1
- package/_cjs/environments/definitions/governance.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/index.js +5 -1
- package/_cjs/index.js.map +1 -1
- package/_esm/actions/governance/getDelegates.js +2 -0
- package/_esm/actions/governance/getDelegates.js.map +1 -1
- package/_esm/actions/governance/getUserVotingPowers.js +24 -6
- package/_esm/actions/governance/getUserVotingPowers.js.map +1 -1
- package/_esm/actions/governance/proposals/common.js +43 -2
- package/_esm/actions/governance/proposals/common.js.map +1 -1
- package/_esm/actions/morpho/user-rewards/common.js +110 -203
- package/_esm/actions/morpho/user-rewards/common.js.map +1 -1
- package/_esm/actions/morpho/user-rewards/getMorphoUserRewards.js +51 -11
- package/_esm/actions/morpho/user-rewards/getMorphoUserRewards.js.map +1 -1
- package/_esm/environments/definitions/ethereum/contracts.js +10 -0
- package/_esm/environments/definitions/ethereum/contracts.js.map +1 -0
- package/_esm/environments/definitions/ethereum/custom.js +15 -0
- package/_esm/environments/definitions/ethereum/custom.js.map +1 -0
- package/_esm/environments/definitions/ethereum/environment.js +11 -5
- package/_esm/environments/definitions/ethereum/environment.js.map +1 -1
- package/_esm/environments/definitions/ethereum/tokens.js +12 -0
- package/_esm/environments/definitions/ethereum/tokens.js.map +1 -1
- package/_esm/environments/definitions/governance.js +2 -2
- package/_esm/environments/definitions/governance.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/index.js +2 -0
- package/_esm/index.js.map +1 -1
- package/_types/actions/governance/getDelegates.d.ts.map +1 -1
- package/_types/actions/governance/getUserVotingPowers.d.ts.map +1 -1
- package/_types/actions/governance/proposals/common.d.ts +15 -0
- package/_types/actions/governance/proposals/common.d.ts.map +1 -1
- package/_types/actions/morpho/user-rewards/common.d.ts +23 -0
- package/_types/actions/morpho/user-rewards/common.d.ts.map +1 -1
- package/_types/actions/morpho/user-rewards/getMorphoUserRewards.d.ts +22 -0
- package/_types/actions/morpho/user-rewards/getMorphoUserRewards.d.ts.map +1 -1
- package/_types/client/createMoonwellClient.d.ts +62 -2
- package/_types/client/createMoonwellClient.d.ts.map +1 -1
- package/_types/environments/definitions/ethereum/contracts.d.ts +4 -0
- package/_types/environments/definitions/ethereum/contracts.d.ts.map +1 -0
- package/_types/environments/definitions/ethereum/custom.d.ts +18 -0
- package/_types/environments/definitions/ethereum/custom.d.ts.map +1 -0
- package/_types/environments/definitions/ethereum/environment.d.ts +52 -2
- package/_types/environments/definitions/ethereum/environment.d.ts.map +1 -1
- package/_types/environments/definitions/ethereum/tokens.d.ts +12 -0
- package/_types/environments/definitions/ethereum/tokens.d.ts.map +1 -1
- package/_types/environments/definitions/governance.d.ts.map +1 -1
- package/_types/environments/index.d.ts +34 -4
- package/_types/environments/index.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/index.d.ts +2 -0
- package/_types/index.d.ts.map +1 -1
- package/actions/governance/getDelegates.ts +2 -0
- package/actions/governance/getUserVotingPowers.ts +30 -15
- package/actions/governance/proposals/common.ts +56 -2
- package/actions/morpho/user-rewards/common.ts +133 -355
- package/actions/morpho/user-rewards/getMorphoUserRewards.ts +77 -12
- package/environments/definitions/ethereum/contracts.ts +10 -0
- package/environments/definitions/ethereum/custom.ts +15 -0
- package/environments/definitions/ethereum/environment.ts +15 -6
- package/environments/definitions/ethereum/tokens.ts +12 -0
- package/environments/definitions/governance.ts +2 -2
- package/errors/version.ts +1 -1
- package/index.ts +3 -0
- package/package.json +1 -1
|
@@ -4,13 +4,41 @@ import { getEnvironmentsFromArgs } from "../../../common/index.js";
|
|
|
4
4
|
import type { OptionalNetworkParameterType } from "../../../common/types.js";
|
|
5
5
|
import type { Chain } from "../../../environments/index.js";
|
|
6
6
|
import type { MorphoUserReward } from "../../../types/morphoUserReward.js";
|
|
7
|
-
import { getUserMorphoRewardsData } from "./common.js";
|
|
7
|
+
import { MerklApiError, getUserMorphoRewardsData } from "./common.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* AggregateError thrown by `getMorphoUserRewards` when one or more chains
|
|
11
|
+
* fail and `throwOnExternalApiError` is `true`. The `rewards` property
|
|
12
|
+
* carries the rewards from any chains that succeeded so callers can still
|
|
13
|
+
* surface partial results alongside the per-chain failures in `errors`.
|
|
14
|
+
*/
|
|
15
|
+
export class MorphoUserRewardsAggregateError extends AggregateError {
|
|
16
|
+
readonly rewards: MorphoUserReward[];
|
|
17
|
+
|
|
18
|
+
constructor(errors: Error[], message: string, rewards: MorphoUserReward[]) {
|
|
19
|
+
super(errors, message);
|
|
20
|
+
this.name = "MorphoUserRewardsAggregateError";
|
|
21
|
+
this.rewards = rewards;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
8
24
|
|
|
9
25
|
export type GetMorphoUserRewardsParameters<
|
|
10
26
|
environments,
|
|
11
27
|
network extends Chain | undefined,
|
|
12
28
|
> = OptionalNetworkParameterType<environments, network> & {
|
|
13
29
|
userAddress: Address;
|
|
30
|
+
/**
|
|
31
|
+
* When true, errors from the external Merkl API are propagated to the
|
|
32
|
+
* caller instead of being swallowed and returning `[]`. Default `false`
|
|
33
|
+
* preserves the historical behavior for existing consumers.
|
|
34
|
+
*
|
|
35
|
+
* If multiple environments are queried and at least one fails while others
|
|
36
|
+
* succeed, this throws a `MorphoUserRewardsAggregateError` whose `errors`
|
|
37
|
+
* array contains the per-chain failures and whose `rewards` property
|
|
38
|
+
* carries the successful chains' rewards so the caller can still display
|
|
39
|
+
* partial results.
|
|
40
|
+
*/
|
|
41
|
+
throwOnExternalApiError?: boolean;
|
|
14
42
|
};
|
|
15
43
|
|
|
16
44
|
export type GetMorphoUserRewardsReturnType = Promise<MorphoUserReward[]>;
|
|
@@ -22,18 +50,55 @@ export async function getMorphoUserRewards<
|
|
|
22
50
|
client: MoonwellClient,
|
|
23
51
|
args: GetMorphoUserRewardsParameters<environments, Network>,
|
|
24
52
|
): GetMorphoUserRewardsReturnType {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
53
|
+
const targetEnvironments = getEnvironmentsFromArgs(client, args).filter(
|
|
54
|
+
(environment) => environment.contracts.morphoViews !== undefined,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const settled = await Promise.allSettled(
|
|
58
|
+
targetEnvironments.map((environment) =>
|
|
59
|
+
getUserMorphoRewardsData({
|
|
60
|
+
environment,
|
|
61
|
+
account: args.userAddress,
|
|
62
|
+
...(args.throwOnExternalApiError !== undefined && {
|
|
63
|
+
throwOnExternalApiError: args.throwOnExternalApiError,
|
|
64
|
+
}),
|
|
35
65
|
}),
|
|
66
|
+
),
|
|
36
67
|
);
|
|
37
68
|
|
|
38
|
-
|
|
69
|
+
const fulfilled: MorphoUserReward[] = [];
|
|
70
|
+
const failures: Error[] = [];
|
|
71
|
+
const failedChainIds: number[] = [];
|
|
72
|
+
for (const [i, result] of settled.entries()) {
|
|
73
|
+
const environment = targetEnvironments[i];
|
|
74
|
+
if (result.status === "fulfilled") {
|
|
75
|
+
fulfilled.push(...result.value);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const reason = result.reason;
|
|
79
|
+
if (reason instanceof MerklApiError) {
|
|
80
|
+
failures.push(reason);
|
|
81
|
+
failedChainIds.push(reason.chainId);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const baseError =
|
|
85
|
+
reason instanceof Error ? reason : new Error(String(reason));
|
|
86
|
+
failures.push(
|
|
87
|
+
new Error(
|
|
88
|
+
`getMorphoUserRewards failed for chain ${environment.chainId}: ${baseError.message}`,
|
|
89
|
+
{ cause: baseError },
|
|
90
|
+
),
|
|
91
|
+
);
|
|
92
|
+
failedChainIds.push(environment.chainId);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (failures.length > 0 && args.throwOnExternalApiError === true) {
|
|
96
|
+
throw new MorphoUserRewardsAggregateError(
|
|
97
|
+
failures,
|
|
98
|
+
`getMorphoUserRewards failed for chains: ${failedChainIds.join(", ")}`,
|
|
99
|
+
fulfilled,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return fulfilled;
|
|
39
104
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createContractsConfig } from "../../types/config.js";
|
|
2
|
+
import { tokens } from "./tokens.js";
|
|
3
|
+
|
|
4
|
+
export const contracts = createContractsConfig({
|
|
5
|
+
tokens,
|
|
6
|
+
contracts: {
|
|
7
|
+
// `stakingToken` is intentionally omitted until Ethereum staking contracts ship.
|
|
8
|
+
governanceToken: "WELL",
|
|
9
|
+
},
|
|
10
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createCustomConfig } from "../../types/config.js";
|
|
2
|
+
|
|
3
|
+
export const custom = createCustomConfig({
|
|
4
|
+
governance: {
|
|
5
|
+
token: "WELL",
|
|
6
|
+
chainIds: [],
|
|
7
|
+
},
|
|
8
|
+
wormhole: {
|
|
9
|
+
chainId: 2,
|
|
10
|
+
tokenBridge: { address: "0x3ee18B2214AFF97000D974cf647E654bB5f1d8A8" },
|
|
11
|
+
},
|
|
12
|
+
xWELL: {
|
|
13
|
+
bridgeAdapter: { address: "0x734AbBCe07679C9A6B4Fe3bC16325e028fA6DbB7" },
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import { http, fallback } from "viem";
|
|
2
|
-
import { mainnet
|
|
1
|
+
import { http, defineChain, fallback } from "viem";
|
|
2
|
+
import { mainnet } from "viem/chains";
|
|
3
3
|
import {
|
|
4
4
|
type Environment,
|
|
5
5
|
createEnvironmentConfig,
|
|
6
6
|
} from "../../types/config.js";
|
|
7
|
+
import { contracts } from "./contracts.js";
|
|
8
|
+
import { custom } from "./custom.js";
|
|
7
9
|
import { tokens } from "./tokens.js";
|
|
8
10
|
|
|
11
|
+
// viem's `mainnet` chain leaves `testnet` undefined; consumers
|
|
12
|
+
// (e.g. the bridge modal) check `env.chain.testnet === false` strictly.
|
|
13
|
+
const ethereum = defineChain({ ...mainnet, testnet: false });
|
|
14
|
+
|
|
9
15
|
const createEnvironment = (
|
|
10
16
|
rpcUrls?: string[],
|
|
11
17
|
governanceIndexerUrl?: string,
|
|
12
|
-
|
|
18
|
+
lunarIndexerUrl?: string,
|
|
19
|
+
): Environment<typeof tokens, {}, {}, typeof contracts, typeof custom> =>
|
|
13
20
|
createEnvironmentConfig({
|
|
14
21
|
key: "ethereum",
|
|
15
22
|
name: "Ethereum",
|
|
@@ -25,12 +32,14 @@ const createEnvironment = (
|
|
|
25
32
|
governanceIndexerUrl:
|
|
26
33
|
governanceIndexerUrl ||
|
|
27
34
|
"https://lunar-services-worker.moonwell.workers.dev",
|
|
35
|
+
lunarIndexerUrl:
|
|
36
|
+
lunarIndexerUrl || "https://lunar-services-worker.moonwell.workers.dev",
|
|
28
37
|
tokens,
|
|
29
38
|
markets: {},
|
|
30
39
|
vaults: {},
|
|
31
40
|
morphoMarkets: {},
|
|
32
|
-
contracts
|
|
33
|
-
custom
|
|
34
|
-
}) as Environment<typeof tokens, {}, {},
|
|
41
|
+
contracts,
|
|
42
|
+
custom,
|
|
43
|
+
}) as Environment<typeof tokens, {}, {}, typeof contracts, typeof custom>;
|
|
35
44
|
|
|
36
45
|
export { createEnvironment, ethereum, tokens };
|
|
@@ -14,4 +14,16 @@ export const tokens = createTokenConfig({
|
|
|
14
14
|
name: "USD Coin",
|
|
15
15
|
symbol: "USDC",
|
|
16
16
|
},
|
|
17
|
+
WELL: {
|
|
18
|
+
address: "0xA88594D404727625A9437C3f886C7643872296AE",
|
|
19
|
+
decimals: 18,
|
|
20
|
+
name: "Moonwell",
|
|
21
|
+
symbol: "WELL",
|
|
22
|
+
},
|
|
23
|
+
stkWELL: {
|
|
24
|
+
address: "0xb3a9E0DCf37658a48aa9f018C44f90378ddD4357",
|
|
25
|
+
decimals: 18,
|
|
26
|
+
name: "Moonwell Staked WELL",
|
|
27
|
+
symbol: "stkWELL",
|
|
28
|
+
},
|
|
17
29
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { base, moonbeam, moonriver, optimism } from "viem/chains";
|
|
1
|
+
import { base, mainnet, moonbeam, moonriver, optimism } from "viem/chains";
|
|
2
2
|
|
|
3
3
|
export interface GovernanceTokenInfo {
|
|
4
4
|
id: string;
|
|
@@ -30,7 +30,7 @@ export const GovernanceTokensConfig = createGovernanceTokensConfig({
|
|
|
30
30
|
id: "WELL",
|
|
31
31
|
symbol: "WELL",
|
|
32
32
|
name: "WELL",
|
|
33
|
-
chainIds: [moonbeam.id, base.id, optimism.id] as number[],
|
|
33
|
+
chainIds: [moonbeam.id, base.id, optimism.id, mainnet.id] as number[],
|
|
34
34
|
testnet: false,
|
|
35
35
|
},
|
|
36
36
|
MFAM: {
|
package/errors/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '0.
|
|
1
|
+
export const version = '0.13.0'
|
package/index.ts
CHANGED
|
@@ -3,6 +3,9 @@ export {
|
|
|
3
3
|
type MoonwellClient,
|
|
4
4
|
} from "./client/createMoonwellClient.js";
|
|
5
5
|
|
|
6
|
+
export { MerklApiError } from "./actions/morpho/user-rewards/common.js";
|
|
7
|
+
export { MorphoUserRewardsAggregateError } from "./actions/morpho/user-rewards/getMorphoUserRewards.js";
|
|
8
|
+
|
|
6
9
|
export type {
|
|
7
10
|
MarketConfig,
|
|
8
11
|
MorphoMarketConfig,
|