@eulerxyz/euler-v2-sdk 0.2.3-beta → 0.2.4-beta
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/README.md +14 -11
- package/dist/src/entities/ERC4626Vault.d.ts +8 -0
- package/dist/src/entities/ERC4626Vault.d.ts.map +1 -1
- package/dist/src/entities/ERC4626Vault.js +4 -0
- package/dist/src/entities/ERC4626Vault.js.map +1 -1
- package/dist/src/entities/EVault.d.ts +6 -0
- package/dist/src/entities/EVault.d.ts.map +1 -1
- package/dist/src/entities/EVault.js +11 -0
- package/dist/src/entities/EVault.js.map +1 -1
- package/dist/src/entities/SecuritizeCollateralVault.d.ts +2 -0
- package/dist/src/entities/SecuritizeCollateralVault.d.ts.map +1 -1
- package/dist/src/entities/SecuritizeCollateralVault.js +4 -0
- package/dist/src/entities/SecuritizeCollateralVault.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/sdk/buildSDK.d.ts +8 -0
- package/dist/src/sdk/buildSDK.d.ts.map +1 -1
- package/dist/src/sdk/buildSDK.js +309 -101
- package/dist/src/sdk/buildSDK.js.map +1 -1
- package/dist/src/sdk/config.d.ts +8 -2
- package/dist/src/sdk/config.d.ts.map +1 -1
- package/dist/src/sdk/config.js +6 -1
- package/dist/src/sdk/config.js.map +1 -1
- package/dist/src/sdk/sdk.d.ts +3 -0
- package/dist/src/sdk/sdk.d.ts.map +1 -1
- package/dist/src/sdk/sdk.js +2 -0
- package/dist/src/sdk/sdk.js.map +1 -1
- package/dist/src/services/accountService/accountServiceConfig.d.ts +2 -2
- package/dist/src/services/accountService/accountServiceConfig.d.ts.map +1 -1
- package/dist/src/services/executionService/abis/cowSwapWrapperAbi.d.ts +199 -0
- package/dist/src/services/executionService/abis/cowSwapWrapperAbi.d.ts.map +1 -0
- package/dist/src/services/executionService/abis/cowSwapWrapperAbi.js +95 -0
- package/dist/src/services/executionService/abis/cowSwapWrapperAbi.js.map +1 -0
- package/dist/src/services/executionService/cowExecutor.d.ts +53 -0
- package/dist/src/services/executionService/cowExecutor.d.ts.map +1 -0
- package/dist/src/services/executionService/cowExecutor.js +390 -0
- package/dist/src/services/executionService/cowExecutor.js.map +1 -0
- package/dist/src/services/executionService/cowSwapHelpers.d.ts +254 -0
- package/dist/src/services/executionService/cowSwapHelpers.d.ts.map +1 -0
- package/dist/src/services/executionService/cowSwapHelpers.js +524 -0
- package/dist/src/services/executionService/cowSwapHelpers.js.map +1 -0
- package/dist/src/services/executionService/execute.d.ts +18 -3
- package/dist/src/services/executionService/execute.d.ts.map +1 -1
- package/dist/src/services/executionService/execute.js +9 -2
- package/dist/src/services/executionService/execute.js.map +1 -1
- package/dist/src/services/executionService/executionService.d.ts +53 -2
- package/dist/src/services/executionService/executionService.d.ts.map +1 -1
- package/dist/src/services/executionService/executionService.js +368 -15
- package/dist/src/services/executionService/executionService.js.map +1 -1
- package/dist/src/services/executionService/executionServiceTypes.d.ts +130 -3
- package/dist/src/services/executionService/executionServiceTypes.d.ts.map +1 -1
- package/dist/src/services/executionService/executionServiceTypes.js +13 -0
- package/dist/src/services/executionService/executionServiceTypes.js.map +1 -1
- package/dist/src/services/executionService/index.d.ts +5 -3
- package/dist/src/services/executionService/index.d.ts.map +1 -1
- package/dist/src/services/executionService/index.js +3 -2
- package/dist/src/services/executionService/index.js.map +1 -1
- package/dist/src/services/executionService/simulate.d.ts +1 -1
- package/dist/src/services/executionService/simulate.d.ts.map +1 -1
- package/dist/src/services/executionService/simulate.js +25 -9
- package/dist/src/services/executionService/simulate.js.map +1 -1
- package/dist/src/services/priceService/backendClient.d.ts +3 -1
- package/dist/src/services/priceService/backendClient.d.ts.map +1 -1
- package/dist/src/services/priceService/backendClient.js +30 -12
- package/dist/src/services/priceService/backendClient.js.map +1 -1
- package/dist/src/services/reulLockService/index.d.ts +3 -0
- package/dist/src/services/reulLockService/index.d.ts.map +1 -0
- package/dist/src/services/reulLockService/index.js +2 -0
- package/dist/src/services/reulLockService/index.js.map +1 -0
- package/dist/src/services/reulLockService/reulLockService.d.ts +82 -0
- package/dist/src/services/reulLockService/reulLockService.d.ts.map +1 -0
- package/dist/src/services/reulLockService/reulLockService.js +120 -0
- package/dist/src/services/reulLockService/reulLockService.js.map +1 -0
- package/dist/src/services/reulLockService/reulLockServiceTypes.d.ts +41 -0
- package/dist/src/services/reulLockService/reulLockServiceTypes.d.ts.map +1 -0
- package/dist/src/services/reulLockService/reulLockServiceTypes.js +2 -0
- package/dist/src/services/reulLockService/reulLockServiceTypes.js.map +1 -0
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.d.ts.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js +93 -5
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js.map +1 -1
- package/dist/src/services/rewardsService/rewardsService.d.ts +1 -7
- package/dist/src/services/rewardsService/rewardsService.d.ts.map +1 -1
- package/dist/src/services/rewardsService/rewardsService.js +5 -130
- package/dist/src/services/rewardsService/rewardsService.js.map +1 -1
- package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts +13 -2
- package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts.map +1 -1
- package/dist/src/services/swapService/index.d.ts +2 -2
- package/dist/src/services/swapService/index.d.ts.map +1 -1
- package/dist/src/services/swapService/index.js.map +1 -1
- package/dist/src/services/swapService/swapService.d.ts +15 -0
- package/dist/src/services/swapService/swapService.d.ts.map +1 -1
- package/dist/src/services/swapService/swapService.js +217 -7
- package/dist/src/services/swapService/swapService.js.map +1 -1
- package/dist/src/services/swapService/swapServiceTypes.d.ts +33 -0
- package/dist/src/services/swapService/swapServiceTypes.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/eVaultServiceConfig.d.ts +2 -2
- package/dist/src/services/vaults/eVaultService/eVaultServiceConfig.d.ts.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/eulerEarnServiceConfig.d.ts +2 -2
- package/dist/src/services/vaults/eulerEarnService/eulerEarnServiceConfig.d.ts.map +1 -1
- package/dist/src/utils/fallbackAdapter.d.ts +69 -0
- package/dist/src/utils/fallbackAdapter.d.ts.map +1 -0
- package/dist/src/utils/fallbackAdapter.js +139 -0
- package/dist/src/utils/fallbackAdapter.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type DataIssue, type ServiceResult } from "./entityDiagnostics.js";
|
|
2
|
+
/**
|
|
3
|
+
* Why the fallback fired. Useful for telemetry: per-entity warnings
|
|
4
|
+
* (`array-missing-slots`) look different from total-failures (`primary-threw`,
|
|
5
|
+
* `result-undefined`) even though both surface as a fallback event.
|
|
6
|
+
*/
|
|
7
|
+
export type FallbackTrigger = "primary-threw" | "result-undefined" | "array-missing-slots" | "custom-shouldFallback" | "circuit-open";
|
|
8
|
+
export interface FallbackInfo<TKey extends string = string> {
|
|
9
|
+
method: TKey;
|
|
10
|
+
args: unknown[];
|
|
11
|
+
primaryName: string;
|
|
12
|
+
secondaryName: string;
|
|
13
|
+
/** Discriminator for what actually caused the fallback. */
|
|
14
|
+
trigger: FallbackTrigger;
|
|
15
|
+
/** Error thrown by primary, if it threw. Undefined when fallback was triggered by a result code. */
|
|
16
|
+
primaryError?: unknown;
|
|
17
|
+
/** Issues from a primary `ServiceResult`, if any. Undefined when primary threw or circuit was open. */
|
|
18
|
+
primaryIssues?: DataIssue[];
|
|
19
|
+
/**
|
|
20
|
+
* For `trigger === "array-missing-slots"`: indices in the primary result array
|
|
21
|
+
* that were `undefined`. Lets callers see which inputs the primary dropped.
|
|
22
|
+
*/
|
|
23
|
+
missingIndices?: number[];
|
|
24
|
+
}
|
|
25
|
+
export interface FallbackAdapterOptions<TKey extends string> {
|
|
26
|
+
/** Method names on the adapter that should be wrapped with fallback logic. */
|
|
27
|
+
methods: readonly TKey[];
|
|
28
|
+
/**
|
|
29
|
+
* Override the default failure-detection logic for `ServiceResult` returns.
|
|
30
|
+
* Default: fall back when `result === undefined`, or when `result` is an array
|
|
31
|
+
* containing any `undefined` slot. Per-item warnings (e.g. SOURCE_UNAVAILABLE
|
|
32
|
+
* on a nested entity) on an otherwise complete response do NOT trigger fallback.
|
|
33
|
+
*/
|
|
34
|
+
shouldFallback?: (primary: ServiceResult<unknown>) => boolean;
|
|
35
|
+
/** Names attached to FALLBACK_USED diagnostics for traceability. */
|
|
36
|
+
adapterNames: {
|
|
37
|
+
primary: string;
|
|
38
|
+
secondary: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Open a circuit after N consecutive primary failures; skip primary for `cooldownMs`.
|
|
42
|
+
* Optional — defaults to no breaker (predictable, no surprise behavior).
|
|
43
|
+
*/
|
|
44
|
+
circuitBreaker?: {
|
|
45
|
+
failures: number;
|
|
46
|
+
cooldownMs: number;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Optional callback invoked after the secondary call completes (or fails to complete).
|
|
50
|
+
* Useful for telemetry / surfacing fallback events to UI. Exceptions thrown by this
|
|
51
|
+
* callback are caught and ignored so they don't disrupt the data flow.
|
|
52
|
+
*/
|
|
53
|
+
onFallback?: (info: FallbackInfo<TKey>) => void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Wraps two adapters of the same interface with primary→secondary fallback.
|
|
57
|
+
*
|
|
58
|
+
* For each method in `options.methods`, runs `primary`. Fallback to `secondary`
|
|
59
|
+
* fires when the primary throws, or (for `ServiceResult` returns) when `result`
|
|
60
|
+
* is `undefined`, or when `result` is an array containing any `undefined` slot.
|
|
61
|
+
* Per-item warnings on a fully-populated response do NOT trigger fallback —
|
|
62
|
+
* the secondary can't recover information the primary already returned. Pass
|
|
63
|
+
* `shouldFallback` to override.
|
|
64
|
+
*
|
|
65
|
+
* Methods NOT in `options.methods` pass through to `primary` unchanged — this keeps
|
|
66
|
+
* setters (`setConfig`, `setPlugins`, etc.) and internal state on the primary instance.
|
|
67
|
+
*/
|
|
68
|
+
export declare function createFallbackAdapter<T extends object, TKey extends keyof T & string>(primary: T, secondary: T, options: FallbackAdapterOptions<TKey>): T;
|
|
69
|
+
//# sourceMappingURL=fallbackAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallbackAdapter.d.ts","sourceRoot":"","sources":["../../../src/utils/fallbackAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EACd,KAAK,aAAa,EAGlB,MAAM,wBAAwB,CAAC;AAEhC;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACxB,eAAe,GACf,kBAAkB,GAClB,qBAAqB,GACrB,uBAAuB,GACvB,cAAc,CAAC;AAElB,MAAM,WAAW,YAAY,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IACzD,MAAM,EAAE,IAAI,CAAC;IACb,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,OAAO,EAAE,eAAe,CAAC;IACzB,oGAAoG;IACpG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uGAAuG;IACvG,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI,SAAS,MAAM;IAC1D,8EAA8E;IAC9E,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;IACzB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IAC9D,oEAAoE;IACpE,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD;;;OAGG;IACH,cAAc,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;CAChD;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACpC,CAAC,SAAS,MAAM,EAChB,IAAI,SAAS,MAAM,CAAC,GAAG,MAAM,EAC5B,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAsJpE"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { dataIssueLocation, serviceDiagnosticOwner, } from "./entityDiagnostics.js";
|
|
2
|
+
function isServiceResult(value) {
|
|
3
|
+
return (!!value &&
|
|
4
|
+
typeof value === "object" &&
|
|
5
|
+
"result" in value &&
|
|
6
|
+
"errors" in value &&
|
|
7
|
+
Array.isArray(value.errors));
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Wraps two adapters of the same interface with primary→secondary fallback.
|
|
11
|
+
*
|
|
12
|
+
* For each method in `options.methods`, runs `primary`. Fallback to `secondary`
|
|
13
|
+
* fires when the primary throws, or (for `ServiceResult` returns) when `result`
|
|
14
|
+
* is `undefined`, or when `result` is an array containing any `undefined` slot.
|
|
15
|
+
* Per-item warnings on a fully-populated response do NOT trigger fallback —
|
|
16
|
+
* the secondary can't recover information the primary already returned. Pass
|
|
17
|
+
* `shouldFallback` to override.
|
|
18
|
+
*
|
|
19
|
+
* Methods NOT in `options.methods` pass through to `primary` unchanged — this keeps
|
|
20
|
+
* setters (`setConfig`, `setPlugins`, etc.) and internal state on the primary instance.
|
|
21
|
+
*/
|
|
22
|
+
export function createFallbackAdapter(primary, secondary, options) {
|
|
23
|
+
const wrappedMethods = new Set(options.methods);
|
|
24
|
+
const names = options.adapterNames;
|
|
25
|
+
const breaker = options.circuitBreaker;
|
|
26
|
+
let consecutiveFailures = 0;
|
|
27
|
+
let circuitOpenUntil = 0;
|
|
28
|
+
const evaluateResultTrigger = (primaryResult) => {
|
|
29
|
+
if (options.shouldFallback) {
|
|
30
|
+
return options.shouldFallback(primaryResult)
|
|
31
|
+
? { trigger: "custom-shouldFallback" }
|
|
32
|
+
: undefined;
|
|
33
|
+
}
|
|
34
|
+
if (primaryResult.result === undefined)
|
|
35
|
+
return { trigger: "result-undefined" };
|
|
36
|
+
if (Array.isArray(primaryResult.result)) {
|
|
37
|
+
const missingIndices = [];
|
|
38
|
+
for (let i = 0; i < primaryResult.result.length; i += 1) {
|
|
39
|
+
if (primaryResult.result[i] === undefined)
|
|
40
|
+
missingIndices.push(i);
|
|
41
|
+
}
|
|
42
|
+
if (missingIndices.length > 0) {
|
|
43
|
+
return { trigger: "array-missing-slots", missingIndices };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
};
|
|
48
|
+
const makeFallbackIssue = (methodName, primaryError, primaryErrorsFromResult) => ({
|
|
49
|
+
code: "FALLBACK_USED",
|
|
50
|
+
severity: "info",
|
|
51
|
+
message: `Fell back from ${names.primary} to ${names.secondary} for ${methodName}.`,
|
|
52
|
+
locations: [
|
|
53
|
+
dataIssueLocation(serviceDiagnosticOwner(names.primary, undefined, methodName)),
|
|
54
|
+
],
|
|
55
|
+
source: names.primary,
|
|
56
|
+
originalValue: primaryError !== undefined
|
|
57
|
+
? primaryError instanceof Error
|
|
58
|
+
? primaryError.message
|
|
59
|
+
: String(primaryError)
|
|
60
|
+
: primaryErrorsFromResult,
|
|
61
|
+
});
|
|
62
|
+
return new Proxy(primary, {
|
|
63
|
+
get(target, prop, receiver) {
|
|
64
|
+
const value = Reflect.get(target, prop, receiver);
|
|
65
|
+
if (typeof value !== "function" ||
|
|
66
|
+
typeof prop !== "string" ||
|
|
67
|
+
!wrappedMethods.has(prop)) {
|
|
68
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
69
|
+
}
|
|
70
|
+
return async (...args) => {
|
|
71
|
+
const now = Date.now();
|
|
72
|
+
const circuitOpen = breaker !== undefined && now < circuitOpenUntil;
|
|
73
|
+
let primaryResult;
|
|
74
|
+
let primaryThrow;
|
|
75
|
+
if (!circuitOpen) {
|
|
76
|
+
try {
|
|
77
|
+
const out = await value.apply(target, args);
|
|
78
|
+
if (!isServiceResult(out)) {
|
|
79
|
+
consecutiveFailures = 0;
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
82
|
+
primaryResult = out;
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
primaryThrow = err;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
let resultTrigger;
|
|
89
|
+
if (primaryResult !== undefined) {
|
|
90
|
+
resultTrigger = evaluateResultTrigger(primaryResult);
|
|
91
|
+
}
|
|
92
|
+
const needsFallback = circuitOpen || primaryThrow !== undefined || resultTrigger !== undefined;
|
|
93
|
+
if (!needsFallback) {
|
|
94
|
+
consecutiveFailures = 0;
|
|
95
|
+
return primaryResult;
|
|
96
|
+
}
|
|
97
|
+
if (breaker !== undefined && !circuitOpen) {
|
|
98
|
+
consecutiveFailures += 1;
|
|
99
|
+
if (consecutiveFailures >= breaker.failures) {
|
|
100
|
+
circuitOpenUntil = now + breaker.cooldownMs;
|
|
101
|
+
consecutiveFailures = 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const secondaryFn = Reflect.get(secondary, prop);
|
|
105
|
+
const secondaryOut = await secondaryFn.apply(secondary, args);
|
|
106
|
+
if (options.onFallback) {
|
|
107
|
+
const trigger = circuitOpen
|
|
108
|
+
? "circuit-open"
|
|
109
|
+
: primaryThrow !== undefined
|
|
110
|
+
? "primary-threw"
|
|
111
|
+
: (resultTrigger?.trigger ?? "result-undefined");
|
|
112
|
+
try {
|
|
113
|
+
options.onFallback({
|
|
114
|
+
method: prop,
|
|
115
|
+
args,
|
|
116
|
+
primaryName: names.primary,
|
|
117
|
+
secondaryName: names.secondary,
|
|
118
|
+
trigger,
|
|
119
|
+
primaryError: primaryThrow,
|
|
120
|
+
primaryIssues: primaryResult?.errors,
|
|
121
|
+
missingIndices: resultTrigger?.missingIndices,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// swallow — telemetry must never break the data flow.
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (!isServiceResult(secondaryOut))
|
|
129
|
+
return secondaryOut;
|
|
130
|
+
const fallbackIssue = makeFallbackIssue(prop, primaryThrow, primaryResult?.errors);
|
|
131
|
+
return {
|
|
132
|
+
result: secondaryOut.result,
|
|
133
|
+
errors: [fallbackIssue, ...secondaryOut.errors],
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=fallbackAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallbackAdapter.js","sourceRoot":"","sources":["../../../src/utils/fallbackAdapter.ts"],"names":[],"mappings":"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"}
|