sipgateio
Version:
The official Node.js library for sipgate.io
123 lines • 5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sipgateIO = void 0;
const detect_browser_1 = require("detect-browser");
const errors_1 = require("../errors");
const utils_1 = require("../../utils");
const validator_1 = require("../validator");
const validatePersonalAccessToken_1 = require("../validator/validatePersonalAccessToken");
const version_json_1 = require("../../version.json");
const axios_1 = __importDefault(require("axios"));
const qs_1 = __importDefault(require("qs"));
const parseRawDeserializedValue = (value) => {
return value === null
? null
: value instanceof Array
? value.map(parseRawDeserializedValue)
: typeof value === 'object'
? parseDatesInObject(value)
: typeof value === 'string'
? parseIfDate(value)
: value;
};
const parseDatesInObject = (data) => {
const newData = {};
Object.keys(data).forEach((key) => {
const value = data[key];
newData[key] = parseRawDeserializedValue(value);
});
return newData;
};
const parseIfDate = (maybeDate) => {
const regexISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d+)?)(?:Z|([+-])([\d|:]*))?$/;
if (maybeDate.match(regexISO)) {
return new Date(maybeDate);
}
return maybeDate;
};
const sipgateIO = (credentials) => {
const authorizationHeader = getAuthHeader(credentials);
const platformInfo = (0, detect_browser_1.detect)();
const client = axios_1.default.create({
baseURL: 'https://api.sipgate.com/v2',
headers: {
Authorization: authorizationHeader,
Accept: 'application/json',
'Content-Type': 'application/json',
'X-Sipgate-Client': JSON.stringify(platformInfo),
'X-Sipgate-Version': version_json_1.version,
},
paramsSerializer: (params) => qs_1.default.stringify(params, { arrayFormat: 'repeat' }),
});
client.interceptors.response.use((response) => {
response.data = parseRawDeserializedValue(response.data);
return response;
});
return {
delete(url, config) {
return client.delete(url, config).then((response) => response.data);
},
get(url, config) {
return client.get(url, config).then((response) => response.data);
},
patch(url, data, config) {
return client
.patch(url, data, config)
.then((response) => response.data);
},
post(url, data, config) {
return client
.post(url, data, config)
.then((response) => response.data);
},
put(url, data, config) {
return client.put(url, data, config).then((response) => response.data);
},
getAuthenticatedWebuserId() {
return client
.get('authorization/userinfo')
.then((response) => response.data.sub)
.catch((error) => Promise.reject((0, errors_1.handleCoreError)(error)));
},
getWebUsers() {
return client
.get('users')
.then((response) => response.data.items)
.catch((error) => Promise.reject((0, errors_1.handleCoreError)(error)));
},
};
};
exports.sipgateIO = sipgateIO;
const getAuthHeader = (credentials) => {
if ('tokenId' in credentials) {
const tokenIDValidationResult = (0, validator_1.validateTokenID)(credentials.tokenId);
if (!tokenIDValidationResult.isValid) {
throw new Error(tokenIDValidationResult.cause);
}
const tokenValidationResult = (0, validatePersonalAccessToken_1.validatePersonalAccessToken)(credentials.token);
if (!tokenValidationResult.isValid) {
throw new Error(tokenValidationResult.cause);
}
return `Basic ${(0, utils_1.toBase64)(`${credentials.tokenId}:${credentials.token}`)}`;
}
if ('token' in credentials) {
const tokenValidationResult = (0, validator_1.validateOAuthToken)(credentials.token);
if (!tokenValidationResult.isValid) {
throw new Error(tokenValidationResult.cause);
}
return `Bearer ${credentials.token}`;
}
const emailValidationResult = (0, validator_1.validateEmail)(credentials.username);
if (!emailValidationResult.isValid) {
throw new Error(emailValidationResult.cause);
}
const passwordValidationResult = (0, validator_1.validatePassword)(credentials.password);
if (!passwordValidationResult.isValid) {
throw new Error(passwordValidationResult.cause);
}
return `Basic ${(0, utils_1.toBase64)(`${credentials.username}:${credentials.password}`)}`;
};
//# sourceMappingURL=sipgateIOClient.js.map