{"version":3,"sources":["../src/index.js","../src/api.js","../src/Api/Builders/builder.js","../src/Api/Builders/seriesBuilder.js","../src/Api/series.js","../src/Api/Builders/categoryBuilder.js","../src/Api/categories.js","../src/Api/Builders/releaseBuilder.js","../src/Api/releases.js","../src/Api/Builders/sourcesBuilder.js","../src/Api/sources.js","../src/Api/Builders/tagsBuilder.js","../src/Api/tags.js"],"sourcesContent":["import Series from './Api/series.js';\nimport Categories from './Api/categories.js';\nimport Releases from './Api/releases.js';\nimport Sources from './Api/sources.js';\nimport Tags from './Api/tags.js';\n\nclass Fred {\n    // Return type is either xml or json, defaults to json\n    constructor(apiKey, returnType = 'json') {\n        this.categories = new Categories(apiKey, returnType);\n        this.releases = new Releases(apiKey, returnType);\n        this.sources = new Sources(apiKey, returnType);\n        this.series = new Series(apiKey, returnType);\n        this.tags = new Tags(apiKey, returnType);\n    }\n}\n\nexport default Fred;\n","import axios from 'axios';\n\nconst DEFAULT_RETRY_OPTIONS = {\n    maxRetries: 5,\n    initialDelayMs: 1000,\n    maxDelayMs: 30000,\n    backoffMultiplier: 2\n};\n\nconst sleep = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\nconst isRetryableError = (error) => {\n    if (!error || !error.response) return false;\n    const { status } = error.response;\n    // 429 = Too Many Requests, 503 = Service Unavailable\n    return status === 429 || status === 503;\n};\n\nconst api = axios.create({\n    baseURL: 'https://api.stlouisfed.org/fred/',\n    timeout: 30000,\n    headers: {}\n});\n\n// Add retry interceptor with exponential backoff\napi.interceptors.response.use(\n    (response) => response,\n    (error) => {\n        const { config } = error;\n\n        // Initialize retry state\n        if (!config.retryCount) {\n            config.retryCount = 0;\n        }\n\n        const retryOptions = config.retryOptions || DEFAULT_RETRY_OPTIONS;\n\n        if (isRetryableError(error) && config.retryCount < retryOptions.maxRetries) {\n            config.retryCount += 1;\n            const baseDelay = retryOptions.initialDelayMs;\n            const multiplier = retryOptions.backoffMultiplier ** (config.retryCount - 1);\n            const delay = Math.min(baseDelay * multiplier, retryOptions.maxDelayMs);\n\n            return sleep(delay).then(() => api.request(config));\n        }\n\n        return Promise.reject(error);\n    }\n);\n\nexport default api;\nexport { DEFAULT_RETRY_OPTIONS };\n","class Builder {\n    constructor() {\n        this.url = '';\n    }\n\n    addAttribute(attribute) {\n        this.url += (this.url === '' ? '' : '&') + attribute;\n        return this;\n    }\n\n    setAPIKey(apiKey) {\n        return this.addAttribute(`api_key=${apiKey}`);\n    }\n\n    setFileType(fileType) {\n        return this.addAttribute(`file_type=${fileType}`);\n    }\n\n    isValidDate(dateString) { // eslint-disable-line\n        const regEx = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n        return dateString.match(regEx) != null;\n    }\n\n    setRealTimeStart(params) {\n        const realTimeStart = params.realtime_start;\n\n        if (!realTimeStart) {\n            return this;\n        }\n        if (!this.isValidDate(realTimeStart)) {\n            throw new Error('The format of this date is not valid. Please format the date like this: YYYY-MM-DD');\n        }\n        return this.addAttribute(`realtime_start=${realTimeStart}`);\n    }\n\n    setRealTimeEnd(params) {\n        const realTimeEnd = params.realtime_end;\n\n        if (!realTimeEnd) {\n            return this;\n        }\n        if (!this.isValidDate(realTimeEnd)) {\n            throw new Error('The format of this date is not valid. Please format the date like this: YYYY-MM-DD');\n        }\n        return this.addAttribute(`realtime_end=${realTimeEnd}`);\n    }\n\n    setLimit(params) {\n        const limit = parseInt(params.limit, 10);\n\n        if (!limit) {\n            return this;\n        }\n        if (limit < 0 || limit > 1000) {\n            throw new Error('Limit must be between 0 and 1000');\n        }\n        return this.addAttribute(`limit=${limit}`);\n    }\n\n    setLimitWithMax(params, maxLimit) {\n        const limit = parseInt(params.limit, 10);\n\n        if (!limit) {\n            return this;\n        }\n        if (limit < 0 || limit > maxLimit) {\n            throw new Error(`Limit must be between 0 and ${maxLimit}`);\n        }\n        return this.addAttribute(`limit=${limit}`);\n    }\n\n    setObservationsLimit(params) {\n        return this.setLimitWithMax(params, 100000);\n    }\n\n    setVintageDatesLimit(params) {\n        return this.setLimitWithMax(params, 10000);\n    }\n\n    setReleaseDatesLimit(params) {\n        return this.setLimitWithMax(params, 10000);\n    }\n\n    setOffset(params) {\n        const offset = parseInt(params.offset, 10);\n\n        if (!offset) {\n            return this;\n        }\n        if (offset < 0) {\n            throw new Error('Offset must be greater than 0');\n        }\n        return this.addAttribute(`offset=${offset}`);\n    }\n\n    setOrderBy(params) {\n        const orderBy = params.order_by;\n\n        if (!orderBy) {\n            return this;\n        }\n        return this.addAttribute(`order_by=${orderBy}`);\n    }\n\n    setSortOrder(params) {\n        let sortOrder = params.sort_order;\n\n        if (!sortOrder) {\n            return this;\n        }\n        sortOrder = sortOrder.toLowerCase();\n        if (sortOrder !== 'asc' && sortOrder !== 'desc') {\n            throw new Error('Sort order can only be either asc or desc');\n        }\n        return this.addAttribute(`sort_order=${sortOrder}`);\n    }\n\n    setFilterVariable(params) {\n        const filterVariable = params.filter_variable;\n\n        if (!filterVariable) {\n            return this;\n        }\n        return this.addAttribute(`filter_variable=${filterVariable}`);\n    }\n\n    setFilterValue(params) {\n        const filterValue = params.filter_value;\n\n        if (!filterValue) {\n            return this;\n        }\n        return this.addAttribute(`filter_value=${filterValue}`);\n    }\n\n    setTagNames(params) {\n        if (typeof (params) === 'string') {\n            return this.addAttribute(`tag_names=${params}`);\n        }\n        const tagNames = params.tag_names;\n\n        if (!tagNames) {\n            return this;\n        }\n        return this.addAttribute(`tag_names=${tagNames}`);\n    }\n\n    setExcludeTagNames(params) {\n        const excludeTagNames = params.exclude_tag_names;\n\n        if (!excludeTagNames) {\n            return this;\n        }\n        return this.addAttribute(`exclude_tag_names=${excludeTagNames}`);\n    }\n\n    setSearchText(params) {\n        const searchText = params.search_text;\n\n        if (!searchText) {\n            return this;\n        }\n        return this.addAttribute(`search_text=${searchText}`);\n    }\n\n    setTagGroupId(params) {\n        const tagGroupId = params.tag_group_id;\n\n        if (!tagGroupId) {\n            return this;\n        }\n        return this.addAttribute(`tag_group_id=${tagGroupId}`);\n    }\n\n    getUrl() {\n        return this.url;\n    }\n}\n\nexport default Builder;\n","import Builder from './builder.js';\n\nclass SeriesBuilder extends Builder {\n    setSeriesId(seriesId) {\n        return this.addAttribute(`series_id=${seriesId}`);\n    }\n\n    setObservationStart(params) {\n        const observationStart = params.observation_start;\n\n        if (!observationStart) {\n            return this;\n        }\n        if (!this.isValidDate(observationStart)) {\n            throw new Error('The format of this date is not valid. Please format the date like this: YYYY-MM-DD');\n        }\n        return this.addAttribute(`observation_start=${observationStart}`);\n    }\n\n    setObservationEnd(params) {\n        const observationEnd = params.observation_end;\n\n        if (!observationEnd) {\n            return this;\n        }\n        if (!this.isValidDate(observationEnd)) {\n            throw new Error('The format of this date is not valid. Please format the date like this: YYYY-MM-DD');\n        }\n        return this.addAttribute(`observation_end=${observationEnd}`);\n    }\n\n    setUnits(params) {\n        const { units } = params;\n\n        if (!units || units === '') {\n            return this;\n        }\n        return this.addAttribute(`units=${units}`);\n    }\n\n    setFrequency(params) {\n        const { frequency } = params;\n\n        if (!frequency) {\n            return this;\n        }\n        return this.addAttribute(`frequency=${frequency}`);\n    }\n\n    setAggregationMethod(params) {\n        const aggregationMethod = params.aggregation_method;\n\n        if (!aggregationMethod) {\n            return this;\n        }\n        return this.addAttribute(`aggregation_method=${aggregationMethod}`);\n    }\n\n    setOutputType(params) {\n        const outputType = params.output_type;\n\n        if (!outputType) {\n            return this;\n        }\n        return this.addAttribute(`output_type=${outputType}`);\n    }\n\n    setVintageDate(params) {\n        const vintageDates = params.vintage_dates;\n\n        if (!vintageDates) {\n            return this;\n        }\n        return this.addAttribute(`vintage_dates=${vintageDates}`);\n    }\n\n    setSearchType(params) {\n        const searchType = params.search_type;\n\n        if (!searchType) {\n            return this;\n        }\n        return this.addAttribute(`search_type=${searchType}`);\n    }\n\n    setSearchText(searchText) {\n        if (!searchText) {\n            return this;\n        }\n        return this.addAttribute(`search_text=${searchText}`);\n    }\n\n    setSeriesSearchText(seriesSearchText) {\n        return this.addAttribute(`series_search_text=${seriesSearchText}`);\n    }\n\n    setTagSearchText(params) {\n        const tagSearchText = params.tag_search_text;\n\n        if (!tagSearchText) {\n            return this;\n        }\n        return this.addAttribute(`tag_search_text=${tagSearchText}`);\n    }\n\n    setStartTime(params) {\n        const startTime = params.start_time;\n\n        if (!startTime) {\n            return this;\n        }\n        return this.addAttribute(`start_time=${startTime}`);\n    }\n\n    setEndTime(params) {\n        const endTime = params.end_time;\n\n        if (!endTime) {\n            return this;\n        }\n        return this.addAttribute(`end_time=${endTime}`);\n    }\n}\n\nexport default SeriesBuilder;\n","import api from '../api.js';\nimport SeriesBuilder from './Builders/seriesBuilder.js';\n\nclass Series {\n    constructor(apiKey, returnType) {\n        this.apiKey = apiKey;\n        this.returnType = returnType;\n    }\n\n    /**\n     * Gets an economic data series.\n     * @param {String} seriesId\n     * @param {Object} params\n     * @returns {Promise} Resolves with an economic data series or errors out\n     */\n    getSeries(seriesId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setSeriesId(seriesId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .getUrl();\n\n                api.get(`series?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the categories for an economic data series.\n     * @param {String} seriesId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the categories for an economic data series or errors out\n     */\n    getCategoriesForSeries(seriesId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setSeriesId(seriesId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .getUrl();\n\n                api.get(`series/categories?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the observations or data values for an economic data series.\n     * @param {String} seriesId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the observations or data values\n     * for an economic data series or errors out\n     */\n    getObservationsForSeries(seriesId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setSeriesId(seriesId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setObservationsLimit(params)\n                    .setOffset(params)\n                    .setSortOrder(params)\n                    .setObservationStart(params)\n                    .setObservationEnd(params)\n                    .setUnits(params)\n                    .setFrequency(params)\n                    .setAggregationMethod(params)\n                    .setOutputType(params)\n                    .setVintageDate(params)\n                    .getUrl();\n\n                api.get(`series/observations?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the release for an economic data series.\n     * @param {String} seriesId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the release for an economic data series or errors out\n     */\n    getReleaseForSeries(seriesId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setSeriesId(seriesId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .getUrl();\n\n                api.get(`series/release?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets economic data series that match keywords.\n     * @param {String} searchText\n     * @param {Object} params\n     * @returns {Promise} Resolves with economic data series that match keywords or errors out\n     */\n    getSeriesThatMatchesSearch(searchText, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setSearchText(searchText)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setFilterVariable(params)\n                    .setFilterValue(params)\n                    .setTagNames(params)\n                    .setExcludeTagNames(params)\n                    .setSearchType(params)\n                    .getUrl();\n\n                api.get(`series/search?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the tags for a series search.\n     * @param {String} seriesId\n     * @param {String} seriesSearchText\n     * @param {Object} params\n     * @returns {Promise} Resolves with the tags for a series search or errors out\n     */\n    getTagsForSeriesSearch(seriesSearchText, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setTagNames(params)\n                    .setTagGroupId(params)\n                    .setTagSearchText(params)\n                    .setSeriesSearchText(seriesSearchText)\n                    .getUrl();\n\n                api.get(`series/search/tags?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the related tags for a series search.\n     * @param {String} seriesId\n     * @param {String} seriesSearchText\n     * @param {Object} params\n     * @returns {Promise} Resolves with the related tags for a series search or errors out\n     */\n    getRelatedTagsForSeriesSearch(seriesSearchText, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setTagNames(params)\n                    .setExcludeTagNames(params)\n                    .setTagGroupId(params)\n                    .setTagSearchText(params)\n                    .setSeriesSearchText(seriesSearchText)\n                    .getUrl();\n\n                api.get(`series/search/related_tags?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the tags for an economic data series.\n     * @param {String} seriesId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the tags for an economic data series or errors out\n     */\n    getTagsForSeries(seriesId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setSeriesId(seriesId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .getUrl();\n\n                api.get(`series/tags?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets economic data series sorted by when observations were updated on the FRED® server.\n     * @param {Object} params\n     * @returns {Promise} Resolves with economic data series sorted by\n     * when observations were updated on the FRED® server or errors out\n     */\n    getUpdatedSeries(params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setFilterValue(params)\n                    .setStartTime(params)\n                    .setEndTime(params)\n                    .getUrl();\n\n                api.get(`series/updates?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the dates in history when a series' data values were\n     * revised or new data values were released.\n     * @param {String} seriesId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the dates in history when a\n     * series' data values were revised or new data values were released or errors out\n     */\n    getVintageDatesSeries(seriesId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SeriesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setSeriesId(seriesId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setVintageDatesLimit(params)\n                    .setOffset(params)\n                    .setSortOrder(params)\n                    .getUrl();\n\n                api.get(`series/vintagedates?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n}\n\nexport default Series;\n","import Builder from './builder.js';\n\nclass CategoryBuilder extends Builder {\n    setCategoryId(categoryId) {\n        return this.addAttribute(`category_id=${categoryId}`);\n    }\n}\n\nexport default CategoryBuilder;\n","import api from '../api.js';\nimport CategoryBuilder from './Builders/categoryBuilder.js';\n\nclass Categories {\n    constructor(apiKey, returnType) {\n        this.apiKey = apiKey;\n        this.returnType = returnType;\n    }\n\n    /**\n     * Gets a category\n     * @param {Number} categoryId\n     * @returns {Promise} Resolves with the category or errors out\n     */\n    getCategory(categoryId) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new CategoryBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setCategoryId(categoryId)\n                    .setFileType(this.returnType)\n                    .getUrl();\n\n                api.get(`category?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the child categories for a specified parent category.\n     * @param {Number} categoryId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the child category or errors out\n     */\n    getChildCategories(categoryId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new CategoryBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setCategoryId(categoryId)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .getUrl();\n\n                api.get(`category/children?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the related categories for a category.\n     * @param {Number} categoryId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the related categories or errors out\n     */\n    getRelatedCategories(categoryId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new CategoryBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setCategoryId(categoryId)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .getUrl();\n\n                api.get(`category/related?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the series in a category.\n     * @param {Number} categoryId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the series or errors out\n     */\n    getCategorySeries(categoryId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new CategoryBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setCategoryId(categoryId)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setFilterVariable(params)\n                    .setFilterValue(params)\n                    .setTagNames(params)\n                    .setExcludeTagNames(params)\n                    .getUrl();\n\n                api.get(`category/series?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Get the FRED tags for a category.\n     * @param {Number} categoryId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the tags for the category or errors out\n     */\n    getCategoryTags(categoryId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new CategoryBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setCategoryId(categoryId)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setTagNames(params)\n                    .setTagGroupId(params)\n                    .setSearchText(params)\n                    .getUrl();\n\n                api.get(`category/tags?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Get the related FRED tags for a category.\n     * @param {Number} categoryId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the related tags for the category or errors out\n     */\n    getCategoryRelatedTags(categoryId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new CategoryBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setCategoryId(categoryId)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setTagNames(params)\n                    .setTagGroupId(params)\n                    .setSearchText(params)\n                    .getUrl();\n\n                api.get(`category/related_tags?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n}\n\nexport default Categories;\n","import Builder from './builder.js';\n\nclass ReleaseBuilder extends Builder {\n    setReleaseId(releaseId) {\n        // Must be a positive integer\n        const id = parseInt(releaseId, 10);\n\n        if (id <= 0) {\n            throw new Error('The release id must be a positive integer');\n        }\n\n        return this.addAttribute(`release_id=${releaseId}`);\n    }\n\n    setIncludeRelatedDatesWithNoData(params) {\n        const includeRelatedDatesWithNoData = params.include_release_dates_with_no_data;\n\n        if (!includeRelatedDatesWithNoData) {\n            return this;\n        }\n        return this.addAttribute(`include_release_dates_with_no_data=${includeRelatedDatesWithNoData}`);\n    }\n\n    setElementId(params) {\n        const elementId = params.element_id;\n\n        if (!elementId) {\n            return this;\n        }\n        return this.addAttribute(`element_id=${elementId}`);\n    }\n\n    setIncludeObservationValues(params) {\n        const includeObservationValues = params.include_observation_values;\n\n        if (!includeObservationValues) {\n            return this;\n        }\n        if (includeObservationValues !== 'true' && includeObservationValues !== 'false') {\n            throw new Error('The include_observation_values field must either be true or false');\n        }\n        return this.addAttribute(`include_observation_values=${includeObservationValues}`);\n    }\n\n    setObservationDate(params) {\n        const observationDate = params.observation_date;\n\n        if (!observationDate) {\n            return this;\n        }\n        if (!this.isValidDate(observationDate)) {\n            throw new Error('The format of this date is not valid. Please format the date like this: YYYY-MM-DD');\n        }\n        return this.addAttribute(`observation_date=${observationDate}`);\n    }\n\n    setNextCursor(params) {\n        const nextCursor = params.next_cursor;\n\n        if (!nextCursor) {\n            return this;\n        }\n        return this.addAttribute(`next_cursor=${nextCursor}`);\n    }\n\n    setFormat(params) {\n        const { format } = params;\n\n        if (!format) {\n            return this;\n        }\n        return this.addAttribute(`format=${format}`);\n    }\n\n    setV2Limit(params) {\n        const limit = parseInt(params.limit, 10);\n\n        if (!limit) {\n            return this;\n        }\n        if (limit < 0 || limit > 500000) {\n            throw new Error('Limit must be between 0 and 500000 for v2/release/observations');\n        }\n        return this.addAttribute(`limit=${limit}`);\n    }\n}\n\nexport default ReleaseBuilder;\n","import api from '../api.js';\nimport ReleaseBuilder from './Builders/releaseBuilder.js';\n\nclass Releases {\n    constructor(apiKey, returnType) {\n        this.apiKey = apiKey;\n        this.returnType = returnType;\n    }\n\n    /**\n     * Gets all releases of economic data.\n     * @param {Object} params\n     * @returns {Promise} Resolves with all releases of economic data or errors out\n     */\n    getAllReleases(params) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new ReleaseBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .getUrl();\n\n                api.get(`releases?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets release dates for all releases of economic data.\n     * @param {Object} params\n     * @returns {Promise} Resolves with all releases dates of economic data or errors out\n     */\n    getAllReleasesWithDates(params) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new ReleaseBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setReleaseDatesLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setIncludeRelatedDatesWithNoData(params)\n                    .getUrl();\n\n                api.get(`releases/dates?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets a release of economic data.\n     * @param {Number} releaseId\n     * @param {Object} params\n     * @returns {Promise} Resolves with all releases dates of economic data or errors out\n     */\n    getRelease(releaseId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new ReleaseBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setReleaseId(releaseId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .getUrl();\n\n                api.get(`release?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Get release dates for a release of economic data.\n     * @param {Number} releaseId\n     * @param {Object} params\n     * @returns {Promise} Resolves with all releases dates of economic data or errors out\n     */\n    getReleaseWithDates(releaseId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new ReleaseBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setReleaseId(releaseId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setReleaseDatesLimit(params)\n                    .setOffset(params)\n                    .setSortOrder(params)\n                    .setIncludeRelatedDatesWithNoData(params)\n                    .getUrl();\n\n                api.get(`release/dates?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the series on a release of economic data.\n     * @param {Number} releaseId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the series on a release of economic data or errors out\n     */\n    getSeriesForRelease(releaseId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new ReleaseBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setReleaseId(releaseId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setSortOrder(params)\n                    .setOrderBy(params)\n                    .setFilterVariable(params)\n                    .setFilterValue(params)\n                    .setTagNames(params)\n                    .setExcludeTagNames(params)\n                    .getUrl();\n\n                api.get(`release/series?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the sources for a release of economic data.\n     * @param {Number} releaseId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the sources for a release of economic data or errors out\n     */\n    getSourcesForRelease(releaseId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new ReleaseBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setReleaseId(releaseId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .getUrl();\n\n                api.get(`release/sources?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the FRED tags for a release.\n     * @param {Number} releaseId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the sources for a release of economic data or errors out\n     */\n    getTagsForRelease(releaseId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new ReleaseBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setReleaseId(releaseId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setSortOrder(params)\n                    .setOrderBy(params)\n                    .setTagNames(params)\n                    .setTagGroupId(params)\n                    .setSearchText(params)\n                    .getUrl();\n\n                api.get(`release/tags?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Get the related FRED tags for one or more FRED tags within a release.\n     * @param {Number} releaseId\n     * @param {String} tagNames\n     * @param {Object} params\n     * @returns {Promise} Resolves with the related FRED tags for\n     * one or more FRED tags within a release or errors out\n     */\n    getRelatedTagsForRelease(releaseId, tagNames, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new ReleaseBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setReleaseId(releaseId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setSortOrder(params)\n                    .setOrderBy(params)\n                    .setTagNames({ tag_names: tagNames })\n                    .setExcludeTagNames(params)\n                    .setTagGroupId(params)\n                    .setSearchText(params)\n                    .getUrl();\n\n                api.get(`release/related_tags?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets release table trees for a given release.\n     * @param {Number} releaseId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the release table\n     * trees for a given release or errors out\n     */\n    getTableTreesForRelease(releaseId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new ReleaseBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setReleaseId(releaseId)\n                    .setElementId(params)\n                    .setIncludeObservationValues(params)\n                    .setObservationDate(params)\n                    .getUrl();\n\n                api.get(`release/tables?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets observations for a release (single page). (v2 API)\n     * Note: v2 API uses Bearer token authentication via Authorization header\n     * Includes automatic retry with exponential backoff on rate limit errors.\n     * @param {Number} releaseId - The release ID\n     * @param {Object} params - Optional parameters\n     * @param {String} params.format - Output format (json or csv, default: json)\n     * @param {Number} params.limit - Observations per page (default: 10000, max: 500000)\n     * @param {String} params.next_cursor - Cursor for pagination\n     * @returns {Promise} Resolves with observations for a release or errors out\n     */\n    getObservationsForRelease(releaseId, params = {}) {\n        const url = new ReleaseBuilder()\n            .setReleaseId(releaseId)\n            .setFormat(params)\n            .setV2Limit(params)\n            .setNextCursor(params)\n            .getUrl();\n\n        return api.get(`v2/release/observations?${url}`, {\n            headers: {\n                Authorization: `Bearer ${this.apiKey}`\n            }\n        })\n            .then((res) => res.data)\n            .catch((err) => {\n                throw err.response ? err.response.data : err;\n            });\n    }\n\n    /**\n     * Gets all observations for a release with automatic pagination. (v2 API)\n     * Fetches all pages until has_more is false or maxObservations is reached.\n     * @param {Number} releaseId - The release ID\n     * @param {Object} params - Optional parameters\n     * @param {Number} params.limit - Observations per page (default: 10000, max: 500000)\n     * @param {Number} params.maxObservations - Max total observations to fetch (optional)\n     * @returns {Promise} Resolves with all observations accumulated across pages\n     */\n    getAllObservationsForRelease(releaseId, params = {}) {\n        const { maxObservations, ...requestParams } = params;\n        const pageLimit = requestParams.limit || 10000;\n        const allSeries = {};\n        let totalObservations = 0;\n        let release = null;\n\n        const mergeSeries = (response) => {\n            if (!release) {\n                release = response.release;\n            }\n            response.series.forEach((series) => {\n                if (!allSeries[series.series_id]) {\n                    allSeries[series.series_id] = { ...series, observations: [] };\n                }\n                allSeries[series.series_id].observations.push(...series.observations);\n                totalObservations += series.observations.length;\n            });\n        };\n\n        const fetchPage = (cursor) => {\n            const pageParams = { ...requestParams, limit: pageLimit };\n            if (cursor) {\n                pageParams.next_cursor = cursor;\n            }\n\n            return this.getObservationsForRelease(releaseId, pageParams)\n                .then((response) => {\n                    mergeSeries(response);\n\n                    const shouldContinue = response.has_more\n                        && response.next_cursor\n                        && (!maxObservations || totalObservations < maxObservations);\n\n                    if (shouldContinue) {\n                        return fetchPage(response.next_cursor);\n                    }\n\n                    return {\n                        release,\n                        series: Object.values(allSeries),\n                        total_observations: totalObservations\n                    };\n                });\n        };\n\n        return fetchPage(null);\n    }\n}\n\nexport default Releases;\n","import Builder from './builder.js';\n\nclass SourcesBuilder extends Builder {\n    setSourceId(sourceId) {\n        return this.addAttribute(`source_id=${sourceId}`);\n    }\n}\n\nexport default SourcesBuilder;\n","import api from '../api.js';\nimport SourcesBuilder from './Builders/sourcesBuilder.js';\n\nclass Sources {\n    constructor(apiKey, returnType) {\n        this.apiKey = apiKey;\n        this.returnType = returnType;\n    }\n\n    /**\n     * Gets all sources of economic data.\n     * @param {Object} params\n     * @returns {Promise} Resolves with all sources of economic data or errors out\n     */\n    getAllSources(params) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SourcesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .getUrl();\n\n                api.get(`sources?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets a source of economic data.\n     * @param {Number} sourceId\n     * @param {Object} params\n     * @returns {Promise} Resolves with a source of economic data or errors out\n     */\n    getSource(sourceId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SourcesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setSourceId(sourceId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .getUrl();\n\n                api.get(`source?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the releases for a source.\n     * @param {Number} sourceId\n     * @param {Object} params\n     * @returns {Promise} Resolves with the releases for a source or errors out\n     */\n    getReleasesForSource(sourceId, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new SourcesBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setSourceId(sourceId)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .getUrl();\n\n                api.get(`source/releases?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n}\n\nexport default Sources;\n","import Builder from './builder.js';\n\nclass TagsBuilder extends Builder {\n}\n\nexport default TagsBuilder;\n","import api from '../api.js';\nimport TagsBuilder from './Builders/tagsBuilder.js';\n\nclass Tags {\n    constructor(apiKey, returnType) {\n        this.apiKey = apiKey;\n        this.returnType = returnType;\n    }\n\n    /**\n     * Gets all tags, search for tags, or get tags by name.\n     * @param {Object} params\n     * @returns {Promise} Resolves with a set of tags or errors out\n     */\n    getAllTags(params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new TagsBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setTagNames(params)\n                    .setTagGroupId(params)\n                    .setSearchText(params)\n                    .getUrl();\n\n                api.get(`tags?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Get the related tags for one or more tags.\n     * @param {string} tagNames\n     * @param {Object} params\n     * @returns {Promise} Resolves with the related tags for one or more tags or errors out\n     */\n    getAllRelatedTags(tagNames, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new TagsBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setTagNames(tagNames)\n                    .setExcludeTagNames(params)\n                    .setTagGroupId(params)\n                    .setSearchText(params)\n                    .getUrl();\n\n                api.get(`related_tags?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n\n    /**\n     * Gets the series matching tags.\n     * @param {string} tagNames\n     * @param {Object} params\n     * @returns {Promise} Resolves with the series matching tags or errors out\n     */\n    getAllSeriesMatchingTags(tagNames, params = {}) {\n        return new Promise((resolve, reject) => {\n            try {\n                const url = new TagsBuilder()\n                    .setAPIKey(this.apiKey)\n                    .setFileType(this.returnType)\n                    .setRealTimeStart(params)\n                    .setRealTimeEnd(params)\n                    .setLimit(params)\n                    .setOffset(params)\n                    .setOrderBy(params)\n                    .setSortOrder(params)\n                    .setTagNames({ tag_names: tagNames })\n                    .setExcludeTagNames(params)\n                    .getUrl();\n\n                api.get(`tags/series?${url}`)\n                    .then((res) => {\n                        resolve(res.data);\n                    })\n                    .catch((err) => {\n                        reject(err.response.data);\n                    });\n            } catch (e) {\n                reject(e);\n            }\n        });\n    }\n}\n\nexport default Tags;\n"],"mappings":"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","names":["axios"]}