africastalking-ts
Version:
Unofficial Typescript version of the Africa's Talking SDK
57 lines (47 loc) • 1.74 kB
text/typescript
import { Schema } from 'joi';
import chalk from 'chalk';
import axios from 'axios';
import { SendRequestOptions } from './misc.types';
import { getUrl } from './getUrl';
export const validateJoiSchema = <T>(schema: Schema, data: any): T => {
const { error, value } = schema.validate(data);
if (error) {
const combinedMessages = error.details.map((d) => d.message).join(';');
throw new Error(combinedMessages);
}
return value;
};
export const sendRequest = <Response, PostData = null, Params = any>(
opts: SendRequestOptions<PostData, Params>,
): Promise<Response> => {
const {
endpointCategory, username, method, data = null, headers, params,
} = opts;
return axios({
url: getUrl(endpointCategory, username),
method,
data,
headers,
params,
}).then((value) => {
if (![200, 201].includes(value.status)) {
return Promise.reject(value.data);
}
return Promise.resolve(value.data);
});
};
export const showDeprecationWarning = (
oldFunctionName: string,
newFunctionName: string | undefined,
releaseType: 'minor' | 'major' = 'major',
link: string = 'https://github.com/tawn33y/africastalking-ts/blob/main/README.md#note-this-is-a-breaking-version',
): void => {
const header = '\nDeprecation warning:';
let msg = `\n ${chalk.bold(oldFunctionName)} is being deprecated and will be removed in upcoming ${chalk.bold(releaseType)} release.`;
msg += newFunctionName
? (`\n Please use ${chalk.bold(newFunctionName)}instead.`)
: '';
msg += `\n For more information, please refer to ${chalk.underline(link)}.`;
// eslint-disable-next-line no-console
console.warn(`${chalk.bold.bgHex('#D15E00')(header)}${chalk.keyword('orange')(msg)}`);
};