@render-foundation/utils 0.0.233-beta.0 → 0.0.234-beta.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/lib/cjs/client/price.js
CHANGED
|
@@ -24,30 +24,54 @@ const priceClient = () => {
|
|
|
24
24
|
});
|
|
25
25
|
return {
|
|
26
26
|
eurToUSDC(ts) {
|
|
27
|
-
var _a;
|
|
28
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
// EUR per USDC (coinbase USDC/EUR close), inverted to USDC per EUR.
|
|
29
|
+
let eurPerUsdc;
|
|
30
|
+
const ohlcv = yield cb.fetchOHLCV('USDC/EUR', '1m', ts.getTime(), 1);
|
|
31
|
+
if (ohlcv.length > 0)
|
|
32
|
+
eurPerUsdc = Number(ohlcv[0][4]);
|
|
33
|
+
else {
|
|
34
|
+
// Empty (ts ≈ now — the current minute has no closed candle yet): use the live ticker.
|
|
35
|
+
const t = yield cb.fetchTicker('USDC/EUR');
|
|
36
|
+
if (t.last)
|
|
37
|
+
eurPerUsdc = Number(t.last);
|
|
38
|
+
}
|
|
39
|
+
if (!eurPerUsdc || !isFinite(eurPerUsdc)) {
|
|
40
|
+
throw new Error('failed to fetch USDC/EUR from coinbase (OHLCV + ticker empty)');
|
|
32
41
|
}
|
|
33
|
-
return 1 /
|
|
42
|
+
return 1 / eurPerUsdc;
|
|
34
43
|
});
|
|
35
44
|
},
|
|
36
45
|
getRenderPriceAtDate(p) {
|
|
37
|
-
var _a
|
|
46
|
+
var _a;
|
|
38
47
|
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
const symbol = (_a = p.symbol) !== null && _a !== void 0 ? _a : 'RENDER/USDT';
|
|
49
|
+
// coinbase lists RENDER as RENDER/USD, not RENDER/USDT — map for the coinbase fallbacks.
|
|
50
|
+
const cbSymbol = symbol.replace('/USDT', '/USD');
|
|
51
|
+
const since = p.ts.getTime();
|
|
52
|
+
// 1) Historical: the 1m candle at/after ts — binanceus first, then coinbase (correct symbol).
|
|
53
|
+
let ticks = yield bin.fetchOHLCV(symbol, '1m', since, 1);
|
|
54
|
+
if (ticks.length == 0)
|
|
55
|
+
ticks = yield cb.fetchOHLCV(cbSymbol, '1m', since, 1);
|
|
56
|
+
if (ticks.length > 0)
|
|
57
|
+
return Number(ticks[0][4]);
|
|
58
|
+
// 2) OHLCV empty — typically ts ≈ now (the current minute has no closed candle yet). The previous
|
|
59
|
+
// code fell back to a coinbase OHLCV with the WRONG symbol (RENDER/USDT) and threw. Use the live
|
|
60
|
+
// ticker instead (all sources return it): binanceus RENDER/USDT, then coinbase RENDER/USD.
|
|
61
|
+
for (const [ex, sym] of [
|
|
62
|
+
[bin, symbol],
|
|
63
|
+
[cb, cbSymbol],
|
|
64
|
+
]) {
|
|
65
|
+
try {
|
|
66
|
+
const t = yield ex.fetchTicker(sym);
|
|
67
|
+
if (t.last)
|
|
68
|
+
return Number(t.last);
|
|
69
|
+
}
|
|
70
|
+
catch (_b) {
|
|
71
|
+
/* try next source */
|
|
72
|
+
}
|
|
48
73
|
}
|
|
49
|
-
|
|
50
|
-
return Number((_c = ticks[0][4]) === null || _c === void 0 ? void 0 : _c.toString());
|
|
74
|
+
throw new Error(`failed fetching RENDER price for ${symbol} at ${p.ts.toISOString()}`);
|
|
51
75
|
});
|
|
52
76
|
},
|
|
53
77
|
getCurrPrice() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price.js","sourceRoot":"","sources":["../../../src/client/price.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uDAAkD;AAClD,gDAAuB;AAgBhB,MAAM,WAAW,GAAG,GAAgB,EAAE;IAC3C,MAAM,GAAG,GAAG,IAAI,cAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAClC,MAAM,EAAE,GAAG,IAAI,cAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEhC,MAAM,MAAM,GAAG,IAAI,kCAAe,CAAC;QACjC,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,OAAO;QACC,SAAS,CAAC,EAAQ
|
|
1
|
+
{"version":3,"file":"price.js","sourceRoot":"","sources":["../../../src/client/price.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,28 +9,50 @@ export const priceClient = () => {
|
|
|
9
9
|
});
|
|
10
10
|
return {
|
|
11
11
|
async eurToUSDC(ts) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
// EUR per USDC (coinbase USDC/EUR close), inverted to USDC per EUR.
|
|
13
|
+
let eurPerUsdc;
|
|
14
|
+
const ohlcv = await cb.fetchOHLCV('USDC/EUR', '1m', ts.getTime(), 1);
|
|
15
|
+
if (ohlcv.length > 0)
|
|
16
|
+
eurPerUsdc = Number(ohlcv[0][4]);
|
|
17
|
+
else {
|
|
18
|
+
// Empty (ts ≈ now — the current minute has no closed candle yet): use the live ticker.
|
|
19
|
+
const t = await cb.fetchTicker('USDC/EUR');
|
|
20
|
+
if (t.last)
|
|
21
|
+
eurPerUsdc = Number(t.last);
|
|
15
22
|
}
|
|
16
|
-
|
|
23
|
+
if (!eurPerUsdc || !isFinite(eurPerUsdc)) {
|
|
24
|
+
throw new Error('failed to fetch USDC/EUR from coinbase (OHLCV + ticker empty)');
|
|
25
|
+
}
|
|
26
|
+
return 1 / eurPerUsdc;
|
|
17
27
|
},
|
|
18
28
|
async getRenderPriceAtDate(p) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
const symbol = p.symbol ?? 'RENDER/USDT';
|
|
30
|
+
// coinbase lists RENDER as RENDER/USD, not RENDER/USDT — map for the coinbase fallbacks.
|
|
31
|
+
const cbSymbol = symbol.replace('/USDT', '/USD');
|
|
32
|
+
const since = p.ts.getTime();
|
|
33
|
+
// 1) Historical: the 1m candle at/after ts — binanceus first, then coinbase (correct symbol).
|
|
34
|
+
let ticks = await bin.fetchOHLCV(symbol, '1m', since, 1);
|
|
35
|
+
if (ticks.length == 0)
|
|
36
|
+
ticks = await cb.fetchOHLCV(cbSymbol, '1m', since, 1);
|
|
37
|
+
if (ticks.length > 0)
|
|
38
|
+
return Number(ticks[0][4]);
|
|
39
|
+
// 2) OHLCV empty — typically ts ≈ now (the current minute has no closed candle yet). The previous
|
|
40
|
+
// code fell back to a coinbase OHLCV with the WRONG symbol (RENDER/USDT) and threw. Use the live
|
|
41
|
+
// ticker instead (all sources return it): binanceus RENDER/USDT, then coinbase RENDER/USD.
|
|
42
|
+
for (const [ex, sym] of [
|
|
43
|
+
[bin, symbol],
|
|
44
|
+
[cb, cbSymbol],
|
|
45
|
+
]) {
|
|
46
|
+
try {
|
|
47
|
+
const t = await ex.fetchTicker(sym);
|
|
48
|
+
if (t.last)
|
|
49
|
+
return Number(t.last);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* try next source */
|
|
53
|
+
}
|
|
31
54
|
}
|
|
32
|
-
|
|
33
|
-
return Number(ticks[0][4]?.toString());
|
|
55
|
+
throw new Error(`failed fetching RENDER price for ${symbol} at ${p.ts.toISOString()}`);
|
|
34
56
|
},
|
|
35
57
|
async getCurrPrice() {
|
|
36
58
|
const res = await client.coinId({ id: 'render-token' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price.js","sourceRoot":"","sources":["../../../../src/client/price.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,IAAI,MAAM,MAAM,CAAA;AAgBvB,MAAM,CAAC,MAAM,WAAW,GAAG,GAAgB,EAAE;IAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAClC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEhC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,EAAQ;YACtB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"price.js","sourceRoot":"","sources":["../../../../src/client/price.ts"],"names":[],"mappings":"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"}
|