@xyo-network/crypto-asset-plugin 2.75.0 → 2.75.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/browser/Diviner.d.cts +16 -0
  2. package/dist/browser/Diviner.d.cts.map +1 -0
  3. package/dist/browser/Diviner.js +6 -139
  4. package/dist/browser/Diviner.js.map +1 -1
  5. package/dist/browser/Plugin.d.cts +50 -0
  6. package/dist/browser/Plugin.d.cts.map +1 -0
  7. package/dist/browser/Plugin.js +4 -156
  8. package/dist/browser/Plugin.js.map +1 -1
  9. package/dist/browser/Schema.d.cts +5 -0
  10. package/dist/browser/Schema.d.cts.map +1 -0
  11. package/dist/browser/Schema.js +2 -3
  12. package/dist/browser/Schema.js.map +1 -1
  13. package/dist/browser/index.d.cts +6 -0
  14. package/dist/browser/index.d.cts.map +1 -0
  15. package/dist/browser/index.js +3 -170
  16. package/dist/browser/index.js.map +1 -1
  17. package/dist/browser/lib/average.d.cts +3 -0
  18. package/dist/browser/lib/average.d.cts.map +1 -0
  19. package/dist/browser/lib/average.js +4 -5
  20. package/dist/browser/lib/average.js.map +1 -1
  21. package/dist/browser/lib/divineCoinGeckoPrices.d.cts +4 -0
  22. package/dist/browser/lib/divineCoinGeckoPrices.d.cts.map +1 -0
  23. package/dist/browser/lib/divineCoinGeckoPrices.js +4 -5
  24. package/dist/browser/lib/divineCoinGeckoPrices.js.map +1 -1
  25. package/dist/browser/lib/divinePrices.d.cts +5 -0
  26. package/dist/browser/lib/divinePrices.d.cts.map +1 -0
  27. package/dist/browser/lib/divinePrices.js +7 -120
  28. package/dist/browser/lib/divinePrices.js.map +1 -1
  29. package/dist/browser/lib/divineUniswapPrices.d.cts +4 -0
  30. package/dist/browser/lib/divineUniswapPrices.d.cts.map +1 -0
  31. package/dist/browser/lib/divineUniswapPrices.js +6 -7
  32. package/dist/browser/lib/divineUniswapPrices.js.map +1 -1
  33. package/dist/browser/lib/index.d.cts +2 -0
  34. package/dist/browser/lib/index.d.cts.map +1 -0
  35. package/dist/browser/lib/index.js +1 -131
  36. package/dist/browser/lib/index.js.map +1 -1
  37. package/dist/browser/test/index.d.cts +3 -0
  38. package/dist/browser/test/index.d.cts.map +1 -0
  39. package/dist/browser/test/index.js +2 -269
  40. package/dist/browser/test/index.js.map +1 -1
  41. package/dist/browser/test/sampleCoinGecko.d.cts +3 -0
  42. package/dist/browser/test/sampleCoinGecko.d.cts.map +1 -0
  43. package/dist/browser/test/sampleCoinGecko.js +1 -2
  44. package/dist/browser/test/sampleCoinGecko.js.map +1 -1
  45. package/dist/browser/test/sampleUniswap.d.cts +3 -0
  46. package/dist/browser/test/sampleUniswap.d.cts.map +1 -0
  47. package/dist/browser/test/sampleUniswap.js +1 -2
  48. package/dist/browser/test/sampleUniswap.js.map +1 -1
  49. package/dist/docs.json +21990 -0
  50. package/dist/node/Diviner.d.cts +16 -0
  51. package/dist/node/Diviner.d.cts.map +1 -0
  52. package/dist/node/Diviner.js +154 -10
  53. package/dist/node/Diviner.js.map +1 -1
  54. package/dist/node/Diviner.mjs +151 -8
  55. package/dist/node/Diviner.mjs.map +1 -1
  56. package/dist/node/Plugin.d.cts +50 -0
  57. package/dist/node/Plugin.d.cts.map +1 -0
  58. package/dist/node/Plugin.js +168 -5
  59. package/dist/node/Plugin.js.map +1 -1
  60. package/dist/node/Plugin.mjs +166 -4
  61. package/dist/node/Plugin.mjs.map +1 -1
  62. package/dist/node/Schema.d.cts +5 -0
  63. package/dist/node/Schema.d.cts.map +1 -0
  64. package/dist/node/Schema.js +4 -2
  65. package/dist/node/Schema.js.map +1 -1
  66. package/dist/node/Schema.mjs +3 -2
  67. package/dist/node/Schema.mjs.map +1 -1
  68. package/dist/node/index.d.cts +6 -0
  69. package/dist/node/index.d.cts.map +1 -0
  70. package/dist/node/index.js +189 -9
  71. package/dist/node/index.js.map +1 -1
  72. package/dist/node/index.mjs +180 -3
  73. package/dist/node/index.mjs.map +1 -1
  74. package/dist/node/lib/average.d.cts +3 -0
  75. package/dist/node/lib/average.d.cts.map +1 -0
  76. package/dist/node/lib/average.js +19 -8
  77. package/dist/node/lib/average.js.map +1 -1
  78. package/dist/node/lib/average.mjs +18 -8
  79. package/dist/node/lib/average.mjs.map +1 -1
  80. package/dist/node/lib/divineCoinGeckoPrices.d.cts +4 -0
  81. package/dist/node/lib/divineCoinGeckoPrices.d.cts.map +1 -0
  82. package/dist/node/lib/divineCoinGeckoPrices.js +8 -6
  83. package/dist/node/lib/divineCoinGeckoPrices.js.map +1 -1
  84. package/dist/node/lib/divineCoinGeckoPrices.mjs +7 -6
  85. package/dist/node/lib/divineCoinGeckoPrices.mjs.map +1 -1
  86. package/dist/node/lib/divinePrices.d.cts +5 -0
  87. package/dist/node/lib/divinePrices.d.cts.map +1 -0
  88. package/dist/node/lib/divinePrices.js +133 -9
  89. package/dist/node/lib/divinePrices.js.map +1 -1
  90. package/dist/node/lib/divinePrices.mjs +130 -7
  91. package/dist/node/lib/divinePrices.mjs.map +1 -1
  92. package/dist/node/lib/divineUniswapPrices.d.cts +4 -0
  93. package/dist/node/lib/divineUniswapPrices.d.cts.map +1 -0
  94. package/dist/node/lib/divineUniswapPrices.js +12 -9
  95. package/dist/node/lib/divineUniswapPrices.js.map +1 -1
  96. package/dist/node/lib/divineUniswapPrices.mjs +11 -9
  97. package/dist/node/lib/divineUniswapPrices.mjs.map +1 -1
  98. package/dist/node/lib/index.d.cts +2 -0
  99. package/dist/node/lib/index.d.cts.map +1 -0
  100. package/dist/node/lib/index.js +149 -3
  101. package/dist/node/lib/index.js.map +1 -1
  102. package/dist/node/lib/index.mjs +141 -1
  103. package/dist/node/lib/index.mjs.map +1 -1
  104. package/dist/node/test/index.d.cts +3 -0
  105. package/dist/node/test/index.d.cts.map +1 -0
  106. package/dist/node/test/index.js +278 -5
  107. package/dist/node/test/index.js.map +1 -1
  108. package/dist/node/test/index.mjs +269 -2
  109. package/dist/node/test/index.mjs.map +1 -1
  110. package/dist/node/test/sampleCoinGecko.d.cts +3 -0
  111. package/dist/node/test/sampleCoinGecko.d.cts.map +1 -0
  112. package/dist/node/test/sampleCoinGecko.js +3 -1
  113. package/dist/node/test/sampleCoinGecko.js.map +1 -1
  114. package/dist/node/test/sampleCoinGecko.mjs +2 -1
  115. package/dist/node/test/sampleCoinGecko.mjs.map +1 -1
  116. package/dist/node/test/sampleUniswap.d.cts +3 -0
  117. package/dist/node/test/sampleUniswap.d.cts.map +1 -0
  118. package/dist/node/test/sampleUniswap.js +3 -1
  119. package/dist/node/test/sampleUniswap.js.map +1 -1
  120. package/dist/node/test/sampleUniswap.mjs +2 -1
  121. package/dist/node/test/sampleUniswap.mjs.map +1 -1
  122. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/average.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, Currency, Token } from '@xyo-network/crypto-asset-payload-plugin'\n\nconst isNumber = (val: number | undefined): val is number => {\n return val !== undefined\n}\n\nconst parseStringifiedNumber = (value: string | undefined): number | undefined => {\n if (!value) return undefined\n const parsed = parseFloat(value)\n return isNaN(parsed) ? undefined : parsed\n}\n\nconst averageStringifiedNumbers = (...prices: (string | undefined)[]): number | undefined => {\n const numbers = prices.map(parseStringifiedNumber).filter(isNumber)\n return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : undefined\n}\n\nexport const average = (...input: (CryptoMarketAssetPayload | undefined)[]): Record<string, AssetInfo> => {\n // Get all the assets represented\n const payloads = input.filter(exists)\n const tokens = new Set<Token>(payloads.map((payload) => Object.keys(payload.assets).map<Token>((t) => t as Token)).flatMap((t) => t))\n // Get all the valuations used\n const valuations = new Set<Token | Currency>(\n [...tokens]\n .map((asset) => {\n const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists)\n const valueBasis = new Set<Currency | Token>(\n assetInfo\n .map((v) => Object.keys(v.value) as unknown as Currency | Token)\n .flatMap((v) => v)\n .filter(exists),\n )\n return [...valueBasis]\n })\n .flatMap((v) => v),\n )\n // For each of the tokens, calculate the average valuation for each of valuation bases\n const assets: Record<string, AssetInfo> = Object.fromEntries(\n [...tokens].map((token) => {\n const assetInfo = payloads.map((p) => p.assets?.[token]).filter(exists)\n const value = Object.fromEntries(\n [...valuations].map((valuation) => {\n const assetValuations = assetInfo.map((info) => info.value?.[valuation])\n const averageAssetValuation = averageStringifiedNumbers(...assetValuations)\n return [valuation, averageAssetValuation?.toString()]\n }),\n )\n return [token, { value }]\n }),\n )\n return assets\n}\n"],"mappings":"AAAA,SAAS,cAAc;AAGvB,MAAM,WAAW,CAAC,QAA2C;AAC3D,SAAO,QAAQ;AACjB;AAEA,MAAM,yBAAyB,CAAC,UAAkD;AAChF,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,SAAS,WAAW,KAAK;AAC/B,SAAO,MAAM,MAAM,IAAI,SAAY;AACrC;AAEA,MAAM,4BAA4B,IAAI,WAAuD;AAC3F,QAAM,UAAU,OAAO,IAAI,sBAAsB,EAAE,OAAO,QAAQ;AAClE,SAAO,QAAQ,SAAS,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,GAAG,CAAC,IAAI,QAAQ,SAAS;AACpF;AAEO,MAAM,UAAU,IAAI,UAA+E;AAExG,QAAM,WAAW,MAAM,OAAO,MAAM;AACpC,QAAM,SAAS,IAAI,IAAW,SAAS,IAAI,CAAC,YAAY,OAAO,KAAK,QAAQ,MAAM,EAAE,IAAW,CAAC,MAAM,CAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEpI,QAAM,aAAa,IAAI;AAAA,IACrB,CAAC,GAAG,MAAM,EACP,IAAI,CAAC,UAAU;AACd,YAAM,YAAY,SAAS,IAAI,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,EAAE,OAAO,MAAM;AACtE,YAAM,aAAa,IAAI;AAAA,QACrB,UACG,IAAI,CAAC,MAAM,OAAO,KAAK,EAAE,KAAK,CAAgC,EAC9D,QAAQ,CAAC,MAAM,CAAC,EAChB,OAAO,MAAM;AAAA,MAClB;AACA,aAAO,CAAC,GAAG,UAAU;AAAA,IACvB,CAAC,EACA,QAAQ,CAAC,MAAM,CAAC;AAAA,EACrB;AAEA,QAAM,SAAoC,OAAO;AAAA,IAC/C,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,YAAM,YAAY,SAAS,IAAI,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,EAAE,OAAO,MAAM;AACtE,YAAM,QAAQ,OAAO;AAAA,QACnB,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,cAAc;AACjC,gBAAM,kBAAkB,UAAU,IAAI,CAAC,SAAS,KAAK,QAAQ,SAAS,CAAC;AACvE,gBAAM,wBAAwB,0BAA0B,GAAG,eAAe;AAC1E,iBAAO,CAAC,WAAW,uBAAuB,SAAS,CAAC;AAAA,QACtD,CAAC;AAAA,MACH;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/average.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, Currency, Token } from '@xyo-network/crypto-asset-payload-plugin'\n\nconst isNumber = (val: number | undefined): val is number => {\n return val !== undefined\n}\n\nconst parseStringifiedNumber = (value: string | undefined): number | undefined => {\n if (!value) return undefined\n const parsed = parseFloat(value)\n return isNaN(parsed) ? undefined : parsed\n}\n\nconst averageStringifiedNumbers = (...prices: (string | undefined)[]): number | undefined => {\n const numbers = prices.map(parseStringifiedNumber).filter(isNumber)\n return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : undefined\n}\n\nexport const average = (...input: (CryptoMarketAssetPayload | undefined)[]): Record<string, AssetInfo> => {\n // Get all the assets represented\n const payloads = input.filter(exists)\n const tokens = new Set<Token>(payloads.map((payload) => Object.keys(payload.assets).map<Token>((t) => t as Token)).flatMap((t) => t))\n // Get all the valuations used\n const valuations = new Set<Token | Currency>(\n [...tokens]\n .map((asset) => {\n const assetInfo = payloads.map((p) => p.assets?.[asset]).filter(exists)\n const valueBasis = new Set<Currency | Token>(\n assetInfo\n .map((v) => Object.keys(v.value) as unknown as Currency | Token)\n .flatMap((v) => v)\n .filter(exists),\n )\n return [...valueBasis]\n })\n .flatMap((v) => v),\n )\n // For each of the tokens, calculate the average valuation for each of valuation bases\n const assets: Record<string, AssetInfo> = Object.fromEntries(\n [...tokens].map((token) => {\n const assetInfo = payloads.map((p) => p.assets?.[token]).filter(exists)\n const value = Object.fromEntries(\n [...valuations].map((valuation) => {\n const assetValuations = assetInfo.map((info) => info.value?.[valuation])\n const averageAssetValuation = averageStringifiedNumbers(...assetValuations)\n return [valuation, averageAssetValuation?.toString()]\n }),\n )\n return [token, { value }]\n }),\n )\n return assets\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAGvB,IAAM,WAAW,CAAC,QAA2C;AAC3D,SAAO,QAAQ;AACjB;AAEA,IAAM,yBAAyB,CAAC,UAAkD;AAChF,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,SAAS,WAAW,KAAK;AAC/B,SAAO,MAAM,MAAM,IAAI,SAAY;AACrC;AAEA,IAAM,4BAA4B,IAAI,WAAuD;AAC3F,QAAM,UAAU,OAAO,IAAI,sBAAsB,EAAE,OAAO,QAAQ;AAClE,SAAO,QAAQ,SAAS,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,GAAG,CAAC,IAAI,QAAQ,SAAS;AACpF;AAEO,IAAM,UAAU,IAAI,UAA+E;AAExG,QAAM,WAAW,MAAM,OAAO,MAAM;AACpC,QAAM,SAAS,IAAI,IAAW,SAAS,IAAI,CAAC,YAAY,OAAO,KAAK,QAAQ,MAAM,EAAE,IAAW,CAAC,MAAM,CAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEpI,QAAM,aAAa,IAAI;AAAA,IACrB,CAAC,GAAG,MAAM,EACP,IAAI,CAAC,UAAU;AACd,YAAM,YAAY,SAAS,IAAI,CAAC,MAAG;AA1B3C;AA0B8C,uBAAE,WAAF,mBAAW;AAAA,OAAM,EAAE,OAAO,MAAM;AACtE,YAAM,aAAa,IAAI;AAAA,QACrB,UACG,IAAI,CAAC,MAAM,OAAO,KAAK,EAAE,KAAK,CAAgC,EAC9D,QAAQ,CAAC,MAAM,CAAC,EAChB,OAAO,MAAM;AAAA,MAClB;AACA,aAAO,CAAC,GAAG,UAAU;AAAA,IACvB,CAAC,EACA,QAAQ,CAAC,MAAM,CAAC;AAAA,EACrB;AAEA,QAAM,SAAoC,OAAO;AAAA,IAC/C,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,YAAM,YAAY,SAAS,IAAI,CAAC,MAAG;AAxCzC;AAwC4C,uBAAE,WAAF,mBAAW;AAAA,OAAM,EAAE,OAAO,MAAM;AACtE,YAAM,QAAQ,OAAO;AAAA,QACnB,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,cAAc;AACjC,gBAAM,kBAAkB,UAAU,IAAI,CAAC,SAAM;AA3CvD;AA2C0D,8BAAK,UAAL,mBAAa;AAAA,WAAU;AACvE,gBAAM,wBAAwB,0BAA0B,GAAG,eAAe;AAC1E,iBAAO,CAAC,WAAW,+DAAuB,UAAU;AAAA,QACtD,CAAC;AAAA,MACH;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,4 @@
1
+ import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
2
+ import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
3
+ export declare const divineCoinGeckoPrices: (payload: CoingeckoCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
4
+ //# sourceMappingURL=divineCoinGeckoPrices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divineCoinGeckoPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAa,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAcvH,eAAO,MAAM,qBAAqB,YAAa,4BAA4B,GAAG,SAAS,KAAG,wBAkBzF,CAAA"}
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/lib/divineCoinGeckoPrices.ts
19
21
  var divineCoinGeckoPrices_exports = {};
20
22
  __export(divineCoinGeckoPrices_exports, {
21
23
  divineCoinGeckoPrices: () => divineCoinGeckoPrices
@@ -23,19 +25,19 @@ __export(divineCoinGeckoPrices_exports, {
23
25
  module.exports = __toCommonJS(divineCoinGeckoPrices_exports);
24
26
  var import_crypto_asset_payload_plugin = require("@xyo-network/crypto-asset-payload-plugin");
25
27
  var import_payload_builder = require("@xyo-network/payload-builder");
26
- const schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
27
- const valuationExists = (value) => {
28
+ var schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
29
+ var valuationExists = (value) => {
28
30
  return !!value[1];
29
31
  };
30
- const otherValueExists = (value) => {
32
+ var otherValueExists = (value) => {
31
33
  const possiblyNumber = value[1];
32
34
  return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
33
35
  };
34
- const divineCoinGeckoPrices = (payload) => {
35
- const assets = payload && payload?.assets ? Object.fromEntries(
36
+ var divineCoinGeckoPrices = (payload) => {
37
+ const assets = payload && (payload == null ? void 0 : payload.assets) ? Object.fromEntries(
36
38
  Object.entries(payload.assets).filter(valuationExists).map(([asset, valuation]) => {
37
39
  const value = Object.fromEntries(
38
- Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()])
40
+ Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price == null ? void 0 : price.toString()])
39
41
  );
40
42
  return [asset, { value }];
41
43
  })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"sourcesContent":["import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst schema = CryptoMarketAssetSchema\n\nconst valuationExists = (value: [string, Partial<Record<string, number>> | undefined]): value is [string, Partial<Record<string, number>>] => {\n return !!value[1]\n}\n\nconst otherValueExists = (value: [string, number | undefined]): value is [string, number] => {\n const possiblyNumber = value[1]\n return typeof possiblyNumber === 'number' && !isNaN(possiblyNumber)\n}\n\nexport const divineCoinGeckoPrices = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n const assets: Record<string, AssetInfo> =\n payload && payload?.assets\n ? Object.fromEntries(\n Object.entries(payload.assets)\n .filter(valuationExists)\n .map(([asset, valuation]) => {\n const value = Object.fromEntries(\n Object.entries(valuation)\n .filter(otherValueExists)\n .map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()]),\n )\n return [asset, { value }]\n }),\n )\n : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,yCAA6E;AAC7E,6BAA+B;AAE/B,MAAM,SAAS;AAEf,MAAM,kBAAkB,CAAC,UAAqH;AAC5I,SAAO,CAAC,CAAC,MAAM,CAAC;AAClB;AAEA,MAAM,mBAAmB,CAAC,UAAmE;AAC3F,QAAM,iBAAiB,MAAM,CAAC;AAC9B,SAAO,OAAO,mBAAmB,YAAY,CAAC,MAAM,cAAc;AACpE;AAEO,MAAM,wBAAwB,CAAC,YAAgF;AACpH,QAAM,SACJ,WAAW,SAAS,SAChB,OAAO;AAAA,IACL,OAAO,QAAQ,QAAQ,MAAM,EAC1B,OAAO,eAAe,EACtB,IAAI,CAAC,CAAC,OAAO,SAAS,MAAM;AAC3B,YAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,SAAS,EACrB,OAAO,gBAAgB,EACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,YAAY,GAAG,OAAO,SAAS,CAAC,CAAC;AAAA,MACvE;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACL,IACA,CAAC;AACP,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,sCAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"sourcesContent":["import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst schema = CryptoMarketAssetSchema\n\nconst valuationExists = (value: [string, Partial<Record<string, number>> | undefined]): value is [string, Partial<Record<string, number>>] => {\n return !!value[1]\n}\n\nconst otherValueExists = (value: [string, number | undefined]): value is [string, number] => {\n const possiblyNumber = value[1]\n return typeof possiblyNumber === 'number' && !isNaN(possiblyNumber)\n}\n\nexport const divineCoinGeckoPrices = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n const assets: Record<string, AssetInfo> =\n payload && payload?.assets\n ? Object.fromEntries(\n Object.entries(payload.assets)\n .filter(valuationExists)\n .map(([asset, valuation]) => {\n const value = Object.fromEntries(\n Object.entries(valuation)\n .filter(otherValueExists)\n .map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()]),\n )\n return [asset, { value }]\n }),\n )\n : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,yCAA6E;AAC7E,6BAA+B;AAE/B,IAAM,SAAS;AAEf,IAAM,kBAAkB,CAAC,UAAqH;AAC5I,SAAO,CAAC,CAAC,MAAM,CAAC;AAClB;AAEA,IAAM,mBAAmB,CAAC,UAAmE;AAC3F,QAAM,iBAAiB,MAAM,CAAC;AAC9B,SAAO,OAAO,mBAAmB,YAAY,CAAC,MAAM,cAAc;AACpE;AAEO,IAAM,wBAAwB,CAAC,YAAgF;AACpH,QAAM,SACJ,YAAW,mCAAS,UAChB,OAAO;AAAA,IACL,OAAO,QAAQ,QAAQ,MAAM,EAC1B,OAAO,eAAe,EACtB,IAAI,CAAC,CAAC,OAAO,SAAS,MAAM;AAC3B,YAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,SAAS,EACrB,OAAO,gBAAgB,EACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,YAAY,GAAG,+BAAO,UAAU,CAAC;AAAA,MACvE;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACL,IACA,CAAC;AACP,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,sCAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
@@ -1,18 +1,19 @@
1
+ // src/lib/divineCoinGeckoPrices.ts
1
2
  import { CryptoMarketAssetSchema } from "@xyo-network/crypto-asset-payload-plugin";
2
3
  import { PayloadBuilder } from "@xyo-network/payload-builder";
3
- const schema = CryptoMarketAssetSchema;
4
- const valuationExists = (value) => {
4
+ var schema = CryptoMarketAssetSchema;
5
+ var valuationExists = (value) => {
5
6
  return !!value[1];
6
7
  };
7
- const otherValueExists = (value) => {
8
+ var otherValueExists = (value) => {
8
9
  const possiblyNumber = value[1];
9
10
  return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
10
11
  };
11
- const divineCoinGeckoPrices = (payload) => {
12
- const assets = payload && payload?.assets ? Object.fromEntries(
12
+ var divineCoinGeckoPrices = (payload) => {
13
+ const assets = payload && (payload == null ? void 0 : payload.assets) ? Object.fromEntries(
13
14
  Object.entries(payload.assets).filter(valuationExists).map(([asset, valuation]) => {
14
15
  const value = Object.fromEntries(
15
- Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()])
16
+ Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price == null ? void 0 : price.toString()])
16
17
  );
17
18
  return [asset, { value }];
18
19
  })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"sourcesContent":["import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst schema = CryptoMarketAssetSchema\n\nconst valuationExists = (value: [string, Partial<Record<string, number>> | undefined]): value is [string, Partial<Record<string, number>>] => {\n return !!value[1]\n}\n\nconst otherValueExists = (value: [string, number | undefined]): value is [string, number] => {\n const possiblyNumber = value[1]\n return typeof possiblyNumber === 'number' && !isNaN(possiblyNumber)\n}\n\nexport const divineCoinGeckoPrices = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n const assets: Record<string, AssetInfo> =\n payload && payload?.assets\n ? Object.fromEntries(\n Object.entries(payload.assets)\n .filter(valuationExists)\n .map(([asset, valuation]) => {\n const value = Object.fromEntries(\n Object.entries(valuation)\n .filter(otherValueExists)\n .map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()]),\n )\n return [asset, { value }]\n }),\n )\n : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n"],"mappings":"AACA,SAA8C,+BAA+B;AAC7E,SAAS,sBAAsB;AAE/B,MAAM,SAAS;AAEf,MAAM,kBAAkB,CAAC,UAAqH;AAC5I,SAAO,CAAC,CAAC,MAAM,CAAC;AAClB;AAEA,MAAM,mBAAmB,CAAC,UAAmE;AAC3F,QAAM,iBAAiB,MAAM,CAAC;AAC9B,SAAO,OAAO,mBAAmB,YAAY,CAAC,MAAM,cAAc;AACpE;AAEO,MAAM,wBAAwB,CAAC,YAAgF;AACpH,QAAM,SACJ,WAAW,SAAS,SAChB,OAAO;AAAA,IACL,OAAO,QAAQ,QAAQ,MAAM,EAC1B,OAAO,eAAe,EACtB,IAAI,CAAC,CAAC,OAAO,SAAS,MAAM;AAC3B,YAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,SAAS,EACrB,OAAO,gBAAgB,EACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,YAAY,GAAG,OAAO,SAAS,CAAC,CAAC;AAAA,MACvE;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACL,IACA,CAAC;AACP,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,eAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/divineCoinGeckoPrices.ts"],"sourcesContent":["import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nconst schema = CryptoMarketAssetSchema\n\nconst valuationExists = (value: [string, Partial<Record<string, number>> | undefined]): value is [string, Partial<Record<string, number>>] => {\n return !!value[1]\n}\n\nconst otherValueExists = (value: [string, number | undefined]): value is [string, number] => {\n const possiblyNumber = value[1]\n return typeof possiblyNumber === 'number' && !isNaN(possiblyNumber)\n}\n\nexport const divineCoinGeckoPrices = (payload: CoingeckoCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n const assets: Record<string, AssetInfo> =\n payload && payload?.assets\n ? Object.fromEntries(\n Object.entries(payload.assets)\n .filter(valuationExists)\n .map(([asset, valuation]) => {\n const value = Object.fromEntries(\n Object.entries(valuation)\n .filter(otherValueExists)\n .map(([symbol, price]) => [symbol.toLowerCase(), price?.toString()]),\n )\n return [asset, { value }]\n }),\n )\n : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n"],"mappings":";AACA,SAA8C,+BAA+B;AAC7E,SAAS,sBAAsB;AAE/B,IAAM,SAAS;AAEf,IAAM,kBAAkB,CAAC,UAAqH;AAC5I,SAAO,CAAC,CAAC,MAAM,CAAC;AAClB;AAEA,IAAM,mBAAmB,CAAC,UAAmE;AAC3F,QAAM,iBAAiB,MAAM,CAAC;AAC9B,SAAO,OAAO,mBAAmB,YAAY,CAAC,MAAM,cAAc;AACpE;AAEO,IAAM,wBAAwB,CAAC,YAAgF;AACpH,QAAM,SACJ,YAAW,mCAAS,UAChB,OAAO;AAAA,IACL,OAAO,QAAQ,QAAQ,MAAM,EAC1B,OAAO,eAAe,EACtB,IAAI,CAAC,CAAC,OAAO,SAAS,MAAM;AAC3B,YAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,SAAS,EACrB,OAAO,gBAAgB,EACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,YAAY,GAAG,+BAAO,UAAU,CAAC;AAAA,MACvE;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACL,IACA,CAAC;AACP,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,eAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
@@ -0,0 +1,5 @@
1
+ import { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin';
2
+ import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
3
+ import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
4
+ export declare const divinePrices: (coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined, uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
5
+ //# sourceMappingURL=divinePrices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divinePrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divinePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAA;AAClG,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0CAA0C,CAAA;AAE5G,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAA;AAQ9F,eAAO,MAAM,YAAY,qBACL,4BAA4B,GAAG,SAAS,kBAC1C,0BAA0B,GAAG,SAAS,KACrD,wBAOF,CAAA"}
@@ -16,26 +16,150 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/lib/divinePrices.ts
19
21
  var divinePrices_exports = {};
20
22
  __export(divinePrices_exports, {
21
23
  divinePrices: () => divinePrices
22
24
  });
23
25
  module.exports = __toCommonJS(divinePrices_exports);
26
+ var import_exists3 = require("@xylabs/exists");
27
+ var import_crypto_asset_payload_plugin3 = require("@xyo-network/crypto-asset-payload-plugin");
28
+ var import_payload_builder3 = require("@xyo-network/payload-builder");
29
+
30
+ // src/lib/average.ts
24
31
  var import_exists = require("@xylabs/exists");
32
+ var isNumber = (val) => {
33
+ return val !== void 0;
34
+ };
35
+ var parseStringifiedNumber = (value) => {
36
+ if (!value)
37
+ return void 0;
38
+ const parsed = parseFloat(value);
39
+ return isNaN(parsed) ? void 0 : parsed;
40
+ };
41
+ var averageStringifiedNumbers = (...prices) => {
42
+ const numbers = prices.map(parseStringifiedNumber).filter(isNumber);
43
+ return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
44
+ };
45
+ var average = (...input) => {
46
+ const payloads = input.filter(import_exists.exists);
47
+ const tokens = new Set(payloads.map((payload) => Object.keys(payload.assets).map((t) => t)).flatMap((t) => t));
48
+ const valuations = new Set(
49
+ [...tokens].map((asset) => {
50
+ const assetInfo = payloads.map((p) => {
51
+ var _a;
52
+ return (_a = p.assets) == null ? void 0 : _a[asset];
53
+ }).filter(import_exists.exists);
54
+ const valueBasis = new Set(
55
+ assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(import_exists.exists)
56
+ );
57
+ return [...valueBasis];
58
+ }).flatMap((v) => v)
59
+ );
60
+ const assets = Object.fromEntries(
61
+ [...tokens].map((token) => {
62
+ const assetInfo = payloads.map((p) => {
63
+ var _a;
64
+ return (_a = p.assets) == null ? void 0 : _a[token];
65
+ }).filter(import_exists.exists);
66
+ const value = Object.fromEntries(
67
+ [...valuations].map((valuation) => {
68
+ const assetValuations = assetInfo.map((info) => {
69
+ var _a;
70
+ return (_a = info.value) == null ? void 0 : _a[valuation];
71
+ });
72
+ const averageAssetValuation = averageStringifiedNumbers(...assetValuations);
73
+ return [valuation, averageAssetValuation == null ? void 0 : averageAssetValuation.toString()];
74
+ })
75
+ );
76
+ return [token, { value }];
77
+ })
78
+ );
79
+ return assets;
80
+ };
81
+
82
+ // src/lib/divineCoinGeckoPrices.ts
25
83
  var import_crypto_asset_payload_plugin = require("@xyo-network/crypto-asset-payload-plugin");
26
84
  var import_payload_builder = require("@xyo-network/payload-builder");
27
- var import_average = require("./average");
28
- var import_divineCoinGeckoPrices = require("./divineCoinGeckoPrices");
29
- var import_divineUniswapPrices = require("./divineUniswapPrices");
30
- const schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
31
- const divinePrices = (coinGeckoPayload, uniswapPayload) => {
32
- const coinGeckoPrices = (0, import_divineCoinGeckoPrices.divineCoinGeckoPrices)(coinGeckoPayload);
33
- const uniswapPrices = (0, import_divineUniswapPrices.divineUniswapPrices)(uniswapPayload);
34
- const prices = [uniswapPayload, coinGeckoPayload].some(import_exists.exists);
35
- const assets = prices ? (0, import_average.average)(coinGeckoPrices, uniswapPrices) : {};
85
+ var schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
86
+ var valuationExists = (value) => {
87
+ return !!value[1];
88
+ };
89
+ var otherValueExists = (value) => {
90
+ const possiblyNumber = value[1];
91
+ return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
92
+ };
93
+ var divineCoinGeckoPrices = (payload) => {
94
+ const assets = payload && (payload == null ? void 0 : payload.assets) ? Object.fromEntries(
95
+ Object.entries(payload.assets).filter(valuationExists).map(([asset, valuation]) => {
96
+ const value = Object.fromEntries(
97
+ Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price == null ? void 0 : price.toString()])
98
+ );
99
+ return [asset, { value }];
100
+ })
101
+ ) : {};
36
102
  const timestamp = Date.now();
37
103
  return new import_payload_builder.PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
38
104
  };
105
+
106
+ // src/lib/divineUniswapPrices.ts
107
+ var import_exists2 = require("@xylabs/exists");
108
+ var import_crypto_asset_payload_plugin2 = require("@xyo-network/crypto-asset-payload-plugin");
109
+ var import_payload_builder2 = require("@xyo-network/payload-builder");
110
+ var schema2 = import_crypto_asset_payload_plugin2.CryptoMarketAssetSchema;
111
+ var mapUniswapToken = (symbol) => {
112
+ if (symbol.toLowerCase() === "wbtc")
113
+ return "btc";
114
+ if (symbol.toLowerCase() === "weth")
115
+ return "eth";
116
+ if (symbol.toLowerCase() === "usdt")
117
+ return "usd";
118
+ return symbol.toLowerCase();
119
+ };
120
+ var pairsContainingToken = (uniswapPayload, token) => {
121
+ return uniswapPayload == null ? void 0 : uniswapPayload.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(import_exists2.exists);
122
+ };
123
+ var tokensFromPairs = (pairs) => {
124
+ return pairs.map((p) => p.tokens).flat().map((t) => t.symbol.toLowerCase());
125
+ };
126
+ var valuesFromTokenPairs = (tokensPairs, token) => {
127
+ return Object.fromEntries(
128
+ tokensPairs.map((pair) => {
129
+ var _a, _b;
130
+ const current = (_a = pair.filter((p) => p.symbol.toLowerCase() === token)) == null ? void 0 : _a[0];
131
+ const other = (_b = pair.filter((p) => p.symbol.toLowerCase() !== token)) == null ? void 0 : _b[0];
132
+ return [other.symbol.toLowerCase(), current.value.toString()];
133
+ }).map((x) => [mapUniswapToken(x[0]), x[1]])
134
+ );
135
+ };
136
+ var divineUniswapPrices = (uniswapPayload) => {
137
+ let assets = {};
138
+ if (uniswapPayload) {
139
+ const tokens = new Set(tokensFromPairs(uniswapPayload.pairs));
140
+ assets = Object.fromEntries(
141
+ [...tokens].map((token) => {
142
+ const pairs = pairsContainingToken(uniswapPayload, token);
143
+ const value = valuesFromTokenPairs(pairs, token);
144
+ const assetInfo = { value };
145
+ return [token, assetInfo];
146
+ })
147
+ );
148
+ }
149
+ const timestamp = Date.now();
150
+ return new import_payload_builder2.PayloadBuilder({ schema: schema2 }).fields({ assets, timestamp }).build();
151
+ };
152
+
153
+ // src/lib/divinePrices.ts
154
+ var schema3 = import_crypto_asset_payload_plugin3.CryptoMarketAssetSchema;
155
+ var divinePrices = (coinGeckoPayload, uniswapPayload) => {
156
+ const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload);
157
+ const uniswapPrices = divineUniswapPrices(uniswapPayload);
158
+ const prices = [uniswapPayload, coinGeckoPayload].some(import_exists3.exists);
159
+ const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {};
160
+ const timestamp = Date.now();
161
+ return new import_payload_builder3.PayloadBuilder({ schema: schema3 }).fields({ assets, timestamp }).build();
162
+ };
39
163
  // Annotate the CommonJS export names for ESM import in node:
40
164
  0 && (module.exports = {
41
165
  divinePrices
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/divinePrices.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { average } from './average'\nimport { divineCoinGeckoPrices } from './divineCoinGeckoPrices'\nimport { divineUniswapPrices } from './divineUniswapPrices'\n\nconst schema = CryptoMarketAssetSchema\n\nexport const divinePrices = (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): CryptoMarketAssetPayload => {\n const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AAEvB,yCAAkE;AAClE,6BAA+B;AAG/B,qBAAwB;AACxB,mCAAsC;AACtC,iCAAoC;AAEpC,MAAM,SAAS;AAER,MAAM,eAAe,CAC1B,kBACA,mBAC6B;AAC7B,QAAM,sBAAkB,oDAAsB,gBAAgB;AAC9D,QAAM,oBAAgB,gDAAoB,cAAc;AACxD,QAAM,SAAS,CAAC,gBAAgB,gBAAgB,EAAE,KAAK,oBAAM;AAC7D,QAAM,SAAS,aAAS,wBAAQ,iBAAiB,aAAa,IAAI,CAAC;AACnE,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,sCAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/divinePrices.ts","../../../src/lib/average.ts","../../../src/lib/divineCoinGeckoPrices.ts","../../../src/lib/divineUniswapPrices.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { average } from './average'\nimport { divineCoinGeckoPrices } from './divineCoinGeckoPrices'\nimport { divineUniswapPrices } from './divineUniswapPrices'\n\nconst schema = CryptoMarketAssetSchema\n\nexport const divinePrices = (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): CryptoMarketAssetPayload => {\n const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","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"],"mappings":"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","names":["import_exists","import_crypto_asset_payload_plugin","import_payload_builder","import_exists","import_crypto_asset_payload_plugin","import_payload_builder","schema","schema"]}
@@ -1,17 +1,140 @@
1
+ // src/lib/divinePrices.ts
2
+ import { exists as exists3 } from "@xylabs/exists";
3
+ import { CryptoMarketAssetSchema as CryptoMarketAssetSchema3 } from "@xyo-network/crypto-asset-payload-plugin";
4
+ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
5
+
6
+ // src/lib/average.ts
1
7
  import { exists } from "@xylabs/exists";
8
+ var isNumber = (val) => {
9
+ return val !== void 0;
10
+ };
11
+ var parseStringifiedNumber = (value) => {
12
+ if (!value)
13
+ return void 0;
14
+ const parsed = parseFloat(value);
15
+ return isNaN(parsed) ? void 0 : parsed;
16
+ };
17
+ var averageStringifiedNumbers = (...prices) => {
18
+ const numbers = prices.map(parseStringifiedNumber).filter(isNumber);
19
+ return numbers.length ? numbers.reduce((sum, n) => sum + n, 0) / numbers.length : void 0;
20
+ };
21
+ var average = (...input) => {
22
+ const payloads = input.filter(exists);
23
+ const tokens = new Set(payloads.map((payload) => Object.keys(payload.assets).map((t) => t)).flatMap((t) => t));
24
+ const valuations = new Set(
25
+ [...tokens].map((asset) => {
26
+ const assetInfo = payloads.map((p) => {
27
+ var _a;
28
+ return (_a = p.assets) == null ? void 0 : _a[asset];
29
+ }).filter(exists);
30
+ const valueBasis = new Set(
31
+ assetInfo.map((v) => Object.keys(v.value)).flatMap((v) => v).filter(exists)
32
+ );
33
+ return [...valueBasis];
34
+ }).flatMap((v) => v)
35
+ );
36
+ const assets = Object.fromEntries(
37
+ [...tokens].map((token) => {
38
+ const assetInfo = payloads.map((p) => {
39
+ var _a;
40
+ return (_a = p.assets) == null ? void 0 : _a[token];
41
+ }).filter(exists);
42
+ const value = Object.fromEntries(
43
+ [...valuations].map((valuation) => {
44
+ const assetValuations = assetInfo.map((info) => {
45
+ var _a;
46
+ return (_a = info.value) == null ? void 0 : _a[valuation];
47
+ });
48
+ const averageAssetValuation = averageStringifiedNumbers(...assetValuations);
49
+ return [valuation, averageAssetValuation == null ? void 0 : averageAssetValuation.toString()];
50
+ })
51
+ );
52
+ return [token, { value }];
53
+ })
54
+ );
55
+ return assets;
56
+ };
57
+
58
+ // src/lib/divineCoinGeckoPrices.ts
2
59
  import { CryptoMarketAssetSchema } from "@xyo-network/crypto-asset-payload-plugin";
3
60
  import { PayloadBuilder } from "@xyo-network/payload-builder";
4
- import { average } from "./average";
5
- import { divineCoinGeckoPrices } from "./divineCoinGeckoPrices";
6
- import { divineUniswapPrices } from "./divineUniswapPrices";
7
- const schema = CryptoMarketAssetSchema;
8
- const divinePrices = (coinGeckoPayload, uniswapPayload) => {
61
+ var schema = CryptoMarketAssetSchema;
62
+ var valuationExists = (value) => {
63
+ return !!value[1];
64
+ };
65
+ var otherValueExists = (value) => {
66
+ const possiblyNumber = value[1];
67
+ return typeof possiblyNumber === "number" && !isNaN(possiblyNumber);
68
+ };
69
+ var divineCoinGeckoPrices = (payload) => {
70
+ const assets = payload && (payload == null ? void 0 : payload.assets) ? Object.fromEntries(
71
+ Object.entries(payload.assets).filter(valuationExists).map(([asset, valuation]) => {
72
+ const value = Object.fromEntries(
73
+ Object.entries(valuation).filter(otherValueExists).map(([symbol, price]) => [symbol.toLowerCase(), price == null ? void 0 : price.toString()])
74
+ );
75
+ return [asset, { value }];
76
+ })
77
+ ) : {};
78
+ const timestamp = Date.now();
79
+ return new PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
80
+ };
81
+
82
+ // src/lib/divineUniswapPrices.ts
83
+ import { exists as exists2 } from "@xylabs/exists";
84
+ import { CryptoMarketAssetSchema as CryptoMarketAssetSchema2 } from "@xyo-network/crypto-asset-payload-plugin";
85
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
86
+ var schema2 = CryptoMarketAssetSchema2;
87
+ var mapUniswapToken = (symbol) => {
88
+ if (symbol.toLowerCase() === "wbtc")
89
+ return "btc";
90
+ if (symbol.toLowerCase() === "weth")
91
+ return "eth";
92
+ if (symbol.toLowerCase() === "usdt")
93
+ return "usd";
94
+ return symbol.toLowerCase();
95
+ };
96
+ var pairsContainingToken = (uniswapPayload, token) => {
97
+ return uniswapPayload == null ? void 0 : uniswapPayload.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(exists2);
98
+ };
99
+ var tokensFromPairs = (pairs) => {
100
+ return pairs.map((p) => p.tokens).flat().map((t) => t.symbol.toLowerCase());
101
+ };
102
+ var valuesFromTokenPairs = (tokensPairs, token) => {
103
+ return Object.fromEntries(
104
+ tokensPairs.map((pair) => {
105
+ var _a, _b;
106
+ const current = (_a = pair.filter((p) => p.symbol.toLowerCase() === token)) == null ? void 0 : _a[0];
107
+ const other = (_b = pair.filter((p) => p.symbol.toLowerCase() !== token)) == null ? void 0 : _b[0];
108
+ return [other.symbol.toLowerCase(), current.value.toString()];
109
+ }).map((x) => [mapUniswapToken(x[0]), x[1]])
110
+ );
111
+ };
112
+ var divineUniswapPrices = (uniswapPayload) => {
113
+ let assets = {};
114
+ if (uniswapPayload) {
115
+ const tokens = new Set(tokensFromPairs(uniswapPayload.pairs));
116
+ assets = Object.fromEntries(
117
+ [...tokens].map((token) => {
118
+ const pairs = pairsContainingToken(uniswapPayload, token);
119
+ const value = valuesFromTokenPairs(pairs, token);
120
+ const assetInfo = { value };
121
+ return [token, assetInfo];
122
+ })
123
+ );
124
+ }
125
+ const timestamp = Date.now();
126
+ return new PayloadBuilder2({ schema: schema2 }).fields({ assets, timestamp }).build();
127
+ };
128
+
129
+ // src/lib/divinePrices.ts
130
+ var schema3 = CryptoMarketAssetSchema3;
131
+ var divinePrices = (coinGeckoPayload, uniswapPayload) => {
9
132
  const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload);
10
133
  const uniswapPrices = divineUniswapPrices(uniswapPayload);
11
- const prices = [uniswapPayload, coinGeckoPayload].some(exists);
134
+ const prices = [uniswapPayload, coinGeckoPayload].some(exists3);
12
135
  const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {};
13
136
  const timestamp = Date.now();
14
- return new PayloadBuilder({ schema }).fields({ assets, timestamp }).build();
137
+ return new PayloadBuilder3({ schema: schema3 }).fields({ assets, timestamp }).build();
15
138
  };
16
139
  export {
17
140
  divinePrices
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/divinePrices.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { average } from './average'\nimport { divineCoinGeckoPrices } from './divineCoinGeckoPrices'\nimport { divineUniswapPrices } from './divineUniswapPrices'\n\nconst schema = CryptoMarketAssetSchema\n\nexport const divinePrices = (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): CryptoMarketAssetPayload => {\n const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n"],"mappings":"AAAA,SAAS,cAAc;AAEvB,SAAmC,+BAA+B;AAClE,SAAS,sBAAsB;AAG/B,SAAS,eAAe;AACxB,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AAEpC,MAAM,SAAS;AAER,MAAM,eAAe,CAC1B,kBACA,mBAC6B;AAC7B,QAAM,kBAAkB,sBAAsB,gBAAgB;AAC9D,QAAM,gBAAgB,oBAAoB,cAAc;AACxD,QAAM,SAAS,CAAC,gBAAgB,gBAAgB,EAAE,KAAK,MAAM;AAC7D,QAAM,SAAS,SAAS,QAAQ,iBAAiB,aAAa,IAAI,CAAC;AACnE,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,eAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/divinePrices.ts","../../../src/lib/average.ts","../../../src/lib/divineCoinGeckoPrices.ts","../../../src/lib/divineUniswapPrices.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { CoingeckoCryptoMarketPayload } from '@xyo-network/coingecko-crypto-market-payload-plugin'\nimport { CryptoMarketAssetPayload, CryptoMarketAssetSchema } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { average } from './average'\nimport { divineCoinGeckoPrices } from './divineCoinGeckoPrices'\nimport { divineUniswapPrices } from './divineUniswapPrices'\n\nconst schema = CryptoMarketAssetSchema\n\nexport const divinePrices = (\n coinGeckoPayload: CoingeckoCryptoMarketPayload | undefined,\n uniswapPayload: UniswapCryptoMarketPayload | undefined,\n): CryptoMarketAssetPayload => {\n const coinGeckoPrices = divineCoinGeckoPrices(coinGeckoPayload)\n const uniswapPrices = divineUniswapPrices(uniswapPayload)\n const prices = [uniswapPayload, coinGeckoPayload].some(exists)\n const assets = prices ? average(coinGeckoPrices, uniswapPrices) : {}\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n","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"],"mappings":";AAAA,SAAS,UAAAA,eAAc;AAEvB,SAAmC,2BAAAC,gCAA+B;AAClE,SAAS,kBAAAC,uBAAsB;;;ACH/B,SAAS,cAAc;AAGvB,IAAM,WAAW,CAAC,QAA2C;AAC3D,SAAO,QAAQ;AACjB;AAEA,IAAM,yBAAyB,CAAC,UAAkD;AAChF,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,SAAS,WAAW,KAAK;AAC/B,SAAO,MAAM,MAAM,IAAI,SAAY;AACrC;AAEA,IAAM,4BAA4B,IAAI,WAAuD;AAC3F,QAAM,UAAU,OAAO,IAAI,sBAAsB,EAAE,OAAO,QAAQ;AAClE,SAAO,QAAQ,SAAS,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,GAAG,CAAC,IAAI,QAAQ,SAAS;AACpF;AAEO,IAAM,UAAU,IAAI,UAA+E;AAExG,QAAM,WAAW,MAAM,OAAO,MAAM;AACpC,QAAM,SAAS,IAAI,IAAW,SAAS,IAAI,CAAC,YAAY,OAAO,KAAK,QAAQ,MAAM,EAAE,IAAW,CAAC,MAAM,CAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEpI,QAAM,aAAa,IAAI;AAAA,IACrB,CAAC,GAAG,MAAM,EACP,IAAI,CAAC,UAAU;AACd,YAAM,YAAY,SAAS,IAAI,CAAC,MAAG;AA1B3C;AA0B8C,uBAAE,WAAF,mBAAW;AAAA,OAAM,EAAE,OAAO,MAAM;AACtE,YAAM,aAAa,IAAI;AAAA,QACrB,UACG,IAAI,CAAC,MAAM,OAAO,KAAK,EAAE,KAAK,CAAgC,EAC9D,QAAQ,CAAC,MAAM,CAAC,EAChB,OAAO,MAAM;AAAA,MAClB;AACA,aAAO,CAAC,GAAG,UAAU;AAAA,IACvB,CAAC,EACA,QAAQ,CAAC,MAAM,CAAC;AAAA,EACrB;AAEA,QAAM,SAAoC,OAAO;AAAA,IAC/C,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,YAAM,YAAY,SAAS,IAAI,CAAC,MAAG;AAxCzC;AAwC4C,uBAAE,WAAF,mBAAW;AAAA,OAAM,EAAE,OAAO,MAAM;AACtE,YAAM,QAAQ,OAAO;AAAA,QACnB,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,cAAc;AACjC,gBAAM,kBAAkB,UAAU,IAAI,CAAC,SAAM;AA3CvD;AA2C0D,8BAAK,UAAL,mBAAa;AAAA,WAAU;AACvE,gBAAM,wBAAwB,0BAA0B,GAAG,eAAe;AAC1E,iBAAO,CAAC,WAAW,+DAAuB,UAAU;AAAA,QACtD,CAAC;AAAA,MACH;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;ACnDA,SAA8C,+BAA+B;AAC7E,SAAS,sBAAsB;AAE/B,IAAM,SAAS;AAEf,IAAM,kBAAkB,CAAC,UAAqH;AAC5I,SAAO,CAAC,CAAC,MAAM,CAAC;AAClB;AAEA,IAAM,mBAAmB,CAAC,UAAmE;AAC3F,QAAM,iBAAiB,MAAM,CAAC;AAC9B,SAAO,OAAO,mBAAmB,YAAY,CAAC,MAAM,cAAc;AACpE;AAEO,IAAM,wBAAwB,CAAC,YAAgF;AACpH,QAAM,SACJ,YAAW,mCAAS,UAChB,OAAO;AAAA,IACL,OAAO,QAAQ,QAAQ,MAAM,EAC1B,OAAO,eAAe,EACtB,IAAI,CAAC,CAAC,OAAO,SAAS,MAAM;AAC3B,YAAM,QAAQ,OAAO;AAAA,QACnB,OAAO,QAAQ,SAAS,EACrB,OAAO,gBAAgB,EACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,YAAY,GAAG,+BAAO,UAAU,CAAC;AAAA,MACvE;AACA,aAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1B,CAAC;AAAA,EACL,IACA,CAAC;AACP,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,eAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;;;ACjCA,SAAS,UAAAC,eAAc;AACvB,SAA8C,2BAAAC,gCAA4D;AAC1G,SAAS,kBAAAC,uBAAsB;AAG/B,IAAMC,UAASF;AAEf,IAAM,kBAAkB,CAAC,WAAqC;AAG5D,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,SAAO,OAAO,YAAY;AAC5B;AAEA,IAAM,uBAAuB,CAAC,gBAA4C,UAAiB;AACzF,SAAO,iDAAgB,MACpB,IAAI,CAAC,MAAM,EAAE,QACb,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,GAC5D,OAAOD;AACZ;AAEA,IAAM,kBAAkB,CAAC,UAA+B;AACtD,SAAO,MACJ,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,KAAK,EACL,IAAI,CAAC,MAAM,EAAE,OAAO,YAAY,CAAU;AAC/C;AAEA,IAAM,uBAAuB,CAAC,aAAqC,UAA6B;AAC9F,SAAO,OAAO;AAAA,IACZ,YACG,IAAI,CAAC,SAAS;AAjCrB;AAkCQ,YAAM,WAAU,UAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,MAAnD,mBAAuD;AACvE,YAAM,SAAQ,UAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,MAAnD,mBAAuD;AACrE,aAAO,CAAC,MAAM,OAAO,YAAY,GAAG,QAAQ,MAAM,SAAS,CAAC;AAAA,IAC9D,CAAC,EACA,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,EAC7C;AACF;AAEO,IAAM,sBAAsB,CAAC,mBAAqF;AACvH,MAAI,SAAwD,CAAC;AAC7D,MAAI,gBAAgB;AAClB,UAAM,SAAqB,IAAI,IAAI,gBAAgB,eAAe,KAAK,CAAC;AACxE,aAAS,OAAO;AAAA,MACd,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,cAAM,QAAQ,qBAAqB,gBAAgB,KAAK;AACxD,cAAM,QAAoB,qBAAqB,OAAO,KAAK;AAC3D,cAAM,YAAuB,EAAE,MAAM;AACrC,eAAO,CAAC,OAAO,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAIE,gBAAyC,EAAE,QAAAC,QAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;;;AH/CA,IAAMC,UAASC;AAER,IAAM,eAAe,CAC1B,kBACA,mBAC6B;AAC7B,QAAM,kBAAkB,sBAAsB,gBAAgB;AAC9D,QAAM,gBAAgB,oBAAoB,cAAc;AACxD,QAAM,SAAS,CAAC,gBAAgB,gBAAgB,EAAE,KAAKC,OAAM;AAC7D,QAAM,SAAS,SAAS,QAAQ,iBAAiB,aAAa,IAAI,CAAC;AACnE,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAIC,gBAAyC,EAAE,QAAAH,QAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":["exists","CryptoMarketAssetSchema","PayloadBuilder","exists","CryptoMarketAssetSchema","PayloadBuilder","schema","schema","CryptoMarketAssetSchema","exists","PayloadBuilder"]}
@@ -0,0 +1,4 @@
1
+ import { CryptoMarketAssetPayload } from '@xyo-network/crypto-asset-payload-plugin';
2
+ import { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin';
3
+ export declare const divineUniswapPrices: (uniswapPayload: UniswapCryptoMarketPayload | undefined) => CryptoMarketAssetPayload;
4
+ //# sourceMappingURL=divineUniswapPrices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divineUniswapPrices.d.ts","sourceRoot":"","sources":["../../../src/lib/divineUniswapPrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,wBAAwB,EAAwD,MAAM,0CAA0C,CAAA;AAEpJ,OAAO,EAAE,0BAA0B,EAAyC,MAAM,mDAAmD,CAAA;AAuCrI,eAAO,MAAM,mBAAmB,mBAAoB,0BAA0B,GAAG,SAAS,KAAG,wBAe5F,CAAA"}
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/lib/divineUniswapPrices.ts
19
21
  var divineUniswapPrices_exports = {};
20
22
  __export(divineUniswapPrices_exports, {
21
23
  divineUniswapPrices: () => divineUniswapPrices
@@ -24,8 +26,8 @@ module.exports = __toCommonJS(divineUniswapPrices_exports);
24
26
  var import_exists = require("@xylabs/exists");
25
27
  var import_crypto_asset_payload_plugin = require("@xyo-network/crypto-asset-payload-plugin");
26
28
  var import_payload_builder = require("@xyo-network/payload-builder");
27
- const schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
28
- const mapUniswapToken = (symbol) => {
29
+ var schema = import_crypto_asset_payload_plugin.CryptoMarketAssetSchema;
30
+ var mapUniswapToken = (symbol) => {
29
31
  if (symbol.toLowerCase() === "wbtc")
30
32
  return "btc";
31
33
  if (symbol.toLowerCase() === "weth")
@@ -34,22 +36,23 @@ const mapUniswapToken = (symbol) => {
34
36
  return "usd";
35
37
  return symbol.toLowerCase();
36
38
  };
37
- const pairsContainingToken = (uniswapPayload, token) => {
38
- return uniswapPayload?.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(import_exists.exists);
39
+ var pairsContainingToken = (uniswapPayload, token) => {
40
+ return uniswapPayload == null ? void 0 : uniswapPayload.pairs.map((p) => p.tokens).filter((p) => p.some((x) => x.symbol.toLowerCase() === token)).filter(import_exists.exists);
39
41
  };
40
- const tokensFromPairs = (pairs) => {
42
+ var tokensFromPairs = (pairs) => {
41
43
  return pairs.map((p) => p.tokens).flat().map((t) => t.symbol.toLowerCase());
42
44
  };
43
- const valuesFromTokenPairs = (tokensPairs, token) => {
45
+ var valuesFromTokenPairs = (tokensPairs, token) => {
44
46
  return Object.fromEntries(
45
47
  tokensPairs.map((pair) => {
46
- const current = pair.filter((p) => p.symbol.toLowerCase() === token)?.[0];
47
- const other = pair.filter((p) => p.symbol.toLowerCase() !== token)?.[0];
48
+ var _a, _b;
49
+ const current = (_a = pair.filter((p) => p.symbol.toLowerCase() === token)) == null ? void 0 : _a[0];
50
+ const other = (_b = pair.filter((p) => p.symbol.toLowerCase() !== token)) == null ? void 0 : _b[0];
48
51
  return [other.symbol.toLowerCase(), current.value.toString()];
49
52
  }).map((x) => [mapUniswapToken(x[0]), x[1]])
50
53
  );
51
54
  };
52
- const divineUniswapPrices = (uniswapPayload) => {
55
+ var divineUniswapPrices = (uniswapPayload) => {
53
56
  let assets = {};
54
57
  if (uniswapPayload) {
55
58
  const tokens = new Set(tokensFromPairs(uniswapPayload.pairs));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/divineUniswapPrices.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema, Currency, Token, ValueBasis } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload, UniswapCryptoPair, UniswapCryptoToken } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nconst schema = CryptoMarketAssetSchema\n\nconst mapUniswapToken = (symbol: string): Token | Currency => {\n // TODO: Actually calculate the value of the token/stablecoin based on others\n // to weed out individual fluctuations in price\n if (symbol.toLowerCase() === 'wbtc') return 'btc'\n if (symbol.toLowerCase() === 'weth') return 'eth'\n if (symbol.toLowerCase() === 'usdt') return 'usd'\n return symbol.toLowerCase() as Token\n}\n\nconst pairsContainingToken = (uniswapPayload: UniswapCryptoMarketPayload, token: Token) => {\n return uniswapPayload?.pairs\n .map((p) => p.tokens)\n .filter((p) => p.some((x) => x.symbol.toLowerCase() === token))\n .filter(exists)\n}\n\nconst tokensFromPairs = (pairs: UniswapCryptoPair[]) => {\n return pairs\n .map((p) => p.tokens)\n .flat()\n .map((t) => t.symbol.toLowerCase() as Token)\n}\n\nconst valuesFromTokenPairs = (tokensPairs: UniswapCryptoToken[][], token: Token): ValueBasis => {\n return Object.fromEntries(\n tokensPairs\n .map((pair) => {\n const current = pair.filter((p) => p.symbol.toLowerCase() === token)?.[0]\n const other = pair.filter((p) => p.symbol.toLowerCase() !== token)?.[0]\n return [other.symbol.toLowerCase(), current.value.toString()]\n })\n .map((x) => [mapUniswapToken(x[0]), x[1]]),\n )\n}\n\nexport const divineUniswapPrices = (uniswapPayload: UniswapCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n let assets: Partial<Record<Token, AssetInfo | undefined>> = {}\n if (uniswapPayload) {\n const tokens: Set<Token> = new Set(tokensFromPairs(uniswapPayload.pairs))\n assets = Object.fromEntries(\n [...tokens].map((token) => {\n const pairs = pairsContainingToken(uniswapPayload, token)\n const value: ValueBasis = valuesFromTokenPairs(pairs, token)\n const assetInfo: AssetInfo = { value }\n return [token, assetInfo]\n }),\n )\n }\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AACvB,yCAA0G;AAC1G,6BAA+B;AAG/B,MAAM,SAAS;AAEf,MAAM,kBAAkB,CAAC,WAAqC;AAG5D,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,SAAO,OAAO,YAAY;AAC5B;AAEA,MAAM,uBAAuB,CAAC,gBAA4C,UAAiB;AACzF,SAAO,gBAAgB,MACpB,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,CAAC,EAC7D,OAAO,oBAAM;AAClB;AAEA,MAAM,kBAAkB,CAAC,UAA+B;AACtD,SAAO,MACJ,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,KAAK,EACL,IAAI,CAAC,MAAM,EAAE,OAAO,YAAY,CAAU;AAC/C;AAEA,MAAM,uBAAuB,CAAC,aAAqC,UAA6B;AAC9F,SAAO,OAAO;AAAA,IACZ,YACG,IAAI,CAAC,SAAS;AACb,YAAM,UAAU,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,IAAI,CAAC;AACxE,YAAM,QAAQ,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,IAAI,CAAC;AACtE,aAAO,CAAC,MAAM,OAAO,YAAY,GAAG,QAAQ,MAAM,SAAS,CAAC;AAAA,IAC9D,CAAC,EACA,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,EAC7C;AACF;AAEO,MAAM,sBAAsB,CAAC,mBAAqF;AACvH,MAAI,SAAwD,CAAC;AAC7D,MAAI,gBAAgB;AAClB,UAAM,SAAqB,IAAI,IAAI,gBAAgB,eAAe,KAAK,CAAC;AACxE,aAAS,OAAO;AAAA,MACd,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,cAAM,QAAQ,qBAAqB,gBAAgB,KAAK;AACxD,cAAM,QAAoB,qBAAqB,OAAO,KAAK;AAC3D,cAAM,YAAuB,EAAE,MAAM;AACrC,eAAO,CAAC,OAAO,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,sCAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/divineUniswapPrices.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { AssetInfo, CryptoMarketAssetPayload, CryptoMarketAssetSchema, Currency, Token, ValueBasis } from '@xyo-network/crypto-asset-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { UniswapCryptoMarketPayload, UniswapCryptoPair, UniswapCryptoToken } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nconst schema = CryptoMarketAssetSchema\n\nconst mapUniswapToken = (symbol: string): Token | Currency => {\n // TODO: Actually calculate the value of the token/stablecoin based on others\n // to weed out individual fluctuations in price\n if (symbol.toLowerCase() === 'wbtc') return 'btc'\n if (symbol.toLowerCase() === 'weth') return 'eth'\n if (symbol.toLowerCase() === 'usdt') return 'usd'\n return symbol.toLowerCase() as Token\n}\n\nconst pairsContainingToken = (uniswapPayload: UniswapCryptoMarketPayload, token: Token) => {\n return uniswapPayload?.pairs\n .map((p) => p.tokens)\n .filter((p) => p.some((x) => x.symbol.toLowerCase() === token))\n .filter(exists)\n}\n\nconst tokensFromPairs = (pairs: UniswapCryptoPair[]) => {\n return pairs\n .map((p) => p.tokens)\n .flat()\n .map((t) => t.symbol.toLowerCase() as Token)\n}\n\nconst valuesFromTokenPairs = (tokensPairs: UniswapCryptoToken[][], token: Token): ValueBasis => {\n return Object.fromEntries(\n tokensPairs\n .map((pair) => {\n const current = pair.filter((p) => p.symbol.toLowerCase() === token)?.[0]\n const other = pair.filter((p) => p.symbol.toLowerCase() !== token)?.[0]\n return [other.symbol.toLowerCase(), current.value.toString()]\n })\n .map((x) => [mapUniswapToken(x[0]), x[1]]),\n )\n}\n\nexport const divineUniswapPrices = (uniswapPayload: UniswapCryptoMarketPayload | undefined): CryptoMarketAssetPayload => {\n let assets: Partial<Record<Token, AssetInfo | undefined>> = {}\n if (uniswapPayload) {\n const tokens: Set<Token> = new Set(tokensFromPairs(uniswapPayload.pairs))\n assets = Object.fromEntries(\n [...tokens].map((token) => {\n const pairs = pairsContainingToken(uniswapPayload, token)\n const value: ValueBasis = valuesFromTokenPairs(pairs, token)\n const assetInfo: AssetInfo = { value }\n return [token, assetInfo]\n }),\n )\n }\n const timestamp = Date.now()\n return new PayloadBuilder<CryptoMarketAssetPayload>({ schema }).fields({ assets, timestamp }).build()\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AACvB,yCAA0G;AAC1G,6BAA+B;AAG/B,IAAM,SAAS;AAEf,IAAM,kBAAkB,CAAC,WAAqC;AAG5D,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,MAAI,OAAO,YAAY,MAAM;AAAQ,WAAO;AAC5C,SAAO,OAAO,YAAY;AAC5B;AAEA,IAAM,uBAAuB,CAAC,gBAA4C,UAAiB;AACzF,SAAO,iDAAgB,MACpB,IAAI,CAAC,MAAM,EAAE,QACb,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,GAC5D,OAAO;AACZ;AAEA,IAAM,kBAAkB,CAAC,UAA+B;AACtD,SAAO,MACJ,IAAI,CAAC,MAAM,EAAE,MAAM,EACnB,KAAK,EACL,IAAI,CAAC,MAAM,EAAE,OAAO,YAAY,CAAU;AAC/C;AAEA,IAAM,uBAAuB,CAAC,aAAqC,UAA6B;AAC9F,SAAO,OAAO;AAAA,IACZ,YACG,IAAI,CAAC,SAAS;AAjCrB;AAkCQ,YAAM,WAAU,UAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,MAAnD,mBAAuD;AACvE,YAAM,SAAQ,UAAK,OAAO,CAAC,MAAM,EAAE,OAAO,YAAY,MAAM,KAAK,MAAnD,mBAAuD;AACrE,aAAO,CAAC,MAAM,OAAO,YAAY,GAAG,QAAQ,MAAM,SAAS,CAAC;AAAA,IAC9D,CAAC,EACA,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,EAC7C;AACF;AAEO,IAAM,sBAAsB,CAAC,mBAAqF;AACvH,MAAI,SAAwD,CAAC;AAC7D,MAAI,gBAAgB;AAClB,UAAM,SAAqB,IAAI,IAAI,gBAAgB,eAAe,KAAK,CAAC;AACxE,aAAS,OAAO;AAAA,MACd,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,UAAU;AACzB,cAAM,QAAQ,qBAAqB,gBAAgB,KAAK;AACxD,cAAM,QAAoB,qBAAqB,OAAO,KAAK;AAC3D,cAAM,YAAuB,EAAE,MAAM;AACrC,eAAO,CAAC,OAAO,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,IAAI,sCAAyC,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,UAAU,CAAC,EAAE,MAAM;AACtG;","names":[]}