@xyo-network/crypto-asset-plugin 2.85.0 → 2.85.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.d.cts +2 -2
- package/dist/browser/Diviner.d.cts.map +1 -1
- package/dist/browser/Diviner.d.mts +2 -2
- package/dist/browser/Diviner.d.mts.map +1 -1
- package/dist/browser/Diviner.d.ts +2 -2
- package/dist/browser/Diviner.d.ts.map +1 -1
- package/dist/browser/Plugin.d.cts +0 -2
- package/dist/browser/Plugin.d.cts.map +1 -1
- package/dist/browser/Plugin.d.mts +0 -2
- package/dist/browser/Plugin.d.mts.map +1 -1
- package/dist/browser/Plugin.d.ts +0 -2
- package/dist/browser/Plugin.d.ts.map +1 -1
- package/dist/browser/index.cjs +20 -26
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +1 -3
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +1 -3
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +1 -3
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +19 -25
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/lib/average.d.cts.map +1 -1
- package/dist/browser/lib/average.d.mts.map +1 -1
- package/dist/browser/lib/average.d.ts.map +1 -1
- package/dist/browser/lib/divineUniswapPrices.d.cts.map +1 -1
- package/dist/browser/lib/divineUniswapPrices.d.mts.map +1 -1
- package/dist/browser/lib/divineUniswapPrices.d.ts.map +1 -1
- package/dist/node/Diviner.d.cts +2 -2
- package/dist/node/Diviner.d.cts.map +1 -1
- package/dist/node/Diviner.d.mts +2 -2
- package/dist/node/Diviner.d.mts.map +1 -1
- package/dist/node/Diviner.d.ts +2 -2
- package/dist/node/Diviner.d.ts.map +1 -1
- package/dist/node/Plugin.d.cts +0 -2
- package/dist/node/Plugin.d.cts.map +1 -1
- package/dist/node/Plugin.d.mts +0 -2
- package/dist/node/Plugin.d.mts.map +1 -1
- package/dist/node/Plugin.d.ts +0 -2
- package/dist/node/Plugin.d.ts.map +1 -1
- package/dist/node/index.cjs +20 -27
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -3
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +1 -3
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +1 -3
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +19 -26
- package/dist/node/index.js.map +1 -1
- package/dist/node/lib/average.d.cts.map +1 -1
- package/dist/node/lib/average.d.mts.map +1 -1
- package/dist/node/lib/average.d.ts.map +1 -1
- package/dist/node/lib/divineUniswapPrices.d.cts.map +1 -1
- package/dist/node/lib/divineUniswapPrices.d.mts.map +1 -1
- package/dist/node/lib/divineUniswapPrices.d.ts.map +1 -1
- package/package.json +13 -13
- package/src/Diviner.ts +2 -2
- package/src/index.ts +1 -7
- package/src/lib/average.ts +9 -16
- package/src/lib/divineCoinGeckoPrices.ts +1 -1
- package/src/lib/divineUniswapPrices.ts +6 -8
- package/src/test/sampleCoinGecko.ts +35 -35
- package/src/test/sampleUniswap.ts +21 -21
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractDiviner } from '@xyo-network/abstract
|
|
2
|
-
import { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner';
|
|
1
|
+
import { AbstractDiviner } from '@xyo-network/diviner-abstract';
|
|
2
|
+
import { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner-model';
|
|
3
3
|
import { AnyConfigSchema, Module } from '@xyo-network/module-model';
|
|
4
4
|
import { Payload } from '@xyo-network/payload-model';
|
|
5
5
|
import { CryptoMarketAssetDivinerConfigSchema } from './Schema';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,OAAO,EAAE,oCAAoC,EAAE,MAAM,UAAU,CAAA;AAE/D,MAAM,MAAM,8BAA8B,GAAG,aAAa,CAAC;IAAE,MAAM,EAAE,oCAAoC,CAAA;CAAE,CAAC,CAAA;AAC5G,MAAM,MAAM,8BAA8B,GAAG,aAAa,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC,CAAA;AAE3G,qBAAa,wBAAwB,CAAC,OAAO,SAAS,8BAA8B,GAAG,8BAA8B,CACnH,SAAQ,eAAe,CAAC,OAAO,CAC/B,YAAW,aAAa,EAAE,MAAM;IAEhC,OAAgB,aAAa,8CAAyC;IACtE,OAAgB,YAAY,6BAA0B;cAE7B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAMjF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractDiviner } from '@xyo-network/abstract
|
|
2
|
-
import { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner';
|
|
1
|
+
import { AbstractDiviner } from '@xyo-network/diviner-abstract';
|
|
2
|
+
import { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner-model';
|
|
3
3
|
import { AnyConfigSchema, Module } from '@xyo-network/module-model';
|
|
4
4
|
import { Payload } from '@xyo-network/payload-model';
|
|
5
5
|
import { CryptoMarketAssetDivinerConfigSchema } from './Schema';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,OAAO,EAAE,oCAAoC,EAAE,MAAM,UAAU,CAAA;AAE/D,MAAM,MAAM,8BAA8B,GAAG,aAAa,CAAC;IAAE,MAAM,EAAE,oCAAoC,CAAA;CAAE,CAAC,CAAA;AAC5G,MAAM,MAAM,8BAA8B,GAAG,aAAa,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC,CAAA;AAE3G,qBAAa,wBAAwB,CAAC,OAAO,SAAS,8BAA8B,GAAG,8BAA8B,CACnH,SAAQ,eAAe,CAAC,OAAO,CAC/B,YAAW,aAAa,EAAE,MAAM;IAEhC,OAAgB,aAAa,8CAAyC;IACtE,OAAgB,YAAY,6BAA0B;cAE7B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAMjF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractDiviner } from '@xyo-network/abstract
|
|
2
|
-
import { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner';
|
|
1
|
+
import { AbstractDiviner } from '@xyo-network/diviner-abstract';
|
|
2
|
+
import { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner-model';
|
|
3
3
|
import { AnyConfigSchema, Module } from '@xyo-network/module-model';
|
|
4
4
|
import { Payload } from '@xyo-network/payload-model';
|
|
5
5
|
import { CryptoMarketAssetDivinerConfigSchema } from './Schema';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,OAAO,EAAE,oCAAoC,EAAE,MAAM,UAAU,CAAA;AAE/D,MAAM,MAAM,8BAA8B,GAAG,aAAa,CAAC;IAAE,MAAM,EAAE,oCAAoC,CAAA;CAAE,CAAC,CAAA;AAC5G,MAAM,MAAM,8BAA8B,GAAG,aAAa,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC,CAAA;AAE3G,qBAAa,wBAAwB,CAAC,OAAO,SAAS,8BAA8B,GAAG,8BAA8B,CACnH,SAAQ,eAAe,CAAC,OAAO,CAC/B,YAAW,aAAa,EAAE,MAAM;IAEhC,OAAgB,aAAa,8CAAyC;IACtE,OAAgB,YAAY,6BAA0B;cAE7B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAMjF"}
|
|
@@ -2,7 +2,6 @@ import { CryptoMarketAssetDiviner } from './Diviner';
|
|
|
2
2
|
export declare const CryptoMarketAssetPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetDivinerPlugin<CryptoMarketAssetDiviner<import("@xyo-network/object").BaseParamsFields & {
|
|
3
3
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
4
4
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
5
|
-
accountPath?: string | undefined;
|
|
6
5
|
readonly archivist?: string | undefined;
|
|
7
6
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
8
7
|
readonly name?: string | undefined;
|
|
@@ -19,7 +18,6 @@ export declare const CryptoMarketAssetPlugin: () => import("@xyo-network/payload
|
|
|
19
18
|
readonly storeQueries?: boolean | undefined;
|
|
20
19
|
readonly timestamp?: boolean | undefined;
|
|
21
20
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
22
|
-
accountPath?: string | undefined;
|
|
23
21
|
readonly archivist?: string | undefined;
|
|
24
22
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
25
23
|
readonly name?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAEpD,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAEpD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAQjC,CAAA"}
|
|
@@ -2,7 +2,6 @@ import { CryptoMarketAssetDiviner } from './Diviner';
|
|
|
2
2
|
export declare const CryptoMarketAssetPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetDivinerPlugin<CryptoMarketAssetDiviner<import("@xyo-network/object").BaseParamsFields & {
|
|
3
3
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
4
4
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
5
|
-
accountPath?: string | undefined;
|
|
6
5
|
readonly archivist?: string | undefined;
|
|
7
6
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
8
7
|
readonly name?: string | undefined;
|
|
@@ -19,7 +18,6 @@ export declare const CryptoMarketAssetPlugin: () => import("@xyo-network/payload
|
|
|
19
18
|
readonly storeQueries?: boolean | undefined;
|
|
20
19
|
readonly timestamp?: boolean | undefined;
|
|
21
20
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
22
|
-
accountPath?: string | undefined;
|
|
23
21
|
readonly archivist?: string | undefined;
|
|
24
22
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
25
23
|
readonly name?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAEpD,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAEpD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAQjC,CAAA"}
|
package/dist/browser/Plugin.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { CryptoMarketAssetDiviner } from './Diviner';
|
|
|
2
2
|
export declare const CryptoMarketAssetPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetDivinerPlugin<CryptoMarketAssetDiviner<import("@xyo-network/object").BaseParamsFields & {
|
|
3
3
|
account?: import("@xyo-network/account-model").AccountInstance | "random" | undefined;
|
|
4
4
|
config: import("@xyo-network/payload-model").SchemaFields & object & Omit<{
|
|
5
|
-
accountPath?: string | undefined;
|
|
6
5
|
readonly archivist?: string | undefined;
|
|
7
6
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
8
7
|
readonly name?: string | undefined;
|
|
@@ -19,7 +18,6 @@ export declare const CryptoMarketAssetPlugin: () => import("@xyo-network/payload
|
|
|
19
18
|
readonly storeQueries?: boolean | undefined;
|
|
20
19
|
readonly timestamp?: boolean | undefined;
|
|
21
20
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/payload-model").SchemaFields & object & {
|
|
22
|
-
accountPath?: string | undefined;
|
|
23
21
|
readonly archivist?: string | undefined;
|
|
24
22
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
25
23
|
readonly name?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAEpD,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAEpD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAQjC,CAAA"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -24,19 +24,14 @@ __export(src_exports, {
|
|
|
24
24
|
CryptoMarketAssetDivinerConfigSchema: () => CryptoMarketAssetDivinerConfigSchema,
|
|
25
25
|
CryptoMarketAssetDivinerQuerySchema: () => CryptoMarketAssetDivinerQuerySchema,
|
|
26
26
|
CryptoMarketAssetPlugin: () => CryptoMarketAssetPlugin,
|
|
27
|
-
default: () =>
|
|
27
|
+
default: () => CryptoMarketAssetPlugin
|
|
28
28
|
});
|
|
29
29
|
module.exports = __toCommonJS(src_exports);
|
|
30
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
31
|
// src/Diviner.ts
|
|
37
|
-
var import_abstract_diviner = require("@xyo-network/abstract-diviner");
|
|
38
32
|
var import_coingecko_crypto_market_payload_plugin = require("@xyo-network/coingecko-crypto-market-payload-plugin");
|
|
39
33
|
var import_crypto_asset_payload_plugin4 = require("@xyo-network/crypto-asset-payload-plugin");
|
|
34
|
+
var import_diviner_abstract = require("@xyo-network/diviner-abstract");
|
|
40
35
|
var import_uniswap_crypto_market_payload_plugin = require("@xyo-network/uniswap-crypto-market-payload-plugin");
|
|
41
36
|
|
|
42
37
|
// src/lib/divinePrices.ts
|
|
@@ -52,24 +47,22 @@ var isNumber = (val) => {
|
|
|
52
47
|
var parseStringifiedNumber = (value) => {
|
|
53
48
|
if (!value)
|
|
54
49
|
return void 0;
|
|
55
|
-
const parsed = parseFloat(value);
|
|
56
|
-
return isNaN(parsed) ? void 0 : parsed;
|
|
50
|
+
const parsed = Number.parseFloat(value);
|
|
51
|
+
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
57
52
|
};
|
|
58
53
|
var averageStringifiedNumbers = (...prices) => {
|
|
59
54
|
const numbers = prices.map(parseStringifiedNumber).filter(isNumber);
|
|
60
|
-
return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
|
|
55
|
+
return numbers.length > 0 ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
|
|
61
56
|
};
|
|
62
57
|
var average = (...input) => {
|
|
63
58
|
const payloads = input.filter(import_exists.exists);
|
|
64
|
-
const tokens = new Set(payloads.
|
|
59
|
+
const tokens = new Set(payloads.flatMap((payload) => Object.keys(payload.assets).map((t) => t)));
|
|
65
60
|
const valuations = new Set(
|
|
66
|
-
[...tokens].
|
|
61
|
+
[...tokens].flatMap((asset) => {
|
|
67
62
|
const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(import_exists.exists);
|
|
68
|
-
const valueBasis = new Set(
|
|
69
|
-
assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(import_exists.exists)
|
|
70
|
-
);
|
|
63
|
+
const valueBasis = new Set(assetInfo.flatMap((v) => Object.keys(v.value)).filter(import_exists.exists));
|
|
71
64
|
return [...valueBasis];
|
|
72
|
-
})
|
|
65
|
+
})
|
|
73
66
|
);
|
|
74
67
|
const assets = Object.fromEntries(
|
|
75
68
|
[...tokens].map((token) => {
|
|
@@ -96,7 +89,7 @@ var valuationExists = (value) => {
|
|
|
96
89
|
};
|
|
97
90
|
var otherValueExists = (value) => {
|
|
98
91
|
const possiblyNumber = value[1];
|
|
99
|
-
return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
|
|
92
|
+
return typeof possiblyNumber === "number" && !Number.isNaN(possiblyNumber);
|
|
100
93
|
};
|
|
101
94
|
var divineCoinGeckoPrices = async (payload) => {
|
|
102
95
|
const assets = payload && payload?.assets ? Object.fromEntries(
|
|
@@ -112,6 +105,7 @@ var divineCoinGeckoPrices = async (payload) => {
|
|
|
112
105
|
};
|
|
113
106
|
|
|
114
107
|
// src/lib/divineUniswapPrices.ts
|
|
108
|
+
var import_assert = require("@xylabs/assert");
|
|
115
109
|
var import_exists2 = require("@xylabs/exists");
|
|
116
110
|
var import_crypto_asset_payload_plugin2 = require("@xyo-network/crypto-asset-payload-plugin");
|
|
117
111
|
var import_payload_builder2 = require("@xyo-network/payload-builder");
|
|
@@ -129,15 +123,15 @@ var pairsContainingToken = (uniswapPayload, token) => {
|
|
|
129
123
|
return uniswapPayload?.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(import_exists2.exists);
|
|
130
124
|
};
|
|
131
125
|
var tokensFromPairs = (pairs) => {
|
|
132
|
-
return pairs.
|
|
126
|
+
return pairs.flatMap((p) => p.tokens).map((t) => t.symbol.toLowerCase());
|
|
133
127
|
};
|
|
134
128
|
var valuesFromTokenPairs = (tokensPairs, token) => {
|
|
135
129
|
return Object.fromEntries(
|
|
136
130
|
tokensPairs.map((pair) => {
|
|
137
|
-
const current = pair.
|
|
138
|
-
const other = pair.
|
|
139
|
-
return [other
|
|
140
|
-
}).map((x) => [mapUniswapToken(x[0]), x[1]])
|
|
131
|
+
const current = pair.find((p) => p.symbol.toLowerCase() === token);
|
|
132
|
+
const other = pair.find((p) => p.symbol.toLowerCase() !== token);
|
|
133
|
+
return [other?.symbol.toLowerCase(), current?.value.toString()];
|
|
134
|
+
}).map((x) => [mapUniswapToken((0, import_assert.assertEx)(x[0], "Undefined Token")), x[1]])
|
|
141
135
|
);
|
|
142
136
|
};
|
|
143
137
|
var divineUniswapPrices = async (uniswapPayload) => {
|
|
@@ -173,7 +167,7 @@ var CryptoMarketAssetDivinerQuerySchema = "network.xyo.crypto.asset.diviner.quer
|
|
|
173
167
|
var CryptoMarketAssetDivinerConfigSchema = "network.xyo.crypto.asset.diviner.config";
|
|
174
168
|
|
|
175
169
|
// src/Diviner.ts
|
|
176
|
-
var CryptoMarketAssetDiviner = class extends
|
|
170
|
+
var CryptoMarketAssetDiviner = class extends import_diviner_abstract.AbstractDiviner {
|
|
177
171
|
static configSchemas = [CryptoMarketAssetDivinerConfigSchema];
|
|
178
172
|
static targetSchema = import_crypto_asset_payload_plugin4.CryptoMarketAssetSchema;
|
|
179
173
|
async divineHandler(payloads) {
|
|
@@ -185,6 +179,9 @@ var CryptoMarketAssetDiviner = class extends import_abstract_diviner.AbstractDiv
|
|
|
185
179
|
};
|
|
186
180
|
|
|
187
181
|
// src/Plugin.ts
|
|
182
|
+
var import_crypto_asset_payload_plugin5 = require("@xyo-network/crypto-asset-payload-plugin");
|
|
183
|
+
var import_payload_model = require("@xyo-network/payload-model");
|
|
184
|
+
var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
|
|
188
185
|
var CryptoMarketAssetPlugin = () => (0, import_payloadset_plugin.createPayloadSetDivinerPlugin)(
|
|
189
186
|
{ required: { [import_crypto_asset_payload_plugin5.CryptoMarketAssetSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
|
|
190
187
|
{
|
|
@@ -193,7 +190,4 @@ var CryptoMarketAssetPlugin = () => (0, import_payloadset_plugin.createPayloadSe
|
|
|
193
190
|
}
|
|
194
191
|
}
|
|
195
192
|
);
|
|
196
|
-
|
|
197
|
-
// src/index.ts
|
|
198
|
-
var src_default = CryptoMarketAssetPlugin;
|
|
199
193
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +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-model'\nimport { Payload } from '@xyo-network/payload-model'\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 async divineHandler(payloads?: Payload[]): Promise<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 = await 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 = async (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): Promise<CryptoMarketAssetPayload> => {\n const coinGeckoPrices = await divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = await divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return await 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 = async (payload: CoingeckoCryptoMarketPayload | undefined): Promise<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 await 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 = async (uniswapPayload: UniswapCryptoMarketPayload | undefined): Promise<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 await 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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/lib/divinePrices.ts","../../src/lib/average.ts","../../src/lib/divineCoinGeckoPrices.ts","../../src/lib/divineUniswapPrices.ts","../../src/Schema.ts","../../src/Plugin.ts"],"sourcesContent":["export * from './Diviner'\nexport { CryptoMarketAssetPlugin, CryptoMarketAssetPlugin as default } from './Plugin'\nexport * from './Schema'\n","import { CoingeckoCryptoMarketPayload, CoingeckoCryptoMarketSchema } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner-model'\nimport { AnyConfigSchema, Module } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\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 async divineHandler(payloads?: Payload[]): Promise<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 = await 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 = async (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): Promise<CryptoMarketAssetPayload> => {\n const coinGeckoPrices = await divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = await divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return await 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 = Number.parseFloat(value)\n return Number.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 > 0 ? 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.flatMap((payload) => Object.keys(payload.assets).map<Token>((t) => t as Token)))\n // Get all the valuations used\n const valuations = new Set<Token | Currency>(\n [...tokens].flatMap((asset) => {\n const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists)\n const valueBasis = new Set<Currency | Token>(assetInfo.flatMap((v) => Object.keys(v.value) as unknown as Currency | Token).filter(exists))\n return [...valueBasis]\n }),\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' && !Number.isNaN(possiblyNumber)\n}\n\nexport const divineCoinGeckoPrices = async (payload: CoingeckoCryptoMarketPayload | undefined): Promise<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 await new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","import { assertEx } from '@xylabs/assert'\nimport { 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.flatMap((p) => p.tokens).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.find((p) => p.symbol.toLowerCase() === token)\n const other = pair.find((p) => p.symbol.toLowerCase() !== token)\n return [other?.symbol.toLowerCase(), current?.value.toString()]\n })\n .map((x) => [mapUniswapToken(assertEx(x[0], 'Undefined Token')), x[1]]),\n )\n}\n\nexport const divineUniswapPrices = async (uniswapPayload: UniswapCryptoMarketPayload | undefined): Promise<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 await 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 { 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"],"mappings":"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","names":["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","import_crypto_asset_payload_plugin"]}
|
package/dist/browser/index.d.cts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { CryptoMarketAssetPlugin } from './Plugin';
|
|
2
1
|
export * from './Diviner';
|
|
2
|
+
export { CryptoMarketAssetPlugin, CryptoMarketAssetPlugin as default } from './Plugin';
|
|
3
3
|
export * from './Schema';
|
|
4
|
-
export { CryptoMarketAssetPlugin };
|
|
5
|
-
export default CryptoMarketAssetPlugin;
|
|
6
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,IAAI,OAAO,EAAE,MAAM,UAAU,CAAA;AACtF,cAAc,UAAU,CAAA"}
|
package/dist/browser/index.d.mts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { CryptoMarketAssetPlugin } from './Plugin';
|
|
2
1
|
export * from './Diviner';
|
|
2
|
+
export { CryptoMarketAssetPlugin, CryptoMarketAssetPlugin as default } from './Plugin';
|
|
3
3
|
export * from './Schema';
|
|
4
|
-
export { CryptoMarketAssetPlugin };
|
|
5
|
-
export default CryptoMarketAssetPlugin;
|
|
6
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,IAAI,OAAO,EAAE,MAAM,UAAU,CAAA;AACtF,cAAc,UAAU,CAAA"}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { CryptoMarketAssetPlugin } from './Plugin';
|
|
2
1
|
export * from './Diviner';
|
|
2
|
+
export { CryptoMarketAssetPlugin, CryptoMarketAssetPlugin as default } from './Plugin';
|
|
3
3
|
export * from './Schema';
|
|
4
|
-
export { CryptoMarketAssetPlugin };
|
|
5
|
-
export default CryptoMarketAssetPlugin;
|
|
6
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,IAAI,OAAO,EAAE,MAAM,UAAU,CAAA;AACtF,cAAc,UAAU,CAAA"}
|
package/dist/browser/index.js
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
// src/Plugin.ts
|
|
2
|
-
import { CryptoMarketAssetSchema as CryptoMarketAssetSchema5 } from "@xyo-network/crypto-asset-payload-plugin";
|
|
3
|
-
import { PayloadSetSchema } from "@xyo-network/payload-model";
|
|
4
|
-
import { createPayloadSetDivinerPlugin } from "@xyo-network/payloadset-plugin";
|
|
5
|
-
|
|
6
1
|
// src/Diviner.ts
|
|
7
|
-
import { AbstractDiviner } from "@xyo-network/abstract-diviner";
|
|
8
2
|
import { CoingeckoCryptoMarketSchema } from "@xyo-network/coingecko-crypto-market-payload-plugin";
|
|
9
3
|
import { CryptoMarketAssetSchema as CryptoMarketAssetSchema4 } from "@xyo-network/crypto-asset-payload-plugin";
|
|
4
|
+
import { AbstractDiviner } from "@xyo-network/diviner-abstract";
|
|
10
5
|
import { UniswapCryptoMarketSchema } from "@xyo-network/uniswap-crypto-market-payload-plugin";
|
|
11
6
|
|
|
12
7
|
// src/lib/divinePrices.ts
|
|
@@ -22,24 +17,22 @@ var isNumber = (val) => {
|
|
|
22
17
|
var parseStringifiedNumber = (value) => {
|
|
23
18
|
if (!value)
|
|
24
19
|
return void 0;
|
|
25
|
-
const parsed = parseFloat(value);
|
|
26
|
-
return isNaN(parsed) ? void 0 : parsed;
|
|
20
|
+
const parsed = Number.parseFloat(value);
|
|
21
|
+
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
27
22
|
};
|
|
28
23
|
var averageStringifiedNumbers = (...prices) => {
|
|
29
24
|
const numbers = prices.map(parseStringifiedNumber).filter(isNumber);
|
|
30
|
-
return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
|
|
25
|
+
return numbers.length > 0 ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
|
|
31
26
|
};
|
|
32
27
|
var average = (...input) => {
|
|
33
28
|
const payloads = input.filter(exists);
|
|
34
|
-
const tokens = new Set(payloads.
|
|
29
|
+
const tokens = new Set(payloads.flatMap((payload) => Object.keys(payload.assets).map((t) => t)));
|
|
35
30
|
const valuations = new Set(
|
|
36
|
-
[...tokens].
|
|
31
|
+
[...tokens].flatMap((asset) => {
|
|
37
32
|
const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists);
|
|
38
|
-
const valueBasis = new Set(
|
|
39
|
-
assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(exists)
|
|
40
|
-
);
|
|
33
|
+
const valueBasis = new Set(assetInfo.flatMap((v) => Object.keys(v.value)).filter(exists));
|
|
41
34
|
return [...valueBasis];
|
|
42
|
-
})
|
|
35
|
+
})
|
|
43
36
|
);
|
|
44
37
|
const assets = Object.fromEntries(
|
|
45
38
|
[...tokens].map((token) => {
|
|
@@ -66,7 +59,7 @@ var valuationExists = (value) => {
|
|
|
66
59
|
};
|
|
67
60
|
var otherValueExists = (value) => {
|
|
68
61
|
const possiblyNumber = value[1];
|
|
69
|
-
return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
|
|
62
|
+
return typeof possiblyNumber === "number" && !Number.isNaN(possiblyNumber);
|
|
70
63
|
};
|
|
71
64
|
var divineCoinGeckoPrices = async (payload) => {
|
|
72
65
|
const assets = payload && payload?.assets ? Object.fromEntries(
|
|
@@ -82,6 +75,7 @@ var divineCoinGeckoPrices = async (payload) => {
|
|
|
82
75
|
};
|
|
83
76
|
|
|
84
77
|
// src/lib/divineUniswapPrices.ts
|
|
78
|
+
import { assertEx } from "@xylabs/assert";
|
|
85
79
|
import { exists as exists2 } from "@xylabs/exists";
|
|
86
80
|
import { CryptoMarketAssetSchema as CryptoMarketAssetSchema2 } from "@xyo-network/crypto-asset-payload-plugin";
|
|
87
81
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
@@ -99,15 +93,15 @@ var pairsContainingToken = (uniswapPayload, token) => {
|
|
|
99
93
|
return uniswapPayload?.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(exists2);
|
|
100
94
|
};
|
|
101
95
|
var tokensFromPairs = (pairs) => {
|
|
102
|
-
return pairs.
|
|
96
|
+
return pairs.flatMap((p) => p.tokens).map((t) => t.symbol.toLowerCase());
|
|
103
97
|
};
|
|
104
98
|
var valuesFromTokenPairs = (tokensPairs, token) => {
|
|
105
99
|
return Object.fromEntries(
|
|
106
100
|
tokensPairs.map((pair) => {
|
|
107
|
-
const current = pair.
|
|
108
|
-
const other = pair.
|
|
109
|
-
return [other
|
|
110
|
-
}).map((x) => [mapUniswapToken(x[0]), x[1]])
|
|
101
|
+
const current = pair.find((p) => p.symbol.toLowerCase() === token);
|
|
102
|
+
const other = pair.find((p) => p.symbol.toLowerCase() !== token);
|
|
103
|
+
return [other?.symbol.toLowerCase(), current?.value.toString()];
|
|
104
|
+
}).map((x) => [mapUniswapToken(assertEx(x[0], "Undefined Token")), x[1]])
|
|
111
105
|
);
|
|
112
106
|
};
|
|
113
107
|
var divineUniswapPrices = async (uniswapPayload) => {
|
|
@@ -155,6 +149,9 @@ var CryptoMarketAssetDiviner = class extends AbstractDiviner {
|
|
|
155
149
|
};
|
|
156
150
|
|
|
157
151
|
// src/Plugin.ts
|
|
152
|
+
import { CryptoMarketAssetSchema as CryptoMarketAssetSchema5 } from "@xyo-network/crypto-asset-payload-plugin";
|
|
153
|
+
import { PayloadSetSchema } from "@xyo-network/payload-model";
|
|
154
|
+
import { createPayloadSetDivinerPlugin } from "@xyo-network/payloadset-plugin";
|
|
158
155
|
var CryptoMarketAssetPlugin = () => createPayloadSetDivinerPlugin(
|
|
159
156
|
{ required: { [CryptoMarketAssetSchema5]: 1 }, schema: PayloadSetSchema },
|
|
160
157
|
{
|
|
@@ -163,14 +160,11 @@ var CryptoMarketAssetPlugin = () => createPayloadSetDivinerPlugin(
|
|
|
163
160
|
}
|
|
164
161
|
}
|
|
165
162
|
);
|
|
166
|
-
|
|
167
|
-
// src/index.ts
|
|
168
|
-
var src_default = CryptoMarketAssetPlugin;
|
|
169
163
|
export {
|
|
170
164
|
CryptoMarketAssetDiviner,
|
|
171
165
|
CryptoMarketAssetDivinerConfigSchema,
|
|
172
166
|
CryptoMarketAssetDivinerQuerySchema,
|
|
173
167
|
CryptoMarketAssetPlugin,
|
|
174
|
-
|
|
168
|
+
CryptoMarketAssetPlugin as default
|
|
175
169
|
};
|
|
176
170
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +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-model'\nimport { Payload } from '@xyo-network/payload-model'\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 async divineHandler(payloads?: Payload[]): Promise<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 = await 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 = async (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): Promise<CryptoMarketAssetPayload> => {\n const coinGeckoPrices = await divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = await divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return await 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 = async (payload: CoingeckoCryptoMarketPayload | undefined): Promise<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 await 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 = async (uniswapPayload: UniswapCryptoMarketPayload | undefined): Promise<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 await 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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Diviner.ts","../../src/lib/divinePrices.ts","../../src/lib/average.ts","../../src/lib/divineCoinGeckoPrices.ts","../../src/lib/divineUniswapPrices.ts","../../src/Schema.ts","../../src/Plugin.ts"],"sourcesContent":["import { CoingeckoCryptoMarketPayload, CoingeckoCryptoMarketSchema } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner-model'\nimport { AnyConfigSchema, Module } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\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 async divineHandler(payloads?: Payload[]): Promise<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 = await 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 = async (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): Promise<CryptoMarketAssetPayload> => {\n const coinGeckoPrices = await divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = await divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return await 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 = Number.parseFloat(value)\n return Number.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 > 0 ? 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.flatMap((payload) => Object.keys(payload.assets).map<Token>((t) => t as Token)))\n // Get all the valuations used\n const valuations = new Set<Token | Currency>(\n [...tokens].flatMap((asset) => {\n const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists)\n const valueBasis = new Set<Currency | Token>(assetInfo.flatMap((v) => Object.keys(v.value) as unknown as Currency | Token).filter(exists))\n return [...valueBasis]\n }),\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' && !Number.isNaN(possiblyNumber)\n}\n\nexport const divineCoinGeckoPrices = async (payload: CoingeckoCryptoMarketPayload | undefined): Promise<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 await new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","import { assertEx } from '@xylabs/assert'\nimport { 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.flatMap((p) => p.tokens).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.find((p) => p.symbol.toLowerCase() === token)\n const other = pair.find((p) => p.symbol.toLowerCase() !== token)\n return [other?.symbol.toLowerCase(), current?.value.toString()]\n })\n .map((x) => [mapUniswapToken(assertEx(x[0], 'Undefined Token')), x[1]]),\n )\n}\n\nexport const divineUniswapPrices = async (uniswapPayload: UniswapCryptoMarketPayload | undefined): Promise<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 await 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 { 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"],"mappings":"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","names":["CryptoMarketAssetSchema","exists","CryptoMarketAssetSchema","PayloadBuilder","exists","CryptoMarketAssetSchema","PayloadBuilder","schema","schema","CryptoMarketAssetSchema","exists","PayloadBuilder","CryptoMarketAssetSchema","CryptoMarketAssetSchema","CryptoMarketAssetSchema"]}
|
|
@@ -1 +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,
|
|
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,CA2BpG,CAAA"}
|
|
@@ -1 +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,
|
|
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,CA2BpG,CAAA"}
|
|
@@ -1 +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,
|
|
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,CA2BpG,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAoCrI,eAAO,MAAM,mBAAmB,mBAA0B,0BAA0B,GAAG,SAAS,KAAG,QAAQ,wBAAwB,CAelI,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAoCrI,eAAO,MAAM,mBAAmB,mBAA0B,0BAA0B,GAAG,SAAS,KAAG,QAAQ,wBAAwB,CAelI,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAoCrI,eAAO,MAAM,mBAAmB,mBAA0B,0BAA0B,GAAG,SAAS,KAAG,QAAQ,wBAAwB,CAelI,CAAA"}
|
package/dist/node/Diviner.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractDiviner } from '@xyo-network/abstract
|
|
2
|
-
import { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner';
|
|
1
|
+
import { AbstractDiviner } from '@xyo-network/diviner-abstract';
|
|
2
|
+
import { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner-model';
|
|
3
3
|
import { AnyConfigSchema, Module } from '@xyo-network/module-model';
|
|
4
4
|
import { Payload } from '@xyo-network/payload-model';
|
|
5
5
|
import { CryptoMarketAssetDivinerConfigSchema } from './Schema';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIpD,OAAO,EAAE,oCAAoC,EAAE,MAAM,UAAU,CAAA;AAE/D,MAAM,MAAM,8BAA8B,GAAG,aAAa,CAAC;IAAE,MAAM,EAAE,oCAAoC,CAAA;CAAE,CAAC,CAAA;AAC5G,MAAM,MAAM,8BAA8B,GAAG,aAAa,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC,CAAA;AAE3G,qBAAa,wBAAwB,CAAC,OAAO,SAAS,8BAA8B,GAAG,8BAA8B,CACnH,SAAQ,eAAe,CAAC,OAAO,CAC/B,YAAW,aAAa,EAAE,MAAM;IAEhC,OAAgB,aAAa,8CAAyC;IACtE,OAAgB,YAAY,6BAA0B;cAE7B,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAMjF"}
|