@c8y/client
Version:
Client application programming interface to access the Cumulocity IoT-Platform REST services.
87 lines • 3.15 kB
JavaScript
import { __awaiter } from "tslib";
import fetch from 'cross-fetch';
// eslint-disable-next-line prefer-const
let auths = new WeakMap();
export class FetchClient {
constructor(authOrBaseUrl, baseUrl) {
this.baseUrl = baseUrl;
this.tenant = '';
this.defaultHeaders = {};
if (typeof authOrBaseUrl === 'string') {
baseUrl = authOrBaseUrl;
}
else {
this.setAuth(authOrBaseUrl);
}
this.baseUrl = this.resolveServerUrl(baseUrl);
}
setAuth(auth) {
auths.set(this, auth);
}
fetch(url, init) {
return __awaiter(this, void 0, void 0, function* () {
let fetchFn = fetch;
try {
fetchFn = window.fetch || fetchFn;
}
catch (e) {
/* do nothing */
}
const fullUrl = this.getUrl(url, init);
const options = this.getFetchOptions(init);
const optionsWithAdjustedBody = this.adjustOptionsForFormData(options);
return fetchFn(fullUrl, optionsWithAdjustedBody);
});
}
getUrl(url = '', options) {
const params = options && options.params;
let paramPart = '';
if (params && Object.keys(params).length) {
paramPart = Object.keys(params)
.map(k => {
let vals = params[k];
const encodedKey = encodeURIComponent(k);
if (!Array.isArray(vals)) {
vals = [vals];
}
return vals.map(v => `${encodedKey}=${encodeURIComponent(v)}`).join('&');
})
.join('&');
paramPart = `?${paramPart}`;
}
const baseUrl = this.baseUrl.replace(/\/+$/, '').replace(/^\/+/, '');
const partialUrl = url.replace(/\/+$/, '').replace(/^\/+/, '');
return `${baseUrl}/${partialUrl}${paramPart}`;
}
getFetchOptions(options = {}) {
let clonedOptions = Object.assign({}, options);
const auth = auths.get(this);
clonedOptions.headers = Object.assign({}, this.defaultHeaders, clonedOptions.headers, {
UseXBasic: true
});
delete clonedOptions.params;
clonedOptions = auth ? auth.getFetchOptions(clonedOptions) : clonedOptions;
return clonedOptions;
}
getCometdHandshake(config = {}) {
const auth = auths.get(this);
return auth ? auth.getCometdHandshake(config) : config;
}
resolveServerUrl(baseUrl = '') {
if (baseUrl && baseUrl.startsWith('http')) {
return baseUrl.replace(/\/+$/, '');
}
try {
const location = window.location;
return `${location.protocol}//${location.host}/${baseUrl.replace(/\/+$/, '')}`;
}
catch (ex) {
throw Error('Your environment does not support relative URLs. Please provide a base URL.');
}
}
adjustOptionsForFormData(options) {
const newOptions = Object.assign(options, { body: options.body });
return newOptions;
}
}
//# sourceMappingURL=FetchClient.js.map