@alphafi/alphafi-sdk 0.0.23 → 0.0.24

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 (37) hide show
  1. package/dist/cjs/common/coins.d.ts.map +1 -1
  2. package/dist/cjs/common/coins.js +12 -0
  3. package/dist/cjs/common/coins.js.map +1 -1
  4. package/dist/cjs/common/constants.d.ts.map +1 -1
  5. package/dist/cjs/common/constants.js +21 -3
  6. package/dist/cjs/common/constants.js.map +1 -1
  7. package/dist/cjs/common/maps.d.ts.map +1 -1
  8. package/dist/cjs/common/maps.js +26 -0
  9. package/dist/cjs/common/maps.js.map +1 -1
  10. package/dist/cjs/common/pyth.d.ts.map +1 -1
  11. package/dist/cjs/common/pyth.js.map +1 -1
  12. package/dist/cjs/common/types.d.ts.map +1 -1
  13. package/dist/cjs/common/types.js.map +1 -1
  14. package/dist/cjs/utils/hop.js +2 -2
  15. package/dist/cjs/utils/hop.js.map +1 -1
  16. package/dist/cjs/utils/prices.d.ts.map +1 -1
  17. package/dist/cjs/utils/prices.js +7 -94
  18. package/dist/cjs/utils/prices.js.map +1 -1
  19. package/dist/esm/common/coins.d.ts.map +1 -1
  20. package/dist/esm/common/coins.js +12 -0
  21. package/dist/esm/common/coins.js.map +1 -1
  22. package/dist/esm/common/constants.d.ts.map +1 -1
  23. package/dist/esm/common/constants.js +21 -3
  24. package/dist/esm/common/constants.js.map +1 -1
  25. package/dist/esm/common/maps.d.ts.map +1 -1
  26. package/dist/esm/common/maps.js +26 -0
  27. package/dist/esm/common/maps.js.map +1 -1
  28. package/dist/esm/common/pyth.d.ts.map +1 -1
  29. package/dist/esm/common/pyth.js.map +1 -1
  30. package/dist/esm/common/types.d.ts.map +1 -1
  31. package/dist/esm/common/types.js.map +1 -1
  32. package/dist/esm/utils/hop.js +2 -2
  33. package/dist/esm/utils/hop.js.map +1 -1
  34. package/dist/esm/utils/prices.d.ts.map +1 -1
  35. package/dist/esm/utils/prices.js +7 -94
  36. package/dist/esm/utils/prices.js.map +1 -1
  37. package/package.json +1 -1
@@ -72,58 +72,14 @@ export async function getLatestTokenPricePairs(pairs) {
72
72
  }
73
73
  export async function getLatestPrice(pair) {
74
74
  let price = undefined;
75
- if (pair === "ALPHA/USD") {
76
- const alphaPrice = await getAlphaPrice();
77
- if (alphaPrice) {
78
- price = `${alphaPrice}`;
75
+ try {
76
+ [price] = await fetchPricesFromAlphaAPI([pair]);
77
+ if (!price) {
78
+ console.log(`Failed to get price for pair ${pair}`);
79
79
  }
80
80
  }
81
- else if (pair === "USDY/USD") {
82
- const usdyPrice = await getUSDYPrice();
83
- if (usdyPrice) {
84
- price = `${usdyPrice}`;
85
- }
86
- }
87
- else if (pair === "BUCK/USD") {
88
- const buckPrice = await getBUCKPrice();
89
- if (buckPrice) {
90
- price = `${buckPrice}`;
91
- }
92
- }
93
- else if (pair === "WSOL/USD") {
94
- const wsolPrice = await getWsolPrice();
95
- if (wsolPrice) {
96
- price = `${wsolPrice}`;
97
- }
98
- }
99
- else if (pair === "BLUB/USD") {
100
- const blubPrice = await getBlubPrice();
101
- if (blubPrice) {
102
- price = `${blubPrice}`;
103
- }
104
- }
105
- else if (pair === "FUD/USD") {
106
- const fudPrice = await getFudPrice();
107
- if (fudPrice) {
108
- price = `${fudPrice}`;
109
- }
110
- }
111
- else if (pair === "WUSDC/USD") {
112
- const wusdcPrice = await getWUSDCPrice();
113
- if (wusdcPrice) {
114
- price = `${wusdcPrice}`;
115
- }
116
- }
117
- else {
118
- try {
119
- price = await fetchPriceFromAlphaAPI(pair);
120
- if (!price) {
121
- console.log(`Failed to get price for pair ${pair}`);
122
- }
123
- }
124
- catch (error) {
125
- console.error(`Error in getPrice for pair ${pair}:`, error);
126
- }
81
+ catch (error) {
82
+ console.error(`Error in getPrice for pair ${pair}:`, error);
127
83
  }
128
84
  return price;
129
85
  }
@@ -135,51 +91,8 @@ function generateCacheKeyForPairs(pairs) {
135
91
  }
136
92
  const pythCache = new SimpleCache(10000); // cache TTL = 10 seconds
137
93
  const pythPromiseCache = new SimpleCache(10000);
138
- export async function fetchPriceFromAlphaAPI(pair) {
139
- let pythPricePair = undefined;
140
- const priceCacheKey = generateCacheKey(pair);
141
- if (debug)
142
- console.log(`Key generated for ${pair}: ${priceCacheKey}`);
143
- const cachedResponse = pythCache.get(priceCacheKey);
144
- if (cachedResponse) {
145
- if (debug)
146
- console.log(`From CACHE for ${pair}`, cachedResponse);
147
- pythPricePair = cachedResponse;
148
- }
149
- else {
150
- let cachedPromise = pythPromiseCache.get(priceCacheKey);
151
- if (!cachedPromise) {
152
- if (debug)
153
- console.log(`https://api.alphafi.xyz/alpha/fetchPrice?pair=${pair}`);
154
- cachedPromise = fetch(`https://api.alphafi.xyz/alpha/fetchPrice?pair=${pair}`)
155
- .then(async (response) => {
156
- if (!response.ok) {
157
- throw new Error(`HTTP error! status: ${response.status}`);
158
- }
159
- const data = (await response.json()); // Parse the JSON response
160
- if (debug)
161
- console.log(`From SERVER for ${pair}`, data);
162
- pythCache.set(priceCacheKey, data); // Cache the response
163
- pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache
164
- return data;
165
- })
166
- .catch((error) => {
167
- pythPromiseCache.delete(priceCacheKey); // Ensure the promise is removed on error
168
- throw error;
169
- });
170
- pythPromiseCache.set(priceCacheKey, cachedPromise);
171
- }
172
- pythPricePair = await cachedPromise;
173
- }
174
- if (pythPricePair) {
175
- return pythPricePair.price;
176
- }
177
- else {
178
- throw new Error(`Price not found for pair: ${pair}`);
179
- }
180
- }
181
94
  const pythPromisesCache = new SimpleCache(10000);
182
- async function fetchPricesFromAlphaAPI(pairs) {
95
+ export async function fetchPricesFromAlphaAPI(pairs) {
183
96
  const prices = new Array(pairs.length).fill(undefined);
184
97
  const pairsToFetch = [];
185
98
  const pairsToFetchIndexes = [];
@@ -1 +1 @@
1
- {"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,KAAK,GAAG,KAAK,CAAC;AAEpB,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAwB;IAExB,MAAM,MAAM,GAA2B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CACjE,SAAS,CACV,CAAC;IACF,MAAM,YAAY,GAAsB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAmC,IAAI,GAAG,EAAE,CAAC;IAE3D,wEAAwE;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,KAAM,WAA+B,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;YACzC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,CAAC;aAAM,IAAI,IAAI,KAAM,UAA8B,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;YACvC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC;aAAM,IAAI,IAAI,KAAM,UAA8B,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;YACvC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC;aAAM,IAAI,IAAI,KAAM,UAA8B,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;YACvC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC;aAAM,IAAI,IAAI,KAAM,SAA6B,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;YACrC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnD,CAAC;aAAM,IAAI,IAAI,KAAM,UAA8B,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;YACvC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC;aAAM,IAAI,IAAI,KAAM,WAA+B,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;YACzC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzB,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,YAAY,CAAC,CAAC;YAClE,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC/B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACpC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBACxB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,sCAAsC,YAAY,GAAG,EACrD,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAwB;IAExB,MAAM,QAAQ,GAA0C,EAAE,CAAC;IAE3D,kDAAkD;IAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;IAE5C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAqB;IAErB,IAAI,KAAK,GAAuB,SAAS,CAAC;IAE1C,IAAI,IAAI,KAAM,WAA+B,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,GAAG,GAAG,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAM,UAA8B,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,GAAG,GAAG,SAAS,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAM,UAA8B,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,GAAG,GAAG,SAAS,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAM,UAA8B,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,GAAG,GAAG,SAAS,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAM,UAA8B,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,GAAG,GAAG,SAAS,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAM,SAA6B,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,GAAG,GAAG,QAAQ,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,KAAM,WAA+B,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,GAAG,GAAG,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAqB;IAC7C,OAAO,QAAQ,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAwB;IACxD,OAAO,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACnC,CAAC;AAOD,MAAM,SAAS,GAAG,IAAI,WAAW,CAAgB,KAAK,CAAC,CAAC,CAAC,yBAAyB;AAClF,MAAM,gBAAgB,GAAG,IAAI,WAAW,CAAyB,KAAK,CAAC,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY;IAEZ,IAAI,aAAa,GAA8B,SAAS,CAAC;IAEzD,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAuB,CAAC,CAAC;IAChE,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,KAAK,aAAa,EAAE,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEpD,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;QACjE,aAAa,GAAG,cAAc,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,IAAI,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAExD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,IAAI,KAAK;gBACP,OAAO,CAAC,GAAG,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;YACvE,aAAa,GAAG,KAAK,CACnB,iDAAiD,IAAI,EAAE,CACxD;iBACE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACvB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC,CAAC,0BAA0B;gBACjF,IAAI,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;gBACxD,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAqB;gBACzD,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,oCAAoC;gBAC5E,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,yCAAyC;gBACjF,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;YACL,gBAAgB,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,aAAa,GAAG,MAAM,aAAa,CAAC;IACtC,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC,KAAK,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,IAAI,WAAW,CAA2B,KAAK,CAAC,CAAC;AAE3E,KAAK,UAAU,uBAAuB,CAAC,KAAe;IACpD,MAAM,MAAM,GAA2B,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CACjE,SAAS,CACV,CAAC;IACF,MAAM,YAAY,GAAsB,EAAE,CAAC;IAC3C,MAAM,mBAAmB,GAAa,EAAE,CAAC;IAEzC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAuB,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEpD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,IAAuB,CAAC,CAAC;YAC3C,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,eAAe,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,kBAAkB,GAAG,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAEhE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,IAAI,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzE,kBAAkB,GAAG,KAAK,CACxB,mDAAmD,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC5E;iBACE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACvB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAoB,CAAC,CAAC,0BAA0B;gBACnF,IAAI,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;gBAChE,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE;oBAC9B,MAAM,aAAa,GAAG,gBAAgB,CACpC,SAAS,CAAC,IAAuB,CAClC,CAAC;oBACF,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,sBAAsB;oBAC/D,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,oCAAoC;oBAC5E,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,qCAAqC;gBAC3F,CAAC,CAAC,CAAC;gBACH,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,mCAAmC;gBAC9E,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,OAAO,CAAC,KAAK,CACX,mCAAmC,YAAY,GAAG,EAClD,KAAK,CACN,CAAC;gBACF,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,yCAAyC;gBACpF,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;YACL,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC;QAC/C,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE;YACvC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAkB,CAAC;AAC5B,CAAC","sourcesContent":["import { PythPriceIdPair } from \"../common/pyth.js\";\nimport { getAlphaPrice, getBUCKPrice, getUSDYPrice } from \"./clmm/prices.js\";\nimport {\n getBlubPrice,\n getWsolPrice,\n getFudPrice,\n getWUSDCPrice,\n} from \"./hop.js\";\nimport { SimpleCache } from \"./simpleCache.js\";\n\nconst debug = false;\n\nexport async function getLatestPrices(\n pairs: PythPriceIdPair[],\n): Promise<(string | undefined)[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const indexMap: Map<PythPriceIdPair, number[]> = new Map();\n\n // Initialize indexMap with the indices of pairs that need to be fetched\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (pair === (\"ALPHA/USD\" as PythPriceIdPair)) {\n const alphaPrice = await getAlphaPrice();\n prices[i] = alphaPrice ? `${alphaPrice}` : undefined;\n } else if (pair === (\"USDY/USD\" as PythPriceIdPair)) {\n const usdyPrice = await getUSDYPrice();\n prices[i] = usdyPrice ? `${usdyPrice}` : undefined;\n } else if (pair === (\"BUCK/USD\" as PythPriceIdPair)) {\n const buckPrice = await getBUCKPrice();\n prices[i] = buckPrice ? `${buckPrice}` : undefined;\n } else if (pair === (\"WSOL/USD\" as PythPriceIdPair)) {\n const wsolPrice = await getWsolPrice();\n prices[i] = wsolPrice ? `${wsolPrice}` : undefined;\n } else if (pair === (\"FUD/USD\" as PythPriceIdPair)) {\n const fudPrice = await getFudPrice();\n prices[i] = fudPrice ? `${fudPrice}` : undefined;\n } else if (pair === (\"BLUB/USD\" as PythPriceIdPair)) {\n const blubPrice = await getBlubPrice();\n prices[i] = blubPrice ? `${blubPrice}` : undefined;\n } else if (pair === (\"WUSDC/USD\" as PythPriceIdPair)) {\n const wusdcPrice = await getWUSDCPrice();\n prices[i] = wusdcPrice ? `${wusdcPrice}` : undefined;\n } else {\n pairsToFetch.push(pair);\n if (!indexMap.has(pair)) {\n indexMap.set(pair, []);\n }\n indexMap.get(pair)!.push(i);\n }\n }\n\n if (pairsToFetch.length > 0) {\n try {\n const fetchedPrices = await fetchPricesFromAlphaAPI(pairsToFetch);\n pairsToFetch.forEach((pair, i) => {\n const price = fetchedPrices[i];\n indexMap.get(pair)!.forEach((index) => {\n prices[index] = price;\n });\n });\n } catch (error) {\n console.error(\n `Error in getLatestPrices for pairs ${pairsToFetch}:`,\n error,\n );\n }\n }\n\n return prices;\n}\n\nexport async function getLatestTokenPricePairs(\n pairs: PythPriceIdPair[],\n): Promise<{ [key: string]: string | undefined }> {\n const priceMap: { [key: string]: string | undefined } = {};\n\n // Use getLatestPrices to fetch all prices at once\n const prices = await getLatestPrices(pairs);\n\n pairs.forEach((pair, index) => {\n priceMap[pair] = prices[index];\n });\n\n return priceMap;\n}\n\nexport async function getLatestPrice(\n pair: PythPriceIdPair,\n): Promise<string | undefined> {\n let price: string | undefined = undefined;\n\n if (pair === (\"ALPHA/USD\" as PythPriceIdPair)) {\n const alphaPrice = await getAlphaPrice();\n if (alphaPrice) {\n price = `${alphaPrice}`;\n }\n } else if (pair === (\"USDY/USD\" as PythPriceIdPair)) {\n const usdyPrice = await getUSDYPrice();\n if (usdyPrice) {\n price = `${usdyPrice}`;\n }\n } else if (pair === (\"BUCK/USD\" as PythPriceIdPair)) {\n const buckPrice = await getBUCKPrice();\n if (buckPrice) {\n price = `${buckPrice}`;\n }\n } else if (pair === (\"WSOL/USD\" as PythPriceIdPair)) {\n const wsolPrice = await getWsolPrice();\n if (wsolPrice) {\n price = `${wsolPrice}`;\n }\n } else if (pair === (\"BLUB/USD\" as PythPriceIdPair)) {\n const blubPrice = await getBlubPrice();\n if (blubPrice) {\n price = `${blubPrice}`;\n }\n } else if (pair === (\"FUD/USD\" as PythPriceIdPair)) {\n const fudPrice = await getFudPrice();\n if (fudPrice) {\n price = `${fudPrice}`;\n }\n } else if (pair === (\"WUSDC/USD\" as PythPriceIdPair)) {\n const wusdcPrice = await getWUSDCPrice();\n if (wusdcPrice) {\n price = `${wusdcPrice}`;\n }\n } else {\n try {\n price = await fetchPriceFromAlphaAPI(pair);\n if (!price) {\n console.log(`Failed to get price for pair ${pair}`);\n }\n } catch (error) {\n console.error(`Error in getPrice for pair ${pair}:`, error);\n }\n }\n return price;\n}\n\nfunction generateCacheKey(pair: PythPriceIdPair) {\n return `pyth_${pair}`;\n}\n\nfunction generateCacheKeyForPairs(pairs: PythPriceIdPair[]) {\n return `pyth_${pairs.join(\"_\")}`;\n}\n\ninterface PythPricePair {\n pair: PythPriceIdPair;\n price: string;\n}\n\nconst pythCache = new SimpleCache<PythPricePair>(10000); // cache TTL = 10 seconds\nconst pythPromiseCache = new SimpleCache<Promise<PythPricePair>>(10000);\n\nexport async function fetchPriceFromAlphaAPI(\n pair: string,\n): Promise<string | undefined> {\n let pythPricePair: PythPricePair | undefined = undefined;\n\n const priceCacheKey = generateCacheKey(pair as PythPriceIdPair);\n if (debug) console.log(`Key generated for ${pair}: ${priceCacheKey}`);\n\n const cachedResponse = pythCache.get(priceCacheKey);\n\n if (cachedResponse) {\n if (debug) console.log(`From CACHE for ${pair}`, cachedResponse);\n pythPricePair = cachedResponse;\n } else {\n let cachedPromise = pythPromiseCache.get(priceCacheKey);\n\n if (!cachedPromise) {\n if (debug)\n console.log(`https://api.alphafi.xyz/alpha/fetchPrice?pair=${pair}`);\n cachedPromise = fetch(\n `https://api.alphafi.xyz/alpha/fetchPrice?pair=${pair}`,\n )\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as PythPricePair; // Parse the JSON response\n if (debug) console.log(`From SERVER for ${pair}`, data);\n pythCache.set(priceCacheKey, data); // Cache the response\n pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache\n return data;\n })\n .catch((error) => {\n pythPromiseCache.delete(priceCacheKey); // Ensure the promise is removed on error\n throw error;\n });\n pythPromiseCache.set(priceCacheKey, cachedPromise);\n }\n pythPricePair = await cachedPromise;\n }\n\n if (pythPricePair) {\n return pythPricePair.price;\n } else {\n throw new Error(`Price not found for pair: ${pair}`);\n }\n}\n\nconst pythPromisesCache = new SimpleCache<Promise<PythPricePair[]>>(10000);\n\nasync function fetchPricesFromAlphaAPI(pairs: string[]): Promise<string[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const pairsToFetchIndexes: number[] = [];\n\n pairs.forEach((pair, index) => {\n const priceCacheKey = generateCacheKey(pair as PythPriceIdPair);\n const cachedResponse = pythCache.get(priceCacheKey);\n\n if (cachedResponse) {\n if (debug) console.log(`From CACHE for ${pair}`);\n prices[index] = cachedResponse.price;\n } else {\n pairsToFetch.push(pair as PythPriceIdPair);\n pairsToFetchIndexes.push(index);\n }\n });\n\n if (pairsToFetch.length > 0) {\n const pairsToFetchKey = generateCacheKeyForPairs(pairsToFetch);\n let cachedPairsPromise = pythPromisesCache.get(pairsToFetchKey);\n\n if (!cachedPairsPromise) {\n if (debug) console.log(`Fetching prices for: ${pairsToFetch.join(\",\")}`);\n cachedPairsPromise = fetch(\n `https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairsToFetch.join(\",\")}`,\n )\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as PythPricePair[]; // Parse the JSON response\n if (debug) console.log(`From SERVER for ${pairsToFetch}`, data);\n data.forEach((pricePair, idx) => {\n const priceCacheKey = generateCacheKey(\n pricePair.pair as PythPriceIdPair,\n );\n pythCache.set(priceCacheKey, pricePair); // Cache each response\n pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache\n prices[pairsToFetchIndexes[idx]] = pricePair.price; // Set the price at the correct index\n });\n pythPromisesCache.delete(pairsToFetchKey); // Remove the promise for the array\n return data;\n })\n .catch((error) => {\n console.error(\n `Error fetching prices for pairs ${pairsToFetch}:`,\n error,\n );\n pythPromisesCache.delete(pairsToFetchKey); // Ensure the promise is removed on error\n throw error;\n });\n pythPromisesCache.set(pairsToFetchKey, cachedPairsPromise);\n }\n\n const fetchedPrices = await cachedPairsPromise;\n fetchedPrices.forEach((pricePair, idx) => {\n prices[pairsToFetchIndexes[idx]] = pricePair.price;\n });\n }\n\n return prices as string[];\n}\n"]}
1
+ {"version":3,"file":"prices.js","sourceRoot":"","sources":["../../../src/utils/prices.ts"],"names":[],"mappings":"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","sourcesContent":["import { PythPriceIdPair } from \"../common/pyth.js\";\nimport { getAlphaPrice, getBUCKPrice, getUSDYPrice } from \"./clmm/prices.js\";\nimport {\n getBlubPrice,\n getWsolPrice,\n getFudPrice,\n getWUSDCPrice,\n} from \"./hop.js\";\nimport { SimpleCache } from \"./simpleCache.js\";\n\nconst debug = false;\n\nexport async function getLatestPrices(\n pairs: PythPriceIdPair[],\n): Promise<(string | undefined)[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const indexMap: Map<PythPriceIdPair, number[]> = new Map();\n\n // Initialize indexMap with the indices of pairs that need to be fetched\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n if (pair === (\"ALPHA/USD\" as PythPriceIdPair)) {\n const alphaPrice = await getAlphaPrice();\n prices[i] = alphaPrice ? `${alphaPrice}` : undefined;\n } else if (pair === (\"USDY/USD\" as PythPriceIdPair)) {\n const usdyPrice = await getUSDYPrice();\n prices[i] = usdyPrice ? `${usdyPrice}` : undefined;\n } else if (pair === (\"BUCK/USD\" as PythPriceIdPair)) {\n const buckPrice = await getBUCKPrice();\n prices[i] = buckPrice ? `${buckPrice}` : undefined;\n } else if (pair === (\"WSOL/USD\" as PythPriceIdPair)) {\n const wsolPrice = await getWsolPrice();\n prices[i] = wsolPrice ? `${wsolPrice}` : undefined;\n } else if (pair === (\"FUD/USD\" as PythPriceIdPair)) {\n const fudPrice = await getFudPrice();\n prices[i] = fudPrice ? `${fudPrice}` : undefined;\n } else if (pair === (\"BLUB/USD\" as PythPriceIdPair)) {\n const blubPrice = await getBlubPrice();\n prices[i] = blubPrice ? `${blubPrice}` : undefined;\n } else if (pair === (\"WUSDC/USD\" as PythPriceIdPair)) {\n const wusdcPrice = await getWUSDCPrice();\n prices[i] = wusdcPrice ? `${wusdcPrice}` : undefined;\n } else {\n pairsToFetch.push(pair);\n if (!indexMap.has(pair)) {\n indexMap.set(pair, []);\n }\n indexMap.get(pair)!.push(i);\n }\n }\n\n if (pairsToFetch.length > 0) {\n try {\n const fetchedPrices = await fetchPricesFromAlphaAPI(pairsToFetch);\n pairsToFetch.forEach((pair, i) => {\n const price = fetchedPrices[i];\n indexMap.get(pair)!.forEach((index) => {\n prices[index] = price;\n });\n });\n } catch (error) {\n console.error(\n `Error in getLatestPrices for pairs ${pairsToFetch}:`,\n error,\n );\n }\n }\n\n return prices;\n}\n\nexport async function getLatestTokenPricePairs(\n pairs: PythPriceIdPair[],\n): Promise<{ [key: string]: string | undefined }> {\n const priceMap: { [key: string]: string | undefined } = {};\n\n // Use getLatestPrices to fetch all prices at once\n const prices = await getLatestPrices(pairs);\n\n pairs.forEach((pair, index) => {\n priceMap[pair] = prices[index];\n });\n\n return priceMap;\n}\n\nexport async function getLatestPrice(\n pair: PythPriceIdPair,\n): Promise<string | undefined> {\n let price: string | undefined = undefined;\n\n try {\n [price] = await fetchPricesFromAlphaAPI([pair]);\n if (!price) {\n console.log(`Failed to get price for pair ${pair}`);\n }\n } catch (error) {\n console.error(`Error in getPrice for pair ${pair}:`, error);\n }\n return price;\n}\n\nfunction generateCacheKey(pair: PythPriceIdPair) {\n return `pyth_${pair}`;\n}\n\nfunction generateCacheKeyForPairs(pairs: PythPriceIdPair[]) {\n return `pyth_${pairs.join(\"_\")}`;\n}\n\ninterface PythPricePair {\n pair: PythPriceIdPair;\n price: string;\n}\n\nconst pythCache = new SimpleCache<PythPricePair>(10000); // cache TTL = 10 seconds\nconst pythPromiseCache = new SimpleCache<Promise<PythPricePair>>(10000);\nconst pythPromisesCache = new SimpleCache<Promise<PythPricePair[]>>(10000);\n\nexport async function fetchPricesFromAlphaAPI(\n pairs: string[],\n): Promise<string[]> {\n const prices: (string | undefined)[] = new Array(pairs.length).fill(\n undefined,\n );\n const pairsToFetch: PythPriceIdPair[] = [];\n const pairsToFetchIndexes: number[] = [];\n\n pairs.forEach((pair, index) => {\n const priceCacheKey = generateCacheKey(pair as PythPriceIdPair);\n const cachedResponse = pythCache.get(priceCacheKey);\n\n if (cachedResponse) {\n if (debug) console.log(`From CACHE for ${pair}`);\n prices[index] = cachedResponse.price;\n } else {\n pairsToFetch.push(pair as PythPriceIdPair);\n pairsToFetchIndexes.push(index);\n }\n });\n\n if (pairsToFetch.length > 0) {\n const pairsToFetchKey = generateCacheKeyForPairs(pairsToFetch);\n let cachedPairsPromise = pythPromisesCache.get(pairsToFetchKey);\n\n if (!cachedPairsPromise) {\n if (debug) console.log(`Fetching prices for: ${pairsToFetch.join(\",\")}`);\n cachedPairsPromise = fetch(\n `https://api.alphafi.xyz/alpha/fetchPrices?pairs=${pairsToFetch.join(\",\")}`,\n )\n .then(async (response) => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as PythPricePair[]; // Parse the JSON response\n if (debug) console.log(`From SERVER for ${pairsToFetch}`, data);\n data.forEach((pricePair, idx) => {\n const priceCacheKey = generateCacheKey(\n pricePair.pair as PythPriceIdPair,\n );\n pythCache.set(priceCacheKey, pricePair); // Cache each response\n pythPromiseCache.delete(priceCacheKey); // Remove the promise from the cache\n prices[pairsToFetchIndexes[idx]] = pricePair.price; // Set the price at the correct index\n });\n pythPromisesCache.delete(pairsToFetchKey); // Remove the promise for the array\n return data;\n })\n .catch((error) => {\n console.error(\n `Error fetching prices for pairs ${pairsToFetch}:`,\n error,\n );\n pythPromisesCache.delete(pairsToFetchKey); // Ensure the promise is removed on error\n throw error;\n });\n pythPromisesCache.set(pairsToFetchKey, cachedPairsPromise);\n }\n\n const fetchedPrices = await cachedPairsPromise;\n fetchedPrices.forEach((pricePair, idx) => {\n prices[pairsToFetchIndexes[idx]] = pricePair.price;\n });\n }\n\n return prices as string[];\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alphafi/alphafi-sdk",
3
- "version": "0.0.23",
3
+ "version": "0.0.24",
4
4
  "description": "Official AlphaFi SDK to access AlphaFi data",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.js",