@ring-protocol/smart-order-router 0.5.3 → 0.5.5
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.
|
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.shouldWipeoutCachedRoutes = exports.routeAmountsToString = exports.routeToString = exports.poolToString = exports.routeToPools = exports.routeToTokens = void 0;
|
|
7
|
+
const few_v2_sdk_1 = require("@ring-protocol/few-v2-sdk");
|
|
7
8
|
const router_sdk_1 = require("@ring-protocol/router-sdk");
|
|
8
9
|
const sdk_core_1 = require("@ring-protocol/sdk-core");
|
|
9
10
|
const v2_sdk_1 = require("@ring-protocol/v2-sdk");
|
|
10
11
|
const v3_sdk_1 = require("@ring-protocol/v3-sdk");
|
|
11
12
|
const v4_sdk_1 = require("@ring-protocol/v4-sdk");
|
|
12
|
-
const few_v2_sdk_1 = require("@ring-protocol/few-v2-sdk");
|
|
13
13
|
const lodash_1 = __importDefault(require("lodash"));
|
|
14
14
|
const best_swap_route_1 = require("../routers/alpha-router/functions/best-swap-route");
|
|
15
15
|
const addresses_1 = require("./addresses");
|
|
@@ -45,6 +45,7 @@ const routeToPools = (route) => {
|
|
|
45
45
|
};
|
|
46
46
|
exports.routeToPools = routeToPools;
|
|
47
47
|
const poolToString = (pool) => {
|
|
48
|
+
var _a, _b;
|
|
48
49
|
if (pool instanceof v4_sdk_1.Pool) {
|
|
49
50
|
return ` -- ${pool.fee / 10000}% [${v4_sdk_1.Pool.getPoolId(pool.token0, pool.token1, pool.fee, pool.tickSpacing, pool.hooks)}]`;
|
|
50
51
|
}
|
|
@@ -58,7 +59,31 @@ const poolToString = (pool) => {
|
|
|
58
59
|
return ` -- [${few_v2_sdk_1.Pair.getAddress(pool.token0, pool.token1)}]`;
|
|
59
60
|
}
|
|
60
61
|
else {
|
|
61
|
-
|
|
62
|
+
// Fallback handling for cases where the pool is a "plain object" V2 pair
|
|
63
|
+
// This happens in some environments (e.g. Lambda / different bundlers)
|
|
64
|
+
// where Pair comes from a different copy of the SDK or has been
|
|
65
|
+
// serialized / deserialized.
|
|
66
|
+
if (pool &&
|
|
67
|
+
typeof pool === 'object' &&
|
|
68
|
+
('liquidityToken' in pool || 'tokenAmounts' in pool)) {
|
|
69
|
+
const poolObj = pool;
|
|
70
|
+
let token0Address;
|
|
71
|
+
let token1Address;
|
|
72
|
+
if (poolObj.tokenAmounts && Array.isArray(poolObj.tokenAmounts)) {
|
|
73
|
+
const token0 = (_a = poolObj.tokenAmounts[0]) === null || _a === void 0 ? void 0 : _a.currency;
|
|
74
|
+
const token1 = (_b = poolObj.tokenAmounts[1]) === null || _b === void 0 ? void 0 : _b.currency;
|
|
75
|
+
token0Address = (token0 === null || token0 === void 0 ? void 0 : token0.address) || (token0 === null || token0 === void 0 ? void 0 : token0.id);
|
|
76
|
+
token1Address = (token1 === null || token1 === void 0 ? void 0 : token1.address) || (token1 === null || token1 === void 0 ? void 0 : token1.id);
|
|
77
|
+
}
|
|
78
|
+
if (token0Address && token1Address) {
|
|
79
|
+
// For logging purposes we just show the two addresses. This avoids
|
|
80
|
+
// throwing while still giving useful debug information.
|
|
81
|
+
return ` -- [${token0Address}/${token1Address}]`;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// As a last resort, avoid throwing – just show an opaque placeholder so
|
|
85
|
+
// route logging never breaks the main quote flow.
|
|
86
|
+
return ' -- [UnknownPool]';
|
|
62
87
|
}
|
|
63
88
|
};
|
|
64
89
|
exports.poolToString = poolToString;
|
|
@@ -68,6 +93,7 @@ const routeToString = (route) => {
|
|
|
68
93
|
const tokenPath = lodash_1.default.map(tokens, (token) => `${token.symbol}`);
|
|
69
94
|
const pools = (0, exports.routeToPools)(route);
|
|
70
95
|
const poolFeePath = lodash_1.default.map(pools, (pool) => {
|
|
96
|
+
var _a, _b;
|
|
71
97
|
if (pool instanceof v2_sdk_1.Pair) {
|
|
72
98
|
return ` -- [${v2_sdk_1.Pair.getAddress(pool.token0, pool.token1)}]`;
|
|
73
99
|
}
|
|
@@ -87,9 +113,28 @@ const routeToString = (route) => {
|
|
|
87
113
|
return ` -- ${pool.fee / 10000}% [${v4_sdk_1.Pool.getPoolId(pool.token0, pool.token1, pool.fee, pool.tickSpacing, pool.hooks)}]`;
|
|
88
114
|
}
|
|
89
115
|
else {
|
|
90
|
-
|
|
116
|
+
// Same fallback logic as poolToString: tolerate serialized / plain-object
|
|
117
|
+
// V2 pairs so that logging never causes a hard failure.
|
|
118
|
+
if (pool &&
|
|
119
|
+
typeof pool === 'object' &&
|
|
120
|
+
('liquidityToken' in pool || 'tokenAmounts' in pool)) {
|
|
121
|
+
const poolObj = pool;
|
|
122
|
+
let token0Address;
|
|
123
|
+
let token1Address;
|
|
124
|
+
if (poolObj.tokenAmounts && Array.isArray(poolObj.tokenAmounts)) {
|
|
125
|
+
const token0 = (_a = poolObj.tokenAmounts[0]) === null || _a === void 0 ? void 0 : _a.currency;
|
|
126
|
+
const token1 = (_b = poolObj.tokenAmounts[1]) === null || _b === void 0 ? void 0 : _b.currency;
|
|
127
|
+
token0Address = (token0 === null || token0 === void 0 ? void 0 : token0.address) || (token0 === null || token0 === void 0 ? void 0 : token0.id);
|
|
128
|
+
token1Address = (token1 === null || token1 === void 0 ? void 0 : token1.address) || (token1 === null || token1 === void 0 ? void 0 : token1.id);
|
|
129
|
+
}
|
|
130
|
+
if (token0Address && token1Address) {
|
|
131
|
+
return ` -- [${token0Address}/${token1Address}]`;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Last-resort fallback: don't throw, just emit an opaque marker so
|
|
135
|
+
// routeToString always succeeds.
|
|
136
|
+
return ' -- [UnknownPool]';
|
|
91
137
|
}
|
|
92
|
-
return `${(0, exports.poolToString)(pool)} --> `;
|
|
93
138
|
});
|
|
94
139
|
for (let i = 0; i < tokenPath.length; i++) {
|
|
95
140
|
routeStr.push(tokenPath[i]);
|
|
@@ -156,4 +201,4 @@ function poolIsInExcludedProtocols(pool, excludedProtocolsFromMixed) {
|
|
|
156
201
|
return false;
|
|
157
202
|
}
|
|
158
203
|
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWwvcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQUErRDtBQUMvRCwwREFBcUQ7QUFFckQsc0RBQXFFO0FBQ3JFLGtEQUE2QztBQUM3QyxrREFBdUQ7QUFDdkQsa0RBQXVEO0FBQ3ZELG9EQUF1QjtBQU92Qix1RkFBMEU7QUFHMUUsMkNBQXdEO0FBRXhELHdCQUEwRDtBQUVuRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQXNCLEVBQWMsRUFBRTtJQUNsRSxRQUFRLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFDdEIsS0FBSyxxQkFBUSxDQUFDLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDNUIsS0FBSyxxQkFBUSxDQUFDLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDekIsS0FBSyxxQkFBUSxDQUFDLEVBQUUsQ0FBQztRQUNqQixLQUFLLHFCQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3BCLEtBQUsscUJBQVEsQ0FBQyxLQUFLO1lBQ2pCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQztRQUNwQjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2pFO0FBQ0gsQ0FBQyxDQUFDO0FBYlcsUUFBQSxhQUFhLGlCQWF4QjtBQUVLLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBc0IsRUFBVyxFQUFFO0lBQzlELFFBQVEsS0FBSyxDQUFDLFFBQVEsRUFBRTtRQUN0QixLQUFLLHFCQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2pCLEtBQUsscUJBQVEsQ0FBQyxFQUFFLENBQUM7UUFDakIsS0FBSyxxQkFBUSxDQUFDLEtBQUs7WUFDakIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3JCLEtBQUsscUJBQVEsQ0FBQyxF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
|