fixer-api
Version:
fixer.io API client in TypeScript
213 lines (184 loc) • 7.81 kB
JavaScript
var fixerApi = (function () {
'use strict';
function getDefaultExportFromCjs (x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}
var index_browser$1 = {};
var NodeFixer = {};
var Fixer = {};
var constants = {};
var hasRequiredConstants;
function requireConstants () {
if (hasRequiredConstants) return constants;
hasRequiredConstants = 1;
Object.defineProperty(constants, "__esModule", { value: true });
constants.DEFAULT_URL = undefined;
constants.DEFAULT_URL = 'http://data.fixer.io/api';
return constants;
}
var formatDate = {};
var hasRequiredFormatDate;
function requireFormatDate () {
if (hasRequiredFormatDate) return formatDate;
hasRequiredFormatDate = 1;
Object.defineProperty(formatDate, "__esModule", { value: true });
formatDate.ensureDateString = ensureDateString;
formatDate.default = formatDate$1;
const padNumber = (num) => (num < 10 ? `0${num}` : num.toString());
function ensureDateString(input) {
const RE_DATE = /^\d{4}-\d{2}-\d{2}$/;
if (typeof input === 'string' && RE_DATE.test(input)) {
return input;
}
if (input instanceof Date) {
return formatDate$1(input);
}
throw new TypeError(`Invalid date argument: ${input}`);
}
function formatDate$1(date) {
return `${date.getUTCFullYear()}-${padNumber(date.getMonth() + 1)}-${padNumber(date.getDate())}`;
}
return formatDate;
}
var hasRequiredFixer;
function requireFixer () {
if (hasRequiredFixer) return Fixer;
hasRequiredFixer = 1;
var __awaiter = (Fixer.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(Fixer, "__esModule", { value: true });
Fixer.Fixer = undefined;
const constants_1 = requireConstants();
const formatDate_1 = requireFormatDate();
let Fixer$1 = class Fixer {
constructor(opts = {}) {
this.basicOptions = {
baseUrl: opts.baseUrl || constants_1.DEFAULT_URL,
accessKey: opts.accessKey
};
}
set({ baseUrl, accessKey } = {}) {
this.basicOptions.baseUrl = baseUrl || this.basicOptions.baseUrl;
this.basicOptions.accessKey = accessKey || this.basicOptions.accessKey;
return this;
}
forDate(date_1) {
return __awaiter(this, arguments, undefined, function* (date, opts = {}) {
return this.request(`/${(0, formatDate_1.ensureDateString)(date)}`, opts);
});
}
latest() {
return __awaiter(this, arguments, undefined, function* (opts = {}) {
return this.request('/latest', opts);
});
}
symbols() {
return __awaiter(this, arguments, undefined, function* (opts = {}) {
return this.request('/symbols', opts);
});
}
convert(from, to, amount, date) {
return __awaiter(this, undefined, undefined, function* () {
return this.request('/convert', {
from,
to,
amount,
date
});
});
}
timeseries(startDate_1, endDate_1) {
return __awaiter(this, arguments, undefined, function* (startDate, endDate, opts = {}) {
const start = (0, formatDate_1.ensureDateString)(startDate);
const end = (0, formatDate_1.ensureDateString)(endDate);
return this.request('/timeseries', Object.assign({ start_date: start, end_date: end }, opts));
});
}
};
Fixer.Fixer = Fixer$1;
return Fixer;
}
var stringifyOptions = {};
var hasRequiredStringifyOptions;
function requireStringifyOptions () {
if (hasRequiredStringifyOptions) return stringifyOptions;
hasRequiredStringifyOptions = 1;
Object.defineProperty(stringifyOptions, "__esModule", { value: true });
stringifyOptions.default = stringifyOptions$1;
function stringifyOptions$1(opts) {
return Object.entries(opts)
.map(([key, value]) => `${key}=${encodeURIComponent(`${value instanceof Array ? value.join(',') : value}`)}`)
.join('&');
}
return stringifyOptions;
}
var hasRequiredNodeFixer;
function requireNodeFixer () {
if (hasRequiredNodeFixer) return NodeFixer;
hasRequiredNodeFixer = 1;
var __awaiter = (NodeFixer.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(NodeFixer, "__esModule", { value: true });
const Fixer_1 = requireFixer();
const stringifyOptions_1 = requireStringifyOptions();
let NodeFixer$1 = class NodeFixer extends Fixer_1.Fixer {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
constructor(fetch, ...restParams) {
super(...restParams);
this.fetch = fetch;
}
request(path, opts) {
return __awaiter(this, undefined, undefined, function* () {
const accessKey = opts.access_key || this.basicOptions.accessKey;
if (!accessKey) {
throw new Error('access_key is required to use fixer');
}
const filteredOptions = Object.entries(opts).reduce((acc, [key, value]) => (Object.assign(Object.assign({}, acc), (value ? { [key]: value } : {}))), {
access_key: accessKey
});
const url = `${this.basicOptions.baseUrl}${path}`;
const response = yield this.fetch(`${url}?${(0, stringifyOptions_1.default)(filteredOptions)}`);
let jsonResponse;
try {
jsonResponse = yield response.json();
}
catch (_a) {
throw new Error(`Request to ${url} resulted in non-JSON response`);
}
if (jsonResponse.error) {
throw new Error(`${jsonResponse.error.type}: ${jsonResponse.error.info}`);
}
return jsonResponse;
});
}
};
NodeFixer.default = NodeFixer$1;
return NodeFixer;
}
var hasRequiredIndex_browser;
function requireIndex_browser () {
if (hasRequiredIndex_browser) return index_browser$1;
hasRequiredIndex_browser = 1;
Object.defineProperty(index_browser$1, "__esModule", { value: true });
const NodeFixer_1 = requireNodeFixer();
index_browser$1.default = new NodeFixer_1.default(window.fetch.bind(window));
return index_browser$1;
}
var index_browserExports = requireIndex_browser();
var index_browser = /*@__PURE__*/getDefaultExportFromCjs(index_browserExports);
return index_browser;
})();