@bestieapp/tiktok-marketing-api
Version:
Marketing API for TikTok
64 lines (63 loc) • 2.27 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const crypto_1 = require("crypto");
const fs_1 = require("fs");
const object_1 = __importDefault(require("../object"));
const types_1 = require("./types");
class TikTokVideo extends object_1.default {
static get ENDPOINT() {
return "file/video";
}
async getVideosInfo(advertiserId, videoIds) {
return this.get(`${TikTokVideo.ENDPOINT}/ad/info`, {
video_ids: videoIds,
advertiser_id: advertiserId,
});
}
async searchForVideos(advertiserId, options = {}) {
return this.get(`${TikTokVideo.ENDPOINT}/ad/search`, {
advertiser_id: advertiserId,
...options,
});
}
async uploadVideoByFile(filePath, request) {
const hash = await this.createFileHash(filePath);
return this.uploadVideo({
...request,
upload_type: types_1.UploadType.UPLOAD_BY_FILE,
video_file: (0, fs_1.createReadStream)(filePath),
video_signature: hash,
});
}
uploadVideo(request) {
return this.formDataPost(this.formatEndpoint("ad/upload"), request);
}
createFileHash(filePath, algorithm = "md5") {
// Algorithm depends on availability of OpenSSL on platform
// Another algorithms: 'sha1', 'md5', 'sha256', 'sha512' ...
return new Promise((resolve, reject) => {
const shasum = (0, crypto_1.createHash)(algorithm);
try {
const stream = (0, fs_1.createReadStream)(filePath);
stream.on("data", function (data) {
shasum.update(data);
});
// making digest
stream.on("end", function () {
const hash = shasum.digest("hex");
return resolve(hash);
});
}
catch (error) {
return reject("calc fail");
}
});
}
formatEndpoint(endpoint) {
return `${TikTokVideo.ENDPOINT}/${endpoint}`;
}
}
exports.default = TikTokVideo;