From 7e1e7f17153d99efbb9bca7b6cff9b1e8be43f4e Mon Sep 17 00:00:00 2001 From: Jack Willis-Craig Date: Sun, 14 Oct 2018 19:56:42 +1000 Subject: [PATCH] refactor: group types imported by main API using an import alias --- src/index.ts | 135 +++++++++++++++++++-------------------------------- 1 file changed, 50 insertions(+), 85 deletions(-) diff --git a/src/index.ts b/src/index.ts index f55b26a..c1b5dc9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,59 +4,24 @@ import * as JSONBig from 'json-bigint'; import * as qs from 'qs'; import { CookieJar } from 'tough-cookie'; +import * as API from './types'; import { encryptWithXOR } from './cryptography'; -import { - BaseRequestParams, - BaseResponseData, - FollowRequest, - FollowResponse, - HashtagSearchResponse, - JoinLiveStreamResponse, - LikePostRequest, - LikePostResponse, - ListCategoriesRequest, - ListCategoriesResponse, - ListCommentsRequest, - ListCommentsResponse, - ListFeedRequest, - ListFeedResponse, - ListFollowersRequest, - ListFollowersResponse, - ListFollowingRequest, - ListFollowingResponse, - ListForYouFeedResponse, - ListPostsRequest, - ListPostsResponse, - LiveStreamRequest, - LoginRequest, - LoginResponse, - PostCommentRequest, - PostCommentResponse, - RequiredUserDefinedRequestParams, - SearchRequest, - StaticRequestParams, - Tag, - TikTokAPIConfig, - UserProfileResponse, - UserSearchRequest, - UserSearchResponse, -} from './types'; import { FeedType, PullType } from './feed'; import { paramsOrder, paramsSerializer, withDefaultListParams } from './params'; export default class TikTokAPI { - readonly config: TikTokAPIConfig; + readonly config: API.TikTokAPIConfig; readonly cookieJar: CookieJar; readonly request: AxiosInstance; /** * Creates a new API instance. * - * @param {StaticRequestParams} requestParams + * @param {StaticRequestParams} reqParams * @param {TikTokAPIConfig} apiConfig * @param {AxiosRequestConfig} requestConfig */ - constructor(requestParams: StaticRequestParams, apiConfig: TikTokAPIConfig, requestConfig?: AxiosRequestConfig) { + constructor(reqParams: API.StaticRequestParams, apiConfig: API.TikTokAPIConfig, requestConfig?: AxiosRequestConfig) { if (typeof apiConfig.signURL !== 'function') { throw new Error('You must supply a signURL function to the TikTokAPI config'); } @@ -64,11 +29,11 @@ export default class TikTokAPI { this.config = { baseURL: 'https://api2.musical.ly/', host: 'api2.musical.ly', - userAgent: `com.zhiliaoapp.musically/${requestParams.manifest_version_code}` - + ` (Linux; U; Android ${requestParams.os_version}; ${requestParams.language}_${requestParams.region};` - + ` ${requestParams.device_type}; Build/NHG47Q; Cronet/58.0.2991.0)`, + userAgent: `com.zhiliaoapp.musically/${reqParams.manifest_version_code}` + + ` (Linux; U; Android ${reqParams.os_version}; ${reqParams.language}_${reqParams.region};` + + ` ${reqParams.device_type}; Build/NHG47Q; Cronet/58.0.2991.0)`, ...apiConfig, - } as TikTokAPIConfig; + } as API.TikTokAPIConfig; this.cookieJar = new CookieJar(); this.request = axios.create({ @@ -81,7 +46,7 @@ export default class TikTokAPI { 'user-agent': this.config.userAgent, }, jar: this.cookieJar, - params: requestParams, + params: reqParams, transformResponse: this.transformResponse, withCredentials: true, ...requestConfig, @@ -115,8 +80,8 @@ export default class TikTokAPI { * @param {LoginRequest} params * @returns {AxiosPromise} */ - login = (params: LoginRequest) => - this.request.post('passport/user/login/', null, { params }) + login = (params: API.LoginRequest) => + this.request.post('passport/user/login/', null, { params }) /** * Gets a user's profile. @@ -125,7 +90,7 @@ export default class TikTokAPI { * @returns {AxiosPromise} */ getUser = (userId: string) => - this.request.get('aweme/v1/user/', { params: { user_id: userId } }) + this.request.get('aweme/v1/user/', { params: { user_id: userId } }) /** * Searches for users. @@ -133,8 +98,8 @@ export default class TikTokAPI { * @param params * @returns {AxiosPromise} */ - searchUsers = (params: UserSearchRequest) => - this.request.get('aweme/v1/discover/search/', { + searchUsers = (params: API.UserSearchRequest) => + this.request.get('aweme/v1/discover/search/', { params: withDefaultListParams(params), }) @@ -144,8 +109,8 @@ export default class TikTokAPI { * @param {ListPostsRequest} params * @returns {AxiosPromise} */ - listPosts = (params: ListPostsRequest) => - this.request.get('aweme/v1/aweme/post/', { + listPosts = (params: API.ListPostsRequest) => + this.request.get('aweme/v1/aweme/post/', { params: withDefaultListParams(params), }) @@ -155,8 +120,8 @@ export default class TikTokAPI { * @param {ListFollowersRequest} params * @returns {AxiosPromise} */ - listFollowers = (params: ListFollowersRequest) => - this.request.get('aweme/v1/user/follower/list/', { + listFollowers = (params: API.ListFollowersRequest) => + this.request.get('aweme/v1/user/follower/list/', { params: withDefaultListParams(params), }) @@ -166,8 +131,8 @@ export default class TikTokAPI { * @param {ListFollowingRequest} params * @returns {AxiosPromise} */ - listFollowing = (params: ListFollowingRequest) => - this.request.get('aweme/v1/user/following/list/', { + listFollowing = (params: API.ListFollowingRequest) => + this.request.get('aweme/v1/user/following/list/', { params: withDefaultListParams(params), }) @@ -178,8 +143,8 @@ export default class TikTokAPI { * @returns {AxiosPromise} */ follow = (userId: string) => - this.request.get('aweme/v1/commit/follow/user/', { - params: { + this.request.get('aweme/v1/commit/follow/user/', { + params: { user_id: userId, type: 1, }, @@ -192,8 +157,8 @@ export default class TikTokAPI { * @returns {AxiosPromise} */ unfollow = (userId: string) => - this.request.get('aweme/v1/commit/follow/user/', { - params: { + this.request.get('aweme/v1/commit/follow/user/', { + params: { user_id: userId, type: 0, }, @@ -206,8 +171,8 @@ export default class TikTokAPI { * @returns {AxiosPromise} */ likePost = (postId: string) => - this.request.get('aweme/v1/commit/item/digg/', { - params: { + this.request.get('aweme/v1/commit/item/digg/', { + params: { aweme_id: postId, type: 1, }, @@ -220,8 +185,8 @@ export default class TikTokAPI { * @returns {AxiosPromise} */ unlikePost = (postId: string) => - this.request.get('aweme/v1/commit/item/digg/', { - params: { + this.request.get('aweme/v1/commit/item/digg/', { + params: { aweme_id: postId, type: 0, }, @@ -232,9 +197,9 @@ export default class TikTokAPI { * * @param params */ - listComments = (params: ListCommentsRequest) => - this.request.get('aweme/v1/comment/list/', { - params: withDefaultListParams({ + listComments = (params: API.ListCommentsRequest) => + this.request.get('aweme/v1/comment/list/', { + params: withDefaultListParams({ comment_style: 2, digged_cid: '', insert_cids: '', @@ -249,10 +214,10 @@ export default class TikTokAPI { * @param text * @param tags */ - postComment = (postId: string, text: string, tags: Tag[] = []) => - this.request.post( + postComment = (postId: string, text: string, tags: API.Tag[] = []) => + this.request.post( 'aweme/v1/comment/publish/', - qs.stringify({ + qs.stringify({ text, aweme_id: postId, text_extra: tags, @@ -270,8 +235,8 @@ export default class TikTokAPI { * * @param params */ - listCategories = (params: ListCategoriesRequest = { count: 10, cursor: 0 }) => - this.request.get('aweme/v1/category/list/', { + listCategories = (params: API.ListCategoriesRequest = { count: 10, cursor: 0 }) => + this.request.get('aweme/v1/category/list/', { params: withDefaultListParams(params), }) @@ -281,8 +246,8 @@ export default class TikTokAPI { * @param params * @returns {AxiosPromise} */ - searchHashtags = (params: SearchRequest) => - this.request.get('aweme/v1/challenge/search/', { + searchHashtags = (params: API.SearchRequest) => + this.request.get('aweme/v1/challenge/search/', { params: withDefaultListParams(params), }) @@ -293,9 +258,9 @@ export default class TikTokAPI { * * @param params */ - listForYouFeed = (params?: ListFeedRequest) => - this.request.get('aweme/v1/feed/', { - params: withDefaultListParams({ + listForYouFeed = (params?: API.ListFeedRequest) => + this.request.get('aweme/v1/feed/', { + params: withDefaultListParams({ count: 6, is_cold_start: 1, max_cursor: 0, @@ -312,9 +277,9 @@ export default class TikTokAPI { * * @param params */ - listFollowingFeed = (params?: ListFeedRequest) => - this.request.get('aweme/v1/feed/', { - params: withDefaultListParams({ + listFollowingFeed = (params?: API.ListFeedRequest) => + this.request.get('aweme/v1/feed/', { + params: withDefaultListParams({ count: 6, is_cold_start: 1, max_cursor: 0, @@ -330,8 +295,8 @@ export default class TikTokAPI { * @param id */ joinLiveStream = (id: string) => - this.request.get('aweme/v1/room/enter/', { - params: { + this.request.get('aweme/v1/room/enter/', { + params: { room_id: id, }, }) @@ -342,8 +307,8 @@ export default class TikTokAPI { * @param id */ leaveLiveStream = (id: string) => - this.request.get('aweme/v1/room/leave/', { - params: { + this.request.get('aweme/v1/room/leave/', { + params: { room_id: id, }, }) @@ -377,7 +342,7 @@ export default class TikTokAPI { ...config.params, ts, _rticket: new Date().getTime(), - } as BaseRequestParams; + } as API.BaseRequestParams; const url = `${config.baseURL}${config.url}?${config.paramsSerializer(params)}`; const signedURL = await this.config.signURL(url, ts, this.request.defaults.params.device_id); @@ -396,7 +361,7 @@ export default class TikTokAPI { * @param {RequiredUserDefinedRequestParams} requestParams * @returns {StaticRequestParams} */ -export const getRequestParams = (requestParams: RequiredUserDefinedRequestParams): StaticRequestParams => ({ +export const getRequestParams = (requestParams: API.RequiredUserDefinedRequestParams): API.StaticRequestParams => ({ os_api: '23', device_type: 'Pixel', ssmix: 'a',