Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion packages/markets/source/drivers/coingecko/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ export class CoinGecko implements PriceTracker {
* @memberof PriceTracker
*/
readonly #host: string = "https://api.coingecko.com/api/v3";
readonly #maxDays: number = 365;

/**
* Creates an instance of PriceTracker.
Expand Down Expand Up @@ -90,7 +91,7 @@ export class CoinGecko implements PriceTracker {

const body = await this.#get(`coins/${tokenId}/market_chart`, {
vs_currency: options.currency,
days: options.days,
days: Math.min(options.days, this.#maxDays),
});

return new HistoricalPriceTransformer(body).transform(options);
Expand Down
4 changes: 2 additions & 2 deletions packages/profiles/source/environment.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ describe("Environment", ({ beforeEach, it, assert, nock, loader }) => {
EXCHANGE_CURRENCY: "BTC",
FALLBACK_TO_DEFAULT_NODES: true,
LOCALE: "en-US",
MARKET_PROVIDER: "cryptocompare",
MARKET_PROVIDER: "coingecko",
NAME: "John Doe",
THEME: "light",
TIME_FORMAT: "h:mm A",
Expand Down Expand Up @@ -258,7 +258,7 @@ describe("Environment", ({ beforeEach, it, assert, nock, loader }) => {
EXCHANGE_CURRENCY: "BTC",
FALLBACK_TO_DEFAULT_NODES: true,
LOCALE: "en-US",
MARKET_PROVIDER: "cryptocompare",
MARKET_PROVIDER: "coingecko",
NAME: "John Doe",
THEME: "light",
TIME_FORMAT: "h:mm A",
Expand Down
2 changes: 1 addition & 1 deletion packages/profiles/source/exchange-rate.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export class ExchangeRateService implements IExchangeRateService {
).historicalPrice({
currency: exchangeCurrency,
dateFormat: "YYYY-MM-DD",
days: 2000,
days: 365,
token: currency,
// @TODO: this might cause issues with certain providers. Should allow for an "all" option to aggregate all pages without knowing the specific number
type: "day",
Expand Down
18 changes: 15 additions & 3 deletions packages/profiles/source/portfolio.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,22 @@ describeWithContext(
.reply(200, loader.json("test/fixtures/client/wallet.json"))
.get("/api/wallets/DQzosAzwyYStw2bUeUTCUnqiMonEz9ER2o")
.reply(200, loader.json("test/fixtures/client/wallet.json"))
// CryptoCompare
.get("/data/histoday")

// CoinGecko
.get("/api/v3/coins/list")
.reply(200, loader.json("test/fixtures/markets/coingecko/coins-list.json"))
.get("/api/v3/coins/arken-world/history")
.query(true)
.reply(200, loader.json("test/fixtures/markets/coingecko/history.json"))
.get("/api/v3/coins/ark-ark/history")
.query(true)
.reply(200, loader.json("test/fixtures/markets/coingecko/history-ark.json"))
.get("/api/v3/coins/arken-world/market_chart")
.query(true)
.reply(200, loader.json("test/fixtures/markets/coingecko/market-chart.json"))
.get("/api/v3/coins/ark-ark/market_chart")
.query(true)
.reply(200, loader.json("test/fixtures/markets/cryptocompare/historical.json"))
.reply(200, loader.json("test/fixtures/markets/coingecko/market-chart.json"))
.persist();

const profileRepository = container.get(Identifiers.ProfileRepository);
Expand Down
2 changes: 1 addition & 1 deletion packages/profiles/source/profile.initialiser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export class ProfileInitialiser implements IProfileInitialiser {
this.#profile.settings().set(ProfileSetting.FallbackToDefaultNodes, true);
this.#profile.settings().set(ProfileSetting.ExchangeCurrency, "BTC");
this.#profile.settings().set(ProfileSetting.Locale, "en-US");
this.#profile.settings().set(ProfileSetting.MarketProvider, "cryptocompare");
this.#profile.settings().set(ProfileSetting.MarketProvider, "coingecko");
this.#profile.settings().set(ProfileSetting.Name, name);
this.#profile.settings().set(ProfileSetting.Theme, theme);
this.#profile.settings().set(ProfileSetting.TimeFormat, "h:mm A");
Expand Down
12 changes: 9 additions & 3 deletions packages/profiles/source/wallet.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,16 @@ describe("Wallet", ({ beforeAll, beforeEach, loader, nock, assert, stub, it }) =
.get("/api/transactions")
.query(true)
.reply(200, () => loader.json("test/fixtures/client/transactions.json"))
// CryptoCompare
.get("/data/histoday")

// CoinGecko
.get("/api/v3/coins/list")
.reply(200, loader.json("test/fixtures/markets/coingecko/coins-list.json"))
.get("/api/v3/coins/arken-world/history")
.query(true)
.reply(200, loader.json("test/fixtures/markets/coingecko/history.json"))
.get("/api/v3/coins/arken-world/market_chart")
.query(true)
.reply(200, loader.json("test/fixtures/markets/cryptocompare/historical.json"))
.reply(200, loader.json("test/fixtures/markets/coingecko/market-chart.json"))
.persist();

// Make sure we don't persist any data between runs
Expand Down
2 changes: 1 addition & 1 deletion packages/profiles/test/fixtures/env-storage.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"name": "John Doe",
"avatar": "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" class=\"picasso\" width=\"100\" height=\"100\" viewBox=\"0 0 100 100\"><style>.picasso circle{mix-blend-mode:soft-light;}</style><rect fill=\"rgb(233, 30, 99)\" width=\"100\" height=\"100\"/><circle r=\"45\" cx=\"80\" cy=\"30\" fill=\"rgb(76, 175, 80)\"/><circle r=\"55\" cx=\"0\" cy=\"60\" fill=\"rgb(255, 152, 0)\"/><circle r=\"40\" cx=\"50\" cy=\"50\" fill=\"rgb(3, 169, 244)\"/></svg>",
"password": null,
"data": "eyJpZCI6ImU4OTU1ZjMzLTU0NDItNGNlMi04MDI0LTc1MDQzNzI2NDQ0ZiIsImNvbnRhY3RzIjp7ImE3MGViNjY4LWRkOTgtNDQwNy1iMTNjLWU5MWFmZGJmZDJkNiI6eyJpZCI6ImE3MGViNjY4LWRkOTgtNDQwNy1iMTNjLWU5MWFmZGJmZDJkNiIsIm5hbWUiOiJKYW5lIERvZSIsInN0YXJyZWQiOmZhbHNlLCJhZGRyZXNzZXMiOlt7ImlkIjoiMmFkMDcyZDItNjAwYy00MTNiLTkxZDAtNGZjNzk5OGVhZjk2IiwiY29pbiI6IkFSSyIsIm5ldHdvcmsiOiJhcmsuZGV2bmV0IiwiYWRkcmVzcyI6IkQ2aThQNU40NHJGdG82TTZSQUx5VVhMTHM3UTFBMVdSRVcifV19fSwiZGF0YSI6eyJMQVRFU1RfTUlHUkFUSU9OIjoiMC4wLjAifSwiZXhjaGFuZ2VUcmFuc2FjdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImUzNmI1YjlkLTVmODctNDljMC1hODY4LTE1ODA5YWM3OGVkNyI6eyJpZCI6ImUzNmI1YjlkLTVmODctNDljMC1hODY4LTE1ODA5YWM3OGVkNyIsImljb24iOiJ3YXJuaW5nIiwibmFtZSI6IkxlZGdlciBVcGRhdGUgQXZhaWxhYmxlIiwiYm9keSI6Ii4uLiIsInR5cGUiOiJsZWRnZXIiLCJhY3Rpb24iOiJSZWFkIENoYW5nZWxvZyJ9fSwicGVlcnMiOnt9LCJwbHVnaW5zIjp7fSwic2V0dGluZ3MiOnsiQUNDRU5UX0NPTE9SIjoiZ3JlZW4iLCJBRFZBTkNFRF9NT0RFIjpmYWxzZSwiQVVUT01BVElDX1NJR05fT1VUX1BFUklPRCI6MTUsIkJJUDM5X0xPQ0FMRSI6ImVuZ2xpc2giLCJEQVNIQk9BUkRfVFJBTlNBQ1RJT05fSElTVE9SWSI6ZmFsc2UsIkRPX05PVF9TSE9XX0ZFRV9XQVJOSU5HIjpmYWxzZSwiRVJST1JfUkVQT1JUSU5HIjpmYWxzZSwiRVhDSEFOR0VfQ1VSUkVOQ1kiOiJCVEMiLCJMT0NBTEUiOiJlbi1VUyIsIk1BUktFVF9QUk9WSURFUiI6ImNyeXB0b2NvbXBhcmUiLCJOQU1FIjoiSm9obiBEb2UiLCJTQ1JFRU5TSE9UX1BST1RFQ1RJT04iOnRydWUsIlRIRU1FIjoibGlnaHQiLCJUSU1FX0ZPUk1BVCI6Img6bW0gQSIsIlVTRV9URVNUX05FVFdPUktTIjpmYWxzZX0sIndhbGxldHMiOnsiNzNlZjliM2UtMzQ3ZC00OWE4LTg0MDktNzA1YTNjOWQxMWU5Ijp7ImlkIjoiNzNlZjliM2UtMzQ3ZC00OWE4LTg0MDktNzA1YTNjOWQxMWU5IiwiZGF0YSI6eyJDT0lOIjoiQVJLIiwiTkVUV09SSyI6ImFyay5kZXZuZXQiLCJBRERSRVNTIjoiRDYxbWZTZ2d6YnZRZ1RVZTZKaFlLSDJkb0hhcUozRHlpYiIsIlBVQkxJQ19LRVkiOiIwMzQxNTFhM2VjNDZiNTY3MGE2ODJiMGE2MzM5NGY4NjM1ODdkMWJjOTc0ODNiMWI2YzcwZWI1OGU3ZjBhZWQxOTIiLCJCQUxBTkNFIjp7ImF2YWlsYWJsZSI6IjU1ODI3MDkzNDQ0NTU2IiwiZmVlcyI6IjU1ODI3MDkzNDQ0NTU2In0sIkJST0FEQ0FTVEVEX1RSQU5TQUNUSU9OUyI6e30sIkRFUklWQVRJT05fVFlQRSI6ImJpcDM5IiwiSU1QT1JUX01FVEhPRCI6IkJJUDM5Lk1ORU1PTklDIiwiU0VRVUVOQ0UiOiIxMTE5MzIiLCJTSUdORURfVFJBTlNBQ1RJT05TIjp7fSwiVk9URVMiOltdLCJWT1RFU19BVkFJTEFCTEUiOjAsIlZPVEVTX1VTRUQiOjAsIldBSVRJTkdfRk9SX09VUl9TSUdOQVRVUkVfVFJBTlNBQ1RJT05TIjp7fSwiV0FJVElOR19GT1JfT1RIRVJfU0lHTkFUVVJFU19UUkFOU0FDVElPTlMiOnt9LCJTVEFSUkVEIjpmYWxzZX0sInNldHRpbmdzIjp7IkFWQVRBUiI6IjxzdmcgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cInBpY2Fzc29cIiB3aWR0aD1cIjEwMFwiIGhlaWdodD1cIjEwMFwiIHZpZXdCb3g9XCIwIDAgMTAwIDEwMFwiPjxzdHlsZT4ucGljYXNzbyBjaXJjbGV7bWl4LWJsZW5kLW1vZGU6c29mdC1saWdodDt9PC9zdHlsZT48cmVjdCBmaWxsPVwicmdiKDIzMywgMzAsIDk5KVwiIHdpZHRoPVwiMTAwXCIgaGVpZ2h0PVwiMTAwXCIvPjxjaXJjbGUgcj1cIjUwXCIgY3g9XCI2MFwiIGN5PVwiNDBcIiBmaWxsPVwicmdiKDEzOSwgMTk1LCA3NClcIi8+PGNpcmNsZSByPVwiNDVcIiBjeD1cIjBcIiBjeT1cIjMwXCIgZmlsbD1cInJnYigwLCAxODgsIDIxMilcIi8+PGNpcmNsZSByPVwiNDBcIiBjeD1cIjkwXCIgY3k9XCI1MFwiIGZpbGw9XCJyZ2IoMjU1LCAxOTMsIDcpXCIvPjwvc3ZnPiJ9fX19"
"data": "eyJpZCI6ICJlODk1NWYzMy01NDQyLTRjZTItODAyNC03NTA0MzcyNjQ0NGYiLCAiY29udGFjdHMiOiB7ImE3MGViNjY4LWRkOTgtNDQwNy1iMTNjLWU5MWFmZGJmZDJkNiI6IHsiaWQiOiAiYTcwZWI2NjgtZGQ5OC00NDA3LWIxM2MtZTkxYWZkYmZkMmQ2IiwgIm5hbWUiOiAiSmFuZSBEb2UiLCAic3RhcnJlZCI6IGZhbHNlLCAiYWRkcmVzc2VzIjogW3siaWQiOiAiMmFkMDcyZDItNjAwYy00MTNiLTkxZDAtNGZjNzk5OGVhZjk2IiwgImNvaW4iOiAiQVJLIiwgIm5ldHdvcmsiOiAiYXJrLmRldm5ldCIsICJhZGRyZXNzIjogIkQ2aThQNU40NHJGdG82TTZSQUx5VVhMTHM3UTFBMVdSRVcifV19fSwgImRhdGEiOiB7IkxBVEVTVF9NSUdSQVRJT04iOiAiMC4wLjAifSwgImV4Y2hhbmdlVHJhbnNhY3Rpb25zIjoge30sICJub3RpZmljYXRpb25zIjogeyJlMzZiNWI5ZC01Zjg3LTQ5YzAtYTg2OC0xNTgwOWFjNzhlZDciOiB7ImlkIjogImUzNmI1YjlkLTVmODctNDljMC1hODY4LTE1ODA5YWM3OGVkNyIsICJpY29uIjogIndhcm5pbmciLCAibmFtZSI6ICJMZWRnZXIgVXBkYXRlIEF2YWlsYWJsZSIsICJib2R5IjogIi4uLiIsICJ0eXBlIjogImxlZGdlciIsICJhY3Rpb24iOiAiUmVhZCBDaGFuZ2Vsb2cifX0sICJwZWVycyI6IHt9LCAicGx1Z2lucyI6IHt9LCAic2V0dGluZ3MiOiB7IkFDQ0VOVF9DT0xPUiI6ICJncmVlbiIsICJBRFZBTkNFRF9NT0RFIjogZmFsc2UsICJBVVRPTUFUSUNfU0lHTl9PVVRfUEVSSU9EIjogMTUsICJCSVAzOV9MT0NBTEUiOiAiZW5nbGlzaCIsICJEQVNIQk9BUkRfVFJBTlNBQ1RJT05fSElTVE9SWSI6IGZhbHNlLCAiRE9fTk9UX1NIT1dfRkVFX1dBUk5JTkciOiBmYWxzZSwgIkVSUk9SX1JFUE9SVElORyI6IGZhbHNlLCAiRVhDSEFOR0VfQ1VSUkVOQ1kiOiAiQlRDIiwgIkxPQ0FMRSI6ICJlbi1VUyIsICJNQVJLRVRfUFJPVklERVIiOiAiY29pbmdlY2tvIiwgIk5BTUUiOiAiSm9obiBEb2UiLCAiU0NSRUVOU0hPVF9QUk9URUNUSU9OIjogdHJ1ZSwgIlRIRU1FIjogImxpZ2h0IiwgIlRJTUVfRk9STUFUIjogImg6bW0gQSIsICJVU0VfVEVTVF9ORVRXT1JLUyI6IGZhbHNlfSwgIndhbGxldHMiOiB7IjczZWY5YjNlLTM0N2QtNDlhOC04NDA5LTcwNWEzYzlkMTFlOSI6IHsiaWQiOiAiNzNlZjliM2UtMzQ3ZC00OWE4LTg0MDktNzA1YTNjOWQxMWU5IiwgImRhdGEiOiB7IkNPSU4iOiAiQVJLIiwgIk5FVFdPUksiOiAiYXJrLmRldm5ldCIsICJBRERSRVNTIjogIkQ2MW1mU2dnemJ2UWdUVWU2SmhZS0gyZG9IYXFKM0R5aWIiLCAiUFVCTElDX0tFWSI6ICIwMzQxNTFhM2VjNDZiNTY3MGE2ODJiMGE2MzM5NGY4NjM1ODdkMWJjOTc0ODNiMWI2YzcwZWI1OGU3ZjBhZWQxOTIiLCAiQkFMQU5DRSI6IHsiYXZhaWxhYmxlIjogIjU1ODI3MDkzNDQ0NTU2IiwgImZlZXMiOiAiNTU4MjcwOTM0NDQ1NTYifSwgIkJST0FEQ0FTVEVEX1RSQU5TQUNUSU9OUyI6IHt9LCAiREVSSVZBVElPTl9UWVBFIjogImJpcDM5IiwgIklNUE9SVF9NRVRIT0QiOiAiQklQMzkuTU5FTU9OSUMiLCAiU0VRVUVOQ0UiOiAiMTExOTMyIiwgIlNJR05FRF9UUkFOU0FDVElPTlMiOiB7fSwgIlZPVEVTIjogW10sICJWT1RFU19BVkFJTEFCTEUiOiAwLCAiVk9URVNfVVNFRCI6IDAsICJXQUlUSU5HX0ZPUl9PVVJfU0lHTkFUVVJFX1RSQU5TQUNUSU9OUyI6IHt9LCAiV0FJVElOR19GT1JfT1RIRVJfU0lHTkFUVVJFU19UUkFOU0FDVElPTlMiOiB7fSwgIlNUQVJSRUQiOiBmYWxzZX0sICJzZXR0aW5ncyI6IHsiQVZBVEFSIjogIjxzdmcgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cInBpY2Fzc29cIiB3aWR0aD1cIjEwMFwiIGhlaWdodD1cIjEwMFwiIHZpZXdCb3g9XCIwIDAgMTAwIDEwMFwiPjxzdHlsZT4ucGljYXNzbyBjaXJjbGV7bWl4LWJsZW5kLW1vZGU6c29mdC1saWdodDt9PC9zdHlsZT48cmVjdCBmaWxsPVwicmdiKDIzMywgMzAsIDk5KVwiIHdpZHRoPVwiMTAwXCIgaGVpZ2h0PVwiMTAwXCIvPjxjaXJjbGUgcj1cIjUwXCIgY3g9XCI2MFwiIGN5PVwiNDBcIiBmaWxsPVwicmdiKDEzOSwgMTk1LCA3NClcIi8+PGNpcmNsZSByPVwiNDVcIiBjeD1cIjBcIiBjeT1cIjMwXCIgZmlsbD1cInJnYigwLCAxODgsIDIxMilcIi8+PGNpcmNsZSByPVwiNDBcIiBjeD1cIjkwXCIgY3k9XCI1MFwiIGZpbGw9XCJyZ2IoMjU1LCAxOTMsIDcpXCIvPjwvc3ZnPiJ9fX19"
}
},
"data": {
Expand Down
22 changes: 22 additions & 0 deletions packages/profiles/test/fixtures/markets/coingecko/coins-list.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[
{
"id": "ark-ark",
"symbol": "ark",
"name": "ARK"
},
{
"id": "arken-world",
"symbol": "dark",
"name": "Dark"
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👀 what's this

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah good catch. This is a stale test fixture pulled from https://api.coingecko.com/api/v3/coins/list. I let AI generate it and forgot to filter out the noise. It should be corrected now.

{
"id": "bitcoin",
"symbol": "btc",
"name": "Bitcoin"
},
{
"id": "ethereum",
"symbol": "eth",
"name": "Ethereum"
}
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"market_data": {
"current_price": {
"btc": 0.00005048,
"usd": 3.21
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"market_data": {
"current_price": {
"btc": 0.00005048,
"usd": 3.21
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"prices": [
[1719792000000, 0.45],
[1719878400000, 0.46],
[1719964800000, 0.44],
[1720051200000, 0.47],
[1720137600000, 0.48],
[1720224000000, 0.49],
[1720310400000, 0.5],
[1720396800000, 0.51],
[1720483200000, 0.52],
[1720569600000, 0.53]
],
"market_caps": [
[1719792000000, 45000000],
[1719878400000, 46000000],
[1719964800000, 44000000],
[1720051200000, 47000000],
[1720137600000, 48000000],
[1720224000000, 49000000],
[1720310400000, 50000000],
[1720396800000, 51000000],
[1720483200000, 52000000],
[1720569600000, 53000000]
],
"total_volumes": [
[1719792000000, 5000000],
[1719878400000, 5100000],
[1719964800000, 4900000],
[1720051200000, 5200000],
[1720137600000, 5300000],
[1720224000000, 5400000],
[1720310400000, 5500000],
[1720396800000, 5600000],
[1720483200000, 5700000],
[1720569600000, 5800000]
]
}
Loading