UNPKG

@ledgerhq/live-common

Version:
82 lines 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useGetCurrencyChartDataQuery = exports.useGetSupportedCounterCurrenciesQuery = exports.useGetSupportedCoinsListQuery = exports.cgApi = void 0; const react_1 = require("@reduxjs/toolkit/query/react"); const live_env_1 = require("@ledgerhq/live-env"); const logs_1 = require("@ledgerhq/logs"); const rangeDataTable_1 = require("../utils/rangeDataTable"); const types_1 = require("./types"); function transformSupportedCoinsResponse(response) { const result = types_1.SupportedCoinsSchema.safeParse(response); if (!result.success) { (0, logs_1.log)("cg-client", "Invalid supported coins response schema:", { errors: result.error.issues, }); throw new Error(`[GC API] Supported coins schema validation failed: ${result.error.issues .map(e => `${e.path.join(".")}: ${e.message}`) .join(", ")}`); } return result.data; } function transformSupportedCounterCurrenciesResponse(response) { const result = types_1.SupportedCounterCurrenciesSchema.safeParse(response); if (!result.success) { (0, logs_1.log)("cg-client", "Invalid supported counter currencies response schema:", { errors: result.error.issues, }); throw new Error(`[GC API] Counter currencies schema validation failed: ${result.error.issues .map(e => `${e.path.join(".")}: ${e.message}`) .join(", ")}`); } return result.data; } function transformChartDataResponse(response, range) { const result = types_1.MarketChartApiResponseSchema.safeParse(response); if (!result.success) { (0, logs_1.log)("cg-client", "Invalid chart data response schema:", { errors: result.error.issues, }); throw new Error(`[GC API] Chart data schema validation failed: ${result.error.issues .map(e => `${e.path.join(".")}: ${e.message}`) .join(", ")}`); } return { [range]: result.data.prices }; } exports.cgApi = (0, react_1.createApi)({ reducerPath: "cgApi", baseQuery: (0, react_1.fetchBaseQuery)({ baseUrl: (0, live_env_1.getEnv)("COINGECKO_API_URL"), }), tagTypes: [types_1.GcDataTags.Coins, types_1.GcDataTags.CounterCurrencies, types_1.GcDataTags.ChartData], endpoints: build => ({ getSupportedCoinsList: build.query({ query: () => "/coins/list", providesTags: [types_1.GcDataTags.Coins], keepUnusedDataFor: 24 * 60 * 60, // 1 day in seconds transformResponse: transformSupportedCoinsResponse, }), getSupportedCounterCurrencies: build.query({ query: () => "/simple/supported_vs_currencies", providesTags: [types_1.GcDataTags.CounterCurrencies], keepUnusedDataFor: 24 * 60 * 60, // 1 day in seconds transformResponse: transformSupportedCounterCurrenciesResponse, }), getCurrencyChartData: build.query({ query: ({ id, counterCurrency, range = "24h" }) => { const { days, interval } = rangeDataTable_1.rangeDataTable[range]; return { url: `/coins/${id}/market_chart`, params: { vs_currency: counterCurrency, days, interval, }, }; }, transformResponse: (response, _meta, { range = "24h" }) => transformChartDataResponse(response, range), providesTags: [types_1.GcDataTags.ChartData], }), }), }); exports.useGetSupportedCoinsListQuery = exports.cgApi.useGetSupportedCoinsListQuery, exports.useGetSupportedCounterCurrenciesQuery = exports.cgApi.useGetSupportedCounterCurrenciesQuery, exports.useGetCurrencyChartDataQuery = exports.cgApi.useGetCurrencyChartDataQuery; //# sourceMappingURL=api.js.map