@sonarwatch/portfolio-core 0.16.106 → 0.16.110
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 +46 -0
- package/package.json +1 -1
- package/src/Portfolio.d.ts +6 -0
- package/src/TokenPrice.d.ts +6 -0
- package/src/TokenPrice.js +37 -42
- package/src/TokenPrice.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,52 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [0.16.110](https://github.com/sonarwatch/portfolio/compare/core-0.16.109...core-0.16.110) (2026-01-06)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## [0.16.109](https://github.com/sonarwatch/portfolio/compare/core-0.16.108...core-0.16.109) (2026-01-06)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## [0.16.108](https://github.com/sonarwatch/portfolio/compare/core-0.16.107...core-0.16.108) (2026-01-06)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* **core:** dont use isProtocoleSource in getPriceInfoFromSources ([108e944](https://github.com/sonarwatch/portfolio/commit/108e944794b4a2f12a0cea48af0ec77760642c2f))
|
|
19
|
+
* **core:** prioritize first source directly in getPriceFromSources ([578ff9d](https://github.com/sonarwatch/portfolio/commit/578ff9d319c24ec9abe8c5e85aab30c760c1ca37))
|
|
20
|
+
* **plugins:** field is now addToMissingToken ([ac0ae37](https://github.com/sonarwatch/portfolio/commit/ac0ae37871edc1298fecc649a532d8e277c23eec))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* **core:** update TokenPrice comment for missing tokens ([1ba1265](https://github.com/sonarwatch/portfolio/commit/1ba126554aab4bbf6c4374612ce372e4d7b1e3d4))
|
|
26
|
+
* **plugins:** unify and prioritize token price sources with isProtocolSource flag ([3be53c7](https://github.com/sonarwatch/portfolio/commit/3be53c75943c837fc18da7cee05cd75f6502016a))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## [0.16.108](https://github.com/sonarwatch/portfolio/compare/core-0.16.107...core-0.16.108) (2026-01-06)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Bug Fixes
|
|
34
|
+
|
|
35
|
+
* **core:** dont use isProtocoleSource in getPriceInfoFromSources ([108e944](https://github.com/sonarwatch/portfolio/commit/108e944794b4a2f12a0cea48af0ec77760642c2f))
|
|
36
|
+
* **core:** prioritize first source directly in getPriceFromSources ([578ff9d](https://github.com/sonarwatch/portfolio/commit/578ff9d319c24ec9abe8c5e85aab30c760c1ca37))
|
|
37
|
+
* **plugins:** field is now addToMissingToken ([ac0ae37](https://github.com/sonarwatch/portfolio/commit/ac0ae37871edc1298fecc649a532d8e277c23eec))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Features
|
|
41
|
+
|
|
42
|
+
* **core:** update TokenPrice comment for missing tokens ([1ba1265](https://github.com/sonarwatch/portfolio/commit/1ba126554aab4bbf6c4374612ce372e4d7b1e3d4))
|
|
43
|
+
* **plugins:** unify and prioritize token price sources with isProtocolSource flag ([3be53c7](https://github.com/sonarwatch/portfolio/commit/3be53c75943c837fc18da7cee05cd75f6502016a))
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## [0.16.107](https://github.com/sonarwatch/portfolio/compare/core-0.16.106...core-0.16.107) (2026-01-05)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
5
51
|
## [0.16.106](https://github.com/sonarwatch/portfolio/compare/core-0.16.105...core-0.16.106) (2025-12-23)
|
|
6
52
|
|
|
7
53
|
|
package/package.json
CHANGED
package/src/Portfolio.d.ts
CHANGED
|
@@ -331,6 +331,12 @@ export type IsoLevPosition = {
|
|
|
331
331
|
leverage?: number;
|
|
332
332
|
tp?: number;
|
|
333
333
|
sl?: number;
|
|
334
|
+
limitOrders?: {
|
|
335
|
+
price: number;
|
|
336
|
+
amount: number;
|
|
337
|
+
value: UsdValue;
|
|
338
|
+
locked: boolean;
|
|
339
|
+
}[];
|
|
334
340
|
value: UsdValue;
|
|
335
341
|
ref?: string;
|
|
336
342
|
sourceRefs?: SourceRef[];
|
package/src/TokenPrice.d.ts
CHANGED
|
@@ -48,6 +48,10 @@ export type TokenPriceSource = {
|
|
|
48
48
|
timestamp: number;
|
|
49
49
|
sourceRefs?: SourceRef[];
|
|
50
50
|
link?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Token will be added to the missing tokens list, and price will be sent to datapi
|
|
53
|
+
*/
|
|
54
|
+
addToMissingToken?: boolean;
|
|
51
55
|
};
|
|
52
56
|
export type TokenPrice = {
|
|
53
57
|
address: string;
|
|
@@ -70,6 +74,7 @@ export declare function pushTokenPriceSource(sources: TokenPriceSource[], source
|
|
|
70
74
|
export declare function updateTokenPriceSources(sources: TokenPriceSource[]): TokenPriceSource[] | undefined;
|
|
71
75
|
export declare function getTokenPriceUnderlyingFromTokenPrice(tokenPrice: TokenPrice, amountPerLp: number): TokenPriceUnderlying;
|
|
72
76
|
export declare function getTokenPricesUnderlyingsFromTokensPrices(tokensPrices: TokenPrice[], amountsPerLp: number[]): TokenPriceUnderlying[];
|
|
77
|
+
export declare function getHighestPrioritisedSource(sources: TokenPriceSource[]): TokenPriceSource | undefined;
|
|
73
78
|
/**
|
|
74
79
|
* Get the price information from a list of sources.
|
|
75
80
|
* The price is determined by prioritising sources present in the prioritisedSourceIds list
|
|
@@ -79,4 +84,5 @@ export declare function getTokenPricesUnderlyingsFromTokensPrices(tokensPrices:
|
|
|
79
84
|
export declare function getPriceInfoFromSources(sources: TokenPriceSource[]): {
|
|
80
85
|
price: number;
|
|
81
86
|
priceChange24h?: number;
|
|
87
|
+
timestamp: number;
|
|
82
88
|
};
|
package/src/TokenPrice.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getPriceInfoFromSources = exports.getTokenPricesUnderlyingsFromTokensPrices = exports.getTokenPriceUnderlyingFromTokenPrice = exports.updateTokenPriceSources = exports.pushTokenPriceSource = exports.tokenPriceFromSources = exports.tokenPriceSourceTtl = exports.prioritisedSourceIds = exports.flashSourceId = exports.solvSourceId = exports.jupiterSourceId = exports.coingeckoSourceId = exports.piggyBankSourceId = exports.xStakingSourceId = exports.sandglassSourceId = exports.usdcPlusSourceId = exports.rainSourceId = exports.xOrcaSourceId = exports.jupLendSourceId = exports.jitoSourceId = exports.fragmetricSourceId = exports.fragmetricApiSourceId = exports.exponentSourceId = exports.adrenaSourceId = exports.adrasteaSourceId = exports.hyloSourceId = void 0;
|
|
3
|
+
exports.getPriceInfoFromSources = exports.getHighestPrioritisedSource = exports.getTokenPricesUnderlyingsFromTokensPrices = exports.getTokenPriceUnderlyingFromTokenPrice = exports.updateTokenPriceSources = exports.pushTokenPriceSource = exports.tokenPriceFromSources = exports.tokenPriceSourceTtl = exports.prioritisedSourceIds = exports.flashSourceId = exports.solvSourceId = exports.jupiterSourceId = exports.coingeckoSourceId = exports.piggyBankSourceId = exports.xStakingSourceId = exports.sandglassSourceId = exports.usdcPlusSourceId = exports.rainSourceId = exports.xOrcaSourceId = exports.jupLendSourceId = exports.jitoSourceId = exports.fragmetricSourceId = exports.fragmetricApiSourceId = exports.exponentSourceId = exports.adrenaSourceId = exports.adrasteaSourceId = exports.hyloSourceId = void 0;
|
|
4
4
|
const helpers_1 = require("./helpers");
|
|
5
5
|
const constants_1 = require("./constants");
|
|
6
6
|
exports.hyloSourceId = 'hylo-tokens-pricing';
|
|
@@ -42,8 +42,8 @@ exports.prioritisedSourceIds = [
|
|
|
42
42
|
exports.xStakingSourceId,
|
|
43
43
|
exports.piggyBankSourceId,
|
|
44
44
|
exports.flashSourceId,
|
|
45
|
-
exports.jupiterSourceId,
|
|
46
45
|
exports.solvSourceId,
|
|
46
|
+
exports.jupiterSourceId,
|
|
47
47
|
// Always leave coingeckoSourceId at the end to use it as fallback
|
|
48
48
|
exports.coingeckoSourceId,
|
|
49
49
|
];
|
|
@@ -69,7 +69,7 @@ function tokenPriceFromSources(sources) {
|
|
|
69
69
|
return current;
|
|
70
70
|
return prev;
|
|
71
71
|
});
|
|
72
|
-
const { price, priceChange24h } = getPriceInfoFromSources(updatedSources);
|
|
72
|
+
const { price, priceChange24h, timestamp } = getPriceInfoFromSources(updatedSources);
|
|
73
73
|
return {
|
|
74
74
|
address: displaySource.address,
|
|
75
75
|
networkId: displaySource.networkId,
|
|
@@ -81,9 +81,9 @@ function tokenPriceFromSources(sources) {
|
|
|
81
81
|
link: displaySource.link,
|
|
82
82
|
decimals: displaySource.decimals,
|
|
83
83
|
sourceRefs: displaySource.sourceRefs,
|
|
84
|
-
price
|
|
84
|
+
price,
|
|
85
85
|
priceChange24h,
|
|
86
|
-
timestamp
|
|
86
|
+
timestamp,
|
|
87
87
|
sources: updatedSources,
|
|
88
88
|
};
|
|
89
89
|
}
|
|
@@ -136,6 +136,29 @@ function getTokenPricesUnderlyingsFromTokensPrices(tokensPrices, amountsPerLp) {
|
|
|
136
136
|
}));
|
|
137
137
|
}
|
|
138
138
|
exports.getTokenPricesUnderlyingsFromTokensPrices = getTokenPricesUnderlyingsFromTokensPrices;
|
|
139
|
+
function getWeightedPriceFromSources(sources) {
|
|
140
|
+
const [priceSum, weightSum] = sources.reduce(([cPriceSum, cWeightSum], source) => [
|
|
141
|
+
cPriceSum + source.price * source.weight,
|
|
142
|
+
cWeightSum + source.weight,
|
|
143
|
+
], [0, 0]);
|
|
144
|
+
return weightSum === 0 ? 0 : priceSum / weightSum;
|
|
145
|
+
}
|
|
146
|
+
function getHighestPrioritisedSource(sources) {
|
|
147
|
+
for (const priorityId of exports.prioritisedSourceIds) {
|
|
148
|
+
const source = sources.find((s) => s.id === priorityId);
|
|
149
|
+
if (source)
|
|
150
|
+
return source;
|
|
151
|
+
}
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
exports.getHighestPrioritisedSource = getHighestPrioritisedSource;
|
|
155
|
+
function getOldestTimestamp(sources) {
|
|
156
|
+
if (sources.length === 0)
|
|
157
|
+
return Date.now();
|
|
158
|
+
return sources.reduce((oldest, source) => {
|
|
159
|
+
return source.timestamp < oldest ? source.timestamp : oldest;
|
|
160
|
+
}, Date.now());
|
|
161
|
+
}
|
|
139
162
|
/**
|
|
140
163
|
* Get the price information from a list of sources.
|
|
141
164
|
* The price is determined by prioritising sources present in the prioritisedSourceIds list
|
|
@@ -143,44 +166,16 @@ exports.getTokenPricesUnderlyingsFromTokensPrices = getTokenPricesUnderlyingsFro
|
|
|
143
166
|
* @sources : list of TokenPriceSources
|
|
144
167
|
*/
|
|
145
168
|
function getPriceInfoFromSources(sources) {
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
let priceChange24h;
|
|
149
|
-
sources.forEach((s) => {
|
|
150
|
-
if (exports.prioritisedSourceIds.includes(s.id)) {
|
|
151
|
-
prioritisedSources.push(s);
|
|
152
|
-
}
|
|
153
|
-
// Get jupiter price change 24h if available
|
|
154
|
-
if (s.id === exports.jupiterSourceId) {
|
|
155
|
-
priceChange24h = s.priceChange24h;
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
const [priceSum, weightSum] = sources.reduce(([cPriceSum, cWeightSum], source) => [
|
|
159
|
-
cPriceSum + source.price * source.weight,
|
|
160
|
-
cWeightSum + source.weight,
|
|
161
|
-
], [0, 0]);
|
|
162
|
-
price = weightSum === 0 ? 0 : priceSum / weightSum;
|
|
163
|
-
// If there is no high priority sources, return the weighted average of all sources price
|
|
164
|
-
if (!prioritisedSources)
|
|
165
|
-
return {
|
|
166
|
-
price,
|
|
167
|
-
priceChange24h,
|
|
168
|
-
};
|
|
169
|
-
// Else, find the highest priority source available and use its price
|
|
170
|
-
let highestPrioritySource;
|
|
171
|
-
let highestSourceIndex = Number.MAX_SAFE_INTEGER;
|
|
172
|
-
for (const prioritySource of prioritisedSources) {
|
|
173
|
-
const sourceIndex = exports.prioritisedSourceIds.indexOf(prioritySource.id);
|
|
174
|
-
if (sourceIndex !== -1 && sourceIndex < highestSourceIndex) {
|
|
175
|
-
highestPrioritySource = prioritySource;
|
|
176
|
-
highestSourceIndex = sourceIndex;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
if (highestPrioritySource)
|
|
180
|
-
price = highestPrioritySource.price;
|
|
169
|
+
const firstPrioritisedSource = getHighestPrioritisedSource(sources);
|
|
170
|
+
const jupiterSource = sources.find((s) => s.id === exports.jupiterSourceId);
|
|
181
171
|
return {
|
|
182
|
-
price
|
|
183
|
-
|
|
172
|
+
price: firstPrioritisedSource
|
|
173
|
+
? firstPrioritisedSource.price
|
|
174
|
+
: getWeightedPriceFromSources(sources),
|
|
175
|
+
priceChange24h: jupiterSource ? jupiterSource.priceChange24h : undefined,
|
|
176
|
+
timestamp: firstPrioritisedSource
|
|
177
|
+
? firstPrioritisedSource.timestamp
|
|
178
|
+
: getOldestTimestamp(sources),
|
|
184
179
|
};
|
|
185
180
|
}
|
|
186
181
|
exports.getPriceInfoFromSources = getPriceInfoFromSources;
|
package/src/TokenPrice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenPrice.js","sourceRoot":"","sources":["../../../../packages/core/src/TokenPrice.ts"],"names":[],"mappings":";;;AACA,uCAAsC;AACtC,2CAAqD;AAGxC,QAAA,YAAY,GAAG,qBAAqB,CAAC;AACrC,QAAA,gBAAgB,GAAG,sBAAsB,CAAC;AAC1C,QAAA,cAAc,GAAG,sBAAsB,CAAC;AACxC,QAAA,gBAAgB,GAAG,wBAAwB,CAAC;AAC5C,QAAA,qBAAqB,GAAG,wBAAwB,CAAC;AACjD,QAAA,kBAAkB,GAAG,iCAAiC,CAAC;AACvD,QAAA,YAAY,GAAG,qBAAqB,CAAC;AACrC,QAAA,eAAe,GAAG,yBAAyB,CAAC;AAC5C,QAAA,aAAa,GAAG,gBAAgB,CAAC;AACjC,QAAA,YAAY,GAAG,qBAAqB,CAAC;AACrC,QAAA,gBAAgB,GAAG,2BAA2B,CAAC;AAC/C,QAAA,iBAAiB,GAAG,2BAA2B,CAAC;AAChD,QAAA,gBAAgB,GAAG,mBAAmB,CAAC;AACvC,QAAA,iBAAiB,GAAG,oBAAoB,CAAC;AACzC,QAAA,iBAAiB,GAAG,WAAW,CAAC;AAChC,QAAA,eAAe,GAAG,gBAAgB,CAAC;AACnC,QAAA,YAAY,GAAG,qBAAqB,CAAC;AACrC,QAAA,aAAa,GAAG,aAAa,CAAC;AAC3C;;;;GAIG;AACU,QAAA,oBAAoB,GAAa;IAC5C,oBAAY;IACZ,wBAAgB;IAChB,sBAAc;IACd,wBAAgB;IAChB,6BAAqB;IACrB,0BAAkB;IAClB,oBAAY;IACZ,uBAAe;IACf,qBAAa;IACb,oBAAY;IACZ,wBAAgB;IAChB,yBAAiB;IACjB,wBAAgB;IAChB,yBAAiB;IACjB,qBAAa;IACb,uBAAe;IACf,
|
|
1
|
+
{"version":3,"file":"TokenPrice.js","sourceRoot":"","sources":["../../../../packages/core/src/TokenPrice.ts"],"names":[],"mappings":"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"}
|