@xyo-network/crypto-asset-plugin 2.74.5 → 2.75.2
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/dist/browser/Diviner.cjs +174 -0
- package/dist/browser/Diviner.cjs.map +1 -0
- package/dist/browser/Diviner.d.cts.map +1 -0
- package/dist/browser/Diviner.d.mts.map +1 -0
- package/dist/browser/Diviner.d.ts +16 -0
- package/dist/browser/Diviner.d.ts.map +1 -0
- package/dist/browser/Diviner.js +20 -0
- package/dist/browser/Diviner.js.map +1 -0
- package/dist/browser/Plugin.cjs +189 -0
- package/dist/browser/Plugin.cjs.map +1 -0
- package/dist/browser/Plugin.d.cts.map +1 -0
- package/dist/browser/Plugin.d.mts.map +1 -0
- package/dist/browser/Plugin.d.ts +50 -0
- package/dist/browser/Plugin.d.ts.map +1 -0
- package/dist/browser/Plugin.js +16 -0
- package/dist/browser/Plugin.js.map +1 -0
- package/dist/browser/Schema.cjs +29 -0
- package/dist/browser/Schema.cjs.map +1 -0
- package/dist/browser/Schema.d.cts.map +1 -0
- package/dist/browser/Schema.d.mts.map +1 -0
- package/dist/browser/Schema.d.ts +5 -0
- package/dist/browser/Schema.d.ts.map +1 -0
- package/dist/browser/Schema.js +7 -0
- package/dist/browser/Schema.js.map +1 -0
- package/dist/{index.js → browser/index.cjs} +1 -8
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts.map +1 -0
- package/dist/browser/index.d.mts.map +1 -0
- package/dist/browser/index.d.ts +6 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +9 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/lib/average.cjs +67 -0
- package/dist/browser/lib/average.cjs.map +1 -0
- package/dist/browser/lib/average.d.cts.map +1 -0
- package/dist/browser/lib/average.d.mts.map +1 -0
- package/dist/browser/lib/average.d.ts +3 -0
- package/dist/browser/lib/average.d.ts.map +1 -0
- package/dist/browser/lib/average.js +45 -0
- package/dist/browser/lib/average.js.map +1 -0
- package/dist/browser/lib/divineCoinGeckoPrices.cjs +48 -0
- package/dist/browser/lib/divineCoinGeckoPrices.cjs.map +1 -0
- package/dist/browser/lib/divineCoinGeckoPrices.d.cts.map +1 -0
- package/dist/browser/lib/divineCoinGeckoPrices.d.mts.map +1 -0
- package/dist/browser/lib/divineCoinGeckoPrices.d.ts +4 -0
- package/dist/browser/lib/divineCoinGeckoPrices.d.ts.map +1 -0
- package/dist/browser/lib/divineCoinGeckoPrices.js +26 -0
- package/dist/browser/lib/divineCoinGeckoPrices.js.map +1 -0
- package/dist/browser/lib/divinePrices.cjs +153 -0
- package/dist/browser/lib/divinePrices.cjs.map +1 -0
- package/dist/browser/lib/divinePrices.d.cts.map +1 -0
- package/dist/browser/lib/divinePrices.d.mts.map +1 -0
- package/dist/browser/lib/divinePrices.d.ts +5 -0
- package/dist/browser/lib/divinePrices.d.ts.map +1 -0
- package/dist/browser/lib/divinePrices.js +19 -0
- package/dist/browser/lib/divinePrices.js.map +1 -0
- package/dist/browser/lib/divineUniswapPrices.cjs +70 -0
- package/dist/browser/lib/divineUniswapPrices.cjs.map +1 -0
- package/dist/browser/lib/divineUniswapPrices.d.cts.map +1 -0
- package/dist/browser/lib/divineUniswapPrices.d.mts.map +1 -0
- package/dist/browser/lib/divineUniswapPrices.d.ts +4 -0
- package/dist/browser/lib/divineUniswapPrices.d.ts.map +1 -0
- package/dist/browser/lib/divineUniswapPrices.js +48 -0
- package/dist/browser/lib/divineUniswapPrices.js.map +1 -0
- package/dist/browser/lib/index.cjs +155 -0
- package/dist/browser/lib/index.cjs.map +1 -0
- package/dist/browser/lib/index.d.cts.map +1 -0
- package/dist/browser/lib/index.d.mts.map +1 -0
- package/dist/browser/lib/index.d.ts +2 -0
- package/dist/browser/lib/index.d.ts.map +1 -0
- package/dist/browser/lib/index.js +2 -0
- package/dist/browser/lib/index.js.map +1 -0
- package/dist/browser/test/index.cjs +293 -0
- package/dist/browser/test/index.cjs.map +1 -0
- package/dist/browser/test/index.d.cts.map +1 -0
- package/dist/browser/test/index.d.mts.map +1 -0
- package/dist/browser/test/index.d.ts +3 -0
- package/dist/browser/test/index.d.ts.map +1 -0
- package/dist/browser/test/index.js +3 -0
- package/dist/browser/test/index.js.map +1 -0
- package/dist/browser/test/sampleCoinGecko.cjs +99 -0
- package/dist/browser/test/sampleCoinGecko.cjs.map +1 -0
- package/dist/browser/test/sampleCoinGecko.d.cts.map +1 -0
- package/dist/browser/test/sampleCoinGecko.d.mts.map +1 -0
- package/dist/browser/test/sampleCoinGecko.d.ts +3 -0
- package/dist/browser/test/sampleCoinGecko.d.ts.map +1 -0
- package/dist/browser/test/sampleCoinGecko.js +77 -0
- package/dist/browser/test/sampleCoinGecko.js.map +1 -0
- package/dist/browser/test/sampleUniswap.cjs +215 -0
- package/dist/browser/test/sampleUniswap.cjs.map +1 -0
- package/dist/browser/test/sampleUniswap.d.cts.map +1 -0
- package/dist/browser/test/sampleUniswap.d.mts.map +1 -0
- package/dist/browser/test/sampleUniswap.d.ts +3 -0
- package/dist/browser/test/sampleUniswap.d.ts.map +1 -0
- package/dist/browser/test/sampleUniswap.js +193 -0
- package/dist/browser/test/sampleUniswap.js.map +1 -0
- package/dist/docs.json +534 -534
- package/dist/node/Diviner.d.cts +16 -0
- package/dist/node/Diviner.d.cts.map +1 -0
- package/dist/node/Diviner.d.mts +16 -0
- package/dist/node/Diviner.d.mts.map +1 -0
- package/dist/node/Diviner.d.ts +16 -0
- package/dist/node/Diviner.d.ts.map +1 -0
- package/dist/node/Diviner.js +188 -0
- package/dist/node/Diviner.js.map +1 -0
- package/dist/node/Diviner.mjs +163 -0
- package/dist/node/Diviner.mjs.map +1 -0
- package/dist/node/Plugin.d.cts +50 -0
- package/dist/node/Plugin.d.cts.map +1 -0
- package/dist/node/Plugin.d.mts +50 -0
- package/dist/node/Plugin.d.mts.map +1 -0
- package/dist/node/Plugin.d.ts +50 -0
- package/dist/node/Plugin.d.ts.map +1 -0
- package/dist/node/Plugin.js +203 -0
- package/dist/node/Plugin.js.map +1 -0
- package/dist/node/Plugin.mjs +178 -0
- package/dist/node/Plugin.mjs.map +1 -0
- package/dist/node/Schema.d.cts +5 -0
- package/dist/node/Schema.d.cts.map +1 -0
- package/dist/node/Schema.d.mts +5 -0
- package/dist/node/Schema.d.mts.map +1 -0
- package/dist/node/Schema.d.ts +5 -0
- package/dist/node/Schema.d.ts.map +1 -0
- package/dist/node/Schema.js +34 -0
- package/dist/node/Schema.js.map +1 -0
- package/dist/node/Schema.mjs +8 -0
- package/dist/node/Schema.mjs.map +1 -0
- package/dist/node/index.d.cts +6 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.d.mts +6 -0
- package/dist/node/index.d.mts.map +1 -0
- package/dist/node/index.d.ts +6 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +216 -0
- package/dist/node/index.js.map +1 -0
- package/dist/{index.mjs → node/index.mjs} +21 -11
- package/dist/node/index.mjs.map +1 -0
- package/dist/node/lib/average.d.cts +3 -0
- package/dist/node/lib/average.d.cts.map +1 -0
- package/dist/node/lib/average.d.mts +3 -0
- package/dist/node/lib/average.d.mts.map +1 -0
- package/dist/node/lib/average.d.ts +3 -0
- package/dist/node/lib/average.d.ts.map +1 -0
- package/dist/node/lib/average.js +80 -0
- package/dist/node/lib/average.js.map +1 -0
- package/dist/node/lib/average.mjs +55 -0
- package/dist/node/lib/average.mjs.map +1 -0
- package/dist/node/lib/divineCoinGeckoPrices.d.cts +4 -0
- package/dist/node/lib/divineCoinGeckoPrices.d.cts.map +1 -0
- package/dist/node/lib/divineCoinGeckoPrices.d.mts +4 -0
- package/dist/node/lib/divineCoinGeckoPrices.d.mts.map +1 -0
- package/dist/node/lib/divineCoinGeckoPrices.d.ts +4 -0
- package/dist/node/lib/divineCoinGeckoPrices.d.ts.map +1 -0
- package/dist/node/lib/divineCoinGeckoPrices.js +52 -0
- package/dist/node/lib/divineCoinGeckoPrices.js.map +1 -0
- package/dist/node/lib/divineCoinGeckoPrices.mjs +27 -0
- package/dist/node/lib/divineCoinGeckoPrices.mjs.map +1 -0
- package/dist/node/lib/divinePrices.d.cts +5 -0
- package/dist/node/lib/divinePrices.d.cts.map +1 -0
- package/dist/node/lib/divinePrices.d.mts +5 -0
- package/dist/node/lib/divinePrices.d.mts.map +1 -0
- package/dist/node/lib/divinePrices.d.ts +5 -0
- package/dist/node/lib/divinePrices.d.ts.map +1 -0
- package/dist/node/lib/divinePrices.js +167 -0
- package/dist/node/lib/divinePrices.js.map +1 -0
- package/dist/node/lib/divinePrices.mjs +142 -0
- package/dist/node/lib/divinePrices.mjs.map +1 -0
- package/dist/node/lib/divineUniswapPrices.d.cts +4 -0
- package/dist/node/lib/divineUniswapPrices.d.cts.map +1 -0
- package/dist/node/lib/divineUniswapPrices.d.mts +4 -0
- package/dist/node/lib/divineUniswapPrices.d.mts.map +1 -0
- package/dist/node/lib/divineUniswapPrices.d.ts +4 -0
- package/dist/node/lib/divineUniswapPrices.d.ts.map +1 -0
- package/dist/node/lib/divineUniswapPrices.js +75 -0
- package/dist/node/lib/divineUniswapPrices.js.map +1 -0
- package/dist/node/lib/divineUniswapPrices.mjs +50 -0
- package/dist/node/lib/divineUniswapPrices.mjs.map +1 -0
- package/dist/node/lib/index.d.cts +2 -0
- package/dist/node/lib/index.d.cts.map +1 -0
- package/dist/node/lib/index.d.mts +2 -0
- package/dist/node/lib/index.d.mts.map +1 -0
- package/dist/node/lib/index.d.ts +2 -0
- package/dist/node/lib/index.d.ts.map +1 -0
- package/dist/node/lib/index.js +169 -0
- package/dist/node/lib/index.js.map +1 -0
- package/dist/node/lib/index.mjs +142 -0
- package/dist/node/lib/index.mjs.map +1 -0
- package/dist/node/test/index.d.cts +3 -0
- package/dist/node/test/index.d.cts.map +1 -0
- package/dist/node/test/index.d.mts +3 -0
- package/dist/node/test/index.d.mts.map +1 -0
- package/dist/node/test/index.d.ts +3 -0
- package/dist/node/test/index.d.ts.map +1 -0
- package/dist/node/test/index.js +298 -0
- package/dist/node/test/index.js.map +1 -0
- package/dist/node/test/index.mjs +270 -0
- package/dist/node/test/index.mjs.map +1 -0
- package/dist/node/test/sampleCoinGecko.d.cts +3 -0
- package/dist/node/test/sampleCoinGecko.d.cts.map +1 -0
- package/dist/node/test/sampleCoinGecko.d.mts +3 -0
- package/dist/node/test/sampleCoinGecko.d.mts.map +1 -0
- package/dist/node/test/sampleCoinGecko.d.ts +3 -0
- package/dist/node/test/sampleCoinGecko.d.ts.map +1 -0
- package/dist/node/test/sampleCoinGecko.js +103 -0
- package/dist/node/test/sampleCoinGecko.js.map +1 -0
- package/dist/node/test/sampleCoinGecko.mjs +78 -0
- package/dist/node/test/sampleCoinGecko.mjs.map +1 -0
- package/dist/node/test/sampleUniswap.d.cts +3 -0
- package/dist/node/test/sampleUniswap.d.cts.map +1 -0
- package/dist/node/test/sampleUniswap.d.mts +3 -0
- package/dist/node/test/sampleUniswap.d.mts.map +1 -0
- package/dist/node/test/sampleUniswap.d.ts +3 -0
- package/dist/node/test/sampleUniswap.d.ts.map +1 -0
- package/dist/node/test/sampleUniswap.js +219 -0
- package/dist/node/test/sampleUniswap.js.map +1 -0
- package/dist/node/test/sampleUniswap.mjs +194 -0
- package/dist/node/test/sampleUniswap.mjs.map +1 -0
- package/package.json +35 -32
- package/dist/Diviner.d.mts.map +0 -1
- package/dist/Diviner.d.ts.map +0 -1
- package/dist/Plugin.d.mts.map +0 -1
- package/dist/Plugin.d.ts.map +0 -1
- package/dist/Schema.d.mts.map +0 -1
- package/dist/Schema.d.ts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/lib/average.d.mts.map +0 -1
- package/dist/lib/average.d.ts.map +0 -1
- package/dist/lib/divineCoinGeckoPrices.d.mts.map +0 -1
- package/dist/lib/divineCoinGeckoPrices.d.ts.map +0 -1
- package/dist/lib/divinePrices.d.mts.map +0 -1
- package/dist/lib/divinePrices.d.ts.map +0 -1
- package/dist/lib/divineUniswapPrices.d.mts.map +0 -1
- package/dist/lib/divineUniswapPrices.d.ts.map +0 -1
- package/dist/lib/index.d.mts.map +0 -1
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/test/index.d.mts.map +0 -1
- package/dist/test/index.d.ts.map +0 -1
- package/dist/test/sampleCoinGecko.d.mts.map +0 -1
- package/dist/test/sampleCoinGecko.d.ts.map +0 -1
- package/dist/test/sampleUniswap.d.mts.map +0 -1
- package/dist/test/sampleUniswap.d.ts.map +0 -1
- /package/dist/{Diviner.d.mts → browser/Diviner.d.cts} +0 -0
- /package/dist/{Diviner.d.ts → browser/Diviner.d.mts} +0 -0
- /package/dist/{Plugin.d.mts → browser/Plugin.d.cts} +0 -0
- /package/dist/{Plugin.d.ts → browser/Plugin.d.mts} +0 -0
- /package/dist/{Schema.d.mts → browser/Schema.d.cts} +0 -0
- /package/dist/{Schema.d.ts → browser/Schema.d.mts} +0 -0
- /package/dist/{index.d.mts → browser/index.d.cts} +0 -0
- /package/dist/{index.d.ts → browser/index.d.mts} +0 -0
- /package/dist/{lib/average.d.mts → browser/lib/average.d.cts} +0 -0
- /package/dist/{lib/average.d.ts → browser/lib/average.d.mts} +0 -0
- /package/dist/{lib/divineCoinGeckoPrices.d.mts → browser/lib/divineCoinGeckoPrices.d.cts} +0 -0
- /package/dist/{lib/divineCoinGeckoPrices.d.ts → browser/lib/divineCoinGeckoPrices.d.mts} +0 -0
- /package/dist/{lib/divinePrices.d.mts → browser/lib/divinePrices.d.cts} +0 -0
- /package/dist/{lib/divinePrices.d.ts → browser/lib/divinePrices.d.mts} +0 -0
- /package/dist/{lib/divineUniswapPrices.d.mts → browser/lib/divineUniswapPrices.d.cts} +0 -0
- /package/dist/{lib/divineUniswapPrices.d.ts → browser/lib/divineUniswapPrices.d.mts} +0 -0
- /package/dist/{lib/index.d.mts → browser/lib/index.d.cts} +0 -0
- /package/dist/{lib/index.d.ts → browser/lib/index.d.mts} +0 -0
- /package/dist/{test/index.d.mts → browser/test/index.d.cts} +0 -0
- /package/dist/{test/index.d.ts → browser/test/index.d.mts} +0 -0
- /package/dist/{test/sampleCoinGecko.d.mts → browser/test/sampleCoinGecko.d.cts} +0 -0
- /package/dist/{test/sampleCoinGecko.d.ts → browser/test/sampleCoinGecko.d.mts} +0 -0
- /package/dist/{test/sampleUniswap.d.mts → browser/test/sampleUniswap.d.cts} +0 -0
- /package/dist/{test/sampleUniswap.d.ts → browser/test/sampleUniswap.d.mts} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
CryptoMarketAssetDiviner: () => CryptoMarketAssetDiviner,
|
|
24
|
+
CryptoMarketAssetDivinerConfigSchema: () => CryptoMarketAssetDivinerConfigSchema,
|
|
25
|
+
CryptoMarketAssetDivinerQuerySchema: () => CryptoMarketAssetDivinerQuerySchema,
|
|
26
|
+
CryptoMarketAssetPlugin: () => CryptoMarketAssetPlugin,
|
|
27
|
+
default: () => src_default
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(src_exports);
|
|
30
|
+
|
|
31
|
+
// src/Plugin.ts
|
|
32
|
+
var import_crypto_asset_payload_plugin5 = require("@xyo-network/crypto-asset-payload-plugin");
|
|
33
|
+
var import_payload_model = require("@xyo-network/payload-model");
|
|
34
|
+
var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
|
|
35
|
+
|
|
36
|
+
// src/Diviner.ts
|
|
37
|
+
var import_abstract_diviner = require("@xyo-network/abstract-diviner");
|
|
38
|
+
var import_coingecko_crypto_market_payload_plugin = require("@xyo-network/coingecko-crypto-market-payload-plugin");
|
|
39
|
+
var import_crypto_asset_payload_plugin4 = require("@xyo-network/crypto-asset-payload-plugin");
|
|
40
|
+
var import_uniswap_crypto_market_payload_plugin = require("@xyo-network/uniswap-crypto-market-payload-plugin");
|
|
41
|
+
|
|
42
|
+
// src/lib/divinePrices.ts
|
|
43
|
+
var import_exists3 = require("@xylabs/exists");
|
|
44
|
+
var import_crypto_asset_payload_plugin3 = require("@xyo-network/crypto-asset-payload-plugin");
|
|
45
|
+
var import_payload_builder3 = require("@xyo-network/payload-builder");
|
|
46
|
+
|
|
47
|
+
// src/lib/average.ts
|
|
48
|
+
var import_exists = require("@xylabs/exists");
|
|
49
|
+
var isNumber = (val) => {
|
|
50
|
+
return val !== void 0;
|
|
51
|
+
};
|
|
52
|
+
var parseStringifiedNumber = (value) => {
|
|
53
|
+
if (!value)
|
|
54
|
+
return void 0;
|
|
55
|
+
const parsed = parseFloat(value);
|
|
56
|
+
return isNaN(parsed) ? void 0 : parsed;
|
|
57
|
+
};
|
|
58
|
+
var averageStringifiedNumbers = (...prices) => {
|
|
59
|
+
const numbers = prices.map(parseStringifiedNumber).filter(isNumber);
|
|
60
|
+
return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
|
|
61
|
+
};
|
|
62
|
+
var average = (...input) => {
|
|
63
|
+
const payloads = input.filter(import_exists.exists);
|
|
64
|
+
const tokens = new Set(payloads.map((payload) => Object.keys(payload.assets).map((t) => t)).flatMap((t) => t));
|
|
65
|
+
const valuations = new Set(
|
|
66
|
+
[...tokens].map((asset) => {
|
|
67
|
+
const assetInfo = payloads.map((p) => {
|
|
68
|
+
var _a;
|
|
69
|
+
return (_a = p.assets) == null ? void 0 : _a[asset];
|
|
70
|
+
}).filter(import_exists.exists);
|
|
71
|
+
const valueBasis = new Set(
|
|
72
|
+
assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(import_exists.exists)
|
|
73
|
+
);
|
|
74
|
+
return [...valueBasis];
|
|
75
|
+
}).flatMap((v) => v)
|
|
76
|
+
);
|
|
77
|
+
const assets = Object.fromEntries(
|
|
78
|
+
[...tokens].map((token) => {
|
|
79
|
+
const assetInfo = payloads.map((p) => {
|
|
80
|
+
var _a;
|
|
81
|
+
return (_a = p.assets) == null ? void 0 : _a[token];
|
|
82
|
+
}).filter(import_exists.exists);
|
|
83
|
+
const value = Object.fromEntries(
|
|
84
|
+
[...valuations].map((valuation) => {
|
|
85
|
+
const assetValuations = assetInfo.map((info) => {
|
|
86
|
+
var _a;
|
|
87
|
+
return (_a = info.value) == null ? void 0 : _a[valuation];
|
|
88
|
+
});
|
|
89
|
+
const averageAssetValuation = averageStringifiedNumbers(...assetValuations);
|
|
90
|
+
return [valuation, averageAssetValuation == null ? void 0 : averageAssetValuation.toString()];
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
return [token, { value }];
|
|
94
|
+
})
|
|
95
|
+
);
|
|
96
|
+
return assets;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// src/lib/divineCoinGeckoPrices.ts
|
|
100
|
+
var import_crypto_asset_payload_plugin = require("@xyo-network/crypto-asset-payload-plugin");
|
|
101
|
+
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
102
|
+
var schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
|
|
103
|
+
var valuationExists = (value) => {
|
|
104
|
+
return !!value[1];
|
|
105
|
+
};
|
|
106
|
+
var otherValueExists = (value) => {
|
|
107
|
+
const possiblyNumber = value[1];
|
|
108
|
+
return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
|
|
109
|
+
};
|
|
110
|
+
var divineCoinGeckoPrices = (payload) => {
|
|
111
|
+
const assets = payload && (payload == null ? void 0 : payload.assets) ? Object.fromEntries(
|
|
112
|
+
Object.entries(payload.assets).filter(valuationExists).map(([asset, valuation]) => {
|
|
113
|
+
const value = Object.fromEntries(
|
|
114
|
+
Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price == null ? void 0 : price.toString()])
|
|
115
|
+
);
|
|
116
|
+
return [asset, { value }];
|
|
117
|
+
})
|
|
118
|
+
) : {};
|
|
119
|
+
const timestamp = Date.now();
|
|
120
|
+
return new import_payload_builder.PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// src/lib/divineUniswapPrices.ts
|
|
124
|
+
var import_exists2 = require("@xylabs/exists");
|
|
125
|
+
var import_crypto_asset_payload_plugin2 = require("@xyo-network/crypto-asset-payload-plugin");
|
|
126
|
+
var import_payload_builder2 = require("@xyo-network/payload-builder");
|
|
127
|
+
var schema2 = import_crypto_asset_payload_plugin2.CryptoMarketAssetSchema;
|
|
128
|
+
var mapUniswapToken = (symbol) => {
|
|
129
|
+
if (symbol.toLowerCase() === "wbtc")
|
|
130
|
+
return "btc";
|
|
131
|
+
if (symbol.toLowerCase() === "weth")
|
|
132
|
+
return "eth";
|
|
133
|
+
if (symbol.toLowerCase() === "usdt")
|
|
134
|
+
return "usd";
|
|
135
|
+
return symbol.toLowerCase();
|
|
136
|
+
};
|
|
137
|
+
var pairsContainingToken = (uniswapPayload, token) => {
|
|
138
|
+
return uniswapPayload == null ? void 0 : uniswapPayload.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(import_exists2.exists);
|
|
139
|
+
};
|
|
140
|
+
var tokensFromPairs = (pairs) => {
|
|
141
|
+
return pairs.map((p) => p.tokens).flat().map((t) => t.symbol.toLowerCase());
|
|
142
|
+
};
|
|
143
|
+
var valuesFromTokenPairs = (tokensPairs, token) => {
|
|
144
|
+
return Object.fromEntries(
|
|
145
|
+
tokensPairs.map((pair) => {
|
|
146
|
+
var _a, _b;
|
|
147
|
+
const current = (_a = pair.filter((p) => p.symbol.toLowerCase() === token)) == null ? void 0 : _a[0];
|
|
148
|
+
const other = (_b = pair.filter((p) => p.symbol.toLowerCase() !== token)) == null ? void 0 : _b[0];
|
|
149
|
+
return [other.symbol.toLowerCase(), current.value.toString()];
|
|
150
|
+
}).map((x) => [mapUniswapToken(x[0]), x[1]])
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
var divineUniswapPrices = (uniswapPayload) => {
|
|
154
|
+
let assets = {};
|
|
155
|
+
if (uniswapPayload) {
|
|
156
|
+
const tokens = new Set(tokensFromPairs(uniswapPayload.pairs));
|
|
157
|
+
assets = Object.fromEntries(
|
|
158
|
+
[...tokens].map((token) => {
|
|
159
|
+
const pairs = pairsContainingToken(uniswapPayload, token);
|
|
160
|
+
const value = valuesFromTokenPairs(pairs, token);
|
|
161
|
+
const assetInfo = { value };
|
|
162
|
+
return [token, assetInfo];
|
|
163
|
+
})
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
const timestamp = Date.now();
|
|
167
|
+
return new import_payload_builder2.PayloadBuilder({ schema: schema2 }).fields({ assets, timestamp }).build();
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// src/lib/divinePrices.ts
|
|
171
|
+
var schema3 = import_crypto_asset_payload_plugin3.CryptoMarketAssetSchema;
|
|
172
|
+
var divinePrices = (coinGeckoPayload, uniswapPayload) => {
|
|
173
|
+
const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload);
|
|
174
|
+
const uniswapPrices = divineUniswapPrices(uniswapPayload);
|
|
175
|
+
const prices = [uniswapPayload, coinGeckoPayload].some(import_exists3.exists);
|
|
176
|
+
const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {};
|
|
177
|
+
const timestamp = Date.now();
|
|
178
|
+
return new import_payload_builder3.PayloadBuilder({ schema: schema3 }).fields({ assets, timestamp }).build();
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
// src/Schema.ts
|
|
182
|
+
var CryptoMarketAssetDivinerQuerySchema = "network.xyo.crypto.asset.diviner.query";
|
|
183
|
+
var CryptoMarketAssetDivinerConfigSchema = "network.xyo.crypto.asset.diviner.config";
|
|
184
|
+
|
|
185
|
+
// src/Diviner.ts
|
|
186
|
+
var CryptoMarketAssetDiviner = class extends import_abstract_diviner.AbstractDiviner {
|
|
187
|
+
static configSchemas = [CryptoMarketAssetDivinerConfigSchema];
|
|
188
|
+
static targetSchema = import_crypto_asset_payload_plugin4.CryptoMarketAssetSchema;
|
|
189
|
+
divineHandler(payloads) {
|
|
190
|
+
const coinGeckoPayload = payloads == null ? void 0 : payloads.find((payload) => (payload == null ? void 0 : payload.schema) === import_coingecko_crypto_market_payload_plugin.CoingeckoCryptoMarketSchema);
|
|
191
|
+
const uniswapPayload = payloads == null ? void 0 : payloads.find((payload) => (payload == null ? void 0 : payload.schema) === import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketSchema);
|
|
192
|
+
const result = divinePrices(coinGeckoPayload, uniswapPayload);
|
|
193
|
+
return [result];
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
// src/Plugin.ts
|
|
198
|
+
var CryptoMarketAssetPlugin = () => (0, import_payloadset_plugin.createPayloadSetDivinerPlugin)(
|
|
199
|
+
{ required: { [import_crypto_asset_payload_plugin5.CryptoMarketAssetSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
|
|
200
|
+
{
|
|
201
|
+
diviner: async (params) => {
|
|
202
|
+
return await CryptoMarketAssetDiviner.create(params);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
// src/index.ts
|
|
208
|
+
var src_default = CryptoMarketAssetPlugin;
|
|
209
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
210
|
+
0 && (module.exports = {
|
|
211
|
+
CryptoMarketAssetDiviner,
|
|
212
|
+
CryptoMarketAssetDivinerConfigSchema,
|
|
213
|
+
CryptoMarketAssetDivinerQuerySchema,
|
|
214
|
+
CryptoMarketAssetPlugin
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Diviner.ts","../../src/lib/divinePrices.ts","../../src/lib/average.ts","../../src/lib/divineCoinGeckoPrices.ts","../../src/lib/divineUniswapPrices.ts","../../src/Schema.ts"],"sourcesContent":["import { CryptoMarketAssetPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { CryptoMarketAssetPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoMarketAssetPlugin\n","import { CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetDivinerPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoMarketAssetDiviner } from './Diviner'\n\nexport const CryptoMarketAssetPlugin = () =>\n createPayloadSetDivinerPlugin<CryptoMarketAssetDiviner>(\n { required: { [CryptoMarketAssetSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n return (await CryptoMarketAssetDiviner.create(params)) as CryptoMarketAssetDiviner\n },\n },\n )\n","import { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { CoingeckoCryptoMarketPayload, CoingeckoCryptoMarketSchema } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { AnyConfigSchema, Module } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport { Promisable } from '@xyo-network/promise'\nimport { UniswapCryptoMarketPayload, UniswapCryptoMarketSchema } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { divinePrices } from './lib'\nimport { CryptoMarketAssetDivinerConfigSchema } from './Schema'\n\nexport type CryptoMarketAssetDivinerConfig = DivinerConfig<{ schema: CryptoMarketAssetDivinerConfigSchema }>\nexport type CryptoMarketAssetDivinerParams = DivinerParams<AnyConfigSchema<CryptoMarketAssetDivinerConfig>>\n\nexport class CryptoMarketAssetDiviner<TParams extends CryptoMarketAssetDivinerParams = CryptoMarketAssetDivinerParams>\n extends AbstractDiviner<TParams>\n implements DivinerModule, Module\n{\n static override configSchemas = [CryptoMarketAssetDivinerConfigSchema]\n static override targetSchema = CryptoMarketAssetSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const coinGeckoPayload = payloads?.find((payload) => payload?.schema === CoingeckoCryptoMarketSchema) as CoingeckoCryptoMarketPayload\n const uniswapPayload = payloads?.find((payload) => payload?.schema === UniswapCryptoMarketSchema) as UniswapCryptoMarketPayload\n const result: CryptoMarketAssetPayload = divinePrices(coinGeckoPayload, uniswapPayload)\n return [result]\n }\n}\n","import { exists } from '@xylabs/exists'\nimport { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { average } from './average'\nimport { divineCoinGeckoPrices } from './divineCoinGeckoPrices'\nimport { divineUniswapPrices } from './divineUniswapPrices'\n\nconst schema = CryptoMarketAssetSchema\n\nexport const divinePrices = (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): CryptoMarketAssetPayload => {\n const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, Currency, Token } from '@xyo-network/crypto-asset-payload-plugin'\n\nconst isNumber = (val: number | undefined): val is number => {\n return val !== undefined\n}\n\nconst parseStringifiedNumber = (value: string | undefined): number | undefined => {\n if (!value) return undefined\n const parsed = parseFloat(value)\n return isNaN(parsed) ? undefined : parsed\n}\n\nconst averageStringifiedNumbers = (...prices: (string | undefined)[]): number | undefined => {\n const numbers = prices.map(parseStringifiedNumber).filter(isNumber)\n return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : undefined\n}\n\nexport const average = (...input: (CryptoMarketAssetPayload | undefined)[]): Record<string, AssetInfo> => {\n // Get all the assets represented\n const payloads = input.filter(exists)\n const tokens = new Set<Token>(payloads.map((payload) => Object.keys(payload.assets).map<Token>((t) => t as Token)).flatMap((t) => t))\n // Get all the valuations used\n const valuations = new Set<Token | Currency>(\n [...tokens]\n .map((asset) => {\n const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists)\n const valueBasis = new Set<Currency | Token>(\n assetInfo\n .map((v) => Object.keys(v.value) as unknown as Currency | Token)\n .flatMap((v) => v)\n .filter(exists),\n )\n return [...valueBasis]\n })\n .flatMap((v) => v),\n )\n // For each of the tokens, calculate the average valuation for each of valuation bases\n const assets: Record<string, AssetInfo> = Object.fromEntries(\n [...tokens].map((token) => {\n const assetInfo = payloads.map((p) => p.assets?.[token]).filter(exists)\n const value = Object.fromEntries(\n [...valuations].map((valuation) => {\n const assetValuations = assetInfo.map((info) => info.value?.[valuation])\n const averageAssetValuation = averageStringifiedNumbers(...assetValuations)\n return [valuation, averageAssetValuation?.toString()]\n }),\n )\n return [token, { value }]\n }),\n )\n return assets\n}\n","import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst schema = CryptoMarketAssetSchema\n\nconst valuationExists = (value: [string, Partial<Record<string, number>> | undefined]): value is [string, Partial<Record<string, number>>] => {\n return !!value[1]\n}\n\nconst otherValueExists = (value: [string, number | undefined]): value is [string, number] => {\n const possiblyNumber = value[1]\n return typeof possiblyNumber === 'number' && !isNaN(possiblyNumber)\n}\n\nexport const divineCoinGeckoPrices = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n const assets: Record<string, AssetInfo> =\n payload && payload?.assets\n ? Object.fromEntries(\n Object.entries(payload.assets)\n .filter(valuationExists)\n .map(([asset, valuation]) => {\n const value = Object.fromEntries(\n Object.entries(valuation)\n .filter(otherValueExists)\n .map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()]),\n )\n return [asset, { value }]\n }),\n )\n : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema, Currency, Token, ValueBasis } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload, UniswapCryptoPair, UniswapCryptoToken } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nconst schema = CryptoMarketAssetSchema\n\nconst mapUniswapToken = (symbol: string): Token | Currency => {\n // TODO: Actually calculate the value of the token/stablecoin based on others\n // to weed out individual fluctuations in price\n if (symbol.toLowerCase() === 'wbtc') return 'btc'\n if (symbol.toLowerCase() === 'weth') return 'eth'\n if (symbol.toLowerCase() === 'usdt') return 'usd'\n return symbol.toLowerCase() as Token\n}\n\nconst pairsContainingToken = (uniswapPayload: UniswapCryptoMarketPayload, token: Token) => {\n return uniswapPayload?.pairs\n .map((p) => p.tokens)\n .filter((p) => p.some((x) => x.symbol.toLowerCase() === token))\n .filter(exists)\n}\n\nconst tokensFromPairs = (pairs: UniswapCryptoPair[]) => {\n return pairs\n .map((p) => p.tokens)\n .flat()\n .map((t) => t.symbol.toLowerCase() as Token)\n}\n\nconst valuesFromTokenPairs = (tokensPairs: UniswapCryptoToken[][], token: Token): ValueBasis => {\n return Object.fromEntries(\n tokensPairs\n .map((pair) => {\n const current = pair.filter((p) => p.symbol.toLowerCase() === token)?.[0]\n const other = pair.filter((p) => p.symbol.toLowerCase() !== token)?.[0]\n return [other.symbol.toLowerCase(), current.value.toString()]\n })\n .map((x) => [mapUniswapToken(x[0]), x[1]]),\n )\n}\n\nexport const divineUniswapPrices = (uniswapPayload: UniswapCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n let assets: Partial<Record<Token, AssetInfo | undefined>> = {}\n if (uniswapPayload) {\n const tokens: Set<Token> = new Set(tokensFromPairs(uniswapPayload.pairs))\n assets = Object.fromEntries(\n [...tokens].map((token) => {\n const pairs = pairsContainingToken(uniswapPayload, token)\n const value: ValueBasis = valuesFromTokenPairs(pairs, token)\n const assetInfo: AssetInfo = { value }\n return [token, assetInfo]\n }),\n )\n }\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","export type CryptoMarketAssetDivinerQuerySchema = 'network.xyo.crypto.asset.diviner.query'\nexport const CryptoMarketAssetDivinerQuerySchema: CryptoMarketAssetDivinerQuerySchema = 'network.xyo.crypto.asset.diviner.query'\n\nexport type CryptoMarketAssetDivinerConfigSchema = 'network.xyo.crypto.asset.diviner.config'\nexport const CryptoMarketAssetDivinerConfigSchema: CryptoMarketAssetDivinerConfigSchema = 'network.xyo.crypto.asset.diviner.config'\n"],"mappings":"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","names":["import_crypto_asset_payload_plugin","import_crypto_asset_payload_plugin","import_exists","import_crypto_asset_payload_plugin","import_payload_builder","import_exists","import_crypto_asset_payload_plugin","import_payload_builder","schema","schema"]}
|
|
@@ -34,7 +34,10 @@ var average = (...input) => {
|
|
|
34
34
|
const tokens = new Set(payloads.map((payload) => Object.keys(payload.assets).map((t) => t)).flatMap((t) => t));
|
|
35
35
|
const valuations = new Set(
|
|
36
36
|
[...tokens].map((asset) => {
|
|
37
|
-
const assetInfo = payloads.map((p) =>
|
|
37
|
+
const assetInfo = payloads.map((p) => {
|
|
38
|
+
var _a;
|
|
39
|
+
return (_a = p.assets) == null ? void 0 : _a[asset];
|
|
40
|
+
}).filter(exists);
|
|
38
41
|
const valueBasis = new Set(
|
|
39
42
|
assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(exists)
|
|
40
43
|
);
|
|
@@ -43,12 +46,18 @@ var average = (...input) => {
|
|
|
43
46
|
);
|
|
44
47
|
const assets = Object.fromEntries(
|
|
45
48
|
[...tokens].map((token) => {
|
|
46
|
-
const assetInfo = payloads.map((p) =>
|
|
49
|
+
const assetInfo = payloads.map((p) => {
|
|
50
|
+
var _a;
|
|
51
|
+
return (_a = p.assets) == null ? void 0 : _a[token];
|
|
52
|
+
}).filter(exists);
|
|
47
53
|
const value = Object.fromEntries(
|
|
48
54
|
[...valuations].map((valuation) => {
|
|
49
|
-
const assetValuations = assetInfo.map((info) =>
|
|
55
|
+
const assetValuations = assetInfo.map((info) => {
|
|
56
|
+
var _a;
|
|
57
|
+
return (_a = info.value) == null ? void 0 : _a[valuation];
|
|
58
|
+
});
|
|
50
59
|
const averageAssetValuation = averageStringifiedNumbers(...assetValuations);
|
|
51
|
-
return [valuation, averageAssetValuation
|
|
60
|
+
return [valuation, averageAssetValuation == null ? void 0 : averageAssetValuation.toString()];
|
|
52
61
|
})
|
|
53
62
|
);
|
|
54
63
|
return [token, { value }];
|
|
@@ -69,10 +78,10 @@ var otherValueExists = (value) => {
|
|
|
69
78
|
return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
|
|
70
79
|
};
|
|
71
80
|
var divineCoinGeckoPrices = (payload) => {
|
|
72
|
-
const assets = payload && payload
|
|
81
|
+
const assets = payload && (payload == null ? void 0 : payload.assets) ? Object.fromEntries(
|
|
73
82
|
Object.entries(payload.assets).filter(valuationExists).map(([asset, valuation]) => {
|
|
74
83
|
const value = Object.fromEntries(
|
|
75
|
-
Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price
|
|
84
|
+
Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price == null ? void 0 : price.toString()])
|
|
76
85
|
);
|
|
77
86
|
return [asset, { value }];
|
|
78
87
|
})
|
|
@@ -96,7 +105,7 @@ var mapUniswapToken = (symbol) => {
|
|
|
96
105
|
return symbol.toLowerCase();
|
|
97
106
|
};
|
|
98
107
|
var pairsContainingToken = (uniswapPayload, token) => {
|
|
99
|
-
return uniswapPayload
|
|
108
|
+
return uniswapPayload == null ? void 0 : uniswapPayload.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(exists2);
|
|
100
109
|
};
|
|
101
110
|
var tokensFromPairs = (pairs) => {
|
|
102
111
|
return pairs.map((p) => p.tokens).flat().map((t) => t.symbol.toLowerCase());
|
|
@@ -104,8 +113,9 @@ var tokensFromPairs = (pairs) => {
|
|
|
104
113
|
var valuesFromTokenPairs = (tokensPairs, token) => {
|
|
105
114
|
return Object.fromEntries(
|
|
106
115
|
tokensPairs.map((pair) => {
|
|
107
|
-
|
|
108
|
-
const
|
|
116
|
+
var _a, _b;
|
|
117
|
+
const current = (_a = pair.filter((p) => p.symbol.toLowerCase() === token)) == null ? void 0 : _a[0];
|
|
118
|
+
const other = (_b = pair.filter((p) => p.symbol.toLowerCase() !== token)) == null ? void 0 : _b[0];
|
|
109
119
|
return [other.symbol.toLowerCase(), current.value.toString()];
|
|
110
120
|
}).map((x) => [mapUniswapToken(x[0]), x[1]])
|
|
111
121
|
);
|
|
@@ -147,8 +157,8 @@ var CryptoMarketAssetDiviner = class extends AbstractDiviner {
|
|
|
147
157
|
static configSchemas = [CryptoMarketAssetDivinerConfigSchema];
|
|
148
158
|
static targetSchema = CryptoMarketAssetSchema4;
|
|
149
159
|
divineHandler(payloads) {
|
|
150
|
-
const coinGeckoPayload = payloads
|
|
151
|
-
const uniswapPayload = payloads
|
|
160
|
+
const coinGeckoPayload = payloads == null ? void 0 : payloads.find((payload) => (payload == null ? void 0 : payload.schema) === CoingeckoCryptoMarketSchema);
|
|
161
|
+
const uniswapPayload = payloads == null ? void 0 : payloads.find((payload) => (payload == null ? void 0 : payload.schema) === UniswapCryptoMarketSchema);
|
|
152
162
|
const result = divinePrices(coinGeckoPayload, uniswapPayload);
|
|
153
163
|
return [result];
|
|
154
164
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/Plugin.ts","../../src/Diviner.ts","../../src/lib/divinePrices.ts","../../src/lib/average.ts","../../src/lib/divineCoinGeckoPrices.ts","../../src/lib/divineUniswapPrices.ts","../../src/Schema.ts","../../src/index.ts"],"sourcesContent":["import { CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetDivinerPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoMarketAssetDiviner } from './Diviner'\n\nexport const CryptoMarketAssetPlugin = () =>\n createPayloadSetDivinerPlugin<CryptoMarketAssetDiviner>(\n { required: { [CryptoMarketAssetSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n return (await CryptoMarketAssetDiviner.create(params)) as CryptoMarketAssetDiviner\n },\n },\n )\n","import { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { CoingeckoCryptoMarketPayload, CoingeckoCryptoMarketSchema } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { AnyConfigSchema, Module } from '@xyo-network/module'\nimport { Payload } from '@xyo-network/payload-model'\nimport { Promisable } from '@xyo-network/promise'\nimport { UniswapCryptoMarketPayload, UniswapCryptoMarketSchema } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { divinePrices } from './lib'\nimport { CryptoMarketAssetDivinerConfigSchema } from './Schema'\n\nexport type CryptoMarketAssetDivinerConfig = DivinerConfig<{ schema: CryptoMarketAssetDivinerConfigSchema }>\nexport type CryptoMarketAssetDivinerParams = DivinerParams<AnyConfigSchema<CryptoMarketAssetDivinerConfig>>\n\nexport class CryptoMarketAssetDiviner<TParams extends CryptoMarketAssetDivinerParams = CryptoMarketAssetDivinerParams>\n extends AbstractDiviner<TParams>\n implements DivinerModule, Module\n{\n static override configSchemas = [CryptoMarketAssetDivinerConfigSchema]\n static override targetSchema = CryptoMarketAssetSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const coinGeckoPayload = payloads?.find((payload) => payload?.schema === CoingeckoCryptoMarketSchema) as CoingeckoCryptoMarketPayload\n const uniswapPayload = payloads?.find((payload) => payload?.schema === UniswapCryptoMarketSchema) as UniswapCryptoMarketPayload\n const result: CryptoMarketAssetPayload = divinePrices(coinGeckoPayload, uniswapPayload)\n return [result]\n }\n}\n","import { exists } from '@xylabs/exists'\nimport { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { average } from './average'\nimport { divineCoinGeckoPrices } from './divineCoinGeckoPrices'\nimport { divineUniswapPrices } from './divineUniswapPrices'\n\nconst schema = CryptoMarketAssetSchema\n\nexport const divinePrices = (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): CryptoMarketAssetPayload => {\n const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, Currency, Token } from '@xyo-network/crypto-asset-payload-plugin'\n\nconst isNumber = (val: number | undefined): val is number => {\n return val !== undefined\n}\n\nconst parseStringifiedNumber = (value: string | undefined): number | undefined => {\n if (!value) return undefined\n const parsed = parseFloat(value)\n return isNaN(parsed) ? undefined : parsed\n}\n\nconst averageStringifiedNumbers = (...prices: (string | undefined)[]): number | undefined => {\n const numbers = prices.map(parseStringifiedNumber).filter(isNumber)\n return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : undefined\n}\n\nexport const average = (...input: (CryptoMarketAssetPayload | undefined)[]): Record<string, AssetInfo> => {\n // Get all the assets represented\n const payloads = input.filter(exists)\n const tokens = new Set<Token>(payloads.map((payload) => Object.keys(payload.assets).map<Token>((t) => t as Token)).flatMap((t) => t))\n // Get all the valuations used\n const valuations = new Set<Token | Currency>(\n [...tokens]\n .map((asset) => {\n const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists)\n const valueBasis = new Set<Currency | Token>(\n assetInfo\n .map((v) => Object.keys(v.value) as unknown as Currency | Token)\n .flatMap((v) => v)\n .filter(exists),\n )\n return [...valueBasis]\n })\n .flatMap((v) => v),\n )\n // For each of the tokens, calculate the average valuation for each of valuation bases\n const assets: Record<string, AssetInfo> = Object.fromEntries(\n [...tokens].map((token) => {\n const assetInfo = payloads.map((p) => p.assets?.[token]).filter(exists)\n const value = Object.fromEntries(\n [...valuations].map((valuation) => {\n const assetValuations = assetInfo.map((info) => info.value?.[valuation])\n const averageAssetValuation = averageStringifiedNumbers(...assetValuations)\n return [valuation, averageAssetValuation?.toString()]\n }),\n )\n return [token, { value }]\n }),\n )\n return assets\n}\n","import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst schema = CryptoMarketAssetSchema\n\nconst valuationExists = (value: [string, Partial<Record<string, number>> | undefined]): value is [string, Partial<Record<string, number>>] => {\n return !!value[1]\n}\n\nconst otherValueExists = (value: [string, number | undefined]): value is [string, number] => {\n const possiblyNumber = value[1]\n return typeof possiblyNumber === 'number' && !isNaN(possiblyNumber)\n}\n\nexport const divineCoinGeckoPrices = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n const assets: Record<string, AssetInfo> =\n payload && payload?.assets\n ? Object.fromEntries(\n Object.entries(payload.assets)\n .filter(valuationExists)\n .map(([asset, valuation]) => {\n const value = Object.fromEntries(\n Object.entries(valuation)\n .filter(otherValueExists)\n .map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()]),\n )\n return [asset, { value }]\n }),\n )\n : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema, Currency, Token, ValueBasis } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload, UniswapCryptoPair, UniswapCryptoToken } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nconst schema = CryptoMarketAssetSchema\n\nconst mapUniswapToken = (symbol: string): Token | Currency => {\n // TODO: Actually calculate the value of the token/stablecoin based on others\n // to weed out individual fluctuations in price\n if (symbol.toLowerCase() === 'wbtc') return 'btc'\n if (symbol.toLowerCase() === 'weth') return 'eth'\n if (symbol.toLowerCase() === 'usdt') return 'usd'\n return symbol.toLowerCase() as Token\n}\n\nconst pairsContainingToken = (uniswapPayload: UniswapCryptoMarketPayload, token: Token) => {\n return uniswapPayload?.pairs\n .map((p) => p.tokens)\n .filter((p) => p.some((x) => x.symbol.toLowerCase() === token))\n .filter(exists)\n}\n\nconst tokensFromPairs = (pairs: UniswapCryptoPair[]) => {\n return pairs\n .map((p) => p.tokens)\n .flat()\n .map((t) => t.symbol.toLowerCase() as Token)\n}\n\nconst valuesFromTokenPairs = (tokensPairs: UniswapCryptoToken[][], token: Token): ValueBasis => {\n return Object.fromEntries(\n tokensPairs\n .map((pair) => {\n const current = pair.filter((p) => p.symbol.toLowerCase() === token)?.[0]\n const other = pair.filter((p) => p.symbol.toLowerCase() !== token)?.[0]\n return [other.symbol.toLowerCase(), current.value.toString()]\n })\n .map((x) => [mapUniswapToken(x[0]), x[1]]),\n )\n}\n\nexport const divineUniswapPrices = (uniswapPayload: UniswapCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n let assets: Partial<Record<Token, AssetInfo | undefined>> = {}\n if (uniswapPayload) {\n const tokens: Set<Token> = new Set(tokensFromPairs(uniswapPayload.pairs))\n assets = Object.fromEntries(\n [...tokens].map((token) => {\n const pairs = pairsContainingToken(uniswapPayload, token)\n const value: ValueBasis = valuesFromTokenPairs(pairs, token)\n const assetInfo: AssetInfo = { value }\n return [token, assetInfo]\n }),\n )\n }\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","export type CryptoMarketAssetDivinerQuerySchema = 'network.xyo.crypto.asset.diviner.query'\nexport const CryptoMarketAssetDivinerQuerySchema: CryptoMarketAssetDivinerQuerySchema = 'network.xyo.crypto.asset.diviner.query'\n\nexport type CryptoMarketAssetDivinerConfigSchema = 'network.xyo.crypto.asset.diviner.config'\nexport const CryptoMarketAssetDivinerConfigSchema: CryptoMarketAssetDivinerConfigSchema = 'network.xyo.crypto.asset.diviner.config'\n","import { CryptoMarketAssetPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { CryptoMarketAssetPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoMarketAssetPlugin\n"],"mappings":"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","names":["CryptoMarketAssetSchema","CryptoMarketAssetSchema","exists","CryptoMarketAssetSchema","PayloadBuilder","exists","CryptoMarketAssetSchema","PayloadBuilder","schema","schema","CryptoMarketAssetSchema","exists","PayloadBuilder","CryptoMarketAssetSchema","CryptoMarketAssetSchema"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"average.d.ts","sourceRoot":"","sources":["../../../src/lib/average.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAmB,MAAM,0CAA0C,CAAA;AAiB/G,eAAO,MAAM,OAAO,aAAc,CAAC,wBAAwB,GAAG,SAAS,CAAC,EAAE,KAAG,OAAO,MAAM,EAAE,SAAS,CAkCpG,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"average.d.ts","sourceRoot":"","sources":["../../../src/lib/average.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAmB,MAAM,0CAA0C,CAAA;AAiB/G,eAAO,MAAM,OAAO,aAAc,CAAC,wBAAwB,GAAG,SAAS,CAAC,EAAE,KAAG,OAAO,MAAM,EAAE,SAAS,CAkCpG,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"average.d.ts","sourceRoot":"","sources":["../../../src/lib/average.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAmB,MAAM,0CAA0C,CAAA;AAiB/G,eAAO,MAAM,OAAO,aAAc,CAAC,wBAAwB,GAAG,SAAS,CAAC,EAAE,KAAG,OAAO,MAAM,EAAE,SAAS,CAkCpG,CAAA"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/lib/average.ts
|
|
21
|
+
var average_exports = {};
|
|
22
|
+
__export(average_exports, {
|
|
23
|
+
average: () => average
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(average_exports);
|
|
26
|
+
var import_exists = require("@xylabs/exists");
|
|
27
|
+
var isNumber = (val) => {
|
|
28
|
+
return val !== void 0;
|
|
29
|
+
};
|
|
30
|
+
var parseStringifiedNumber = (value) => {
|
|
31
|
+
if (!value)
|
|
32
|
+
return void 0;
|
|
33
|
+
const parsed = parseFloat(value);
|
|
34
|
+
return isNaN(parsed) ? void 0 : parsed;
|
|
35
|
+
};
|
|
36
|
+
var averageStringifiedNumbers = (...prices) => {
|
|
37
|
+
const numbers = prices.map(parseStringifiedNumber).filter(isNumber);
|
|
38
|
+
return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
|
|
39
|
+
};
|
|
40
|
+
var average = (...input) => {
|
|
41
|
+
const payloads = input.filter(import_exists.exists);
|
|
42
|
+
const tokens = new Set(payloads.map((payload) => Object.keys(payload.assets).map((t) => t)).flatMap((t) => t));
|
|
43
|
+
const valuations = new Set(
|
|
44
|
+
[...tokens].map((asset) => {
|
|
45
|
+
const assetInfo = payloads.map((p) => {
|
|
46
|
+
var _a;
|
|
47
|
+
return (_a = p.assets) == null ? void 0 : _a[asset];
|
|
48
|
+
}).filter(import_exists.exists);
|
|
49
|
+
const valueBasis = new Set(
|
|
50
|
+
assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(import_exists.exists)
|
|
51
|
+
);
|
|
52
|
+
return [...valueBasis];
|
|
53
|
+
}).flatMap((v) => v)
|
|
54
|
+
);
|
|
55
|
+
const assets = Object.fromEntries(
|
|
56
|
+
[...tokens].map((token) => {
|
|
57
|
+
const assetInfo = payloads.map((p) => {
|
|
58
|
+
var _a;
|
|
59
|
+
return (_a = p.assets) == null ? void 0 : _a[token];
|
|
60
|
+
}).filter(import_exists.exists);
|
|
61
|
+
const value = Object.fromEntries(
|
|
62
|
+
[...valuations].map((valuation) => {
|
|
63
|
+
const assetValuations = assetInfo.map((info) => {
|
|
64
|
+
var _a;
|
|
65
|
+
return (_a = info.value) == null ? void 0 : _a[valuation];
|
|
66
|
+
});
|
|
67
|
+
const averageAssetValuation = averageStringifiedNumbers(...assetValuations);
|
|
68
|
+
return [valuation, averageAssetValuation == null ? void 0 : averageAssetValuation.toString()];
|
|
69
|
+
})
|
|
70
|
+
);
|
|
71
|
+
return [token, { value }];
|
|
72
|
+
})
|
|
73
|
+
);
|
|
74
|
+
return assets;
|
|
75
|
+
};
|
|
76
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
77
|
+
0 && (module.exports = {
|
|
78
|
+
average
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=average.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/average.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, Currency, Token } from '@xyo-network/crypto-asset-payload-plugin'\n\nconst isNumber = (val: number | undefined): val is number => {\n return val !== undefined\n}\n\nconst parseStringifiedNumber = (value: string | undefined): number | undefined => {\n if (!value) return undefined\n const parsed = parseFloat(value)\n return isNaN(parsed) ? undefined : parsed\n}\n\nconst averageStringifiedNumbers = (...prices: (string | undefined)[]): number | undefined => {\n const numbers = prices.map(parseStringifiedNumber).filter(isNumber)\n return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : undefined\n}\n\nexport const average = (...input: (CryptoMarketAssetPayload | undefined)[]): Record<string, AssetInfo> => {\n // Get all the assets represented\n const payloads = input.filter(exists)\n const tokens = new Set<Token>(payloads.map((payload) => Object.keys(payload.assets).map<Token>((t) => t as Token)).flatMap((t) => t))\n // Get all the valuations used\n const valuations = new Set<Token | Currency>(\n [...tokens]\n .map((asset) => {\n const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists)\n const valueBasis = new Set<Currency | Token>(\n assetInfo\n .map((v) => Object.keys(v.value) as unknown as Currency | Token)\n .flatMap((v) => v)\n .filter(exists),\n )\n return [...valueBasis]\n })\n .flatMap((v) => v),\n )\n // For each of the tokens, calculate the average valuation for each of valuation bases\n const assets: Record<string, AssetInfo> = Object.fromEntries(\n [...tokens].map((token) => {\n const assetInfo = payloads.map((p) => p.assets?.[token]).filter(exists)\n const value = Object.fromEntries(\n [...valuations].map((valuation) => {\n const assetValuations = assetInfo.map((info) => info.value?.[valuation])\n const averageAssetValuation = averageStringifiedNumbers(...assetValuations)\n return [valuation, averageAssetValuation?.toString()]\n }),\n )\n return [token, { value }]\n }),\n )\n return assets\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AAGvB,IAAM,WAAW,CAAC,QAA2C;AAC3D,SAAO,QAAQ;AACjB;AAEA,IAAM,yBAAyB,CAAC,UAAkD;AAChF,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,SAAS,WAAW,KAAK;AAC/B,SAAO,MAAM,MAAM,IAAI,SAAY;AACrC;AAEA,IAAM,4BAA4B,IAAI,WAAuD;AAC3F,QAAM,UAAU,OAAO,IAAI,sBAAsB,EAAE,OAAO,QAAQ;AAClE,SAAO,QAAQ,SAAS,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,GAAG,CAAC,IAAI,QAAQ,SAAS;AACpF;AAEO,IAAM,UAAU,IAAI,UAA+E;AAExG,QAAM,WAAW,MAAM,OAAO,oBAAM;AACpC,QAAM,SAAS,IAAI,IAAW,SAAS,IAAI,CAAC,YAAY,OAAO,KAAK,QAAQ,MAAM,EAAE,IAAW,CAAC,MAAM,CAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEpI,QAAM,aAAa,IAAI;AAAA,IACrB,CAAC,GAAG,MAAM,EACP,IAAI,CAAC,UAAU;AACd,YAAM,YAAY,SAAS,IAAI,CAAC,MAAG;AA1B3C;AA0B8C,uBAAE,WAAF,mBAAW;AAAA,OAAM,EAAE,OAAO,oBAAM;AACtE,YAAM,aAAa,IAAI;AAAA,QACrB,UACG,IAAI,CAAC,MAAM,OAAO,KAAK,EAAE,KAAK,CAAgC,EAC9D,QAAQ,CAAC,MAAM,CAAC,EAChB,OAAO,oBAAM;AAAA,MAClB;AACA,aAAO,CAAC,GAAG,UAAU;AAAA,IACvB,CAAC,EACA,QAAQ,CAAC,MAAM,CAAC;AAAA,EACrB;AAEA,QAAM,SAAoC,OAAO;AAAA,IAC/C,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,YAAM,YAAY,SAAS,IAAI,CAAC,MAAG;AAxCzC;AAwC4C,uBAAE,WAAF,mBAAW;AAAA,OAAM,EAAE,OAAO,oBAAM;AACtE,YAAM,QAAQ,OAAO;AAAA,QACnB,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,cAAc;AACjC,gBAAM,kBAAkB,UAAU,IAAI,CAAC,SAAM;AA3CvD;AA2C0D,8BAAK,UAAL,mBAAa;AAAA,WAAU;AACvE,gBAAM,wBAAwB,0BAA0B,GAAG,eAAe;AAC1E,iBAAO,CAAC,WAAW,+DAAuB,UAAU;AAAA,QACtD,CAAC;AAAA,MACH;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// src/lib/average.ts
|
|
2
|
+
import { exists } from "@xylabs/exists";
|
|
3
|
+
var isNumber = (val) => {
|
|
4
|
+
return val !== void 0;
|
|
5
|
+
};
|
|
6
|
+
var parseStringifiedNumber = (value) => {
|
|
7
|
+
if (!value)
|
|
8
|
+
return void 0;
|
|
9
|
+
const parsed = parseFloat(value);
|
|
10
|
+
return isNaN(parsed) ? void 0 : parsed;
|
|
11
|
+
};
|
|
12
|
+
var averageStringifiedNumbers = (...prices) => {
|
|
13
|
+
const numbers = prices.map(parseStringifiedNumber).filter(isNumber);
|
|
14
|
+
return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
|
|
15
|
+
};
|
|
16
|
+
var average = (...input) => {
|
|
17
|
+
const payloads = input.filter(exists);
|
|
18
|
+
const tokens = new Set(payloads.map((payload) => Object.keys(payload.assets).map((t) => t)).flatMap((t) => t));
|
|
19
|
+
const valuations = new Set(
|
|
20
|
+
[...tokens].map((asset) => {
|
|
21
|
+
const assetInfo = payloads.map((p) => {
|
|
22
|
+
var _a;
|
|
23
|
+
return (_a = p.assets) == null ? void 0 : _a[asset];
|
|
24
|
+
}).filter(exists);
|
|
25
|
+
const valueBasis = new Set(
|
|
26
|
+
assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(exists)
|
|
27
|
+
);
|
|
28
|
+
return [...valueBasis];
|
|
29
|
+
}).flatMap((v) => v)
|
|
30
|
+
);
|
|
31
|
+
const assets = Object.fromEntries(
|
|
32
|
+
[...tokens].map((token) => {
|
|
33
|
+
const assetInfo = payloads.map((p) => {
|
|
34
|
+
var _a;
|
|
35
|
+
return (_a = p.assets) == null ? void 0 : _a[token];
|
|
36
|
+
}).filter(exists);
|
|
37
|
+
const value = Object.fromEntries(
|
|
38
|
+
[...valuations].map((valuation) => {
|
|
39
|
+
const assetValuations = assetInfo.map((info) => {
|
|
40
|
+
var _a;
|
|
41
|
+
return (_a = info.value) == null ? void 0 : _a[valuation];
|
|
42
|
+
});
|
|
43
|
+
const averageAssetValuation = averageStringifiedNumbers(...assetValuations);
|
|
44
|
+
return [valuation, averageAssetValuation == null ? void 0 : averageAssetValuation.toString()];
|
|
45
|
+
})
|
|
46
|
+
);
|
|
47
|
+
return [token, { value }];
|
|
48
|
+
})
|
|
49
|
+
);
|
|
50
|
+
return assets;
|
|
51
|
+
};
|
|
52
|
+
export {
|
|
53
|
+
average
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=average.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/average.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, Currency, Token } from '@xyo-network/crypto-asset-payload-plugin'\n\nconst isNumber = (val: number | undefined): val is number => {\n return val !== undefined\n}\n\nconst parseStringifiedNumber = (value: string | undefined): number | undefined => {\n if (!value) return undefined\n const parsed = parseFloat(value)\n return isNaN(parsed) ? undefined : parsed\n}\n\nconst averageStringifiedNumbers = (...prices: (string | undefined)[]): number | undefined => {\n const numbers = prices.map(parseStringifiedNumber).filter(isNumber)\n return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : undefined\n}\n\nexport const average = (...input: (CryptoMarketAssetPayload | undefined)[]): Record<string, AssetInfo> => {\n // Get all the assets represented\n const payloads = input.filter(exists)\n const tokens = new Set<Token>(payloads.map((payload) => Object.keys(payload.assets).map<Token>((t) => t as Token)).flatMap((t) => t))\n // Get all the valuations used\n const valuations = new Set<Token | Currency>(\n [...tokens]\n .map((asset) => {\n const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists)\n const valueBasis = new Set<Currency | Token>(\n assetInfo\n .map((v) => Object.keys(v.value) as unknown as Currency | Token)\n .flatMap((v) => v)\n .filter(exists),\n )\n return [...valueBasis]\n })\n .flatMap((v) => v),\n )\n // For each of the tokens, calculate the average valuation for each of valuation bases\n const assets: Record<string, AssetInfo> = Object.fromEntries(\n [...tokens].map((token) => {\n const assetInfo = payloads.map((p) => p.assets?.[token]).filter(exists)\n const value = Object.fromEntries(\n [...valuations].map((valuation) => {\n const assetValuations = assetInfo.map((info) => info.value?.[valuation])\n const averageAssetValuation = averageStringifiedNumbers(...assetValuations)\n return [valuation, averageAssetValuation?.toString()]\n }),\n )\n return [token, { value }]\n }),\n )\n return assets\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAGvB,IAAM,WAAW,CAAC,QAA2C;AAC3D,SAAO,QAAQ;AACjB;AAEA,IAAM,yBAAyB,CAAC,UAAkD;AAChF,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,SAAS,WAAW,KAAK;AAC/B,SAAO,MAAM,MAAM,IAAI,SAAY;AACrC;AAEA,IAAM,4BAA4B,IAAI,WAAuD;AAC3F,QAAM,UAAU,OAAO,IAAI,sBAAsB,EAAE,OAAO,QAAQ;AAClE,SAAO,QAAQ,SAAS,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,GAAG,CAAC,IAAI,QAAQ,SAAS;AACpF;AAEO,IAAM,UAAU,IAAI,UAA+E;AAExG,QAAM,WAAW,MAAM,OAAO,MAAM;AACpC,QAAM,SAAS,IAAI,IAAW,SAAS,IAAI,CAAC,YAAY,OAAO,KAAK,QAAQ,MAAM,EAAE,IAAW,CAAC,MAAM,CAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEpI,QAAM,aAAa,IAAI;AAAA,IACrB,CAAC,GAAG,MAAM,EACP,IAAI,CAAC,UAAU;AACd,YAAM,YAAY,SAAS,IAAI,CAAC,MAAG;AA1B3C;AA0B8C,uBAAE,WAAF,mBAAW;AAAA,OAAM,EAAE,OAAO,MAAM;AACtE,YAAM,aAAa,IAAI;AAAA,QACrB,UACG,IAAI,CAAC,MAAM,OAAO,KAAK,EAAE,KAAK,CAAgC,EAC9D,QAAQ,CAAC,MAAM,CAAC,EAChB,OAAO,MAAM;AAAA,MAClB;AACA,aAAO,CAAC,GAAG,UAAU;AAAA,IACvB,CAAC,EACA,QAAQ,CAAC,MAAM,CAAC;AAAA,EACrB;AAEA,QAAM,SAAoC,OAAO;AAAA,IAC/C,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,YAAM,YAAY,SAAS,IAAI,CAAC,MAAG;AAxCzC;AAwC4C,uBAAE,WAAF,mBAAW;AAAA,OAAM,EAAE,OAAO,MAAM;AACtE,YAAM,QAAQ,OAAO;AAAA,QACnB,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,cAAc;AACjC,gBAAM,kBAAkB,UAAU,IAAI,CAAC,SAAM;AA3CvD;AA2C0D,8BAAK,UAAL,mBAAa;AAAA,WAAU;AACvE,gBAAM,wBAAwB,0BAA0B,GAAG,eAAe;AAC1E,iBAAO,CAAC,WAAW,+DAAuB,UAAU;AAAA,QACtD,CAAC;AAAA,MACH;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
|
|
2
|
+
import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
|
|
3
|
+
export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
|
|
4
|
+
//# sourceMappingURL=divineCoinGeckoPrices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAa,4BAA4B,GAAG,SAAS,KAAG,wBAkBzF,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
|
|
2
|
+
import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
|
|
3
|
+
export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
|
|
4
|
+
//# sourceMappingURL=divineCoinGeckoPrices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAa,4BAA4B,GAAG,SAAS,KAAG,wBAkBzF,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
|
|
2
|
+
import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
|
|
3
|
+
export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
|
|
4
|
+
//# sourceMappingURL=divineCoinGeckoPrices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAa,4BAA4B,GAAG,SAAS,KAAG,wBAkBzF,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/lib/divineCoinGeckoPrices.ts
|
|
21
|
+
var divineCoinGeckoPrices_exports = {};
|
|
22
|
+
__export(divineCoinGeckoPrices_exports, {
|
|
23
|
+
divineCoinGeckoPrices: () => divineCoinGeckoPrices
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(divineCoinGeckoPrices_exports);
|
|
26
|
+
var import_crypto_asset_payload_plugin = require("@xyo-network/crypto-asset-payload-plugin");
|
|
27
|
+
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
28
|
+
var schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
|
|
29
|
+
var valuationExists = (value) => {
|
|
30
|
+
return !!value[1];
|
|
31
|
+
};
|
|
32
|
+
var otherValueExists = (value) => {
|
|
33
|
+
const possiblyNumber = value[1];
|
|
34
|
+
return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
|
|
35
|
+
};
|
|
36
|
+
var divineCoinGeckoPrices = (payload) => {
|
|
37
|
+
const assets = payload && (payload == null ? void 0 : payload.assets) ? Object.fromEntries(
|
|
38
|
+
Object.entries(payload.assets).filter(valuationExists).map(([asset, valuation]) => {
|
|
39
|
+
const value = Object.fromEntries(
|
|
40
|
+
Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price == null ? void 0 : price.toString()])
|
|
41
|
+
);
|
|
42
|
+
return [asset, { value }];
|
|
43
|
+
})
|
|
44
|
+
) : {};
|
|
45
|
+
const timestamp = Date.now();
|
|
46
|
+
return new import_payload_builder.PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
|
|
47
|
+
};
|
|
48
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
49
|
+
0 && (module.exports = {
|
|
50
|
+
divineCoinGeckoPrices
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=divineCoinGeckoPrices.js.map
|