@xyo-network/payloadset-plugins 8.0.1 → 8.0.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/modules/crypto-asset/Diviner.d.ts.map +1 -1
- package/dist/browser/modules/crypto-asset/lib/divinePrices.d.ts +1 -1
- package/dist/browser/modules/crypto-asset/lib/divinePrices.d.ts.map +1 -1
- package/dist/browser/modules/crypto-asset/lib/divineUniswapPrices.d.ts +6 -1
- package/dist/browser/modules/crypto-asset/lib/divineUniswapPrices.d.ts.map +1 -1
- package/dist/browser/modules/crypto-asset/lib/uniswapQuotes.d.ts +11 -0
- package/dist/browser/modules/crypto-asset/lib/uniswapQuotes.d.ts.map +1 -0
- package/dist/browser/modules/crypto-asset/lib/usdPricesFromQuotes.d.ts +8 -0
- package/dist/browser/modules/crypto-asset/lib/usdPricesFromQuotes.d.ts.map +1 -0
- package/dist/browser/modules/crypto-asset/test/buildUniswapPayload.d.ts +5 -0
- package/dist/browser/modules/crypto-asset/test/buildUniswapPayload.d.ts.map +1 -0
- package/dist/browser/modules/crypto-asset/test/index.d.ts +4 -0
- package/dist/browser/modules/crypto-asset/test/index.d.ts.map +1 -1
- package/dist/browser/modules/crypto-asset/test/sampleCryptoAssetReference.d.ts +8 -0
- package/dist/browser/modules/crypto-asset/test/sampleCryptoAssetReference.d.ts.map +1 -0
- package/dist/browser/modules/crypto-asset/test/sampleUniswapV3.d.ts +3 -0
- package/dist/browser/modules/crypto-asset/test/sampleUniswapV3.d.ts.map +1 -0
- package/dist/browser/modules/crypto-asset/test/sampleUniswapV4.d.ts +3 -0
- package/dist/browser/modules/crypto-asset/test/sampleUniswapV4.d.ts.map +1 -0
- package/dist/browser/modules/uniswap-v3-crypto-market/lib/UniswapV3CryptoAssetPools.d.ts +7 -0
- package/dist/browser/modules/uniswap-v3-crypto-market/lib/UniswapV3CryptoAssetPools.d.ts.map +1 -0
- package/dist/browser/modules/uniswap-v3-crypto-market/lib/index.d.ts +1 -0
- package/dist/browser/modules/uniswap-v3-crypto-market/lib/index.d.ts.map +1 -1
- package/dist/browser/modules/uniswap-v4-crypto-market/lib/UniswapV4DefaultPools.d.ts +4 -0
- package/dist/browser/modules/uniswap-v4-crypto-market/lib/UniswapV4DefaultPools.d.ts.map +1 -1
- package/dist/browser/modules/uniswap-v4-crypto-market/lib/getExchangeRate.d.ts +2 -1
- package/dist/browser/modules/uniswap-v4-crypto-market/lib/getExchangeRate.d.ts.map +1 -1
- package/dist/browser/modules/uniswap-v4-crypto-market/lib/getPriceFromSqrtX96.d.ts.map +1 -1
- package/dist/browser/modules/uniswap-v4-crypto-market/lib/pricesFromUniswapV4.d.ts +6 -1
- package/dist/browser/modules/uniswap-v4-crypto-market/lib/pricesFromUniswapV4.d.ts.map +1 -1
- package/dist/neutral/crypto-asset.mjs +115 -42
- package/dist/neutral/crypto-asset.mjs.map +4 -4
- package/dist/neutral/modules/crypto-asset/Diviner.d.ts.map +1 -1
- package/dist/neutral/modules/crypto-asset/lib/divinePrices.d.ts +1 -1
- package/dist/neutral/modules/crypto-asset/lib/divinePrices.d.ts.map +1 -1
- package/dist/neutral/modules/crypto-asset/lib/divineUniswapPrices.d.ts +6 -1
- package/dist/neutral/modules/crypto-asset/lib/divineUniswapPrices.d.ts.map +1 -1
- package/dist/neutral/modules/crypto-asset/lib/uniswapQuotes.d.ts +11 -0
- package/dist/neutral/modules/crypto-asset/lib/uniswapQuotes.d.ts.map +1 -0
- package/dist/neutral/modules/crypto-asset/lib/usdPricesFromQuotes.d.ts +8 -0
- package/dist/neutral/modules/crypto-asset/lib/usdPricesFromQuotes.d.ts.map +1 -0
- package/dist/neutral/modules/crypto-asset/test/buildUniswapPayload.d.ts +5 -0
- package/dist/neutral/modules/crypto-asset/test/buildUniswapPayload.d.ts.map +1 -0
- package/dist/neutral/modules/crypto-asset/test/index.d.ts +4 -0
- package/dist/neutral/modules/crypto-asset/test/index.d.ts.map +1 -1
- package/dist/neutral/modules/crypto-asset/test/sampleCryptoAssetReference.d.ts +8 -0
- package/dist/neutral/modules/crypto-asset/test/sampleCryptoAssetReference.d.ts.map +1 -0
- package/dist/neutral/modules/crypto-asset/test/sampleUniswapV3.d.ts +3 -0
- package/dist/neutral/modules/crypto-asset/test/sampleUniswapV3.d.ts.map +1 -0
- package/dist/neutral/modules/crypto-asset/test/sampleUniswapV4.d.ts +3 -0
- package/dist/neutral/modules/crypto-asset/test/sampleUniswapV4.d.ts.map +1 -0
- package/dist/neutral/modules/uniswap-v3-crypto-market/lib/UniswapV3CryptoAssetPools.d.ts +7 -0
- package/dist/neutral/modules/uniswap-v3-crypto-market/lib/UniswapV3CryptoAssetPools.d.ts.map +1 -0
- package/dist/neutral/modules/uniswap-v3-crypto-market/lib/index.d.ts +1 -0
- package/dist/neutral/modules/uniswap-v3-crypto-market/lib/index.d.ts.map +1 -1
- package/dist/neutral/modules/uniswap-v4-crypto-market/lib/UniswapV4DefaultPools.d.ts +4 -0
- package/dist/neutral/modules/uniswap-v4-crypto-market/lib/UniswapV4DefaultPools.d.ts.map +1 -1
- package/dist/neutral/modules/uniswap-v4-crypto-market/lib/getExchangeRate.d.ts +2 -1
- package/dist/neutral/modules/uniswap-v4-crypto-market/lib/getExchangeRate.d.ts.map +1 -1
- package/dist/neutral/modules/uniswap-v4-crypto-market/lib/getPriceFromSqrtX96.d.ts.map +1 -1
- package/dist/neutral/modules/uniswap-v4-crypto-market/lib/pricesFromUniswapV4.d.ts +6 -1
- package/dist/neutral/modules/uniswap-v4-crypto-market/lib/pricesFromUniswapV4.d.ts.map +1 -1
- package/dist/neutral/uniswap-v3-crypto-market.mjs +21 -0
- package/dist/neutral/uniswap-v3-crypto-market.mjs.map +3 -3
- package/dist/neutral/uniswap-v4-crypto-market.mjs +99 -17
- package/dist/neutral/uniswap-v4-crypto-market.mjs.map +2 -2
- package/dist/node/modules/crypto-asset/Diviner.d.ts.map +1 -1
- package/dist/node/modules/crypto-asset/lib/divinePrices.d.ts +1 -1
- package/dist/node/modules/crypto-asset/lib/divinePrices.d.ts.map +1 -1
- package/dist/node/modules/crypto-asset/lib/divineUniswapPrices.d.ts +6 -1
- package/dist/node/modules/crypto-asset/lib/divineUniswapPrices.d.ts.map +1 -1
- package/dist/node/modules/crypto-asset/lib/uniswapQuotes.d.ts +11 -0
- package/dist/node/modules/crypto-asset/lib/uniswapQuotes.d.ts.map +1 -0
- package/dist/node/modules/crypto-asset/lib/usdPricesFromQuotes.d.ts +8 -0
- package/dist/node/modules/crypto-asset/lib/usdPricesFromQuotes.d.ts.map +1 -0
- package/dist/node/modules/crypto-asset/test/buildUniswapPayload.d.ts +5 -0
- package/dist/node/modules/crypto-asset/test/buildUniswapPayload.d.ts.map +1 -0
- package/dist/node/modules/crypto-asset/test/index.d.ts +4 -0
- package/dist/node/modules/crypto-asset/test/index.d.ts.map +1 -1
- package/dist/node/modules/crypto-asset/test/sampleCryptoAssetReference.d.ts +8 -0
- package/dist/node/modules/crypto-asset/test/sampleCryptoAssetReference.d.ts.map +1 -0
- package/dist/node/modules/crypto-asset/test/sampleUniswapV3.d.ts +3 -0
- package/dist/node/modules/crypto-asset/test/sampleUniswapV3.d.ts.map +1 -0
- package/dist/node/modules/crypto-asset/test/sampleUniswapV4.d.ts +3 -0
- package/dist/node/modules/crypto-asset/test/sampleUniswapV4.d.ts.map +1 -0
- package/dist/node/modules/uniswap-v3-crypto-market/lib/UniswapV3CryptoAssetPools.d.ts +7 -0
- package/dist/node/modules/uniswap-v3-crypto-market/lib/UniswapV3CryptoAssetPools.d.ts.map +1 -0
- package/dist/node/modules/uniswap-v3-crypto-market/lib/index.d.ts +1 -0
- package/dist/node/modules/uniswap-v3-crypto-market/lib/index.d.ts.map +1 -1
- package/dist/node/modules/uniswap-v4-crypto-market/lib/UniswapV4DefaultPools.d.ts +4 -0
- package/dist/node/modules/uniswap-v4-crypto-market/lib/UniswapV4DefaultPools.d.ts.map +1 -1
- package/dist/node/modules/uniswap-v4-crypto-market/lib/getExchangeRate.d.ts +2 -1
- package/dist/node/modules/uniswap-v4-crypto-market/lib/getExchangeRate.d.ts.map +1 -1
- package/dist/node/modules/uniswap-v4-crypto-market/lib/getPriceFromSqrtX96.d.ts.map +1 -1
- package/dist/node/modules/uniswap-v4-crypto-market/lib/pricesFromUniswapV4.d.ts +6 -1
- package/dist/node/modules/uniswap-v4-crypto-market/lib/pricesFromUniswapV4.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../../src/modules/crypto-asset/Diviner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAC/F,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGlD,OAAO,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAA;AAElE,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,eAAe;IACzC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiE;IACjH,gBAAyB,mBAAmB,EAAE,MAAM,CAAuC;IAC3F,gBAAyB,YAAY;;MAA0B;cAE5C,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../../src/modules/crypto-asset/Diviner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAC/F,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGlD,OAAO,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAA;AAElE,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,eAAe;IACzC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiE;IACjH,gBAAyB,mBAAmB,EAAE,MAAM,CAAuC;IAC3F,gBAAyB,YAAY;;MAA0B;cAE5C,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;CAOlE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CoingeckoCryptoMarketPayload } from '@xyo-network/payload-plugins/coingecko-crypto-market';
|
|
2
2
|
import type { CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset';
|
|
3
3
|
import type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market';
|
|
4
|
-
export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,
|
|
4
|
+
export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, ...uniswapPayloads: (UniswapCryptoMarketPayload | undefined)[]) => CryptoMarketAssetPayload;
|
|
5
5
|
//# sourceMappingURL=divinePrices.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sDAAsD,CAAA;AACxG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAEzF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAA;AASpG,eAAO,MAAM,YAAY,GACvB,kBAAkB,4BAA4B,GAAG,SAAS,EAC1D,
|
|
1
|
+
{"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sDAAsD,CAAA;AACxG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAEzF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAA;AASpG,eAAO,MAAM,YAAY,GACvB,kBAAkB,4BAA4B,GAAG,SAAS,EAC1D,GAAG,iBAAiB,CAAC,0BAA0B,GAAG,SAAS,CAAC,EAAE,KAC7D,wBAQF,CAAA"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset';
|
|
2
2
|
import type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Values each asset in USD, EUR, BTC and ETH from Uniswap pool prices. Every asset is
|
|
5
|
+
* priced in USD first (see usdPricesFromQuotes), then converted at the USD prices of the
|
|
6
|
+
* valuationReferences. Only assets the payload schema knows are included.
|
|
7
|
+
*/
|
|
8
|
+
export declare function divineUniswapPrices(...uniswapPayloads: (UniswapCryptoMarketPayload | undefined)[]): CryptoMarketAssetPayload;
|
|
4
9
|
//# sourceMappingURL=divineUniswapPrices.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACC,wBAAwB,EACpC,MAAM,2CAA2C,CAAA;AAElD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAA;AA4BpG;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,eAAe,EAAE,CAAC,0BAA0B,GAAG,SAAS,CAAC,EAAE,GAAG,wBAAwB,CAyB5H"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market';
|
|
2
|
+
/** A price read from one pool: one unit of `base` is worth `rate` units of `quote` */
|
|
3
|
+
export interface UniswapQuote {
|
|
4
|
+
base: string;
|
|
5
|
+
quote: string;
|
|
6
|
+
rate: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function normalizeUniswapSymbol(symbol: string): string;
|
|
9
|
+
/** Flattens the pairs of every payload into quotes between normalized asset symbols */
|
|
10
|
+
export declare function uniswapQuotes(payloads: UniswapCryptoMarketPayload[]): UniswapQuote[];
|
|
11
|
+
//# sourceMappingURL=uniswapQuotes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniswapQuotes.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/uniswapQuotes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAsB,MAAM,oDAAoD,CAAA;AAExH,sFAAsF;AACtF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAKD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG7D;AAYD,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,0BAA0B,EAAE,GAAG,YAAY,EAAE,CAYpF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { UniswapQuote } from './uniswapQuotes.js';
|
|
2
|
+
/**
|
|
3
|
+
* Prices every asset reachable from a USD stablecoin through the quoted pools. Each asset
|
|
4
|
+
* takes the median of its quotes against assets priced before it: first the pricingOrder,
|
|
5
|
+
* then the rest in rounds, nearest to USD first.
|
|
6
|
+
*/
|
|
7
|
+
export declare function usdPricesFromQuotes(quotes: UniswapQuote[]): Map<string, number>;
|
|
8
|
+
//# sourceMappingURL=usdPricesFromQuotes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usdPricesFromQuotes.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/usdPricesFromQuotes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AA6BtD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAsB/E"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { UniswapCryptoMarketPayload, UniswapCryptoPair } from '@xyo-network/payload-plugins/uniswap-crypto-market';
|
|
2
|
+
/** A pool pair in which one `base` is worth `rate` of `quote` */
|
|
3
|
+
export declare const uniswapPair: (base: string, rate: number, quote: string) => UniswapCryptoPair;
|
|
4
|
+
export declare const uniswapPayload: (...pairs: UniswapCryptoPair[]) => UniswapCryptoMarketPayload;
|
|
5
|
+
//# sourceMappingURL=buildUniswapPayload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildUniswapPayload.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/test/buildUniswapPayload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAA;AAGvH,iEAAiE;AACjE,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,iBAStE,CAAA;AAEF,eAAO,MAAM,cAAc,GAAI,GAAG,OAAO,iBAAiB,EAAE,KAAG,0BAE7D,CAAA"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export * from './buildUniswapPayload.js';
|
|
1
2
|
export * from './sampleCoinGecko.js';
|
|
3
|
+
export * from './sampleCryptoAssetReference.js';
|
|
2
4
|
export * from './sampleUniswap.js';
|
|
5
|
+
export * from './sampleUniswapV3.js';
|
|
6
|
+
export * from './sampleUniswapV4.js';
|
|
3
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/test/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/test/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset';
|
|
2
|
+
/**
|
|
3
|
+
* The last aggregate the automation witness divined with CoinGecko prices (2026-09-29T08:09:03Z),
|
|
4
|
+
* archived as aa58d5900e8cb072a5f95946c205c1c70ef9b550361343d6d94d73a66ceb8b00. All but xl1 and xyo
|
|
5
|
+
* are CoinGecko prices alone; those two blend in the XYO:USDT and XL1:USDT Uniswap V4 pools.
|
|
6
|
+
*/
|
|
7
|
+
export declare const sampleCryptoAssetReference: CryptoMarketAssetPayload;
|
|
8
|
+
//# sourceMappingURL=sampleCryptoAssetReference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampleCryptoAssetReference.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/test/sampleCryptoAssetReference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAGzF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,wBAiExC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampleUniswapV3.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/test/sampleUniswapV3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAA;AAIpG,eAAO,MAAM,sBAAsB,EAAE,0BAqHpC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampleUniswapV4.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/test/sampleUniswapV4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAA;AAIpG,eAAO,MAAM,sBAAsB,EAAE,0BAmIpC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep mainnet pools for pricing the crypto asset aggregate (network.xyo.crypto.asset),
|
|
3
|
+
* each at its pair's lowest fee tier with real depth. Unlike UniswapPoolContracts, this
|
|
4
|
+
* leaves out the thinly traded XYO pools, which would skew the XYO price.
|
|
5
|
+
*/
|
|
6
|
+
export declare const UniswapV3CryptoAssetPools: string[];
|
|
7
|
+
//# sourceMappingURL=UniswapV3CryptoAssetPools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniswapV3CryptoAssetPools.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v3-crypto-market/lib/UniswapV3CryptoAssetPools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,UASrC,CAAA"}
|
|
@@ -3,5 +3,6 @@ export * from './pricesFromUniswap3.js';
|
|
|
3
3
|
export * from './UniSwap3Pair.js';
|
|
4
4
|
export * from './Uniswap3PoolSlot0Wrapper.js';
|
|
5
5
|
export * from './UniswapPoolContracts.js';
|
|
6
|
+
export * from './UniswapV3CryptoAssetPools.js';
|
|
6
7
|
export * from './UniswapV3Slot0Fields.js';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v3-crypto-market/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v3-crypto-market/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { TokenPairPoolKey, TokenParameters } from '../types/index.js';
|
|
2
2
|
export declare const TokenRegistry: Record<string, TokenParameters>;
|
|
3
|
+
/**
|
|
4
|
+
* Hookless mainnet pools. Beyond XYO and XL1, each pair uses its lowest fee tier with real
|
|
5
|
+
* depth: low-fee pools are arbitraged more tightly, so they track the market more closely.
|
|
6
|
+
*/
|
|
3
7
|
export declare const UniswapV4DefaultPools: Record<string, TokenPairPoolKey>;
|
|
4
8
|
//# sourceMappingURL=UniswapV4DefaultPools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniswapV4DefaultPools.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v4-crypto-market/lib/UniswapV4DefaultPools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE1E,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"UniswapV4DefaultPools.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v4-crypto-market/lib/UniswapV4DefaultPools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE1E,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAmDhD,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAwDzD,CAAA"}
|
|
@@ -5,9 +5,10 @@ import type { Token } from '../../uniswap-token/index.js';
|
|
|
5
5
|
* @param tokenA The first token in the pair.
|
|
6
6
|
* @param tokenB The second token in the pair.
|
|
7
7
|
* @param fee The fee tier for the pool.
|
|
8
|
+
* @param tickSpacing The tick spacing for the pool.
|
|
8
9
|
* @param hookAddress The address of the hook contract. Default is ZeroAddress.
|
|
9
10
|
* @param provider The EVM provider to use for the transaction.
|
|
10
11
|
* @returns The price of the token pair.
|
|
11
12
|
*/
|
|
12
|
-
export declare const getExchangeRate: (tokenA: Token, tokenB: Token, fee: number, hookAddress: string | undefined, provider: Provider) => Promise<number>;
|
|
13
|
+
export declare const getExchangeRate: (tokenA: Token, tokenB: Token, fee: number, tickSpacing: number, hookAddress: string | undefined, provider: Provider) => Promise<number>;
|
|
13
14
|
//# sourceMappingURL=getExchangeRate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getExchangeRate.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v4-crypto-market/lib/getExchangeRate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAO3C
|
|
1
|
+
{"version":3,"file":"getExchangeRate.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v4-crypto-market/lib/getExchangeRate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAO3C;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,KAAK,EACb,QAAQ,KAAK,EACb,KAAK,MAAM,EACX,aAAa,MAAM,EACnB,aAAa,MAAM,GAAG,SAAS,EAC/B,UAAU,QAAQ,KACjB,OAAO,CAAC,MAAM,CAchB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPriceFromSqrtX96.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v4-crypto-market/lib/getPriceFromSqrtX96.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getPriceFromSqrtX96.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v4-crypto-market/lib/getPriceFromSqrtX96.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,cAAc,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,KAAG,MAKhG,CAAA"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import type { Logger } from '@ariestools/sdk';
|
|
1
2
|
import type { UniswapCryptoPair } from '@xyo-network/payload-plugins/uniswap-crypto-market';
|
|
2
3
|
import type { Provider } from 'ethers';
|
|
3
4
|
import type { TokenPairPoolKey } from '../types/index.js';
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Prices each pool, skipping (and logging) any that cannot be read so one bad pool
|
|
7
|
+
* does not drop the others. Throws only if every pool fails.
|
|
8
|
+
*/
|
|
9
|
+
export declare const pricesFromUniswapV4: (poolId: TokenPairPoolKey[], provider: Provider, logger?: Logger) => Promise<UniswapCryptoPair[]>;
|
|
5
10
|
//# sourceMappingURL=pricesFromUniswapV4.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricesFromUniswapV4.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v4-crypto-market/lib/pricesFromUniswapV4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAA;AAC3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"pricesFromUniswapV4.d.ts","sourceRoot":"","sources":["../../../../../src/modules/uniswap-v4-crypto-market/lib/pricesFromUniswapV4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAA;AAC3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAOzD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAU,QAAQ,gBAAgB,EAAE,EAAE,UAAU,QAAQ,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,iBAAiB,EAAE,CAStI,CAAA"}
|
|
@@ -26,7 +26,7 @@ var averageStringifiedNumbers = (...prices) => {
|
|
|
26
26
|
var average = (...input) => {
|
|
27
27
|
const payloads = input.filter(exists);
|
|
28
28
|
const tokens = new Set(payloads.flatMap((payload) => Object.keys(payload.assets).map((t) => t)));
|
|
29
|
-
const
|
|
29
|
+
const valuations2 = new Set(
|
|
30
30
|
[...tokens].flatMap((asset) => {
|
|
31
31
|
const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists);
|
|
32
32
|
const valueBasis = new Set(assetInfo.flatMap((v) => Object.keys(v.value)).filter(exists));
|
|
@@ -37,7 +37,7 @@ var average = (...input) => {
|
|
|
37
37
|
[...tokens].map((token) => {
|
|
38
38
|
const assetInfo = payloads.map((p) => p.assets?.[token]).filter(exists);
|
|
39
39
|
const value = Object.fromEntries(
|
|
40
|
-
[...
|
|
40
|
+
[...valuations2].map((valuation) => {
|
|
41
41
|
const assetValuations = assetInfo.map((info) => info.value?.[valuation]);
|
|
42
42
|
const averageAssetValuation = averageStringifiedNumbers(...assetValuations);
|
|
43
43
|
return [valuation, averageAssetValuation?.toString()];
|
|
@@ -75,55 +75,128 @@ var divineCoinGeckoPrices = (payload) => {
|
|
|
75
75
|
};
|
|
76
76
|
|
|
77
77
|
// src/modules/crypto-asset/lib/divineUniswapPrices.ts
|
|
78
|
-
import {
|
|
79
|
-
import { CryptoMarketAssetSchema as CryptoMarketAssetSchema2 } from "@xyo-network/payload-plugins/crypto-asset";
|
|
78
|
+
import { exists as exists2 } from "@ariestools/sdk";
|
|
79
|
+
import { CryptoMarketAssetSchema as CryptoMarketAssetSchema2, TokenZod } from "@xyo-network/payload-plugins/crypto-asset";
|
|
80
80
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/sdk";
|
|
81
|
+
|
|
82
|
+
// src/modules/crypto-asset/lib/uniswapQuotes.ts
|
|
83
|
+
var symbolAliases = /* @__PURE__ */ new Map([["weth", "eth"]]);
|
|
84
|
+
function normalizeUniswapSymbol(symbol) {
|
|
85
|
+
const lower = symbol.toLowerCase();
|
|
86
|
+
return symbolAliases.get(lower) ?? lower;
|
|
87
|
+
}
|
|
88
|
+
function isPositiveFinite(value) {
|
|
89
|
+
return Number.isFinite(value) && value > 0;
|
|
90
|
+
}
|
|
91
|
+
function rateOf(base, quote) {
|
|
92
|
+
if (isPositiveFinite(base.value)) return base.value;
|
|
93
|
+
return isPositiveFinite(quote.value) ? 1 / quote.value : void 0;
|
|
94
|
+
}
|
|
95
|
+
function uniswapQuotes(payloads) {
|
|
96
|
+
return payloads.flatMap((payload) => payload.pairs).flatMap((pair) => {
|
|
97
|
+
const [tokenA, tokenB] = pair.tokens;
|
|
98
|
+
if (tokenA === void 0 || tokenB === void 0) return [];
|
|
99
|
+
const base = normalizeUniswapSymbol(tokenA.symbol);
|
|
100
|
+
const quote = normalizeUniswapSymbol(tokenB.symbol);
|
|
101
|
+
const rate = rateOf(tokenA, tokenB);
|
|
102
|
+
if (base === quote || rate === void 0) return [];
|
|
103
|
+
return [{
|
|
104
|
+
base,
|
|
105
|
+
quote,
|
|
106
|
+
rate
|
|
107
|
+
}];
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// src/modules/crypto-asset/lib/usdPricesFromQuotes.ts
|
|
112
|
+
var usdAnchors = ["usdt", "usdc"];
|
|
113
|
+
var pricingOrder = ["usdc", "eth", "wbtc"];
|
|
114
|
+
function median(values) {
|
|
115
|
+
const sorted = values.toSorted((a, b) => a - b);
|
|
116
|
+
const middle = Math.floor(sorted.length / 2);
|
|
117
|
+
return sorted.length % 2 === 0 ? (sorted[middle - 1] + sorted[middle]) / 2 : sorted[middle];
|
|
118
|
+
}
|
|
119
|
+
function valuations(asset, quotes, prices) {
|
|
120
|
+
return quotes.flatMap(({
|
|
121
|
+
base,
|
|
122
|
+
quote,
|
|
123
|
+
rate
|
|
124
|
+
}) => {
|
|
125
|
+
const quotePrice = base === asset ? prices.get(quote) : void 0;
|
|
126
|
+
if (quotePrice !== void 0) return [rate * quotePrice];
|
|
127
|
+
const basePrice = quote === asset ? prices.get(base) : void 0;
|
|
128
|
+
return basePrice === void 0 ? [] : [basePrice / rate];
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function usdPricesFromQuotes(quotes) {
|
|
132
|
+
const assets = new Set(quotes.flatMap(({ base, quote }) => [base, quote]));
|
|
133
|
+
const prices = /* @__PURE__ */ new Map();
|
|
134
|
+
const anchor = usdAnchors.find((symbol) => assets.has(symbol));
|
|
135
|
+
if (anchor === void 0) return prices;
|
|
136
|
+
prices.set(anchor, 1);
|
|
137
|
+
const priceFrom = (asset, pricedBefore) => {
|
|
138
|
+
const values = valuations(asset, quotes, pricedBefore);
|
|
139
|
+
if (values.length > 0) prices.set(asset, median(values));
|
|
140
|
+
return values.length > 0;
|
|
141
|
+
};
|
|
142
|
+
for (const asset of pricingOrder) {
|
|
143
|
+
if (!prices.has(asset)) priceFrom(asset, prices);
|
|
144
|
+
}
|
|
145
|
+
let pending = [...assets].filter((asset) => !prices.has(asset));
|
|
146
|
+
while (pending.length > 0) {
|
|
147
|
+
const pricedBefore = new Map(prices);
|
|
148
|
+
const unpriced = pending.filter((asset) => !priceFrom(asset, pricedBefore));
|
|
149
|
+
if (unpriced.length === pending.length) break;
|
|
150
|
+
pending = unpriced;
|
|
151
|
+
}
|
|
152
|
+
return prices;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// src/modules/crypto-asset/lib/divineUniswapPrices.ts
|
|
81
156
|
var schema2 = CryptoMarketAssetSchema2;
|
|
82
|
-
var
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return symbol.toLowerCase();
|
|
157
|
+
var valuationReferences = {
|
|
158
|
+
btc: ["wbtc"],
|
|
159
|
+
eth: ["eth"],
|
|
160
|
+
eur: ["eurc", "eurcv"]
|
|
87
161
|
};
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
);
|
|
162
|
+
function referencePrice(usdPrices, symbols) {
|
|
163
|
+
const prices = symbols.map((symbol) => usdPrices.get(symbol)).filter(exists2);
|
|
164
|
+
return prices.length > 0 ? prices.reduce((sum, price) => sum + price, 0) / prices.length : void 0;
|
|
165
|
+
}
|
|
166
|
+
function formatValue(value) {
|
|
167
|
+
return Number(value.toPrecision(8)).toString();
|
|
168
|
+
}
|
|
169
|
+
function divineUniswapPrices(...uniswapPayloads) {
|
|
170
|
+
const usdPrices = usdPricesFromQuotes(uniswapQuotes(uniswapPayloads.filter(exists2)));
|
|
171
|
+
const btc = referencePrice(usdPrices, valuationReferences.btc);
|
|
172
|
+
const valuations2 = [
|
|
173
|
+
["usd", 1],
|
|
174
|
+
["eur", referencePrice(usdPrices, valuationReferences.eur)],
|
|
175
|
+
["btc", btc],
|
|
176
|
+
["eth", referencePrice(usdPrices, valuationReferences.eth)]
|
|
177
|
+
];
|
|
178
|
+
if (btc !== void 0 && !usdPrices.has("btc")) usdPrices.set("btc", btc);
|
|
179
|
+
const assets = {};
|
|
180
|
+
for (const token of TokenZod.options) {
|
|
181
|
+
const usdPrice = usdPrices.get(token);
|
|
182
|
+
if (usdPrice === void 0) continue;
|
|
183
|
+
const value = {};
|
|
184
|
+
for (const [valuation, valuationPrice] of valuations2) {
|
|
185
|
+
if (valuationPrice !== void 0) value[valuation] = formatValue(usdPrice / valuationPrice);
|
|
186
|
+
}
|
|
187
|
+
assets[token] = { value };
|
|
115
188
|
}
|
|
116
189
|
const timestamp = Date.now();
|
|
117
190
|
const builder = new PayloadBuilder2({ schema: schema2 });
|
|
118
191
|
return builder.fields({ assets, timestamp }).build();
|
|
119
|
-
}
|
|
192
|
+
}
|
|
120
193
|
|
|
121
194
|
// src/modules/crypto-asset/lib/divinePrices.ts
|
|
122
195
|
var schema3 = CryptoMarketAssetSchema3;
|
|
123
|
-
var divinePrices = (coinGeckoPayload,
|
|
196
|
+
var divinePrices = (coinGeckoPayload, ...uniswapPayloads) => {
|
|
124
197
|
const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload);
|
|
125
|
-
const uniswapPrices = divineUniswapPrices(
|
|
126
|
-
const prices = [
|
|
198
|
+
const uniswapPrices = divineUniswapPrices(...uniswapPayloads);
|
|
199
|
+
const prices = [coinGeckoPayload, ...uniswapPayloads].some(exists3);
|
|
127
200
|
const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {};
|
|
128
201
|
const timestamp = Date.now();
|
|
129
202
|
const builder = new PayloadBuilder3({ schema: schema3 });
|
|
@@ -142,8 +215,8 @@ var CryptoMarketAssetDiviner = class extends AbstractDiviner {
|
|
|
142
215
|
static targetSchema = CryptoMarketAssetSchema4;
|
|
143
216
|
divineHandler(payloads) {
|
|
144
217
|
const coinGeckoPayload = payloads?.find((payload) => payload?.schema === CoingeckoCryptoMarketSchema);
|
|
145
|
-
const
|
|
146
|
-
const result = divinePrices(coinGeckoPayload,
|
|
218
|
+
const uniswapPayloads = payloads?.filter((payload) => payload?.schema === UniswapCryptoMarketSchema) ?? [];
|
|
219
|
+
const result = divinePrices(coinGeckoPayload, ...uniswapPayloads);
|
|
147
220
|
return [result];
|
|
148
221
|
}
|
|
149
222
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/modules/crypto-asset/Diviner.ts", "../../src/modules/crypto-asset/lib/divinePrices.ts", "../../src/modules/crypto-asset/lib/average.ts", "../../src/modules/crypto-asset/lib/divineCoinGeckoPrices.ts", "../../src/modules/crypto-asset/lib/divineUniswapPrices.ts", "../../src/modules/crypto-asset/Schema.ts", "../../src/modules/crypto-asset/Plugin.ts"],
|
|
4
|
-
"sourcesContent": ["import type { CoingeckoCryptoMarketPayload } from '@xyo-network/payload-plugins/coingecko-crypto-market'\nimport { CoingeckoCryptoMarketSchema } from '@xyo-network/payload-plugins/coingecko-crypto-market'\nimport type { CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset'\nimport { CryptoMarketAssetSchema } from '@xyo-network/payload-plugins/crypto-asset'\nimport type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market'\nimport { UniswapCryptoMarketSchema } from '@xyo-network/payload-plugins/uniswap-crypto-market'\nimport type {\n AnyConfigSchema, DivinerConfig, DivinerModule, DivinerParams, Payload, QueryableModule, Schema,\n} from '@xyo-network/sdk'\nimport { AbstractDiviner } from '@xyo-network/sdk'\n\nimport { divinePrices } from './lib/index.ts'\nimport { CryptoMarketAssetDivinerConfigSchema } from './Schema.ts'\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, QueryableModule {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoMarketAssetDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoMarketAssetDivinerConfigSchema\n static override readonly targetSchema = CryptoMarketAssetSchema\n\n protected override divineHandler(payloads?: Payload[]): Payload[] {\n const coinGeckoPayload = payloads?.find(payload => payload?.schema === CoingeckoCryptoMarketSchema) as CoingeckoCryptoMarketPayload | undefined\n const uniswapPayload = payloads?.find(payload => payload?.schema === UniswapCryptoMarketSchema) as UniswapCryptoMarketPayload | undefined\n const result: CryptoMarketAssetPayload = divinePrices(coinGeckoPayload, uniswapPayload)\n return [result]\n }\n}\n", "import { exists } from '@ariestools/sdk'\nimport type { CoingeckoCryptoMarketPayload } from '@xyo-network/payload-plugins/coingecko-crypto-market'\nimport type { CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset'\nimport { CryptoMarketAssetSchema } from '@xyo-network/payload-plugins/crypto-asset'\nimport type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market'\nimport { PayloadBuilder } from '@xyo-network/sdk'\n\nimport { average } from './average.ts'\nimport { divineCoinGeckoPrices } from './divineCoinGeckoPrices.ts'\nimport { divineUniswapPrices } from './divineUniswapPrices.ts'\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 const builder = new PayloadBuilder<CryptoMarketAssetPayload>({ schema })\n return builder.fields({ assets, timestamp }).build()\n}\n", "import { exists } from '@ariestools/sdk'\nimport type {\n AssetInfo, CryptoMarketAssetPayload, Currency, Token,\n} from '@xyo-network/payload-plugins/crypto-asset'\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 == null || value === '') return undefined\n const parsed = Number(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 type { CoingeckoCryptoMarketPayload } from '@xyo-network/payload-plugins/coingecko-crypto-market'\nimport type { AssetInfo, CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset'\nimport { CryptoMarketAssetSchema } from '@xyo-network/payload-plugins/crypto-asset'\nimport { PayloadBuilder } from '@xyo-network/sdk'\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 = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n const assets: Record<string, AssetInfo>\n = 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 const builder = new PayloadBuilder<CryptoMarketAssetPayload>({ schema })\n return builder.fields({ assets, timestamp }).build()\n}\n", "import { assertEx, exists } from '@ariestools/sdk'\nimport type {\n AssetInfo, CryptoMarketAssetPayload,\n Currency, Token, ValueBasis,\n} from '@xyo-network/payload-plugins/crypto-asset'\nimport { CryptoMarketAssetSchema } from '@xyo-network/payload-plugins/crypto-asset'\nimport type {\n UniswapCryptoMarketPayload, UniswapCryptoPair, UniswapCryptoToken,\n} from '@xyo-network/payload-plugins/uniswap-crypto-market'\nimport { PayloadBuilder } from '@xyo-network/sdk'\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 = (uniswapPayload: UniswapCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n let assets: Partial<Record<Token, AssetInfo | undefined>> = {}\n if (uniswapPayload) {\n const tokens = new Set<Token>(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 const builder = new PayloadBuilder<CryptoMarketAssetPayload>({ schema })\n return builder.fields({ assets, timestamp }).build()\n}\n", "import { asSchema } from '@xyo-network/sdk'\n\nexport type CryptoMarketAssetDivinerQuerySchema = typeof CryptoMarketAssetDivinerQuerySchema\nexport const CryptoMarketAssetDivinerQuerySchema = asSchema('network.xyo.crypto.asset.diviner.query', true)\n\nexport type CryptoMarketAssetDivinerConfigSchema = typeof CryptoMarketAssetDivinerConfigSchema\nexport const CryptoMarketAssetDivinerConfigSchema = asSchema('network.xyo.crypto.asset.diviner.config', true)\n", "import { CryptoMarketAssetSchema } from '@xyo-network/payload-plugins/crypto-asset'\nimport { createPayloadSetDivinerPlugin, PayloadSetSchema } from '@xyo-network/sdk'\n\nimport { CryptoMarketAssetDiviner } from './Diviner.ts'\n\nexport const CryptoMarketAssetPlugin = () =>\n createPayloadSetDivinerPlugin<CryptoMarketAssetDiviner>(\n { required: { [CryptoMarketAssetSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n return (await CryptoMarketAssetDiviner.create(params))\n },\n },\n )\n"],
|
|
5
|
-
"mappings": ";AACA,SAAS,mCAAmC;AAE5C,SAAS,2BAAAA,gCAA+B;AAExC,SAAS,iCAAiC;AAI1C,SAAS,uBAAuB;;;ACThC,SAAS,UAAAC,eAAc;AAGvB,SAAS,2BAAAC,gCAA+B;AAExC,SAAS,kBAAAC,uBAAsB;;;ACL/B,SAAS,cAAc;AAKvB,IAAM,WAAW,CAAC,QAA2C;AAC3D,SAAO,QAAQ;AACjB;AAEA,IAAM,yBAAyB,CAAC,UAAkD;AAChF,MAAI,SAAS,QAAQ,UAAU,GAAI,QAAO;AAC1C,QAAM,SAAS,OAAO,KAAK;AAC3B,SAAO,OAAO,MAAM,MAAM,IAAI,SAAY;AAC5C;AAEA,IAAM,4BAA4B,IAAI,WAAuD;AAC3F,QAAM,UAAU,OAAO,IAAI,sBAAsB,EAAE,OAAO,QAAQ;AAClE,SAAO,QAAQ,SAAS,IAAI,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,GAAG,CAAC,IAAI,QAAQ,SAAS;AACxF;AAEO,IAAM,UAAU,IAAI,UAA+E;AAExG,QAAM,WAAW,MAAM,OAAO,MAAM;AACpC,QAAM,SAAS,IAAI,IAAW,SAAS,QAAQ,aAAW,OAAO,KAAK,QAAQ,MAAM,EAAE,IAAW,OAAK,CAAU,CAAC,CAAC;AAElH,
|
|
6
|
-
"names": ["CryptoMarketAssetSchema", "exists", "CryptoMarketAssetSchema", "PayloadBuilder", "exists", "CryptoMarketAssetSchema", "PayloadBuilder", "schema", "schema", "CryptoMarketAssetSchema", "exists", "PayloadBuilder", "CryptoMarketAssetSchema", "CryptoMarketAssetSchema", "CryptoMarketAssetSchema"]
|
|
3
|
+
"sources": ["../../src/modules/crypto-asset/Diviner.ts", "../../src/modules/crypto-asset/lib/divinePrices.ts", "../../src/modules/crypto-asset/lib/average.ts", "../../src/modules/crypto-asset/lib/divineCoinGeckoPrices.ts", "../../src/modules/crypto-asset/lib/divineUniswapPrices.ts", "../../src/modules/crypto-asset/lib/uniswapQuotes.ts", "../../src/modules/crypto-asset/lib/usdPricesFromQuotes.ts", "../../src/modules/crypto-asset/Schema.ts", "../../src/modules/crypto-asset/Plugin.ts"],
|
|
4
|
+
"sourcesContent": ["import type { CoingeckoCryptoMarketPayload } from '@xyo-network/payload-plugins/coingecko-crypto-market'\nimport { CoingeckoCryptoMarketSchema } from '@xyo-network/payload-plugins/coingecko-crypto-market'\nimport type { CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset'\nimport { CryptoMarketAssetSchema } from '@xyo-network/payload-plugins/crypto-asset'\nimport type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market'\nimport { UniswapCryptoMarketSchema } from '@xyo-network/payload-plugins/uniswap-crypto-market'\nimport type {\n AnyConfigSchema, DivinerConfig, DivinerModule, DivinerParams, Payload, QueryableModule, Schema,\n} from '@xyo-network/sdk'\nimport { AbstractDiviner } from '@xyo-network/sdk'\n\nimport { divinePrices } from './lib/index.ts'\nimport { CryptoMarketAssetDivinerConfigSchema } from './Schema.ts'\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, QueryableModule {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoMarketAssetDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoMarketAssetDivinerConfigSchema\n static override readonly targetSchema = CryptoMarketAssetSchema\n\n protected override divineHandler(payloads?: Payload[]): Payload[] {\n const coinGeckoPayload = payloads?.find(payload => payload?.schema === CoingeckoCryptoMarketSchema) as CoingeckoCryptoMarketPayload | undefined\n // Uniswap V3 and V4 witnesses each report their own payload; price from all of them\n const uniswapPayloads = (payloads?.filter(payload => payload?.schema === UniswapCryptoMarketSchema) ?? []) as UniswapCryptoMarketPayload[]\n const result: CryptoMarketAssetPayload = divinePrices(coinGeckoPayload, ...uniswapPayloads)\n return [result]\n }\n}\n", "import { exists } from '@ariestools/sdk'\nimport type { CoingeckoCryptoMarketPayload } from '@xyo-network/payload-plugins/coingecko-crypto-market'\nimport type { CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset'\nimport { CryptoMarketAssetSchema } from '@xyo-network/payload-plugins/crypto-asset'\nimport type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market'\nimport { PayloadBuilder } from '@xyo-network/sdk'\n\nimport { average } from './average.ts'\nimport { divineCoinGeckoPrices } from './divineCoinGeckoPrices.ts'\nimport { divineUniswapPrices } from './divineUniswapPrices.ts'\n\nconst schema = CryptoMarketAssetSchema\n\nexport const divinePrices = (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n ...uniswapPayloads: (UniswapCryptoMarketPayload | undefined)[]\n): CryptoMarketAssetPayload => {\n const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = divineUniswapPrices(...uniswapPayloads)\n const prices = [coinGeckoPayload, ...uniswapPayloads].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n const builder = new PayloadBuilder<CryptoMarketAssetPayload>({ schema })\n return builder.fields({ assets, timestamp }).build()\n}\n", "import { exists } from '@ariestools/sdk'\nimport type {\n AssetInfo, CryptoMarketAssetPayload, Currency, Token,\n} from '@xyo-network/payload-plugins/crypto-asset'\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 == null || value === '') return undefined\n const parsed = Number(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 type { CoingeckoCryptoMarketPayload } from '@xyo-network/payload-plugins/coingecko-crypto-market'\nimport type { AssetInfo, CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset'\nimport { CryptoMarketAssetSchema } from '@xyo-network/payload-plugins/crypto-asset'\nimport { PayloadBuilder } from '@xyo-network/sdk'\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 = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n const assets: Record<string, AssetInfo>\n = 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 const builder = new PayloadBuilder<CryptoMarketAssetPayload>({ schema })\n return builder.fields({ assets, timestamp }).build()\n}\n", "import { exists } from '@ariestools/sdk'\nimport type {\n AssetInfo, CryptoMarketAssetPayload, Token, ValueBasis,\n} from '@xyo-network/payload-plugins/crypto-asset'\nimport { CryptoMarketAssetSchema, TokenZod } from '@xyo-network/payload-plugins/crypto-asset'\nimport type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market'\nimport { PayloadBuilder } from '@xyo-network/sdk'\n\nimport { uniswapQuotes } from './uniswapQuotes.ts'\nimport { usdPricesFromQuotes } from './usdPricesFromQuotes.ts'\n\nconst schema = CryptoMarketAssetSchema\n\n/** The currencies every asset is valued in */\ntype Valuation = Extract<keyof ValueBasis, 'btc' | 'eth' | 'eur' | 'usd'>\n\n/** Pool assets whose USD price stands in for each non-USD valuation, averaged when several */\nconst valuationReferences: Record<Exclude<Valuation, 'usd'>, string[]> = {\n btc: ['wbtc'],\n eth: ['eth'],\n eur: ['eurc', 'eurcv'],\n}\n\nfunction referencePrice(usdPrices: ReadonlyMap<string, number>, symbols: string[]): number | undefined {\n const prices = symbols.map(symbol => usdPrices.get(symbol)).filter(exists)\n return prices.length > 0 ? prices.reduce((sum, price) => sum + price, 0) / prices.length : undefined\n}\n\n// Trims floating point noise; pool prices carry fewer significant digits than this\nfunction formatValue(value: number): string {\n return Number(value.toPrecision(8)).toString()\n}\n\n/**\n * Values each asset in USD, EUR, BTC and ETH from Uniswap pool prices. Every asset is\n * priced in USD first (see usdPricesFromQuotes), then converted at the USD prices of the\n * valuationReferences. Only assets the payload schema knows are included.\n */\nexport function divineUniswapPrices(...uniswapPayloads: (UniswapCryptoMarketPayload | undefined)[]): CryptoMarketAssetPayload {\n const usdPrices = usdPricesFromQuotes(uniswapQuotes(uniswapPayloads.filter(exists)))\n const btc = referencePrice(usdPrices, valuationReferences.btc)\n // USD price of one unit of each valuation\n const valuations: [Valuation, number | undefined][] = [\n ['usd', 1],\n ['eur', referencePrice(usdPrices, valuationReferences.eur)],\n ['btc', btc],\n ['eth', referencePrice(usdPrices, valuationReferences.eth)],\n ]\n // BTC does not trade on Ethereum itself, so the asset takes its reference price\n if (btc !== undefined && !usdPrices.has('btc')) usdPrices.set('btc', btc)\n const assets: Partial<Record<Token, AssetInfo>> = {}\n for (const token of TokenZod.options) {\n const usdPrice = usdPrices.get(token)\n if (usdPrice === undefined) continue\n const value: ValueBasis = {}\n for (const [valuation, valuationPrice] of valuations) {\n if (valuationPrice !== undefined) value[valuation] = formatValue(usdPrice / valuationPrice)\n }\n assets[token] = { value }\n }\n const timestamp = Date.now()\n const builder = new PayloadBuilder<CryptoMarketAssetPayload>({ schema })\n return builder.fields({ assets, timestamp }).build()\n}\n", "import type { UniswapCryptoMarketPayload, UniswapCryptoToken } from '@xyo-network/payload-plugins/uniswap-crypto-market'\n\n/** A price read from one pool: one unit of `base` is worth `rate` units of `quote` */\nexport interface UniswapQuote {\n base: string\n quote: string\n rate: number\n}\n\n/** Pool token symbols that stand for another asset one-for-one */\nconst symbolAliases = new Map([['weth', 'eth']])\n\nexport function normalizeUniswapSymbol(symbol: string): string {\n const lower = symbol.toLowerCase()\n return symbolAliases.get(lower) ?? lower\n}\n\nfunction isPositiveFinite(value: number): boolean {\n return Number.isFinite(value) && value > 0\n}\n\n// Each token's value is its price in the other token, so either one gives the rate\nfunction rateOf(base: UniswapCryptoToken, quote: UniswapCryptoToken): number | undefined {\n if (isPositiveFinite(base.value)) return base.value\n return isPositiveFinite(quote.value) ? 1 / quote.value : undefined\n}\n\n/** Flattens the pairs of every payload into quotes between normalized asset symbols */\nexport function uniswapQuotes(payloads: UniswapCryptoMarketPayload[]): UniswapQuote[] {\n return payloads.flatMap(payload => payload.pairs).flatMap((pair) => {\n const [tokenA, tokenB] = pair.tokens\n if (tokenA === undefined || tokenB === undefined) return []\n const base = normalizeUniswapSymbol(tokenA.symbol)\n const quote = normalizeUniswapSymbol(tokenB.symbol)\n const rate = rateOf(tokenA, tokenB)\n if (base === quote || rate === undefined) return []\n return [{\n base, quote, rate,\n }]\n })\n}\n", "import type { UniswapQuote } from './uniswapQuotes.ts'\n\n/** USD stablecoins in order of preference; the first one quoted is taken as exactly 1 USD */\nconst usdAnchors = ['usdt', 'usdc']\n\n/**\n * Deeply traded assets, priced first and in this order, each from its pools against the\n * assets before it. Thinner pools priced later therefore never feed back into them.\n */\nconst pricingOrder = ['usdc', 'eth', 'wbtc']\n\nfunction median(values: number[]): number {\n const sorted = values.toSorted((a, b) => a - b)\n const middle = Math.floor(sorted.length / 2)\n return sorted.length % 2 === 0 ? (sorted[middle - 1] + sorted[middle]) / 2 : sorted[middle]\n}\n\n// The USD values of `asset` implied by its quotes against already priced assets\nfunction valuations(asset: string, quotes: UniswapQuote[], prices: ReadonlyMap<string, number>): number[] {\n return quotes.flatMap(({\n base, quote, rate,\n }) => {\n const quotePrice = base === asset ? prices.get(quote) : undefined\n if (quotePrice !== undefined) return [rate * quotePrice]\n const basePrice = quote === asset ? prices.get(base) : undefined\n return basePrice === undefined ? [] : [basePrice / rate]\n })\n}\n\n/**\n * Prices every asset reachable from a USD stablecoin through the quoted pools. Each asset\n * takes the median of its quotes against assets priced before it: first the pricingOrder,\n * then the rest in rounds, nearest to USD first.\n */\nexport function usdPricesFromQuotes(quotes: UniswapQuote[]): Map<string, number> {\n const assets = new Set(quotes.flatMap(({ base, quote }) => [base, quote]))\n const prices = new Map<string, number>()\n const anchor = usdAnchors.find(symbol => assets.has(symbol))\n if (anchor === undefined) return prices\n prices.set(anchor, 1)\n const priceFrom = (asset: string, pricedBefore: ReadonlyMap<string, number>): boolean => {\n const values = valuations(asset, quotes, pricedBefore)\n if (values.length > 0) prices.set(asset, median(values))\n return values.length > 0\n }\n for (const asset of pricingOrder) {\n if (!prices.has(asset)) priceFrom(asset, prices)\n }\n let pending = [...assets].filter(asset => !prices.has(asset))\n while (pending.length > 0) {\n const pricedBefore = new Map(prices)\n const unpriced = pending.filter(asset => !priceFrom(asset, pricedBefore))\n if (unpriced.length === pending.length) break\n pending = unpriced\n }\n return prices\n}\n", "import { asSchema } from '@xyo-network/sdk'\n\nexport type CryptoMarketAssetDivinerQuerySchema = typeof CryptoMarketAssetDivinerQuerySchema\nexport const CryptoMarketAssetDivinerQuerySchema = asSchema('network.xyo.crypto.asset.diviner.query', true)\n\nexport type CryptoMarketAssetDivinerConfigSchema = typeof CryptoMarketAssetDivinerConfigSchema\nexport const CryptoMarketAssetDivinerConfigSchema = asSchema('network.xyo.crypto.asset.diviner.config', true)\n", "import { CryptoMarketAssetSchema } from '@xyo-network/payload-plugins/crypto-asset'\nimport { createPayloadSetDivinerPlugin, PayloadSetSchema } from '@xyo-network/sdk'\n\nimport { CryptoMarketAssetDiviner } from './Diviner.ts'\n\nexport const CryptoMarketAssetPlugin = () =>\n createPayloadSetDivinerPlugin<CryptoMarketAssetDiviner>(\n { required: { [CryptoMarketAssetSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n return (await CryptoMarketAssetDiviner.create(params))\n },\n },\n )\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["CryptoMarketAssetSchema", "exists", "CryptoMarketAssetSchema", "PayloadBuilder", "valuations", "exists", "CryptoMarketAssetSchema", "PayloadBuilder", "schema", "CryptoMarketAssetSchema", "exists", "valuations", "PayloadBuilder", "schema", "CryptoMarketAssetSchema", "exists", "PayloadBuilder", "CryptoMarketAssetSchema", "CryptoMarketAssetSchema", "CryptoMarketAssetSchema"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../../src/modules/crypto-asset/Diviner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAC/F,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGlD,OAAO,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAA;AAElE,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,eAAe;IACzC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiE;IACjH,gBAAyB,mBAAmB,EAAE,MAAM,CAAuC;IAC3F,gBAAyB,YAAY;;MAA0B;cAE5C,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../../src/modules/crypto-asset/Diviner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAC/F,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGlD,OAAO,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAA;AAElE,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,eAAe;IACzC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiE;IACjH,gBAAyB,mBAAmB,EAAE,MAAM,CAAuC;IAC3F,gBAAyB,YAAY;;MAA0B;cAE5C,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;CAOlE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CoingeckoCryptoMarketPayload } from '@xyo-network/payload-plugins/coingecko-crypto-market';
|
|
2
2
|
import type { CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset';
|
|
3
3
|
import type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market';
|
|
4
|
-
export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,
|
|
4
|
+
export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, ...uniswapPayloads: (UniswapCryptoMarketPayload | undefined)[]) => CryptoMarketAssetPayload;
|
|
5
5
|
//# sourceMappingURL=divinePrices.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sDAAsD,CAAA;AACxG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAEzF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAA;AASpG,eAAO,MAAM,YAAY,GACvB,kBAAkB,4BAA4B,GAAG,SAAS,EAC1D,
|
|
1
|
+
{"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sDAAsD,CAAA;AACxG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAA;AAEzF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAA;AASpG,eAAO,MAAM,YAAY,GACvB,kBAAkB,4BAA4B,GAAG,SAAS,EAC1D,GAAG,iBAAiB,CAAC,0BAA0B,GAAG,SAAS,CAAC,EAAE,KAC7D,wBAQF,CAAA"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { CryptoMarketAssetPayload } from '@xyo-network/payload-plugins/crypto-asset';
|
|
2
2
|
import type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Values each asset in USD, EUR, BTC and ETH from Uniswap pool prices. Every asset is
|
|
5
|
+
* priced in USD first (see usdPricesFromQuotes), then converted at the USD prices of the
|
|
6
|
+
* valuationReferences. Only assets the payload schema knows are included.
|
|
7
|
+
*/
|
|
8
|
+
export declare function divineUniswapPrices(...uniswapPayloads: (UniswapCryptoMarketPayload | undefined)[]): CryptoMarketAssetPayload;
|
|
4
9
|
//# sourceMappingURL=divineUniswapPrices.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACC,wBAAwB,EACpC,MAAM,2CAA2C,CAAA;AAElD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAA;AA4BpG;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,eAAe,EAAE,CAAC,0BAA0B,GAAG,SAAS,CAAC,EAAE,GAAG,wBAAwB,CAyB5H"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { UniswapCryptoMarketPayload } from '@xyo-network/payload-plugins/uniswap-crypto-market';
|
|
2
|
+
/** A price read from one pool: one unit of `base` is worth `rate` units of `quote` */
|
|
3
|
+
export interface UniswapQuote {
|
|
4
|
+
base: string;
|
|
5
|
+
quote: string;
|
|
6
|
+
rate: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function normalizeUniswapSymbol(symbol: string): string;
|
|
9
|
+
/** Flattens the pairs of every payload into quotes between normalized asset symbols */
|
|
10
|
+
export declare function uniswapQuotes(payloads: UniswapCryptoMarketPayload[]): UniswapQuote[];
|
|
11
|
+
//# sourceMappingURL=uniswapQuotes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniswapQuotes.d.ts","sourceRoot":"","sources":["../../../../../src/modules/crypto-asset/lib/uniswapQuotes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAsB,MAAM,oDAAoD,CAAA;AAExH,sFAAsF;AACtF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAKD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG7D;AAYD,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,0BAA0B,EAAE,GAAG,YAAY,EAAE,CAYpF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { UniswapQuote } from './uniswapQuotes.js';
|
|
2
|
+
/**
|
|
3
|
+
* Prices every asset reachable from a USD stablecoin through the quoted pools. Each asset
|
|
4
|
+
* takes the median of its quotes against assets priced before it: first the pricingOrder,
|
|
5
|
+
* then the rest in rounds, nearest to USD first.
|
|
6
|
+
*/
|
|
7
|
+
export declare function usdPricesFromQuotes(quotes: UniswapQuote[]): Map<string, number>;
|
|
8
|
+
//# sourceMappingURL=usdPricesFromQuotes.d.ts.map
|