@xyo-network/crypto-asset-plugin 2.74.5 → 2.75.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/dist/browser/Diviner.cjs +174 -0
- package/dist/browser/Diviner.cjs.map +1 -0
- package/dist/browser/Diviner.d.mts.map +1 -0
- package/dist/browser/Diviner.d.ts.map +1 -0
- package/dist/browser/Diviner.js +153 -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.mts.map +1 -0
- package/dist/browser/Plugin.d.ts.map +1 -0
- package/dist/browser/Plugin.js +168 -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.mts.map +1 -0
- package/dist/browser/Schema.d.ts.map +1 -0
- package/dist/browser/Schema.js +8 -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.mts.map +1 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/{index.mjs → browser/index.js} +1 -1
- 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.mts.map +1 -0
- package/dist/browser/lib/average.d.ts.map +1 -0
- package/dist/browser/lib/average.js +46 -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.mts.map +1 -0
- package/dist/browser/lib/divineCoinGeckoPrices.d.ts.map +1 -0
- package/dist/browser/lib/divineCoinGeckoPrices.js +27 -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.mts.map +1 -0
- package/dist/browser/lib/divinePrices.d.ts.map +1 -0
- package/dist/browser/lib/divinePrices.js +132 -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.mts.map +1 -0
- package/dist/browser/lib/divineUniswapPrices.d.ts.map +1 -0
- package/dist/browser/lib/divineUniswapPrices.js +49 -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.mts.map +1 -0
- package/dist/browser/lib/index.d.ts.map +1 -0
- package/dist/browser/lib/index.js +132 -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.mts.map +1 -0
- package/dist/browser/test/index.d.ts.map +1 -0
- package/dist/browser/test/index.js +270 -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.mts.map +1 -0
- package/dist/browser/test/sampleCoinGecko.d.ts.map +1 -0
- package/dist/browser/test/sampleCoinGecko.js +78 -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.mts.map +1 -0
- package/dist/browser/test/sampleUniswap.d.ts.map +1 -0
- package/dist/browser/test/sampleUniswap.js +194 -0
- package/dist/browser/test/sampleUniswap.js.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 +44 -0
- package/dist/node/Diviner.js.map +1 -0
- package/dist/node/Diviner.mjs +20 -0
- package/dist/node/Diviner.mjs.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 +40 -0
- package/dist/node/Plugin.js.map +1 -0
- package/dist/node/Plugin.mjs +16 -0
- package/dist/node/Plugin.mjs.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 +32 -0
- package/dist/node/Schema.js.map +1 -0
- package/dist/node/Schema.mjs +7 -0
- package/dist/node/Schema.mjs.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 +36 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/index.mjs +9 -0
- package/dist/node/index.mjs.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 +69 -0
- package/dist/node/lib/average.js.map +1 -0
- package/dist/node/lib/average.mjs +45 -0
- package/dist/node/lib/average.mjs.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 +50 -0
- package/dist/node/lib/divineCoinGeckoPrices.js.map +1 -0
- package/dist/node/lib/divineCoinGeckoPrices.mjs +26 -0
- package/dist/node/lib/divineCoinGeckoPrices.mjs.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 +43 -0
- package/dist/node/lib/divinePrices.js.map +1 -0
- package/dist/node/lib/divinePrices.mjs +19 -0
- package/dist/node/lib/divinePrices.mjs.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 +72 -0
- package/dist/node/lib/divineUniswapPrices.js.map +1 -0
- package/dist/node/lib/divineUniswapPrices.mjs +48 -0
- package/dist/node/lib/divineUniswapPrices.mjs.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 +23 -0
- package/dist/node/lib/index.js.map +1 -0
- package/dist/node/lib/index.mjs +2 -0
- package/dist/node/lib/index.mjs.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 +25 -0
- package/dist/node/test/index.js.map +1 -0
- package/dist/node/test/index.mjs +3 -0
- package/dist/node/test/index.mjs.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 +101 -0
- package/dist/node/test/sampleCoinGecko.js.map +1 -0
- package/dist/node/test/sampleCoinGecko.mjs +77 -0
- package/dist/node/test/sampleCoinGecko.mjs.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 +217 -0
- package/dist/node/test/sampleUniswap.js.map +1 -0
- package/dist/node/test/sampleUniswap.mjs +193 -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/docs.json +0 -21990
- 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.mts} +0 -0
- /package/dist/{Diviner.d.ts → browser/Diviner.d.ts} +0 -0
- /package/dist/{Plugin.d.mts → browser/Plugin.d.mts} +0 -0
- /package/dist/{Plugin.d.ts → browser/Plugin.d.ts} +0 -0
- /package/dist/{Schema.d.mts → browser/Schema.d.mts} +0 -0
- /package/dist/{Schema.d.ts → browser/Schema.d.ts} +0 -0
- /package/dist/{index.d.mts → browser/index.d.mts} +0 -0
- /package/dist/{index.d.ts → browser/index.d.ts} +0 -0
- /package/dist/{lib → browser/lib}/average.d.mts +0 -0
- /package/dist/{lib → browser/lib}/average.d.ts +0 -0
- /package/dist/{lib → browser/lib}/divineCoinGeckoPrices.d.mts +0 -0
- /package/dist/{lib → browser/lib}/divineCoinGeckoPrices.d.ts +0 -0
- /package/dist/{lib → browser/lib}/divinePrices.d.mts +0 -0
- /package/dist/{lib → browser/lib}/divinePrices.d.ts +0 -0
- /package/dist/{lib → browser/lib}/divineUniswapPrices.d.mts +0 -0
- /package/dist/{lib → browser/lib}/divineUniswapPrices.d.ts +0 -0
- /package/dist/{lib → browser/lib}/index.d.mts +0 -0
- /package/dist/{lib → browser/lib}/index.d.ts +0 -0
- /package/dist/{test → browser/test}/index.d.mts +0 -0
- /package/dist/{test → browser/test}/index.d.ts +0 -0
- /package/dist/{test → browser/test}/sampleCoinGecko.d.mts +0 -0
- /package/dist/{test → browser/test}/sampleCoinGecko.d.ts +0 -0
- /package/dist/{test → browser/test}/sampleUniswap.d.mts +0 -0
- /package/dist/{test → browser/test}/sampleUniswap.d.ts +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var src_exports = {};
|
|
21
|
+
__export(src_exports, {
|
|
22
|
+
CryptoMarketAssetPlugin: () => import_Plugin.CryptoMarketAssetPlugin,
|
|
23
|
+
default: () => src_default
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(src_exports);
|
|
26
|
+
var import_Plugin = require("./Plugin");
|
|
27
|
+
__reExport(src_exports, require("./Diviner"), module.exports);
|
|
28
|
+
__reExport(src_exports, require("./Schema"), module.exports);
|
|
29
|
+
var src_default = import_Plugin.CryptoMarketAssetPlugin;
|
|
30
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
31
|
+
0 && (module.exports = {
|
|
32
|
+
CryptoMarketAssetPlugin,
|
|
33
|
+
...require("./Diviner"),
|
|
34
|
+
...require("./Schema")
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.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"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAwC;AAExC,wBAAc,sBAFd;AAGA,wBAAc,qBAHd;AAQA,IAAO,cAAQ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.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"],"mappings":"AAAA,SAAS,+BAA+B;AAExC,cAAc;AACd,cAAc;AAKd,IAAO,cAAQ;","names":[]}
|
|
@@ -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,69 @@
|
|
|
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
|
+
var average_exports = {};
|
|
20
|
+
__export(average_exports, {
|
|
21
|
+
average: () => average
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(average_exports);
|
|
24
|
+
var import_exists = require("@xylabs/exists");
|
|
25
|
+
const isNumber = (val) => {
|
|
26
|
+
return val !== void 0;
|
|
27
|
+
};
|
|
28
|
+
const parseStringifiedNumber = (value) => {
|
|
29
|
+
if (!value)
|
|
30
|
+
return void 0;
|
|
31
|
+
const parsed = parseFloat(value);
|
|
32
|
+
return isNaN(parsed) ? void 0 : parsed;
|
|
33
|
+
};
|
|
34
|
+
const averageStringifiedNumbers = (...prices) => {
|
|
35
|
+
const numbers = prices.map(parseStringifiedNumber).filter(isNumber);
|
|
36
|
+
return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
|
|
37
|
+
};
|
|
38
|
+
const average = (...input) => {
|
|
39
|
+
const payloads = input.filter(import_exists.exists);
|
|
40
|
+
const tokens = new Set(payloads.map((payload) => Object.keys(payload.assets).map((t) => t)).flatMap((t) => t));
|
|
41
|
+
const valuations = new Set(
|
|
42
|
+
[...tokens].map((asset) => {
|
|
43
|
+
const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(import_exists.exists);
|
|
44
|
+
const valueBasis = new Set(
|
|
45
|
+
assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(import_exists.exists)
|
|
46
|
+
);
|
|
47
|
+
return [...valueBasis];
|
|
48
|
+
}).flatMap((v) => v)
|
|
49
|
+
);
|
|
50
|
+
const assets = Object.fromEntries(
|
|
51
|
+
[...tokens].map((token) => {
|
|
52
|
+
const assetInfo = payloads.map((p) => p.assets?.[token]).filter(import_exists.exists);
|
|
53
|
+
const value = Object.fromEntries(
|
|
54
|
+
[...valuations].map((valuation) => {
|
|
55
|
+
const assetValuations = assetInfo.map((info) => info.value?.[valuation]);
|
|
56
|
+
const averageAssetValuation = averageStringifiedNumbers(...assetValuations);
|
|
57
|
+
return [valuation, averageAssetValuation?.toString()];
|
|
58
|
+
})
|
|
59
|
+
);
|
|
60
|
+
return [token, { value }];
|
|
61
|
+
})
|
|
62
|
+
);
|
|
63
|
+
return assets;
|
|
64
|
+
};
|
|
65
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
66
|
+
0 && (module.exports = {
|
|
67
|
+
average
|
|
68
|
+
});
|
|
69
|
+
//# 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,MAAM,WAAW,CAAC,QAA2C;AAC3D,SAAO,QAAQ;AACjB;AAEA,MAAM,yBAAyB,CAAC,UAAkD;AAChF,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,SAAS,WAAW,KAAK;AAC/B,SAAO,MAAM,MAAM,IAAI,SAAY;AACrC;AAEA,MAAM,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,MAAM,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,MAAM,EAAE,SAAS,KAAK,CAAC,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,MAAM,EAAE,SAAS,KAAK,CAAC,EAAE,OAAO,oBAAM;AACtE,YAAM,QAAQ,OAAO;AAAA,QACnB,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,cAAc;AACjC,gBAAM,kBAAkB,UAAU,IAAI,CAAC,SAAS,KAAK,QAAQ,SAAS,CAAC;AACvE,gBAAM,wBAAwB,0BAA0B,GAAG,eAAe;AAC1E,iBAAO,CAAC,WAAW,uBAAuB,SAAS,CAAC;AAAA,QACtD,CAAC;AAAA,MACH;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { exists } from "@xylabs/exists";
|
|
2
|
+
const isNumber = (val) => {
|
|
3
|
+
return val !== void 0;
|
|
4
|
+
};
|
|
5
|
+
const parseStringifiedNumber = (value) => {
|
|
6
|
+
if (!value)
|
|
7
|
+
return void 0;
|
|
8
|
+
const parsed = parseFloat(value);
|
|
9
|
+
return isNaN(parsed) ? void 0 : parsed;
|
|
10
|
+
};
|
|
11
|
+
const averageStringifiedNumbers = (...prices) => {
|
|
12
|
+
const numbers = prices.map(parseStringifiedNumber).filter(isNumber);
|
|
13
|
+
return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
|
|
14
|
+
};
|
|
15
|
+
const average = (...input) => {
|
|
16
|
+
const payloads = input.filter(exists);
|
|
17
|
+
const tokens = new Set(payloads.map((payload) => Object.keys(payload.assets).map((t) => t)).flatMap((t) => t));
|
|
18
|
+
const valuations = new Set(
|
|
19
|
+
[...tokens].map((asset) => {
|
|
20
|
+
const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists);
|
|
21
|
+
const valueBasis = new Set(
|
|
22
|
+
assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(exists)
|
|
23
|
+
);
|
|
24
|
+
return [...valueBasis];
|
|
25
|
+
}).flatMap((v) => v)
|
|
26
|
+
);
|
|
27
|
+
const assets = Object.fromEntries(
|
|
28
|
+
[...tokens].map((token) => {
|
|
29
|
+
const assetInfo = payloads.map((p) => p.assets?.[token]).filter(exists);
|
|
30
|
+
const value = Object.fromEntries(
|
|
31
|
+
[...valuations].map((valuation) => {
|
|
32
|
+
const assetValuations = assetInfo.map((info) => info.value?.[valuation]);
|
|
33
|
+
const averageAssetValuation = averageStringifiedNumbers(...assetValuations);
|
|
34
|
+
return [valuation, averageAssetValuation?.toString()];
|
|
35
|
+
})
|
|
36
|
+
);
|
|
37
|
+
return [token, { value }];
|
|
38
|
+
})
|
|
39
|
+
);
|
|
40
|
+
return assets;
|
|
41
|
+
};
|
|
42
|
+
export {
|
|
43
|
+
average
|
|
44
|
+
};
|
|
45
|
+
//# 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,MAAM,WAAW,CAAC,QAA2C;AAC3D,SAAO,QAAQ;AACjB;AAEA,MAAM,yBAAyB,CAAC,UAAkD;AAChF,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,SAAS,WAAW,KAAK;AAC/B,SAAO,MAAM,MAAM,IAAI,SAAY;AACrC;AAEA,MAAM,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,MAAM,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,MAAM,EAAE,SAAS,KAAK,CAAC,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,MAAM,EAAE,SAAS,KAAK,CAAC,EAAE,OAAO,MAAM;AACtE,YAAM,QAAQ,OAAO;AAAA,QACnB,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,cAAc;AACjC,gBAAM,kBAAkB,UAAU,IAAI,CAAC,SAAS,KAAK,QAAQ,SAAS,CAAC;AACvE,gBAAM,wBAAwB,0BAA0B,GAAG,eAAe;AAC1E,iBAAO,CAAC,WAAW,uBAAuB,SAAS,CAAC;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,50 @@
|
|
|
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
|
+
var divineCoinGeckoPrices_exports = {};
|
|
20
|
+
__export(divineCoinGeckoPrices_exports, {
|
|
21
|
+
divineCoinGeckoPrices: () => divineCoinGeckoPrices
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(divineCoinGeckoPrices_exports);
|
|
24
|
+
var import_crypto_asset_payload_plugin = require("@xyo-network/crypto-asset-payload-plugin");
|
|
25
|
+
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
26
|
+
const schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
|
|
27
|
+
const valuationExists = (value) => {
|
|
28
|
+
return !!value[1];
|
|
29
|
+
};
|
|
30
|
+
const otherValueExists = (value) => {
|
|
31
|
+
const possiblyNumber = value[1];
|
|
32
|
+
return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
|
|
33
|
+
};
|
|
34
|
+
const divineCoinGeckoPrices = (payload) => {
|
|
35
|
+
const assets = payload && payload?.assets ? Object.fromEntries(
|
|
36
|
+
Object.entries(payload.assets).filter(valuationExists).map(([asset, valuation]) => {
|
|
37
|
+
const value = Object.fromEntries(
|
|
38
|
+
Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()])
|
|
39
|
+
);
|
|
40
|
+
return [asset, { value }];
|
|
41
|
+
})
|
|
42
|
+
) : {};
|
|
43
|
+
const timestamp = Date.now();
|
|
44
|
+
return new import_payload_builder.PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
|
|
45
|
+
};
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {
|
|
48
|
+
divineCoinGeckoPrices
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=divineCoinGeckoPrices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"sourcesContent":["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"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,yCAA6E;AAC7E,6BAA+B;AAE/B,MAAM,SAAS;AAEf,MAAM,kBAAkB,CAAC,UAAqH;AAC5I,SAAO,CAAC,CAAC,MAAM,CAAC;AAClB;AAEA,MAAM,mBAAmB,CAAC,UAAmE;AAC3F,QAAM,iBAAiB,MAAM,CAAC;AAC9B,SAAO,OAAO,mBAAmB,YAAY,CAAC,MAAM,cAAc;AACpE;AAEO,MAAM,wBAAwB,CAAC,YAAgF;AACpH,QAAM,SACJ,WAAW,SAAS,SAChB,OAAO;AAAA,IACL,OAAO,QAAQ,QAAQ,MAAM,EAC1B,OAAO,eAAe,EACtB,IAAI,CAAC,CAAC,OAAO,SAAS,MAAM;AAC3B,YAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,SAAS,EACrB,OAAO,gBAAgB,EACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,YAAY,GAAG,OAAO,SAAS,CAAC,CAAC;AAAA,MACvE;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACL,IACA,CAAC;AACP,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,sCAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { CryptoMarketAssetSchema } from "@xyo-network/crypto-asset-payload-plugin";
|
|
2
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
3
|
+
const schema = CryptoMarketAssetSchema;
|
|
4
|
+
const valuationExists = (value) => {
|
|
5
|
+
return !!value[1];
|
|
6
|
+
};
|
|
7
|
+
const otherValueExists = (value) => {
|
|
8
|
+
const possiblyNumber = value[1];
|
|
9
|
+
return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
|
|
10
|
+
};
|
|
11
|
+
const divineCoinGeckoPrices = (payload) => {
|
|
12
|
+
const assets = payload && payload?.assets ? Object.fromEntries(
|
|
13
|
+
Object.entries(payload.assets).filter(valuationExists).map(([asset, valuation]) => {
|
|
14
|
+
const value = Object.fromEntries(
|
|
15
|
+
Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()])
|
|
16
|
+
);
|
|
17
|
+
return [asset, { value }];
|
|
18
|
+
})
|
|
19
|
+
) : {};
|
|
20
|
+
const timestamp = Date.now();
|
|
21
|
+
return new PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
|
|
22
|
+
};
|
|
23
|
+
export {
|
|
24
|
+
divineCoinGeckoPrices
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=divineCoinGeckoPrices.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"sourcesContent":["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"],"mappings":"AACA,SAA8C,+BAA+B;AAC7E,SAAS,sBAAsB;AAE/B,MAAM,SAAS;AAEf,MAAM,kBAAkB,CAAC,UAAqH;AAC5I,SAAO,CAAC,CAAC,MAAM,CAAC;AAClB;AAEA,MAAM,mBAAmB,CAAC,UAAmE;AAC3F,QAAM,iBAAiB,MAAM,CAAC;AAC9B,SAAO,OAAO,mBAAmB,YAAY,CAAC,MAAM,cAAc;AACpE;AAEO,MAAM,wBAAwB,CAAC,YAAgF;AACpH,QAAM,SACJ,WAAW,SAAS,SAChB,OAAO;AAAA,IACL,OAAO,QAAQ,QAAQ,MAAM,EAC1B,OAAO,eAAe,EACtB,IAAI,CAAC,CAAC,OAAO,SAAS,MAAM;AAC3B,YAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,SAAS,EACrB,OAAO,gBAAgB,EACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,YAAY,GAAG,OAAO,SAAS,CAAC,CAAC;AAAA,MACvE;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACL,IACA,CAAC;AACP,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,eAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
|
|
2
|
+
import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
|
|
3
|
+
import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
|
|
4
|
+
export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
|
|
5
|
+
//# sourceMappingURL=divinePrices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAE5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAQ9F,eAAO,MAAM,YAAY,qBACL,4BAA4B,GAAG,SAAS,kBAC1C,0BAA0B,GAAG,SAAS,KACrD,wBAOF,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
|
|
2
|
+
import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
|
|
3
|
+
import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
|
|
4
|
+
export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
|
|
5
|
+
//# sourceMappingURL=divinePrices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAE5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAQ9F,eAAO,MAAM,YAAY,qBACL,4BAA4B,GAAG,SAAS,kBAC1C,0BAA0B,GAAG,SAAS,KACrD,wBAOF,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
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
|
+
var divinePrices_exports = {};
|
|
20
|
+
__export(divinePrices_exports, {
|
|
21
|
+
divinePrices: () => divinePrices
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(divinePrices_exports);
|
|
24
|
+
var import_exists = require("@xylabs/exists");
|
|
25
|
+
var import_crypto_asset_payload_plugin = require("@xyo-network/crypto-asset-payload-plugin");
|
|
26
|
+
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
27
|
+
var import_average = require("./average");
|
|
28
|
+
var import_divineCoinGeckoPrices = require("./divineCoinGeckoPrices");
|
|
29
|
+
var import_divineUniswapPrices = require("./divineUniswapPrices");
|
|
30
|
+
const schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
|
|
31
|
+
const divinePrices = (coinGeckoPayload, uniswapPayload) => {
|
|
32
|
+
const coinGeckoPrices = (0, import_divineCoinGeckoPrices.divineCoinGeckoPrices)(coinGeckoPayload);
|
|
33
|
+
const uniswapPrices = (0, import_divineUniswapPrices.divineUniswapPrices)(uniswapPayload);
|
|
34
|
+
const prices = [uniswapPayload, coinGeckoPayload].some(import_exists.exists);
|
|
35
|
+
const assets = prices ? (0, import_average.average)(coinGeckoPrices, uniswapPrices) : {};
|
|
36
|
+
const timestamp = Date.now();
|
|
37
|
+
return new import_payload_builder.PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
|
|
38
|
+
};
|
|
39
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
40
|
+
0 && (module.exports = {
|
|
41
|
+
divinePrices
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=divinePrices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/divinePrices.ts"],"sourcesContent":["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"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AAEvB,yCAAkE;AAClE,6BAA+B;AAG/B,qBAAwB;AACxB,mCAAsC;AACtC,iCAAoC;AAEpC,MAAM,SAAS;AAER,MAAM,eAAe,CAC1B,kBACA,mBAC6B;AAC7B,QAAM,sBAAkB,oDAAsB,gBAAgB;AAC9D,QAAM,oBAAgB,gDAAoB,cAAc;AACxD,QAAM,SAAS,CAAC,gBAAgB,gBAAgB,EAAE,KAAK,oBAAM;AAC7D,QAAM,SAAS,aAAS,wBAAQ,iBAAiB,aAAa,IAAI,CAAC;AACnE,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,sCAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { exists } from "@xylabs/exists";
|
|
2
|
+
import { CryptoMarketAssetSchema } from "@xyo-network/crypto-asset-payload-plugin";
|
|
3
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
4
|
+
import { average } from "./average";
|
|
5
|
+
import { divineCoinGeckoPrices } from "./divineCoinGeckoPrices";
|
|
6
|
+
import { divineUniswapPrices } from "./divineUniswapPrices";
|
|
7
|
+
const schema = CryptoMarketAssetSchema;
|
|
8
|
+
const divinePrices = (coinGeckoPayload, uniswapPayload) => {
|
|
9
|
+
const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload);
|
|
10
|
+
const uniswapPrices = divineUniswapPrices(uniswapPayload);
|
|
11
|
+
const prices = [uniswapPayload, coinGeckoPayload].some(exists);
|
|
12
|
+
const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {};
|
|
13
|
+
const timestamp = Date.now();
|
|
14
|
+
return new PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
divinePrices
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=divinePrices.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/divinePrices.ts"],"sourcesContent":["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"],"mappings":"AAAA,SAAS,cAAc;AAEvB,SAAmC,+BAA+B;AAClE,SAAS,sBAAsB;AAG/B,SAAS,eAAe;AACxB,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AAEpC,MAAM,SAAS;AAER,MAAM,eAAe,CAC1B,kBACA,mBAC6B;AAC7B,QAAM,kBAAkB,sBAAsB,gBAAgB;AAC9D,QAAM,gBAAgB,oBAAoB,cAAc;AACxD,QAAM,SAAS,CAAC,gBAAgB,gBAAgB,EAAE,KAAK,MAAM;AAC7D,QAAM,SAAS,SAAS,QAAQ,iBAAiB,aAAa,IAAI,CAAC;AACnE,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,eAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
|
|
2
|
+
import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
|
|
3
|
+
export declare const divineUniswapPrices: (uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
|
|
4
|
+
//# sourceMappingURL=divineUniswapPrices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAuCrI,eAAO,MAAM,mBAAmB,mBAAoB,0BAA0B,GAAG,SAAS,KAAG,wBAe5F,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
|
|
2
|
+
import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
|
|
3
|
+
export declare const divineUniswapPrices: (uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
|
|
4
|
+
//# sourceMappingURL=divineUniswapPrices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAuCrI,eAAO,MAAM,mBAAmB,mBAAoB,0BAA0B,GAAG,SAAS,KAAG,wBAe5F,CAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
var divineUniswapPrices_exports = {};
|
|
20
|
+
__export(divineUniswapPrices_exports, {
|
|
21
|
+
divineUniswapPrices: () => divineUniswapPrices
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(divineUniswapPrices_exports);
|
|
24
|
+
var import_exists = require("@xylabs/exists");
|
|
25
|
+
var import_crypto_asset_payload_plugin = require("@xyo-network/crypto-asset-payload-plugin");
|
|
26
|
+
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
27
|
+
const schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
|
|
28
|
+
const mapUniswapToken = (symbol) => {
|
|
29
|
+
if (symbol.toLowerCase() === "wbtc")
|
|
30
|
+
return "btc";
|
|
31
|
+
if (symbol.toLowerCase() === "weth")
|
|
32
|
+
return "eth";
|
|
33
|
+
if (symbol.toLowerCase() === "usdt")
|
|
34
|
+
return "usd";
|
|
35
|
+
return symbol.toLowerCase();
|
|
36
|
+
};
|
|
37
|
+
const pairsContainingToken = (uniswapPayload, token) => {
|
|
38
|
+
return uniswapPayload?.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(import_exists.exists);
|
|
39
|
+
};
|
|
40
|
+
const tokensFromPairs = (pairs) => {
|
|
41
|
+
return pairs.map((p) => p.tokens).flat().map((t) => t.symbol.toLowerCase());
|
|
42
|
+
};
|
|
43
|
+
const valuesFromTokenPairs = (tokensPairs, token) => {
|
|
44
|
+
return Object.fromEntries(
|
|
45
|
+
tokensPairs.map((pair) => {
|
|
46
|
+
const current = pair.filter((p) => p.symbol.toLowerCase() === token)?.[0];
|
|
47
|
+
const other = pair.filter((p) => p.symbol.toLowerCase() !== token)?.[0];
|
|
48
|
+
return [other.symbol.toLowerCase(), current.value.toString()];
|
|
49
|
+
}).map((x) => [mapUniswapToken(x[0]), x[1]])
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
const divineUniswapPrices = (uniswapPayload) => {
|
|
53
|
+
let assets = {};
|
|
54
|
+
if (uniswapPayload) {
|
|
55
|
+
const tokens = new Set(tokensFromPairs(uniswapPayload.pairs));
|
|
56
|
+
assets = Object.fromEntries(
|
|
57
|
+
[...tokens].map((token) => {
|
|
58
|
+
const pairs = pairsContainingToken(uniswapPayload, token);
|
|
59
|
+
const value = valuesFromTokenPairs(pairs, token);
|
|
60
|
+
const assetInfo = { value };
|
|
61
|
+
return [token, assetInfo];
|
|
62
|
+
})
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
const timestamp = Date.now();
|
|
66
|
+
return new import_payload_builder.PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
|
|
67
|
+
};
|
|
68
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
69
|
+
0 && (module.exports = {
|
|
70
|
+
divineUniswapPrices
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=divineUniswapPrices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/divineUniswapPrices.ts"],"sourcesContent":["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"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AACvB,yCAA0G;AAC1G,6BAA+B;AAG/B,MAAM,SAAS;AAEf,MAAM,kBAAkB,CAAC,WAAqC;AAG5D,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,SAAO,OAAO,YAAY;AAC5B;AAEA,MAAM,uBAAuB,CAAC,gBAA4C,UAAiB;AACzF,SAAO,gBAAgB,MACpB,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,CAAC,EAC7D,OAAO,oBAAM;AAClB;AAEA,MAAM,kBAAkB,CAAC,UAA+B;AACtD,SAAO,MACJ,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,KAAK,EACL,IAAI,CAAC,MAAM,EAAE,OAAO,YAAY,CAAU;AAC/C;AAEA,MAAM,uBAAuB,CAAC,aAAqC,UAA6B;AAC9F,SAAO,OAAO;AAAA,IACZ,YACG,IAAI,CAAC,SAAS;AACb,YAAM,UAAU,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,IAAI,CAAC;AACxE,YAAM,QAAQ,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,IAAI,CAAC;AACtE,aAAO,CAAC,MAAM,OAAO,YAAY,GAAG,QAAQ,MAAM,SAAS,CAAC;AAAA,IAC9D,CAAC,EACA,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,EAC7C;AACF;AAEO,MAAM,sBAAsB,CAAC,mBAAqF;AACvH,MAAI,SAAwD,CAAC;AAC7D,MAAI,gBAAgB;AAClB,UAAM,SAAqB,IAAI,IAAI,gBAAgB,eAAe,KAAK,CAAC;AACxE,aAAS,OAAO;AAAA,MACd,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,cAAM,QAAQ,qBAAqB,gBAAgB,KAAK;AACxD,cAAM,QAAoB,qBAAqB,OAAO,KAAK;AAC3D,cAAM,YAAuB,EAAE,MAAM;AACrC,eAAO,CAAC,OAAO,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,sCAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { exists } from "@xylabs/exists";
|
|
2
|
+
import { CryptoMarketAssetSchema } from "@xyo-network/crypto-asset-payload-plugin";
|
|
3
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
4
|
+
const schema = CryptoMarketAssetSchema;
|
|
5
|
+
const mapUniswapToken = (symbol) => {
|
|
6
|
+
if (symbol.toLowerCase() === "wbtc")
|
|
7
|
+
return "btc";
|
|
8
|
+
if (symbol.toLowerCase() === "weth")
|
|
9
|
+
return "eth";
|
|
10
|
+
if (symbol.toLowerCase() === "usdt")
|
|
11
|
+
return "usd";
|
|
12
|
+
return symbol.toLowerCase();
|
|
13
|
+
};
|
|
14
|
+
const pairsContainingToken = (uniswapPayload, token) => {
|
|
15
|
+
return uniswapPayload?.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(exists);
|
|
16
|
+
};
|
|
17
|
+
const tokensFromPairs = (pairs) => {
|
|
18
|
+
return pairs.map((p) => p.tokens).flat().map((t) => t.symbol.toLowerCase());
|
|
19
|
+
};
|
|
20
|
+
const valuesFromTokenPairs = (tokensPairs, token) => {
|
|
21
|
+
return Object.fromEntries(
|
|
22
|
+
tokensPairs.map((pair) => {
|
|
23
|
+
const current = pair.filter((p) => p.symbol.toLowerCase() === token)?.[0];
|
|
24
|
+
const other = pair.filter((p) => p.symbol.toLowerCase() !== token)?.[0];
|
|
25
|
+
return [other.symbol.toLowerCase(), current.value.toString()];
|
|
26
|
+
}).map((x) => [mapUniswapToken(x[0]), x[1]])
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
const divineUniswapPrices = (uniswapPayload) => {
|
|
30
|
+
let assets = {};
|
|
31
|
+
if (uniswapPayload) {
|
|
32
|
+
const tokens = new Set(tokensFromPairs(uniswapPayload.pairs));
|
|
33
|
+
assets = Object.fromEntries(
|
|
34
|
+
[...tokens].map((token) => {
|
|
35
|
+
const pairs = pairsContainingToken(uniswapPayload, token);
|
|
36
|
+
const value = valuesFromTokenPairs(pairs, token);
|
|
37
|
+
const assetInfo = { value };
|
|
38
|
+
return [token, assetInfo];
|
|
39
|
+
})
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
const timestamp = Date.now();
|
|
43
|
+
return new PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
|
|
44
|
+
};
|
|
45
|
+
export {
|
|
46
|
+
divineUniswapPrices
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=divineUniswapPrices.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/divineUniswapPrices.ts"],"sourcesContent":["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"],"mappings":"AAAA,SAAS,cAAc;AACvB,SAA8C,+BAA4D;AAC1G,SAAS,sBAAsB;AAG/B,MAAM,SAAS;AAEf,MAAM,kBAAkB,CAAC,WAAqC;AAG5D,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,SAAO,OAAO,YAAY;AAC5B;AAEA,MAAM,uBAAuB,CAAC,gBAA4C,UAAiB;AACzF,SAAO,gBAAgB,MACpB,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,CAAC,EAC7D,OAAO,MAAM;AAClB;AAEA,MAAM,kBAAkB,CAAC,UAA+B;AACtD,SAAO,MACJ,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,KAAK,EACL,IAAI,CAAC,MAAM,EAAE,OAAO,YAAY,CAAU;AAC/C;AAEA,MAAM,uBAAuB,CAAC,aAAqC,UAA6B;AAC9F,SAAO,OAAO;AAAA,IACZ,YACG,IAAI,CAAC,SAAS;AACb,YAAM,UAAU,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,IAAI,CAAC;AACxE,YAAM,QAAQ,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,IAAI,CAAC;AACtE,aAAO,CAAC,MAAM,OAAO,YAAY,GAAG,QAAQ,MAAM,SAAS,CAAC;AAAA,IAC9D,CAAC,EACA,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,EAC7C;AACF;AAEO,MAAM,sBAAsB,CAAC,mBAAqF;AACvH,MAAI,SAAwD,CAAC;AAC7D,MAAI,gBAAgB;AAClB,UAAM,SAAqB,IAAI,IAAI,gBAAgB,eAAe,KAAK,CAAC;AACxE,aAAS,OAAO;AAAA,MACd,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,cAAM,QAAQ,qBAAqB,gBAAgB,KAAK;AACxD,cAAM,QAAoB,qBAAqB,OAAO,KAAK;AAC3D,cAAM,YAAuB,EAAE,MAAM;AACrC,eAAO,CAAC,OAAO,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,eAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|