Version:
SDK for interfacing with WhatsApp Business Platform in Typescript or Node.js using the Cloud API, hosted by Meta.
84 lines (74 loc) • 2.16 kB
text/typescript
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the license found in the
* LICENSE file in the root directory of this source tree.
*/
import Logger from './logger';
import HttpsClient from './httpsClient';
import { HttpMethodsEnum } from './types/enums';
import { RequesterClass, GeneralHeaderInterface } from './types/requester';
const LIB_NAME = 'REQUESTER';
const LOG_LOCAL = false;
const LOGGER = new Logger(LIB_NAME, process.env.DEBUG === 'true' || LOG_LOCAL);
export default class Requester implements RequesterClass {
client: Readonly<HttpsClient>;
accessToken: Readonly<string>;
phoneNumberId: Readonly<number>;
businessAcctId: Readonly<string>;
apiVersion: Readonly<string>;
userAgent: Readonly<string>;
host: Readonly<string>;
protocol: Readonly<string> = 'https:';
port: Readonly<number> = 443;
constructor(
host: string,
apiVersion: string,
phoneNumberId: number,
accessToken: string,
businessAcctId: string,
userAgent: string,
) {
this.client = new HttpsClient();
this.host = host;
this.apiVersion = apiVersion;
this.phoneNumberId = phoneNumberId;
this.accessToken = accessToken;
this.businessAcctId = businessAcctId;
this.userAgent = userAgent;
}
buildHeader(contentType: string): GeneralHeaderInterface {
const headers: GeneralHeaderInterface = {
'Content-Type': contentType,
'Authorization': `Bearer ${this.accessToken}`,
'User-Agent': this.userAgent,
};
return headers;
}
buildCAPIPath(endpoint: string): string {
return `/${this.apiVersion}/${this.phoneNumberId}/${endpoint}`;
}
async sendCAPIRequest(
method: HttpMethodsEnum,
endpoint: string,
timeout: number,
body?: any,
) {
const contentType = 'application/json';
LOGGER.log(
`${method} : ${this.protocol.toLowerCase()}//${this.host}:${
this.port
}/${this.buildCAPIPath(endpoint)}`,
);
return await this.client.sendRequest(
this.host,
this.port,
this.buildCAPIPath(endpoint),
method,
this.buildHeader(contentType),
timeout,
method == 'POST' || method == 'PUT' ? body : undefined,
);
}
}