@bestieapp/tiktok-marketing-api
Version:
Marketing API for TikTok
77 lines (76 loc) • 2.66 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const form_data_1 = __importDefault(require("form-data"));
const axios_1 = __importDefault(require("axios"));
class TikTokApi {
constructor(accessToken = null, debug = false) {
this.accessToken = accessToken;
this.debug = debug;
TikTokApi.defaultApi = this;
}
static get VERSION() {
return process.env.TIKTOK_VERSION || "v1.3";
}
static get API() {
return `https://business-api.tiktok.com/open_api/${TikTokApi.VERSION}`;
}
async call(method, path, body = {}, params = {}, headers = {
"Content-Type": "application/json",
}) {
const reqParams = this.serializeParams(params);
if (this.accessToken) {
reqParams.access_token = this.accessToken;
headers["Access-Token"] = this.accessToken;
}
const url = `${TikTokApi.API}/${path}/`;
try {
const response = await axios_1.default.request({
method,
url,
params: reqParams,
headers,
data: this.formatRequestBody(body),
maxBodyLength: Infinity,
maxContentLength: Infinity,
});
if (this.debug)
this.logResponse(method, url, body, response.data);
return response.data;
}
catch (error) {
if (this.debug)
this.logError(method, url, body, error);
throw error;
}
}
formatRequestBody(body) {
let reqBody;
if (body instanceof form_data_1.default) {
reqBody = body;
}
else if (Object.keys(body).length)
reqBody = JSON.stringify(body);
return reqBody;
}
serializeParams(params) {
const serializedParams = {};
for (const key in params) {
if (Array.isArray(params[key]))
serializedParams[key] = JSON.stringify(params[key]);
else
serializedParams[key] = params[key];
}
return serializedParams;
}
logResponse(method, url, body, response) {
console.log(`200 ${method} ${url} ${JSON.stringify(body)}`);
console.log(`Response: ${response ? JSON.stringify(response) : ""}`);
}
logError(method, url, body, response) {
console.log(`${response.statusCode} ${method} ${url} ${JSON.stringify(body)}`);
}
}
exports.default = TikTokApi;