@xyo-network/crypto-asset-plugin 2.83.0 → 2.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/browser/Diviner.d.cts +1 -2
  2. package/dist/browser/Diviner.d.cts.map +1 -1
  3. package/dist/browser/Diviner.d.mts +1 -2
  4. package/dist/browser/Diviner.d.mts.map +1 -1
  5. package/dist/browser/Diviner.d.ts +1 -2
  6. package/dist/browser/Diviner.d.ts.map +1 -1
  7. package/dist/browser/Plugin.d.cts +393 -3
  8. package/dist/browser/Plugin.d.cts.map +1 -1
  9. package/dist/browser/Plugin.d.mts +393 -3
  10. package/dist/browser/Plugin.d.mts.map +1 -1
  11. package/dist/browser/Plugin.d.ts +393 -3
  12. package/dist/browser/Plugin.d.ts.map +1 -1
  13. package/dist/browser/index.cjs +10 -10
  14. package/dist/browser/index.cjs.map +1 -1
  15. package/dist/browser/index.js +10 -10
  16. package/dist/browser/index.js.map +1 -1
  17. package/dist/browser/lib/divineCoinGeckoPrices.d.cts +1 -1
  18. package/dist/browser/lib/divineCoinGeckoPrices.d.cts.map +1 -1
  19. package/dist/browser/lib/divineCoinGeckoPrices.d.mts +1 -1
  20. package/dist/browser/lib/divineCoinGeckoPrices.d.mts.map +1 -1
  21. package/dist/browser/lib/divineCoinGeckoPrices.d.ts +1 -1
  22. package/dist/browser/lib/divineCoinGeckoPrices.d.ts.map +1 -1
  23. package/dist/browser/lib/divinePrices.d.cts +1 -1
  24. package/dist/browser/lib/divinePrices.d.cts.map +1 -1
  25. package/dist/browser/lib/divinePrices.d.mts +1 -1
  26. package/dist/browser/lib/divinePrices.d.mts.map +1 -1
  27. package/dist/browser/lib/divinePrices.d.ts +1 -1
  28. package/dist/browser/lib/divinePrices.d.ts.map +1 -1
  29. package/dist/browser/lib/divineUniswapPrices.d.cts +1 -1
  30. package/dist/browser/lib/divineUniswapPrices.d.cts.map +1 -1
  31. package/dist/browser/lib/divineUniswapPrices.d.mts +1 -1
  32. package/dist/browser/lib/divineUniswapPrices.d.mts.map +1 -1
  33. package/dist/browser/lib/divineUniswapPrices.d.ts +1 -1
  34. package/dist/browser/lib/divineUniswapPrices.d.ts.map +1 -1
  35. package/dist/node/Diviner.d.cts +1 -2
  36. package/dist/node/Diviner.d.cts.map +1 -1
  37. package/dist/node/Diviner.d.mts +1 -2
  38. package/dist/node/Diviner.d.mts.map +1 -1
  39. package/dist/node/Diviner.d.ts +1 -2
  40. package/dist/node/Diviner.d.ts.map +1 -1
  41. package/dist/node/Plugin.d.cts +393 -3
  42. package/dist/node/Plugin.d.cts.map +1 -1
  43. package/dist/node/Plugin.d.mts +393 -3
  44. package/dist/node/Plugin.d.mts.map +1 -1
  45. package/dist/node/Plugin.d.ts +393 -3
  46. package/dist/node/Plugin.d.ts.map +1 -1
  47. package/dist/node/index.js +10 -10
  48. package/dist/node/index.js.map +1 -1
  49. package/dist/node/index.mjs +10 -10
  50. package/dist/node/index.mjs.map +1 -1
  51. package/dist/node/lib/divineCoinGeckoPrices.d.cts +1 -1
  52. package/dist/node/lib/divineCoinGeckoPrices.d.cts.map +1 -1
  53. package/dist/node/lib/divineCoinGeckoPrices.d.mts +1 -1
  54. package/dist/node/lib/divineCoinGeckoPrices.d.mts.map +1 -1
  55. package/dist/node/lib/divineCoinGeckoPrices.d.ts +1 -1
  56. package/dist/node/lib/divineCoinGeckoPrices.d.ts.map +1 -1
  57. package/dist/node/lib/divinePrices.d.cts +1 -1
  58. package/dist/node/lib/divinePrices.d.cts.map +1 -1
  59. package/dist/node/lib/divinePrices.d.mts +1 -1
  60. package/dist/node/lib/divinePrices.d.mts.map +1 -1
  61. package/dist/node/lib/divinePrices.d.ts +1 -1
  62. package/dist/node/lib/divinePrices.d.ts.map +1 -1
  63. package/dist/node/lib/divineUniswapPrices.d.cts +1 -1
  64. package/dist/node/lib/divineUniswapPrices.d.cts.map +1 -1
  65. package/dist/node/lib/divineUniswapPrices.d.mts +1 -1
  66. package/dist/node/lib/divineUniswapPrices.d.mts.map +1 -1
  67. package/dist/node/lib/divineUniswapPrices.d.ts +1 -1
  68. package/dist/node/lib/divineUniswapPrices.d.ts.map +1 -1
  69. package/package.json +11 -11
  70. package/src/Diviner.ts +2 -3
  71. package/src/lib/divineCoinGeckoPrices.ts +2 -2
  72. package/src/lib/divinePrices.ts +5 -5
  73. package/src/lib/divineUniswapPrices.ts +2 -2
@@ -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 { Promisable } from '@xylabs/promise'\nimport { 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 divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const coinGeckoPayload = payloads?.find((payload) => payload?.schema === CoingeckoCryptoMarketSchema) as CoingeckoCryptoMarketPayload\n const uniswapPayload = payloads?.find((payload) => payload?.schema === UniswapCryptoMarketSchema) as UniswapCryptoMarketPayload\n const result: CryptoMarketAssetPayload = divinePrices(coinGeckoPayload, uniswapPayload)\n return [result]\n }\n}\n","import { exists } from '@xylabs/exists'\nimport { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { average } from './average'\nimport { divineCoinGeckoPrices } from './divineCoinGeckoPrices'\nimport { divineUniswapPrices } from './divineUniswapPrices'\n\nconst schema = CryptoMarketAssetSchema\n\nexport const divinePrices = (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): CryptoMarketAssetPayload => {\n const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, Currency, Token } from '@xyo-network/crypto-asset-payload-plugin'\n\nconst isNumber = (val: number | undefined): val is number => {\n return val !== undefined\n}\n\nconst parseStringifiedNumber = (value: string | undefined): number | undefined => {\n if (!value) return undefined\n const parsed = parseFloat(value)\n return isNaN(parsed) ? undefined : parsed\n}\n\nconst averageStringifiedNumbers = (...prices: (string | undefined)[]): number | undefined => {\n const numbers = prices.map(parseStringifiedNumber).filter(isNumber)\n return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : undefined\n}\n\nexport const average = (...input: (CryptoMarketAssetPayload | undefined)[]): Record<string, AssetInfo> => {\n // Get all the assets represented\n const payloads = input.filter(exists)\n const tokens = new Set<Token>(payloads.map((payload) => Object.keys(payload.assets).map<Token>((t) => t as Token)).flatMap((t) => t))\n // Get all the valuations used\n const valuations = new Set<Token | Currency>(\n [...tokens]\n .map((asset) => {\n const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists)\n const valueBasis = new Set<Currency | Token>(\n assetInfo\n .map((v) => Object.keys(v.value) as unknown as Currency | Token)\n .flatMap((v) => v)\n .filter(exists),\n )\n return [...valueBasis]\n })\n .flatMap((v) => v),\n )\n // For each of the tokens, calculate the average valuation for each of valuation bases\n const assets: Record<string, AssetInfo> = Object.fromEntries(\n [...tokens].map((token) => {\n const assetInfo = payloads.map((p) => p.assets?.[token]).filter(exists)\n const value = Object.fromEntries(\n [...valuations].map((valuation) => {\n const assetValuations = assetInfo.map((info) => info.value?.[valuation])\n const averageAssetValuation = averageStringifiedNumbers(...assetValuations)\n return [valuation, averageAssetValuation?.toString()]\n }),\n )\n return [token, { value }]\n }),\n )\n return assets\n}\n","import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst schema = CryptoMarketAssetSchema\n\nconst valuationExists = (value: [string, Partial<Record<string, number>> | undefined]): value is [string, Partial<Record<string, number>>] => {\n return !!value[1]\n}\n\nconst otherValueExists = (value: [string, number | undefined]): value is [string, number] => {\n const possiblyNumber = value[1]\n return typeof possiblyNumber === 'number' && !isNaN(possiblyNumber)\n}\n\nexport const divineCoinGeckoPrices = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n const assets: Record<string, AssetInfo> =\n payload && payload?.assets\n ? Object.fromEntries(\n Object.entries(payload.assets)\n .filter(valuationExists)\n .map(([asset, valuation]) => {\n const value = Object.fromEntries(\n Object.entries(valuation)\n .filter(otherValueExists)\n .map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()]),\n )\n return [asset, { value }]\n }),\n )\n : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema, Currency, Token, ValueBasis } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload, UniswapCryptoPair, UniswapCryptoToken } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nconst schema = CryptoMarketAssetSchema\n\nconst mapUniswapToken = (symbol: string): Token | Currency => {\n // TODO: Actually calculate the value of the token/stablecoin based on others\n // to weed out individual fluctuations in price\n if (symbol.toLowerCase() === 'wbtc') return 'btc'\n if (symbol.toLowerCase() === 'weth') return 'eth'\n if (symbol.toLowerCase() === 'usdt') return 'usd'\n return symbol.toLowerCase() as Token\n}\n\nconst pairsContainingToken = (uniswapPayload: UniswapCryptoMarketPayload, token: Token) => {\n return uniswapPayload?.pairs\n .map((p) => p.tokens)\n .filter((p) => p.some((x) => x.symbol.toLowerCase() === token))\n .filter(exists)\n}\n\nconst tokensFromPairs = (pairs: UniswapCryptoPair[]) => {\n return pairs\n .map((p) => p.tokens)\n .flat()\n .map((t) => t.symbol.toLowerCase() as Token)\n}\n\nconst valuesFromTokenPairs = (tokensPairs: UniswapCryptoToken[][], token: Token): ValueBasis => {\n return Object.fromEntries(\n tokensPairs\n .map((pair) => {\n const current = pair.filter((p) => p.symbol.toLowerCase() === token)?.[0]\n const other = pair.filter((p) => p.symbol.toLowerCase() !== token)?.[0]\n return [other.symbol.toLowerCase(), current.value.toString()]\n })\n .map((x) => [mapUniswapToken(x[0]), x[1]]),\n )\n}\n\nexport const divineUniswapPrices = (uniswapPayload: UniswapCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n let assets: Partial<Record<Token, AssetInfo | undefined>> = {}\n if (uniswapPayload) {\n const tokens: Set<Token> = new Set(tokensFromPairs(uniswapPayload.pairs))\n assets = Object.fromEntries(\n [...tokens].map((token) => {\n const pairs = pairsContainingToken(uniswapPayload, token)\n const value: ValueBasis = valuesFromTokenPairs(pairs, token)\n const assetInfo: AssetInfo = { value }\n return [token, assetInfo]\n }),\n )\n }\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","export type CryptoMarketAssetDivinerQuerySchema = 'network.xyo.crypto.asset.diviner.query'\nexport const CryptoMarketAssetDivinerQuerySchema: CryptoMarketAssetDivinerQuerySchema = 'network.xyo.crypto.asset.diviner.query'\n\nexport type CryptoMarketAssetDivinerConfigSchema = 'network.xyo.crypto.asset.diviner.config'\nexport const CryptoMarketAssetDivinerConfigSchema: CryptoMarketAssetDivinerConfigSchema = 'network.xyo.crypto.asset.diviner.config'\n","import { CryptoMarketAssetPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { CryptoMarketAssetPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoMarketAssetPlugin\n"],"mappings":"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","names":["CryptoMarketAssetSchema","CryptoMarketAssetSchema","exists","CryptoMarketAssetSchema","PayloadBuilder","exists","CryptoMarketAssetSchema","PayloadBuilder","schema","schema","CryptoMarketAssetSchema","exists","PayloadBuilder","CryptoMarketAssetSchema","CryptoMarketAssetSchema"]}
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,4 +1,4 @@
1
1
  import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
2
2
  import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
3
- export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
3
+ export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => Promise<CryptoMarketAssetPayload>;
4
4
  //# sourceMappingURL=divineCoinGeckoPrices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAa,4BAA4B,GAAG,SAAS,KAAG,wBAkBzF,CAAA"}
1
+ {"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAmB,4BAA4B,GAAG,SAAS,KAAG,QAAQ,wBAAwB,CAkB/H,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
2
2
  import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
3
- export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
3
+ export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => Promise<CryptoMarketAssetPayload>;
4
4
  //# sourceMappingURL=divineCoinGeckoPrices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAa,4BAA4B,GAAG,SAAS,KAAG,wBAkBzF,CAAA"}
1
+ {"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAmB,4BAA4B,GAAG,SAAS,KAAG,QAAQ,wBAAwB,CAkB/H,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
2
2
  import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
3
- export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
3
+ export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => Promise<CryptoMarketAssetPayload>;
4
4
  //# sourceMappingURL=divineCoinGeckoPrices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAa,4BAA4B,GAAG,SAAS,KAAG,wBAkBzF,CAAA"}
1
+ {"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAmB,4BAA4B,GAAG,SAAS,KAAG,QAAQ,wBAAwB,CAkB/H,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
2
2
  import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
3
3
  import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
4
- export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
4
+ export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, uniswapPayload: UniswapCryptoMarketPayload | undefined) => Promise<CryptoMarketAssetPayload>;
5
5
  //# sourceMappingURL=divinePrices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAE5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAQ9F,eAAO,MAAM,YAAY,qBACL,4BAA4B,GAAG,SAAS,kBAC1C,0BAA0B,GAAG,SAAS,KACrD,wBAOF,CAAA"}
1
+ {"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAE5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAQ9F,eAAO,MAAM,YAAY,qBACL,4BAA4B,GAAG,SAAS,kBAC1C,0BAA0B,GAAG,SAAS,KACrD,QAAQ,wBAAwB,CAOlC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
2
2
  import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
3
3
  import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
4
- export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
4
+ export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, uniswapPayload: UniswapCryptoMarketPayload | undefined) => Promise<CryptoMarketAssetPayload>;
5
5
  //# sourceMappingURL=divinePrices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAE5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAQ9F,eAAO,MAAM,YAAY,qBACL,4BAA4B,GAAG,SAAS,kBAC1C,0BAA0B,GAAG,SAAS,KACrD,wBAOF,CAAA"}
1
+ {"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAE5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAQ9F,eAAO,MAAM,YAAY,qBACL,4BAA4B,GAAG,SAAS,kBAC1C,0BAA0B,GAAG,SAAS,KACrD,QAAQ,wBAAwB,CAOlC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
2
2
  import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
3
3
  import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
4
- export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
4
+ export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, uniswapPayload: UniswapCryptoMarketPayload | undefined) => Promise<CryptoMarketAssetPayload>;
5
5
  //# sourceMappingURL=divinePrices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAE5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAQ9F,eAAO,MAAM,YAAY,qBACL,4BAA4B,GAAG,SAAS,kBAC1C,0BAA0B,GAAG,SAAS,KACrD,wBAOF,CAAA"}
1
+ {"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAE5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAQ9F,eAAO,MAAM,YAAY,qBACL,4BAA4B,GAAG,SAAS,kBAC1C,0BAA0B,GAAG,SAAS,KACrD,QAAQ,wBAAwB,CAOlC,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
2
2
  import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
3
- export declare const divineUniswapPrices: (uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
3
+ export declare const divineUniswapPrices: (uniswapPayload: UniswapCryptoMarketPayload | undefined) => Promise<CryptoMarketAssetPayload>;
4
4
  //# sourceMappingURL=divineUniswapPrices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAuCrI,eAAO,MAAM,mBAAmB,mBAAoB,0BAA0B,GAAG,SAAS,KAAG,wBAe5F,CAAA"}
1
+ {"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAuCrI,eAAO,MAAM,mBAAmB,mBAA0B,0BAA0B,GAAG,SAAS,KAAG,QAAQ,wBAAwB,CAelI,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
2
2
  import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
3
- export declare const divineUniswapPrices: (uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
3
+ export declare const divineUniswapPrices: (uniswapPayload: UniswapCryptoMarketPayload | undefined) => Promise<CryptoMarketAssetPayload>;
4
4
  //# sourceMappingURL=divineUniswapPrices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAuCrI,eAAO,MAAM,mBAAmB,mBAAoB,0BAA0B,GAAG,SAAS,KAAG,wBAe5F,CAAA"}
1
+ {"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAuCrI,eAAO,MAAM,mBAAmB,mBAA0B,0BAA0B,GAAG,SAAS,KAAG,QAAQ,wBAAwB,CAelI,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
2
2
  import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
3
- export declare const divineUniswapPrices: (uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
3
+ export declare const divineUniswapPrices: (uniswapPayload: UniswapCryptoMarketPayload | undefined) => Promise<CryptoMarketAssetPayload>;
4
4
  //# sourceMappingURL=divineUniswapPrices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAuCrI,eAAO,MAAM,mBAAmB,mBAAoB,0BAA0B,GAAG,SAAS,KAAG,wBAe5F,CAAA"}
1
+ {"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAuCrI,eAAO,MAAM,mBAAmB,mBAA0B,0BAA0B,GAAG,SAAS,KAAG,QAAQ,wBAAwB,CAelI,CAAA"}
package/package.json CHANGED
@@ -12,21 +12,21 @@
12
12
  "dependencies": {
13
13
  "@xylabs/exists": "^2.13.20",
14
14
  "@xylabs/promise": "^2.13.20",
15
- "@xyo-network/abstract-diviner": "^2.83.2",
16
- "@xyo-network/coingecko-crypto-market-payload-plugin": "~2.83.0",
17
- "@xyo-network/crypto-asset-payload-plugin": "~2.83.0",
18
- "@xyo-network/diviner": "^2.83.2",
19
- "@xyo-network/module-model": "^2.83.2",
20
- "@xyo-network/payload-builder": "^2.83.2",
21
- "@xyo-network/payload-model": "^2.83.2",
22
- "@xyo-network/payloadset-plugin": "^2.83.2",
23
- "@xyo-network/uniswap-crypto-market-payload-plugin": "~2.83.0"
15
+ "@xyo-network/abstract-diviner": "^2.84.0",
16
+ "@xyo-network/coingecko-crypto-market-payload-plugin": "~2.84.0",
17
+ "@xyo-network/crypto-asset-payload-plugin": "~2.84.0",
18
+ "@xyo-network/diviner": "^2.84.0",
19
+ "@xyo-network/module-model": "^2.84.0",
20
+ "@xyo-network/payload-builder": "^2.84.0",
21
+ "@xyo-network/payload-model": "^2.84.0",
22
+ "@xyo-network/payloadset-plugin": "^2.84.0",
23
+ "@xyo-network/uniswap-crypto-market-payload-plugin": "~2.84.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@xylabs/assert": "^2.13.20",
27
27
  "@xylabs/ts-scripts-yarn3": "^3.2.10",
28
28
  "@xylabs/tsconfig": "^3.2.10",
29
- "@xyo-network/account": "^2.83.2",
29
+ "@xyo-network/account": "^2.84.0",
30
30
  "typescript": "^5.3.3"
31
31
  },
32
32
  "description": "Typescript/Javascript Plugins for XYO Platform",
@@ -69,5 +69,5 @@
69
69
  "url": "https://github.com/XYOracleNetwork/plugins.git"
70
70
  },
71
71
  "sideEffects": false,
72
- "version": "2.83.0"
72
+ "version": "2.84.0"
73
73
  }
package/src/Diviner.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { Promisable } from '@xylabs/promise'
2
1
  import { AbstractDiviner } from '@xyo-network/abstract-diviner'
3
2
  import { CoingeckoCryptoMarketPayload, CoingeckoCryptoMarketSchema } from '@xyo-network/coingecko-crypto-market-payload-plugin'
4
3
  import { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'
@@ -20,10 +19,10 @@ export class CryptoMarketAssetDiviner<TParams extends CryptoMarketAssetDivinerPa
20
19
  static override configSchemas = [CryptoMarketAssetDivinerConfigSchema]
21
20
  static override targetSchema = CryptoMarketAssetSchema
22
21
 
23
- protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {
22
+ protected override async divineHandler(payloads?: Payload[]): Promise<Payload[]> {
24
23
  const coinGeckoPayload = payloads?.find((payload) => payload?.schema === CoingeckoCryptoMarketSchema) as CoingeckoCryptoMarketPayload
25
24
  const uniswapPayload = payloads?.find((payload) => payload?.schema === UniswapCryptoMarketSchema) as UniswapCryptoMarketPayload
26
- const result: CryptoMarketAssetPayload = divinePrices(coinGeckoPayload, uniswapPayload)
25
+ const result: CryptoMarketAssetPayload = await divinePrices(coinGeckoPayload, uniswapPayload)
27
26
  return [result]
28
27
  }
29
28
  }
@@ -13,7 +13,7 @@ const otherValueExists = (value: [string, number | undefined]): value is [string
13
13
  return typeof possiblyNumber === 'number' && !isNaN(possiblyNumber)
14
14
  }
15
15
 
16
- export const divineCoinGeckoPrices = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {
16
+ export const divineCoinGeckoPrices = async (payload: CoingeckoCryptoMarketPayload | undefined): Promise<CryptoMarketAssetPayload> => {
17
17
  const assets: Record<string, AssetInfo> =
18
18
  payload && payload?.assets
19
19
  ? Object.fromEntries(
@@ -30,5 +30,5 @@ export const divineCoinGeckoPrices = (payload: CoingeckoCryptoMarketPayload | un
30
30
  )
31
31
  : {}
32
32
  const timestamp = Date.now()
33
- return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()
33
+ return await new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()
34
34
  }
@@ -10,14 +10,14 @@ import { divineUniswapPrices } from './divineUniswapPrices'
10
10
 
11
11
  const schema = CryptoMarketAssetSchema
12
12
 
13
- export const divinePrices = (
13
+ export const divinePrices = async (
14
14
  coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,
15
15
  uniswapPayload: UniswapCryptoMarketPayload | undefined,
16
- ): CryptoMarketAssetPayload => {
17
- const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload)
18
- const uniswapPrices = divineUniswapPrices(uniswapPayload)
16
+ ): Promise<CryptoMarketAssetPayload> => {
17
+ const coinGeckoPrices = await divineCoinGeckoPrices(coinGeckoPayload)
18
+ const uniswapPrices = await divineUniswapPrices(uniswapPayload)
19
19
  const prices = [uniswapPayload, coinGeckoPayload].some(exists)
20
20
  const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}
21
21
  const timestamp = Date.now()
22
- return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()
22
+ return await new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()
23
23
  }
@@ -40,7 +40,7 @@ const valuesFromTokenPairs = (tokensPairs: UniswapCryptoToken[][], token: Token)
40
40
  )
41
41
  }
42
42
 
43
- export const divineUniswapPrices = (uniswapPayload: UniswapCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {
43
+ export const divineUniswapPrices = async (uniswapPayload: UniswapCryptoMarketPayload | undefined): Promise<CryptoMarketAssetPayload> => {
44
44
  let assets: Partial<Record<Token, AssetInfo | undefined>> = {}
45
45
  if (uniswapPayload) {
46
46
  const tokens: Set<Token> = new Set(tokensFromPairs(uniswapPayload.pairs))
@@ -54,5 +54,5 @@ export const divineUniswapPrices = (uniswapPayload: UniswapCryptoMarketPayload |
54
54
  )
55
55
  }
56
56
  const timestamp = Date.now()
57
- return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()
57
+ return await new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()
58
58
  }