Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions packages/euler-v2-sdk/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export * from "./services/intrinsicApyService/index.js";
export * from "./services/oracleAdapterService/index.js";
export * from "./services/feeFlowService/index.js";
export * from "./services/reulLockService/index.js";
export * from "./services/activityService/index.js";

// Plugins
export * from "./plugins/index.js";
Expand All @@ -43,16 +44,16 @@ export * from "./utils/subAccounts.js";
export * from "./utils/accountPositionClassification.js";
export { VaultType } from "./utils/types.js";
export {
type BuildQueryFn,
type BuildQueryContext,
type QueryCacheConfig,
applyBuildQuery,
createQueryCacheBuildQuery,
getEulerSdkQueryKey,
normalizeQueryKeyObjectSets,
normalizeQueryKeySet,
normalizeQueryKeyValue,
serializeQueryArgs,
type BuildQueryFn,
type BuildQueryContext,
type QueryCacheConfig,
applyBuildQuery,
createQueryCacheBuildQuery,
getEulerSdkQueryKey,
normalizeQueryKeyObjectSets,
normalizeQueryKeySet,
normalizeQueryKeyValue,
serializeQueryArgs,
} from "./utils/buildQuery.js";
export type { EulerSDKQueryName, QueryMethodName } from "./utils/queryNames.js";
export * from "./utils/stateOverrides/index.js";
Expand Down
28 changes: 27 additions & 1 deletion packages/euler-v2-sdk/src/sdk/buildSDK.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ import {
defaultEulerEarnV3AdapterConfig,
defaultEulerLabelsURLAdapterConfig,
defaultIntrinsicApyV3AdapterConfig,
defaultActivityServiceConfig,
defaultPricingServiceConfig,
defaultRewardsV3AdapterConfig,
defaultSwapServiceConfig,
Expand All @@ -116,6 +117,11 @@ import {
REULLockService,
type IREULLockService,
} from "../services/reulLockService/index.js";
import {
ActivityService,
type ActivityServiceConfig,
type IActivityService,
} from "../services/activityService/index.js";
import {
type EulerSDKConfig,
readEulerSDKEnvConfig,
Expand Down Expand Up @@ -179,6 +185,7 @@ export interface BuildSDKOverrides<
oracleAdapterService?: IOracleAdapterService;
feeFlowService?: IFeeFlowService;
reulLockService?: IREULLockService;
activityService?: IActivityService;
}

export type { EulerSDKConfig } from "./config.js";
Expand Down Expand Up @@ -210,6 +217,7 @@ export interface BuildSDKOptions<
intrinsicApyServiceConfig?: IntrinsicApyServiceConfig;
oracleAdapterServiceConfig?: OracleAdapterServiceConfig;
feeFlowServiceConfig?: FeeFlowServiceConfig;
activityServiceConfig?: ActivityServiceConfig;
/** Default in-memory cache applied to all decorated `query*` methods. Enabled by default with a 5s TTL. */
queryCacheConfig?: QueryCacheConfig;
/** Optional query decorator applied to all query* functions across all services. Use for global logging, caching, profiling, etc. */
Expand Down Expand Up @@ -518,6 +526,7 @@ export async function buildEulerSDK<
onFallback,
servicesOverrides,
feeFlowServiceConfig,
activityServiceConfig,
} = options;

const envConfig = readEulerSDKEnvConfig();
Expand Down Expand Up @@ -1362,7 +1371,8 @@ export async function buildEulerSDK<
rewardsV3Adapter.fetchUserRewards(chainId, address),
]);
if (v3Result.status !== "fulfilled") {
if (directResult.status === "fulfilled") return directResult.value;
if (directResult.status === "fulfilled")
return directResult.value;
throw directResult.reason;
}
const directRewards =
Expand Down Expand Up @@ -1472,6 +1482,21 @@ export async function buildEulerSDK<
const reulLockService =
servicesOverrides?.reulLockService ??
new REULLockService(providerService, deploymentService);
const activityService =
servicesOverrides?.activityService ??
new ActivityService(
resolveV3AdapterConfig(defaultActivityServiceConfig, {
explicitConfig: activityServiceConfig,
explicitV3ApiKey: v3ApiKey,
envConfig,
config,
envEndpoint: envConfig.activityV3ApiUrl,
configEndpoint: config?.activityV3ApiUrl,
envApiKey: envConfig.activityV3ApiKey,
configApiKey: config?.activityV3ApiKey,
}),
resolvedBuildQuery,
);

if (executionService instanceof ExecutionService) {
executionService.setProviderService(providerService as ProviderService);
Expand Down Expand Up @@ -1565,6 +1590,7 @@ export async function buildEulerSDK<
oracleAdapterService,
feeFlowService,
reulLockService,
activityService,
plugins,
});

Expand Down
24 changes: 17 additions & 7 deletions packages/euler-v2-sdk/src/sdk/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,9 @@ export interface EulerSDKConfig {
feeFlowControllerUtilAddress?: Address;
feeFlowDefaultBuyDeadlineSeconds?: number;

activityV3ApiUrl?: string;
activityV3ApiKey?: string;

queryCacheEnabled?: boolean;
queryCacheTtlMs?: number;
}
Expand Down Expand Up @@ -236,7 +239,10 @@ function readOptionalAddress(
}
}

function readOptionalString(value: unknown, message: string): string | undefined {
function readOptionalString(
value: unknown,
message: string,
): string | undefined {
if (value === undefined) return undefined;
if (typeof value !== "string") throw new Error(message);
return value;
Expand Down Expand Up @@ -268,12 +274,13 @@ function readTurtleRewardToken(
token.address,
`${name} rewardToken.address values must be EVM addresses`,
),
chainId: token.chainId === undefined
? undefined
: readPositiveInteger(
token.chainId,
`${name} rewardToken.chainId values must be positive integers`,
),
chainId:
token.chainId === undefined
? undefined
: readPositiveInteger(
token.chainId,
`${name} rewardToken.chainId values must be positive integers`,
),
symbol: readOptionalString(
token.symbol,
`${name} rewardToken.symbol values must be strings`,
Expand Down Expand Up @@ -548,6 +555,9 @@ export function readEulerSDKEnvConfig(
"EULER_SDK_FEE_FLOW_DEFAULT_BUY_DEADLINE_SECONDS",
),

activityV3ApiUrl: readString(env, "EULER_SDK_ACTIVITY_V3_API_URL"),
activityV3ApiKey: readString(env, "EULER_SDK_ACTIVITY_V3_API_KEY"),

queryCacheEnabled: readBoolean(env, "EULER_SDK_QUERY_CACHE_ENABLED"),
queryCacheTtlMs: readNumber(env, "EULER_SDK_QUERY_CACHE_TTL_MS"),
});
Expand Down
8 changes: 6 additions & 2 deletions packages/euler-v2-sdk/src/sdk/defaultConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import type { TokenlistServiceConfig } from "../services/tokenlistService/index.
import type { PricingServiceConfig } from "../services/priceService/index.js";
import type { IntrinsicApyV3AdapterConfig } from "../services/intrinsicApyService/index.js";
import type { RewardsV3AdapterConfig } from "../services/rewardsService/index.js";
import type { ActivityServiceConfig } from "../services/activityService/index.js";

const SUBGRAPH_BASE_URL =
"https://api.goldsky.com/api/public/project_cm4iagnemt1wp01xn4gh1agft/subgraphs";
Expand Down Expand Up @@ -68,6 +69,10 @@ export const defaultRewardsV3AdapterConfig: RewardsV3AdapterConfig = {
endpoint: DEFAULT_V3_API_URL,
};

export const defaultActivityServiceConfig: ActivityServiceConfig = {
endpoint: DEFAULT_V3_API_URL,
};

/** Same subgraph endpoints as account vaults; kept for explicit subgraph-based vault type resolution. */
export const defaultVaultTypeSubgraphAdapterConfig: VaultTypeSubgraphAdapterConfig =
defaultAccountVaultsAdapterConfig;
Expand Down Expand Up @@ -106,8 +111,7 @@ export const defaultDeploymentServiceConfig: DeploymentServiceConfig = {
"https://raw.githubusercontent.com/euler-xyz/euler-interfaces/refs/heads/master/EulerChains.json",
};

export const DEFAULT_TOKENLIST_API_BASE_URL =
DEFAULT_V3_API_URL;
export const DEFAULT_TOKENLIST_API_BASE_URL = DEFAULT_V3_API_URL;

export const defaultTokenlistServiceConfig: TokenlistServiceConfig = {
getTokenListUrl: (chainId: number) =>
Expand Down
9 changes: 9 additions & 0 deletions packages/euler-v2-sdk/src/sdk/sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,14 @@ import type { IIntrinsicApyService } from "../services/intrinsicApyService/index
import type { IOracleAdapterService } from "../services/oracleAdapterService/index.js";
import type { IFeeFlowService } from "../services/feeFlowService/index.js";
import type { IREULLockService } from "../services/reulLockService/index.js";
import {
ActivityService,
type IActivityService,
} from "../services/activityService/index.js";
import type { EulerPlugin, PluginPrefetchData } from "../plugins/types.js";
import type { TransactionPlan } from "../services/executionService/executionServiceTypes.js";
import type { AddressOrAccount } from "../entities/Account.js";
import { defaultActivityServiceConfig } from "./defaultConfig.js";

export interface EulerSDKOptions<
TVaultEntity extends IVaultEntity = VaultEntity,
Expand All @@ -49,6 +54,7 @@ export interface EulerSDKOptions<
oracleAdapterService: IOracleAdapterService;
feeFlowService: IFeeFlowService;
reulLockService: IREULLockService;
activityService?: IActivityService;
plugins?: EulerPlugin[];
}

Expand All @@ -73,6 +79,7 @@ export class EulerSDK<TVaultEntity extends IVaultEntity = VaultEntity> {
public readonly oracleAdapterService: IOracleAdapterService;
public readonly feeFlowService: IFeeFlowService;
public readonly reulLockService: IREULLockService;
public readonly activityService: IActivityService;
public readonly plugins: EulerPlugin[];

constructor(options: EulerSDKOptions<TVaultEntity>) {
Expand All @@ -96,6 +103,8 @@ export class EulerSDK<TVaultEntity extends IVaultEntity = VaultEntity> {
this.oracleAdapterService = options.oracleAdapterService;
this.feeFlowService = options.feeFlowService;
this.reulLockService = options.reulLockService;
this.activityService =
options.activityService ?? new ActivityService(defaultActivityServiceConfig);
this.plugins = options.plugins ?? [];
}

Expand Down
Loading